diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..b78b9b91a2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,36 @@ + + +**Application Version** + + +**Platform** + + +**Qt** + + +**PyQt** + + +**Display Driver** + + +**Steps to Reproduce** + + +**Actual Results** + + +**Expected results** + + +**Additional Information** + diff --git a/.gitignore b/.gitignore index f67add62cf..71e83433cf 100644 --- a/.gitignore +++ b/.gitignore @@ -33,18 +33,23 @@ cura.desktop .settings #Externally located plug-ins. -plugins/CuraSolidWorksPlugin -plugins/Doodle3D-cura-plugin -plugins/GodMode -plugins/PostProcessingPlugin -plugins/X3GWriter -plugins/FlatProfileExporter -plugins/ProfileFlattener -plugins/cura-god-mode-plugin plugins/cura-big-flame-graph +plugins/cura-god-mode-plugin plugins/cura-siemensnx-plugin -plugins/CuraVariSlicePlugin +plugins/CuraBlenderPlugin +plugins/CuraCloudPlugin plugins/CuraLiveScriptingPlugin +plugins/CuraOpenSCADPlugin +plugins/CuraPrintProfileCreator +plugins/CuraSolidWorksPlugin +plugins/CuraVariSlicePlugin +plugins/Doodle3D-cura-plugin +plugins/FlatProfileExporter +plugins/GodMode +plugins/OctoPrintPlugin +plugins/PostProcessingPlugin +plugins/ProfileFlattener +plugins/X3GWriter #Build stuff CMakeCache.txt diff --git a/CHANGES b/CHANGES deleted file mode 100644 index bd9c26751c..0000000000 --- a/CHANGES +++ /dev/null @@ -1,173 +0,0 @@ -Cura 15.06 Beta -=============== - -This is the *Beta* version of Cura 15.06. - -Cura 15.06 is a new release built from the ground up on a completely new -framework called Uranium. This framework has been designed to make it easier to -extend Cura with additional functionality as well as provide a cleaner UI. - -Changes since 15.05.95 ----------------------- - -* Fixed: Selection ghost remains visible after deleting an object -* Fixed: Window does not show up immediately after starting application on OSX -* Fixed: Added display of rotation angle during rotation -* Fixed: Object changes position while rotating/scaling -* Fixed: Loading improvements in the layer view -* Fixed: Added application icons -* Fixed: Improved feedback when loading models -* Fixed: Eject device on MacOSX now provides proper feedback -* Fixed: Make it possible to show retraction settings for UM2 -* Fixed: Opening the machine preferences page will switch to the first available machine -* Fixed: Improved tool handle hit area size -* Fixed: Render lines with a thickness based on screen DPI - -Changes since 15.05.94 ----------------------- - -* Added Russian translations -* Fixed: Infill not displayed in layer view -* Fixed: Cannot select/scale/rotate when first activating the tool and then trying to select a model. -* Fixed: Improved font rendering on Windows -* Fixed: Help > Show Documentation crashes Cura on Windows -* Fixed: "There is no disk in the drive" repeating messages on Windows -* Fixed: Retraction settings not visible for Ultimaker2 -* Fixed: Display rotation angle when rotating an object -* Fixed: Time/Quality slider values are properly rounded -* Fixed: Improved clarity of buttons and text -* Fixed: No indication that anything is happening when loading a model -* Fixed: Eject device now works on Windows - -Changes since 15.05.93 ----------------------- - -* Fixed: No shortcuts for moving up/down layers in layer view. -* Fixed: Last view layers could not be scrolled through in layer view. -* Fixed: Files provided on command line would not actually show up on the build - platform. -* Fixed: Render a ghost of the selection in Layer view to make the actual object - position clear. -* Fixed: Showing a menu would clear the selection. -* Fixed: Size and scaling factor display for scale tool. -* Fixed: Missing background for additional tool controls. -* Fixed: Loading message times out when loading large files. -* Fixed: Show recent files in the file menu. -* Fixed: Windows installer will now install MSVC 2010 redistributable, to - prevent issues with missing DLL's. -* Fixed: Collapsed/expanded state of setting categories not stored. - -Changes since 15.05.91 ----------------------- - -* There is now a working MacOSX version. Currently it supports OSX 10.7 and - higher. -* Fixed: Need to deselect before selecting a different object. -* Fixed: Object can be moved on Z axis. -* Fixed: Error values should be considered invalid values and will not trigger a - slice. -* Fixed: Text fields used a locale-aware validator while the underlying code did - not. -* Fixed: Text fields will trigger a slice on text change, not only after focus - change/enter press. -* Fixed: Rotate Tool snaps to incorrect value. -* Fixed: Object Collision would only moved objects to the right. -* Fixed: Object Collision would move the selected object when it should not. -* Fixed: Camera panning now works correctly instead of doing nothing. -* Fixed: Camera would flip around center point at maximum rotation. -* Fixed: Build platform grid blocked view from below objects. -* Fixed: Viewport on MacOSX with high-DPI screens was only taking 1/4th of the -window - -Changes since 15.05.90 ----------------------- - -* Fixed: Additional UI elements for tools and views not loading. -* Fixed: Double click needed to change setting dialog page. -* Fixed: Context menu entries (reload, center object, etc.) not working. -* Fixed: "Open With" or passing files from command line not working. -* Fixed: "Reload All" would not reload files. - -In addition, a lot of work has gone into getting a usable Mac OSX version. - -New Features ------------- - -* Plugin based system - The Uranium framework provides us with a plugin-based system - that provides additional flexibility when extending Cura. Think - of new views, tools, file formats, etc. This is probably the - biggest new feature. -* Improved UI - The UI has received a complete overhaul. -* Time-Quality Slider - The 4 static quick print profiles have been replaced with - a slider that should make it easier to find the right spot - between print time and print quality. -* More Settings - The Advanced mode is now configurable and can show many - additional settings that were previously not available, while at - the same time not overwhelming new users with too many settings. - Custom set of visible settings can be created by the user. -* Support for high-DPI screens - The refreshed UI has been designed with high-DPI screens in - mind which should improve the experience of Cura on such - devices. -* Improved language support - (Not yet available for the Beta release.) -* Improved support structure generation - The new version of the CuraEngine now features improved - support generation algorithms and additional options for support - structure generation. -* Experimental Feature: Wire Printing - Wire Printing has been added as an experimental new feature. It - will print objects as a structure of lines. It can be enabled by - from Advanced Mode -> Fixes -> Wire Printing. -* Undo/Redo - It is now possible to undo and redo most scene operations, like - moving or rotating objects. - -Features from earlier versions not (yet) in this release --------------------------------------------------------- - -* The All-at-once/One-at-a-time toggle is not available. - We are working on an improved implementation of this mechanism - but it will not be available for this release. -* No dual extrusion features are available yet. - We are working on a completely new workflow for this but this - needs additional time. -* “Lay Flat” has been removed. - The existing implementation was unfortunately not salvageable. - We will be looking into an improved implementation for this - feature. -* "Split Object Into Parts" has been removed. - Due to the same reason as Lay Flat. -* Support for AMF and DAE file formats has been removed. - Both of these will be implemented as plugins in the future. -* Support for directly loading a GCode file is not yet available. - This will be implemented as a plugin in the future. -* Support for PNG, JPG and other image formats has been removed. - These can be supported by a plugin with an improved UI. -* Support for loading Minecraft levels has been removed. - This can be implemented as a plugin. -* Windows XP support has been dropped. - Microsoft is no longer supporting xp, so they no longer back - port certain features that we require. -* X-Ray view is missing. - Will be implemented as a (you might have guessed it) plugin. -* Fixes: Follow Mesh Surface - Has been removed from the engine, the same result can be - achieved using no infill or top/bottom layers. - -Known Issues ------------- - -For an up to date list of all known issues, please see -https://github.com/Ultimaker/Cura/issues and -https://github.com/Ultimaker/Uranium/issues . - -* Some OBJ files are rendered as black objects due to missing - normals. -* Disabling plugins does not work correctly yet. -* Unicorn occasionally still requires feeding. Do not feed it - after midnight. diff --git a/README.md b/README.md index ba6a986093..6ea839a300 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,16 @@ Cura ==== - -This is the new, shiny frontend for Cura. [daid/Cura](https://github.com/daid/Cura.git) is the old legacy Cura that everyone knows and loves/hates. - -We re-worked the whole GUI code at Ultimaker, because the old code started to become a unmaintainable. - +This is the new, shiny frontend for Cura. Check [daid/LegacyCura](https://github.com/daid/LegacyCura) for the legacy Cura that everyone knows and loves/hates. We re-worked the whole GUI code at Ultimaker, because the old code started to become unmaintainable. Logging Issues ------------ -Use [this](https://github.com/Ultimaker/Uranium/wiki/Bug-Reporting-Template) template to report issues. New issues that do not adhere to this template will take us a lot longer to handle and will therefore have a lower pirority. - For crashes and similar issues, please attach the following information: * (On Windows) The log as produced by dxdiag (start -> run -> dxdiag -> save output) * The Cura GUI log file, located at - * %APPDATA%\cura\\``\cura.log (Windows), or usually C:\Users\\``\AppData\Roaming\cura\\``\cura.log - * $User/Library/Application Support/cura/``/cura.log (OSX) - * $USER/.local/share/cura/``/cura.log (Ubuntu/Linux) + * `%APPDATA%\cura\\cura.log` (Windows), or usually `C:\Users\\\AppData\Roaming\cura\\cura.log` + * `$USER/Library/Application Support/cura//cura.log` (OSX) + * `$USER/.local/share/cura//cura.log` (Ubuntu/Linux) If the Cura user interface still starts, you can also reach this directory from the application menu in Help -> Show settings folder @@ -24,53 +18,26 @@ For additional support, you could also ask in the #cura channel on FreeNode IRC. Dependencies ------------ - -* [Uranium](https://github.com/Ultimaker/Uranium) - Cura is built on top of the Uranium framework. -* [CuraEngine](https://github.com/Ultimaker/CuraEngine) - This will be needed at runtime to perform the actual slicing. -* [PySerial](https://github.com/pyserial/pyserial) - Only required for USB printing support. -* [python-zeroconf](https://github.com/jstasiak/python-zeroconf) - Only required to detect mDNS-enabled printers - -Configuring Cura ----------------- -Link your CuraEngine backend by inserting the following lines in `$HOME/.config/cura/config.cfg` : -``` -[backend] -location = /[path_to_the..]/CuraEngine/build/CuraEngine -``` +* [Uranium](https://github.com/Ultimaker/Uranium) Cura is built on top of the Uranium framework. +* [CuraEngine](https://github.com/Ultimaker/CuraEngine) This will be needed at runtime to perform the actual slicing. +* [PySerial](https://github.com/pyserial/pyserial) Only required for USB printing support. +* [python-zeroconf](https://github.com/jstasiak/python-zeroconf) Only required to detect mDNS-enabled printers Build scripts ------------- +Please checkout [cura-build](https://github.com/Ultimaker/cura-build) for detailed building instructions. -Please checkout [cura-build](https://github.com/Ultimaker/cura-build) - -Third party plugins +Plugins ------------- -* [Post Processing Plugin](https://github.com/nallath/PostProcessingPlugin): Allows for post-processing scripts to run on g-code. -* [Barbarian Plugin](https://github.com/nallath/BarbarianPlugin): Simple scale tool for imperial to metric. -* [X3G Writer](https://github.com/Ghostkeeper/X3GWriter): Adds support for exporting X3G files. -* [Auto orientation](https://github.com/nallath/CuraOrientationPlugin): Calculate the optimal orientation for a model. -* [OctoPrint Plugin](https://github.com/fieldofview/OctoPrintPlugin): Send printjobs directly to OctoPrint and monitor their progress in Cura. -* [Electric Print Cost Calculator Plugin](https://github.com/zoff99/ElectricPrintCostCalculator): Calculate the electric costs of a print. +Please check our [Wiki page](https://github.com/Ultimaker/Cura/wiki/Plugin-Directory) for details about creating and using plugins. -Making profiles for other printers ----------------------------------- -If your make of printer is not in the list of supported printers, and using the "Custom FDM Printer" does not offer enough flexibility, you can use [this](https://github.com/Ultimaker/Cura/blob/master/resources/definitions/ultimaker_original.def.json) as a template. +Supported printers +------------- +Please check our [Wiki page](https://github.com/Ultimaker/Cura/wiki/Adding-new-machine-profiles-to-Cura) for guidelines about adding support for new machines. -* Change the machine ID to something unique -* Change the machine_name to your printer's name -* If you have a 3D model of your platform you can put it in resources/meshes and put its name under platform -* Set your machine's dimensions with machine_width, machine_depth, and machine_height -* If your printer's origin is in the center of the bed, set machine_center_is_zero to true. -* Set your print head dimensions with the machine_head_shape parameters -* Set the start and end gcode in machine_start_gcode and machine_end_gcode - -Once you are done, put the profile you have made into resources/definitions, or in definitions in your cura profile folder. - -If you want to make a definition for a multi-extrusion printer, have a look at [this](https://github.com/Ultimaker/Cura/blob/master/resources/definitions/ultimaker_original_dual.def.json) as a template, along with the two extruder definitions it references [here](https://github.com/Ultimaker/Cura/blob/master/resources/extruders/ultimaker_original_dual_1st.def.json) and [here](https://github.com/Ultimaker/Cura/blob/master/resources/extruders/ultimaker_original_dual_2nd.def.json) +Configuring Cura +---------------- +Please check out [Wiki page](https://github.com/Ultimaker/Cura/wiki/Cura-Settings) about configuration options for developers. Translating Cura ---------------- @@ -93,3 +60,7 @@ To submit your translation, ideally you would make two pull requests where all ` After the translation is submitted, the Cura maintainers will check for its completeness and check whether it is consistent. We will take special care to look for common mistakes, such as translating mark-up `` code and such. We are often not fluent in every language, so we expect the translator and the international users to make corrections where necessary. Of course, there will always be some mistakes in every translation. When the next Cura release comes around, some of the texts will have changed and some new texts will have been added. Around the time when the beta is released we will invoke a string freeze, meaning that no developer is allowed to make changes to the texts. Then we will update the translation template `.pot` files and ask all our translators to update their translations. If you are unable to update the translation in time for the actual release, we will remove the language from the drop-down menu in the Preferences window. The translation stays in Cura however, so that someone might pick it up again later and update it with the newest texts. Also, users who had previously selected the language can still continue Cura in their language but English text will appear among the original text. + +License +---------------- +Cura is released under the terms of the LGPLv3 or higher. A copy of this license should be included with the software. diff --git a/cura.desktop.in b/cura.desktop.in index 778e1d5033..a91032dd6f 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -1,6 +1,6 @@ [Desktop Entry] -Name=Cura -Name[de]=Cura +Name=Ultimaker Cura +Name[de]=Ultimaker Cura GenericName=3D Printing Software GenericName[de]=3D-Druck-Software Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. diff --git a/cura/Arrange.py b/cura/Arrange.py index 0d1f2e0c06..335e42a267 100755 --- a/cura/Arrange.py +++ b/cura/Arrange.py @@ -52,6 +52,8 @@ class Arrange: # Place all objects fixed nodes for fixed_node in fixed_nodes: vertices = fixed_node.callDecoration("getConvexHull") + if not vertices: + continue points = copy.deepcopy(vertices._points) shape_arr = ShapeArray.fromPolygon(points, scale = scale) arranger.place(0, 0, shape_arr) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 50f63e49d5..2567641cc9 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -513,14 +513,13 @@ class BuildVolume(SceneNode): update_disallowed_areas = False update_raft_thickness = False update_extra_z_clearance = True + for setting_key in self._changed_settings_since_last_rebuild: + if setting_key == "print_sequence": machine_height = self._global_container_stack.getProperty("machine_height", "value") - if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", - "value") == "one_at_a_time" and len( - self._scene_objects) > 1: - self._height = min(self._global_container_stack.getProperty("gantry_height", "value"), - machine_height) + if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1: + self._height = min(self._global_container_stack.getProperty("gantry_height", "value"), machine_height) if self._height < machine_height: self._build_volume_message.show() else: @@ -528,9 +527,20 @@ class BuildVolume(SceneNode): else: self._height = self._global_container_stack.getProperty("machine_height", "value") self._build_volume_message.hide() + update_disallowed_areas = True rebuild_me = True - if setting_key in self._skirt_settings or setting_key in self._prime_settings or setting_key in self._tower_settings or setting_key == "print_sequence" or setting_key in self._ooze_shield_settings or setting_key in self._distance_settings or setting_key in self._extruder_settings: + # sometimes the machine size or shape settings are adjusted on the active machine, we should reflect this + if setting_key in self._machine_settings: + self._height = self._global_container_stack.getProperty("machine_height", "value") + self._width = self._global_container_stack.getProperty("machine_width", "value") + self._depth = self._global_container_stack.getProperty("machine_depth", "value") + self._shape = self._global_container_stack.getProperty("machine_shape", "value") + update_extra_z_clearance = True + update_disallowed_areas = True + rebuild_me = True + + if setting_key in self._skirt_settings + self._prime_settings + self._tower_settings + self._ooze_shield_settings + self._distance_settings + self._extruder_settings: update_disallowed_areas = True rebuild_me = True @@ -969,6 +979,7 @@ class BuildVolume(SceneNode): def _clamp(self, value, min_value, max_value): return max(min(value, max_value), min_value) + _machine_settings = ["machine_width", "machine_depth", "machine_height", "machine_shape", "machine_center_is_zero"] _skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist", "initial_layer_line_width_factor"] _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index cb0f121d47..b5d4001fe2 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -37,7 +37,7 @@ else: # List of exceptions that should be considered "fatal" and abort the program. # These are primarily some exception types that we simply cannot really recover from # (MemoryError and SystemError) and exceptions that indicate grave errors in the -# code that cause the Python interpreter to fail (SyntaxError, ImportError). +# code that cause the Python interpreter to fail (SyntaxError, ImportError). fatal_exception_types = [ MemoryError, SyntaxError, @@ -53,13 +53,13 @@ class CrashHandler: self.exception_type = exception_type self.value = value self.traceback = tb - self.dialog = QDialog() + self.dialog = None # Don't create a QDialog before there is a QApplication # While we create the GUI, the information will be stored for sending afterwards self.data = dict() self.data["time_stamp"] = time.time() - Logger.log("c", "An uncaught exception has occurred!") + Logger.log("c", "An uncaught error has occurred!") for line in traceback.format_exception(exception_type, value, tb): for part in line.rstrip("\n").split("\n"): Logger.log("c", part) @@ -71,6 +71,7 @@ class CrashHandler: if not application: sys.exit(1) + self.dialog = QDialog() self._createDialog() ## Creates a modal dialog. @@ -90,7 +91,7 @@ class CrashHandler: def _messageWidget(self): label = QLabel() - label.setText(catalog.i18nc("@label crash message", """

A fatal exception has occurred. Please send us this Crash Report to fix the problem

+ label.setText(catalog.i18nc("@label crash message", """

A fatal error has occurred. Please send us this Crash Report to fix the problem

Please use the "Send report" button to post a bug report automatically to our servers

""")) @@ -143,7 +144,7 @@ class CrashHandler: def _exceptionInfoWidget(self): group = QGroupBox() - group.setTitle(catalog.i18nc("@title:groupbox", "Exception traceback")) + group.setTitle(catalog.i18nc("@title:groupbox", "Error traceback")) layout = QVBoxLayout() text_area = QTextEdit() @@ -288,4 +289,4 @@ class CrashHandler: # When the exception is not in the fatal_exception_types list, the dialog is not created, so we don't need to show it if self.dialog: self.dialog.exec_() - os._exit(1) + os._exit(1) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index b3e6caed4e..18d1bde57e 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1,6 +1,5 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - from PyQt5.QtNetwork import QLocalServer from PyQt5.QtNetwork import QLocalSocket @@ -32,6 +31,7 @@ from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.SetTransformOperation import SetTransformOperation + from cura.Arrange import Arrange from cura.ShapeArray import ShapeArray from cura.ConvexHullDecorator import ConvexHullDecorator @@ -95,10 +95,11 @@ numpy.seterr(all="ignore") MYPY = False if not MYPY: try: - from cura.CuraVersion import CuraVersion, CuraBuildType + from cura.CuraVersion import CuraVersion, CuraBuildType, CuraDebugMode except ImportError: CuraVersion = "master" # [CodeStyle: Reflecting imported value] CuraBuildType = "" + CuraDebugMode = False class CuraApplication(QtApplication): @@ -126,7 +127,8 @@ class CuraApplication(QtApplication): # Cura will always show the Add Machine Dialog upon start. stacksValidationFinished = pyqtSignal() # Emitted whenever a validation is finished - def __init__(self): + def __init__(self, **kwargs): + # this list of dir names will be used by UM to detect an old cura directory for dir_name in ["extruders", "machine_instances", "materials", "plugins", "quality", "user", "variants"]: Resources.addExpectedDirNameInData(dir_name) @@ -155,7 +157,6 @@ class CuraApplication(QtApplication): SettingDefinition.addSettingType("extruder", None, str, Validator) SettingDefinition.addSettingType("optional_extruder", None, str, None) - SettingDefinition.addSettingType("[int]", None, str, None) SettingFunction.registerOperator("extruderValues", ExtruderManager.getExtruderValues) @@ -171,16 +172,18 @@ class CuraApplication(QtApplication): Resources.addStorageType(self.ResourceTypes.MachineStack, "machine_instances") Resources.addStorageType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes") - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.QualityInstanceContainer) - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.VariantInstanceContainer) - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MaterialInstanceContainer) - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.UserInstanceContainer) - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.ExtruderStack) - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MachineStack) - ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.DefinitionChangesContainer) + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.QualityInstanceContainer, "quality") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.QualityInstanceContainer, "quality_changes") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.VariantInstanceContainer, "variant") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MaterialInstanceContainer, "material") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.UserInstanceContainer, "user") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.ExtruderStack, "extruder_train") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.MachineStack, "machine") + ContainerRegistry.getInstance().addResourceType(self.ResourceTypes.DefinitionChangesContainer, "definition_changes") ## Initialise the version upgrade manager with Cura's storage paths. - import UM.VersionUpgradeManager #Needs to be here to prevent circular dependencies. + # Needs to be here to prevent circular dependencies. + import UM.VersionUpgradeManager UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions( { @@ -205,8 +208,12 @@ class CuraApplication(QtApplication): self._additional_components = {} # Components to add to certain areas in the interface - super().__init__(name = "cura", version = CuraVersion, buildtype = CuraBuildType, - tray_icon_name = "cura-icon-32.png") + super().__init__(name = "cura", + version = CuraVersion, + buildtype = CuraBuildType, + is_debug_mode = CuraDebugMode, + tray_icon_name = "cura-icon-32.png", + **kwargs) self.default_theme = "cura-light" @@ -225,7 +232,9 @@ class CuraApplication(QtApplication): "TranslateTool", "FileLogger", "XmlMaterialProfile", - "PluginBrowser" + "PluginBrowser", + "PrepareStage", + "MonitorStage" ]) self._physics = None self._volume = None @@ -261,17 +270,17 @@ class CuraApplication(QtApplication): empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() empty_variant_container = copy.deepcopy(empty_container) - empty_variant_container._id = "empty_variant" + empty_variant_container.setMetaDataEntry("id", "empty_variant") empty_variant_container.addMetaDataEntry("type", "variant") ContainerRegistry.getInstance().addContainer(empty_variant_container) empty_material_container = copy.deepcopy(empty_container) - empty_material_container._id = "empty_material" + empty_material_container.setMetaDataEntry("id", "empty_material") empty_material_container.addMetaDataEntry("type", "material") ContainerRegistry.getInstance().addContainer(empty_material_container) empty_quality_container = copy.deepcopy(empty_container) - empty_quality_container._id = "empty_quality" + empty_quality_container.setMetaDataEntry("id", "empty_quality") empty_quality_container.setName("Not Supported") empty_quality_container.addMetaDataEntry("quality_type", "not_supported") empty_quality_container.addMetaDataEntry("type", "quality") @@ -279,12 +288,12 @@ class CuraApplication(QtApplication): ContainerRegistry.getInstance().addContainer(empty_quality_container) empty_quality_changes_container = copy.deepcopy(empty_container) - empty_quality_changes_container._id = "empty_quality_changes" + empty_quality_changes_container.setMetaDataEntry("id", "empty_quality_changes") empty_quality_changes_container.addMetaDataEntry("type", "quality_changes") ContainerRegistry.getInstance().addContainer(empty_quality_changes_container) with ContainerRegistry.getInstance().lockFile(): - ContainerRegistry.getInstance().load() + ContainerRegistry.getInstance().loadAllMetadata() # set the setting version for Preferences preferences = Preferences.getInstance() @@ -307,6 +316,7 @@ class CuraApplication(QtApplication): preferences.addPreference("cura/material_settings", "{}") preferences.addPreference("view/invert_zoom", False) + preferences.addPreference("cura/sidebar_collapse", False) self._need_to_show_user_agreement = not Preferences.getInstance().getValue("general/accepted_user_agreement") @@ -386,7 +396,6 @@ class CuraApplication(QtApplication): def needToShowUserAgreement(self): return self._need_to_show_user_agreement - def setNeedToShowUserAgreement(self, set_value = True): self._need_to_show_user_agreement = set_value @@ -394,7 +403,11 @@ class CuraApplication(QtApplication): @pyqtSlot() def closeApplication(self): Logger.log("i", "Close application") - self._main_window.close() + main_window = self.getMainWindow() + if main_window is not None: + main_window.close() + else: + self.exit(0) ## A reusable dialogbox # @@ -465,69 +478,10 @@ class CuraApplication(QtApplication): if not self._started: # Do not do saving during application start return - # Lock file for "more" atomically loading and saving to/from config dir. - with ContainerRegistry.getInstance().lockFile(): - for instance in ContainerRegistry.getInstance().findInstanceContainers(): - if not instance.isDirty(): - continue - - try: - data = instance.serialize() - except NotImplementedError: - continue - except Exception: - Logger.logException("e", "An exception occurred when serializing container %s", instance.getId()) - continue - - mime_type = ContainerRegistry.getMimeTypeForContainer(type(instance)) - file_name = urllib.parse.quote_plus(instance.getId()) + "." + mime_type.preferredSuffix - instance_type = instance.getMetaDataEntry("type") - path = None - if instance_type == "material": - path = Resources.getStoragePath(self.ResourceTypes.MaterialInstanceContainer, file_name) - elif instance_type == "quality" or instance_type == "quality_changes": - path = Resources.getStoragePath(self.ResourceTypes.QualityInstanceContainer, file_name) - elif instance_type == "user": - path = Resources.getStoragePath(self.ResourceTypes.UserInstanceContainer, file_name) - elif instance_type == "variant": - path = Resources.getStoragePath(self.ResourceTypes.VariantInstanceContainer, file_name) - elif instance_type == "definition_changes": - path = Resources.getStoragePath(self.ResourceTypes.DefinitionChangesContainer, file_name) - - if path: - instance.setPath(path) - with SaveFile(path, "wt") as f: - f.write(data) - - for stack in ContainerRegistry.getInstance().findContainerStacks(): - self.saveStack(stack) + ContainerRegistry.getInstance().saveDirtyContainers() def saveStack(self, stack): - if not stack.isDirty(): - return - try: - data = stack.serialize() - except NotImplementedError: - return - except Exception: - Logger.logException("e", "An exception occurred when serializing container %s", stack.getId()) - return - - mime_type = ContainerRegistry.getMimeTypeForContainer(type(stack)) - file_name = urllib.parse.quote_plus(stack.getId()) + "." + mime_type.preferredSuffix - - path = None - if isinstance(stack, GlobalStack): - path = Resources.getStoragePath(self.ResourceTypes.MachineStack, file_name) - elif isinstance(stack, ExtruderStack): - path = Resources.getStoragePath(self.ResourceTypes.ExtruderStack, file_name) - else: - path = Resources.getStoragePath(Resources.ContainerStacks, file_name) - - stack.setPath(path) - with SaveFile(path, "wt") as f: - f.write(data) - + ContainerRegistry.getInstance().saveContainer(stack) @pyqtSlot(str, result = QUrl) def getDefaultPath(self, key): @@ -561,11 +515,10 @@ class CuraApplication(QtApplication): self._plugins_loaded = True @classmethod - def addCommandLineOptions(self, parser): - super().addCommandLineOptions(parser) + def addCommandLineOptions(self, parser, parsed_command_line = {}): + super().addCommandLineOptions(parser, parsed_command_line = parsed_command_line) parser.add_argument("file", nargs="*", help="Files to load after starting the application.") parser.add_argument("--single-instance", action="store_true", default=False) - parser.add_argument("--headless", action = "store_true", default=False) # Set up a local socket server which listener which coordinates single instances Curas and accepts commands. def _setUpSingleInstanceServer(self): @@ -619,13 +572,16 @@ class CuraApplication(QtApplication): # This should be called directly before creating an instance of CuraApplication. # \returns \type{bool} True if the whole Cura app should continue running. @classmethod - def preStartUp(cls): + def preStartUp(cls, parser = None, parsed_command_line = {}): # Peek the arguments and look for the 'single-instance' flag. - parser = argparse.ArgumentParser(prog="cura") # pylint: disable=bad-whitespace - CuraApplication.addCommandLineOptions(parser) - parsed_command_line = vars(parser.parse_args()) + if not parser: + parser = argparse.ArgumentParser(prog = "cura", add_help = False) # pylint: disable=bad-whitespace + CuraApplication.addCommandLineOptions(parser, parsed_command_line = parsed_command_line) + # Important: It is important to keep this line here! + # In Uranium we allow to pass unknown arguments to the final executable or script. + parsed_command_line.update(vars(parser.parse_known_args()[0])) - if "single_instance" in parsed_command_line and parsed_command_line["single_instance"]: + if parsed_command_line["single_instance"]: Logger.log("i", "Checking for the presence of an ready running Cura instance.") single_instance_socket = QLocalSocket() Logger.log("d", "preStartUp(): full server name: " + single_instance_socket.fullServerName()) @@ -657,21 +613,36 @@ class CuraApplication(QtApplication): return False return True + def preRun(self): + # Last check for unknown commandline arguments + parser = self.getCommandlineParser() + parser.add_argument("--help", "-h", + action='store_true', + default = False, + help = "Show this help message and exit." + ) + parsed_args = vars(parser.parse_args()) # This won't allow unknown arguments + if parsed_args["help"]: + parser.print_help() + sys.exit(0) + def run(self): + self.preRun() + self.showSplashMessage(self._i18n_catalog.i18nc("@info:progress", "Setting up scene...")) self._setUpSingleInstanceServer() controller = self.getController() + controller.setActiveStage("PrepareStage") controller.setActiveView("SolidView") - controller.setCameraTool("CameraTool") controller.setSelectionTool("SelectionTool") t = controller.getTool("TranslateTool") if t: - t.setEnabledAxis([ToolHandle.XAxis, ToolHandle.YAxis,ToolHandle.ZAxis]) + t.setEnabledAxis([ToolHandle.XAxis, ToolHandle.YAxis, ToolHandle.ZAxis]) Selection.selectionChanged.connect(self.onSelectionChanged) @@ -712,11 +683,12 @@ class CuraApplication(QtApplication): self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml")) self._qml_import_paths.append(Resources.getPath(self.ResourceTypes.QmlFiles)) - run_headless = self.getCommandLineOption("headless", False) - if not run_headless: + run_without_gui = self.getCommandLineOption("headless", False) or self.getCommandLineOption("invisible", False) + if not run_without_gui: self.initializeEngine() + controller.setActiveStage("PrepareStage") - if run_headless or self._engine.rootObjects: + if run_without_gui or self._engine.rootObjects: self.closeSplash() for file_name in self.getCommandLineOption("file", []): @@ -728,7 +700,7 @@ class CuraApplication(QtApplication): self.exec_() - def getMachineManager(self, *args): + def getMachineManager(self, *args) -> MachineManager: if self._machine_manager is None: self._machine_manager = MachineManager.createMachineManager() return self._machine_manager @@ -1414,7 +1386,8 @@ class CuraApplication(QtApplication): # If a model is to small then it will not contain any points if offset_shape_arr is None and hull_shape_arr is None: Message(self._i18n_catalog.i18nc("@info:status", "The selected model was too small to load."), - title=self._i18n_catalog.i18nc("@info:title", "Warning")).show() + title=self._i18n_catalog.i18nc("@info:title", "Warning") + ).show() return # Step is for skipping tests to make it a lot faster. it also makes the outcome somewhat rougher diff --git a/cura/MachineAction.py b/cura/MachineAction.py index 37f09b4efa..969fef0edf 100644 --- a/cura/MachineAction.py +++ b/cura/MachineAction.py @@ -1,12 +1,10 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal, QUrl -from PyQt5.QtQml import QQmlComponent, QQmlContext +from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal from UM.PluginObject import PluginObject from UM.PluginRegistry import PluginRegistry -from UM.Logger import Logger from UM.Application import Application import os @@ -26,9 +24,6 @@ class MachineAction(QObject, PluginObject): self._key = key self._label = label self._qml_url = "" - - self._component = None - self._context = None self._view = None self._finished = False @@ -52,7 +47,6 @@ class MachineAction(QObject, PluginObject): # /sa _reset @pyqtSlot() def reset(self): - self._component = None self._finished = False self._reset() @@ -78,7 +72,6 @@ class MachineAction(QObject, PluginObject): @pyqtProperty(QObject, constant = True) def displayItem(self): - if not self._component: + if not self._view: self._createViewFromQML() - - return self._view \ No newline at end of file + return self._view diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index f0c29f5b81..5e64413d27 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -16,6 +16,7 @@ import math import os.path import unicodedata import json +import re #To create abbreviations for printer names. from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -238,7 +239,7 @@ class PrintInformation(QObject): pass active_material_id = Application.getInstance().getMachineManager().activeMaterialId - active_material_containers = ContainerRegistry.getInstance().findInstanceContainers(id=active_material_id) + active_material_containers = ContainerRegistry.getInstance().findInstanceContainers(id = active_material_id) if active_material_containers: self._active_material_container = active_material_containers[0] @@ -316,15 +317,14 @@ class PrintInformation(QObject): return global_stack_name = global_container_stack.getName() - split_name = global_stack_name.split(" ") abbr_machine = "" - for word in split_name: + for word in re.findall(r"[\w']+", global_stack_name): if word.lower() == "ultimaker": abbr_machine += "UM" elif word.isdigit(): abbr_machine += word else: - stripped_word = self._stripAccents(word.strip("()[]{}#").upper()) + stripped_word = self._stripAccents(word.upper()) # - use only the first character if the word is too long (> 3 characters) # - use the whole word if it's not too long (<= 3 characters) if len(stripped_word) > 3: diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index 837ecc97c6..b147019b37 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -3,19 +3,15 @@ from UM.i18n import i18nCatalog from UM.OutputDevice.OutputDevice import OutputDevice -from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QTimer, pyqtSignal, QUrl -from PyQt5.QtQml import QQmlComponent, QQmlContext +from PyQt5.QtCore import pyqtProperty, pyqtSlot, QObject, QTimer, pyqtSignal from PyQt5.QtWidgets import QMessageBox from enum import IntEnum # For the connection state tracking. from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Logger import Logger from UM.Signal import signalemitter -from UM.PluginRegistry import PluginRegistry from UM.Application import Application -import os - i18n_catalog = i18nCatalog("cura") ## Printer output device adds extra interface options on top of output device. @@ -63,11 +59,9 @@ class PrinterOutputDevice(QObject, OutputDevice): self._camera_active = False self._monitor_view_qml_path = "" - self._monitor_component = None self._monitor_item = None self._control_view_qml_path = "" - self._control_component = None self._control_item = None self._qml_context = None @@ -155,54 +149,31 @@ class PrinterOutputDevice(QObject, OutputDevice): # Note that we specifically only check if the monitor component is created. # It could be that it failed to actually create the qml item! If we check if the item was created, it will try to # create the item (and fail) every time. - if not self._monitor_component: + if not self._monitor_item: self._createMonitorViewFromQML() - return self._monitor_item @pyqtProperty(QObject, constant=True) def controlItem(self): - if not self._control_component: + if not self._control_item: self._createControlViewFromQML() - return self._control_item def _createControlViewFromQML(self): if not self._control_view_qml_path: return - path = QUrl.fromLocalFile(self._control_view_qml_path) - - # Because of garbage collection we need to keep this referenced by python. - self._control_component = QQmlComponent(Application.getInstance()._engine, path) - - # Check if the context was already requested before (Printer output device might have multiple items in the future) - if self._qml_context is None: - self._qml_context = QQmlContext(Application.getInstance()._engine.rootContext()) - self._qml_context.setContextProperty("OutputDevice", self) - - self._control_item = self._control_component.create(self._qml_context) - if self._control_item is None: - Logger.log("e", "QQmlComponent status %s", self._control_component.status()) - Logger.log("e", "QQmlComponent error string %s", self._control_component.errorString()) + self._control_item = Application.getInstance().createQmlComponent(self._control_view_qml_path, { + "OutputDevice": self + }) def _createMonitorViewFromQML(self): if not self._monitor_view_qml_path: return - path = QUrl.fromLocalFile(self._monitor_view_qml_path) - # Because of garbage collection we need to keep this referenced by python. - self._monitor_component = QQmlComponent(Application.getInstance()._engine, path) - - # Check if the context was already requested before (Printer output device might have multiple items in the future) - if self._qml_context is None: - self._qml_context = QQmlContext(Application.getInstance()._engine.rootContext()) - self._qml_context.setContextProperty("OutputDevice", self) - - self._monitor_item = self._monitor_component.create(self._qml_context) - if self._monitor_item is None: - Logger.log("e", "QQmlComponent status %s", self._monitor_component.status()) - Logger.log("e", "QQmlComponent error string %s", self._monitor_component.errorString()) + self._monitor_item = Application.getInstance().createQmlComponent(self._monitor_view_qml_path, { + "OutputDevice": self + }) @pyqtProperty(str, notify=printerTypeChanged) def printerType(self): @@ -469,9 +440,9 @@ class PrinterOutputDevice(QObject, OutputDevice): result.append(i18n_catalog.i18nc("@item:material", "No material loaded")) continue - containers = self._container_registry.findInstanceContainers(type = "material", GUID = material_id) + containers = self._container_registry.findInstanceContainersMetadata(type = "material", GUID = material_id) if containers: - result.append(containers[0].getName()) + result.append(containers[0]["name"]) else: result.append(i18n_catalog.i18nc("@item:material", "Unknown material")) return result @@ -491,9 +462,9 @@ class PrinterOutputDevice(QObject, OutputDevice): result.append("#00000000") #No material. continue - containers = self._container_registry.findInstanceContainers(type = "material", GUID = material_id) + containers = self._container_registry.findInstanceContainersMetadata(type = "material", GUID = material_id) if containers: - result.append(containers[0].getMetaDataEntry("color_code")) + result.append(containers[0]["color_code"]) else: result.append("#00000000") #Unknown material. return result diff --git a/cura/QualityManager.py b/cura/QualityManager.py index d2162c2449..76a0c86a5f 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -1,13 +1,12 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. # This collects a lot of quality and quality changes related code which was split between ContainerManager # and the MachineManager and really needs to usable from both. -from typing import List, Optional, Dict, TYPE_CHECKING +from typing import Any, Dict, List, Optional, TYPE_CHECKING from UM.Application import Application from UM.Settings.ContainerRegistry import ContainerRegistry -from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.InstanceContainer import InstanceContainer from cura.Settings.ExtruderManager import ExtruderManager @@ -33,16 +32,16 @@ class QualityManager: # \param quality_name # \param machine_definition (Optional) \type{DefinitionContainerInterface} If nothing is # specified then the currently selected machine definition is used. - # \param material_containers (Optional) \type{List[InstanceContainer]} If nothing is specified then - # the current set of selected materials is used. + # \param material_containers_metadata If nothing is specified then the + # current set of selected materials is used. # \return the matching quality container \type{InstanceContainer} - def findQualityByName(self, quality_name: str, machine_definition: Optional["DefinitionContainerInterface"] = None, material_containers: List[InstanceContainer] = None) -> Optional[InstanceContainer]: + def findQualityByName(self, quality_name: str, machine_definition: Optional["DefinitionContainerInterface"] = None, material_containers_metadata: Optional[List[Dict[str, Any]]] = None) -> Optional[InstanceContainer]: criteria = {"type": "quality", "name": quality_name} - result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) + result = self._getFilteredContainersForStack(machine_definition, material_containers_metadata, **criteria) # Fall back to using generic materials and qualities if nothing could be found. - if not result and material_containers and len(material_containers) == 1: - basic_materials = self._getBasicMaterials(material_containers[0]) + if not result and material_containers_metadata and len(material_containers_metadata) == 1: + basic_materials = self._getBasicMaterialMetadatas(material_containers_metadata[0]) result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) return result[0] if result else None @@ -108,18 +107,18 @@ class QualityManager: # \param quality_type \type{str} the name of the quality type to search for. # \param machine_definition (Optional) \type{InstanceContainer} If nothing is # specified then the currently selected machine definition is used. - # \param material_containers (Optional) \type{List[InstanceContainer]} If nothing is specified then - # the current set of selected materials is used. + # \param material_containers_metadata If nothing is specified then the + # current set of selected materials is used. # \return the matching quality container \type{InstanceContainer} - def findQualityByQualityType(self, quality_type: str, machine_definition: Optional["DefinitionContainerInterface"] = None, material_containers: List[InstanceContainer] = None, **kwargs) -> InstanceContainer: + def findQualityByQualityType(self, quality_type: str, machine_definition: Optional["DefinitionContainerInterface"] = None, material_containers_metadata: Optional[List[Dict[str, Any]]] = None, **kwargs) -> InstanceContainer: criteria = kwargs criteria["type"] = "quality" if quality_type: criteria["quality_type"] = quality_type - result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) + result = self._getFilteredContainersForStack(machine_definition, material_containers_metadata, **criteria) # Fall back to using generic materials and qualities if nothing could be found. - if not result and material_containers and len(material_containers) == 1: - basic_materials = self._getBasicMaterials(material_containers[0]) + if not result and material_containers_metadata and len(material_containers_metadata) == 1: + basic_materials = self._getBasicMaterialMetadatas(material_containers_metadata[0]) if basic_materials: result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) return result[0] if result else None @@ -131,9 +130,9 @@ class QualityManager: # \return \type{List[InstanceContainer]} the list of suitable qualities. def findAllQualitiesForMachineMaterial(self, machine_definition: "DefinitionContainerInterface", material_container: InstanceContainer) -> List[InstanceContainer]: criteria = {"type": "quality"} - result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria) + result = self._getFilteredContainersForStack(machine_definition, [material_container.getMetaData()], **criteria) if not result: - basic_materials = self._getBasicMaterials(material_container) + basic_materials = self._getBasicMaterialMetadatas(material_container.getMetaData()) if basic_materials: result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) @@ -202,22 +201,34 @@ class QualityManager: ## Fetch more basic versions of a material. # # This tries to find a generic or basic version of the given material. - # \param material_container \type{InstanceContainer} the material - # \return \type{List[InstanceContainer]} a list of the basic materials or an empty list if one could not be found. - def _getBasicMaterials(self, material_container: InstanceContainer): - base_material = material_container.getMetaDataEntry("material") - material_container_definition = material_container.getDefinition() - if material_container_definition and material_container_definition.getMetaDataEntry("has_machine_quality"): - definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId()) - else: + # \param material_container \type{Dict[str, Any]} The metadata of a + # material to find the basic versions of. + # \return \type{List[Dict[str, Any]]} A list of the metadata of basic + # materials, or an empty list if none could be found. + def _getBasicMaterialMetadatas(self, material_container: Dict[str, Any]) -> List[Dict[str, Any]]: + if "definition" not in material_container: definition_id = "fdmprinter" + else: + material_container_definition = ContainerRegistry.getInstance().findDefinitionContainersMetadata(id = material_container["definition"]) + if not material_container_definition: + definition_id = "fdmprinter" + else: + material_container_definition = material_container_definition[0] + if "has_machine_quality" not in material_container_definition: + definition_id = "fdmprinter" + else: + definition_id = material_container_definition.get("quality_definition", material_container_definition["id"]) + + base_material = material_container.get("material") if base_material: # There is a basic material specified - criteria = { "type": "material", "name": base_material, "definition": definition_id } - containers = ContainerRegistry.getInstance().findInstanceContainers(**criteria) - containers = [basic_material for basic_material in containers if - basic_material.getMetaDataEntry("variant") == material_container.getMetaDataEntry( - "variant")] + criteria = { + "type": "material", + "name": base_material, + "definition": definition_id, + "variant": material_container.get("variant") + } + containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(**criteria) return containers return [] @@ -225,29 +236,25 @@ class QualityManager: def _getFilteredContainers(self, **kwargs): return self._getFilteredContainersForStack(None, None, **kwargs) - def _getFilteredContainersForStack(self, machine_definition: "DefinitionContainerInterface" = None, material_containers: List[InstanceContainer] = None, **kwargs): + def _getFilteredContainersForStack(self, machine_definition: "DefinitionContainerInterface" = None, material_metadata: Optional[List[Dict[str, Any]]] = None, **kwargs): # Fill in any default values. if machine_definition is None: machine_definition = Application.getInstance().getGlobalContainerStack().getBottom() quality_definition_id = machine_definition.getMetaDataEntry("quality_definition") if quality_definition_id is not None: - machine_definition = ContainerRegistry.getInstance().findDefinitionContainers(id=quality_definition_id)[0] + machine_definition = ContainerRegistry.getInstance().findDefinitionContainers(id = quality_definition_id)[0] - # for convenience - if material_containers is None: - material_containers = [] - - if not material_containers: + if not material_metadata: active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() if active_stacks: - material_containers = [stack.material for stack in active_stacks] + material_metadata = [stack.material.getMetaData() for stack in active_stacks] criteria = kwargs filter_by_material = False machine_definition = self.getParentMachineDefinition(machine_definition) criteria["definition"] = machine_definition.getId() - found_containers_with_machine_definition = ContainerRegistry.getInstance().findInstanceContainers(**criteria) + found_containers_with_machine_definition = ContainerRegistry.getInstance().findInstanceContainersMetadata(**criteria) whole_machine_definition = self.getWholeMachineDefinition(machine_definition) if whole_machine_definition.getMetaDataEntry("has_machine_quality"): definition_id = machine_definition.getMetaDataEntry("quality_definition", whole_machine_definition.getId()) @@ -261,12 +268,12 @@ class QualityManager: # Stick the material IDs in a set material_ids = set() - for material_instance in material_containers: + for material_instance in material_metadata: if material_instance is not None: # Add the parent material too. - for basic_material in self._getBasicMaterials(material_instance): - material_ids.add(basic_material.getId()) - material_ids.add(material_instance.getId()) + for basic_material in self._getBasicMaterialMetadatas(material_instance): + material_ids.add(basic_material["id"]) + material_ids.add(material_instance["id"]) containers = ContainerRegistry.getInstance().findInstanceContainers(**criteria) result = [] @@ -292,13 +299,13 @@ class QualityManager: # We have a normal (whole) machine defintion quality_definition = machine_definition.getMetaDataEntry("quality_definition") if quality_definition is not None: - parent_machine_definition = container_registry.findDefinitionContainers(id=quality_definition)[0] + parent_machine_definition = container_registry.findDefinitionContainers(id = quality_definition)[0] return self.getParentMachineDefinition(parent_machine_definition) else: return machine_definition else: # This looks like an extruder. Find the rest of the machine. - whole_machine = container_registry.findDefinitionContainers(id=machine_entry)[0] + whole_machine = container_registry.findDefinitionContainers(id = machine_entry)[0] parent_machine = self.getParentMachineDefinition(whole_machine) if whole_machine is parent_machine: # This extruder already belongs to a 'parent' machine def. @@ -307,7 +314,7 @@ class QualityManager: # Look up the corresponding extruder definition in the parent machine definition. extruder_position = machine_definition.getMetaDataEntry("position") parent_extruder_id = parent_machine.getMetaDataEntry("machine_extruder_trains")[extruder_position] - return container_registry.findDefinitionContainers(id=parent_extruder_id)[0] + return container_registry.findDefinitionContainers(id = parent_extruder_id)[0] ## Get the whole/global machine definition from an extruder definition. # @@ -321,5 +328,5 @@ class QualityManager: return machine_definition else: container_registry = ContainerRegistry.getInstance() - whole_machine = container_registry.findDefinitionContainers(id=machine_entry)[0] + whole_machine = container_registry.findDefinitionContainers(id = machine_entry)[0] return whole_machine diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 85aed93cf6..209e1ec8fd 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -1,10 +1,11 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import copy import os.path import urllib import uuid -from typing import Dict, Union +from typing import Any, Dict, List, Union from PyQt5.QtCore import QObject, QUrl, QVariant from UM.FlameProfiler import pyqtSlot @@ -55,13 +56,24 @@ class ContainerManager(QObject): # \return The ID of the new container, or an empty string if duplication failed. @pyqtSlot(str, result = str) def duplicateContainer(self, container_id): - containers = self._container_registry.findContainers(None, id = container_id) + #TODO: It should be able to duplicate a container of which only the metadata is known. + containers = self._container_registry.findContainers(id = container_id) if not containers: Logger.log("w", "Could duplicate container %s because it was not found.", container_id) return "" container = containers[0] + new_container = self.duplicateContainerInstance(container) + return new_container.getId() + ## Create a duplicate of the given container instance + # + # This will create and add a duplicate of the container that was passed. + # + # \param container \type{ContainerInterface} The container to duplicate. + # + # \return The duplicated container, or None if duplication failed. + def duplicateContainerInstance(self, container): new_container = None new_name = self._container_registry.uniqueName(container.getName()) # Only InstanceContainer has a duplicate method at the moment. @@ -73,10 +85,11 @@ class ContainerManager(QObject): new_container.deserialize(container.serialize()) new_container.setName(new_name) + # TODO: we probably don't want to add it to the registry here! if new_container: self._container_registry.addContainer(new_container) - return new_container.getId() + return new_container ## Change the name of a specified container to a new name. # @@ -87,14 +100,14 @@ class ContainerManager(QObject): # \return True if successful, False if not. @pyqtSlot(str, str, str, result = bool) def renameContainer(self, container_id, new_id, new_name): - containers = self._container_registry.findContainers(None, id = container_id) + containers = self._container_registry.findContainers(id = container_id) if not containers: Logger.log("w", "Could rename container %s because it was not found.", container_id) return False container = containers[0] # First, remove the container from the registry. This will clean up any files related to the container. - self._container_registry.removeContainer(container) + self._container_registry.removeContainer(container_id) # Ensure we have a unique name for the container new_name = self._container_registry.uniqueName(new_name) @@ -115,9 +128,9 @@ class ContainerManager(QObject): # \return True if the container was successfully removed, False if not. @pyqtSlot(str, result = bool) def removeContainer(self, container_id): - containers = self._container_registry.findContainers(None, id = container_id) + containers = self._container_registry.findContainers(id = container_id) if not containers: - Logger.log("w", "Could remove container %s because it was not found.", container_id) + Logger.log("w", "Could not remove container %s because it was not found.", container_id) return False self._container_registry.removeContainer(containers[0].getId()) @@ -135,14 +148,14 @@ class ContainerManager(QObject): # \return True if successfully merged, False if not. @pyqtSlot(str, result = bool) def mergeContainers(self, merge_into_id, merge_id): - containers = self._container_registry.findContainers(None, id = merge_into_id) + containers = self._container_registry.findContainers(id = merge_into_id) if not containers: Logger.log("w", "Could merge into container %s because it was not found.", merge_into_id) return False merge_into = containers[0] - containers = self._container_registry.findContainers(None, id = merge_id) + containers = self._container_registry.findContainers(id = merge_id) if not containers: Logger.log("w", "Could not merge container %s because it was not found", merge_id) return False @@ -164,13 +177,13 @@ class ContainerManager(QObject): # \return True if successful, False if not. @pyqtSlot(str, result = bool) def clearContainer(self, container_id): - containers = self._container_registry.findContainers(None, id = container_id) - if not containers: - Logger.log("w", "Could clear container %s because it was not found.", container_id) + if self._container_registry.isReadOnly(container_id): + Logger.log("w", "Cannot clear read-only container %s", container_id) return False - if containers[0].isReadOnly(): - Logger.log("w", "Cannot clear read-only container %s", container_id) + containers = self._container_registry.findContainers(id = container_id) + if not containers: + Logger.log("w", "Could clear container %s because it was not found.", container_id) return False containers[0].clear() @@ -179,16 +192,12 @@ class ContainerManager(QObject): @pyqtSlot(str, str, result=str) def getContainerMetaDataEntry(self, container_id, entry_name): - containers = self._container_registry.findContainers(None, id=container_id) - if not containers: + metadatas = self._container_registry.findContainersMetadata(id = container_id) + if not metadatas: Logger.log("w", "Could not get metadata of container %s because it was not found.", container_id) return "" - result = containers[0].getMetaDataEntry(entry_name) - if result is not None: - return str(result) - else: - return "" + return str(metadatas[0].get(entry_name, "")) ## Set a metadata entry of the specified container. # @@ -204,17 +213,17 @@ class ContainerManager(QObject): # \return True if successful, False if not. @pyqtSlot(str, str, str, result = bool) def setContainerMetaDataEntry(self, container_id, entry_name, entry_value): - containers = self._container_registry.findContainers(None, id = container_id) + if self._container_registry.isReadOnly(container_id): + Logger.log("w", "Cannot set metadata of read-only container %s.", container_id) + return False + + containers = self._container_registry.findContainers(id = container_id) #We need the complete container, since we need to know whether the container is read-only or not. if not containers: Logger.log("w", "Could not set metadata of container %s because it was not found.", container_id) return False container = containers[0] - if container.isReadOnly(): - Logger.log("w", "Cannot set metadata of read-only container %s.", container_id) - return False - entries = entry_name.split("/") entry_name = entries.pop() @@ -254,17 +263,17 @@ class ContainerManager(QObject): # \return True if successful, False if not. @pyqtSlot(str, str, str, str, result = bool) def setContainerProperty(self, container_id, setting_key, property_name, property_value): - containers = self._container_registry.findContainers(None, id = container_id) + if self._container_registry.isReadOnly(container_id): + Logger.log("w", "Cannot set properties of read-only container %s.", container_id) + return False + + containers = self._container_registry.findContainers(id = container_id) if not containers: Logger.log("w", "Could not set properties of container %s because it was not found.", container_id) return False container = containers[0] - if container.isReadOnly(): - Logger.log("w", "Cannot set properties of read-only container %s.", container_id) - return False - container.setProperty(setting_key, property_name, property_value) basefile = container.getMetaDataEntry("base_file", container_id) @@ -300,35 +309,30 @@ class ContainerManager(QObject): ## Set the name of the specified container. @pyqtSlot(str, str, result = bool) def setContainerName(self, container_id, new_name): - containers = self._container_registry.findContainers(None, id = container_id) + if self._container_registry.isReadOnly(container_id): + Logger.log("w", "Cannot set name of read-only container %s.", container_id) + return False + + containers = self._container_registry.findContainers(id = container_id) #We need to get the full container, not just metadata, since we need to know whether it's read-only. if not containers: Logger.log("w", "Could not set name of container %s because it was not found.", container_id) return False - container = containers[0] - - if container.isReadOnly(): - Logger.log("w", "Cannot set name of read-only container %s.", container_id) - return False - - container.setName(new_name) + containers[0].setName(new_name) return True ## Find instance containers matching certain criteria. # - # This effectively forwards to ContainerRegistry::findInstanceContainers. + # This effectively forwards to + # ContainerRegistry::findInstanceContainersMetadata. # # \param criteria A dict of key - value pairs to search for. # # \return A list of container IDs that match the given criteria. @pyqtSlot("QVariantMap", result = "QVariantList") def findInstanceContainers(self, criteria): - result = [] - for entry in self._container_registry.findInstanceContainers(**criteria): - result.append(entry.getId()) - - return result + return [entry["id"] for entry in self._container_registry.findInstanceContainersMetadata(**criteria)] @pyqtSlot(str, result = bool) def isContainerUsed(self, container_id): @@ -336,15 +340,17 @@ class ContainerManager(QObject): # check if this is a material container. If so, check if any material with the same base is being used by any # stacks. container_ids_to_check = [container_id] - container_results = self._container_registry.findInstanceContainers(id = container_id, type = "material") + container_results = self._container_registry.findInstanceContainersMetadata(id = container_id, type = "material") if container_results: this_container = container_results[0] - material_base_file = this_container.getMetaDataEntry("base_file", this_container.getId()) + material_base_file = this_container["id"] + if "base_file" in this_container: + material_base_file = this_container["base_file"] # check all material container IDs with the same base - material_containers = self._container_registry.findInstanceContainers(base_file = material_base_file, + material_containers = self._container_registry.findInstanceContainersMetadata(base_file = material_base_file, type = "material") if material_containers: - container_ids_to_check = [container.getId() for container in material_containers] + container_ids_to_check = [container["id"] for container in material_containers] all_stacks = self._container_registry.findContainerStacks() for stack in all_stacks: @@ -412,7 +418,7 @@ class ContainerManager(QObject): else: mime_type = self._container_name_filters[file_type]["mime"] - containers = self._container_registry.findContainers(None, id = container_id) + containers = self._container_registry.findContainers(id = container_id) if not containers: return { "status": "error", "message": "Container not found"} container = containers[0] @@ -508,7 +514,7 @@ class ContainerManager(QObject): for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): # Find the quality_changes container for this stack and merge the contents of the top container into it. quality_changes = stack.qualityChanges - if not quality_changes or quality_changes.isReadOnly(): + if not quality_changes or self._container_registry.isReadOnly(quality_changes.getId()): Logger.log("e", "Could not update quality of a nonexistant or read only quality profile in stack %s", stack.getId()) continue @@ -616,9 +622,9 @@ class ContainerManager(QObject): elif activate_quality: definition_id = "fdmprinter" if not self._machine_manager.filterQualityByMachine else self._machine_manager.activeDefinitionId - containers = self._container_registry.findInstanceContainers(type = "quality", definition = definition_id, quality_type = activate_quality_type) + containers = self._container_registry.findInstanceContainersMetadata(type = "quality", definition = definition_id, quality_type = activate_quality_type) if containers: - self._machine_manager.setActiveQuality(containers[0].getId()) + self._machine_manager.setActiveQuality(containers[0]["id"]) self._machine_manager.activeQualityChanged.emit() return containers_found @@ -653,11 +659,13 @@ class ContainerManager(QObject): container_registry = self._container_registry - containers_to_rename = self._container_registry.findInstanceContainers(type = "quality_changes", name = quality_name) + containers_to_rename = self._container_registry.findInstanceContainersMetadata(type = "quality_changes", name = quality_name) for container in containers_to_rename: - stack_id = container.getMetaDataEntry("extruder", global_stack.getId()) - container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name)) + stack_id = global_stack.getId() + if "extruder" in container: + stack_id = container["extruder"] + container_registry.renameContainer(container["id"], new_name, self._createUniqueId(stack_id, new_name)) if not containers_to_rename: Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name) @@ -679,30 +687,32 @@ class ContainerManager(QObject): global_stack = Application.getInstance().getGlobalContainerStack() if not global_stack or not quality_name: return "" - machine_definition = global_stack.getBottom() + machine_definition = global_stack.definition active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() - material_containers = [stack.material for stack in active_stacks] + if active_stacks is None: + return "" + material_metadatas = [stack.material.getMetaData() for stack in active_stacks] result = self._duplicateQualityOrQualityChangesForMachineType(quality_name, base_name, QualityManager.getInstance().getParentMachineDefinition(machine_definition), - material_containers) + material_metadatas) return result[0].getName() if result else "" ## Duplicate a quality or quality changes profile specific to a machine type # - # \param quality_name \type{str} the name of the quality or quality changes container to duplicate. - # \param base_name \type{str} the desired name for the new container. - # \param machine_definition \type{DefinitionContainer} - # \param material_instances \type{List[InstanceContainer]} - # \return \type{str} the name of the newly created container. - def _duplicateQualityOrQualityChangesForMachineType(self, quality_name, base_name, machine_definition, material_instances): + # \param quality_name The name of the quality or quality changes container to duplicate. + # \param base_name The desired name for the new container. + # \param machine_definition The machine with the specific machine type. + # \param material_metadatas Metadata of materials + # \return List of duplicated quality profiles. + def _duplicateQualityOrQualityChangesForMachineType(self, quality_name: str, base_name: str, machine_definition: DefinitionContainer, material_metadatas: List[Dict[str, Any]]) -> List[InstanceContainer]: Logger.log("d", "Attempting to duplicate the quality %s", quality_name) if base_name is None: base_name = quality_name # Try to find a Quality with the name. - container = QualityManager.getInstance().findQualityByName(quality_name, machine_definition, material_instances) + container = QualityManager.getInstance().findQualityByName(quality_name, machine_definition, material_metadatas) if container: Logger.log("d", "We found a quality to duplicate.") return self._duplicateQualityForMachineType(container, base_name, machine_definition) @@ -711,7 +721,7 @@ class ContainerManager(QObject): return self._duplicateQualityChangesForMachineType(quality_name, base_name, machine_definition) # Duplicate a quality profile - def _duplicateQualityForMachineType(self, quality_container, base_name, machine_definition): + def _duplicateQualityForMachineType(self, quality_container, base_name, machine_definition) -> List[InstanceContainer]: if base_name is None: base_name = quality_container.getName() new_name = self._container_registry.uniqueName(base_name) @@ -735,7 +745,7 @@ class ContainerManager(QObject): return new_change_instances # Duplicate a quality changes container - def _duplicateQualityChangesForMachineType(self, quality_changes_name, base_name, machine_definition): + def _duplicateQualityChangesForMachineType(self, quality_changes_name, base_name, machine_definition) -> List[InstanceContainer]: new_change_instances = [] for container in QualityManager.getInstance().findQualityChangesByName(quality_changes_name, machine_definition): @@ -754,27 +764,57 @@ class ContainerManager(QObject): # \return \type{str} the id of the newly created container. @pyqtSlot(str, result = str) def duplicateMaterial(self, material_id: str) -> str: - containers = self._container_registry.findInstanceContainers(id=material_id) - if not containers: + original = self._container_registry.findContainersMetadata(id = material_id) + if not original: Logger.log("d", "Unable to duplicate the material with id %s, because it doesn't exist.", material_id) return "" + original = original[0] + + base_container_id = original.get("base_file") + base_container = self._container_registry.findContainers(id = base_container_id) + if not base_container: + Logger.log("d", "Unable to duplicate the material with id {material_id}, because base_file {base_container_id} doesn't exist.".format(material_id = material_id, base_container_id = base_container_id)) + return "" + base_container = base_container[0] + + #We'll copy all containers with the same base. + #This way the correct variant and machine still gets assigned when loading the copy of the material. + containers_to_copy = self._container_registry.findInstanceContainers(base_file = base_container_id) # Ensure all settings are saved. Application.getInstance().saveSettings() # Create a new ID & container to hold the data. - new_id = self._container_registry.uniqueName(material_id) - container_type = type(containers[0]) # Could be either a XMLMaterialProfile or a InstanceContainer - duplicated_container = container_type(new_id) + new_containers = [] + new_base_id = self._container_registry.uniqueName(base_container.getId()) + new_base_container = copy.deepcopy(base_container) + new_base_container.getMetaData()["id"] = new_base_id + new_base_container.getMetaData()["base_file"] = new_base_id + new_containers.append(new_base_container) - # Instead of duplicating we load the data from the basefile again. - # This ensures that the inheritance goes well and all "cut up" subclasses of the xmlMaterial profile - # are also correctly created. - with open(containers[0].getPath(), encoding="utf-8") as f: - duplicated_container.deserialize(f.read()) - duplicated_container.setDirty(True) - self._container_registry.addContainer(duplicated_container) - return self._getMaterialContainerIdForActiveMachine(new_id) + #Clone all of them. + clone_of_original = None #Keeping track of which one is the clone of the original material, since we need to return that. + for container_to_copy in containers_to_copy: + #Create unique IDs for every clone. + current_id = container_to_copy.getId() + new_id = new_base_id + if container_to_copy.getMetaDataEntry("definition") != "fdmprinter": + new_id += "_" + container_to_copy.getMetaDataEntry("definition") + if container_to_copy.getMetaDataEntry("variant"): + variant = self._container_registry.findContainers(id = container_to_copy.getMetaDataEntry("variant"))[0] + new_id += "_" + variant.getName().replace(" ", "_") + if current_id == material_id: + clone_of_original = new_id + + new_container = copy.deepcopy(container_to_copy) + new_container.getMetaData()["id"] = new_id + new_container.getMetaData()["base_file"] = new_base_id + new_containers.append(new_container) + + for container_to_add in new_containers: + container_to_add.setDirty(True) + ContainerRegistry.getInstance().addContainer(container_to_add) + return self._getMaterialContainerIdForActiveMachine(clone_of_original) ## Create a new material by cloning Generic PLA for the current material diameter and setting the GUID to something unqiue # @@ -789,12 +829,12 @@ class ContainerManager(QObject): return "" approximate_diameter = str(round(global_stack.getProperty("material_diameter", "value"))) - containers = self._container_registry.findInstanceContainers(id = "generic_pla*", approximate_diameter = approximate_diameter) + containers = self._container_registry.findInstanceContainersMetadata(id = "generic_pla*", approximate_diameter = approximate_diameter) if not containers: Logger.log("d", "Unable to create a new material by cloning Generic PLA, because it cannot be found for the material diameter for this machine.") return "" - base_file = containers[0].getMetaDataEntry("base_file") + base_file = containers[0].get("base_file") containers = self._container_registry.findInstanceContainers(id = base_file) if not containers: Logger.log("d", "Unable to create a new material by cloning Generic PLA, because the base file for Generic PLA for this machine can not be found.") @@ -835,14 +875,14 @@ class ContainerManager(QObject): has_variants = parseBool(global_stack.getMetaDataEntry("has_variants", default = False)) if has_machine_materials or has_variant_materials: if has_variants: - materials = self._container_registry.findInstanceContainers(type = "material", base_file = base_file, definition = global_stack.getBottom().getId(), variant = self._machine_manager.activeVariantId) + materials = self._container_registry.findInstanceContainersMetadata(type = "material", base_file = base_file, definition = global_stack.getBottom().getId(), variant = self._machine_manager.activeVariantId) else: - materials = self._container_registry.findInstanceContainers(type = "material", base_file = base_file, definition = global_stack.getBottom().getId()) + materials = self._container_registry.findInstanceContainersMetadata(type = "material", base_file = base_file, definition = global_stack.getBottom().getId()) if materials: - return materials[0].getId() + return materials[0]["id"] - Logger.log("w", "Unable to find a suitable container based on %s for the current machine .", base_file) + Logger.log("w", "Unable to find a suitable container based on %s for the current machine.", base_file) return "" # do not activate a new material if a container can not be found return base_file @@ -853,25 +893,25 @@ class ContainerManager(QObject): # \return \type{list} a list of names of materials with the same GUID @pyqtSlot(str, result = "QStringList") def getLinkedMaterials(self, material_id: str): - containers = self._container_registry.findInstanceContainers(id=material_id) + containers = self._container_registry.findInstanceContainersMetadata(id = material_id) if not containers: Logger.log("d", "Unable to find materials linked to material with id %s, because it doesn't exist.", material_id) return [] material_container = containers[0] - material_base_file = material_container.getMetaDataEntry("base_file", "") - material_guid = material_container.getMetaDataEntry("GUID", "") + material_base_file = material_container.get("base_file", "") + material_guid = material_container.get("GUID", "") if not material_guid: Logger.log("d", "Unable to find materials linked to material with id %s, because it doesn't have a GUID.", material_id) return [] - containers = self._container_registry.findInstanceContainers(type = "material", GUID = material_guid) + containers = self._container_registry.findInstanceContainersMetadata(type = "material", GUID = material_guid) linked_material_names = [] for container in containers: - if container.getId() in [material_id, material_base_file] or container.getMetaDataEntry("base_file") != container.getId(): + if container["id"] in [material_id, material_base_file] or container.get("base_file") != container["id"]: continue - linked_material_names.append(container.getName()) + linked_material_names.append(container["name"]) return linked_material_names ## Unlink a material from all other materials by creating a new GUID @@ -957,14 +997,6 @@ class ContainerManager(QObject): name_filter = "{0} ({1})".format(mime_type.comment, suffix_list) self._container_name_filters[name_filter] = entry - ## Get containers filtered by machine type and material if required. - # - # \param kwargs Initial search criteria that the containers need to match. - # - # \return A list of containers matching the search criteria. - def _getFilteredContainers(self, **kwargs): - return QualityManager.getInstance()._getFilteredContainers(**kwargs) - ## Creates a unique ID for a container by prefixing the name with the stack ID. # # This method creates a unique ID for a container by prefixing it with a specified stack ID. @@ -1004,9 +1036,9 @@ class ContainerManager(QObject): # If the machine specifies qualities should be filtered, ensure we match the current criteria. if not machine_definition.getMetaDataEntry("has_machine_quality"): - quality_changes.setDefinition(self._container_registry.findContainers(id = "fdmprinter")[0]) + quality_changes.setDefinition("fdmprinter") else: - quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition)) + quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition).getId()) from cura.CuraApplication import CuraApplication quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 7ffed279fc..089d513071 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -36,6 +36,11 @@ class CuraContainerRegistry(ContainerRegistry): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + # We don't have all the machines loaded in the beginning, so in order to add the missing extruder stack + # for single extrusion machines, we subscribe to the containerAdded signal, and whenever a global stack + # is added, we check to see if an extruder stack needs to be added. + self.containerAdded.connect(self._onContainerAdded) + ## Overridden from ContainerRegistry # # Adds a container to the registry. @@ -44,7 +49,6 @@ class CuraContainerRegistry(ContainerRegistry): # Global stack based on metadata information. @override(ContainerRegistry) def addContainer(self, container): - # Note: Intentional check with type() because we want to ignore subclasses if type(container) == ContainerStack: container = self._convertContainerStack(container) @@ -89,8 +93,8 @@ class CuraContainerRegistry(ContainerRegistry): def _containerExists(self, container_type, container_name): container_class = ContainerStack if container_type == "machine" else InstanceContainer - return self.findContainers(container_class, id = container_name, type = container_type, ignore_case = True) or \ - self.findContainers(container_class, name = container_name, type = container_type) + return self.findContainersMetadata(id = container_name, type = container_type, ignore_case = True) or \ + self.findContainersMetadata(container_type = container_class, name = container_name, type = container_type) ## Exports an profile to a file # @@ -119,7 +123,7 @@ class CuraContainerRegistry(ContainerRegistry): found_containers = [] extruder_positions = [] for instance_id in instance_ids: - containers = ContainerRegistry.getInstance().findInstanceContainers(id=instance_id) + containers = ContainerRegistry.getInstance().findInstanceContainers(id = instance_id) if containers: found_containers.append(containers[0]) @@ -129,9 +133,9 @@ class CuraContainerRegistry(ContainerRegistry): # Global stack extruder_positions.append(-1) else: - extruder_containers = ContainerRegistry.getInstance().findDefinitionContainers(id=extruder_id) + extruder_containers = ContainerRegistry.getInstance().findDefinitionContainersMetadata(id = extruder_id) if extruder_containers: - extruder_positions.append(int(extruder_containers[0].getMetaDataEntry("position", 0))) + extruder_positions.append(int(extruder_containers[0].get("position", 0))) else: extruder_positions.append(0) # Ensure the profiles are always exported in order (global, extruder 0, extruder 1, ...) @@ -205,53 +209,41 @@ class CuraContainerRegistry(ContainerRegistry): # Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None. Logger.log("e", "Failed to import profile from %s: %s while using profile reader. Got exception %s", file_name,profile_reader.getPluginId(), str(e)) return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to import profile from {0}: {1}", file_name, str(e))} - if profile_or_list: # Success! + + if profile_or_list: name_seed = os.path.splitext(os.path.basename(file_name))[0] new_name = self.uniqueName(name_seed) + + # Ensure it is always a list of profiles if type(profile_or_list) is not list: - profile = profile_or_list + profile_or_list = [profile_or_list] - result = self._configureProfile(profile, name_seed, new_name) - if result is not None: - return {"status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to import profile from {0}: {1}", file_name, result)} + # Import all profiles + for profile_index, profile in enumerate(profile_or_list): + if profile_index == 0: + # This is assumed to be the global profile + profile_id = (global_container_stack.getBottom().getId() + "_" + name_seed).lower().replace(" ", "_") - return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile.getName())} - else: - profile_index = -1 - global_profile = None - - for profile in profile_or_list: - if profile_index >= 0: - if len(machine_extruders) > profile_index: - extruder_id = Application.getInstance().getMachineManager().getQualityDefinitionId(machine_extruders[profile_index].getBottom()) - # Ensure the extruder profiles get non-conflicting names - # NB: these are not user-facing - if "extruder" in profile.getMetaData(): - profile.setMetaDataEntry("extruder", extruder_id) - else: - profile.addMetaDataEntry("extruder", extruder_id) - profile_id = (extruder_id + "_" + name_seed).lower().replace(" ", "_") - elif profile_index == 0: - # Importing a multiextrusion profile into a single extrusion machine; merge 1st extruder profile into global profile - profile._id = self.uniqueName("temporary_profile") - self.addContainer(profile) - ContainerManager.getInstance().mergeContainers(global_profile.getId(), profile.getId()) - self.removeContainer(profile.getId()) - break - else: - # The imported composite profile has a profile for an extruder that this machine does not have. Ignore this extruder-profile - break + elif len(machine_extruders) > profile_index: + # This is assumed to be an extruder profile + extruder_id = Application.getInstance().getMachineManager().getQualityDefinitionId(machine_extruders[profile_index - 1].getBottom()) + if not profile.getMetaDataEntry("extruder"): + profile.addMetaDataEntry("extruder", extruder_id) else: - global_profile = profile - profile_id = (global_container_stack.getBottom().getId() + "_" + name_seed).lower().replace(" ", "_") + profile.setMetaDataEntry("extruder", extruder_id) + profile_id = (extruder_id + "_" + name_seed).lower().replace(" ", "_") - result = self._configureProfile(profile, profile_id, new_name) - if result is not None: - return {"status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to import profile from {0}: {1}", file_name, result)} + else: #More extruders in the imported file than in the machine. + continue #Delete the additional profiles. - profile_index += 1 + result = self._configureProfile(profile, profile_id, new_name) + if result is not None: + return {"status": "error", "message": catalog.i18nc( + "@info:status Don't translate the XML tags or !", + "Failed to import profile from {0}: {1}", + file_name, result)} - return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())} + return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())} # If it hasn't returned by now, none of the plugins loaded the profile successfully. return {"status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type or is corrupted.", file_name)} @@ -270,7 +262,6 @@ class CuraContainerRegistry(ContainerRegistry): # # \return None if configuring was successful or an error message if an error occurred. def _configureProfile(self, profile: InstanceContainer, id_seed: str, new_name: str) -> Optional[str]: - profile.setReadOnly(False) profile.setDirty(True) # Ensure the profiles are correctly saved new_id = self.createUniqueName("quality_changes", "", id_seed, catalog.i18nc("@label", "Custom profile")) @@ -288,7 +279,7 @@ class CuraContainerRegistry(ContainerRegistry): quality_type_criteria = {"quality_type": quality_type} if self._machineHasOwnQualities(): - profile.setDefinition(self._activeQualityDefinition()) + profile.setDefinition(self._activeQualityDefinition().getId()) if self._machineHasOwnMaterials(): active_material_id = self._activeMaterialId() if active_material_id and active_material_id != "empty": # only update if there is an active material @@ -298,7 +289,7 @@ class CuraContainerRegistry(ContainerRegistry): quality_type_criteria["definition"] = profile.getDefinition().getId() else: - profile.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id="fdmprinter")[0]) + profile.setDefinition("fdmprinter") quality_type_criteria["definition"] = "fdmprinter" machine_definition = Application.getInstance().getGlobalContainerStack().getBottom() @@ -345,7 +336,7 @@ class CuraContainerRegistry(ContainerRegistry): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: definition_id = Application.getInstance().getMachineManager().getQualityDefinitionId(global_container_stack.getBottom()) - definition = self.findDefinitionContainers(id=definition_id)[0] + definition = self.findDefinitionContainers(id = definition_id)[0] if definition: return definition @@ -408,6 +399,21 @@ class CuraContainerRegistry(ContainerRegistry): if not extruder_stacks: self.addExtruderStackForSingleExtrusionMachine(machine, "fdmextruder") + def _onContainerAdded(self, container): + # We don't have all the machines loaded in the beginning, so in order to add the missing extruder stack + # for single extrusion machines, we subscribe to the containerAdded signal, and whenever a global stack + # is added, we check to see if an extruder stack needs to be added. + if not isinstance(container, ContainerStack) or container.getMetaDataEntry("type") != "machine": + return + + machine_extruder_trains = container.getMetaDataEntry("machine_extruder_trains") + if machine_extruder_trains is not None and machine_extruder_trains != {"0": "fdmextruder"}: + return + + extruder_stacks = self.findContainerStacks(type = "extruder_train", machine = container.getId()) + if not extruder_stacks: + self.addExtruderStackForSingleExtrusionMachine(container, "fdmextruder") + def addExtruderStackForSingleExtrusionMachine(self, machine, extruder_id): new_extruder_id = extruder_id @@ -423,7 +429,6 @@ class CuraContainerRegistry(ContainerRegistry): extruder_stack.setName(extruder_definition.getName()) extruder_stack.setDefinition(extruder_definition) extruder_stack.addMetaDataEntry("position", extruder_definition.getMetaDataEntry("position")) - extruder_stack.setNextStack(machine) # create empty user changes container otherwise user_container = InstanceContainer(extruder_stack.id + "_user") @@ -431,7 +436,7 @@ class CuraContainerRegistry(ContainerRegistry): user_container.addMetaDataEntry("machine", extruder_stack.getId()) from cura.CuraApplication import CuraApplication user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) - user_container.setDefinition(machine.definition) + user_container.setDefinition(machine.definition.getId()) if machine.userChanges: # for the newly created extruder stack, we need to move all "per-extruder" settings to the user changes @@ -442,8 +447,8 @@ class CuraContainerRegistry(ContainerRegistry): user_container.addInstance(machine.userChanges.getInstance(user_setting_key)) machine.userChanges.removeInstance(user_setting_key, postpone_emit = True) - extruder_stack.setUserChanges(user_container) self.addContainer(user_container) + extruder_stack.setUserChanges(user_container) variant_id = "default" if machine.variant.getId() not in ("empty", "empty_variant"): @@ -489,6 +494,9 @@ class CuraContainerRegistry(ContainerRegistry): self.addContainer(extruder_stack) + # Set next stack at the end + extruder_stack.setNextStack(machine) + return extruder_stack def _findQualityChangesContainerInCuraFolder(self, name): @@ -530,13 +538,13 @@ class CuraContainerRegistry(ContainerRegistry): # set after upgrading, because the proper global stack was not yet loaded. This method # makes sure those extruders also get the right stack set. def _connectUpgradedExtruderStacksToMachines(self): - extruder_stacks = self.findContainers(ExtruderStack.ExtruderStack) + extruder_stacks = self.findContainers(container_type = ExtruderStack.ExtruderStack) for extruder_stack in extruder_stacks: if extruder_stack.getNextStack(): # Has the right next stack, so ignore it. continue - machines = ContainerRegistry.getInstance().findContainerStacks(id=extruder_stack.getMetaDataEntry("machine", "")) + machines = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack.getMetaDataEntry("machine", "")) if machines: extruder_stack.setNextStack(machines[0]) else: diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index f0cec3c450..8e13b24358 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -14,7 +14,7 @@ from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackErro from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.ContainerRegistry import ContainerRegistry -from UM.Settings.Interfaces import ContainerInterface +from UM.Settings.Interfaces import ContainerInterface, DefinitionContainerInterface from . import Exceptions @@ -246,7 +246,7 @@ class CuraContainerStack(ContainerStack): ## Set the definition container. # # \param new_quality_changes The new definition container. It is expected to have a "type" metadata entry with the value "quality_changes". - def setDefinition(self, new_definition: DefinitionContainer) -> None: + def setDefinition(self, new_definition: DefinitionContainerInterface) -> None: self.replaceContainer(_ContainerIndexes.Definition, new_definition) ## Set the definition container by an ID. @@ -377,7 +377,7 @@ class CuraContainerStack(ContainerStack): if not container or not isinstance(container, DefinitionContainer): definition = self.findContainer(container_type = DefinitionContainer) if not definition: - raise InvalidContainerStackError("Stack {id} does not have a definition!".format(id = self._id)) + raise InvalidContainerStackError("Stack {id} does not have a definition!".format(id = self.getId())) new_containers[index] = definition continue @@ -487,11 +487,17 @@ class CuraContainerStack(ContainerStack): search_criteria.pop("name", None) materials = ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) - if materials: - return materials[0] + if not materials: + Logger.log("w", "Could not find a valid material for stack {stack}", stack = self.id) + return None + + for material in materials: + # Prefer a read-only material + if ContainerRegistry.getInstance().isReadOnly(material.getId()): + return material + + return materials[0] - Logger.log("w", "Could not find a valid material for stack {stack}", stack = self.id) - return None ## Find the quality that should be used as "default" quality. # @@ -502,7 +508,7 @@ class CuraContainerStack(ContainerStack): def findDefaultQuality(self) -> Optional[ContainerInterface]: definition = self._getMachineDefinition() registry = ContainerRegistry.getInstance() - material_container = self.material if self.material != self._empty_instance_container else None + material_container = self.material if self.material.getId() not in (self._empty_material.getId(), self._empty_instance_container.getId()) else None search_criteria = {"type": "quality"} @@ -546,7 +552,7 @@ class CuraContainerStack(ContainerStack): material_search_criteria = {"type": "material", "material": material_container.getMetaDataEntry("material"), "color_name": "Generic"} if definition.getMetaDataEntry("has_machine_quality"): if self.material != self._empty_instance_container: - material_search_criteria["definition"] = material_container.getDefinition().id + material_search_criteria["definition"] = material_container.getMetaDataEntry("definition") if definition.getMetaDataEntry("has_variants"): material_search_criteria["variant"] = material_container.getMetaDataEntry("variant") @@ -557,10 +563,10 @@ class CuraContainerStack(ContainerStack): material_search_criteria["variant"] = self.variant.id else: material_search_criteria["definition"] = "fdmprinter" - material_containers = registry.findInstanceContainers(**material_search_criteria) + material_containers = registry.findInstanceContainersMetadata(**material_search_criteria) # Try all materials to see if there is a quality profile available. for material_container in material_containers: - search_criteria["material"] = material_container.getId() + search_criteria["material"] = material_container["id"] containers = registry.findInstanceContainers(**search_criteria) if containers: diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index a661237722..8d2d66ea87 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -3,7 +3,7 @@ from UM.Logger import Logger -from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Settings.Interfaces import DefinitionContainerInterface from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry @@ -34,7 +34,7 @@ class CuraStackBuilder: # Make sure the new name does not collide with any definition or (quality) profile # createUniqueName() only looks at other stacks, but not at definitions or quality profiles # Note that we don't go for uniqueName() immediately because that function matches with ignore_case set to true - if registry.findContainers(id = generated_name): + if registry.findContainersMetadata(id = generated_name): generated_name = registry.uniqueName(generated_name) new_global_stack = cls.createGlobalStack( @@ -55,12 +55,12 @@ class CuraStackBuilder: new_extruder_id = registry.uniqueName(machine_definition.getName() + " " + extruder_definition.id) new_extruder = cls.createExtruderStack( new_extruder_id, - definition=extruder_definition, - machine_definition=machine_definition, - quality="default", - material="default", - variant="default", - next_stack=new_global_stack + definition = extruder_definition, + machine_definition_id = machine_definition.getId(), + quality = "default", + material = "default", + variant = "default", + next_stack = new_global_stack ) new_global_stack.addExtruder(new_extruder) else: @@ -74,7 +74,7 @@ class CuraStackBuilder: new_extruder = cls.createExtruderStack( new_extruder_id, definition = extruder_definition, - machine_definition = machine_definition, + machine_definition_id = machine_definition.getId(), quality = "default", material = "default", variant = "default", @@ -88,12 +88,13 @@ class CuraStackBuilder: # # \param new_stack_id The ID of the new stack. # \param definition The definition to base the new stack on. - # \param machine_definition The machine definition to use for the user container. + # \param machine_definition_id The ID of the machine definition to use for + # the user container. # \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm" # # \return A new Global stack instance with the specified parameters. @classmethod - def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainer, machine_definition: DefinitionContainer, **kwargs) -> ExtruderStack: + def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainerInterface, machine_definition_id: str, **kwargs) -> ExtruderStack: stack = ExtruderStack(new_stack_id) stack.setName(definition.getName()) stack.setDefinition(definition) @@ -108,7 +109,7 @@ class CuraStackBuilder: user_container.addMetaDataEntry("extruder", new_stack_id) from cura.CuraApplication import CuraApplication user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) - user_container.setDefinition(machine_definition) + user_container.setDefinition(machine_definition_id) stack.setUserChanges(user_container) @@ -148,7 +149,7 @@ class CuraStackBuilder: # # \return A new Global stack instance with the specified parameters. @classmethod - def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainer, **kwargs) -> GlobalStack: + def createGlobalStack(cls, new_stack_id: str, definition: DefinitionContainerInterface, **kwargs) -> GlobalStack: stack = GlobalStack(new_stack_id) stack.setDefinition(definition) @@ -157,7 +158,7 @@ class CuraStackBuilder: user_container.addMetaDataEntry("machine", new_stack_id) from cura.CuraApplication import CuraApplication user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) - user_container.setDefinition(definition) + user_container.setDefinition(definition.getId()) stack.setUserChanges(user_container) @@ -193,8 +194,7 @@ class CuraStackBuilder: unique_container_name = ContainerRegistry.getInstance().uniqueName(container_name) definition_changes_container = InstanceContainer(unique_container_name) - definition = container_stack.getBottom() - definition_changes_container.setDefinition(definition) + definition_changes_container.setDefinition(container_stack.getBottom().getId()) definition_changes_container.addMetaDataEntry("type", "definition_changes") definition_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 34b283107d..32e3867300 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -356,14 +356,16 @@ class ExtruderManager(QObject): # \return \type{List[ContainerStack]} a list of def getActiveExtruderStacks(self) -> List["ExtruderStack"]: global_stack = Application.getInstance().getGlobalContainerStack() + if not global_stack: + return None result = [] - machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value") - - if global_stack and global_stack.getId() in self._extruder_trains: + if global_stack.getId() in self._extruder_trains: for extruder in sorted(self._extruder_trains[global_stack.getId()]): result.append(self._extruder_trains[global_stack.getId()][extruder]) + machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value") + return result[:machine_extruder_count] def __globalContainerStackChanged(self) -> None: diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 40d13461cc..5139b9885d 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -8,8 +8,8 @@ from UM.i18n import i18nCatalog import UM.Qt.ListModel from UM.Application import Application import UM.FlameProfiler -from cura.Settings.ExtruderManager import ExtruderManager -from cura.Settings.ExtruderStack import ExtruderStack #To listen to changes on the extruders. + +from cura.Settings.ExtruderStack import ExtruderStack # To listen to changes on the extruders. catalog = i18nCatalog("cura") @@ -68,7 +68,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self._update_extruder_timer.setSingleShot(True) self._update_extruder_timer.timeout.connect(self.__updateExtruders) - self._add_global = False self._simple_names = False self._active_machine_extruders = [] # type: Iterable[ExtruderStack] @@ -76,21 +75,10 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # Listen to changes Application.getInstance().globalContainerStackChanged.connect(self._extrudersChanged) # When the machine is swapped we must update the active machine extruders - ExtruderManager.getInstance().extrudersChanged.connect(self._extrudersChanged) # When the extruders change we must link to the stack-changed signal of the new extruder + Application.getInstance().getExtruderManager().extrudersChanged.connect(self._extrudersChanged) # When the extruders change we must link to the stack-changed signal of the new extruder + Application.getInstance().getContainerRegistry().containerMetaDataChanged.connect(self._onExtruderStackContainersChanged) # When meta data from a material container changes we must update self._extrudersChanged() # Also calls _updateExtruders - def setAddGlobal(self, add): - if add != self._add_global: - self._add_global = add - self._updateExtruders() - self.addGlobalChanged.emit() - - addGlobalChanged = pyqtSignal() - - @pyqtProperty(bool, fset = setAddGlobal, notify = addGlobalChanged) - def addGlobal(self): - return self._add_global - addOptionalExtruderChanged = pyqtSignal() def setAddOptionalExtruder(self, add_optional_extruder): @@ -140,8 +128,10 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): # Link to new extruders self._active_machine_extruders = [] - extruder_manager = ExtruderManager.getInstance() + extruder_manager = Application.getInstance().getExtruderManager() for extruder in extruder_manager.getExtruderStacks(): + if extruder is None: #This extruder wasn't loaded yet. This happens asynchronously while this model is constructed from QML. + continue extruder.containersChanged.connect(self._onExtruderStackContainersChanged) self._active_machine_extruders.append(extruder) @@ -173,24 +163,10 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: - # TODO: remove this - CURA-4482 - if self._add_global: - material = global_container_stack.material - color = material.getMetaDataEntry("color_code", default = self.defaultColors[0]) if material else self.defaultColors[0] - item = { - "id": global_container_stack.getId(), - "name": catalog.i18nc("@menuitem", "Global"), - "color": color, - "index": -1, - "definition": "" - } - items.append(item) - extruders_changed = True - # get machine extruder count for verification machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") - for extruder in ExtruderManager.getInstance().getMachineExtruders(global_container_stack.getId()): + for extruder in Application.getInstance().getExtruderManager().getMachineExtruders(global_container_stack.getId()): position = extruder.getMetaDataEntry("position", default = "0") # Get the position try: position = int(position) diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index 2f27c4ab72..dae1c103b4 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -43,15 +43,11 @@ class GlobalStack(CuraContainerStack): def getLoadingPriority(cls) -> int: return 2 - def getConfigurationTypeFromSerialized(self, serialized: str) -> Optional[str]: - configuration_type = None - try: - parser = self._readAndValidateSerialized(serialized) - configuration_type = parser["metadata"].get("type") - if configuration_type == "machine": - configuration_type = "machine_stack" - except Exception as e: - Logger.log("e", "Could not get configuration type: %s", e) + @classmethod + def getConfigurationTypeFromSerialized(cls, serialized: str) -> Optional[str]: + configuration_type = super().getConfigurationTypeFromSerialized(serialized) + if configuration_type == "machine": + return "machine_stack" return configuration_type ## Add an extruder to the list of extruders of this stack. @@ -67,7 +63,7 @@ class GlobalStack(CuraContainerStack): return if any(item.getId() == extruder.id for item in self._extruders.values()): - Logger.log("w", "Extruder [%s] has already been added to this stack [%s]", extruder.id, self._id) + Logger.log("w", "Extruder [%s] has already been added to this stack [%s]", extruder.id, self.getId()) return self._extruders[position] = extruder diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 7237aa5674..05aed1f5e2 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -32,6 +32,7 @@ from .CuraStackBuilder import CuraStackBuilder from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") +from cura.Settings.ProfilesModel import ProfilesModel from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: @@ -60,9 +61,11 @@ class MachineManager(QObject): self._instance_container_timer = QTimer() self._instance_container_timer.setInterval(250) self._instance_container_timer.setSingleShot(True) - self._instance_container_timer.timeout.connect(self.__onInstanceContainersChanged) + self._instance_container_timer.timeout.connect(self.__emitChangedSignals) Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) + Application.getInstance().getContainerRegistry().containerLoadComplete.connect(self._onInstanceContainersChanged) + self._connected_to_profiles_model = False ## When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) @@ -104,7 +107,7 @@ class MachineManager(QObject): # There might already be some output devices by the time the signal is connected self._onOutputDevicesChanged() - if active_machine_id != "" and ContainerRegistry.getInstance().findContainerStacks(id = active_machine_id): + if active_machine_id != "" and ContainerRegistry.getInstance().findContainerStacksMetadata(id = active_machine_id): # An active machine was saved, so restore it. self.setActiveMachine(active_machine_id) # Make sure _active_container_stack is properly initiated @@ -117,6 +120,10 @@ class MachineManager(QObject): "The selected material is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Incompatible Material")) + containers = ContainerRegistry.getInstance().findInstanceContainers(id = self.activeMaterialId) + if containers: + containers[0].nameChanged.connect(self._onMaterialNameChanged) + globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value) activeMaterialChanged = pyqtSignal() activeVariantChanged = pyqtSignal() @@ -167,7 +174,7 @@ class MachineManager(QObject): if not self._global_container_stack: return - containers = ContainerRegistry.getInstance().findInstanceContainers(type="variant", definition=self._global_container_stack.getBottom().getId(), name=hotend_id) + containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(type = "variant", definition = self._global_container_stack.definition.getId(), name = hotend_id) if containers: # New material ID is known extruder_manager = ExtruderManager.getInstance() machine_id = self.activeMachineId @@ -179,10 +186,10 @@ class MachineManager(QObject): break if matching_extruder and matching_extruder.variant.getName() != hotend_id: # Save the material that needs to be changed. Multiple changes will be handled by the callback. - self._auto_hotends_changed[str(index)] = containers[0].getId() + self._auto_hotends_changed[str(index)] = containers[0]["id"] self._printer_output_devices[0].materialHotendChangedMessage(self._materialHotendChangedCallback) else: - Logger.log("w", "No variant found for printer definition %s with id %s" % (self._global_container_stack.getBottom().getId(), hotend_id)) + Logger.log("w", "No variant found for printer definition %s with id %s" % (self._global_container_stack.definition.getId(), hotend_id)) def _onMaterialIdChanged(self, index: Union[str, int], material_id: str): if not self._global_container_stack: @@ -192,7 +199,7 @@ class MachineManager(QObject): if self._global_container_stack.getMetaDataEntry("has_machine_materials", False): definition_id = self.activeQualityDefinitionId extruder_manager = ExtruderManager.getInstance() - containers = ContainerRegistry.getInstance().findInstanceContainers(type = "material", definition = definition_id, GUID = material_id) + containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(type = "material", definition = definition_id, GUID = material_id) if containers: # New material ID is known extruders = list(extruder_manager.getMachineExtruders(self.activeMachineId)) matching_extruder = None @@ -203,15 +210,15 @@ class MachineManager(QObject): if matching_extruder and matching_extruder.material.getMetaDataEntry("GUID") != material_id: # Save the material that needs to be changed. Multiple changes will be handled by the callback. - if self._global_container_stack.getBottom().getMetaDataEntry("has_variants") and matching_extruder.variant: - variant_id = self.getQualityVariantId(self._global_container_stack.getBottom(), matching_extruder.variant) + if self._global_container_stack.definition.getMetaDataEntry("has_variants") and matching_extruder.variant: + variant_id = self.getQualityVariantId(self._global_container_stack.definition, matching_extruder.variant) for container in containers: - if container.getMetaDataEntry("variant") == variant_id: - self._auto_materials_changed[str(index)] = container.getId() + if container.get("variant") == variant_id: + self._auto_materials_changed[str(index)] = container["id"] break else: # Just use the first result we found. - self._auto_materials_changed[str(index)] = containers[0].getId() + self._auto_materials_changed[str(index)] = containers[0]["id"] self._printer_output_devices[0].materialHotendChangedMessage(self._materialHotendChangedCallback) else: Logger.log("w", "No material definition found for printer definition %s and GUID %s" % (definition_id, material_id)) @@ -329,14 +336,24 @@ class MachineManager(QObject): # on _active_container_stack. If it changes, then the properties change. self.activeQualityChanged.emit() - def __onInstanceContainersChanged(self): + def __emitChangedSignals(self): self.activeQualityChanged.emit() self.activeVariantChanged.emit() self.activeMaterialChanged.emit() self._updateStacksHaveErrors() # Prevents unwanted re-slices after changing machine self._error_check_timer.start() + def _onProfilesModelChanged(self, *args): + self.__emitChangedSignals() + def _onInstanceContainersChanged(self, container): + # This should not trigger the ProfilesModel to be created, or there will be an infinite recursion + if not self._connected_to_profiles_model and ProfilesModel.hasInstance(): + # This triggers updating the qualityModel in SidebarSimple whenever ProfilesModel is updated + Logger.log("d", "Connecting profiles model...") + ProfilesModel.getInstance().itemsChanged.connect(self._onProfilesModelChanged) + self._connected_to_profiles_model = True + self._instance_container_timer.start() def _onPropertyChanged(self, key: str, property_name: str): @@ -352,11 +369,13 @@ class MachineManager(QObject): self.blurSettings.emit() # Ensure no-one has focus. self._cancelDelayedActiveContainerStackChanges() - containers = ContainerRegistry.getInstance().findContainerStacks(id = stack_id) + container_registry = ContainerRegistry.getInstance() + + containers = container_registry.findContainerStacks(id = stack_id) if containers: Application.getInstance().setGlobalContainerStack(containers[0]) - self.__onInstanceContainersChanged() + self.__emitChangedSignals() @pyqtSlot(str, str) def addMachine(self, name: str, definition_id: str) -> None: @@ -498,6 +517,7 @@ class MachineManager(QObject): @pyqtProperty("QVariantList", notify=activeVariantChanged) def activeVariantNames(self) -> List[str]: result = [] + active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() if active_stacks is not None: for stack in active_stacks: @@ -510,6 +530,7 @@ class MachineManager(QObject): @pyqtProperty("QVariantList", notify = activeMaterialChanged) def activeMaterialNames(self) -> List[str]: result = [] + active_stacks = ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() if active_stacks is not None: for stack in active_stacks: @@ -530,6 +551,7 @@ class MachineManager(QObject): @pyqtProperty("QVariantMap", notify = activeVariantChanged) def allActiveVariantIds(self) -> Dict[str, str]: result = {} + active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() if active_stacks is not None: #If we have a global stack. for stack in active_stacks: @@ -548,10 +570,8 @@ class MachineManager(QObject): @pyqtProperty("QVariantMap", notify = activeMaterialChanged) def allActiveMaterialIds(self) -> Dict[str, str]: result = {} + active_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() - - result[self._global_container_stack.getId()] = self._global_container_stack.material.getId() - if active_stacks is not None: # If we have extruder stacks for stack in active_stacks: material_container = stack.material @@ -703,10 +723,7 @@ class MachineManager(QObject): ## Check if a container is read_only @pyqtSlot(str, result = bool) def isReadOnly(self, container_id: str) -> bool: - containers = ContainerRegistry.getInstance().findInstanceContainers(id = container_id) - if not containers or not self._active_container_stack: - return True - return containers[0].isReadOnly() + return ContainerRegistry.getInstance().isReadOnly(container_id) ## Copy the value of the setting of the current extruder to all other extruders as well as the global container. @pyqtSlot(str) @@ -733,6 +750,9 @@ class MachineManager(QObject): old_material = self._active_container_stack.material old_quality = self._active_container_stack.quality + old_quality_type = None + if old_quality and old_quality.getId() != self._empty_quality_container.getId(): + old_quality_type = old_quality.getMetaDataEntry("quality_type") old_quality_changes = self._active_container_stack.qualityChanges if not old_material: Logger.log("w", "While trying to set the active material, no material was found to replace it.") @@ -771,15 +791,30 @@ class MachineManager(QObject): if quality_type: candidate_quality = quality_manager.findQualityByQualityType(quality_type, quality_manager.getWholeMachineDefinition(global_stack.definition), - [material_container]) + [material_container.getMetaData()]) - if not candidate_quality or isinstance(candidate_quality, type(self._empty_quality_changes_container)): + if not candidate_quality or candidate_quality.getId() == self._empty_quality_changes_container: Logger.log("d", "Attempting to find fallback quality") # Fall back to a quality (which must be compatible with all other extruders) new_qualities = quality_manager.findAllUsableQualitiesForMachineAndExtruders( self._global_container_stack, ExtruderManager.getInstance().getExtruderStacks()) - if new_qualities: - new_quality_id = new_qualities[0].getId() # Just pick the first available one + + quality_types = sorted([q.getMetaDataEntry("quality_type") for q in new_qualities], reverse = True) + quality_type_to_use = None + if quality_types: + # try to use the same quality as before, otherwise the first one in the quality_types + quality_type_to_use = quality_types[0] + if old_quality_type is not None and old_quality_type in quality_type_to_use: + quality_type_to_use = old_quality_type + + new_quality = None + for q in new_qualities: + if quality_type_to_use is not None and q.getMetaDataEntry("quality_type") == quality_type_to_use: + new_quality = q + break + + if new_quality is not None: + new_quality_id = new_quality.getId() # Just pick the first available one else: Logger.log("w", "No quality profile found that matches the current machine and extruders.") else: @@ -804,7 +839,7 @@ class MachineManager(QObject): preferred_material_name = None if old_material: preferred_material_name = old_material.getName() - preferred_material_id = self._updateMaterialContainer(self._global_container_stack.getBottom(), self._global_container_stack, containers[0], preferred_material_name).id + preferred_material_id = self._updateMaterialContainer(self._global_container_stack.definition, self._global_container_stack, containers[0], preferred_material_name).id self.setActiveMaterial(preferred_material_id) else: Logger.log("w", "While trying to set the active variant, no variant was found to replace.") @@ -816,15 +851,15 @@ class MachineManager(QObject): with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self.blurSettings.emit() - containers = ContainerRegistry.getInstance().findInstanceContainers(id = quality_id) + containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(id = quality_id) if not containers or not self._global_container_stack: return # Quality profile come in two flavours: type=quality and type=quality_changes # If we found a quality_changes profile then look up its parent quality profile. - container_type = containers[0].getMetaDataEntry("type") - quality_name = containers[0].getName() - quality_type = containers[0].getMetaDataEntry("quality_type") + container_type = containers[0].get("type") + quality_name = containers[0]["name"] + quality_type = containers[0].get("quality_type") # Get quality container and optionally the quality_changes container. if container_type == "quality": @@ -832,7 +867,7 @@ class MachineManager(QObject): elif container_type == "quality_changes": new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name) else: - Logger.log("e", "Tried to set quality to a container that is not of the right type") + Logger.log("e", "Tried to set quality to a container that is not of the right type: {container_id}".format(container_id = containers[0]["id"])) return # Check if it was at all possible to find new settings @@ -921,18 +956,18 @@ class MachineManager(QObject): if not global_container_stack: return [] - global_machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.getBottom()) + global_machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.definition) extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() # find qualities for extruders for extruder_stack in extruder_stacks: - material = extruder_stack.material + material_metadata = extruder_stack.material.getMetaData() # TODO: fix this if self._new_material_container and extruder_stack.getId() == self._active_container_stack.getId(): - material = self._new_material_container + material_metadata = self._new_material_container.getMetaData() - quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) + quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material_metadata]) if not quality: # No quality profile is found for this quality type. @@ -982,12 +1017,6 @@ class MachineManager(QObject): Logger.log("e", "Could not find the global quality changes container with name %s", quality_changes_name) return None - material = global_container_stack.material - - # find a quality type that matches both machine and materials - if self._new_material_container and self._active_container_stack.getId() == global_container_stack.getId(): - material = self._new_material_container - # For the global stack, find a quality which matches the quality_type in # the quality changes profile and also satisfies any material constraints. quality_type = global_quality_changes.getMetaDataEntry("quality_type") @@ -1007,12 +1036,12 @@ class MachineManager(QObject): if not quality_changes: quality_changes = self._empty_quality_changes_container - material = extruder_stack.material + material_metadata = extruder_stack.material.getMetaData() if self._new_material_container and self._active_container_stack.getId() == extruder_stack.getId(): - material = self._new_material_container + material_metadata = self._new_material_container.getMetaData() - quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material]) + quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material_metadata]) if not quality: # No quality profile found for this quality type. @@ -1025,7 +1054,7 @@ class MachineManager(QObject): }) # append the global quality changes - global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material], global_quality = "True") + global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, global_quality = "True") # if there is not global quality but we're using a single extrusion machine, copy the quality of the first extruder - CURA-4482 if not global_quality and len(extruder_stacks) == 1: @@ -1079,18 +1108,14 @@ class MachineManager(QObject): @pyqtProperty(str, notify = globalContainerChanged) def activeDefinitionId(self) -> str: if self._global_container_stack: - definition = self._global_container_stack.getBottom() - if definition: - return definition.id + return self._global_container_stack.definition.id return "" @pyqtProperty(str, notify=globalContainerChanged) def activeDefinitionName(self) -> str: if self._global_container_stack: - definition = self._global_container_stack.getBottom() - if definition: - return definition.getName() + return self._global_container_stack.definition.getName() return "" @@ -1100,7 +1125,7 @@ class MachineManager(QObject): @pyqtProperty(str, notify = globalContainerChanged) def activeQualityDefinitionId(self) -> str: if self._global_container_stack: - return self.getQualityDefinitionId(self._global_container_stack.getBottom()) + return self.getQualityDefinitionId(self._global_container_stack.definition) return "" ## Get the Definition ID to use to select quality profiles for machines of the specified definition @@ -1118,7 +1143,7 @@ class MachineManager(QObject): if self._active_container_stack: variant = self._active_container_stack.variant if variant: - return self.getQualityVariantId(self._global_container_stack.getBottom(), variant) + return self.getQualityVariantId(self._global_container_stack.definition, variant) return "" ## Get the Variant ID to use to select quality profiles for variants of the specified definitions @@ -1142,7 +1167,7 @@ class MachineManager(QObject): def activeDefinitionVariantsName(self) -> str: fallback_title = catalog.i18nc("@label", "Nozzle") if self._global_container_stack: - return self._global_container_stack.getBottom().getMetaDataEntry("variants_name", fallback_title) + return self._global_container_stack.definition.getMetaDataEntry("variants_name", fallback_title) return fallback_title @@ -1151,7 +1176,7 @@ class MachineManager(QObject): container_registry = ContainerRegistry.getInstance() machine_stack = container_registry.findContainerStacks(id = machine_id) if machine_stack: - new_name = container_registry.createUniqueName("machine", machine_stack[0].getName(), new_name, machine_stack[0].getBottom().getName()) + new_name = container_registry.createUniqueName("machine", machine_stack[0].getName(), new_name, machine_stack[0].definition.getName()) machine_stack[0].setName(new_name) self.globalContainerChanged.emit() @@ -1162,15 +1187,15 @@ class MachineManager(QObject): # activate a new machine before removing a machine because this is safer if activate_new_machine: - machine_stacks = ContainerRegistry.getInstance().findContainerStacks(type = "machine") - other_machine_stacks = [s for s in machine_stacks if s.getId() != machine_id] + machine_stacks = ContainerRegistry.getInstance().findContainerStacksMetadata(type = "machine") + other_machine_stacks = [s for s in machine_stacks if s["id"] != machine_id] if other_machine_stacks: - self.setActiveMachine(other_machine_stacks[0].getId()) + self.setActiveMachine(other_machine_stacks[0]["id"]) ExtruderManager.getInstance().removeMachineExtruders(machine_id) - containers = ContainerRegistry.getInstance().findInstanceContainers(type = "user", machine = machine_id) + containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(type = "user", machine = machine_id) for container in containers: - ContainerRegistry.getInstance().removeContainer(container.getId()) + ContainerRegistry.getInstance().removeContainer(container["id"]) ContainerRegistry.getInstance().removeContainer(machine_id) @pyqtProperty(bool, notify = globalContainerChanged) @@ -1207,9 +1232,9 @@ class MachineManager(QObject): # \returns DefinitionID (string) if found, None otherwise @pyqtSlot(str, result = str) def getDefinitionByMachineId(self, machine_id: str) -> str: - containers = ContainerRegistry.getInstance().findContainerStacks(id=machine_id) + containers = ContainerRegistry.getInstance().findContainerStacks(id = machine_id) if containers: - return containers[0].getBottom().getId() + return containers[0].definition.getId() @staticmethod def createMachineManager(): diff --git a/cura/Settings/MaterialsModel.py b/cura/Settings/MaterialsModel.py index bab8929765..c4b0329336 100644 --- a/cura/Settings/MaterialsModel.py +++ b/cura/Settings/MaterialsModel.py @@ -1,6 +1,7 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, List from UM.Settings.ContainerRegistry import ContainerRegistry #To listen for changes to the materials. from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel #We're extending this class. @@ -18,8 +19,19 @@ class MaterialsModel(InstanceContainersModel): # \param container The container whose metadata was changed. def _onContainerMetaDataChanged(self, container): if container.getMetaDataEntry("type") == "material": #Only need to update if a material was changed. - self._update() + self._container_change_timer.start() def _onContainerChanged(self, container): if container.getMetaDataEntry("type", "") == "material": super()._onContainerChanged(container) + + ## Group brand together + def _sortKey(self, item) -> List[Any]: + result = [] + result.append(item["metadata"]["brand"]) + result.append(item["metadata"]["material"]) + result.append(item["metadata"]["name"]) + result.append(item["metadata"]["color_name"]) + result.append(item["metadata"]["id"]) + result.extend(super()._sortKey(item)) + return result diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 2b75cf1bd2..3b43e2740a 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -49,6 +49,10 @@ class ProfilesModel(InstanceContainersModel): ProfilesModel.__instance = cls() return ProfilesModel.__instance + @classmethod + def hasInstance(cls) -> bool: + return ProfilesModel.__instance is not None + __instance = None # type: "ProfilesModel" ## Fetch the list of containers to display. @@ -57,8 +61,7 @@ class ProfilesModel(InstanceContainersModel): def _fetchInstanceContainers(self): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack is None: - return [] - + return {}, {} global_stack_definition = global_container_stack.definition # Get the list of extruders and place the selected extruder at the front of the list. @@ -88,11 +91,10 @@ class ProfilesModel(InstanceContainersModel): not_supported_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0] result.append(not_supported_container) - return result + return {item.getId():item for item in result}, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet. ## Re-computes the items in this model, and adds the layer height role. def _recomputeItems(self): - # Some globals that we can re-use. global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack is None: @@ -112,8 +114,12 @@ class ProfilesModel(InstanceContainersModel): # active machine and material, and later yield the right ones. tmp_all_quality_items = OrderedDict() for item in super()._recomputeItems(): - profile = container_registry.findContainers(id=item["id"]) - quality_type = profile[0].getMetaDataEntry("quality_type") if profile else "" + + profiles = container_registry.findContainersMetadata(id = item["id"]) + if not profiles or "quality_type" not in profiles[0]: + quality_type = "" + else: + quality_type = profiles[0]["quality_type"] if quality_type not in tmp_all_quality_items: tmp_all_quality_items[quality_type] = {"suitable_container": None, "all_containers": []} diff --git a/cura/Settings/QualityAndUserProfilesModel.py b/cura/Settings/QualityAndUserProfilesModel.py index 2e181c6031..bc81df976b 100644 --- a/cura/Settings/QualityAndUserProfilesModel.py +++ b/cura/Settings/QualityAndUserProfilesModel.py @@ -18,7 +18,7 @@ class QualityAndUserProfilesModel(ProfilesModel): def _fetchInstanceContainers(self): global_container_stack = Application.getInstance().getGlobalContainerStack() if not global_container_stack: - return [] + return {}, {} # Fetch the list of quality changes. quality_manager = QualityManager.getInstance() @@ -35,10 +35,12 @@ class QualityAndUserProfilesModel(ProfilesModel): # Filter the quality_change by the list of available quality_types quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list]) - filtered_quality_changes = [qc for qc in quality_changes_list if + filtered_quality_changes = {qc.getId():qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and qc.getMetaDataEntry("extruder") is not None and (qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or - qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())] + qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())} - return quality_list + filtered_quality_changes + result = filtered_quality_changes + result.update({q.getId():q for q in quality_list}) + return result, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet. \ No newline at end of file diff --git a/cura/Settings/QualitySettingsModel.py b/cura/Settings/QualitySettingsModel.py index d0379dc510..243fd146dc 100644 --- a/cura/Settings/QualitySettingsModel.py +++ b/cura/Settings/QualitySettingsModel.py @@ -92,7 +92,6 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel): items = [] - settings = collections.OrderedDict() definition_container = Application.getInstance().getGlobalContainerStack().getBottom() containers = self._container_registry.findInstanceContainers(id = self._quality_id) diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index 5026f9760d..b853c06c8e 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -22,16 +22,26 @@ class SettingOverrideDecorator(SceneNodeDecorator): ## Event indicating that the user selected a different extruder. activeExtruderChanged = Signal() + ## Non-printing meshes + # + # If these settings are True for any mesh, the mesh does not need a convex hull, + # and is sent to the slicer regardless of whether it fits inside the build volume. + # Note that Support Mesh is not in here because it actually generates + # g-code in the volume of the mesh. + _non_printing_mesh_settings = {"anti_overhang_mesh", "infill_mesh", "cutting_mesh"} + def __init__(self): super().__init__() - self._stack = PerObjectContainerStack(stack_id = id(self)) + self._stack = PerObjectContainerStack(stack_id = "per_object_stack_" + str(id(self))) self._stack.setDirty(False) # This stack does not need to be saved. self._stack.addContainer(InstanceContainer(container_id = "SettingOverrideInstanceContainer")) self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0).getId() + self._is_non_printing_mesh = False + self._stack.propertyChanged.connect(self._onSettingChanged) - ContainerRegistry.getInstance().addContainer(self._stack) + Application.getInstance().getContainerRegistry().addContainer(self._stack) Application.getInstance().globalContainerStackChanged.connect(self._updateNextStack) self.activeExtruderChanged.connect(self._updateNextStack) @@ -49,6 +59,10 @@ class SettingOverrideDecorator(SceneNodeDecorator): # Properly set the right extruder on the copy deep_copy.setActiveExtruder(self._extruder_stack) + # use value from the stack because there can be a delay in signal triggering and "_is_non_printing_mesh" + # has not been updated yet. + deep_copy._is_non_printing_mesh = any(bool(self._stack.getProperty(setting, "value")) for setting in self._non_printing_mesh_settings) + return deep_copy ## Gets the currently active extruder to print this object with. @@ -72,9 +86,14 @@ class SettingOverrideDecorator(SceneNodeDecorator): container_stack = containers[0] return container_stack.getMetaDataEntry("position", default=None) + def isNonPrintingMesh(self): + return self._is_non_printing_mesh + def _onSettingChanged(self, instance, property_name): # Reminder: 'property' is a built-in function # Trigger slice/need slicing if the value has changed. if property_name == "value": + self._is_non_printing_mesh = any(bool(self._stack.getProperty(setting, "value")) for setting in self._non_printing_mesh_settings) + Application.getInstance().getBackend().needsSlicing() Application.getInstance().getBackend().tickle() diff --git a/cura/Settings/UserProfilesModel.py b/cura/Settings/UserProfilesModel.py index 5ae9055759..e093c6c132 100644 --- a/cura/Settings/UserProfilesModel.py +++ b/cura/Settings/UserProfilesModel.py @@ -1,7 +1,7 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.Application import Application +from UM.Application import Application from cura.QualityManager import QualityManager from cura.Settings.ProfilesModel import ProfilesModel from cura.Settings.ExtruderManager import ExtruderManager @@ -12,13 +12,23 @@ class UserProfilesModel(ProfilesModel): def __init__(self, parent = None): super().__init__(parent) + #Need to connect to the metaDataChanged signal of the active materials. + self.__current_extruders = [] + self.__current_materials = [] + + Application.getInstance().getExtruderManager().extrudersChanged.connect(self.__onExtrudersChanged) + self.__onExtrudersChanged() + self.__current_materials = [extruder.material for extruder in self.__current_extruders] + for material in self.__current_materials: + material.metaDataChanged.connect(self._onContainerChanged) + ## Fetch the list of containers to display. # # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). def _fetchInstanceContainers(self): global_container_stack = Application.getInstance().getGlobalContainerStack() if not global_container_stack: - return [] + return {}, {} # Fetch the list of quality changes. quality_manager = QualityManager.getInstance() @@ -35,10 +45,36 @@ class UserProfilesModel(ProfilesModel): # Filter the quality_change by the list of available quality_types quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list]) - filtered_quality_changes = [qc for qc in quality_changes_list if + + filtered_quality_changes = {qc.getId():qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and qc.getMetaDataEntry("extruder") is not None and (qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or - qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())] + qc.getMetaDataEntry("extruder") == active_extruder.definition.getId())} - return filtered_quality_changes + return filtered_quality_changes, {} #Only return true profiles for now, no metadata. The quality manager is not able to get only metadata yet. + + ## Called when a container changed on an extruder stack. + # + # If it's the material we need to connect to the metaDataChanged signal of + # that. + def __onContainerChanged(self, new_container): + #Careful not to update when a quality or quality changes profile changed! + #If you then update you're going to have an infinite recursion because the update may change the container. + if new_container.getMetaDataEntry("type") == "material": + for material in self.__current_materials: + material.metaDataChanged.disconnect(self._onContainerChanged) + self.__current_materials = [extruder.material for extruder in self.__current_extruders] + for material in self.__current_materials: + material.metaDataChanged.connect(self._onContainerChanged) + + ## Called when the current set of extruders change. + # + # This makes sure that we are listening to the signal for when the + # materials change. + def __onExtrudersChanged(self): + for extruder in self.__current_extruders: + extruder.containersChanged.disconnect(self.__onContainerChanged) + self.__current_extruders = Application.getInstance().getExtruderManager().getExtruderStacks() + for extruder in self.__current_extruders: + extruder.containersChanged.connect(self.__onContainerChanged) \ No newline at end of file diff --git a/cura/Stages/CuraStage.py b/cura/Stages/CuraStage.py new file mode 100644 index 0000000000..8b7822ed7a --- /dev/null +++ b/cura/Stages/CuraStage.py @@ -0,0 +1,22 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from PyQt5.QtCore import pyqtProperty, QUrl, QObject + +from UM.Stage import Stage + +class CuraStage(Stage): + + def __init__(self, parent = None): + super().__init__(parent) + + @pyqtProperty(str, constant = True) + def stageId(self): + return self.getPluginId() + + @pyqtProperty(QUrl, constant = True) + def mainComponent(self): + return self.getDisplayComponent("main") + + @pyqtProperty(QUrl, constant = True) + def sidebarComponent(self): + return self.getDisplayComponent("sidebar") diff --git a/cura/Stages/__init__.py b/cura/Stages/__init__.py new file mode 100644 index 0000000000..2977645166 --- /dev/null +++ b/cura/Stages/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/cura_app.py b/cura_app.py index d725bc1200..b5844055ab 100755 --- a/cura_app.py +++ b/cura_app.py @@ -2,17 +2,45 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. + +import argparse import os import sys -import platform -import faulthandler from UM.Platform import Platform +parser = argparse.ArgumentParser(prog = "cura", + add_help = False) +parser.add_argument('--debug', + action='store_true', + default = False, + help = "Turn on the debug mode by setting this option." + ) +known_args = vars(parser.parse_known_args()[0]) + +if not known_args["debug"]: + def get_cura_dir_path(): + if Platform.isWindows(): + return os.path.expanduser("~/AppData/Roaming/cura/") + elif Platform.isLinux(): + return os.path.expanduser("~/.local/share/cura") + elif Platform.isOSX(): + return os.path.expanduser("~/Library/Logs/cura") + + if hasattr(sys, "frozen"): + dirpath = get_cura_dir_path() + os.makedirs(dirpath, exist_ok = True) + sys.stdout = open(os.path.join(dirpath, "stdout.log"), "w") + sys.stderr = open(os.path.join(dirpath, "stderr.log"), "w") + +import platform +import faulthandler + #WORKAROUND: GITHUB-88 GITHUB-385 GITHUB-612 if Platform.isLinux(): # Needed for platform.linux_distribution, which is not available on Windows and OSX # For Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826 - if platform.linux_distribution()[0] in ("debian", "Ubuntu", "LinuxMint"): # TODO: Needs a "if X11_GFX == 'nvidia'" here. The workaround is only needed on Ubuntu+NVidia drivers. Other drivers are not affected, but fine with this fix. + linux_distro_name = platform.linux_distribution()[0].lower() + if linux_distro_name in ("debian", "ubuntu", "linuxmint", "fedora"): # TODO: Needs a "if X11_GFX == 'nvidia'" here. The workaround is only needed on Ubuntu+NVidia drivers. Other drivers are not affected, but fine with this fix. import ctypes from ctypes.util import find_library libGL = find_library("GL") @@ -22,9 +50,10 @@ if Platform.isLinux(): # Needed for platform.linux_distribution, which is not av if Platform.isWindows() and hasattr(sys, "frozen"): try: del os.environ["PYTHONPATH"] - except KeyError: pass + except KeyError: + pass -#WORKAROUND: GITHUB-704 GITHUB-708 +# WORKAROUND: GITHUB-704 GITHUB-708 # It looks like setuptools creates a .pth file in # the default /usr/lib which causes the default site-packages # to be inserted into sys.path before PYTHONPATH. @@ -45,7 +74,8 @@ def exceptHook(hook_type, value, traceback): _crash_handler = CrashHandler(hook_type, value, traceback) _crash_handler.show() -sys.excepthook = exceptHook +if not known_args["debug"]: + sys.excepthook = exceptHook # Workaround for a race condition on certain systems where there # is a race condition between Arcus and PyQt. Importing Arcus @@ -55,29 +85,14 @@ import Arcus #@UnusedImport import cura.CuraApplication import cura.Settings.CuraContainerRegistry -def get_cura_dir_path(): - if Platform.isWindows(): - return os.path.expanduser("~/AppData/Local/cura/") - elif Platform.isLinux(): - return os.path.expanduser("~/.local/share/cura") - elif Platform.isOSX(): - return os.path.expanduser("~/Library/Logs/cura") - - -if hasattr(sys, "frozen"): - dirpath = get_cura_dir_path() - os.makedirs(dirpath, exist_ok = True) - sys.stdout = open(os.path.join(dirpath, "stdout.log"), "w") - sys.stderr = open(os.path.join(dirpath, "stderr.log"), "w") - faulthandler.enable() # Force an instance of CuraContainerRegistry to be created and reused later. cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance() -# This prestart up check is needed to determine if we should start the application at all. -if not cura.CuraApplication.CuraApplication.preStartUp(): +# This pre-start up check is needed to determine if we should start the application at all. +if not cura.CuraApplication.CuraApplication.preStartUp(parser = parser, parsed_command_line = known_args): sys.exit(0) -app = cura.CuraApplication.CuraApplication.getInstance() +app = cura.CuraApplication.CuraApplication.getInstance(parser = parser, parsed_command_line = known_args) app.run() diff --git a/installer.nsi b/installer.nsi index 79704eece8..7516f733a1 100644 --- a/installer.nsi +++ b/installer.nsi @@ -126,11 +126,7 @@ Section "Install Arduino Drivers" SectionEnd Section "Open STL files with Cura" - WriteRegStr HKCR .stl "" "Cura STL model file" - DeleteRegValue HKCR .stl "Content Type" - WriteRegStr HKCR "Cura STL model file\DefaultIcon" "" "$INSTDIR\Cura.exe,0" - WriteRegStr HKCR "Cura STL model file\shell" "" "open" - WriteRegStr HKCR "Cura STL model file\shell\open\command" "" '"$INSTDIR\Cura.exe" "%1"' + ${registerExtension} "$INSTDIR\Cura.exe" ".stl" "STL_File" SectionEnd Section /o "Open OBJ files with Cura" diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 786226ae61..89439454f8 100755 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -117,7 +117,7 @@ class ThreeMFReader(MeshReader): # Get the definition & set it definition = QualityManager.getInstance().getParentMachineDefinition(global_container_stack.getBottom()) - um_node.callDecoration("getStack").getTop().setDefinition(definition) + um_node.callDecoration("getStack").getTop().setDefinition(definition.getId()) setting_container = um_node.callDecoration("getStack").getTop() diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index acd4242fff..a7dad68519 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -122,7 +122,6 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Logger.log("w", "Could not find reader that was able to read the scene data for 3MF workspace") return WorkspaceReader.PreReadResult.failed - machine_name = "" machine_type = "" variant_type_name = i18n_catalog.i18nc("@label", "Nozzle") @@ -133,9 +132,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # A few lists of containers in this project files. # When loading the global stack file, it may be associated with those containers, which may or may not be # in Cura already, so we need to provide them as alternative search lists. - definition_container_list = [] instance_container_list = [] - material_container_list = [] resolve_strategy_keys = ["machine", "material", "quality_changes"] self._resolve_strategies = {k: None for k in resolve_strategy_keys} @@ -149,21 +146,20 @@ class ThreeMFWorkspaceReader(WorkspaceReader): definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] for each_definition_container_file in definition_container_files: container_id = self._stripFileToId(each_definition_container_file) - definitions = self._container_registry.findDefinitionContainers(id=container_id) + definitions = self._container_registry.findDefinitionContainersMetadata(id = container_id) if not definitions: definition_container = DefinitionContainer(container_id) - definition_container.deserialize(archive.open(each_definition_container_file).read().decode("utf-8"), - file_name = each_definition_container_file) + definition_container.deserialize(archive.open(each_definition_container_file).read().decode("utf-8"), file_name = each_definition_container_file) + definition_container = definition_container.getMetaData() else: definition_container = definitions[0] - definition_container_list.append(definition_container) - definition_container_type = definition_container.getMetaDataEntry("type") + definition_container_type = definition_container.get("type") if definition_container_type == "machine": - machine_type = definition_container.getName() - variant_type_name = definition_container.getMetaDataEntry("variants_name", variant_type_name) + machine_type = definition_container["name"] + variant_type_name = definition_container.get("variants_name", variant_type_name) machine_definition_container_count += 1 elif definition_container_type == "extruder": @@ -187,11 +183,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): material_container_files = [name for name in cura_file_names if name.endswith(self._material_container_suffix)] for material_container_file in material_container_files: container_id = self._stripFileToId(material_container_file) - materials = self._container_registry.findInstanceContainers(id=container_id) material_labels.append(self._getMaterialLabelFromSerialized(archive.open(material_container_file).read().decode("utf-8"))) - if materials: + if self._container_registry.findContainersMetadata(id = container_id): #This material already exists. containers_found_dict["material"] = True - if not materials[0].isReadOnly(): # Only non readonly materials can be in conflict + if not self._container_registry.isReadOnly(container_id): # Only non readonly materials can be in conflict material_conflict = True Job.yieldThread() @@ -449,6 +444,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruder_stacks = [] extruder_stacks_added = [] container_stacks_added = [] + machine_extruder_count = None containers_added = [] @@ -461,16 +457,17 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruder_stack_id_map = {} # new and old ExtruderStack IDs map if self._resolve_strategies["machine"] == "new": # We need a new id if the id already exists - if self._container_registry.findContainerStacks(id = global_stack_id_original): + if self._container_registry.findContainerStacksMetadata(id = global_stack_id_original): global_stack_id_new = self.getNewId(global_stack_id_original) global_stack_need_rename = True - global_stack_name_new = self._container_registry.uniqueName(global_stack_name_original) + if self._container_registry.findContainerStacksMetadata(name = global_stack_id_original): + global_stack_name_new = self._container_registry.uniqueName(global_stack_name_original) for each_extruder_stack_file in extruder_stack_files: old_container_id = self._stripFileToId(each_extruder_stack_file) new_container_id = old_container_id - if self._container_registry.findContainerStacks(id = old_container_id): + if self._container_registry.findContainerStacksMetadata(id = old_container_id): # get a new name for this extruder new_container_id = self.getNewId(old_container_id) @@ -484,7 +481,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)] for definition_container_file in definition_container_files: container_id = self._stripFileToId(definition_container_file) - definitions = self._container_registry.findDefinitionContainers(id = container_id) + definitions = self._container_registry.findDefinitionContainersMetadata(id = container_id) if not definitions: definition_container = DefinitionContainer(container_id) definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"), @@ -511,7 +508,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): containers_to_add.append(material_container) else: material_container = materials[0] - if not material_container.isReadOnly(): # Only create new materials if they are not read only. + if not self._container_registry.isReadOnly(container_id): # Only create new materials if they are not read only. if self._resolve_strategies["material"] == "override": material_container.deserialize(archive.open(material_container_file).read().decode("utf-8"), file_name = material_container_file) @@ -578,7 +575,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if old_extruder_id: new_extruder_id = extruder_stack_id_map[old_extruder_id] new_id = new_extruder_id + "_current_settings" - instance_container._id = new_id + instance_container.setMetaDataEntry("id", new_id) instance_container.setName(new_id) instance_container.setMetaDataEntry("extruder", new_extruder_id) containers_to_add.append(instance_container) @@ -587,7 +584,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if machine_id: new_machine_id = self.getNewId(machine_id) new_id = new_machine_id + "_current_settings" - instance_container._id = new_id + instance_container.setMetaDataEntry("id", new_id) instance_container.setName(new_id) instance_container.setMetaDataEntry("machine", new_machine_id) containers_to_add.append(instance_container) @@ -636,8 +633,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # The ID already exists, but nothing in the values changed, so do nothing. pass quality_and_definition_changes_instance_containers.append(instance_container) + + if container_type == "definition_changes": + definition_changes_extruder_count = instance_container.getProperty("machine_extruder_count", "value") + if definition_changes_extruder_count is not None: + machine_extruder_count = definition_changes_extruder_count + else: - existing_container = self._container_registry.findInstanceContainers(id = container_id) + existing_container = self._container_registry.findInstanceContainersMetadata(id = container_id) if not existing_container: containers_to_add.append(instance_container) if global_stack_need_rename: @@ -663,14 +666,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # HACK # There is a machine, check if it has authentication data. If so, keep that data. - network_authentication_id = container_stacks[0].getMetaDataEntry("network_authentication_id") - network_authentication_key = container_stacks[0].getMetaDataEntry("network_authentication_key") - container_stacks[0].deserialize(archive.open(global_stack_file).read().decode("utf-8"), - file_name = global_stack_file) + network_authentication_id = stack.getMetaDataEntry("network_authentication_id") + network_authentication_key = stack.getMetaDataEntry("network_authentication_key") + stack.deserialize(archive.open(global_stack_file).read().decode("utf-8"), file_name = global_stack_file) if network_authentication_id: - container_stacks[0].addMetaDataEntry("network_authentication_id", network_authentication_id) + stack.addMetaDataEntry("network_authentication_id", network_authentication_id) if network_authentication_key: - container_stacks[0].addMetaDataEntry("network_authentication_key", network_authentication_key) + stack.addMetaDataEntry("network_authentication_key", network_authentication_key) elif self._resolve_strategies["machine"] == "new": # create a new global stack @@ -794,8 +796,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if stack.quality.getId() in ("empty", "empty_quality"): has_not_supported = True break + + # We filter out extruder stacks that are not actually used, for example the UM3 and custom FDM printer extruder count setting. + extruder_stacks_in_use = extruder_stacks + if machine_extruder_count is not None: + extruder_stacks_in_use = extruder_stacks[:machine_extruder_count] + available_quality = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_stack, - extruder_stacks) + extruder_stacks_in_use) if not has_not_supported: has_not_supported = not available_quality @@ -803,10 +811,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if has_not_supported: empty_quality_container = self._container_registry.findInstanceContainers(id = "empty_quality")[0] - for stack in [global_stack] + extruder_stacks: + for stack in [global_stack] + extruder_stacks_in_use: stack.replaceContainer(_ContainerIndexes.Quality, empty_quality_container) empty_quality_changes_container = self._container_registry.findInstanceContainers(id = "empty_quality_changes")[0] - for stack in [global_stack] + extruder_stacks: + for stack in [global_stack] + extruder_stacks_in_use: stack.replaceContainer(_ContainerIndexes.QualityChanges, empty_quality_changes_container) quality_has_been_changed = True @@ -827,6 +835,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): preferred_quality_id = global_stack.getMetaDataEntry("preferred_quality", None) if preferred_quality_id is not None: definition_id = global_stack.definition.getId() + definition_id = global_stack.definition.getMetaDataEntry("quality_definition", definition_id) if not parseBool(global_stack.getMetaDataEntry("has_machine_quality", "False")): definition_id = "fdmprinter" @@ -838,7 +847,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): global_stack.quality = containers[0] global_stack.qualityChanges = empty_quality_changes_container # also find the quality containers for the extruders - for extruder_stack in extruder_stacks: + for extruder_stack in extruder_stacks_in_use: search_criteria = {"id": preferred_quality_id, "type": "quality", "definition": definition_id} @@ -859,27 +868,15 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # be correct. For example, for UM2, the quality container can be "draft" while it should be "um2_draft" # instead. # In this code branch, we try to fix those incorrect quality containers. - search_criteria = {"type": "quality", - "quality_type": global_stack.quality.getMetaDataEntry("quality_type")} - search_criteria["definition"] = global_stack.definition.getId() - if not parseBool(global_stack.getMetaDataEntry("has_machine_quality", "False")): - search_criteria["definition"] = "fdmprinter" + # + # ***IMPORTANT***: We only do this fix for single-extrusion machines. + # We will first find the correct quality profile for the extruder, then apply the same + # quality profile for the global stack. + # + if len(extruder_stacks) == 1: + extruder_stack = extruder_stacks[0] - containers = self._container_registry.findInstanceContainers(**search_criteria) - containers = [c for c in containers if not c.getMetaDataEntry("material", "")] - if not containers: - # cannot find machine-specific qualities, so just use fdmprinter to search again - search_criteria["definition"] = "fdmprinter" - containers = self._container_registry.findInstanceContainers(**search_criteria) - containers = [c for c in containers if not c.getMetaDataEntry("material", "")] - - if containers: - new_quality_container = containers[0] - global_stack.quality = new_quality_container - - for extruder_stack in extruder_stacks: - search_criteria = {"type": "quality", - "quality_type": global_stack.quality.getMetaDataEntry("quality_type")} + search_criteria = {"type": "quality", "quality_type": global_stack.quality.getMetaDataEntry("quality_type")} search_criteria["definition"] = global_stack.definition.getId() if not parseBool(global_stack.getMetaDataEntry("has_machine_quality", "False")): search_criteria["definition"] = "fdmprinter" @@ -888,7 +885,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): search_criteria["material"] = extruder_stack.material.getId() containers = self._container_registry.findInstanceContainers(**search_criteria) if containers: - extruder_stack.quality = containers[0] + new_quality_container = containers[0] + extruder_stack.quality = new_quality_container + global_stack.quality = new_quality_container # Replacing the old containers if resolve is "new". # When resolve is "new", some containers will get renamed, so all the other containers that reference to those diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py index 95fef78081..5b474843d5 100644 --- a/plugins/3MFReader/WorkspaceDialog.py +++ b/plugins/3MFReader/WorkspaceDialog.py @@ -1,12 +1,10 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import QUrl, pyqtSignal, QObject, pyqtProperty, QCoreApplication +from PyQt5.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication from UM.FlameProfiler import pyqtSlot -from PyQt5.QtQml import QQmlComponent, QQmlContext from UM.PluginRegistry import PluginRegistry from UM.Application import Application -from UM.Logger import Logger from UM.i18n import i18nCatalog from UM.Settings.ContainerRegistry import ContainerRegistry diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index 9c143f0057..f07a37a25f 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -59,7 +59,9 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): version_file = zipfile.ZipInfo("Cura/version.ini") version_config_parser = configparser.ConfigParser() version_config_parser.add_section("versions") - version_config_parser.set("versions", "cura_version", Application.getStaticVersion()) + version_config_parser.set("versions", "cura_version", Application.getInstance().getVersion()) + version_config_parser.set("versions", "build_type", Application.getInstance().getBuildType()) + version_config_parser.set("versions", "is_debug_mode", str(Application.getInstance().getIsDebugMode())) version_file_string = StringIO() version_config_parser.write(version_file_string) @@ -95,7 +97,7 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): file_in_archive.compress_type = zipfile.ZIP_DEFLATED # Do not include the network authentication keys - ignore_keys = ["network_authentication_id", "network_authentication_key"] + ignore_keys = {"network_authentication_id", "network_authentication_key"} serialized_data = container.serialize(ignored_metadata_keys = ignore_keys) archive.writestr(file_in_archive, serialized_data) diff --git a/plugins/ChangeLogPlugin/ChangeLog.py b/plugins/ChangeLogPlugin/ChangeLog.py index 22218bfaeb..c31d1337ef 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.py +++ b/plugins/ChangeLogPlugin/ChangeLog.py @@ -8,8 +8,7 @@ from UM.Application import Application from UM.PluginRegistry import PluginRegistry from UM.Version import Version -from PyQt5.QtQml import QQmlComponent, QQmlContext -from PyQt5.QtCore import QUrl, pyqtSlot, QObject +from PyQt5.QtCore import pyqtSlot, QObject import os.path import collections diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index d7d68e04a2..de895b3e41 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,3 +1,72 @@ +[3.1.0] +*Profile added for 0.25 mm print core +This new print core gives extra fine line widths which gives prints extra definition and surface quality. + +*Profile added for Breakaway material +New material profile for Breakaway material, a new dry post processing support material, which can be used for models with flat surface area overhangs. + +*Layer view +The existing Layer View has been updated in order to see a live simulation of all the paths within a layer. + +*Quick camera controls +New buttons have been added to the interface that can quickly reposition the camera view of the buildplate. + +*Lock model on platform +The move tool has a new option to lock a selected model to the platform. + +*Faster profile switching speed +Duplicating and removing a profile could take Ultimaker Cura quite some time, it now happens instantly. + +*Faster printer selection +Removing a printer from the library is now instant. No more unresponsive screens. + +*Faster processing speed +A 5 - 10 % speed increase when calculating normals, loading models, and slicing. + +*Feedrate visualization +Feedrate visualization has been added to the Layer view. Using this gives the user an idea of the print speeds per model part, allowing for better control over prints. + +*Jogging +It allows the printhead to be moved with on-screen controls. Contributed by fieldOfView. + +*Large model loading +A new feature has been added which unloads the layer view when switching to solid mode, speeding Ultimaker Cura back up without losing your G-code/layer view information. + +*Scripts folder +A scripts folder is now available in the Ultimaker Cura configuration folder. This folder can be loaded with post processing plugins scripts, which will automatically show in Ultimaker Cura. Contributed by fieldOfView. + +*Optimized workflow for crash reporting +Crash reports are automatically generated and allow the user, in case of a crash, to easily send their report with a description to developers. + +*Floating models enabled +In previous releases, models were dropped to the build plate when support was disabled. Models now float when the setting is enabled (even if creates an impossible-to-print situation). This can be used to stack separate models on top of each other. + +*Slicing tolerance +A new setting that affects the intersect point to influence the dimensional accuracy for diagonal surfaces. The user can select the behaviour: ‘Inclusive’ makes gaps narrower, ‘Exclusive’ makes gaps wider, and ‘Middle’ is the fastest to process. This can be used to create better tolerances for printed screw holes. Contributed by BagelOrb. + +*Optimized zig zag patterns +Zig zag patterns now print more consistently. Lines now have a 5 micron tolerance in which they are printed any way, resulting in longer connected lines. Contributed by smartavionics. + +*Aligned z-seam inner wall moves +Inner wall travel moves are aligned with the z-seam. This reduces the number of travel moves and reduces the chance of more unwanted seams. + +*Relative positioning of infill patterns +Infill patterns are now positioned relative to the center of loaded models and an offset can be applied to control the infill more precisely and adjust it to preference or strength. Contributed by smartavionics. + +*Line resolution +Enables the user to specify the minimum allowed distance value between two points in G-code to create lower or higher resolution polygons. + +*Custom mode changes +If profile settings have been modified in recommended mode under custom mode, a reset icon will appear to notify the user. Click the icon to show the changes that have been made, and revert back to the default profile settings. + +*Bugfixes +- Fix for layer numbers being displayed incorrectly when switching between solid and layer mode +- Fix for Ultimaker Cura engine crashes on certain models +- Fix for Uninstalling previous versions of Cura on Windows platforms +- Fix for displaying visible settings +- Fix for importing legacy .ini files +- Prevent skipping user agreement dialog by pressing escape + [3.0.4] *Bug fixes - Fixed OpenGL issue that prevents Cura from starting. @@ -40,7 +109,7 @@ The build plate now shows graduations of 10 mm and 1 mm for easy model positioni Extruder tabs have become buttons and icons have been updated. *Add an "Export to Cura" button in SOLIDWORKS -SOLIDWORKS plugin can now be installed using an automatic installer. +A macro can be added to your SOLIDWORKS installation that loads your model into Ultimaker Cura. *Siemens NX macro When a user updates models in Siemens NX and clicks the button, the updated models replace the models opened in Ultimaker Cura. @@ -571,10 +640,10 @@ The new GUI allows custom profiles to load easily and intuitively, directly from *3MF File Loading Support We’re happy to report we now support loading 3MF files. This is a new file format similar to AMF, but freely available. -*Intuitive Cut-Off Object Bottom +*Intuitive Cut-Off Object Bottom We’ve added a feature that allows you to move objects below the build plate. You can either correct a model with a rough bottom, or print only a part of an object. Please note that the implementation differs greatly from the old one when it was just a setting. -*64-bit Windows Builds +*64-bit Windows Builds An optimized 64-bit Windows Cura version is now available. This allows you to load larger model files. *Automatic calculations @@ -639,3 +708,165 @@ Prints the outer walls with a jittering motion to give your object a diffuse fin *Wire Printing The object is printed with a mid-air / net-like structure, following the mesh surface. The build plate will move up and down during diagonal segments. Though not visible in layer view, you can view the result in other software, such as Repetier Host or http://chilipeppr.com/tinyg. + + +[15.06 Beta] + +Cura 15.06 is a new release built from the ground up on a completely new +framework called Uranium. This framework has been designed to make it easier to +extend Cura with additional functionality as well as provide a cleaner UI. + +[15.05.95] + +* Fixed: Selection ghost remains visible after deleting an object +* Fixed: Window does not show up immediately after starting application on OSX +* Fixed: Added display of rotation angle during rotation +* Fixed: Object changes position while rotating/scaling +* Fixed: Loading improvements in the layer view +* Fixed: Added application icons +* Fixed: Improved feedback when loading models +* Fixed: Eject device on MacOSX now provides proper feedback +* Fixed: Make it possible to show retraction settings for UM2 +* Fixed: Opening the machine preferences page will switch to the first available machine +* Fixed: Improved tool handle hit area size +* Fixed: Render lines with a thickness based on screen DPI + +[15.05.94] + +* Added Russian translations +* Fixed: Infill not displayed in layer view +* Fixed: Cannot select/scale/rotate when first activating the tool and then trying to select a model. +* Fixed: Improved font rendering on Windows +* Fixed: Help > Show Documentation crashes Cura on Windows +* Fixed: "There is no disk in the drive" repeating messages on Windows +* Fixed: Retraction settings not visible for Ultimaker2 +* Fixed: Display rotation angle when rotating an object +* Fixed: Time/Quality slider values are properly rounded +* Fixed: Improved clarity of buttons and text +* Fixed: No indication that anything is happening when loading a model +* Fixed: Eject device now works on Windows + +[15.05.93] + +* Fixed: No shortcuts for moving up/down layers in layer view. +* Fixed: Last view layers could not be scrolled through in layer view. +* Fixed: Files provided on command line would not actually show up on the build + platform. +* Fixed: Render a ghost of the selection in Layer view to make the actual object + position clear. +* Fixed: Showing a menu would clear the selection. +* Fixed: Size and scaling factor display for scale tool. +* Fixed: Missing background for additional tool controls. +* Fixed: Loading message times out when loading large files. +* Fixed: Show recent files in the file menu. +* Fixed: Windows installer will now install MSVC 2010 redistributable, to + prevent issues with missing DLL's. +* Fixed: Collapsed/expanded state of setting categories not stored. + +[15.05.91] + +* There is now a working MacOSX version. Currently it supports OSX 10.7 and + higher. +* Fixed: Need to deselect before selecting a different object. +* Fixed: Object can be moved on Z axis. +* Fixed: Error values should be considered invalid values and will not trigger a + slice. +* Fixed: Text fields used a locale-aware validator while the underlying code did + not. +* Fixed: Text fields will trigger a slice on text change, not only after focus + change/enter press. +* Fixed: Rotate Tool snaps to incorrect value. +* Fixed: Object Collision would only moved objects to the right. +* Fixed: Object Collision would move the selected object when it should not. +* Fixed: Camera panning now works correctly instead of doing nothing. +* Fixed: Camera would flip around center point at maximum rotation. +* Fixed: Build platform grid blocked view from below objects. +* Fixed: Viewport on MacOSX with high-DPI screens was only taking 1/4th of the +window + +[15.05.90] + +* Fixed: Additional UI elements for tools and views not loading. +* Fixed: Double click needed to change setting dialog page. +* Fixed: Context menu entries (reload, center object, etc.) not working. +* Fixed: "Open With" or passing files from command line not working. +* Fixed: "Reload All" would not reload files. + +In addition, a lot of work has gone into getting a usable Mac OSX version. + +New Features +------------ + +* Plugin based system + The Uranium framework provides us with a plugin-based system + that provides additional flexibility when extending Cura. Think + of new views, tools, file formats, etc. This is probably the + biggest new feature. +* Improved UI + The UI has received a complete overhaul. +* Time-Quality Slider + The 4 static quick print profiles have been replaced with + a slider that should make it easier to find the right spot + between print time and print quality. +* More Settings + The Advanced mode is now configurable and can show many + additional settings that were previously not available, while at + the same time not overwhelming new users with too many settings. + Custom set of visible settings can be created by the user. +* Support for high-DPI screens + The refreshed UI has been designed with high-DPI screens in + mind which should improve the experience of Cura on such + devices. +* Improved language support + (Not yet available for the Beta release.) +* Improved support structure generation + The new version of the CuraEngine now features improved + support generation algorithms and additional options for support + structure generation. +* Experimental Feature: Wire Printing + Wire Printing has been added as an experimental new feature. It + will print objects as a structure of lines. It can be enabled by + from Advanced Mode -> Fixes -> Wire Printing. +* Undo/Redo + It is now possible to undo and redo most scene operations, like + moving or rotating objects. + +Features from earlier versions not (yet) in this release +-------------------------------------------------------- + +* The All-at-once/One-at-a-time toggle is not available. + We are working on an improved implementation of this mechanism + but it will not be available for this release. +* No dual extrusion features are available yet. + We are working on a completely new workflow for this but this + needs additional time. +* “Lay Flat” has been removed. + The existing implementation was unfortunately not salvageable. + We will be looking into an improved implementation for this + feature. +* "Split Object Into Parts" has been removed. + Due to the same reason as Lay Flat. +* Support for AMF and DAE file formats has been removed. + Both of these will be implemented as plugins in the future. +* Support for directly loading a GCode file is not yet available. + This will be implemented as a plugin in the future. +* Support for PNG, JPG and other image formats has been removed. + These can be supported by a plugin with an improved UI. +* Support for loading Minecraft levels has been removed. + This can be implemented as a plugin. +* Windows XP support has been dropped. + Microsoft is no longer supporting xp, so they no longer back + port certain features that we require. +* X-Ray view is missing. + Will be implemented as a (you might have guessed it) plugin. +* Fixes: Follow Mesh Surface + Has been removed from the engine, the same result can be + achieved using no infill or top/bottom layers. + +Known Issues +------------ +* Some OBJ files are rendered as black objects due to missing + normals. +* Disabling plugins does not work correctly yet. +* Unicorn occasionally still requires feeding. Do not feed it + after midnight. diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index d35df967b2..4581a78479 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -86,6 +86,7 @@ class CuraEngineBackend(QObject, Backend): # self._global_container_stack = None Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) + Application.getInstance().getExtruderManager().activeExtruderChanged.connect(self._onGlobalStackChanged) self._onGlobalStackChanged() Application.getInstance().stacksValidationFinished.connect(self._onStackErrorCheckFinished) diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 37ab451d16..26a8269183 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -61,7 +61,9 @@ class ProcessSlicedLayersJob(Job): def run(self): start_time = time() - if Application.getInstance().getController().getActiveView().getPluginId() == "SimulationView": + view = Application.getInstance().getController().getActiveView() + if view.getPluginId() == "SimulationView": + view.resetLayerData() self._progress_message.show() Job.yieldThread() if self._abort_requested: @@ -226,10 +228,6 @@ class ProcessSlicedLayersJob(Job): if self._progress_message: self._progress_message.setProgress(100) - view = Application.getInstance().getController().getActiveView() - if view.getPluginId() == "SimulationView": - view.resetLayerData() - if self._progress_message: self._progress_message.hide() diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index b922baea52..4da26aa78f 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -19,6 +19,10 @@ from UM.Settings.SettingRelation import RelationType from cura.OneAtATimeIterator import OneAtATimeIterator from cura.Settings.ExtruderManager import ExtruderManager + +NON_PRINTING_MESH_SETTINGS = ["anti_overhang_mesh", "infill_mesh", "cutting_mesh"] + + class StartJobResult(IntEnum): Finished = 1 Error = 2 @@ -45,14 +49,6 @@ class GcodeStartEndFormatter(Formatter): ## Job class that builds up the message of scene data to send to CuraEngine. class StartSliceJob(Job): - ## Meshes that are sent to the engine regardless of being outside of the - # build volume. - # - # If these settings are True for any mesh, the build volume is ignored. - # Note that Support Mesh is not in here because it actually generates - # g-code in the volume of the mesh. - _not_printed_mesh_settings = {"anti_overhang_mesh", "infill_mesh", "cutting_mesh"} - def __init__(self, slice_message): super().__init__() @@ -139,13 +135,25 @@ class StartSliceJob(Job): Logger.log("w", "No objects suitable for one at a time found, or no correct order found") else: temp_list = [] + has_printing_mesh = False for node in DepthFirstIterator(self._scene.getRoot()): - if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None: - if not getattr(node, "_outside_buildarea", False)\ - or (node.callDecoration("getStack") and any(node.callDecoration("getStack").getProperty(setting, "value") for setting in self._not_printed_mesh_settings)): + if node.callDecoration("isSliceable") and type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None: + per_object_stack = node.callDecoration("getStack") + is_non_printing_mesh = False + if per_object_stack: + is_non_printing_mesh = any(per_object_stack.getProperty(key, "value") for key in NON_PRINTING_MESH_SETTINGS) + + if not getattr(node, "_outside_buildarea", False) or not is_non_printing_mesh: temp_list.append(node) + if not is_non_printing_mesh: + has_printing_mesh = True Job.yieldThread() + #If the list doesn't have any model with suitable settings then clean the list + # otherwise CuraEngine will crash + if not has_printing_mesh: + temp_list.clear() + if temp_list: object_groups.append(temp_list) @@ -205,32 +213,53 @@ class StartSliceJob(Job): def isCancelled(self): return self._is_cancelled - def _expandGcodeTokens(self, key, value, settings): + ## Creates a dictionary of tokens to replace in g-code pieces. + # + # This indicates what should be replaced in the start and end g-codes. + # \param stack The stack to get the settings from to replace the tokens + # with. + # \return A dictionary of replacement tokens to the values they should be + # replaced with. + def _buildReplacementTokens(self, stack) -> dict: + result = {} + for key in stack.getAllKeys(): + result[key] = stack.getProperty(key, "value") + Job.yieldThread() + + result["print_bed_temperature"] = result["material_bed_temperature"] # Renamed settings. + result["print_temperature"] = result["material_print_temperature"] + result["time"] = time.strftime("%H:%M:%S") #Some extra settings. + result["date"] = time.strftime("%d-%m-%Y") + result["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))] + + return result + + ## Replace setting tokens in a piece of g-code. + # \param value A piece of g-code to replace tokens in. + # \param settings A dictionary of tokens to replace and their respective + # replacement strings. + def _expandGcodeTokens(self, value: str, settings: dict): try: # any setting can be used as a token fmt = GcodeStartEndFormatter() - return str(fmt.format(value, **settings)).encode("utf-8") + return str(fmt.format(value, **settings)) except: Logger.logException("w", "Unable to do token replacement on start/end gcode") - return str(value).encode("utf-8") + return str(value) ## Create extruder message from stack def _buildExtruderMessage(self, stack): message = self._slice_message.addRepeatedMessage("extruders") message.id = int(stack.getMetaDataEntry("position")) - material_instance_container = stack.findContainer({"type": "material"}) + settings = self._buildReplacementTokens(stack) - settings = {} - for key in stack.getAllKeys(): - settings[key] = stack.getProperty(key, "value") - Job.yieldThread() + # Also send the material GUID. This is a setting in fdmprinter, but we have no interface for it. + settings["material_guid"] = stack.material.getMetaDataEntry("GUID", "") - settings["print_bed_temperature"] = settings["material_bed_temperature"] #Renamed settings. - settings["print_temperature"] = settings["material_print_temperature"] - settings["time"] = time.strftime("%H:%M:%S") #Some extra settings. - settings["date"] = time.strftime("%d-%m-%Y") - settings["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))] + # Replace the setting tokens in start and end g-code. + settings["machine_extruder_start_code"] = self._expandGcodeTokens(settings["machine_extruder_start_code"], settings) + settings["machine_extruder_end_code"] = self._expandGcodeTokens(settings["machine_extruder_end_code"], settings) for key, value in settings.items(): # Do not send settings that are not settable_per_extruder. @@ -238,13 +267,7 @@ class StartSliceJob(Job): continue setting = message.getMessage("settings").addRepeatedMessage("settings") setting.name = key - if key == "material_guid" and material_instance_container: - # Also send the material GUID. This is a setting in fdmprinter, but we have no interface for it. - setting.value = str(material_instance_container.getMetaDataEntry("GUID", "")).encode("utf-8") - elif key == "machine_extruder_start_code" or key == "machine_extruder_end_code": - setting.value = self._expandGcodeTokens(key, value, settings) - else: - setting.value = str(stack.getProperty(key, "value")).encode("utf-8") + setting.value = str(value).encode("utf-8") Job.yieldThread() ## Sends all global settings to the engine. @@ -252,33 +275,28 @@ class StartSliceJob(Job): # The settings are taken from the global stack. This does not include any # per-extruder settings or per-object settings. def _buildGlobalSettingsMessage(self, stack): - keys = stack.getAllKeys() - settings = {} - for key in keys: - settings[key] = stack.getProperty(key, "value") - Job.yieldThread() + settings = self._buildReplacementTokens(stack) + # Pre-compute material material_bed_temp_prepend and material_print_temp_prepend start_gcode = settings["machine_start_gcode"] - #Pre-compute material material_bed_temp_prepend and material_print_temp_prepend bed_temperature_settings = {"material_bed_temperature", "material_bed_temperature_layer_0"} settings["material_bed_temp_prepend"] = all(("{" + setting + "}" not in start_gcode for setting in bed_temperature_settings)) print_temperature_settings = {"material_print_temperature", "material_print_temperature_layer_0", "default_material_print_temperature", "material_initial_print_temperature", "material_final_print_temperature", "material_standby_temperature"} settings["material_print_temp_prepend"] = all(("{" + setting + "}" not in start_gcode for setting in print_temperature_settings)) - settings["print_bed_temperature"] = settings["material_bed_temperature"] - settings["print_temperature"] = settings["material_print_temperature"] + # Find the correct temperatures from the first used extruder + extruder_stack = Application.getInstance().getExtruderManager().getUsedExtruderStacks()[0] + extruder_0_settings = self._buildReplacementTokens(extruder_stack) - settings["time"] = time.strftime('%H:%M:%S') - settings["date"] = time.strftime('%d-%m-%Y') - settings["day"] = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][int(time.strftime('%w'))] + # Replace the setting tokens in start and end g-code. + settings["machine_start_gcode"] = self._expandGcodeTokens(settings["machine_start_gcode"], extruder_0_settings) + settings["machine_end_gcode"] = self._expandGcodeTokens(settings["machine_end_gcode"], extruder_0_settings) - for key, value in settings.items(): #Add all submessages for each individual setting. + # Add all sub-messages for each individual setting. + for key, value in settings.items(): setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings") setting_message.name = key - if key == "machine_start_gcode" or key == "machine_end_gcode": #If it's a g-code message, use special formatting. - setting_message.value = self._expandGcodeTokens(key, value, settings) - else: - setting_message.value = str(value).encode("utf-8") + setting_message.value = str(value).encode("utf-8") Job.yieldThread() ## Sends for some settings which extruder they should fallback to if not @@ -348,3 +366,4 @@ class StartSliceJob(Job): relations_set.add(relation.target.key) self._addRelations(relations_set, relation.target.relations) + diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py new file mode 100644 index 0000000000..cd317027ee --- /dev/null +++ b/plugins/GCodeReader/FlavorParser.py @@ -0,0 +1,462 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Application import Application +from UM.Backend import Backend +from UM.Job import Job +from UM.Logger import Logger +from UM.Math.AxisAlignedBox import AxisAlignedBox +from UM.Math.Vector import Vector +from UM.Message import Message +from UM.Scene.SceneNode import SceneNode +from UM.i18n import i18nCatalog +from UM.Preferences import Preferences + +catalog = i18nCatalog("cura") + +from cura import LayerDataBuilder +from cura import LayerDataDecorator +from cura.LayerPolygon import LayerPolygon +from cura.GCodeListDecorator import GCodeListDecorator +from cura.Settings.ExtruderManager import ExtruderManager + +import numpy +import math +import re +from collections import namedtuple + +# This parser is intented for interpret the common firmware codes among all the different flavors +class FlavorParser: + + def __init__(self): + Application.getInstance().hideMessageSignal.connect(self._onHideMessage) + self._cancelled = False + self._message = None + self._layer_number = 0 + self._extruder_number = 0 + self._clearValues() + self._scene_node = None + # X, Y, Z position, F feedrate and E extruder values are stored + self._position = namedtuple('Position', ['x', 'y', 'z', 'f', 'e']) + self._is_layers_in_file = False # Does the Gcode have the layers comment? + self._extruder_offsets = {} # Offsets for multi extruders. key is index, value is [x-offset, y-offset] + self._current_layer_thickness = 0.2 # default + + Preferences.getInstance().addPreference("gcodereader/show_caution", True) + + def _clearValues(self): + self._filament_diameter = 2.85 + self._extruder_number = 0 + self._extrusion_length_offset = [0] + self._layer_type = LayerPolygon.Inset0Type + self._layer_number = 0 + self._previous_z = 0 + self._layer_data_builder = LayerDataBuilder.LayerDataBuilder() + self._center_is_zero = False + self._is_absolute_positioning = True # It can be absolute (G90) or relative (G91) + self._is_absolute_extrusion = True # It can become absolute (M82, default) or relative (M83) + + @staticmethod + def _getValue(line, code): + n = line.find(code) + if n < 0: + return None + n += len(code) + pattern = re.compile("[;\s]") + match = pattern.search(line, n) + m = match.start() if match is not None else -1 + try: + if m < 0: + return line[n:] + return line[n:m] + except: + return None + + def _getInt(self, line, code): + value = self._getValue(line, code) + try: + return int(value) + except: + return None + + def _getFloat(self, line, code): + value = self._getValue(line, code) + try: + return float(value) + except: + return None + + def _onHideMessage(self, message): + if message == self._message: + self._cancelled = True + + @staticmethod + def _getNullBoundingBox(): + return AxisAlignedBox(minimum=Vector(0, 0, 0), maximum=Vector(10, 10, 10)) + + def _createPolygon(self, layer_thickness, path, extruder_offsets): + countvalid = 0 + for point in path: + if point[5] > 0: + countvalid += 1 + if countvalid >= 2: + # we know what to do now, no need to count further + continue + if countvalid < 2: + return False + try: + self._layer_data_builder.addLayer(self._layer_number) + self._layer_data_builder.setLayerHeight(self._layer_number, path[0][2]) + self._layer_data_builder.setLayerThickness(self._layer_number, layer_thickness) + this_layer = self._layer_data_builder.getLayer(self._layer_number) + except ValueError: + return False + count = len(path) + line_types = numpy.empty((count - 1, 1), numpy.int32) + line_widths = numpy.empty((count - 1, 1), numpy.float32) + line_thicknesses = numpy.empty((count - 1, 1), numpy.float32) + line_feedrates = numpy.empty((count - 1, 1), numpy.float32) + line_widths[:, 0] = 0.35 # Just a guess + line_thicknesses[:, 0] = layer_thickness + points = numpy.empty((count, 3), numpy.float32) + extrusion_values = numpy.empty((count, 1), numpy.float32) + i = 0 + for point in path: + points[i, :] = [point[0] + extruder_offsets[0], point[2], -point[1] - extruder_offsets[1]] + extrusion_values[i] = point[4] + if i > 0: + line_feedrates[i - 1] = point[3] + line_types[i - 1] = point[5] + if point[5] in [LayerPolygon.MoveCombingType, LayerPolygon.MoveRetractionType]: + line_widths[i - 1] = 0.1 + line_thicknesses[i - 1] = 0.0 # Travels are set as zero thickness lines + else: + line_widths[i - 1] = self._calculateLineWidth(points[i], points[i-1], extrusion_values[i], extrusion_values[i-1], layer_thickness) + i += 1 + + this_poly = LayerPolygon(self._extruder_number, line_types, points, line_widths, line_thicknesses, line_feedrates) + this_poly.buildCache() + + this_layer.polygons.append(this_poly) + return True + + def _createEmptyLayer(self, layer_number): + self._layer_data_builder.addLayer(layer_number) + self._layer_data_builder.setLayerHeight(layer_number, 0) + self._layer_data_builder.setLayerThickness(layer_number, 0) + + def _calculateLineWidth(self, current_point, previous_point, current_extrusion, previous_extrusion, layer_thickness): + # Area of the filament + Af = (self._filament_diameter / 2) ** 2 * numpy.pi + # Length of the extruded filament + de = current_extrusion - previous_extrusion + # Volumne of the extruded filament + dVe = de * Af + # Length of the printed line + dX = numpy.sqrt((current_point[0] - previous_point[0])**2 + (current_point[2] - previous_point[2])**2) + # When the extruder recovers from a retraction, we get zero distance + if dX == 0: + return 0.1 + # Area of the printed line. This area is a rectangle + Ae = dVe / dX + # This area is a rectangle with area equal to layer_thickness * layer_width + line_width = Ae / layer_thickness + + # A threshold is set to avoid weird paths in the GCode + if line_width > 1.2: + return 0.35 + return line_width + + def _gCode0(self, position, params, path): + x, y, z, f, e = position + + if self._is_absolute_positioning: + x = params.x if params.x is not None else x + y = params.y if params.y is not None else y + z = params.z if params.z is not None else z + else: + x += params.x if params.x is not None else 0 + y += params.y if params.y is not None else 0 + z += params.z if params.z is not None else 0 + + f = params.f if params.f is not None else f + + if params.e is not None: + new_extrusion_value = params.e if self._is_absolute_extrusion else e[self._extruder_number] + params.e + if new_extrusion_value > e[self._extruder_number]: + path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], self._layer_type]) # extrusion + else: + path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) # retraction + e[self._extruder_number] = new_extrusion_value + + # Only when extruding we can determine the latest known "layer height" which is the difference in height between extrusions + # Also, 1.5 is a heuristic for any priming or whatsoever, we skip those. + if z > self._previous_z and (z - self._previous_z < 1.5): + self._current_layer_thickness = z - self._previous_z # allow a tiny overlap + self._previous_z = z + else: + path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveCombingType]) + return self._position(x, y, z, f, e) + + + # G0 and G1 should be handled exactly the same. + _gCode1 = _gCode0 + + ## Home the head. + def _gCode28(self, position, params, path): + return self._position( + params.x if params.x is not None else position.x, + params.y if params.y is not None else position.y, + params.z if params.z is not None else position.z, + position.f, + position.e) + + ## Set the absolute positioning + def _gCode90(self, position, params, path): + self._is_absolute_positioning = True + self._is_absolute_extrusion = True + return position + + ## Set the relative positioning + def _gCode91(self, position, params, path): + self._is_absolute_positioning = False + self._is_absolute_extrusion = False + return position + + ## Reset the current position to the values specified. + # For example: G92 X10 will set the X to 10 without any physical motion. + def _gCode92(self, position, params, path): + if params.e is not None: + # Sometimes a G92 E0 is introduced in the middle of the GCode so we need to keep those offsets for calculate the line_width + self._extrusion_length_offset[self._extruder_number] += position.e[self._extruder_number] - params.e + position.e[self._extruder_number] = params.e + return self._position( + params.x if params.x is not None else position.x, + params.y if params.y is not None else position.y, + params.z if params.z is not None else position.z, + params.f if params.f is not None else position.f, + position.e) + + def processGCode(self, G, line, position, path): + func = getattr(self, "_gCode%s" % G, None) + line = line.split(";", 1)[0] # Remove comments (if any) + if func is not None: + s = line.upper().split(" ") + x, y, z, f, e = None, None, None, None, None + for item in s[1:]: + if len(item) <= 1: + continue + if item.startswith(";"): + continue + if item[0] == "X": + x = float(item[1:]) + if item[0] == "Y": + y = float(item[1:]) + if item[0] == "Z": + z = float(item[1:]) + if item[0] == "F": + f = float(item[1:]) / 60 + if item[0] == "E": + e = float(item[1:]) + if self._is_absolute_positioning and ((x is not None and x < 0) or (y is not None and y < 0)): + self._center_is_zero = True + params = self._position(x, y, z, f, e) + return func(position, params, path) + return position + + def processTCode(self, T, line, position, path): + self._extruder_number = T + if self._extruder_number + 1 > len(position.e): + self._extrusion_length_offset.extend([0] * (self._extruder_number - len(position.e) + 1)) + position.e.extend([0] * (self._extruder_number - len(position.e) + 1)) + return position + + def processMCode(self, M, line, position, path): + pass + + _type_keyword = ";TYPE:" + _layer_keyword = ";LAYER:" + + ## For showing correct x, y offsets for each extruder + def _extruderOffsets(self): + result = {} + for extruder in ExtruderManager.getInstance().getExtruderStacks(): + result[int(extruder.getMetaData().get("position", "0"))] = [ + extruder.getProperty("machine_nozzle_offset_x", "value"), + extruder.getProperty("machine_nozzle_offset_y", "value")] + return result + + def processGCodeFile(self, file_name): + Logger.log("d", "Preparing to load %s" % file_name) + self._cancelled = False + # We obtain the filament diameter from the selected printer to calculate line widths + self._filament_diameter = Application.getInstance().getGlobalContainerStack().getProperty("material_diameter", "value") + + scene_node = SceneNode() + # Override getBoundingBox function of the sceneNode, as this node should return a bounding box, but there is no + # real data to calculate it from. + scene_node.getBoundingBox = self._getNullBoundingBox + + gcode_list = [] + self._is_layers_in_file = False + + Logger.log("d", "Opening file %s" % file_name) + + self._extruder_offsets = self._extruderOffsets() # dict with index the extruder number. can be empty + + with open(file_name, "r") as file: + file_lines = 0 + current_line = 0 + for line in file: + file_lines += 1 + gcode_list.append(line) + if not self._is_layers_in_file and line[:len(self._layer_keyword)] == self._layer_keyword: + self._is_layers_in_file = True + file.seek(0) + + file_step = max(math.floor(file_lines / 100), 1) + + self._clearValues() + + self._message = Message(catalog.i18nc("@info:status", "Parsing G-code"), + lifetime=0, + title = catalog.i18nc("@info:title", "G-code Details")) + + self._message.setProgress(0) + self._message.show() + + Logger.log("d", "Parsing %s..." % file_name) + + current_position = self._position(0, 0, 0, 0, [0]) + current_path = [] + min_layer_number = 0 + negative_layers = 0 + previous_layer = 0 + + for line in file: + if self._cancelled: + Logger.log("d", "Parsing %s cancelled" % file_name) + return None + current_line += 1 + + if current_line % file_step == 0: + self._message.setProgress(math.floor(current_line / file_lines * 100)) + Job.yieldThread() + if len(line) == 0: + continue + + if line.find(self._type_keyword) == 0: + type = line[len(self._type_keyword):].strip() + if type == "WALL-INNER": + self._layer_type = LayerPolygon.InsetXType + elif type == "WALL-OUTER": + self._layer_type = LayerPolygon.Inset0Type + elif type == "SKIN": + self._layer_type = LayerPolygon.SkinType + elif type == "SKIRT": + self._layer_type = LayerPolygon.SkirtType + elif type == "SUPPORT": + self._layer_type = LayerPolygon.SupportType + elif type == "FILL": + self._layer_type = LayerPolygon.InfillType + else: + Logger.log("w", "Encountered a unknown type (%s) while parsing g-code.", type) + + # When the layer change is reached, the polygon is computed so we have just one layer per layer per extruder + if self._is_layers_in_file and line[:len(self._layer_keyword)] == self._layer_keyword: + try: + layer_number = int(line[len(self._layer_keyword):]) + self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) + current_path.clear() + + # When using a raft, the raft layers are stored as layers < 0, it mimics the same behavior + # as in ProcessSlicedLayersJob + if layer_number < min_layer_number: + min_layer_number = layer_number + if layer_number < 0: + layer_number += abs(min_layer_number) + negative_layers += 1 + else: + layer_number += negative_layers + + # In case there is a gap in the layer count, empty layers are created + for empty_layer in range(previous_layer + 1, layer_number): + self._createEmptyLayer(empty_layer) + + self._layer_number = layer_number + previous_layer = layer_number + except: + pass + + # This line is a comment. Ignore it (except for the layer_keyword) + if line.startswith(";"): + continue + + G = self._getInt(line, "G") + if G is not None: + # When find a movement, the new posistion is calculated and added to the current_path, but + # don't need to create a polygon until the end of the layer + current_position = self.processGCode(G, line, current_position, current_path) + continue + + # When changing the extruder, the polygon with the stored paths is computed + if line.startswith("T"): + T = self._getInt(line, "T") + if T is not None: + self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) + current_path.clear() + + current_position = self.processTCode(T, line, current_position, current_path) + + if line.startswith("M"): + M = self._getInt(line, "M") + self.processMCode(M, line, current_position, current_path) + + # "Flush" leftovers. Last layer paths are still stored + if len(current_path) > 1: + if self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])): + self._layer_number += 1 + current_path.clear() + + material_color_map = numpy.zeros((10, 4), dtype = numpy.float32) + material_color_map[0, :] = [0.0, 0.7, 0.9, 1.0] + material_color_map[1, :] = [0.7, 0.9, 0.0, 1.0] + layer_mesh = self._layer_data_builder.build(material_color_map) + decorator = LayerDataDecorator.LayerDataDecorator() + decorator.setLayerData(layer_mesh) + scene_node.addDecorator(decorator) + + gcode_list_decorator = GCodeListDecorator() + gcode_list_decorator.setGCodeList(gcode_list) + scene_node.addDecorator(gcode_list_decorator) + + Application.getInstance().getController().getScene().gcode_list = gcode_list + + Logger.log("d", "Finished parsing %s" % file_name) + self._message.hide() + + if self._layer_number == 0: + Logger.log("w", "File %s doesn't contain any valid layers" % file_name) + + settings = Application.getInstance().getGlobalContainerStack() + machine_width = settings.getProperty("machine_width", "value") + machine_depth = settings.getProperty("machine_depth", "value") + + if not self._center_is_zero: + scene_node.setPosition(Vector(-machine_width / 2, 0, machine_depth / 2)) + + Logger.log("d", "Loaded %s" % file_name) + + if Preferences.getInstance().getValue("gcodereader/show_caution"): + caution_message = Message(catalog.i18nc( + "@info:generic", + "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate."), + lifetime=0, + title = catalog.i18nc("@info:title", "G-code Details")) + caution_message.show() + + # The "save/print" button's state is bound to the backend state. + backend = Application.getInstance().getBackend() + backend.backendStateChange.emit(Backend.BackendState.Disabled) + + return scene_node diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index 14d3a2b741..cb2f5d99e0 100755 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -1,471 +1,44 @@ # Copyright (c) 2017 Aleph Objects, Inc. # Cura is released under the terms of the LGPLv3 or higher. -from UM.Application import Application -from UM.Backend import Backend -from UM.Job import Job -from UM.Logger import Logger -from UM.Math.AxisAlignedBox import AxisAlignedBox -from UM.Math.Vector import Vector +from UM.FileHandler.FileReader import FileReader from UM.Mesh.MeshReader import MeshReader -from UM.Message import Message -from UM.Scene.SceneNode import SceneNode from UM.i18n import i18nCatalog from UM.Preferences import Preferences catalog = i18nCatalog("cura") - - -from cura import LayerDataBuilder -from cura import LayerDataDecorator -from cura.LayerPolygon import LayerPolygon -from cura.GCodeListDecorator import GCodeListDecorator -from cura.Settings.ExtruderManager import ExtruderManager - -import numpy -import math -import re -from collections import namedtuple - +from . import MarlinFlavorParser, RepRapFlavorParser # Class for loading and parsing G-code files class GCodeReader(MeshReader): + + _flavor_default = "Marlin" + _flavor_keyword = ";FLAVOR:" + _flavor_readers_dict = {"RepRap" : RepRapFlavorParser.RepRapFlavorParser(), + "Marlin" : MarlinFlavorParser.MarlinFlavorParser()} + def __init__(self): super(GCodeReader, self).__init__() self._supported_extensions = [".gcode", ".g"] - Application.getInstance().hideMessageSignal.connect(self._onHideMessage) - self._cancelled = False - self._message = None - self._layer_number = 0 - self._extruder_number = 0 - self._clearValues() - self._scene_node = None - # X, Y, Z position, F feedrate and E extruder values are stored - self._position = namedtuple('Position', ['x', 'y', 'z', 'f', 'e']) - self._is_layers_in_file = False # Does the Gcode have the layers comment? - self._extruder_offsets = {} # Offsets for multi extruders. key is index, value is [x-offset, y-offset] - self._current_layer_thickness = 0.2 # default + self._flavor_reader = None Preferences.getInstance().addPreference("gcodereader/show_caution", True) - def _clearValues(self): - self._filament_diameter = 2.85 - self._extruder_number = 0 - self._extrusion_length_offset = [0] - self._layer_type = LayerPolygon.Inset0Type - self._layer_number = 0 - self._previous_z = 0 - self._layer_data_builder = LayerDataBuilder.LayerDataBuilder() - self._center_is_zero = False - self._is_absolute_positioning = True # It can be absolute (G90) or relative (G91) - self._is_absolute_extrusion = True # It can become absolute (M82, default) or relative (M83) + # PreRead is used to get the correct flavor. If not, Marlin is set by default + def preRead(self, file_name, *args, **kwargs): + with open(file_name, "r") as file: + for line in file: + if line[:len(self._flavor_keyword)] == self._flavor_keyword: + try: + self._flavor_reader = self._flavor_readers_dict[line[len(self._flavor_keyword):].rstrip()] + return FileReader.PreReadResult.accepted + except: + # If there is no entry in the dictionary for this flavor, just skip and select the by-default flavor + break - @staticmethod - def _getValue(line, code): - n = line.find(code) - if n < 0: - return None - n += len(code) - pattern = re.compile("[;\s]") - match = pattern.search(line, n) - m = match.start() if match is not None else -1 - try: - if m < 0: - return line[n:] - return line[n:m] - except: - return None - - def _getInt(self, line, code): - value = self._getValue(line, code) - try: - return int(value) - except: - return None - - def _getFloat(self, line, code): - value = self._getValue(line, code) - try: - return float(value) - except: - return None - - def _onHideMessage(self, message): - if message == self._message: - self._cancelled = True - - @staticmethod - def _getNullBoundingBox(): - return AxisAlignedBox(minimum=Vector(0, 0, 0), maximum=Vector(10, 10, 10)) - - def _createPolygon(self, layer_thickness, path, extruder_offsets): - countvalid = 0 - for point in path: - if point[5] > 0: - countvalid += 1 - if countvalid >= 2: - # we know what to do now, no need to count further - continue - if countvalid < 2: - return False - try: - self._layer_data_builder.addLayer(self._layer_number) - self._layer_data_builder.setLayerHeight(self._layer_number, path[0][2]) - self._layer_data_builder.setLayerThickness(self._layer_number, layer_thickness) - this_layer = self._layer_data_builder.getLayer(self._layer_number) - except ValueError: - return False - count = len(path) - line_types = numpy.empty((count - 1, 1), numpy.int32) - line_widths = numpy.empty((count - 1, 1), numpy.float32) - line_thicknesses = numpy.empty((count - 1, 1), numpy.float32) - line_feedrates = numpy.empty((count - 1, 1), numpy.float32) - line_widths[:, 0] = 0.35 # Just a guess - line_thicknesses[:, 0] = layer_thickness - points = numpy.empty((count, 3), numpy.float32) - extrusion_values = numpy.empty((count, 1), numpy.float32) - i = 0 - for point in path: - points[i, :] = [point[0] + extruder_offsets[0], point[2], -point[1] - extruder_offsets[1]] - extrusion_values[i] = point[4] - if i > 0: - line_feedrates[i - 1] = point[3] - line_types[i - 1] = point[5] - if point[5] in [LayerPolygon.MoveCombingType, LayerPolygon.MoveRetractionType]: - line_widths[i - 1] = 0.1 - line_thicknesses[i - 1] = 0.0 # Travels are set as zero thickness lines - else: - line_widths[i - 1] = self._calculateLineWidth(points[i], points[i-1], extrusion_values[i], extrusion_values[i-1], layer_thickness) - i += 1 - - this_poly = LayerPolygon(self._extruder_number, line_types, points, line_widths, line_thicknesses, line_feedrates) - this_poly.buildCache() - - this_layer.polygons.append(this_poly) - return True - - def _createEmptyLayer(self, layer_number): - self._layer_data_builder.addLayer(layer_number) - self._layer_data_builder.setLayerHeight(layer_number, 0) - self._layer_data_builder.setLayerThickness(layer_number, 0) - - def _calculateLineWidth(self, current_point, previous_point, current_extrusion, previous_extrusion, layer_thickness): - # Area of the filament - Af = (self._filament_diameter / 2) ** 2 * numpy.pi - # Length of the extruded filament - de = current_extrusion - previous_extrusion - # Volumne of the extruded filament - dVe = de * Af - # Length of the printed line - dX = numpy.sqrt((current_point[0] - previous_point[0])**2 + (current_point[2] - previous_point[2])**2) - # When the extruder recovers from a retraction, we get zero distance - if dX == 0: - return 0.1 - # Area of the printed line. This area is a rectangle - Ae = dVe / dX - # This area is a rectangle with area equal to layer_thickness * layer_width - line_width = Ae / layer_thickness - - # A threshold is set to avoid weird paths in the GCode - if line_width > 1.2: - return 0.35 - return line_width - - def _gCode0(self, position, params, path): - x, y, z, f, e = position - - if self._is_absolute_positioning: - x = params.x if params.x is not None else x - y = params.y if params.y is not None else y - z = params.z if params.z is not None else z - else: - x += params.x if params.x is not None else 0 - y += params.y if params.y is not None else 0 - z += params.z if params.z is not None else 0 - - f = params.f if params.f is not None else f - - if params.e is not None: - new_extrusion_value = params.e if self._is_absolute_extrusion else e[self._extruder_number] + params.e - if new_extrusion_value > e[self._extruder_number]: - path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], self._layer_type]) # extrusion - else: - path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) # retraction - e[self._extruder_number] = new_extrusion_value - - # Only when extruding we can determine the latest known "layer height" which is the difference in height between extrusions - # Also, 1.5 is a heuristic for any priming or whatsoever, we skip those. - if z > self._previous_z and (z - self._previous_z < 1.5): - self._current_layer_thickness = z - self._previous_z # allow a tiny overlap - self._previous_z = z - else: - path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveCombingType]) - return self._position(x, y, z, f, e) - - - # G0 and G1 should be handled exactly the same. - _gCode1 = _gCode0 - - ## Home the head. - def _gCode28(self, position, params, path): - return self._position( - params.x if params.x is not None else position.x, - params.y if params.y is not None else position.y, - 0, - position.f, - position.e) - - ## Set the absolute positioning - def _gCode90(self, position, params, path): - self._is_absolute_positioning = True - return position - - ## Set the relative positioning - def _gCode91(self, position, params, path): - self._is_absolute_positioning = False - return position - - ## Reset the current position to the values specified. - # For example: G92 X10 will set the X to 10 without any physical motion. - def _gCode92(self, position, params, path): - if params.e is not None: - # Sometimes a G92 E0 is introduced in the middle of the GCode so we need to keep those offsets for calculate the line_width - self._extrusion_length_offset[self._extruder_number] += position.e[self._extruder_number] - params.e - position.e[self._extruder_number] = params.e - return self._position( - params.x if params.x is not None else position.x, - params.y if params.y is not None else position.y, - params.z if params.z is not None else position.z, - params.f if params.f is not None else position.f, - position.e) - - def _processGCode(self, G, line, position, path): - func = getattr(self, "_gCode%s" % G, None) - line = line.split(";", 1)[0] # Remove comments (if any) - if func is not None: - s = line.upper().split(" ") - x, y, z, f, e = None, None, None, None, None - for item in s[1:]: - if len(item) <= 1: - continue - if item.startswith(";"): - continue - if item[0] == "X": - x = float(item[1:]) - if item[0] == "Y": - y = float(item[1:]) - if item[0] == "Z": - z = float(item[1:]) - if item[0] == "F": - f = float(item[1:]) / 60 - if item[0] == "E": - e = float(item[1:]) - if self._is_absolute_positioning and ((x is not None and x < 0) or (y is not None and y < 0)): - self._center_is_zero = True - params = self._position(x, y, z, f, e) - return func(position, params, path) - return position - - def _processTCode(self, T, line, position, path): - self._extruder_number = T - if self._extruder_number + 1 > len(position.e): - self._extrusion_length_offset.extend([0] * (self._extruder_number - len(position.e) + 1)) - position.e.extend([0] * (self._extruder_number - len(position.e) + 1)) - return position - - def _processMCode(self, M): - if M == 82: - # Set absolute extrusion mode - self._is_absolute_extrusion = True - elif M == 83: - # Set relative extrusion mode - self._is_absolute_extrusion = False - - _type_keyword = ";TYPE:" - _layer_keyword = ";LAYER:" - - ## For showing correct x, y offsets for each extruder - def _extruderOffsets(self): - result = {} - for extruder in ExtruderManager.getInstance().getExtruderStacks(): - result[int(extruder.getMetaData().get("position", "0"))] = [ - extruder.getProperty("machine_nozzle_offset_x", "value"), - extruder.getProperty("machine_nozzle_offset_y", "value")] - return result + # If no flavor is found in the GCode, then we use the by-default + self._flavor_reader = self._flavor_readers_dict[self._flavor_default] + return FileReader.PreReadResult.accepted def read(self, file_name): - Logger.log("d", "Preparing to load %s" % file_name) - self._cancelled = False - # We obtain the filament diameter from the selected printer to calculate line widths - self._filament_diameter = Application.getInstance().getGlobalContainerStack().getProperty("material_diameter", "value") - - scene_node = SceneNode() - # Override getBoundingBox function of the sceneNode, as this node should return a bounding box, but there is no - # real data to calculate it from. - scene_node.getBoundingBox = self._getNullBoundingBox - - gcode_list = [] - self._is_layers_in_file = False - - Logger.log("d", "Opening file %s" % file_name) - - self._extruder_offsets = self._extruderOffsets() # dict with index the extruder number. can be empty - - last_z = 0 - with open(file_name, "r") as file: - file_lines = 0 - current_line = 0 - for line in file: - file_lines += 1 - gcode_list.append(line) - if not self._is_layers_in_file and line[:len(self._layer_keyword)] == self._layer_keyword: - self._is_layers_in_file = True - file.seek(0) - - file_step = max(math.floor(file_lines / 100), 1) - - self._clearValues() - - self._message = Message(catalog.i18nc("@info:status", "Parsing G-code"), - lifetime=0, - title = catalog.i18nc("@info:title", "G-code Details")) - - self._message.setProgress(0) - self._message.show() - - Logger.log("d", "Parsing %s..." % file_name) - - current_position = self._position(0, 0, 0, 0, [0]) - current_path = [] - min_layer_number = 0 - negative_layers = 0 - previous_layer = 0 - - for line in file: - if self._cancelled: - Logger.log("d", "Parsing %s cancelled" % file_name) - return None - current_line += 1 - last_z = current_position.z - - if current_line % file_step == 0: - self._message.setProgress(math.floor(current_line / file_lines * 100)) - Job.yieldThread() - if len(line) == 0: - continue - - if line.find(self._type_keyword) == 0: - type = line[len(self._type_keyword):].strip() - if type == "WALL-INNER": - self._layer_type = LayerPolygon.InsetXType - elif type == "WALL-OUTER": - self._layer_type = LayerPolygon.Inset0Type - elif type == "SKIN": - self._layer_type = LayerPolygon.SkinType - elif type == "SKIRT": - self._layer_type = LayerPolygon.SkirtType - elif type == "SUPPORT": - self._layer_type = LayerPolygon.SupportType - elif type == "FILL": - self._layer_type = LayerPolygon.InfillType - else: - Logger.log("w", "Encountered a unknown type (%s) while parsing g-code.", type) - - # When the layer change is reached, the polygon is computed so we have just one layer per layer per extruder - if self._is_layers_in_file and line[:len(self._layer_keyword)] == self._layer_keyword: - try: - layer_number = int(line[len(self._layer_keyword):]) - self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) - current_path.clear() - - # When using a raft, the raft layers are stored as layers < 0, it mimics the same behavior - # as in ProcessSlicedLayersJob - if layer_number < min_layer_number: - min_layer_number = layer_number - if layer_number < 0: - layer_number += abs(min_layer_number) - negative_layers += 1 - else: - layer_number += negative_layers - - # In case there is a gap in the layer count, empty layers are created - for empty_layer in range(previous_layer + 1, layer_number): - self._createEmptyLayer(empty_layer) - - self._layer_number = layer_number - previous_layer = layer_number - except: - pass - - # This line is a comment. Ignore it (except for the layer_keyword) - if line.startswith(";"): - continue - - G = self._getInt(line, "G") - if G is not None: - # When find a movement, the new posistion is calculated and added to the current_path, but - # don't need to create a polygon until the end of the layer - current_position = self._processGCode(G, line, current_position, current_path) - continue - - # When changing the extruder, the polygon with the stored paths is computed - if line.startswith("T"): - T = self._getInt(line, "T") - if T is not None: - self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) - current_path.clear() - - current_position = self._processTCode(T, line, current_position, current_path) - - if line.startswith("M"): - M = self._getInt(line, "M") - self._processMCode(M) - - # "Flush" leftovers. Last layer paths are still stored - if len(current_path) > 1: - if self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])): - self._layer_number += 1 - current_path.clear() - - material_color_map = numpy.zeros((10, 4), dtype = numpy.float32) - material_color_map[0, :] = [0.0, 0.7, 0.9, 1.0] - material_color_map[1, :] = [0.7, 0.9, 0.0, 1.0] - layer_mesh = self._layer_data_builder.build(material_color_map) - decorator = LayerDataDecorator.LayerDataDecorator() - decorator.setLayerData(layer_mesh) - scene_node.addDecorator(decorator) - - gcode_list_decorator = GCodeListDecorator() - gcode_list_decorator.setGCodeList(gcode_list) - scene_node.addDecorator(gcode_list_decorator) - - Application.getInstance().getController().getScene().gcode_list = gcode_list - - Logger.log("d", "Finished parsing %s" % file_name) - self._message.hide() - - if self._layer_number == 0: - Logger.log("w", "File %s doesn't contain any valid layers" % file_name) - - settings = Application.getInstance().getGlobalContainerStack() - machine_width = settings.getProperty("machine_width", "value") - machine_depth = settings.getProperty("machine_depth", "value") - - if not self._center_is_zero: - scene_node.setPosition(Vector(-machine_width / 2, 0, machine_depth / 2)) - - Logger.log("d", "Loaded %s" % file_name) - - if Preferences.getInstance().getValue("gcodereader/show_caution"): - caution_message = Message(catalog.i18nc( - "@info:generic", - "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate."), - lifetime=0, - title = catalog.i18nc("@info:title", "G-code Details")) - caution_message.show() - - # The "save/print" button's state is bound to the backend state. - backend = Application.getInstance().getBackend() - backend.backendStateChange.emit(Backend.BackendState.Disabled) - - return scene_node + return self._flavor_reader.processGCodeFile(file_name) diff --git a/plugins/GCodeReader/MarlinFlavorParser.py b/plugins/GCodeReader/MarlinFlavorParser.py new file mode 100644 index 0000000000..482285a2c9 --- /dev/null +++ b/plugins/GCodeReader/MarlinFlavorParser.py @@ -0,0 +1,10 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import FlavorParser + +# This parser is intented for interpret the Marlin/Sprinter Firmware flavor +class MarlinFlavorParser(FlavorParser.FlavorParser): + + def __init__(self): + super().__init__() \ No newline at end of file diff --git a/plugins/GCodeReader/RepRapFlavorParser.py b/plugins/GCodeReader/RepRapFlavorParser.py new file mode 100644 index 0000000000..42853913d6 --- /dev/null +++ b/plugins/GCodeReader/RepRapFlavorParser.py @@ -0,0 +1,32 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import FlavorParser + +# This parser is intented for interpret the RepRap Firmware flavor +class RepRapFlavorParser(FlavorParser.FlavorParser): + + def __init__(self): + super().__init__() + + def processMCode(self, M, line, position, path): + if M == 82: + # Set absolute extrusion mode + self._is_absolute_extrusion = True + elif M == 83: + # Set relative extrusion mode + self._is_absolute_extrusion = False + + ## Set the absolute positioning + # RepRapFlavor code G90 sets position of X, Y, Z, and E to absolute + def _gCode90(self, position, params, path): + self._is_absolute_positioning = True + self._is_absolute_extrusion = True + return position + + ## Set the relative positioning + # RepRapFlavor code G91 sets position of X, Y, Z to relative + # For relative E, M83 is used + def _gCode91(self, position, params, path): + self._is_absolute_positioning = False + return position \ No newline at end of file diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index 3860590ef7..f30e2dd43a 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -74,12 +74,13 @@ class GCodeWriter(MeshWriter): ## Create a new container with container 2 as base and container 1 written over it. def _createFlattenedContainerInstance(self, instance_container1, instance_container2): flat_container = InstanceContainer(instance_container2.getName()) - if instance_container1.getDefinition(): - flat_container.setDefinition(instance_container1.getDefinition()) - else: - flat_container.setDefinition(instance_container2.getDefinition()) + + # The metadata includes id, name and definition flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData())) + if instance_container1.getDefinition(): + flat_container.setDefinition(instance_container1.getDefinition().getId()) + for key in instance_container2.getAllKeys(): flat_container.setProperty(key, "value", instance_container2.getProperty(key, "value")) diff --git a/plugins/ImageReader/ConfigUI.qml b/plugins/ImageReader/ConfigUI.qml index d2caec0220..d829f46459 100644 --- a/plugins/ImageReader/ConfigUI.qml +++ b/plugins/ImageReader/ConfigUI.qml @@ -43,7 +43,7 @@ UM.Dialog TextField { id: peak_height objectName: "Peak_Height" - validator: DoubleValidator {notation: DoubleValidator.StandardNotation; bottom: -500; top: 500;} + validator: RegExpValidator {regExp: /^-?\d{1,3}([\,|\.]\d*)?$/} width: 180 * screenScaleFactor onTextChanged: { manager.onPeakHeightChanged(text) } } @@ -66,7 +66,7 @@ UM.Dialog TextField { id: base_height objectName: "Base_Height" - validator: DoubleValidator {notation: DoubleValidator.StandardNotation; bottom: 0; top: 500;} + validator: RegExpValidator {regExp: /^\d{1,3}([\,|\.]\d*)?$/} width: 180 * screenScaleFactor onTextChanged: { manager.onBaseHeightChanged(text) } } @@ -90,7 +90,7 @@ UM.Dialog id: width objectName: "Width" focus: true - validator: DoubleValidator {notation: DoubleValidator.StandardNotation; bottom: 1; top: 500;} + validator: RegExpValidator {regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/} width: 180 * screenScaleFactor onTextChanged: { manager.onWidthChanged(text) } } @@ -113,7 +113,7 @@ UM.Dialog id: depth objectName: "Depth" focus: true - validator: DoubleValidator {notation: DoubleValidator.StandardNotation; bottom: 1; top: 500;} + validator: RegExpValidator {regExp: /^[1-9]\d{0,2}([\,|\.]\d*)?$/} width: 180 * screenScaleFactor onTextChanged: { manager.onDepthChanged(text) } } diff --git a/plugins/ImageReader/ImageReaderUI.py b/plugins/ImageReader/ImageReaderUI.py index 40ea15f7a0..cb45afa4ad 100644 --- a/plugins/ImageReader/ImageReaderUI.py +++ b/plugins/ImageReader/ImageReaderUI.py @@ -4,8 +4,7 @@ import os import threading -from PyQt5.QtCore import Qt, QUrl, pyqtSignal, QObject -from PyQt5.QtQml import QQmlComponent, QQmlContext +from PyQt5.QtCore import Qt, pyqtSignal, QObject from UM.FlameProfiler import pyqtSlot from UM.Application import Application from UM.PluginRegistry import PluginRegistry @@ -81,14 +80,9 @@ class ImageReaderUI(QObject): def _createConfigUI(self): if self._ui_view is None: Logger.log("d", "Creating ImageReader config UI") - path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath("ImageReader"), "ConfigUI.qml")) - component = QQmlComponent(Application.getInstance()._engine, path) - self._ui_context = QQmlContext(Application.getInstance()._engine.rootContext()) - self._ui_context.setContextProperty("manager", self) - self._ui_view = component.create(self._ui_context) - + path = os.path.join(PluginRegistry.getInstance().getPluginPath("ImageReader"), "ConfigUI.qml") + self._ui_view = Application.getInstance().createQmlComponent(path, {"manager": self}) self._ui_view.setFlags(self._ui_view.flags() & ~Qt.WindowCloseButtonHint & ~Qt.WindowMinimizeButtonHint & ~Qt.WindowMaximizeButtonHint); - self._disable_size_callbacks = False @pyqtSlot() @@ -107,7 +101,7 @@ class ImageReaderUI(QObject): def onWidthChanged(self, value): if self._ui_view and not self._disable_size_callbacks: if len(value) > 0: - self._width = float(value) + self._width = float(value.replace(",", ".")) else: self._width = 0 @@ -120,7 +114,7 @@ class ImageReaderUI(QObject): def onDepthChanged(self, value): if self._ui_view and not self._disable_size_callbacks: if len(value) > 0: - self._depth = float(value) + self._depth = float(value.replace(",", ".")) else: self._depth = 0 @@ -132,14 +126,14 @@ class ImageReaderUI(QObject): @pyqtSlot(str) def onBaseHeightChanged(self, value): if (len(value) > 0): - self.base_height = float(value) + self.base_height = float(value.replace(",", ".")) else: self.base_height = 0 @pyqtSlot(str) def onPeakHeightChanged(self, value): if (len(value) > 0): - self.peak_height = float(value) + self.peak_height = float(value.replace(",", ".")) else: self.peak_height = 0 @@ -149,7 +143,4 @@ class ImageReaderUI(QObject): @pyqtSlot(int) def onImageColorInvertChanged(self, value): - if (value == 1): - self.image_color_invert = True - else: - self.image_color_invert = False + self.image_color_invert = (value == 1) diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 3d680f2b97..07cd8b0aad 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -1,7 +1,8 @@ -# Copyright (c) 2015 Ultimaker B.V. +# Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser # For reading the legacy profile INI files. +import io import json # For reading the Dictionary of Doom. import math # For mathematical operations included in the Dictionary of Doom. import os.path # For concatenating the path to the plugin and the relative path to the Dictionary of Doom. @@ -9,8 +10,10 @@ import os.path # For concatenating the path to the plugin and the relative path from UM.Application import Application # To get the machine manager to create the new profile in. from UM.Logger import Logger # Logging errors. from UM.PluginRegistry import PluginRegistry # For getting the path to this plugin's directory. +from UM.Settings.ContainerRegistry import ContainerRegistry #To create unique profile IDs. from UM.Settings.InstanceContainer import InstanceContainer # The new profile to make. from cura.ProfileReader import ProfileReader # The plug-in type to implement. +from cura.Settings.ExtruderManager import ExtruderManager #To get the current extruder definition. ## A plugin that reads profile data from legacy Cura versions. @@ -76,12 +79,13 @@ class LegacyProfileReader(ProfileReader): raise Exception("Unable to import legacy profile. Multi extrusion is not supported") Logger.log("i", "Importing legacy profile from file " + file_name + ".") - profile = InstanceContainer("Imported Legacy Profile") # Create an empty profile. + container_registry = ContainerRegistry.getInstance() + profile_id = container_registry.uniqueName("Imported Legacy Profile") + profile = InstanceContainer(profile_id) # Create an empty profile. parser = configparser.ConfigParser(interpolation = None) try: - with open(file_name) as f: - parser.readfp(f) # Parse the INI file. + parser.read([file_name]) # Parse the INI file. except Exception as e: Logger.log("e", "Unable to open legacy profile %s: %s", file_name, str(e)) return None @@ -120,8 +124,8 @@ class LegacyProfileReader(ProfileReader): if "translation" not in dict_of_doom: Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?") return None - current_printer_definition = global_container_stack.getBottom() - profile.setDefinition(current_printer_definition) + current_printer_definition = global_container_stack.definition + profile.setDefinition(current_printer_definition.getId()) for new_setting in dict_of_doom["translation"]: # Evaluate all new settings that would get a value from the translations. old_setting_expression = dict_of_doom["translation"][new_setting] compiled = compile(old_setting_expression, new_setting, "eval") @@ -138,7 +142,40 @@ class LegacyProfileReader(ProfileReader): if len(profile.getAllKeys()) == 0: Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.") - profile.setDirty(True) - profile.addMetaDataEntry("type", "quality_changes") + + profile.addMetaDataEntry("type", "profile") + # don't know what quality_type it is based on, so use "normal" by default profile.addMetaDataEntry("quality_type", "normal") - return profile \ No newline at end of file + profile.setName(profile_id) + profile.setDirty(True) + + #Serialise and deserialise in order to perform the version upgrade. + parser = configparser.ConfigParser(interpolation=None) + data = profile.serialize() + parser.read_string(data) + parser["general"]["version"] = "1" + if parser.has_section("values"): + parser["settings"] = parser["values"] + del parser["values"] + stream = io.StringIO() + parser.write(stream) + data = stream.getvalue() + profile.deserialize(data) + + #We need to return one extruder stack and one global stack. + global_container_id = container_registry.uniqueName("Global Imported Legacy Profile") + global_profile = profile.duplicate(new_id = global_container_id, new_name = profile_id) #Needs to have the same name as the extruder profile. + global_profile.setDirty(True) + + #Only the extruder stack has an extruder metadata entry. + profile.addMetaDataEntry("extruder", ExtruderManager.getInstance().getActiveExtruderStack().definition.getId()) + + #Split all settings into per-extruder and global settings. + for setting_key in profile.getAllKeys(): + settable_per_extruder = global_container_stack.getProperty(setting_key, "settable_per_extruder") + if settable_per_extruder: + global_profile.removeInstance(setting_key) + else: + profile.removeInstance(setting_key) + + return [global_profile, profile] diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 2de5b6e9b8..7b407519e5 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -188,29 +188,32 @@ class MachineSettingsAction(MachineAction): # In other words: only continue for the UM2 (extended), but not for the UM2+ return + stacks = ExtruderManager.getInstance().getExtruderStacks() has_materials = self._global_container_stack.getProperty("machine_gcode_flavor", "value") != "UltiGCode" - material_container = self._global_container_stack.material - if has_materials: if "has_materials" in self._global_container_stack.getMetaData(): self._global_container_stack.setMetaDataEntry("has_materials", True) else: self._global_container_stack.addMetaDataEntry("has_materials", True) - # Set the material container to a sane default - if material_container == self._empty_container: - search_criteria = { "type": "material", "definition": "fdmprinter", "id": self._global_container_stack.getMetaDataEntry("preferred_material")} - materials = self._container_registry.findInstanceContainers(**search_criteria) - if materials: - self._global_container_stack.material = materials[0] + # Set the material container for each extruder to a sane default + for stack in stacks: + material_container = stack.material + if material_container == self._empty_container: + machine_approximate_diameter = str(round(self._global_container_stack.getProperty("material_diameter", "value"))) + search_criteria = { "type": "material", "definition": "fdmprinter", "id": self._global_container_stack.getMetaDataEntry("preferred_material"), "approximate_diameter": machine_approximate_diameter} + materials = self._container_registry.findInstanceContainers(**search_criteria) + if materials: + stack.material = materials[0] else: # The metadata entry is stored in an ini, and ini files are parsed as strings only. # Because any non-empty string evaluates to a boolean True, we have to remove the entry to make it False. if "has_materials" in self._global_container_stack.getMetaData(): self._global_container_stack.removeMetaDataEntry("has_materials") - self._global_container_stack.material = ContainerRegistry.getInstance().getEmptyInstanceContainer() + for stack in stacks: + stack.material = ContainerRegistry.getInstance().getEmptyInstanceContainer() Application.getInstance().globalContainerStackChanged.emit() diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 5e2e67eed6..6ff70a1503 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -22,7 +22,7 @@ Cura.MachineAction onModelChanged: { var extruderCount = base.extrudersModel.rowCount(); - base.extruderTabsCount = extruderCount > 1 ? extruderCount : 0; + base.extruderTabsCount = extruderCount; } } @@ -241,7 +241,6 @@ Cura.MachineAction UM.TooltipArea { - visible: manager.definedExtruderCount > 1 height: childrenRect.height width: childrenRect.width text: machineExtruderCountProvider.properties.description @@ -271,6 +270,20 @@ Cura.MachineAction } } } + + Connections + { + target: manager + onDefinedExtruderCountChanged: + { + extruderCountModel.clear(); + for(var i = 0; i < manager.definedExtruderCount; ++i) + { + extruderCountModel.append({text: String(i + 1), value: i}); + } + } + } + currentIndex: machineExtruderCountProvider.properties.value - 1 onActivated: { @@ -283,6 +296,7 @@ Cura.MachineAction Loader { id: materialDiameterField + visible: Cura.MachineManager.hasMaterials sourceComponent: numericTextFieldWithUnit property string settingKey: "material_diameter" property string unit: catalog.i18nc("@label", "mm") @@ -290,15 +304,6 @@ Cura.MachineAction property var afterOnEditingFinished: manager.updateMaterialForDiameter property string label: catalog.i18nc("@label", "Material diameter") } - Loader - { - id: nozzleSizeField - visible: !Cura.MachineManager.hasVariants && machineExtruderCountProvider.properties.value == 1 - sourceComponent: numericTextFieldWithUnit - property string settingKey: "machine_nozzle_size" - property string label: catalog.i18nc("@label", "Nozzle size") - property string unit: catalog.i18nc("@label", "mm") - } } } @@ -355,7 +360,7 @@ Cura.MachineAction if(currentIndex > 0) { contentItem.forceActiveFocus(); - ExtruderManager.setActiveExtruderIndex(currentIndex - 1); + Cura.ExtruderManager.setActiveExtruderIndex(currentIndex - 1); } } @@ -441,7 +446,7 @@ Cura.MachineAction property int areaHeight: parent.height - y property string settingKey: "machine_extruder_start_code" property bool isExtruderSetting: true - } + } } Column { height: parent.height @@ -585,11 +590,11 @@ Cura.MachineAction propertyProvider.setPropertyValue("value", text); if(_forceUpdateOnChange) { - var extruderIndex = ExtruderManager.activeExtruderIndex; + var extruderIndex = Cura.ExtruderManager.activeExtruderIndex; manager.forceUpdate(); - if(ExtruderManager.activeExtruderIndex != extruderIndex) + if(Cura.ExtruderManager.activeExtruderIndex != extruderIndex) { - ExtruderManager.setActiveExtruderIndex(extruderIndex) + Cura.ExtruderManager.setActiveExtruderIndex(extruderIndex) } } if(_afterOnEditingFinished) @@ -723,7 +728,7 @@ Cura.MachineAction width: gcodeArea.width text: _tooltip - property bool _isExtruderSetting: (typeof(isExtruderSetting) === 'undefined') ? false: isExtruderSetting + property bool _isExtruderSetting: (typeof(isExtruderSetting) === 'undefined') ? false : isExtruderSetting property string _tooltip: (typeof(tooltip) === 'undefined') ? propertyProvider.properties.description : tooltip UM.SettingPropertyProvider @@ -735,7 +740,7 @@ Cura.MachineAction { if(settingsTabs.currentIndex > 0) { - return Cura.MachineManager.activeStackId; + return Cura.ExtruderManager.extruderIds[String(settingsTabs.currentIndex - 1)]; } return ""; } diff --git a/plugins/MonitorStage/MonitorMainView.qml b/plugins/MonitorStage/MonitorMainView.qml new file mode 100644 index 0000000000..15b05bed0a --- /dev/null +++ b/plugins/MonitorStage/MonitorMainView.qml @@ -0,0 +1,44 @@ +// Copyright (c) 2017 Ultimaker B.V. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Item +{ + width: parent.width + height: parent.height + + // We show a nice overlay on the 3D viewer when the current output device has no monitor view + Rectangle + { + id: viewportOverlay + + color: UM.Theme.getColor("viewport_overlay") + width: parent.width + height: parent.height + + MouseArea + { + anchors.fill: parent + acceptedButtons: Qt.AllButtons + onWheel: wheel.accepted = true + } + } + + Loader + { + id: monitorViewComponent + + width: parent.width + height: parent.height + + property real maximumWidth: parent.width + property real maximumHeight: parent.height + + sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem: null + visible: sourceComponent != null + } +} diff --git a/plugins/MonitorStage/MonitorStage.py b/plugins/MonitorStage/MonitorStage.py new file mode 100644 index 0000000000..0736f49858 --- /dev/null +++ b/plugins/MonitorStage/MonitorStage.py @@ -0,0 +1,73 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import os.path +from UM.Application import Application +from UM.PluginRegistry import PluginRegistry +from UM.Resources import Resources +from cura.Stages.CuraStage import CuraStage + + +## Stage for monitoring a 3D printing while it's printing. +class MonitorStage(CuraStage): + + def __init__(self, parent = None): + super().__init__(parent) + + # Wait until QML engine is created, otherwise creating the new QML components will fail + Application.getInstance().engineCreatedSignal.connect(self._setComponents) + + # Update the status icon when the output device is changed + Application.getInstance().getOutputDeviceManager().activeDeviceChanged.connect(self._setIconSource) + + def _setComponents(self): + self._setMainOverlay() + self._setSidebar() + self._setIconSource() + + def _setMainOverlay(self): + main_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("MonitorStage"), "MonitorMainView.qml") + self.addDisplayComponent("main", main_component_path) + + def _setSidebar(self): + # TODO: currently the sidebar component for prepare and monitor stages is the same, this will change with the printer output device refactor! + sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles), "Sidebar.qml") + self.addDisplayComponent("sidebar", sidebar_component_path) + + def _setIconSource(self): + if Application.getInstance().getTheme() is not None: + icon_name = self._getActiveOutputDeviceStatusIcon() + self.setIconSource(Application.getInstance().getTheme().getIcon(icon_name)) + + ## Find the correct status icon depending on the active output device state + def _getActiveOutputDeviceStatusIcon(self): + output_device = Application.getInstance().getOutputDeviceManager().getActiveDevice() + + if not output_device: + return "tab_status_unknown" + + if hasattr(output_device, "acceptsCommands") and not output_device.acceptsCommands: + return "tab_status_unknown" + + if not hasattr(output_device, "printerState") or not hasattr(output_device, "jobState"): + return "tab_status_unknown" + + # TODO: refactor to use enum instead of hardcoded strings? + if output_device.printerState == "maintenance": + return "tab_status_busy" + + if output_device.jobState in ["printing", "pre_print", "pausing", "resuming"]: + return "tab_status_busy" + + if output_device.jobState == "wait_cleanup": + return "tab_status_finished" + + if output_device.jobState in ["ready", ""]: + return "tab_status_connected" + + if output_device.jobState == "paused": + return "tab_status_paused" + + if output_device.jobState == "error": + return "tab_status_stopped" + + return "tab_status_unknown" diff --git a/plugins/MonitorStage/__init__.py b/plugins/MonitorStage/__init__.py new file mode 100644 index 0000000000..884d43a8af --- /dev/null +++ b/plugins/MonitorStage/__init__.py @@ -0,0 +1,20 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import MonitorStage + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("cura") + +def getMetaData(): + return { + "stage": { + "name": i18n_catalog.i18nc("@item:inmenu", "Monitor"), + "weight": 1 + } + } + +def register(app): + return { + "stage": MonitorStage.MonitorStage() + } diff --git a/plugins/MonitorStage/plugin.json b/plugins/MonitorStage/plugin.json new file mode 100644 index 0000000000..cb3f55a80d --- /dev/null +++ b/plugins/MonitorStage/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Monitor Stage", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Provides a monitor stage in Cura.", + "api": 4, + "i18n-catalog": "cura" +} \ No newline at end of file diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index c15431c9e2..ea126bfd44 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -26,17 +26,92 @@ Item { spacing: UM.Theme.getSize("default_margin").height + Row + { + spacing: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label","Mesh Type") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: UM.Theme.getSize("setting").height + verticalAlignment: Text.AlignVCenter + } + + ComboBox + { + id: meshTypeSelection + style: UM.Theme.styles.combobox + onActivated: { + UM.ActiveTool.setProperty("MeshType", model.get(index).type) + } + model: ListModel + { + id: meshTypeModel + Component.onCompleted: + { + meshTypeModel.append({ + type: "", + text: catalog.i18nc("@label", "Normal model") + }); + meshTypeModel.append({ + type: "support_mesh", + text: catalog.i18nc("@label", "Print as support") + }); + meshTypeModel.append({ + type: "anti_overhang_mesh", + text: catalog.i18nc("@label", "Don't support overlap with other models") + }); + meshTypeModel.append({ + type: "cutting_mesh", + text: catalog.i18nc("@label", "Modify settings for overlap with other models") + }); + meshTypeModel.append({ + type: "infill_mesh", + text: catalog.i18nc("@label", "Modify settings for infill of other models") + }); + + meshTypeSelection.updateCurrentIndex(); + } + } + + function updateCurrentIndex() + { + var mesh_type = UM.ActiveTool.properties.getValue("MeshType"); + for(var index=0; index < meshTypeSelection.model.count; index++) + { + if(meshTypeSelection.model.get(index).type == mesh_type) + { + meshTypeSelection.currentIndex = index; + return; + } + } + meshTypeSelection.currentIndex = 0; + } + } + + Connections + { + target: UM.Selection + onSelectionChanged: meshTypeSelection.updateCurrentIndex() + } + + } + Column { // This is to ensure that the panel is first increasing in size up to 200 and then shows a scrollbar. // It kinda looks ugly otherwise (big panel, no content on it) + id: currentSettings property int maximumHeight: 200 * screenScaleFactor height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight) + visible: ["support_mesh", "anti_overhang_mesh"].indexOf(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type) == -1 ScrollView { height: parent.height - width: UM.Theme.getSize("setting").width + UM.Theme.getSize("setting").height + width: UM.Theme.getSize("setting").width style: UM.Theme.styles.scrollview ListView @@ -49,6 +124,7 @@ Item { id: addedSettingsModel; containerId: Cura.MachineManager.activeDefinitionId expanded: [ "*" ] + exclude: [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ] visibilityHandler: Cura.PerObjectSettingVisibilityHandler { @@ -58,6 +134,7 @@ Item { delegate: Row { + spacing: - UM.Theme.getSize("default_margin").width Loader { id: settingLoader @@ -68,6 +145,7 @@ Item { property var settingDefinitionsModel: addedSettingsModel property var propertyProvider: provider property var globalPropertyProvider: inheritStackProvider + property var externalResetHandler: false //Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989 //In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes, @@ -112,7 +190,7 @@ Item { Button { - width: (UM.Theme.getSize("setting").height / 2) | 0 + width: Math.floor(UM.Theme.getSize("setting").height / 2) height: UM.Theme.getSize("setting").height onClicked: addedSettingsModel.setVisible(model.key, false) @@ -125,7 +203,7 @@ Item { { anchors.verticalCenter: parent.verticalCenter width: parent.width - height: parent.height / 2 + height: width sourceSize.width: width sourceSize.height: width color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") @@ -201,9 +279,9 @@ Item { Button { - id: customise_settings_button; - height: UM.Theme.getSize("setting").height; - visible: parseInt(UM.Preferences.getValue("cura/active_mode")) == 1 + id: customiseSettingsButton; + height: UM.Theme.getSize("setting_control").height; + visible: currentSettings.visible text: catalog.i18nc("@action:button", "Select settings"); @@ -223,21 +301,12 @@ Item { { text: control.text; color: UM.Theme.getColor("setting_control_text"); + font: UM.Theme.getFont("default") anchors.centerIn: parent } } onClicked: settingPickDialog.visible = true; - - Connections - { - target: UM.Preferences; - - onPreferenceChanged: - { - customise_settings_button.visible = parseInt(UM.Preferences.getValue("cura/active_mode")) - } - } } } @@ -325,7 +394,7 @@ Item { } visibilityHandler: UM.SettingPreferenceVisibilityHandler {} expanded: [ "*" ] - exclude: [ "machine_settings", "command_line_settings" ] + exclude: [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ] } delegate:Loader { diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index dc6efafa13..d2db5ff420 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -8,6 +8,7 @@ from UM.Application import Application from UM.Preferences import Preferences from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator from cura.Settings.ExtruderManager import ExtruderManager +from UM.Settings.SettingInstance import SettingInstance from UM.Event import Event @@ -18,7 +19,7 @@ class PerObjectSettingsTool(Tool): super().__init__() self._model = None - self.setExposedProperties("SelectedObjectId", "ContainerID", "SelectedActiveExtruder") + self.setExposedProperties("SelectedObjectId", "ContainerID", "SelectedActiveExtruder", "MeshType") self._advanced_mode = False self._multi_extrusion = False @@ -70,6 +71,39 @@ class PerObjectSettingsTool(Tool): selected_object.addDecorator(SettingOverrideDecorator()) selected_object.callDecoration("setActiveExtruder", extruder_stack_id) + def setMeshType(self, mesh_type): + selected_object = Selection.getSelectedObject(0) + stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. + if not stack: + selected_object.addDecorator(SettingOverrideDecorator()) + stack = selected_object.callDecoration("getStack") + + settings = stack.getTop() + for property_key in ["infill_mesh", "cutting_mesh", "support_mesh", "anti_overhang_mesh"]: + if property_key != mesh_type: + if settings.getInstance(property_key): + settings.removeInstance(property_key) + else: + if not (settings.getInstance(property_key) and settings.getProperty(property_key, "value")): + definition = stack.getSettingDefinition(property_key) + new_instance = SettingInstance(definition, settings) + new_instance.setProperty("value", True) + new_instance.resetState() # Ensure that the state is not seen as a user state. + settings.addInstance(new_instance) + + def getMeshType(self): + selected_object = Selection.getSelectedObject(0) + stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. + if not stack: + return "" + + settings = stack.getTop() + for property_key in ["infill_mesh", "cutting_mesh", "support_mesh", "anti_overhang_mesh"]: + if settings.getInstance(property_key) and settings.getProperty(property_key, "value"): + return property_key + + return "" + def _onPreferenceChanged(self, preference): if preference == "cura/active_mode": self._advanced_mode = Preferences.getInstance().getValue(preference) == 1 diff --git a/plugins/PluginBrowser/PluginBrowser.py b/plugins/PluginBrowser/PluginBrowser.py index 37ad128b49..35b88b3465 100644 --- a/plugins/PluginBrowser/PluginBrowser.py +++ b/plugins/PluginBrowser/PluginBrowser.py @@ -11,7 +11,6 @@ from UM.Message import Message from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply from PyQt5.QtCore import QUrl, QObject, Qt, pyqtProperty, pyqtSignal, pyqtSlot -from PyQt5.QtQml import QQmlComponent, QQmlContext import json import os @@ -39,8 +38,6 @@ class PluginBrowser(QObject, Extension): self._plugins_metadata = [] self._plugins_model = None - self._qml_component = None - self._qml_context = None self._dialog = None self._download_progress = 0 @@ -111,17 +108,8 @@ class PluginBrowser(QObject, Extension): def _createDialog(self, qml_name): Logger.log("d", "Creating dialog [%s]", qml_name) - - path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), qml_name)) - self._qml_component = QQmlComponent(Application.getInstance()._engine, path) - - # We need access to engine (although technically we can't) - self._qml_context = QQmlContext(Application.getInstance()._engine.rootContext()) - self._qml_context.setContextProperty("manager", self) - dialog = self._qml_component.create(self._qml_context) - if dialog is None: - Logger.log("e", "QQmlComponent status %s", self._qml_component.status()) - Logger.log("e", "QQmlComponent errorString %s", self._qml_component.errorString()) + path = os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), qml_name) + dialog = Application.getInstance().createQmlComponent(path, {"manager": self}) return dialog def setIsDownloading(self, is_downloading): diff --git a/plugins/PrepareStage/PrepareStage.py b/plugins/PrepareStage/PrepareStage.py new file mode 100644 index 0000000000..9d4d632845 --- /dev/null +++ b/plugins/PrepareStage/PrepareStage.py @@ -0,0 +1,18 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import os.path +from UM.Application import Application +from UM.Resources import Resources +from cura.Stages.CuraStage import CuraStage + + +## Stage for preparing model (slicing). +class PrepareStage(CuraStage): + + def __init__(self, parent = None): + super().__init__(parent) + Application.getInstance().engineCreatedSignal.connect(self._engineCreated) + + def _engineCreated(self): + sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles), "Sidebar.qml") + self.addDisplayComponent("sidebar", sidebar_component_path) diff --git a/plugins/PrepareStage/__init__.py b/plugins/PrepareStage/__init__.py new file mode 100644 index 0000000000..f085d788f9 --- /dev/null +++ b/plugins/PrepareStage/__init__.py @@ -0,0 +1,20 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import PrepareStage + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("cura") + +def getMetaData(): + return { + "stage": { + "name": i18n_catalog.i18nc("@item:inmenu", "Prepare"), + "weight": 0 + } + } + +def register(app): + return { + "stage": PrepareStage.PrepareStage() + } diff --git a/plugins/PrepareStage/plugin.json b/plugins/PrepareStage/plugin.json new file mode 100644 index 0000000000..4fd55e955e --- /dev/null +++ b/plugins/PrepareStage/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Prepare Stage", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Provides a prepare stage in Cura.", + "api": 4, + "i18n-catalog": "cura" +} \ No newline at end of file diff --git a/plugins/SimulationView/SimulationPass.py b/plugins/SimulationView/SimulationPass.py index 46fa7f1240..24bdedd368 100644 --- a/plugins/SimulationView/SimulationPass.py +++ b/plugins/SimulationView/SimulationPass.py @@ -92,7 +92,7 @@ class SimulationPass(RenderPass): self.bind() - tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay) + tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay, backface_cull = True) head_position = None # Indicates the current position of the print head nozzle_node = None @@ -149,7 +149,7 @@ class SimulationPass(RenderPass): self._current_shader = self._layer_shader self._switching_layers = True - layers_batch = RenderBatch(self._current_shader, type = RenderBatch.RenderType.Solid, mode = RenderBatch.RenderMode.Lines, range = (start, end)) + layers_batch = RenderBatch(self._current_shader, type = RenderBatch.RenderType.Solid, mode = RenderBatch.RenderMode.Lines, range = (start, end), backface_cull = True) layers_batch.addItem(node.getWorldTransformation(), layer_data) layers_batch.render(self._scene.getActiveCamera()) diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index b7bff91f9b..44f472129f 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -154,6 +154,7 @@ class SimulationView(View): def _onSceneChanged(self, node): self.setActivity(False) self.calculateMaxLayers() + self.calculateMaxPathsOnLayer(self._current_layer_num) def isBusy(self): return self._busy diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml index 42cd23cd5f..19ae81a6e3 100644 --- a/plugins/SimulationView/SimulationView.qml +++ b/plugins/SimulationView/SimulationView.qml @@ -97,6 +97,8 @@ Item // if we are in compatibility mode, we only show the "line type" property bool show_legend: UM.SimulationView.compatibilityMode ? true : UM.Preferences.getValue("layerview/layer_view_type") == 1 property bool show_gradient: UM.SimulationView.compatibilityMode ? false : UM.Preferences.getValue("layerview/layer_view_type") == 2 || UM.Preferences.getValue("layerview/layer_view_type") == 3 + property bool show_feedrate_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 2 + property bool show_thickness_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 3 property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") property int top_layer_count: UM.Preferences.getValue("view/top_layer_count") @@ -170,6 +172,9 @@ Item { // update visibility of legends viewSettings.show_legend = UM.SimulationView.compatibilityMode || (type_id == 1); + viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3); + viewSettings.show_feedrate_gradient = viewSettings.show_gradient && (type_id == 2); + viewSettings.show_thickness_gradient = viewSettings.show_gradient && (type_id == 3); } } @@ -450,11 +455,42 @@ Item } } - // Gradient colors for feedrate and thickness + // Gradient colors for feedrate Rectangle { // In QML 5.9 can be changed by LinearGradient // Invert values because then the bar is rotated 90 degrees - id: gradient - visible: viewSettings.show_gradient + id: feedrateGradient + visible: viewSettings.show_feedrate_gradient + anchors.left: parent.right + height: parent.width + width: UM.Theme.getSize("layerview_row").height * 1.5 + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} + gradient: Gradient { + GradientStop { + position: 0.000 + color: Qt.rgba(1, 0.5, 0, 1) + } + GradientStop { + position: 0.625 + color: Qt.rgba(0.375, 0.5, 0, 1) + } + GradientStop { + position: 0.75 + color: Qt.rgba(0.25, 1, 0, 1) + } + GradientStop { + position: 1.0 + color: Qt.rgba(0, 0, 1, 1) + } + } + } + + // Gradient colors for layer thickness + Rectangle { // In QML 5.9 can be changed by LinearGradient + // Invert values because then the bar is rotated 90 degrees + id: thicknessGradient + visible: viewSettings.show_thickness_gradient anchors.left: parent.right height: parent.width width: UM.Theme.getSize("layerview_row").height * 1.5 @@ -468,15 +504,15 @@ Item } GradientStop { position: 0.25 - color: Qt.rgba(0.75, 0.5, 0.25, 1) + color: Qt.rgba(0.5, 0.5, 0, 1) } GradientStop { position: 0.5 - color: Qt.rgba(0.5, 1, 0.5, 1) + color: Qt.rgba(0, 1, 0, 1) } GradientStop { position: 0.75 - color: Qt.rgba(0.25, 0.5, 0.75, 1) + color: Qt.rgba(0, 0.5, 0.5, 1) } GradientStop { position: 1.0 @@ -503,9 +539,9 @@ Item id: pathSlider height: UM.Theme.getSize("slider_handle").width - anchors.right: playButton.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.left: parent.left + anchors.left: playButton.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.right: parent.right visible: !UM.SimulationView.compatibilityMode // custom properties @@ -539,7 +575,7 @@ Item height: UM.Theme.getSize("layerview_menu_size").height anchors { - top: !UM.SimulationView.compatibilityMode ? playButton.bottom : parent.top + top: !UM.SimulationView.compatibilityMode ? pathSlider.bottom : parent.top topMargin: !UM.SimulationView.compatibilityMode ? UM.Theme.getSize("default_margin").height : 0 right: parent.right rightMargin: UM.Theme.getSize("slider_layerview_margin").width @@ -577,13 +613,10 @@ Item // Play simulation button Button { id: playButton - implicitWidth: Math.floor(UM.Theme.getSize("button").width * 0.75) - implicitHeight: Math.floor(UM.Theme.getSize("button").height * 0.75) iconSource: "./resources/simulation_resume.svg" - style: UM.Theme.styles.tool_button + style: UM.Theme.styles.small_tool_button visible: !UM.SimulationView.compatibilityMode anchors { - horizontalCenter: layerSlider.horizontalCenter verticalCenter: pathSlider.verticalCenter } diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader index f377fca055..86a88fab83 100644 --- a/plugins/SimulationView/layers3d.shader +++ b/plugins/SimulationView/layers3d.shader @@ -38,12 +38,25 @@ vertex41core = out highp vec3 f_vertex; out highp vec3 f_normal; - vec4 gradientColor(float abs_value, float min_value, float max_value) + vec4 feedrateGradientColor(float abs_value, float min_value, float max_value) { float value = (abs_value - min_value)/(max_value - min_value); float red = value; + float green = 1-abs(1-4*value); + if (value > 0.375) + { + green = 0.5; + } + float blue = max(1-4*value, 0); + return vec4(red, green, blue, 1.0); + } + + vec4 layerThicknessGradientColor(float abs_value, float min_value, float max_value) + { + float value = (abs_value - min_value)/(max_value - min_value); + float red = max(2*value-1, 0); float green = 1-abs(1-2*value); - float blue = 1-value; + float blue = max(1-2*value, 0); return vec4(red, green, blue, 1.0); } @@ -64,10 +77,10 @@ vertex41core = v_color = a_color; break; case 2: // "Feedrate" - v_color = gradientColor(a_feedrate, u_min_feedrate, u_max_feedrate); + v_color = feedrateGradientColor(a_feedrate, u_min_feedrate, u_max_feedrate); break; case 3: // "Layer thickness" - v_color = gradientColor(a_line_dim.y, u_min_thickness, u_max_thickness); + v_color = layerThicknessGradientColor(a_line_dim.y, u_min_thickness, u_max_thickness); break; } @@ -174,20 +187,27 @@ geometry41core = myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert)); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert)); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head + g_vertex_offset_vert)); + //And reverse so that the line is also visible from the back side. + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert)); + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert)); + myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert)); + myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert)); + myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert)); + myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert)); EndPrimitive(); } else { // All normal lines are rendered as 3d tubes. - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz)); - myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz)); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert)); - myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert)); myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz)); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz)); - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert)); - myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert)); + myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert)); + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert)); myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz)); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz)); + myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert)); + myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert)); + myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz)); + myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz)); EndPrimitive(); diff --git a/plugins/SimulationView/resources/simulation_pause.svg b/plugins/SimulationView/resources/simulation_pause.svg index 67f7deea5d..652434bd44 100644 --- a/plugins/SimulationView/resources/simulation_pause.svg +++ b/plugins/SimulationView/resources/simulation_pause.svg @@ -1,4 +1,6 @@ + + + id="svg877" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="simulation_pause2.svg"> + + + id="metadata874"> image/svg+xml + - - - - - - - + + + + + + diff --git a/plugins/SimulationView/resources/simulation_resume.svg b/plugins/SimulationView/resources/simulation_resume.svg index a8ed8e79a3..912a2ac418 100644 --- a/plugins/SimulationView/resources/simulation_resume.svg +++ b/plugins/SimulationView/resources/simulation_resume.svg @@ -1,4 +1,6 @@ + + + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="simulation_resume2.svg"> + + + id="metadata5"> image/svg+xml + - - - - - - + + + diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 4399b0a450..9bd99cae2b 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -104,7 +104,9 @@ class SliceInfo(Extension): "type": extruder.material.getMetaData().get("material", ""), "brand": extruder.material.getMetaData().get("brand", "") } - extruder_dict["material_used"] = print_information.materialLengths[int(extruder.getMetaDataEntry("position", "0"))] + extruder_position = int(extruder.getMetaDataEntry("position", "0")) + if extruder_position in print_information.materialLengths: + extruder_dict["material_used"] = print_information.materialLengths[extruder_position] extruder_dict["variant"] = extruder.variant.getName() extruder_dict["nozzle_size"] = extruder.getProperty("machine_nozzle_size", "value") diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py index bc1b08cc5e..e156e655ce 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -27,31 +27,39 @@ class SolidView(View): self._enabled_shader = None self._disabled_shader = None + self._non_printing_shader = None self._extruders_model = ExtrudersModel() + self._theme = None def beginRendering(self): scene = self.getController().getScene() renderer = self.getRenderer() + if not self._theme: + self._theme = Application.getInstance().getTheme() + if not self._enabled_shader: self._enabled_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "overhang.shader")) - theme = Application.getInstance().getTheme() - self._enabled_shader.setUniformValue("u_overhangColor", Color(*theme.getColor("model_overhang").getRgb())) + self._enabled_shader.setUniformValue("u_overhangColor", Color(*self._theme.getColor("model_overhang").getRgb())) if not self._disabled_shader: self._disabled_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "striped.shader")) - theme = Application.getInstance().getTheme() - self._disabled_shader.setUniformValue("u_diffuseColor1", Color(*theme.getColor("model_unslicable").getRgb())) - self._disabled_shader.setUniformValue("u_diffuseColor2", Color(*theme.getColor("model_unslicable_alt").getRgb())) + self._disabled_shader.setUniformValue("u_diffuseColor1", Color(*self._theme.getColor("model_unslicable").getRgb())) + self._disabled_shader.setUniformValue("u_diffuseColor2", Color(*self._theme.getColor("model_unslicable_alt").getRgb())) self._disabled_shader.setUniformValue("u_width", 50.0) + if not self._non_printing_shader: + self._non_printing_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader")) + self._non_printing_shader.setUniformValue("u_diffuseColor", Color(*self._theme.getColor("model_non_printing").getRgb())) + self._non_printing_shader.setUniformValue("u_opacity", 0.6) + global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: support_extruder_nr = global_container_stack.getProperty("support_extruder_nr", "value") - support_angle_stack = ExtruderManager.getInstance().getExtruderStack(support_extruder_nr) + support_angle_stack = Application.getInstance().getExtruderManager().getExtruderStack(support_extruder_nr) - if Preferences.getInstance().getValue("view/show_overhang"): + if support_angle_stack is not None and Preferences.getInstance().getValue("view/show_overhang"): angle = support_angle_stack.getProperty("support_angle", "value") # Make sure the overhang angle is valid before passing it to the shader # Note: if the overhang angle is set to its default value, it does not need to get validated (validationState = None) @@ -68,11 +76,19 @@ class SolidView(View): uniforms = {} shade_factor = 1.0 + per_mesh_stack = node.callDecoration("getStack") + # Get color to render this mesh in from ExtrudersModel extruder_index = 0 extruder_id = node.callDecoration("getActiveExtruder") if extruder_id: extruder_index = max(0, self._extruders_model.find("id", extruder_id)) + + # Use the support extruder instead of the active extruder if this is a support_mesh + if per_mesh_stack: + if per_mesh_stack.getProperty("support_mesh", "value"): + extruder_index = int(global_container_stack.getProperty("support_extruder_nr", "value")) + try: material_color = self._extruders_model.getItem(extruder_index)["color"] except KeyError: @@ -94,19 +110,17 @@ class SolidView(View): except ValueError: pass - if hasattr(node, "_outside_buildarea"): - if node._outside_buildarea: - renderer.queueNode(node, shader = self._disabled_shader) + if node.callDecoration("isNonPrintingMesh"): + if per_mesh_stack and (per_mesh_stack.getProperty("infill_mesh", "value") or per_mesh_stack.getProperty("cutting_mesh", "value")): + renderer.queueNode(node, shader = self._non_printing_shader, uniforms = uniforms, transparent = True) else: - renderer.queueNode(node, shader = self._enabled_shader, uniforms = uniforms) + renderer.queueNode(node, shader = self._non_printing_shader, transparent = True) + elif getattr(node, "_outside_buildarea", False): + renderer.queueNode(node, shader = self._disabled_shader) else: - renderer.queueNode(node, material = self._enabled_shader, uniforms = uniforms) + renderer.queueNode(node, shader = self._enabled_shader, uniforms = uniforms) if node.callDecoration("isGroup") and Selection.isSelected(node): renderer.queueNode(scene.getRoot(), mesh = node.getBoundingBoxMesh(), mode = RenderBatch.RenderMode.LineLoop) def endRendering(self): pass - - #def _onPreferenceChanged(self, preference): - #if preference == "view/show_overhang": ## Todo: This a printer only setting. Should be removed from Uranium. - #self._enabled_material = None diff --git a/plugins/UM3NetworkPrinting/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/DiscoverUM3Action.py index af1a556892..0d5d259ce4 100644 --- a/plugins/UM3NetworkPrinting/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/DiscoverUM3Action.py @@ -1,17 +1,15 @@ -from cura.MachineAction import MachineAction +import os.path +import time + +from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QObject from UM.Application import Application from UM.PluginRegistry import PluginRegistry from UM.Logger import Logger - -from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QUrl, QObject -from PyQt5.QtQml import QQmlComponent, QQmlContext - -import os.path - -import time - from UM.i18n import i18nCatalog + +from cura.MachineAction import MachineAction + catalog = i18nCatalog("cura") class DiscoverUM3Action(MachineAction): @@ -136,17 +134,14 @@ class DiscoverUM3Action(MachineAction): def _createAdditionalComponentsView(self): Logger.log("d", "Creating additional ui components for UM3.") - path = QUrl.fromLocalFile(os.path.join(PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting"), "UM3InfoComponents.qml")) - self.__additional_component = QQmlComponent(Application.getInstance()._engine, path) - # We need access to engine (although technically we can't) - self.__additional_components_context = QQmlContext(Application.getInstance()._engine.rootContext()) - self.__additional_components_context.setContextProperty("manager", self) - - self.__additional_components_view = self.__additional_component.create(self.__additional_components_context) + # Create networking dialog + path = os.path.join(PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting"), "UM3InfoComponents.qml") + self.__additional_components_view = Application.getInstance().createQmlComponent(path, {"manager": self}) if not self.__additional_components_view: Logger.log("w", "Could not create ui components for UM3.") return + # Create extra components Application.getInstance().addAdditionalComponent("monitorButtons", self.__additional_components_view.findChild(QObject, "networkPrinterConnectButton")) Application.getInstance().addAdditionalComponent("machinesDetailPane", self.__additional_components_view.findChild(QObject, "networkPrinterConnectionInfo")) diff --git a/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py index 09518575c9..7143b462e6 100644 --- a/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py @@ -8,12 +8,10 @@ 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.QtCore import QUrl, 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.Decorators import override from UM.Logger import Logger from UM.Message import Message from UM.OutputDevice import OutputDeviceError @@ -131,7 +129,7 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte @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: + if not self._control_item: self._createControlViewFromQML() name = self._selected_printer.get("friendly_name") if name == self._automatic_printer.get("friendly_name") or name == "": @@ -235,17 +233,8 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte 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()])) - + path = os.path.join(self._plugin_path, "PrintWindow.qml") + self._print_view = Application.getInstance().createQmlComponent(path, {"OutputDevice": self}) if self._print_view is not None: self._print_view.show() @@ -263,6 +252,8 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte self._error_message.show() return + self.writeStarted.emit(self) # Allow postprocessing before sending data to the printer + if len(self._printers) > 1: self.spawnPrintView() # Ask user how to print it. elif len(self._printers) == 1: @@ -707,7 +698,7 @@ class NetworkClusterPrinterOutputDevice(NetworkPrinterOutputDevice.NetworkPrinte if self._reply: self._reply.abort() self._stage = OutputStage.ready - Application.getInstance().showPrintMonitor.emit(False) + Application.getInstance().getController().setActiveStage("PrepareStage") @pyqtSlot(int, result=str) def formatDuration(self, seconds): diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index d8dd780ed5..17e4bce0ef 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -672,7 +672,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): Logger.log("d", "Attempting to perform an action without authentication for printer %s. Auth state is %s", self._key, self._authentication_state) return - Application.getInstance().showPrintMonitor.emit(True) + Application.getInstance().getController().setActiveStage("MonitorStage") self._print_finished = True self.writeStarted.emit(self) self._gcode = getattr(Application.getInstance().getController().getScene(), "gcode_list") @@ -726,10 +726,10 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): remote_material_guid, material.getMetaDataEntry("GUID")) - remote_materials = UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().findInstanceContainers(type = "material", GUID = remote_material_guid, read_only = True) + remote_materials = UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().findInstanceContainersMetadata(type = "material", GUID = remote_material_guid, read_only = True) remote_material_name = "Unknown" if remote_materials: - remote_material_name = remote_materials[0].getName() + remote_material_name = remote_materials[0]["name"] warnings.append(i18n_catalog.i18nc("@label", "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}").format(material.getName(), remote_material_name, index + 1)) try: @@ -767,7 +767,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): if button == QMessageBox.Yes: self.startPrint() else: - Application.getInstance().showPrintMonitor.emit(False) + Application.getInstance().getController().setActiveStage("PrepareStage") # For some unknown reason Cura on OSX will hang if we do the call back code # immediately without first returning and leaving QML's event system. QTimer.singleShot(100, delayedCallback) @@ -850,7 +850,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._write_finished = True # post_reply does not always exist, so make sure we unblock writing if self._post_reply: self._finalizePostReply() - Application.getInstance().showPrintMonitor.emit(False) + Application.getInstance().getController().setActiveStage("PrepareStage") ## Attempt to start a new print. # This function can fail to actually start a print due to not being authenticated or another print already @@ -971,7 +971,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): ## Send all material profiles to the printer. def sendMaterialProfiles(self): - for container in UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().findInstanceContainers(type = "material"): + registry = UM.Settings.ContainerRegistry.ContainerRegistry.getInstance() + for container in registry.findInstanceContainers(type = "material"): try: xml_data = container.serialize() if xml_data == "" or xml_data is None: @@ -980,7 +981,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): names = ContainerManager.getInstance().getLinkedMaterials(container.getId()) if names: # There are other materials that share this GUID. - if not container.isReadOnly(): + if not registry.isReadOnly(container.getId()): continue # If it's not readonly, it's created by user, so skip it. material_multi_part = QHttpMultiPart(QHttpMultiPart.FormDataType) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py index 46538f1af9..0d3ed52f03 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevicePlugin.py @@ -43,6 +43,7 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): # List of old printer names. This is used to ensure that a refresh of zeroconf does not needlessly forces # authentication requests. self._old_printers = [] + self._excluded_addresses = ["127.0.0.1"] # Adding a list of not allowed IP addresses. At this moment, just localhost # Because the model needs to be created in the same thread as the QMLEngine, we use a signal. self.addPrinterSignal.connect(self.addPrinter) @@ -300,6 +301,9 @@ class NetworkPrinterOutputDevicePlugin(QObject, OutputDevicePlugin): if type_of_device: if type_of_device == b"printer": address = '.'.join(map(lambda n: str(n), info.address)) + if address in self._excluded_addresses: + Logger.log("d", "The IP address %s of the printer \'%s\' is not correct. Trying to reconnect.", address, name) + return False # When getting the localhost IP, then try to reconnect self.addPrinterSignal.emit(str(name), address, info.properties) else: Logger.log("w", "The type of the found device is '%s', not 'printer'! Ignoring.." % type_of_device ) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 3b9603cc1b..1930f5402b 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -13,6 +13,7 @@ from UM.Application import Application from UM.Logger import Logger from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState from UM.Message import Message +from UM.Qt.Duration import DurationFormat from PyQt5.QtCore import QUrl, pyqtSlot, pyqtSignal, pyqtProperty @@ -52,6 +53,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._heatup_wait_start_time = time.time() + self.jobStateChanged.connect(self._onJobStateChanged) + ## Queue for commands that need to be send. Used when command is sent when a print is active. self._command_queue = queue.Queue() @@ -60,7 +63,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): ## Set when print is started in order to check running time. self._print_start_time = None - self._print_start_time_100 = None + self._print_estimated_time = None ## Keep track where in the provided g-code the print is self._gcode_position = 0 @@ -125,6 +128,29 @@ class USBPrinterOutputDevice(PrinterOutputDevice): def _homeBed(self): self._sendCommand("G28 Z") + ## Updates the target bed temperature from the printer, and emit a signal if it was changed. + # + # /param temperature The new target temperature of the bed. + # /return boolean, True if the temperature was changed, false if the new temperature has the same value as the already stored temperature + def _updateTargetBedTemperature(self, temperature): + if self._target_bed_temperature == temperature: + return False + self._target_bed_temperature = temperature + self.targetBedTemperatureChanged.emit() + return True + + ## Updates the target hotend temperature from the printer, and emit a signal if it was changed. + # + # /param index The index of the hotend. + # /param temperature The new target temperature of the hotend. + # /return boolean, True if the temperature was changed, false if the new temperature has the same value as the already stored temperature + def _updateTargetHotendTemperature(self, index, temperature): + if self._target_hotend_temperatures[index] == temperature: + return False + self._target_hotend_temperatures[index] = temperature + self.targetHotendTemperaturesChanged.emit() + return True + ## A name for the device. @pyqtProperty(str, constant = True) def name(self): @@ -164,7 +190,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice): # Reset line number. If this is not done, first line is sometimes ignored self._gcode.insert(0, "M110") self._gcode_position = 0 - self._print_start_time_100 = None self._is_printing = True self._print_start_time = time.time() @@ -394,7 +419,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._listen_thread.join() except: pass - self._serial.close() + if self._serial is not None: # Avoid a race condition when a thread can change the value of self._serial to None + self._serial.close() self._listen_thread = threading.Thread(target = self._listen) self._listen_thread.daemon = True @@ -446,7 +472,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice): # # \param nodes A collection of scene nodes to send. This is ignored. # \param file_name \type{string} A suggestion for a file name to write. - # This is ignored. # \param filter_by_machine Whether to filter MIME types by machine. This # is ignored. # \param kwargs Keyword arguments. @@ -462,7 +487,10 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._error_message.show() return - Application.getInstance().showPrintMonitor.emit(True) + self.setJobName(file_name) + self._print_estimated_time = int(Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.Seconds)) + + Application.getInstance().getController().setActiveStage("MonitorStage") self.startPrint() def _setEndstopState(self, endstop_key, value): @@ -482,6 +510,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): ## Listen thread function. def _listen(self): Logger.log("i", "Printer connection listen thread started for %s" % self._serial_port) + container_stack = Application.getInstance().getGlobalContainerStack() temperature_request_timeout = time.time() ok_timeout = time.time() while self._connection_state == ConnectionState.connected: @@ -511,16 +540,40 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._setErrorState(line[6:]) elif b" T:" in line or line.startswith(b"T:"): # Temperature message + temperature_matches = re.findall(b"T(\d*): ?([\d\.]+) ?\/?([\d\.]+)?", line) + temperature_set = False try: - self._setHotendTemperature(self._temperature_requested_extruder_index, float(re.search(b"T: *([0-9\.]*)", line).group(1))) + for match in temperature_matches: + if match[0]: + extruder_nr = int(match[0]) + if extruder_nr >= container_stack.getProperty("machine_extruder_count", "value"): + continue + if match[1]: + self._setHotendTemperature(extruder_nr, float(match[1])) + temperature_set = True + if match[2]: + self._updateTargetHotendTemperature(extruder_nr, float(match[2])) + else: + requested_temperatures = match + if not temperature_set and requested_temperatures: + if requested_temperatures[1]: + self._setHotendTemperature(self._temperature_requested_extruder_index, float(requested_temperatures[1])) + if requested_temperatures[2]: + self._updateTargetHotendTemperature(self._temperature_requested_extruder_index, float(requested_temperatures[2])) except: - pass - if b"B:" in line: # Check if it's a bed temperature + Logger.log("w", "Could not parse hotend temperatures from response: %s", line) + # Check if there's also a bed temperature + temperature_matches = re.findall(b"B: ?([\d\.]+) ?\/?([\d\.]+)?", line) + if container_stack.getProperty("machine_heated_bed", "value") and len(temperature_matches) > 0: + match = temperature_matches[0] try: - self._setBedTemperature(float(re.search(b"B: *([0-9\.]*)", line).group(1))) - except Exception as e: - pass - #TODO: temperature changed callback + if match[0]: + self._setBedTemperature(float(match[0])) + if match[1]: + self._updateTargetBedTemperature(float(match[1])) + except: + Logger.log("w", "Could not parse bed temperature from response: %s", line) + elif b"_min" in line or b"_max" in line: tag, value = line.split(b":", 1) self._setEndstopState(tag,(b"H" in value or b"TRIGGERED" in value)) @@ -559,8 +612,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice): def _sendNextGcodeLine(self): if self._gcode_position >= len(self._gcode): return - if self._gcode_position == 100: - self._print_start_time_100 = time.time() line = self._gcode[self._gcode_position] if ";" in line: @@ -584,8 +635,18 @@ class USBPrinterOutputDevice(PrinterOutputDevice): checksum = functools.reduce(lambda x,y: x^y, map(ord, "N%d%s" % (self._gcode_position, line))) self._sendCommand("N%d%s*%d" % (self._gcode_position, line, checksum)) + + progress = (self._gcode_position / len(self._gcode)) + + elapsed_time = int(time.time() - self._print_start_time) + self.setTimeElapsed(elapsed_time) + estimated_time = self._print_estimated_time + if progress > .1: + estimated_time = self._print_estimated_time * (1-progress) + elapsed_time + self.setTimeTotal(estimated_time) + self._gcode_position += 1 - self.setProgress((self._gcode_position / len(self._gcode)) * 100) + self.setProgress(progress * 100) self.progressChanged.emit() ## Set the state of the print. @@ -600,6 +661,13 @@ class USBPrinterOutputDevice(PrinterOutputDevice): elif job_state == "abort": self.cancelPrint() + def _onJobStateChanged(self): + # clear the job name & times when printing is done or aborted + if self._job_state == "ready": + self.setJobName("") + self.setTimeElapsed(0) + self.setTimeTotal(0) + ## Set the progress of the print. # It will be normalized (based on max_progress) to range 0 - 100 def setProgress(self, progress, max_progress = 100): @@ -630,7 +698,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._is_printing = False self._is_paused = False self._updateJobState("ready") - Application.getInstance().showPrintMonitor.emit(False) + Application.getInstance().getController().setActiveStage("PrepareStage") ## Check if the process did not encounter an error yet. def hasError(self): diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index 6167356c4b..62412bb521 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -16,13 +16,11 @@ from cura.CuraApplication import CuraApplication import threading import platform -import glob import time import os.path import serial.tools.list_ports from UM.Extension import Extension -from PyQt5.QtQml import QQmlComponent, QQmlContext from PyQt5.QtCore import QUrl, QObject, pyqtSlot, pyqtProperty, pyqtSignal, Qt from UM.i18n import i18nCatalog i18n_catalog = i18nCatalog("cura") @@ -99,7 +97,8 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): @pyqtSlot(str) def updateAllFirmware(self, file_name): if file_name.startswith("file://"): - file_name = QUrl(file_name).toLocalFile() # File dialogs prepend the path with file://, which we don't need / want + file_name = QUrl(file_name).toLocalFile() # File dialogs prepend the path with file://, which we don't need / want + if not self._usb_output_devices: Message(i18n_catalog.i18nc("@info", "Unable to update firmware because there are no printers connected."), title = i18n_catalog.i18nc("@info:title", "Warning")).show() return diff --git a/plugins/UserAgreementPlugin/UserAgreement.py b/plugins/UserAgreementPlugin/UserAgreement.py index da225a63b4..915c1761fa 100644 --- a/plugins/UserAgreementPlugin/UserAgreement.py +++ b/plugins/UserAgreementPlugin/UserAgreement.py @@ -9,13 +9,12 @@ from UM.Logger import Logger from cura.CuraApplication import CuraApplication -from PyQt5.QtQml import QQmlComponent, QQmlContext -from PyQt5.QtCore import QUrl, QObject, pyqtSlot +from PyQt5.QtCore import QObject, pyqtSlot import os.path class UserAgreement(QObject, Extension): - def __init__(self, parent = None): + def __init__(self): super(UserAgreement, self).__init__() self._user_agreement_window = None self._user_agreement_context = None @@ -33,8 +32,8 @@ class UserAgreement(QObject, Extension): self._user_agreement_window.show() @pyqtSlot(bool) - def didAgree(self, userChoice): - if userChoice: + def didAgree(self, user_choice): + if user_choice: Logger.log("i", "User agreed to the user agreement") Preferences.getInstance().setValue("general/accepted_user_agreement", True) self._user_agreement_window.hide() diff --git a/plugins/UserAgreementPlugin/UserAgreement.qml b/plugins/UserAgreementPlugin/UserAgreement.qml index 52d35a4f44..c7f3f165e3 100644 --- a/plugins/UserAgreementPlugin/UserAgreement.qml +++ b/plugins/UserAgreementPlugin/UserAgreement.qml @@ -43,7 +43,7 @@ UM.Dialog anchors.right: parent.right text: catalog.i18nc("@action:button", "I understand and agree") onClicked: { - manager.didAgree(true) + baseDialog.accepted() } } @@ -52,13 +52,12 @@ UM.Dialog anchors.left: parent.left text: catalog.i18nc("@action:button", "I don't agree") onClicked: { - manager.didAgree(false) + baseDialog.rejected() } } - } - onClosing: { - manager.didAgree(false) - } + onAccepted: manager.didAgree(true) + onRejected: manager.didAgree(false) + onClosing: manager.didAgree(false) } diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 4316d5cafb..becf29c242 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -98,7 +98,7 @@ class Profile: config.add_section("metadata") config.set("metadata", "quality_type", "normal") #This feature doesn't exist in 2.1 yet, so we don't know the actual quality type. For now, always base it on normal. - config.set("metadata", "type", "quality_changes") + config.set("metadata", "type", "quality") if self._weight: config.set("metadata", "weight", str(self._weight)) if self._machine_variant_name: diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py index c496a66b29..c350dadefe 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py @@ -122,6 +122,26 @@ class VersionUpgrade30to31(VersionUpgrade): if len(all_quality_changes) <= 1 and not parser.has_option("metadata", "extruder"): self._createExtruderQualityChangesForSingleExtrusionMachine(filename, parser) + if parser["metadata"]["type"] == "definition_changes": + if parser["general"]["definition"] == "custom": + + # We are only interested in machine_nozzle_size + if parser.has_option("values", "machine_nozzle_size"): + machine_nozzle_size = parser["values"]["machine_nozzle_size"] + + machine_extruder_count = '1' # by default it is 1 and the value cannot be stored in the global stack + if parser.has_option("values", "machine_extruder_count"): + machine_extruder_count = parser["values"]["machine_extruder_count"] + + if machine_extruder_count == '1': + definition_name = parser["general"]["name"] + machine_extruders = self._getSingleExtrusionMachineExtruders(definition_name) + + # For single extruder machine we need only first extruder + if len(machine_extruders) !=0: + self._updateSingleExtruderDefinitionFile(machine_extruders, machine_nozzle_size) + parser.remove_option("values", "machine_nozzle_size") + # Update version numbers parser["general"]["version"] = "2" parser["metadata"]["setting_version"] = "4" @@ -179,7 +199,7 @@ class VersionUpgrade30to31(VersionUpgrade): if not os.path.isfile(file_path): continue - parser = configparser.ConfigParser() + parser = configparser.ConfigParser(interpolation = None) try: parser.read([file_path]) except: @@ -200,12 +220,137 @@ class VersionUpgrade30to31(VersionUpgrade): return quality_changes_containers + def _getSingleExtrusionMachineExtruders(self, definition_name): + + machine_instances_dir = Resources.getPath(CuraApplication.ResourceTypes.MachineStack) + + machine_instance_id = None + + # Find machine instances + for item in os.listdir(machine_instances_dir): + file_path = os.path.join(machine_instances_dir, item) + if not os.path.isfile(file_path): + continue + + parser = configparser.ConfigParser(interpolation=None) + try: + parser.read([file_path]) + except: + # skip, it is not a valid stack file + continue + + if not parser.has_option("metadata", "type"): + continue + if "machine" != parser["metadata"]["type"]: + continue + + if not parser.has_option("general", "id"): + continue + + id = parser["general"]["id"] + if id + "_settings" != definition_name: + continue + else: + machine_instance_id = id + break + + if machine_instance_id is not None: + + extruders_instances_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) + #"machine",[extruders] + extruder_instances = [] + + # Find all custom extruders for found machines + for item in os.listdir(extruders_instances_dir): + file_path = os.path.join(extruders_instances_dir, item) + if not os.path.isfile(file_path): + continue + + parser = configparser.ConfigParser(interpolation=None) + try: + parser.read([file_path]) + except: + # skip, it is not a valid stack file + continue + + if not parser.has_option("metadata", "type"): + continue + if "extruder_train" != parser["metadata"]["type"]: + continue + + if not parser.has_option("metadata", "machine"): + continue + if not parser.has_option("metadata", "position"): + continue + + if machine_instance_id != parser["metadata"]["machine"]: + continue + + extruder_instances.append(parser) + + return extruder_instances + + # Find extruder definition at index 0 and update its values + def _updateSingleExtruderDefinitionFile(self, extruder_instances_per_machine, machine_nozzle_size): + + defintion_instances_dir = Resources.getPath(CuraApplication.ResourceTypes.DefinitionChangesContainer) + + for item in os.listdir(defintion_instances_dir): + file_path = os.path.join(defintion_instances_dir, item) + if not os.path.isfile(file_path): + continue + + parser = configparser.ConfigParser(interpolation=None) + try: + parser.read([file_path]) + except: + # skip, it is not a valid stack file + continue + + if not parser.has_option("general", "name"): + continue + name = parser["general"]["name"] + custom_extruder_at_0_position = None + for extruder_instance in extruder_instances_per_machine: + + definition_position = extruder_instance["metadata"]["position"] + + if definition_position == "0": + custom_extruder_at_0_position = extruder_instance + break + + # If not null, then parsed file is for first extuder and then can be updated. I need to update only + # first, because this update for single extuder machine + if custom_extruder_at_0_position is not None: + + #Add new value + parser["values"]["machine_nozzle_size"] = machine_nozzle_size + + definition_output = io.StringIO() + parser.write(definition_output) + + with open(file_path, "w") as f: + f.write(definition_output.getvalue()) + + return True + + return False + + def _createExtruderQualityChangesForSingleExtrusionMachine(self, filename, global_quality_changes): suffix = "_" + quote_plus(global_quality_changes["general"]["name"].lower()) machine_name = os.path.os.path.basename(filename).replace(".inst.cfg", "").replace(suffix, "") + + # Why is this here?! + # When we load a .curaprofile file the deserialize will trigger a version upgrade, creating a dangling file. + # This file can be recognized by it's lack of a machine name in the target filename. + # So when we detect that situation here, we don't create the file and return. + if machine_name == "": + return + new_filename = machine_name + "_" + "fdmextruder" + suffix - extruder_quality_changes_parser = configparser.ConfigParser() + extruder_quality_changes_parser = configparser.ConfigParser(interpolation = None) extruder_quality_changes_parser.add_section("general") extruder_quality_changes_parser["general"]["version"] = str(2) extruder_quality_changes_parser["general"]["name"] = global_quality_changes["general"]["name"] @@ -224,4 +369,4 @@ class VersionUpgrade30to31(VersionUpgrade): quality_changes_dir = Resources.getPath(CuraApplication.ResourceTypes.QualityInstanceContainer) with open(os.path.join(quality_changes_dir, extruder_quality_changes_filename), "w") as f: - f.write(extruder_quality_changes_output.getvalue()) + f.write(extruder_quality_changes_output.getvalue()) \ No newline at end of file diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 7ab4520aea..125fe1e344 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -3,7 +3,10 @@ import copy import io -from typing import List, Optional +import json #To parse the product-to-id mapping file. +import os.path #To find the product-to-id mapping. +import sys +from typing import Any, Dict, List, Optional import xml.etree.ElementTree as ET from UM.Resources import Resources @@ -14,7 +17,6 @@ import UM.Dictionary from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry - ## Handles serializing and deserializing material containers from an XML file class XmlMaterialProfile(InstanceContainer): CurrentFdmMaterialVersion = "1.3" @@ -42,25 +44,18 @@ class XmlMaterialProfile(InstanceContainer): def getInheritedFiles(self): return self._inherited_files - ## Overridden from InstanceContainer - def setReadOnly(self, read_only): - super().setReadOnly(read_only) - - basefile = self.getMetaDataEntry("base_file", self._id) # if basefile is self.id, this is a basefile. - for container in ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile): - container._read_only = read_only # prevent loop instead of calling setReadOnly - ## Overridden from InstanceContainer # set the meta data for all machine / variant combinations def setMetaDataEntry(self, key, value): - if self.isReadOnly(): + registry = ContainerRegistry.getInstance() + if registry.isReadOnly(self.getId()): return super().setMetaDataEntry(key, value) - basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is self.id, this is a basefile. + basefile = self.getMetaDataEntry("base_file", self.getId()) #if basefile is self.getId, this is a basefile. # Update all containers that share basefile - for container in ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile): + for container in registry.findInstanceContainers(base_file = basefile): if container.getMetaDataEntry(key, None) != value: # Prevent recursion container.setMetaDataEntry(key, value) @@ -68,7 +63,8 @@ class XmlMaterialProfile(InstanceContainer): # without this function the setName would only set the name of the specific nozzle / material / machine combination container # The function is a bit tricky. It will not set the name of all containers if it has the correct name itself. def setName(self, new_name): - if self.isReadOnly(): + registry = ContainerRegistry.getInstance() + if registry.isReadOnly(self.getId()): return # Not only is this faster, it also prevents a major loop that causes a stack overflow. @@ -77,10 +73,10 @@ class XmlMaterialProfile(InstanceContainer): super().setName(new_name) - basefile = self.getMetaDataEntry("base_file", self._id) # if basefile is self.id, this is a basefile. + basefile = self.getMetaDataEntry("base_file", self.getId()) # if basefile is self.getId, this is a basefile. # Update the basefile as well, this is actually what we're trying to do # Update all containers that share GUID and basefile - containers = ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile) + containers = registry.findInstanceContainers(base_file = basefile) for container in containers: container.setName(new_name) @@ -88,33 +84,20 @@ class XmlMaterialProfile(InstanceContainer): def setDirty(self, dirty): super().setDirty(dirty) base_file = self.getMetaDataEntry("base_file", None) - if base_file is not None and base_file != self._id: - containers = ContainerRegistry.getInstance().findContainers(id=base_file) + registry = ContainerRegistry.getInstance() + if base_file is not None and base_file != self.getId() and not registry.isReadOnly(base_file): + containers = registry.findContainers(id = base_file) if containers: - base_container = containers[0] - if not base_container.isReadOnly(): - base_container.setDirty(dirty) - - ## Overridden from InstanceContainer - # def setProperty(self, key, property_name, property_value, container = None): - # if self.isReadOnly(): - # return - # - # super().setProperty(key, property_name, property_value) - # - # basefile = self.getMetaDataEntry("base_file", self._id) #if basefile is self.id, this is a basefile. - # for container in UM.Settings.ContainerRegistry.ContainerRegistry.getInstance().findInstanceContainers(base_file = basefile): - # if not container.isReadOnly(): - # container.setDirty(True) + containers[0].setDirty(dirty) ## Overridden from InstanceContainer # base file: common settings + supported machines # machine / variant combination: only changes for itself. - def serialize(self, ignored_metadata_keys: Optional[List] = None): + def serialize(self, ignored_metadata_keys: Optional[set] = None): registry = ContainerRegistry.getInstance() base_file = self.getMetaDataEntry("base_file", "") - if base_file and self.id != base_file: + if base_file and self.getId() != base_file: # Since we create an instance of XmlMaterialProfile for each machine and nozzle in the profile, # we should only serialize the "base" material definition, since that can then take care of # serializing the machine/nozzle specific profiles. @@ -132,8 +115,8 @@ class XmlMaterialProfile(InstanceContainer): metadata = copy.deepcopy(self.getMetaData()) # setting_version is derived from the "version" tag in the schema, so don't serialize it into a file if ignored_metadata_keys is None: - ignored_metadata_keys = [] - ignored_metadata_keys = ignored_metadata_keys + ["setting_version"] + ignored_metadata_keys = set() + ignored_metadata_keys |= {"setting_version"} # remove the keys that we want to ignore in the metadata for key in ignored_metadata_keys: if key in metadata: @@ -146,6 +129,9 @@ class XmlMaterialProfile(InstanceContainer): metadata.pop("type", "") metadata.pop("base_file", "") metadata.pop("approximate_diameter", "") + metadata.pop("id", "") + metadata.pop("container_type", "") + metadata.pop("name", "") ## Begin Name Block builder.start("name") @@ -163,7 +149,7 @@ class XmlMaterialProfile(InstanceContainer): builder.end("color") builder.start("label") - builder.data(self._name) + builder.data(self.getName()) builder.end("label") builder.end("name") @@ -195,16 +181,16 @@ class XmlMaterialProfile(InstanceContainer): ## Begin Settings Block builder.start("settings") - if self.getDefinition().id == "fdmprinter": + if self.getDefinition().getId() == "fdmprinter": for instance in self.findInstances(): self._addSettingElement(builder, instance) machine_container_map = {} machine_nozzle_map = {} - all_containers = registry.findInstanceContainers(GUID = self.getMetaDataEntry("GUID"), base_file = self._id) + all_containers = registry.findInstanceContainers(GUID = self.getMetaDataEntry("GUID"), base_file = self.getId()) for container in all_containers: - definition_id = container.getDefinition().id + definition_id = container.getDefinition().getId() if definition_id == "fdmprinter": continue @@ -222,17 +208,16 @@ class XmlMaterialProfile(InstanceContainer): machine_container_map[definition_id] = container # Map machine human-readable names to IDs - product_id_map = {} - for container in registry.findDefinitionContainers(type = "machine"): - product_id_map[container.getName()] = container.getId() + product_id_map = self.getProductIdMap() for definition_id, container in machine_container_map.items(): definition = container.getDefinition() - try: - product = UM.Dictionary.findKey(product_id_map, definition_id) - except ValueError: - # An unknown product id; export it anyway - product = definition_id + + product = definition_id + for product_name, product_id_list in product_id_map.items(): + if definition_id in product_id_list: + product = product_name + break builder.start("machine") builder.start("machine_identifier", { @@ -242,7 +227,7 @@ class XmlMaterialProfile(InstanceContainer): builder.end("machine_identifier") for instance in container.findInstances(): - if self.getDefinition().id == "fdmprinter" and self.getInstance(instance.definition.key) and self.getProperty(instance.definition.key, "value") == instance.value: + if self.getDefinition().getId() == "fdmprinter" and self.getInstance(instance.definition.key) and self.getProperty(instance.definition.key, "value") == instance.value: # If the settings match that of the base profile, just skip since we inherit the base profile. continue @@ -250,11 +235,12 @@ class XmlMaterialProfile(InstanceContainer): # Find all hotend sub-profiles corresponding to this material and machine and add them to this profile. for hotend_id, hotend in machine_nozzle_map[definition_id].items(): - variant_containers = registry.findInstanceContainers(id = hotend.getMetaDataEntry("variant")) + variant_containers = registry.findInstanceContainersMetadata(id = hotend.getMetaDataEntry("variant")) if not variant_containers: continue - builder.start("hotend", {"id": variant_containers[0].getName()}) + # The hotend identifier is not the containers name, but its "name". + builder.start("hotend", {"id": variant_containers[0]["name"]}) # Compatible is a special case, as it's added as a meta data entry (instead of an instance). compatible = hotend.getMetaDataEntry("compatible") @@ -397,15 +383,18 @@ class XmlMaterialProfile(InstanceContainer): first.append(element) def clearData(self): - self._metadata = {} - self._name = "" + self._metadata = { + "id": self.getId(), + "name": "" + } self._definition = None self._instances = {} self._read_only = False self._dirty = False self._path = "" - def getConfigurationTypeFromSerialized(self, serialized: str) -> Optional[str]: + @classmethod + def getConfigurationTypeFromSerialized(cls, serialized: str) -> Optional[str]: return "materials" @classmethod @@ -415,9 +404,9 @@ class XmlMaterialProfile(InstanceContainer): version = XmlMaterialProfile.Version # get setting version if "version" in data.attrib: - setting_version = XmlMaterialProfile.xmlVersionToSettingVersion(data.attrib["version"]) + setting_version = cls.xmlVersionToSettingVersion(data.attrib["version"]) else: - setting_version = XmlMaterialProfile.xmlVersionToSettingVersion("1.2") + setting_version = cls.xmlVersionToSettingVersion("1.2") return version * 1000000 + setting_version @@ -431,15 +420,18 @@ class XmlMaterialProfile(InstanceContainer): try: data = ET.fromstring(serialized) except: - Logger.logException("e", "An exception occured while parsing the material profile") + Logger.logException("e", "An exception occurred while parsing the material profile") return # Reset previous metadata + old_id = self.getId() self.clearData() # Ensure any previous data is gone. meta_data = {} meta_data["type"] = "material" - meta_data["base_file"] = self.id + meta_data["base_file"] = self.getId() meta_data["status"] = "unknown" # TODO: Add material verification + meta_data["id"] = old_id + meta_data["container_type"] = XmlMaterialProfile common_setting_values = {} @@ -454,8 +446,8 @@ class XmlMaterialProfile(InstanceContainer): else: meta_data["setting_version"] = self.xmlVersionToSettingVersion("1.2") #1.2 and lower didn't have that version number there yet. - metadata = data.iterfind("./um:metadata/*", self.__namespaces) - for entry in metadata: + meta_data["name"] = "Unknown Material" #In case the name tag is missing. + for entry in data.iterfind("./um:metadata/*", self.__namespaces): tag_name = _tag_without_namespace(entry) if tag_name == "name": @@ -465,9 +457,9 @@ class XmlMaterialProfile(InstanceContainer): label = entry.find("./um:label", self.__namespaces) if label is not None: - self._name = label.text + meta_data["name"] = label.text else: - self._name = self._profile_name(material.text, color.text) + meta_data["name"] = self._profile_name(material.text, color.text) meta_data["brand"] = brand.text meta_data["material"] = material.text meta_data["color_name"] = color.text @@ -499,8 +491,7 @@ class XmlMaterialProfile(InstanceContainer): meta_data["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm meta_data["properties"] = property_values - - self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0]) + meta_data["definition"] = "fdmprinter" common_compatibility = True settings = data.iterfind("./um:settings/um:setting", self.__namespaces) @@ -518,9 +509,7 @@ class XmlMaterialProfile(InstanceContainer): self._dirty = False # Map machine human-readable names to IDs - product_id_map = {} - for container in ContainerRegistry.getInstance().findDefinitionContainers(type = "machine"): - product_id_map[container.getName()] = container.getId() + product_id_map = self.getProductIdMap() machines = data.iterfind("./um:settings/um:machine", self.__namespaces) for machine in machines: @@ -542,112 +531,284 @@ class XmlMaterialProfile(InstanceContainer): identifiers = machine.iterfind("./um:machine_identifier", self.__namespaces) for identifier in identifiers: - machine_id = product_id_map.get(identifier.get("product"), None) - if machine_id is None: - # Lets try again with some naive heuristics. - machine_id = identifier.get("product").replace(" ", "").lower() + machine_id_list = product_id_map.get(identifier.get("product"), []) + if not machine_id_list: + machine_id_list = self.getPossibleDefinitionIDsFromName(identifier.get("product")) - definitions = ContainerRegistry.getInstance().findDefinitionContainers(id = machine_id) - if not definitions: - # Logger.log("w", "No definition found for machine ID %s", machine_id) - continue - - definition = definitions[0] - - machine_manufacturer = identifier.get("manufacturer", definition.getMetaDataEntry("manufacturer", "Unknown")) #If the XML material doesn't specify a manufacturer, use the one in the actual printer definition. - - if machine_compatibility: - new_material_id = self.id + "_" + machine_id - - # The child or derived material container may already exist. This can happen when a material in a - # project file and the a material in Cura have the same ID. - # In the case if a derived material already exists, override that material container because if - # the data in the parent material has been changed, the derived ones should be updated too. - found_materials = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id) - is_new_material = False - if found_materials: - new_material = found_materials[0] - else: - new_material = XmlMaterialProfile(new_material_id) - is_new_material = True - - # Update the private directly, as we want to prevent the lookup that is done when using setName - new_material._name = self.getName() - new_material.setMetaData(copy.deepcopy(self.getMetaData())) - new_material.setDefinition(definition) - # Don't use setMetadata, as that overrides it for all materials with same base file - new_material.getMetaData()["compatible"] = machine_compatibility - new_material.getMetaData()["machine_manufacturer"] = machine_manufacturer - - new_material.setCachedValues(cached_machine_setting_properties) - - new_material._dirty = False - - if is_new_material: - containers_to_add.append(new_material) - - hotends = machine.iterfind("./um:hotend", self.__namespaces) - for hotend in hotends: - hotend_id = hotend.get("id") - if hotend_id is None: + for machine_id in machine_id_list: + definitions = ContainerRegistry.getInstance().findDefinitionContainersMetadata(id = machine_id) + if not definitions: + Logger.log("w", "No definition found for machine ID %s", machine_id) continue - variant_containers = ContainerRegistry.getInstance().findInstanceContainers(id = hotend_id) - if not variant_containers: - # It is not really properly defined what "ID" is so also search for variants by name. - variant_containers = ContainerRegistry.getInstance().findInstanceContainers(definition = definition.id, name = hotend_id) + Logger.log("d", "Found definition for machine ID %s", machine_id) + definition = definitions[0] - if not variant_containers: - #Logger.log("d", "No variants found with ID or name %s for machine %s", hotend_id, definition.id) - continue + machine_manufacturer = identifier.get("manufacturer", definition.get("manufacturer", "Unknown")) #If the XML material doesn't specify a manufacturer, use the one in the actual printer definition. - hotend_compatibility = machine_compatibility - hotend_setting_values = {} - settings = hotend.iterfind("./um:setting", self.__namespaces) - for entry in settings: - key = entry.get("key") - if key in self.__material_settings_setting_map: - hotend_setting_values[self.__material_settings_setting_map[key]] = entry.text - elif key in self.__unmapped_settings: - if key == "hardware compatible": - hotend_compatibility = self._parseCompatibleValue(entry.text) + if machine_compatibility: + new_material_id = self.getId() + "_" + machine_id + + # The child or derived material container may already exist. This can happen when a material in a + # project file and the a material in Cura have the same ID. + # In the case if a derived material already exists, override that material container because if + # the data in the parent material has been changed, the derived ones should be updated too. + if ContainerRegistry.getInstance().isLoaded(new_material_id): + new_material = ContainerRegistry.getInstance().findContainers(id = new_material_id)[0] + is_new_material = False else: - Logger.log("d", "Unsupported material setting %s", key) + new_material = XmlMaterialProfile(new_material_id) + is_new_material = True - new_hotend_id = self.id + "_" + machine_id + "_" + hotend_id.replace(" ", "_") + new_material.setMetaData(copy.deepcopy(self.getMetaData())) + new_material.getMetaData()["id"] = new_material_id + new_material.getMetaData()["name"] = self.getName() + new_material.setDefinition(machine_id) + # Don't use setMetadata, as that overrides it for all materials with same base file + new_material.getMetaData()["compatible"] = machine_compatibility + new_material.getMetaData()["machine_manufacturer"] = machine_manufacturer + new_material.getMetaData()["definition"] = machine_id - # Same as machine compatibility, keep the derived material containers consistent with the parent - # material - found_materials = ContainerRegistry.getInstance().findInstanceContainers(id = new_hotend_id) - is_new_material = False - if found_materials: - new_hotend_material = found_materials[0] - else: - new_hotend_material = XmlMaterialProfile(new_hotend_id) - is_new_material = True + new_material.setCachedValues(cached_machine_setting_properties) - # Update the private directly, as we want to prevent the lookup that is done when using setName - new_hotend_material._name = self.getName() - new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData())) - new_hotend_material.setDefinition(definition) - new_hotend_material.addMetaDataEntry("variant", variant_containers[0].id) - # Don't use setMetadata, as that overrides it for all materials with same base file - new_hotend_material.getMetaData()["compatible"] = hotend_compatibility - new_hotend_material.getMetaData()["machine_manufacturer"] = machine_manufacturer + new_material._dirty = False - cached_hotend_setting_properties = cached_machine_setting_properties.copy() - cached_hotend_setting_properties.update(hotend_setting_values) + if is_new_material: + containers_to_add.append(new_material) - new_hotend_material.setCachedValues(cached_hotend_setting_properties) + hotends = machine.iterfind("./um:hotend", self.__namespaces) + for hotend in hotends: + hotend_id = hotend.get("id") + if hotend_id is None: + continue - new_hotend_material._dirty = False + variant_containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(id = hotend_id) + if not variant_containers: + # It is not really properly defined what "ID" is so also search for variants by name. + variant_containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(definition = machine_id, name = hotend_id) - if is_new_material: - containers_to_add.append(new_hotend_material) + if not variant_containers: + continue + + hotend_compatibility = machine_compatibility + hotend_setting_values = {} + settings = hotend.iterfind("./um:setting", self.__namespaces) + for entry in settings: + key = entry.get("key") + if key in self.__material_settings_setting_map: + hotend_setting_values[self.__material_settings_setting_map[key]] = entry.text + elif key in self.__unmapped_settings: + if key == "hardware compatible": + hotend_compatibility = self._parseCompatibleValue(entry.text) + else: + Logger.log("d", "Unsupported material setting %s", key) + + new_hotend_id = self.getId() + "_" + machine_id + "_" + hotend_id.replace(" ", "_") + + # Same as machine compatibility, keep the derived material containers consistent with the parent + # material + if ContainerRegistry.getInstance().isLoaded(new_hotend_id): + new_hotend_material = ContainerRegistry.getInstance().findContainers(id = new_hotend_id)[0] + is_new_material = False + else: + new_hotend_material = XmlMaterialProfile(new_hotend_id) + is_new_material = True + + new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData())) + new_hotend_material.getMetaData()["id"] = new_hotend_id + new_hotend_material.getMetaData()["name"] = self.getName() + new_hotend_material.getMetaData()["variant"] = variant_containers[0]["id"] + new_hotend_material.setDefinition(machine_id) + # Don't use setMetadata, as that overrides it for all materials with same base file + new_hotend_material.getMetaData()["compatible"] = hotend_compatibility + new_hotend_material.getMetaData()["machine_manufacturer"] = machine_manufacturer + new_hotend_material.getMetaData()["definition"] = machine_id + + cached_hotend_setting_properties = cached_machine_setting_properties.copy() + cached_hotend_setting_properties.update(hotend_setting_values) + + new_hotend_material.setCachedValues(cached_hotend_setting_properties) + + new_hotend_material._dirty = False + + if is_new_material: + containers_to_add.append(new_hotend_material) + + # there is only one ID for a machine. Once we have reached here, it means we have already found + # a workable ID for that machine, so there is no need to continue + break for container_to_add in containers_to_add: ContainerRegistry.getInstance().addContainer(container_to_add) + @classmethod + def deserializeMetadata(cls, serialized: str, container_id: str) -> List[Dict[str, Any]]: + result_metadata = [] #All the metadata that we found except the base (because the base is returned). + + #Update the serialized data to the latest version. + serialized = cls._updateSerialized(serialized) + + base_metadata = { + "type": "material", + "status": "unknown", #TODO: Add material verification. + "container_type": XmlMaterialProfile, + "id": container_id, + "base_file": container_id + } + + try: + data = ET.fromstring(serialized) + except: + Logger.logException("e", "An exception occurred while parsing the material profile") + return [] + + #TODO: Implement the tag. It's unused at the moment though. + + if "version" in data.attrib: + base_metadata["setting_version"] = cls.xmlVersionToSettingVersion(data.attrib["version"]) + else: + base_metadata["setting_version"] = cls.xmlVersionToSettingVersion("1.2") #1.2 and lower didn't have that version number there yet. + + for entry in data.iterfind("./um:metadata/*", cls.__namespaces): + tag_name = _tag_without_namespace(entry) + + if tag_name == "name": + brand = entry.find("./um:brand", cls.__namespaces) + material = entry.find("./um:material", cls.__namespaces) + color = entry.find("./um:color", cls.__namespaces) + label = entry.find("./um:label", cls.__namespaces) + + if label is not None: + base_metadata["name"] = label.text + else: + base_metadata["name"] = cls._profile_name(material.text, color.text) + base_metadata["brand"] = brand.text + base_metadata["material"] = material.text + base_metadata["color_name"] = color.text + continue + + #Setting_version is derived from the "version" tag in the schema earlier, so don't set it here. + if tag_name == "setting_version": + continue + + base_metadata[tag_name] = entry.text + + if "description" not in base_metadata: + base_metadata["description"] = "" + if "adhesion_info" not in base_metadata: + base_metadata["adhesion_info"] = "" + + property_values = {} + properties = data.iterfind("./um:properties/*", cls.__namespaces) + for entry in properties: + tag_name = _tag_without_namespace(entry) + property_values[tag_name] = entry.text + + base_metadata["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm + base_metadata["properties"] = property_values + base_metadata["definition"] = "fdmprinter" + + compatible_entries = data.iterfind("./um:settings/um:setting[@key='hardware compatible']", cls.__namespaces) + try: + common_compatibility = cls._parseCompatibleValue(next(compatible_entries).text) + except StopIteration: #No 'hardware compatible' setting. + common_compatibility = True + base_metadata["compatible"] = common_compatibility + result_metadata.append(base_metadata) + + # Map machine human-readable names to IDs + product_id_map = cls.getProductIdMap() + + for machine in data.iterfind("./um:settings/um:machine", cls.__namespaces): + machine_compatibility = common_compatibility + for entry in machine.iterfind("./um:setting", cls.__namespaces): + key = entry.get("key") + if key == "hardware compatible": + machine_compatibility = cls._parseCompatibleValue(entry.text) + + for identifier in machine.iterfind("./um:machine_identifier", cls.__namespaces): + machine_id_list = product_id_map.get(identifier.get("product"), []) + if not machine_id_list: + machine_id_list = cls.getPossibleDefinitionIDsFromName(identifier.get("product")) + + for machine_id in machine_id_list: + definition_metadata = ContainerRegistry.getInstance().findDefinitionContainersMetadata(id = machine_id) + if not definition_metadata: + Logger.log("w", "No definition found for machine ID %s", machine_id) + continue + + definition_metadata = definition_metadata[0] + + machine_manufacturer = identifier.get("manufacturer", definition_metadata.get("manufacturer", "Unknown")) #If the XML material doesn't specify a manufacturer, use the one in the actual printer definition. + + if machine_compatibility: + new_material_id = container_id + "_" + machine_id + + # The child or derived material container may already exist. This can happen when a material in a + # project file and the a material in Cura have the same ID. + # In the case if a derived material already exists, override that material container because if + # the data in the parent material has been changed, the derived ones should be updated too. + found_materials = ContainerRegistry.getInstance().findInstanceContainersMetadata(id = new_material_id) + if found_materials: + new_material_metadata = found_materials[0] + else: + new_material_metadata = {} + + new_material_metadata.update(base_metadata) + new_material_metadata["id"] = new_material_id + new_material_metadata["compatible"] = machine_compatibility + new_material_metadata["machine_manufacturer"] = machine_manufacturer + new_material_metadata["definition"] = machine_id + + if len(found_materials) == 0: #This is a new material. + result_metadata.append(new_material_metadata) + + for hotend in machine.iterfind("./um:hotend", cls.__namespaces): + hotend_id = hotend.get("id") + if hotend_id is None: + continue + + variant_containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(id = hotend_id) + if not variant_containers: + # It is not really properly defined what "ID" is so also search for variants by name. + variant_containers = ContainerRegistry.getInstance().findInstanceContainersMetadata(definition = machine_id, name = hotend_id) + + hotend_compatibility = machine_compatibility + for entry in hotend.iterfind("./um:setting", cls.__namespaces): + key = entry.get("key") + if key == "hardware compatible": + hotend_compatibility = cls._parseCompatibleValue(entry.text) + + new_hotend_id = container_id + "_" + machine_id + "_" + hotend_id.replace(" ", "_") + + # Same as machine compatibility, keep the derived material containers consistent with the parent + # material + found_materials = ContainerRegistry.getInstance().findInstanceContainersMetadata(id = new_hotend_id) + if found_materials: + new_hotend_material_metadata = found_materials[0] + else: + new_hotend_material_metadata = {} + + new_hotend_material_metadata.update(base_metadata) + if variant_containers: + new_hotend_material_metadata["variant"] = variant_containers[0]["id"] + else: + new_hotend_material_metadata["variant"] = hotend_id + _with_missing_variants.append(new_hotend_material_metadata) + new_hotend_material_metadata["compatible"] = hotend_compatibility + new_hotend_material_metadata["machine_manufacturer"] = machine_manufacturer + new_hotend_material_metadata["id"] = new_hotend_id + new_hotend_material_metadata["definition"] = machine_id + + if len(found_materials) == 0: + result_metadata.append(new_hotend_material_metadata) + + # there is only one ID for a machine. Once we have reached here, it means we have already found + # a workable ID for that machine, so there is no need to continue + break + + return result_metadata + def _addSettingElement(self, builder, instance): try: key = UM.Dictionary.findKey(self.__material_settings_setting_map, instance.definition.key) @@ -658,16 +819,58 @@ class XmlMaterialProfile(InstanceContainer): builder.data(str(instance.value)) builder.end("setting") - def _profile_name(self, material_name, color_name): + @classmethod + def _profile_name(cls, material_name, color_name): if color_name != "Generic": return "%s %s" % (color_name, material_name) else: return material_name + @classmethod + def getPossibleDefinitionIDsFromName(cls, name): + name_parts = name.lower().split(" ") + merged_name_parts = [] + for part in name_parts: + if len(part) == 0: + continue + if len(merged_name_parts) == 0: + merged_name_parts.append(part) + continue + if part.isdigit(): + # for names with digit(s) such as Ultimaker 3 Extended, we generate an ID like + # "ultimaker3_extended", ignoring the space between "Ultimaker" and "3". + merged_name_parts[-1] = merged_name_parts[-1] + part + else: + merged_name_parts.append(part) + + id_list = [name.lower().replace(" ", ""), # simply removing all spaces + name.lower().replace(" ", "_"), # simply replacing all spaces with underscores + "_".join(merged_name_parts), + ] + + return id_list + + ## Gets a mapping from product names in the XML files to their definition + # IDs. + # + # This loads the mapping from a file. + @classmethod + def getProductIdMap(cls) -> Dict[str, List[str]]: + product_to_id_file = os.path.join(os.path.dirname(sys.modules[cls.__module__].__file__), "product_to_id.json") + with open(product_to_id_file) as f: + product_to_id_map = json.load(f) + product_to_id_map = {key: [value] for key, value in product_to_id_map.items()} + return product_to_id_map + ## Parse the value of the "material compatible" property. - def _parseCompatibleValue(self, value: str): + @classmethod + def _parseCompatibleValue(cls, value: str): return value in {"yes", "unknown"} + ## Small string representation for debugging. + def __str__(self): + return "".format(my_id = self.getId(), name = self.getName(), base_file = self.getMetaDataEntry("base_file")) + # Map XML file setting names to internal names __material_settings_setting_map = { "print temperature": "default_material_print_temperature", @@ -716,4 +919,22 @@ def _indent(elem, level = 0): # We are only interested in the actual tag name, so discard everything # before the last } def _tag_without_namespace(element): - return element.tag[element.tag.rfind("}") + 1:] \ No newline at end of file + return element.tag[element.tag.rfind("}") + 1:] + +#While loading XML profiles, some of these profiles don't know what variant +#they belong to. We'd like to search by the machine ID and the variant's +#name, but we don't know the variant's ID. Not all variants have been loaded +#yet so we can't run a filter on the name and machine. The ID is unknown +#so we can't lazily load the variant either. So we have to wait until all +#the rest is loaded properly and then assign the correct variant to the +#material files that were missing it. +_with_missing_variants = [] +def _fillMissingVariants(): + registry = ContainerRegistry.getInstance() + for variant_metadata in _with_missing_variants: + variants = registry.findContainersMetadata(definition = variant_metadata["definition"], name = variant_metadata["variant"]) + if not variants: + Logger.log("w", "Could not find variant for variant-specific material {material_id}.".format(material_id = variant_metadata["id"])) + continue + variant_metadata["variant"] = variants[0]["id"] +ContainerRegistry.allMetadataLoaded.connect(_fillMissingVariants) diff --git a/plugins/XmlMaterialProfile/product_to_id.json b/plugins/XmlMaterialProfile/product_to_id.json new file mode 100644 index 0000000000..d6b8f3bade --- /dev/null +++ b/plugins/XmlMaterialProfile/product_to_id.json @@ -0,0 +1,12 @@ +{ + "Ultimaker 2": "ultimaker2", + "Ultimaker 2 Extended": "ultimaker2_extended", + "Ultimaker 2 Extended+": "ultimaker2_extended_plus", + "Ultimaker 2 Go": "ultimaker2_go", + "Ultimaker 2+": "ultimaker2_plus", + "Ultimaker 3": "ultimaker3", + "Ultimaker 3 Extended": "ultimaker3_extended", + "Ultimaker Original": "ultimaker_original", + "Ultimaker Original+": "ultimaker_original_plus", + "IMADE3D JellyBOX": "imade3d_jellybox" +} \ No newline at end of file diff --git a/resources/definitions/101Hero.def.json b/resources/definitions/101Hero.def.json index aaea743b47..620fcfb519 100644 --- a/resources/definitions/101Hero.def.json +++ b/resources/definitions/101Hero.def.json @@ -1,5 +1,4 @@ { - "id": "101Hero", "version": 2, "name": "101Hero", "inherits": "fdmprinter", diff --git a/resources/definitions/3dator.def.json b/resources/definitions/3dator.def.json index 513ee8f0e1..2ec7119656 100644 --- a/resources/definitions/3dator.def.json +++ b/resources/definitions/3dator.def.json @@ -1,5 +1,4 @@ { - "id": "3Dator", "version": 2, "name": "3Dator", "inherits": "fdmprinter", diff --git a/resources/definitions/abax_pri3.def.json b/resources/definitions/abax_pri3.def.json index fa826e6f94..2fa648096f 100644 --- a/resources/definitions/abax_pri3.def.json +++ b/resources/definitions/abax_pri3.def.json @@ -1,5 +1,4 @@ { - "id": "PRi3", "name": "ABAX PRi3", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/abax_pri5.def.json b/resources/definitions/abax_pri5.def.json index b5588e5c96..cbebb576b0 100644 --- a/resources/definitions/abax_pri5.def.json +++ b/resources/definitions/abax_pri5.def.json @@ -1,5 +1,4 @@ { - "id": "PRi5", "name": "ABAX PRi5", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/abax_titan.def.json b/resources/definitions/abax_titan.def.json index 53b768c93f..5f7a99d64d 100644 --- a/resources/definitions/abax_titan.def.json +++ b/resources/definitions/abax_titan.def.json @@ -1,5 +1,4 @@ { - "id": "Titan", "name": "ABAX Titan", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/alya3dp.def.json b/resources/definitions/alya3dp.def.json index 5fa6630f51..2fda102249 100644 --- a/resources/definitions/alya3dp.def.json +++ b/resources/definitions/alya3dp.def.json @@ -1,5 +1,4 @@ { - "id": "alya3dp", "name": "ALYA", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/bfb.def.json b/resources/definitions/bfb.def.json index fddec169c5..7a76e231a8 100644 --- a/resources/definitions/bfb.def.json +++ b/resources/definitions/bfb.def.json @@ -1,5 +1,4 @@ { - "id": "bfb", "name": "BFB", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/bq_hephestos.def.json b/resources/definitions/bq_hephestos.def.json index 91eeecb500..0fb40a4741 100644 --- a/resources/definitions/bq_hephestos.def.json +++ b/resources/definitions/bq_hephestos.def.json @@ -1,5 +1,4 @@ { - "id": "bq_hephestos", "name": "BQ Prusa i3 Hephestos", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/bq_hephestos_2.def.json b/resources/definitions/bq_hephestos_2.def.json index 272e547af0..a3493334b6 100644 --- a/resources/definitions/bq_hephestos_2.def.json +++ b/resources/definitions/bq_hephestos_2.def.json @@ -1,5 +1,4 @@ { - "id": "bq_hephestos_2", "version": 2, "name": "BQ Hephestos 2", "inherits": "fdmprinter", diff --git a/resources/definitions/bq_hephestos_xl.def.json b/resources/definitions/bq_hephestos_xl.def.json index a5a183b1e9..75b756c71e 100644 --- a/resources/definitions/bq_hephestos_xl.def.json +++ b/resources/definitions/bq_hephestos_xl.def.json @@ -1,5 +1,4 @@ { - "id": "bq_hephestos_xl", "version": 2, "name": "BQ Prusa i3 Hephestos XL", "inherits": "fdmprinter", diff --git a/resources/definitions/bq_witbox.def.json b/resources/definitions/bq_witbox.def.json index ca14151e7a..ef4e12b704 100644 --- a/resources/definitions/bq_witbox.def.json +++ b/resources/definitions/bq_witbox.def.json @@ -1,5 +1,4 @@ { - "id": "bq_witbox", "version": 2, "name": "BQ Witbox", "inherits": "fdmprinter", diff --git a/resources/definitions/bq_witbox_2.def.json b/resources/definitions/bq_witbox_2.def.json index f634d9c9c8..ab3786ad1f 100644 --- a/resources/definitions/bq_witbox_2.def.json +++ b/resources/definitions/bq_witbox_2.def.json @@ -1,5 +1,4 @@ { - "id": "bq_witbox_2", "version": 2, "name": "BQ Witbox 2", "inherits": "fdmprinter", diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 5d6a0fca16..44f3153015 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -1,5 +1,4 @@ { - "id": "cartesio", "name": "Cartesio", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/creality_cr10.def.json b/resources/definitions/creality_cr10.def.json index f913f27b6b..7a58adcd4d 100644 --- a/resources/definitions/creality_cr10.def.json +++ b/resources/definitions/creality_cr10.def.json @@ -1,5 +1,4 @@ { - "id": "creality_cr10", "name": "Creality CR-10", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/creality_cr10s4.def.json b/resources/definitions/creality_cr10s4.def.json index 13c2e53391..cebe255705 100644 --- a/resources/definitions/creality_cr10s4.def.json +++ b/resources/definitions/creality_cr10s4.def.json @@ -1,5 +1,4 @@ { - "id": "creality_cr10s4", "name": "Creality CR-10 S4", "version": 2, "inherits": "creality_cr10", diff --git a/resources/definitions/creality_cr10s5.def.json b/resources/definitions/creality_cr10s5.def.json index 15cf0b93d9..e6aaa88b04 100644 --- a/resources/definitions/creality_cr10s5.def.json +++ b/resources/definitions/creality_cr10s5.def.json @@ -1,5 +1,4 @@ { - "id": "creality_cr10s5", "name": "Creality CR-10 S5", "version": 2, "inherits": "creality_cr10", diff --git a/resources/definitions/custom.def.json b/resources/definitions/custom.def.json index 8f15f00a0f..e973a75bbf 100644 --- a/resources/definitions/custom.def.json +++ b/resources/definitions/custom.def.json @@ -1,5 +1,4 @@ { - "id": "custom", "version": 2, "name": "Custom FDM printer", "inherits": "fdmprinter", diff --git a/resources/definitions/dagoma_discoeasy200.def.json b/resources/definitions/dagoma_discoeasy200.def.json index 3b62ff042f..9bcc2402f2 100644 --- a/resources/definitions/dagoma_discoeasy200.def.json +++ b/resources/definitions/dagoma_discoeasy200.def.json @@ -1,5 +1,4 @@ { - "id": "Dagoma_discoeasy200", "name": "Dagoma DiscoEasy200", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/delta_go.def.json b/resources/definitions/delta_go.def.json index 36e0787039..a6d75b2983 100644 --- a/resources/definitions/delta_go.def.json +++ b/resources/definitions/delta_go.def.json @@ -1,5 +1,4 @@ { -"id": "Delta_Go", "name": "Delta Go", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/deltabot.def.json b/resources/definitions/deltabot.def.json index cee5ab1be1..e3b676d0ec 100644 --- a/resources/definitions/deltabot.def.json +++ b/resources/definitions/deltabot.def.json @@ -1,5 +1,4 @@ { - "id": "deltabot", "name": "DeltaBot", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/easyarts_ares.def.json b/resources/definitions/easyarts_ares.def.json index 8d3e5338b6..982496de4c 100644 --- a/resources/definitions/easyarts_ares.def.json +++ b/resources/definitions/easyarts_ares.def.json @@ -1,5 +1,4 @@ { - "id": "easyarts_ares", "name": "EasyArts Ares", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/fabtotum.def.json b/resources/definitions/fabtotum.def.json index eb33280401..87ce11a35c 100644 --- a/resources/definitions/fabtotum.def.json +++ b/resources/definitions/fabtotum.def.json @@ -1,5 +1,4 @@ { - "id": "fabtotum", "version": 2, "name": "FABtotum Personal Fabricator", "inherits": "fdmprinter", diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index ada35fafe0..2b314cd6a5 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -1,5 +1,4 @@ { - "id": "fdmextruder", "name": "Extruder", "version": 2, "metadata": diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 6861189f85..24f7efe373 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1,5 +1,4 @@ { - "id": "fdmprinter", "name": "FDM Printer Base Description", "version": 2, "metadata": @@ -318,6 +317,17 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, + "machine_firmware_retract": + { + "label": "Firmware Retraction", + "description": "Whether to use firmware retract commands (G10/G11) instead of using the E property in G1 commands to retract the material.", + "type": "bool", + "default_value": false, + "value": "machine_gcode_flavor == 'RepRap (Volumetric)' or machine_gcode_flavor == 'UltiGCode' or machine_gcode_flavor == 'BFB'", + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false + }, "machine_disallowed_areas": { "label": "Disallowed areas", @@ -3368,7 +3378,6 @@ "unit": "s", "type": "float", "default_value": 10, - "minimum_value": "cool_min_layer_time", "maximum_value_warning": "600", "settable_per_mesh": false, "settable_per_extruder": true @@ -5983,6 +5992,49 @@ "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false + }, + "adaptive_layer_height_enabled": + { + "label": "Use adaptive layers", + "description": "Adaptive layers computes the layer heights depending on the shape of the model.", + "type": "bool", + "default_value": false, + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false + }, + "adaptive_layer_height_variation": + { + "label": "Adaptive layers maximum variation", + "description": "The maximum allowed height different from the base layer height in mm.", + "type": "float", + "enabled": "adaptive_layer_height_enabled", + "default_value": 0.1, + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false + }, + "adaptive_layer_height_variation_step": + { + "label": "Adaptive layers variation step size", + "description": "The difference in height of the next layer height compared to the previous one.", + "type": "float", + "enabled": "adaptive_layer_height_enabled", + "default_value": 0.01, + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false + }, + "adaptive_layer_height_threshold": + { + "label": "Adaptive layers threshold", + "description": "Threshold whether to use a smaller layer or not. This number is compared to the tan of the steepest slope in a layer.", + "type": "float", + "enabled": "adaptive_layer_height_enabled", + "default_value": 200.0, + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false } } }, diff --git a/resources/definitions/grr_neo.def.json b/resources/definitions/grr_neo.def.json index 42c2e75319..847f638fbd 100644 --- a/resources/definitions/grr_neo.def.json +++ b/resources/definitions/grr_neo.def.json @@ -1,5 +1,4 @@ { - "id": "grr_neo", "version": 2, "name": "German RepRap Neo", "inherits": "fdmprinter", diff --git a/resources/definitions/helloBEEprusa.def.json b/resources/definitions/helloBEEprusa.def.json index 660e182187..2699a6c7d7 100644 --- a/resources/definitions/helloBEEprusa.def.json +++ b/resources/definitions/helloBEEprusa.def.json @@ -1,5 +1,4 @@ { - "id": "BEEVERYCREATIVE-helloBEEprusa", "version": 2, "name": "Hello BEE Prusa", "inherits": "fdmprinter", diff --git a/resources/definitions/imade3d_jellybox.def.json b/resources/definitions/imade3d_jellybox.def.json index 0c0f29c070..11df730408 100644 --- a/resources/definitions/imade3d_jellybox.def.json +++ b/resources/definitions/imade3d_jellybox.def.json @@ -1,5 +1,4 @@ { - "id": "imade3d_jellybox", "version": 2, "name": "IMADE3D JellyBOX", "inherits": "fdmprinter", diff --git a/resources/definitions/innovo_inventor.def.json b/resources/definitions/innovo_inventor.def.json index 5fc6c83ca2..5d587f9b30 100644 --- a/resources/definitions/innovo_inventor.def.json +++ b/resources/definitions/innovo_inventor.def.json @@ -1,5 +1,4 @@ { - "id": "innovo-inventor", "version": 2, "name": "Innovo INVENTOR", "inherits": "fdmprinter", @@ -47,7 +46,7 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G28 ; Home extruder\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM190 S{material_bed_temperature}\nM104 T0 S{material_print_temperature}\nM109 T0 S{material_print_temperature}\nM104 T1 S{material_print_temperature}\nM109 T1 S{material_print_temperature}\nG32 S3 ; auto level\nG92 E0 ; Reset extruder position" + "default_value": "G28 ; Home extruder\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM190 S{material_bed_temperature}\nM104 T0 S{material_print_temperature}\nM109 T0 S{material_print_temperature}\nM104 T1 S{material_print_temperature}\nM109 T1 S{material_print_temperature}\n;G32 S3 ; auto level\nG92 E0 ; Reset extruder position" }, "machine_end_gcode": { "default_value": "M104 S0 ; turn off extruders\nM140 S0 ; heated bed heater off\nG91 ; relative positioning\nG1 E-2 F5000; retract 2mm\nG28 Z; move bed down\nG90 ; absolute positioning\nM84 ; disable motors" diff --git a/resources/definitions/julia.def.json b/resources/definitions/julia.def.json index fe10473596..7fdee30272 100644 --- a/resources/definitions/julia.def.json +++ b/resources/definitions/julia.def.json @@ -1,5 +1,4 @@ { - "id": "julia", "name": "Julia", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/kemiq_q2_beta.def.json b/resources/definitions/kemiq_q2_beta.def.json index d5bb8a895e..7946fbfad2 100644 --- a/resources/definitions/kemiq_q2_beta.def.json +++ b/resources/definitions/kemiq_q2_beta.def.json @@ -1,5 +1,4 @@ { - "id": "kemiq_q2_beta", "version": 2, "name": "Kemiq Q2 Beta", "inherits": "fdmprinter", diff --git a/resources/definitions/kemiq_q2_gama.def.json b/resources/definitions/kemiq_q2_gama.def.json index 1cb1b45c21..64051606f2 100644 --- a/resources/definitions/kemiq_q2_gama.def.json +++ b/resources/definitions/kemiq_q2_gama.def.json @@ -1,5 +1,4 @@ { - "id": "kemiq_q2_gama", "version": 2, "name": "Kemiq Q2 Gama", "inherits": "fdmprinter", diff --git a/resources/definitions/kossel_mini.def.json b/resources/definitions/kossel_mini.def.json index d915c148a3..df9c29b548 100644 --- a/resources/definitions/kossel_mini.def.json +++ b/resources/definitions/kossel_mini.def.json @@ -1,5 +1,4 @@ { - "id": "kossel_mini", "version": 2, "name": "Kossel Mini", "inherits": "fdmprinter", diff --git a/resources/definitions/kossel_pro.def.json b/resources/definitions/kossel_pro.def.json index 58f1c7f94e..fa0cb571fa 100644 --- a/resources/definitions/kossel_pro.def.json +++ b/resources/definitions/kossel_pro.def.json @@ -1,5 +1,4 @@ { - "id": "kossel_pro", "version": 2, "name": "Kossel Pro", "inherits": "fdmprinter", diff --git a/resources/definitions/kupido.def.json b/resources/definitions/kupido.def.json index 8dec63f6ec..b16ba62ccc 100644 --- a/resources/definitions/kupido.def.json +++ b/resources/definitions/kupido.def.json @@ -1,5 +1,4 @@ { - "id": "kupido", "name": "Kupido", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/m180.def.json b/resources/definitions/m180.def.json index 1e8ac1767b..71aa729b7e 100644 --- a/resources/definitions/m180.def.json +++ b/resources/definitions/m180.def.json @@ -1,5 +1,4 @@ { - "id": "m180", "version": 2, "name": "Malyan M180", "inherits": "fdmprinter", diff --git a/resources/definitions/makeR_pegasus.def.json b/resources/definitions/makeR_pegasus.def.json index b164b2983f..fb5a7dce75 100644 --- a/resources/definitions/makeR_pegasus.def.json +++ b/resources/definitions/makeR_pegasus.def.json @@ -1,5 +1,4 @@ { - "id": "makeR_pegasus", "version": 2, "name": "makeR Pegasus", "inherits": "fdmprinter", diff --git a/resources/definitions/makeR_prusa_tairona_i3.def.json b/resources/definitions/makeR_prusa_tairona_i3.def.json index caccb2ebe6..a82fffd254 100644 --- a/resources/definitions/makeR_prusa_tairona_i3.def.json +++ b/resources/definitions/makeR_prusa_tairona_i3.def.json @@ -1,5 +1,4 @@ { - "id": "makeR_prusa_tairona_i3", "version": 2, "name": "makeR Prusa Tairona i3", "inherits": "fdmprinter", diff --git a/resources/definitions/makeit_pro_l.def.json b/resources/definitions/makeit_pro_l.def.json index 36f7354b64..2a64a6729c 100644 --- a/resources/definitions/makeit_pro_l.def.json +++ b/resources/definitions/makeit_pro_l.def.json @@ -1,5 +1,4 @@ { - "id": "makeit_pro_l", "version": 2, "name": "MAKEiT Pro-L", "inherits": "fdmprinter", diff --git a/resources/definitions/makeit_pro_m.def.json b/resources/definitions/makeit_pro_m.def.json index f45e0b6635..43a5440165 100644 --- a/resources/definitions/makeit_pro_m.def.json +++ b/resources/definitions/makeit_pro_m.def.json @@ -1,5 +1,4 @@ { - "id": "makeit_pro_m", "version": 2, "name": "MAKEiT Pro-M", "inherits": "fdmprinter", diff --git a/resources/definitions/maker_starter.def.json b/resources/definitions/maker_starter.def.json index 8358ba0064..e7e6cb5dcd 100644 --- a/resources/definitions/maker_starter.def.json +++ b/resources/definitions/maker_starter.def.json @@ -1,5 +1,4 @@ { - "id": "maker_starter", "version": 2, "name": "3DMaker Starter", "inherits": "fdmprinter", diff --git a/resources/definitions/makerbotreplicator.def.json b/resources/definitions/makerbotreplicator.def.json index 7844976912..3d690990ce 100644 --- a/resources/definitions/makerbotreplicator.def.json +++ b/resources/definitions/makerbotreplicator.def.json @@ -1,5 +1,4 @@ { - "id": "makerbotreplicator", "name": "MakerBotReplicator", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/mankati_fullscale_xt_plus.def.json b/resources/definitions/mankati_fullscale_xt_plus.def.json index 6c3115b1dc..15ba889efc 100644 --- a/resources/definitions/mankati_fullscale_xt_plus.def.json +++ b/resources/definitions/mankati_fullscale_xt_plus.def.json @@ -1,5 +1,4 @@ { - "id": "mankati_fullscale_xt_plus", "version": 2, "name": "Mankati Fullscale XT Plus", "inherits": "fdmprinter", diff --git a/resources/definitions/mendel90.def.json b/resources/definitions/mendel90.def.json index 60f3307758..95f47d7aac 100644 --- a/resources/definitions/mendel90.def.json +++ b/resources/definitions/mendel90.def.json @@ -1,5 +1,4 @@ { - "id": "mendel90", "name": "Mendel90", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/ord.def.json b/resources/definitions/ord.def.json index d9909c4f1f..3238583ceb 100644 --- a/resources/definitions/ord.def.json +++ b/resources/definitions/ord.def.json @@ -1,5 +1,4 @@ { - "id": "ord", "name": "RoVa3D", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 6b0e0ae547..78aca31dae 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -1,5 +1,4 @@ { - "id": "peopoly_moai", "version": 2, "name": "Peopoly Moai", "inherits": "fdmprinter", diff --git a/resources/definitions/printrbot_play.def.json b/resources/definitions/printrbot_play.def.json index 452b5e131f..36ef93e60c 100644 --- a/resources/definitions/printrbot_play.def.json +++ b/resources/definitions/printrbot_play.def.json @@ -1,5 +1,4 @@ { - "id": "printrbot_play", "version": 2, "name": "Printrbot Play", "inherits": "fdmprinter", diff --git a/resources/definitions/printrbot_play_heated.def.json b/resources/definitions/printrbot_play_heated.def.json index 02157a0913..9ca365a5c0 100644 --- a/resources/definitions/printrbot_play_heated.def.json +++ b/resources/definitions/printrbot_play_heated.def.json @@ -1,5 +1,4 @@ { - "id": "printrbot_play_heated", "version": 2, "name": "Printrbot Play (Heated Bed)", "inherits": "printrbot_play", diff --git a/resources/definitions/printrbot_simple.def.json b/resources/definitions/printrbot_simple.def.json index eba47c88ae..7c86617ce5 100644 --- a/resources/definitions/printrbot_simple.def.json +++ b/resources/definitions/printrbot_simple.def.json @@ -1,5 +1,4 @@ { - "id": "printrbot_simple", "version": 2, "name": "Printrbot Simple", "inherits": "fdmprinter", diff --git a/resources/definitions/printrbot_simple_extended.def.json b/resources/definitions/printrbot_simple_extended.def.json index b08e0c7d5d..95395efb23 100644 --- a/resources/definitions/printrbot_simple_extended.def.json +++ b/resources/definitions/printrbot_simple_extended.def.json @@ -1,5 +1,4 @@ { - "id": "printrbot_simple_extended", "version": 2, "name": "Printrbot Simple Metal Extended", "inherits": "fdmprinter", diff --git a/resources/definitions/prusa_i3.def.json b/resources/definitions/prusa_i3.def.json index 4f0f5b13d7..4599763397 100644 --- a/resources/definitions/prusa_i3.def.json +++ b/resources/definitions/prusa_i3.def.json @@ -1,5 +1,4 @@ { - "id": "prusa_i3", "version": 2, "name": "Prusa i3", "inherits": "fdmprinter", diff --git a/resources/definitions/prusa_i3_mk2.def.json b/resources/definitions/prusa_i3_mk2.def.json index c8c2cc1363..e58eb4d903 100644 --- a/resources/definitions/prusa_i3_mk2.def.json +++ b/resources/definitions/prusa_i3_mk2.def.json @@ -1,5 +1,4 @@ { - "id": "prusa_i3_mk2", "version": 2, "name": "Prusa i3 Mk2", "inherits": "fdmprinter", diff --git a/resources/definitions/prusa_i3_xl.def.json b/resources/definitions/prusa_i3_xl.def.json index e49838c95f..b27c460554 100644 --- a/resources/definitions/prusa_i3_xl.def.json +++ b/resources/definitions/prusa_i3_xl.def.json @@ -1,5 +1,4 @@ { - "id": "prusa_i3_xl", "version": 2, "name": "Prusa i3 xl", "inherits": "fdmprinter", diff --git a/resources/definitions/punchtec_connect_xl.def.json b/resources/definitions/punchtec_connect_xl.def.json index 16ba59dcb7..02d3562b41 100644 --- a/resources/definitions/punchtec_connect_xl.def.json +++ b/resources/definitions/punchtec_connect_xl.def.json @@ -1,5 +1,4 @@ { - "id": "punchtec_connect_xl", "name": "Punchtec Connect XL", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/raise3D_N2_dual.def.json b/resources/definitions/raise3D_N2_dual.def.json index d3d8f0e651..fe0a2bf3b8 100644 --- a/resources/definitions/raise3D_N2_dual.def.json +++ b/resources/definitions/raise3D_N2_dual.def.json @@ -1,5 +1,4 @@ { - "id": "raise3D_N2_dual", "version": 2, "name": "Raise3D N2 Dual", "inherits": "fdmprinter", @@ -33,7 +32,7 @@ }, "machine_heated_bed": { "default_value": true - }, + }, "machine_nozzle_size": { "default_value": 0.4 }, @@ -55,9 +54,6 @@ "machine_min_cool_heat_time_window": { "default_value": 3600 }, - "machine_nozzle_size": { - "default_value": 0.4 - }, "material_diameter": { "default_value": 1.75 }, diff --git a/resources/definitions/raise3D_N2_plus_dual.def.json b/resources/definitions/raise3D_N2_plus_dual.def.json index f49af40355..bddb2587e2 100644 --- a/resources/definitions/raise3D_N2_plus_dual.def.json +++ b/resources/definitions/raise3D_N2_plus_dual.def.json @@ -1,5 +1,4 @@ { - "id": "raise3D_N2_plus_dual", "version": 2, "name": "Raise3D N2 Plus Dual", "inherits": "fdmprinter", @@ -55,9 +54,6 @@ "machine_min_cool_heat_time_window": { "default_value": 3600 }, - "machine_nozzle_size": { - "default_value": 0.4 - }, "material_diameter": { "default_value": 1.75 }, diff --git a/resources/definitions/raise3D_N2_plus_single.def.json b/resources/definitions/raise3D_N2_plus_single.def.json index 5f10666528..ffcb723a27 100644 --- a/resources/definitions/raise3D_N2_plus_single.def.json +++ b/resources/definitions/raise3D_N2_plus_single.def.json @@ -1,5 +1,4 @@ { - "id": "raise3D_N2_plus_single", "version": 2, "name": "Raise3D N2 Plus Single", "inherits": "fdmprinter", @@ -50,9 +49,6 @@ "machine_min_cool_heat_time_window": { "default_value": 3600 }, - "machine_nozzle_size": { - "default_value": 0.4 - }, "material_diameter": { "default_value": 1.75 }, diff --git a/resources/definitions/raise3D_N2_single.def.json b/resources/definitions/raise3D_N2_single.def.json index 225794130c..1d01e479b1 100644 --- a/resources/definitions/raise3D_N2_single.def.json +++ b/resources/definitions/raise3D_N2_single.def.json @@ -1,5 +1,4 @@ { - "id": "raise3D_N2_single", "version": 2, "name": "Raise3D N2 Single", "inherits": "fdmprinter", @@ -50,9 +49,6 @@ "machine_min_cool_heat_time_window": { "default_value": 3600 }, - "machine_nozzle_size": { - "default_value": 0.4 - }, "material_diameter": { "default_value": 1.75 }, diff --git a/resources/definitions/renkforce_rf100.def.json b/resources/definitions/renkforce_rf100.def.json index 55e764800a..6f6de81643 100644 --- a/resources/definitions/renkforce_rf100.def.json +++ b/resources/definitions/renkforce_rf100.def.json @@ -1,5 +1,4 @@ { - "id": "RF100", "version": 2, "name": "Renkforce RF100", "inherits": "fdmprinter", diff --git a/resources/definitions/rigid3d.def.json b/resources/definitions/rigid3d.def.json index 75e435f880..97b0ebd276 100644 --- a/resources/definitions/rigid3d.def.json +++ b/resources/definitions/rigid3d.def.json @@ -1,5 +1,4 @@ { - "id": "rigid3d", "name": "Rigid3D", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/rigid3d_3rdgen.def.json b/resources/definitions/rigid3d_3rdgen.def.json index 3191817ecd..46c22bfa57 100644 --- a/resources/definitions/rigid3d_3rdgen.def.json +++ b/resources/definitions/rigid3d_3rdgen.def.json @@ -1,5 +1,4 @@ { - "id": "rigid3d_3rdgen", "name": "Rigid3D 3rdGen", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/rigid3d_hobby.def.json b/resources/definitions/rigid3d_hobby.def.json index 02e3cc514c..872cc3e6f4 100644 --- a/resources/definitions/rigid3d_hobby.def.json +++ b/resources/definitions/rigid3d_hobby.def.json @@ -1,5 +1,4 @@ { - "id": "rigid3d_hobby", "name": "Rigid3D Hobby", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/rigid3d_zero.def.json b/resources/definitions/rigid3d_zero.def.json index 7e99112621..56fb8284c0 100644 --- a/resources/definitions/rigid3d_zero.def.json +++ b/resources/definitions/rigid3d_zero.def.json @@ -1,5 +1,4 @@ { - "id": "rigid3d_zero", "name": "Rigid3D Zero", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/rigid3d_zero2.def.json b/resources/definitions/rigid3d_zero2.def.json index e2a77db895..27ceb87c29 100644 --- a/resources/definitions/rigid3d_zero2.def.json +++ b/resources/definitions/rigid3d_zero2.def.json @@ -1,5 +1,4 @@ { - "id": "rigid3d_zero2", "name": "Rigid3D Zero2", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/rigidbot.def.json b/resources/definitions/rigidbot.def.json index d183554947..bed10025d7 100644 --- a/resources/definitions/rigidbot.def.json +++ b/resources/definitions/rigidbot.def.json @@ -1,5 +1,4 @@ { - "id": "rigidbot", "version": 2, "name": "RigidBot", "inherits": "fdmprinter", diff --git a/resources/definitions/rigidbot_big.def.json b/resources/definitions/rigidbot_big.def.json index 33c4fd3d27..08cf3b2ab8 100644 --- a/resources/definitions/rigidbot_big.def.json +++ b/resources/definitions/rigidbot_big.def.json @@ -1,5 +1,4 @@ { - "id": "rigidbotbig", "version": 2, "name": "RigidBotBig", "inherits": "fdmprinter", diff --git a/resources/definitions/robo_3d_r1.def.json b/resources/definitions/robo_3d_r1.def.json index 88b3fba01f..b179779c59 100644 --- a/resources/definitions/robo_3d_r1.def.json +++ b/resources/definitions/robo_3d_r1.def.json @@ -1,5 +1,4 @@ { - "id": "robo_3d_r1", "name": "Robo 3D R1", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/tam.def.json b/resources/definitions/tam.def.json index 93ebe43ea6..20bc96358d 100644 --- a/resources/definitions/tam.def.json +++ b/resources/definitions/tam.def.json @@ -1,5 +1,4 @@ { - "id": "typeamachines", "version": 2, "name": "Type A Machines Series 1 2014", "inherits": "fdmprinter", diff --git a/resources/definitions/tevo_tarantula.def.json b/resources/definitions/tevo_tarantula.def.json index 29bfae77a4..097281aaeb 100644 --- a/resources/definitions/tevo_tarantula.def.json +++ b/resources/definitions/tevo_tarantula.def.json @@ -1,5 +1,4 @@ { - "id": "tevo_tarantula", "version": 2, "name": "Tevo Tarantula", "inherits": "fdmprinter", diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 797a05e324..1ca7444d04 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker_base", "version": 2, "name": "Ultimaker", "inherits": "fdmprinter", diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index 6974e61938..038071574f 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker2", "version": 2, "name": "Ultimaker 2", "inherits": "ultimaker", diff --git a/resources/definitions/ultimaker2_extended.def.json b/resources/definitions/ultimaker2_extended.def.json index 16f9e6f25e..94667b154d 100644 --- a/resources/definitions/ultimaker2_extended.def.json +++ b/resources/definitions/ultimaker2_extended.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker2_extended", "version": 2, "name": "Ultimaker 2 Extended", "inherits": "ultimaker2", diff --git a/resources/definitions/ultimaker2_extended_plus.def.json b/resources/definitions/ultimaker2_extended_plus.def.json index 525aaf5b72..adde89d858 100644 --- a/resources/definitions/ultimaker2_extended_plus.def.json +++ b/resources/definitions/ultimaker2_extended_plus.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker2_extended_plus", "version": 2, "name": "Ultimaker 2 Extended+", "inherits": "ultimaker2_plus", diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json index 9fb94022ce..e98381a7d7 100644 --- a/resources/definitions/ultimaker2_go.def.json +++ b/resources/definitions/ultimaker2_go.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker2_go", "version": 2, "name": "Ultimaker 2 Go", "inherits": "ultimaker2", diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json index 7214e6b7fe..58833904d2 100644 --- a/resources/definitions/ultimaker2_plus.def.json +++ b/resources/definitions/ultimaker2_plus.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker2_plus", "version": 2, "name": "Ultimaker 2+", "inherits": "ultimaker2", diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 05e39e365c..e7b9b6255e 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker3", "version": 2, "name": "Ultimaker 3", "inherits": "ultimaker", diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json index e47ccf4ba3..385199f4f1 100644 --- a/resources/definitions/ultimaker3_extended.def.json +++ b/resources/definitions/ultimaker3_extended.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker3_extended", "version": 2, "name": "Ultimaker 3 Extended", "inherits": "ultimaker3", diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json index ef2f5fae5c..a0a486429b 100644 --- a/resources/definitions/ultimaker_original.def.json +++ b/resources/definitions/ultimaker_original.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker_original", "version": 2, "name": "Ultimaker Original", "inherits": "ultimaker", diff --git a/resources/definitions/ultimaker_original_dual.def.json b/resources/definitions/ultimaker_original_dual.def.json index 8745434360..a1dbea6b6d 100644 --- a/resources/definitions/ultimaker_original_dual.def.json +++ b/resources/definitions/ultimaker_original_dual.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker_original_dual", "version": 2, "name": "Ultimaker Original Dual Extrusion", "inherits": "ultimaker", diff --git a/resources/definitions/ultimaker_original_plus.def.json b/resources/definitions/ultimaker_original_plus.def.json index 8e401d550c..115e1e2752 100644 --- a/resources/definitions/ultimaker_original_plus.def.json +++ b/resources/definitions/ultimaker_original_plus.def.json @@ -1,5 +1,4 @@ { - "id": "ultimaker_original_plus", "version": 2, "name": "Ultimaker Original+", "inherits": "ultimaker_original", diff --git a/resources/definitions/uniqbot_one.def.json b/resources/definitions/uniqbot_one.def.json index 410f7e57a6..ad14728269 100644 --- a/resources/definitions/uniqbot_one.def.json +++ b/resources/definitions/uniqbot_one.def.json @@ -1,5 +1,4 @@ { - "id": "uniqbot_one", "version": 2, "name": "Uniqbot", "inherits": "fdmprinter", diff --git a/resources/definitions/vertex_delta_k8800.def.json b/resources/definitions/vertex_delta_k8800.def.json index 0a89b61b36..736d17e17a 100644 --- a/resources/definitions/vertex_delta_k8800.def.json +++ b/resources/definitions/vertex_delta_k8800.def.json @@ -1,5 +1,4 @@ { - "id": "K8800", "name": "Vertex Delta K8800", "version": 2, "inherits": "fdmprinter", diff --git a/resources/definitions/vertex_k8400.def.json b/resources/definitions/vertex_k8400.def.json index a23e1fc893..8abf9acd7f 100644 --- a/resources/definitions/vertex_k8400.def.json +++ b/resources/definitions/vertex_k8400.def.json @@ -1,5 +1,4 @@ { - "id": "vertex_k8400", "version": 2, "name": "Vertex K8400", "inherits": "fdmprinter", diff --git a/resources/definitions/vertex_k8400_dual.def.json b/resources/definitions/vertex_k8400_dual.def.json index 9e24bab5d3..fc006a1d5f 100644 --- a/resources/definitions/vertex_k8400_dual.def.json +++ b/resources/definitions/vertex_k8400_dual.def.json @@ -1,5 +1,4 @@ { - "id": "vertex_k8400_dual", "version": 2, "name": "Vertex K8400 Dual", "inherits": "fdmprinter", diff --git a/resources/definitions/zone3d_printer.def.json b/resources/definitions/zone3d_printer.def.json index a1ed56c7ef..bac8968951 100644 --- a/resources/definitions/zone3d_printer.def.json +++ b/resources/definitions/zone3d_printer.def.json @@ -1,5 +1,4 @@ { - "id": "zone3d_printer", "name": "Zone3d Printer", "version": 2, "inherits": "fdmprinter", diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index e5e2509fd0..211e75c2bc 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\n" @@ -91,7 +91,7 @@ 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" @@ -141,7 +141,7 @@ msgstr "Es kann kein neuer Auftrag gestartet werden, da der Drucker beschäftigt #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Drucker nicht verfügbar" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -593,7 +593,7 @@ msgstr "Anschluss über Netzwerk" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Für Ihren {machine_name} sind neue Funktionen verfügbar! Es wird empfohlen, ein Firmware-Update für Ihren Drucker auszuführen." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -604,7 +604,7 @@ msgstr "Neue Firmware für %s verfügbar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Anleitung für die Aktualisierung" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -639,7 +639,7 @@ msgstr "Fehler beim Starten %s!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Simulationsansicht" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -649,7 +649,7 @@ msgstr "Cura zeigt die Schichten nicht akkurat an, wenn Wire Printing aktiviert #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Simulationsansicht" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -730,7 +730,7 @@ msgstr "Die aktuellen Einstellungen lassen kein Schneiden (Slicing) zu. Die folg #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Aufgrund der Pro-Modell-Einstellungen ist kein Schneiden (Slicing) möglich. Die folgenden Einstellungen sind für ein oder mehrere Modelle fehlerhaft: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -765,25 +765,25 @@ msgstr "Pro Objekteinstellungen konfigurieren" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Installieren" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Siemens NX Plugin-Dateien konnten nicht kopiert werden. Überprüfen Sie Ihr UGII_USER_DIR. Sie ist keinem Verzeichnis zugeordnet." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Siemens NX Cura Plugin wurde erfolgreich installiert." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Siemens NX Plugin-Dateien konnten nicht kopiert werden. Überprüfen Sie Ihr UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Siemens NX Plugin konnte nicht installiert werden. Umgebungsvariable UGII_USER_DIR für Siemens NX konnte nicht zugewiesen werden." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -946,7 +946,7 @@ msgstr "Sonstige" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Unbekannt" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1011,12 +1011,12 @@ msgstr "Benutzerdefiniertes Material" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Global" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Nicht überschrieben" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1065,7 +1065,7 @@ msgstr "Profil wurde nach {0} exportiert" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "Export erfolgreich ausgeführt" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1137,85 +1137,85 @@ msgid "" "

A fatal exception has occurred. Please send us this Crash Report to fix the problem

\n" "

Please use the \"Send report\" button to post a bug report automatically to our servers

\n" " " -msgstr "" +msgstr "

Ein schwerer Ausnahmefehler ist aufgetreten. Senden Sie uns diesen Absturzbericht, um das Problem zu beheben

\n

Verwenden Sie bitte die Schaltfläche „Bericht senden“, um den Fehlerbericht automatisch an unsere Server zu senden

\n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Systeminformationen" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Unbekannt" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
" -msgstr "" +msgstr "Cura-Version: {version}
" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
" -msgstr "" +msgstr "Plattform: {platform}
" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
" -msgstr "" +msgstr "Qt-Version: {qt}
" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
" -msgstr "" +msgstr "PyQt-Version: {pyqt}
" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
" -msgstr "" +msgstr "OpenGL: {opengl}
" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • OpenGL-Version: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • OpenGL-Anbieter: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGL-Renderer: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Ausnahme-Rückverfolgung" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Protokolle" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Benutzerbeschreibung" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Bericht senden" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1253,7 +1253,7 @@ msgstr "Wenn G-Code geladen wird, kann keine weitere Datei geöffnet werden. Wic #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Das gewählte Modell war zu klein zum Laden." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1514,10 +1514,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1631,7 +1628,7 @@ msgstr "%1 ist nicht für das Hosten einer Gruppe verbundener Ultimaker 3-Drucke #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/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/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1666,7 +1663,7 @@ msgstr "Verbindung zum Drucker wurde unterbrochen" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Deaktiviert" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1681,12 +1678,12 @@ msgstr "Beendet" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "Pausiert" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Wird fortgesetzt ..." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1828,12 +1825,12 @@ msgstr "Linientyp" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Vorschub" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Schichtdicke" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1883,12 +1880,12 @@ msgstr "Innenwand" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "min." #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "max." #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 von %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Das Laden eines Projekts entfernt alle Modelle von der Druckplatte." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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 "Dieses 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" @@ -2184,7 +2181,7 @@ msgstr "Ablehnen" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Benutzervereinbarung" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "Über Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "Version: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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" @@ -3166,7 +3159,7 @@ msgstr "Bibliothek für Polygon-Beschneidung" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Bibliothek für Python HTTP" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "Profil:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Kein Profil verfügbar" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00 Stunden 00 Minuten" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Zeitangabe
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Kostenangabe" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1 m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Insgesamt:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3461,27 +3440,27 @@ msgstr "Heizen Sie das Bett vor Druckbeginn auf. Sie können Ihren Druck währen #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Druckersteuerung" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Tippposition" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Tippdistanz" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3526,7 +3505,7 @@ msgstr "&Beenden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Kameraposition zurücksetzen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3768,7 +3747,7 @@ msgstr "Alle als Modelle importieren" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3925,7 +3904,7 @@ msgstr "Schichtdicke" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Ein benutzerdefiniertes Profil ist derzeit aktiv. Wählen Sie ein voreingestelltes Qualitätsprofil aus der Registerkarte „Benutzerdefiniert“, um den Schieberegler für Qualität zu aktivieren." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3945,7 +3924,7 @@ msgstr "Schneller" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Sie haben einige Profileinstellungen geändert. Wenn Sie diese ändern möchten, wechseln Sie in den Modus „Benutzerdefiniert“." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4037,7 +4016,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Kompatibilität prüfen" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4177,12 +4156,12 @@ msgstr "SolidWorks Integration" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Ermöglicht die Simulationsansicht." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Simulationsansicht" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4267,12 +4246,12 @@ msgstr "Upgrade von Version 2.7 auf 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Aktualisiert Konfigurationen von Cura 3.0 auf Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Upgrade von Version 3.0 auf 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4337,12 +4316,12 @@ msgstr "Werkzeug „Einstellungen pro Objekt“" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Unterstützt die Installation der Schaltfläche „Zu Cura exportieren“ in Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4407,12 +4386,12 @@ msgstr "3MF-Writer" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Den Benutzer einmalig fragen, ob er unsere Lizenz akzeptiert." #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4454,13 +4433,13 @@ msgstr "Cura-Profil-Reader" #~ 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 "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." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Schichtenansicht" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Schichtenansicht" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Schichtenansicht" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Schichtenansicht" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4562,9 +4541,9 @@ msgstr "Cura-Profil-Reader" #~ msgid "Provides the Layer view." #~ msgstr "Bietet eine Schichtenansicht." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Schichtenansicht" +msgctxt "name" +msgid "Layer View" +msgstr "Schichtenansicht" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4885,9 +4864,9 @@ msgstr "Cura-Profil-Reader" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Ermöglicht das Importieren von Profilen aus G-Code-Dateien." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Schichtenansicht" +msgctxt "@label" +msgid "Layer View" +msgstr "Schichtenansicht" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/de_DE/fdmextruder.def.json.po b/resources/i18n/de_DE/fdmextruder.def.json.po index 1858c6c76c..1108f1a541 100644 --- a/resources/i18n/de_DE/fdmextruder.def.json.po +++ b/resources/i18n/de_DE/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\n" diff --git a/resources/i18n/de_DE/fdmprinter.def.json.po b/resources/i18n/de_DE/fdmprinter.def.json.po index b853e4a70f..337df8bff2 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: German\n" "Language: de_DE\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-Befehle, die zu Beginn ausgeführt werden sollen – getrennt durch \n" -"." +msgstr "Gcode-Befehle, die zu Beginn ausgeführt werden sollen – getrennt durch \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-Befehle, die Am Ende ausgeführt werden sollen – getrennt durch \n" -"." +msgstr "Gcode-Befehle, die Am Ende ausgeführt werden sollen – getrennt durch \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -612,27 +608,27 @@ msgstr "Die Dicke der ersten Schicht in mm. Eine dicke erste Schicht erleichtert #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Slicing-Toleranz" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Slicen von Schichten mit diagonalen Flächen. Die Bereiche einer Schicht können anhand der Position generiert werden, an der die Mitte einer Schicht die Oberfläche kreuzt (Mitte). Optional kann jede Schicht die Bereiche enthalten, die in das Volumen entlang der Höhe der Schicht (Exklusiv) fallen oder eine Schicht enthält die Bereiche, die irgendwo innerhalb der Schicht positioniert sind (Inklusiv). Exklusiv bewahrt die meisten Details, Inklusiv ermöglicht die beste Passform und Mitte erfordert die kürzeste Bearbeitungszeit." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Mitte" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Exklusiv" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inklusiv" #: fdmprinter.def.json msgctxt "line_width label" @@ -807,7 +803,7 @@ msgstr "Die für das Drucken der Außenwände verwendete Extruder-Einheit. Diese #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Extruder Innenwand" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1387,7 +1383,7 @@ msgstr "Füllmuster" #: 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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "Das Muster des Füllmaterials des Drucks. Die Linien- und Zickzackfüllmethode wechseln nach jeder Schicht die Richtung, um Materialkosten zu reduzieren. Die Gitter-, Dreieck- Tri-Hexagon-, Würfel-, Octahedral-, Viertelwürfel-, Quer- und konzentrischen Muster werden in jeder Schicht vollständig gedruckt. Würfel-, Viertelwürfel- und Octahedral-Füllungen wechseln mit jeder Schicht, um eine gleichmäßigere Verteilung der Stärke in allen Richtungen zu erzielen." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1407,7 +1403,7 @@ msgstr "Dreiecke" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Tri-Hexagon" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1462,7 +1458,7 @@ msgstr "Füllungslinien verbinden" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Verbindet die Enden, an denen das Füllmuster auf die Innenwand trifft, mithilfe einer Linie, die der Form der Innenwand folgt. Durch Aktivierung dieser Einstellung kann die Füllung besser an den Wänden haften; auch die Auswirkungen der Füllung auf die Qualität der vertikalen Flächen werden reduziert. Die Deaktivierung dieser Einstellung reduziert den Materialverbrauch." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1477,22 +1473,22 @@ msgstr "Eine Liste von Ganzzahl-Linienrichtungen für die Verwendung. Elemente a #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "X-Versatz Füllung" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Das Füllmuster wird um diese Distanz entlang der X-Achse versetzt." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Y-Versatz Füllung" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Das Füllmuster wird um diese Distanz entlang der Y-Achse versetzt." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1807,22 +1803,22 @@ msgstr "Der Durchmesser des verwendeten Filaments wird angepasst. Stellen Sie hi #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Haftungstendenz" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Oberflächenhaftungstendenz" #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Oberflächenenergie" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Oberflächenenergie." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3554,7 +3550,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 "" +msgstr "Der horizontale Abstand zwischen dem Skirt und der ersten Schicht des Drucks.\nEs handelt sich dabei um den Mindestabstand. Ab diesem Abstand werden mehrere Skirt-Linien in äußerer Richtung angebracht." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3614,7 +3610,7 @@ msgstr "Raft-Glättung" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "Diese Einstellung steuert, wie stark die Innenkanten des Raft-Umrisses gerundet werden. Die Innenkanten werden zu einem Halbkreis mit einem Radius entsprechend des hier definierten Werts gerundet. Diese Einstellung entfernt außerdem Löcher im Raft-Umriss, die kleiner als ein solcher Kreis sind." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4089,12 +4085,12 @@ msgstr "Normalerweise versucht Cura kleine Löcher im Netz abzudecken und Teile #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Maximale Auflösung" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "Die Mindestgröße eines Linienabschnitts nach dem Slicen. Wenn Sie diesen Wert erhöhen, führt dies zu einer niedrigeren Auslösung des Mesh. Damit kann der Drucker die erforderliche Geschwindigkeit für die Verarbeitung des G-Codes beibehalten; außerdem wird die Slice-Geschwindigkeit erhöht, indem Details des Mesh entfernt werden, die ohnehin nicht verarbeitet werden können." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4129,12 +4125,12 @@ msgstr "Schaltet mit jeder Schicht das Volumen zu den entsprechenden Netzübersc #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Leere erste Schichten entfernen" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Entfernen Sie die leeren Schichten unter der ersten gedruckten Schicht, sofern vorhanden. Die Deaktivierung dieser Einstellung kann zu leeren ersten Schichten führen, wenn die Einstellung der Slicing-Toleranz auf Exklusiv oder Mittel gesetzt wurde." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4664,22 +4660,22 @@ msgstr "Der durchschnittliche Abstand zwischen den willkürlich auf jedes Linien #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Ausgleich Durchflussrate max. Extrusionswirkung" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "Die maximale Distanz in mm für den Ausgleich." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Ausgleichsfaktor Durchflussrate" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "Der Multiplikationsfaktor für die Übersetzung Durchflussrate -> Distanz." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4831,9 +4827,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 "" -"Die Strecke einer Aufwärtsbewegung, die mit halber Geschwindigkeit extrudiert wird.\n" -"Dies kann zu einer besseren Haftung an vorhergehenden Schichten führen, während gleichzeitig ein Überhitzen des Materials in diesen Schichten vermieden wird. Dies gilt nur für das Drucken mit Drahtstruktur." +msgstr "Die Strecke einer Aufwärtsbewegung, die mit halber Geschwindigkeit extrudiert wird.\nDies kann zu einer besseren Haftung an vorhergehenden Schichten führen, während gleichzeitig ein Überhitzen des Materials in diesen Schichten vermieden wird. Dies gilt nur für das Drucken mit Drahtstruktur." #: fdmprinter.def.json msgctxt "wireframe_top_jump label" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 00eb28955a..3a35477fc9 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -91,7 +91,7 @@ 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" @@ -141,7 +141,7 @@ msgstr "No se puede iniciar un trabajo nuevo porque la impresora está ocupada o #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Impresora no disponible" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -593,7 +593,7 @@ msgstr "Conectar a través de la red" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Hay nuevas funciones disponibles para {machine_name}. Se recomienda actualizar el firmware de la impresora." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -604,7 +604,7 @@ msgstr "Nuevo firmware de %s disponible" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Cómo actualizar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -639,7 +639,7 @@ msgstr "Error al iniciar %s" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Vista de simulación" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -649,7 +649,7 @@ msgstr "Cura no muestra correctamente las capas si la impresión de alambre est #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Vista de simulación" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -730,7 +730,7 @@ msgstr "Los ajustes actuales no permiten la segmentación. Los siguientes ajuste #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Los ajustes de algunos modelos no permiten la segmentación. Los siguientes ajustes contienen errores en uno o más modelos: {error_labels}." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -765,25 +765,25 @@ msgstr "Configurar ajustes por modelo" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Instalar" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Se ha producido un error al copiar los archivos de complemento de Siemens NX. Compruebe la UGII_USER_DIR. No está asignada a ningún directorio." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "El complemento Siemens NX Cura se ha instalado correctamente." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Se ha producido un error al copiar los archivos de complemento de Siemens NX. Compruebe la UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Se ha producido un error al instalar el complemento de Siemens NX. No se pudo definir la variable de entorno UGII_USER_DIR de Siemens NX." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -946,7 +946,7 @@ msgstr "Otro" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Desconocido" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1011,12 +1011,12 @@ msgstr "Material personalizado" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Global" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "No reemplazado" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1065,7 +1065,7 @@ msgstr "Perfil exportado a {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "Exportación correcta" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1137,85 +1137,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    Se ha producido una excepción fatal. Envíenos este informe de errores para que podamos solucionar el problema.

    \n

    Utilice el botón «Enviar informe» para publicar automáticamente un informe de errores en nuestros servidores.

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Información del sistema" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Desconocido" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Versión de Cura: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Platforma: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Versión de Qt: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "Versión de PyQt: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • Versión de OpenGL: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • Proveedor de OpenGL: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • Representador de OpenGL: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Rastreabilidad de excepciones" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Registros" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Descripción del usuario" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Enviar informe" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1253,7 +1253,7 @@ msgstr "No se puede abrir ningún archivo si se está cargando un archivo GCode. #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "No se puede cargar el modelo seleccionado, es demasiado pequeño." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1514,10 +1514,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1631,7 +1628,7 @@ msgstr "%1 no está configurada para alojar un grupo de impresoras conectadas de #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/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/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1666,7 +1663,7 @@ msgstr "Se ha perdido la conexión con la impresora." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Deshabilitado" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1681,12 +1678,12 @@ msgstr "Terminado" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "En pausa" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Reanudando" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1828,12 +1825,12 @@ msgstr "Tipo de línea" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Velocidad" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Grosor de la capa" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1883,12 +1880,12 @@ msgstr "Pared interior" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "mín." #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "máx." #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 de un total de %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Si carga un proyecto, se borrarán todos los modelos de la placa de impresión." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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 "Este complemento incluye una licencia.\nDebe aceptar dicha licencia para instalar el complemento.\n¿Acepta las condiciones que aparecen a continuación?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" @@ -2184,7 +2181,7 @@ msgstr "Rechazar" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Acuerdo de usuario" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "Acerca de Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "versión: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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" @@ -3166,7 +3159,7 @@ msgstr "Biblioteca de recorte de polígonos" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Biblioteca HTTP de Python" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "Perfil:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "No hay perfiles disponibles." #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00 h 00 min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Especificación de tiempo
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Especificación de costes" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1 m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Total:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1 m/~ %2 g/~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1 m/~ %2 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3461,27 +3440,27 @@ msgstr "Caliente la plataforma antes de imprimir. Puede continuar ajustando la i #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Control de impresoras" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Posición de desplazamiento" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Distancia de desplazamiento" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3526,7 +3505,7 @@ msgstr "&Salir" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Restablecer posición de la cámara" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3768,7 +3747,7 @@ msgstr "Importar todos como modelos" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3925,7 +3904,7 @@ msgstr "Altura de capa" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Hay un perfil personalizado activado en este momento. Para habilitar el control deslizante de calidad, seleccione un perfil de calidad predeterminado en la pestaña Personalizado." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3945,7 +3924,7 @@ msgstr "Más rápido" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Ha modificado algunos ajustes del perfil. Si desea cambiarlos, hágalo en el modo personalizado." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4037,7 +4016,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Comprobar compatibilidad" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4177,12 +4156,12 @@ msgstr "Integración con SolidWorks" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Abre la vista de simulación." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Vista de simulación" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4267,12 +4246,12 @@ msgstr "Actualización de la versión 2.7 a la 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Actualiza la configuración de Cura 3.0 a Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Actualización de la versión 3.0 a la 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4337,12 +4316,12 @@ msgstr "Herramienta de ajustes por modelo" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Ayuda a instalar el botón para exportar a Cura en in Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4407,12 +4386,12 @@ msgstr "Escritor de 3MF" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Preguntar al usuario una vez si acepta la licencia" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4454,13 +4433,13 @@ msgstr "Lector de perfiles de Cura" #~ 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 "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." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Vista de capas" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Vista de capas" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Vista de capas" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Vista de capas" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4562,9 +4541,9 @@ msgstr "Lector de perfiles de Cura" #~ msgid "Provides the Layer view." #~ msgstr "Proporciona la vista de capas." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Vista de capas" +msgctxt "name" +msgid "Layer View" +msgstr "Vista de capas" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4885,9 +4864,9 @@ msgstr "Lector de perfiles de Cura" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Proporciona asistencia para la importación de perfiles de archivos GCode." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Vista de capas" +msgctxt "@label" +msgid "Layer View" +msgstr "Vista de capas" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/es_ES/fdmextruder.def.json.po b/resources/i18n/es_ES/fdmextruder.def.json.po index 616b670f93..1d0986f4e1 100644 --- a/resources/i18n/es_ES/fdmextruder.def.json.po +++ b/resources/i18n/es_ES/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Spanish\n" "Language: es_ES\n" diff --git a/resources/i18n/es_ES/fdmprinter.def.json.po b/resources/i18n/es_ES/fdmprinter.def.json.po index 6e21158a77..d3515844e3 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\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" @@ -612,27 +608,27 @@ msgstr "Altura de capa inicial en mm. Una capa inicial más gruesa se adhiere a #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Tolerancia de segmentación" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Cómo segmentar capas con superficies diagonales. Las áreas de una capa se pueden crear según el punto en el que el centro de esta intersecta con la superficie (Media). Las capas también pueden tener áreas comprendidas en el volumen a lo largo de la altura de la capa (Exclusiva) o una capa puede tener áreas comprendidas en cualquier lugar de la capa (Inclusiva). Las capas exclusivas tienen un mayor nivel de detalle, mientras que las inclusivas son las que mejor se ajustan y las medias las que tardan menos en procesarse." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Media" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Exclusiva" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inclusiva" #: fdmprinter.def.json msgctxt "line_width label" @@ -807,7 +803,7 @@ msgstr "El tren extrusor que se utiliza para imprimir la pared exterior. Se empl #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Extrusor de pared interior" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1387,7 +1383,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, tri-hexagon, cubic, octet, quarter cubic, cross 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, trihexagonal, cúbico, de octeto, cúbico bitruncado y transversal 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" @@ -1407,7 +1403,7 @@ msgstr "Triángulos" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Trihexagonal" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1462,7 +1458,7 @@ 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 line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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 se reduzca 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" @@ -1477,22 +1473,22 @@ msgstr "Una lista de los valores enteros de las direcciones de línea. Los eleme #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Desplazamiento del relleno sobre el eje X" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "El patrón de relleno se desplaza esta distancia a lo largo del eje X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Desplazamiento del relleno sobre el eje X" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "El patrón de relleno se desplaza esta distancia a lo largo del eje Y." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1807,22 +1803,22 @@ msgstr "Ajusta el diámetro del filamento utilizado. Este valor debe coincidir c #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Tendencia de adherencia" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Tendencia de adherencia de la superficie." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Energía de la superficie" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Energía de la superficie." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3554,7 +3550,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 "" +msgstr "La distancia horizontal entre la falda y la primera capa de la impresión.\nSe trata de 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" @@ -3614,7 +3610,7 @@ msgstr "Suavizado de la balsa" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -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" @@ -4089,12 +4085,12 @@ msgstr "Normalmente, Cura intenta coser los pequeños agujeros de la malla y eli #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Resolución máxima" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "El tamaño mínimo de un segmento de línea tras la segmentación. Si se aumenta, la resolución de la malla será menor. Esto puede permitir a la impresora mantener la velocidad que necesita para procesar GCode y aumentará la velocidad de segmentación al eliminar detalles de la malla que, de todas formas, no puede procesar." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4129,12 +4125,12 @@ msgstr "Cambiar la malla a la que pertenecerán los volúmenes que se cruzan en #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Eliminar primeras capas vacías" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Eliminar (si las hubiera) las capas vacías por debajo de la primera capa impresa. Deshabilitar este ajuste puede hacer que aparezcan primeras capas vacías si el ajuste de tolerancia de segmentación está establecido en Exclusiva o Medio." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4664,22 +4660,22 @@ msgstr "Distancia media entre los puntos aleatorios introducidos en cada segment #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Desplazamiento de extrusión máximo del factor de compensación del caudal" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "Distancia máxima en mm que se va a compensar." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Factor de compensación del caudal" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "La multiplicación factor por caudal da como resultado la conversión de distancia." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4831,9 +4827,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" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 54d5eadd62..4db845190f 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -91,7 +91,7 @@ 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" @@ -141,7 +141,7 @@ msgstr "Impossible de démarrer une nouvelle tâche car l'imprimante est occupé #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Imprimante indisponible" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -593,7 +593,7 @@ msgstr "Connecter via le réseau" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "De nouvelles fonctionnalités sont disponibles pour votre {machine_name} ! Il est recommandé de mettre à jour le firmware sur votre imprimante." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -604,7 +604,7 @@ msgstr "Nouveau firmware %s disponible" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Comment effectuer la mise à jour" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -639,7 +639,7 @@ msgstr "Erreur lors du lancement de %s !" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Vue simulation" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -649,7 +649,7 @@ msgstr "Cura n'affiche pas les couches avec précision lorsque l'impression fila #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Vue simulation" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -730,7 +730,7 @@ msgstr "Impossible de couper avec les paramètres actuels. Les paramètres suiva #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Impossible de couper en raison de certains paramètres par modèle. Les paramètres suivants contiennent des erreurs sur un ou plusieurs modèles : {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -765,25 +765,25 @@ msgstr "Configurer les paramètres par modèle" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Installer" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Échec de la copie des fichiers plug-ins Siemens NX. Veuillez vérifier votre UGII_USER_DIR. Il n'est pas défini sur un répertoire." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "L'installation du plug-in Siemens NX Cura a réussie." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Échec de la copie des fichiers plug-ins Siemens NX. Veuillez vérifier votre UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Échec de l'installation du plug-in Siemens NX. Impossible de définir la variable d'environnement UGII_USER_DIR pour Siemens NX." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -946,7 +946,7 @@ msgstr "Autre" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Inconnu" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1011,12 +1011,12 @@ msgstr "Matériau personnalisé" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Global" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Pas écrasé" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1065,7 +1065,7 @@ msgstr "Profil exporté vers {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "L'exportation a réussi" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1137,85 +1137,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    Une exception fatale s'est produite. Veuillez nous envoyer ce Rapport d'incident pour résoudre le problème

    \n

    Veuillez utiliser le bouton « Envoyer rapport » pour publier automatiquement un rapport d'erreur sur nos serveurs

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Informations système" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Inconnu" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Version Cura : {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Plateforme : {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Version Qt : {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "Version PyQt : {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL : {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • Version OpenGL : {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • Revendeur OpenGL : {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • Moteur de rendu OpenGL : {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Retraçage de l'exception" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Journaux" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Description de l'utilisateur" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Envoyer rapport" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1253,7 +1253,7 @@ msgstr "Impossible d'ouvrir un autre fichier si le G-Code est en cours de charge #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Le modèle sélectionné était trop petit pour être chargé." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1514,10 +1514,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1631,7 +1628,7 @@ msgstr "%1 n'est pas configurée pour héberger un groupe d'imprimantes connect #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/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/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1666,7 +1663,7 @@ msgstr "Connexion avec l'imprimante perdue" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Désactivé" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1681,12 +1678,12 @@ msgstr "Terminé" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "En pause" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Reprise" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1828,12 +1825,12 @@ msgstr "Type de ligne" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Taux d'alimentation" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Épaisseur de la couche" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1883,12 +1880,12 @@ msgstr "Paroi interne" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "min." #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "max." #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 sur %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Le chargement d'un projet effacera tous les modèles sur le plateau." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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 "Ce 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" @@ -2184,7 +2181,7 @@ msgstr "Refuser" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Accord utilisateur" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "À propos de Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "version : %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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" @@ -3166,7 +3159,7 @@ msgstr "Bibliothèque de découpe polygone" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Bibliothèque Python HTTP" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "Profil :" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Aucun profil disponible" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Spécification de temps
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Spécification de coût" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Total :" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3461,27 +3440,27 @@ msgstr "Préchauffez le plateau avant l'impression. Vous pouvez continuer à aju #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Contrôle de l'imprimante" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Position de coupe" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Distance de coupe" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3526,7 +3505,7 @@ msgstr "&Quitter" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Réinitialiser la position de la caméra" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3768,7 +3747,7 @@ msgstr "Importer tout comme modèles" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3925,7 +3904,7 @@ msgstr "Hauteur de la couche" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Un profil personnalisé est actuellement actif. Pour activer le curseur de qualité, choisissez un profil de qualité par défaut dans l'onglet Personnaliser" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3945,7 +3924,7 @@ msgstr "Accélérer" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Vous avez modifié certains paramètres du profil. Si vous souhaitez les modifier, allez dans le mode Personnaliser." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4037,7 +4016,7 @@ msgstr "Matériau" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Vérifier la compatibilité" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4177,12 +4156,12 @@ msgstr "Intégration SolidWorks" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Fournit la Vue simulation." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Vue simulation" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4267,12 +4246,12 @@ msgstr "Mise à niveau de version, de 2.7 vers 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Met à niveau les configurations, de Cura 3.0 vers Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Mise à niveau de version, de 3.0 vers 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4337,12 +4316,12 @@ msgstr "Outil de paramètres par modèle" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Vous aide à installer un bouton « exporter vers Cura » dans Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4407,12 +4386,12 @@ msgstr "Générateur 3MF" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Demander à l'utilisateur une fois s'il appose son accord à notre licence" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4454,13 +4433,13 @@ msgstr "Lecteur de profil Cura" #~ 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 "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." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Vue en couches" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Vue en couches" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Vue en couches" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Vue en couches" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4562,9 +4541,9 @@ msgstr "Lecteur de profil Cura" #~ msgid "Provides the Layer view." #~ msgstr "Permet la vue en couches." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Vue en couches" +msgctxt "name" +msgid "Layer View" +msgstr "Vue en couches" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4885,9 +4864,9 @@ msgstr "Lecteur de profil Cura" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Fournit la prise en charge de l'importation de profils à partir de fichiers g-code." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Vue en couches" +msgctxt "@label" +msgid "Layer View" +msgstr "Vue en couches" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/fr_FR/fdmextruder.def.json.po b/resources/i18n/fr_FR/fdmextruder.def.json.po index d190a4ef2c..fdec72de32 100644 --- a/resources/i18n/fr_FR/fdmextruder.def.json.po +++ b/resources/i18n/fr_FR/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: French\n" "Language: fr_FR\n" diff --git a/resources/i18n/fr_FR/fdmprinter.def.json.po b/resources/i18n/fr_FR/fdmprinter.def.json.po index 3327f1af8c..0e768253dc 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\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" @@ -612,27 +608,27 @@ msgstr "La hauteur de la couche initiale en mm. Une couche initiale plus épaiss #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Tolérance à la découpe" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Comment découper des couches avec des surfaces diagonales. Les zones d'une couche peuvent être générées en fonction de l'endroit où le milieu de la couche croise la surface (Milieu). Alternativement, chaque couche peut posséder des zones situées à l'intérieur du volume à travers toute la hauteur de la couche (Exclusif), ou une couche peut avoir des zones situées à l'intérieur à tout endroit dans la couche (Inclusif). L'option Exclusif permet de retenir le plus de détails, Inclusif permet d'obtenir une adaptation optimale et Milieu demande le moins de temps de traitement." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Milieu" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Exclusif" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inclusif" #: fdmprinter.def.json msgctxt "line_width label" @@ -807,7 +803,7 @@ msgstr "Le train d'extrudeuse utilisé pour l'impression des parois externes. Ce #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Extrudeuse de paroi interne" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1387,7 +1383,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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "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, trihexagonaux, cubiques, octaédriques, quart cubiques et concentriques sont entièrement imprimés sur chaque couche. Les remplissages cubique, quart cubique et octaédrique changent à chaque couche afin d'offrir une répartition plus égale de la solidité dans chaque direction." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1407,7 +1403,7 @@ msgstr "Triangles" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Trihexagonal" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1462,7 +1458,7 @@ 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 line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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 d'une ligne é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" @@ -1477,22 +1473,22 @@ msgstr "Une liste de sens de ligne (exprimés en nombres entiers) à utiliser. L #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Remplissage Décalage X" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Le motif de remplissage est décalé de cette distance sur l'axe X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Remplissage Décalage Y" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Le motif de remplissage est décalé de cette distance sur l'axe Y." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1807,22 +1803,22 @@ msgstr "Ajuste le diamètre du filament utilisé. Faites correspondre cette vale #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Tendance à l'adhérence" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Tendance à l'adhérence de la surface." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Énergie de la surface" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Énergie de la surface." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3554,7 +3550,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 "" +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" @@ -3614,7 +3610,7 @@ msgstr "Lissage de radeau" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -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" @@ -4089,12 +4085,12 @@ msgstr "Normalement, Cura essaye de raccommoder les petits trous dans le maillag #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Résolution maximum" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "Taille minimum d'un segment de ligne après découpage. Si vous augmentez cette valeur, la maille aura une résolution plus faible. Cela peut permettre à l'imprimante de suivre la vitesse à laquelle elle doit traiter le G-Code et augmentera la vitesse de découpe en enlevant des détails de la maille que l'imprimante ne peut pas traiter de toute manière." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4129,12 +4125,12 @@ msgstr "Passe aux volumes d'intersection de maille qui appartiennent à chaque c #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Supprimer les premières couches vides" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Supprimer les couches vides sous la première couche imprimée si elles sont présentes. Le fait de désactiver ce paramètre peut entraîner l'apparition de premières couches vides si le paramètre Tolérance à la découpe est défini sur Exclusif ou Milieu." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4664,22 +4660,22 @@ msgstr "Distance moyenne entre les points ajoutés aléatoirement sur chaque seg #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Décalage d'extrusion max. pour compensation du débit" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "Distance de compensation maximum en mm." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Facteur de compensation du débit" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "Facteur de multiplication pour le débit -> translation de la distance." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4831,9 +4827,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" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index ae81a507bd..a4c9ef40f8 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -91,7 +91,7 @@ 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" @@ -141,7 +141,7 @@ msgstr "Impossibile avviare un nuovo processo di stampa perché la stampante è #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Stampante non disponibile" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -593,7 +593,7 @@ msgstr "Collega tramite rete" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Sono disponibili nuove funzioni per la {machine_name}! Si consiglia di aggiornare il firmware sulla stampante." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -604,7 +604,7 @@ msgstr "Nuovo firmware %s disponibile" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Modalità di aggiornamento" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -639,7 +639,7 @@ msgstr "Errore durante l'avvio di %s!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Vista simulazione" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -649,7 +649,7 @@ msgstr "Cura non visualizza in modo accurato gli strati se la funzione Wire Prin #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Vista simulazione" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -730,7 +730,7 @@ msgstr "Impossibile eseguire il sezionamento con le impostazioni attuali. Le seg #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Impossibile eseguire il sezionamento a causa di alcune impostazioni per modello. Le seguenti impostazioni presentano errori su uno o più modelli: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -765,25 +765,25 @@ msgstr "Configura impostazioni per modello" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Installazione" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Impossibile copiare i file di plugin Siemens NX. Controllare UGII_USER_DIR. Non è assegnato ad alcuna directory." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Installato correttamente plugin Siemens NX Cura." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Impossibile copiare i file di plugin Siemens NX. Controllare UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Impossibile installare plugin Siemens NX. Impossibile impostare la variabile di ambiente UGII_USER_DIR per Siemens NX." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -946,7 +946,7 @@ msgstr "Altro" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Sconosciuto" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1011,12 +1011,12 @@ msgstr "Materiale personalizzato" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Globale" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Non sottoposto a override" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1065,7 +1065,7 @@ msgstr "Profilo esportato su {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "Esportazione riuscita" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1137,85 +1137,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    Si è verificata un'eccezione irreversibile. Si prega di inviarci questo crash report per risolvere il problema

    \n

    Utilizzare il pulsante \"Invia report\" per inviare un report sui bug automaticamente ai nostri server

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Informazioni di sistema" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Sconosciuto" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Versione Cura: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Piattaforma: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Versione Qt: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "Versione PyQt: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • Versione OpenGL: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • Fornitore OpenGL: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • Renderer OpenGL: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Analisi eccezione" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Registri" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Descrizione utente" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Invia report" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1253,7 +1253,7 @@ msgstr "Impossibile aprire altri file durante il caricamento del codice G. Impor #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Il modello selezionato è troppo piccolo per il caricamento." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1514,10 +1514,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1631,7 +1628,7 @@ msgstr "%1 non è configurata per supportare la connessione di un gruppo di stam #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/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/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1666,7 +1663,7 @@ msgstr "Persa connessione con la stampante" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Disabilitato" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1681,12 +1678,12 @@ msgstr "Terminato" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "In pausa" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Ripresa" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1828,12 +1825,12 @@ msgstr "Tipo di linea" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Velocità" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Spessore strato" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1883,12 +1880,12 @@ msgstr "Parete interna" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "min." #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "max." #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 su %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Il caricamento di un progetto annulla tutti i modelli sul piano di stampa." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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 "Questo plugin contiene 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" @@ -2184,7 +2181,7 @@ msgstr "Non accetto" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Contratto di licenza" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "Informazioni su Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "versione: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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" @@ -3166,7 +3159,7 @@ msgstr "Libreria ritaglio poligono" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Libreria Python HTTP" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "Profilo:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Nessun profilo disponibile" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Indicazione del tempo
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Indicazione di costo" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Totale:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3461,27 +3440,27 @@ msgstr "Riscalda il piano prima della stampa. È possibile continuare a regolare #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Comando stampante" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Posizione Jog" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Distanza Jog" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3526,7 +3505,7 @@ msgstr "E&sci" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Ripristina la posizione della telecamera" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3768,7 +3747,7 @@ msgstr "Importa tutto come modelli" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3925,7 +3904,7 @@ msgstr "Altezza dello strato" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Un profilo personalizzato è attualmente attivo. Per attivare il cursore qualità, selezionare un profilo di qualità predefinito nella scheda Personalizza" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3945,7 +3924,7 @@ msgstr "Più veloce" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Sono state modificate alcune impostazioni del profilo. Per modificarle, andare alla modalità personalizzata." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4037,7 +4016,7 @@ msgstr "Materiale" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Controllo compatibilità" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4177,12 +4156,12 @@ msgstr "Integrazione SolidWorks" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Fornisce la vista di simulazione." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Vista simulazione" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4267,12 +4246,12 @@ msgstr "Aggiornamento della versione da 2.7 a 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Aggiorna le configurazioni da Cura 3.0 a Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Aggiornamento della versione da 3.0 a 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4337,12 +4316,12 @@ msgstr "Utilità impostazioni per modello" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Consente di installare un pulsante 'Esporta in Cura' in Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Integrazione Siemens NX" #: 3MFReader/plugin.json msgctxt "description" @@ -4407,12 +4386,12 @@ msgstr "Writer 3MF" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Chiedere una volta all'utente se accetta la nostra licenza" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "Contratto di licenza" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4454,13 +4433,13 @@ msgstr "Lettore profilo Cura" #~ 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 "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." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Visualizzazione strato" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Visualizzazione strato" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Visualizzazione strato" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Visualizzazione strato" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4562,9 +4541,9 @@ msgstr "Lettore profilo Cura" #~ msgid "Provides the Layer view." #~ msgstr "Fornisce la visualizzazione degli strati." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Visualizzazione strato" +msgctxt "name" +msgid "Layer View" +msgstr "Visualizzazione strato" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4885,9 +4864,9 @@ msgstr "Lettore profilo Cura" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Fornisce supporto per l'importazione di profili da file G-Code." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Visualizzazione strato" +msgctxt "@label" +msgid "Layer View" +msgstr "Visualizzazione strato" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/it_IT/fdmextruder.def.json.po b/resources/i18n/it_IT/fdmextruder.def.json.po index bfb6ef876b..ec3c8051cf 100644 --- a/resources/i18n/it_IT/fdmextruder.def.json.po +++ b/resources/i18n/it_IT/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-11 14:31+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Italian\n" "Language: it_IT\n" diff --git a/resources/i18n/it_IT/fdmprinter.def.json.po b/resources/i18n/it_IT/fdmprinter.def.json.po index 112065dc28..5fb7743130 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\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" @@ -612,27 +608,27 @@ msgstr "Indica l’altezza dello strato iniziale in mm. Uno strato iniziale più #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Tolleranza di sezionamento" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Modalità di sezionamento di strati con superfici diagonali. Le aree di uno strato possono essere generate in base al punto in cui la parte intermedia dello strato interseca la superficie (intermedia). In alternativa le aree di ciascuno strato possono ricadere all'interno del volume per tutta l'altezza dello strato (Esclusiva) ovvero possono cadere in qualsiasi punto all'interno dello strato (Inclusiva). La tolleranza esclusiva mantiene il maggior numero di dettagli, la tolleranza inclusiva è la più idonea, mentre la tolleranza intermedia richiede il minor tempo di processo." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Intermedia" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Esclusiva" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inclusiva" #: fdmprinter.def.json msgctxt "line_width label" @@ -807,7 +803,7 @@ msgstr "Treno estrusore utilizzato per stampare la parete esterna. Si utilizza n #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Estrusore parete interna" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1387,7 +1383,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, tri-hexagon, cubic, octet, quarter cubic, cross 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 a zig zag cambia direzione su strati alternati, riducendo il costo del materiale. Le configurazioni a griglia, a triangolo, tri-esagonali, cubiche, ottagonali, a quarto di cubo, incrociate e concentriche sono stampate completamente su ogni strato. Le configurazioni cubiche, a quarto di cubo e ottagonali variano per ciascuno strato per garantire una più uniforme distribuzione della forza in ogni direzione." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1407,7 +1403,7 @@ msgstr "Triangoli" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Tri-esagonale" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1462,7 +1458,7 @@ 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 line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Collegare le estremità nel punto in cui il riempimento incontra la parete interna utilizzando una linea che segue la forma della parete interna. L'abilitazione di questa impostazione può far meglio aderire il riempimento alle pareti riducendo nel contempo gli effetti del riempimento sulla qualità delle superfici verticali. La disabilitazione di questa impostazione consente di ridurre la quantità di materiale utilizzato." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1477,22 +1473,22 @@ msgstr "Un elenco di direzioni linee intere. Gli elementi dall’elenco sono uti #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Offset X riempimento" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Il riempimento si scosta di questa distanza lungo l'asse X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Offset Y riempimento" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Il riempimento si scosta di questa distanza lungo l'asse Y." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1807,22 +1803,22 @@ msgstr "Regolare il diametro del filamento utilizzato. Abbinare questo valore al #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Tendenza di adesione" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Tendenza di adesione superficiale." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Energia superficiale" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Energia superficiale." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3554,7 +3550,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 "" +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" @@ -3614,7 +3610,7 @@ msgstr "Smoothing raft" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -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" @@ -4089,12 +4085,12 @@ msgstr "Di norma Cura cerca di \"ricucire\" piccoli fori nella maglia e di rimuo #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Risoluzione massima" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "La dimensione minima di un segmento di linea dopo il sezionamento. Se tale dimensione aumenta, la maglia avrà una risoluzione inferiore. Questo può consentire alla stampante di mantenere la velocità per processare il g-code ed aumenterà la velocità di sezionamento eliminando i dettagli della maglia che non è comunque in grado di processare." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4129,12 +4125,12 @@ msgstr "Selezionare quali volumi di intersezione maglie appartengono a ciascuno #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Rimuovere i primi strati vuoti" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Rimuovere gli strati vuoti sotto il primo strato stampato, se presenti. La disabilitazione di questa impostazione può provocare la presenza di primi strati vuoti, se l'impostazione di Tolleranza di sezionamento è impostata su Esclusiva o Intermedia." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4664,22 +4660,22 @@ msgstr "Indica la distanza media tra i punti casuali introdotti su ciascun segme #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Offset massimo dell'estrusione di compensazione del flusso" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "La massima distanza in mm da compensare." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Fattore di compensazione del flusso" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "Il fattore di moltiplicazione per il flusso -> traslazione distanza." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4831,9 +4827,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" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index 329a844eb0..01b39b3229 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-11-17 15:52+0100\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: \n" "Language-Team: TEAM\n" "Language: xx_XX\n" @@ -93,7 +93,7 @@ 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" @@ -145,7 +145,7 @@ msgstr "新しいプリントジョブをはじめることができません。 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "プリンターが利用できません" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -597,7 +597,7 @@ msgstr "ネットワーク上にて接続" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "{machine_name} で利用可能な新しい機能があります。プリンターのファームウェアをアップデートしてください。" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -608,7 +608,7 @@ msgstr "新しい利用可能な%sファームウェアのアップデートが #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "アップデートの仕方" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -643,7 +643,7 @@ msgstr "%sを開始中にエラーが発生" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "シミュレーションビュー" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -653,7 +653,7 @@ msgstr "Curaはワイヤープリンティング設定中には正確にレイ #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "シミュレーションビュー" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -734,7 +734,7 @@ msgstr "現在の設定でスライスが完了できません。以下の設定 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "モデル別の設定があるためスライスできません。1つまたは複数のモデルで以下の設定にエラーが発生しました:{error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -769,25 +769,25 @@ msgstr "各モデル構成設定" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "インストール" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Siemens NXプラグインファイルのコピーに失敗しました。UGII_USER_DIRを確認してください。ディレクトリに割り当てられていません。" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Siemens NX Curaプラグインを正常にインストールしました。" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Siemens NXプラグインファイルのコピーに失敗しました。UGII_USER_DIRを確認してください。" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Siemens NXプラグインのインストールに失敗しました。Siemens NX用の環境変数UGII_USER_DIRが設定できませんでした。" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -950,7 +950,7 @@ msgstr "他" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "不明" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1015,12 +1015,12 @@ msgstr "カスタムフィラメント" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "グローバル" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "上書きできません" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1069,7 +1069,7 @@ msgstr "{0}にプロファイルを書き出しました。 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "書き出し完了" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1141,85 +1141,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    致命的な例外が発生しました。問題解決のためこのクラッシュレポートを送信してください

    \n

    「レポート送信」ボタンを使用してバグレポートが自動的にサーバーに送られるようにしてください

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "システム情報" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "不明" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Curaバージョン: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "プラットフォーム: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Qtバージョン: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "PyQtバージョン: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • OpenGLバージョン: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • OpenGLベンダー: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGLレンダラー: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "例外トレースバック" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "ログ" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "ユーザー詳細" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "レポート送信" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1257,7 +1257,7 @@ msgstr "G-codeを読み込み中は他のファイルを開くことができま #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "選択したモデルは読み込むのに小さすぎます。" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1632,7 +1632,7 @@ msgstr "%1は、繋がっているUltimaker3プリンターのグループをホ #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "デフォルトのウェブブラウザで印刷ジョブページを開きます。" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1667,7 +1667,7 @@ msgstr "プリンターへの接続が切断されました。" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "無効" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1682,12 +1682,12 @@ msgstr "終了" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "一時停止" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "再開" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1829,12 +1829,12 @@ msgstr "ラインタイプ" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "送り速度" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "レイヤーの厚さ" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1884,12 +1884,12 @@ msgstr "インナーウォール" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "最小" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "最大" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2129,7 +2129,7 @@ msgstr "%2のうち%1" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "プロジェクトを読み込むとビルドプレート上のすべてのモデルがクリアされます。" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2172,7 +2172,7 @@ msgid "" "This 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" @@ -2187,7 +2187,7 @@ msgstr "拒否する" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "ユーザー用使用許諾契約" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -3071,7 +3071,7 @@ msgstr "Curaについて" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "バージョン: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3168,7 +3168,7 @@ msgstr "ポリゴンクリッピングライブラリー" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Python HTTPライブラリー" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3188,7 +3188,7 @@ msgstr "プロファイル:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "利用可能なプロファイルがありません" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3196,9 +3196,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" -"プロファイルマネージャーをクリックして開いてください。" +msgstr "いくらかの設定プロファイルにある値とことなる場合無効にします。\nプロファイルマネージャーをクリックして開いてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:152 msgctxt "@label:textbox" @@ -3236,9 +3234,7 @@ msgid "" "Some hidden settings use values different from their normal calculated value.\n" "\n" "Click to make these settings visible." -msgstr "" -"いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n" -"表示されるようにクリックしてください。" +msgstr "いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n表示されるようにクリックしてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 msgctxt "@label Header for list of settings." @@ -3266,9 +3262,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" -"プロファイルの値を戻すためにクリックしてください。" +msgstr "この設定にプロファイルと異なった値があります。\nプロファイルの値を戻すためにクリックしてください。" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 msgctxt "@label" @@ -3276,9 +3270,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" -"計算された値に変更するためにクリックを押してください。" +msgstr "このセッティングは通常計算されます、今は絶対値に固定されています。\n計算された値に変更するためにクリックを押してください。" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:120 msgctxt "@label:listbox" @@ -3290,51 +3282,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00時間 00分" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "時間仕様
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "コスト仕様" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "合計:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3366,14 +3356,14 @@ msgstr "自動選択: %1" msgctxt "@label" msgid "Print Selected Model With:" msgid_plural "Print Selected Models With:" -msgstr[0] "" +msgstr[0] "選択したモデルで印刷:" # can’t eneter japanese texts #: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:83 msgctxt "@title:window" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" -msgstr[0] "" +msgstr[0] "選択した複数のモデル" #: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:108 msgctxt "@label" @@ -3459,27 +3449,27 @@ msgstr "プリント開始前にベッドを加熱します。加熱中もプリ #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "プリンターコントロール" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "ジョグの位置" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "ジョグの距離" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3524,7 +3514,7 @@ msgstr "&やめる" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&カメラ位置のリセット" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3586,21 +3576,21 @@ msgstr "アバウト..." msgctxt "@action:inmenu menubar:edit" msgid "Delete &Selected Model" msgid_plural "Delete &Selected Models" -msgstr[0] "" +msgstr[0] "&選択したモデルを削除" # can’t enter japanese text #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:208 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" -msgstr[0] "" +msgstr[0] "選択したモデルを中央に移動" # can’t edit japanese text #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" -msgstr[0] "" +msgstr[0] "選択した複数のモデル" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 msgctxt "@action:inmenu" @@ -3766,7 +3756,7 @@ msgstr "すべてをモデルとして取り入れる" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3923,7 +3913,7 @@ msgstr "レイヤーの高さ" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "カスタムプロファイルが有効になっています。品質スライダーを有効にするには、カスタムタブでデフォルトの品質プロファイルを選択してください" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3943,7 +3933,7 @@ msgstr "早く" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "プロファイルの設定がいくつか変更されました。変更を有効にするにはカスタムモードに移動してください。" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4035,7 +4025,7 @@ msgstr "フィラメント" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "互換性の確認" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4175,12 +4165,12 @@ msgstr "ソリッドワークスインタグレーション" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "シミュレーションビューを提供します。" #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "シミュレーションビュー" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4265,12 +4255,12 @@ msgstr "2.7から3.0にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Cura 3.0からCura 3.1のコンフィグレーションアップグレート" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "3.0から3.1にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4335,12 +4325,12 @@ msgstr "各モデル設定ツール" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Siemens NXの「Curaにエクスポート」ボタンをインストールできるようにします。" #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4405,12 +4395,12 @@ msgstr "3MFリーダー" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "ライセンスに同意するかどうかユーザーに1回だけ確認する" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4452,13 +4442,13 @@ msgstr "Curaプロファイルリーダー" #~ 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 "{machine_name}が最新の機能を得るために、定期的にファームウェアをアップデートすることをお勧めします。{machine_name}(ネットワーク上で接続)またはUSBにて行ってください。 " -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "レイヤービュー" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "レイヤービュー" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "レイヤービュー" +msgctxt "@info:title" +msgid "Layer View" +msgstr "レイヤービュー" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4560,6 +4550,6 @@ msgstr "Curaプロファイルリーダー" #~ msgid "Provides the Layer view." #~ msgstr "レイヤービューを供給する" -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "レイヤービュー" +msgctxt "name" +msgid "Layer View" +msgstr "レイヤービュー" diff --git a/resources/i18n/ja_JP/fdmextruder.def.json.po b/resources/i18n/ja_JP/fdmextruder.def.json.po index 392cde1aad..d1ff38fcf2 100644 --- a/resources/i18n/ja_JP/fdmextruder.def.json.po +++ b/resources/i18n/ja_JP/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-10-02 17:55+0900\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Brule\n" "Language-Team: Brule\n" "Language: ja_JP\n" diff --git a/resources/i18n/ja_JP/fdmprinter.def.json.po b/resources/i18n/ja_JP/fdmprinter.def.json.po index 235b9ef64e..56ba768bc9 100644 --- a/resources/i18n/ja_JP/fdmprinter.def.json.po +++ b/resources/i18n/ja_JP/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-10-04 14:30+0900\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Brule\n" "Language-Team: Brule\n" "Language: ja_JP\n" @@ -21,7 +21,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "machine_settings label" msgid "Machine" -msgstr "" +msgstr "プリンター" # msgstr "プリンター" #: fdmprinter.def.json @@ -32,7 +32,7 @@ msgstr "プリンター詳細設定" #: fdmprinter.def.json msgctxt "machine_name label" msgid "Machine Type" -msgstr "" +msgstr "プリンターのタイプ" # msgstr "プリンタータイプ" #: fdmprinter.def.json @@ -43,7 +43,7 @@ msgstr "3Dプリンターの機種名" #: fdmprinter.def.json msgctxt "machine_show_variants label" msgid "Show Machine Variants" -msgstr "" +msgstr "プリンターのバリエーションの表示" # msgstr "プリンターのバリエーションを表示する" #: fdmprinter.def.json @@ -54,7 +54,7 @@ msgstr "このプリンターのバリエーションを表示するかどうか #: fdmprinter.def.json msgctxt "machine_start_gcode label" msgid "Start GCode" -msgstr "" +msgstr "GCode開始" # msgstr "GCodeを開始する" #: fdmprinter.def.json @@ -62,14 +62,12 @@ msgctxt "machine_start_gcode description" msgid "" "Gcode commands to be executed at the very start - separated by \n" "." -msgstr "" -"Gcodeのコマンドは −で始まり\n" -"で区切られます。" +msgstr "Gcodeのコマンドは −で始まり\nで区切られます。" #: fdmprinter.def.json msgctxt "machine_end_gcode label" msgid "End GCode" -msgstr "" +msgstr "GCode終了" # msgstr "GCodeを終了する" #: fdmprinter.def.json @@ -77,14 +75,12 @@ msgctxt "machine_end_gcode description" msgid "" "Gcode commands to be executed at the very end - separated by \n" "." -msgstr "" -"Gcodeのコマンドは −で始まり\n" -"で区切られます。" +msgstr "Gcodeのコマンドは −で始まり\nで区切られます。" #: fdmprinter.def.json msgctxt "material_guid label" msgid "Material GUID" -msgstr "" +msgstr "マテリアルGUID" # msgstr "マテリアルGUID" #: fdmprinter.def.json @@ -95,7 +91,7 @@ msgstr "マテリアルのGUID。これは自動的に設定されます。" #: fdmprinter.def.json msgctxt "material_bed_temp_wait label" msgid "Wait for Build Plate Heatup" -msgstr "" +msgstr "ビルドプレート加熱待ち時間" # msgstr "ビルドプレート加熱の待機" #: fdmprinter.def.json @@ -106,7 +102,7 @@ msgstr "開始時にビルドプレートが温度に達するまで待つコマ #: fdmprinter.def.json msgctxt "material_print_temp_wait label" msgid "Wait for Nozzle Heatup" -msgstr "" +msgstr "ノズル加熱待ち時間" # msgstr "ノズル加熱の待機" #: fdmprinter.def.json @@ -117,7 +113,7 @@ msgstr "開始時にノズルの温度が達するまで待つかどうか。" #: fdmprinter.def.json msgctxt "material_print_temp_prepend label" msgid "Include Material Temperatures" -msgstr "" +msgstr "マテリアル温度を含む" # msgstr "マテリアル温度を含む" #: fdmprinter.def.json @@ -128,7 +124,7 @@ msgstr "GCodeの開始時にノズル温度設定を含めるかどうか。 既 #: fdmprinter.def.json msgctxt "material_bed_temp_prepend label" msgid "Include Build Plate Temperature" -msgstr "" +msgstr "ビルドプレート温度を含む" # msgstr "ビルドプレートの温度を含める" #: fdmprinter.def.json @@ -139,7 +135,7 @@ msgstr "GCodeの開始時にビルドプレート温度設定を含めるかど #: fdmprinter.def.json msgctxt "machine_width label" msgid "Machine Width" -msgstr "" +msgstr "プリンターの幅" # msgstr "プリンターの幅" #: fdmprinter.def.json @@ -150,7 +146,7 @@ msgstr "造形可能領域の幅(X方向)。" #: fdmprinter.def.json msgctxt "machine_depth label" msgid "Machine Depth" -msgstr "" +msgstr "プリンターの奥行" # msgstr "プリンターの奥行き" #: fdmprinter.def.json @@ -161,7 +157,7 @@ msgstr "造形可能領域の幅(Y方向)。" #: fdmprinter.def.json msgctxt "machine_shape label" msgid "Build Plate Shape" -msgstr "" +msgstr "ビルドプレートの形状" # msgstr "ビルドプレートの形" #: fdmprinter.def.json @@ -172,19 +168,19 @@ msgstr "造形不可領域を考慮しないビルドプレートの形状。" #: fdmprinter.def.json msgctxt "machine_shape option rectangular" msgid "Rectangular" -msgstr "" +msgstr "長方形" # msgstr "長方形" #: fdmprinter.def.json msgctxt "machine_shape option elliptic" msgid "Elliptic" -msgstr "" +msgstr "楕円形" # msgstr "楕円形" #: fdmprinter.def.json msgctxt "machine_height label" msgid "Machine Height" -msgstr "" +msgstr "プリンターの高さ" # msgstr "プリンターの高さ" #: fdmprinter.def.json @@ -195,7 +191,7 @@ msgstr "造形可能領域の幅(Z方向)。" #: fdmprinter.def.json msgctxt "machine_heated_bed label" msgid "Has Heated Build Plate" -msgstr "" +msgstr "加熱式ビルドプレートあり" # msgstr "加熱したビルドプレート" #: fdmprinter.def.json @@ -206,7 +202,7 @@ msgstr "プリンターに加熱式ビルドプレートが付属しているか #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" -msgstr "" +msgstr "中心位置" # msgstr "センター原点" #: fdmprinter.def.json @@ -217,7 +213,7 @@ msgstr "プリンタのゼロポジションのX / Y座標が印刷可能領域 #: fdmprinter.def.json msgctxt "machine_extruder_count label" msgid "Number of Extruders" -msgstr "" +msgstr "エクストルーダーの数" # msgstr "エクストルーダーの数" #: fdmprinter.def.json @@ -228,7 +224,7 @@ msgstr "エクストルーダーの数。エクストルーダーの単位は、 #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer nozzle diameter" -msgstr "" +msgstr "ノズル外径" # msgstr "ノズル外径" #: fdmprinter.def.json @@ -239,7 +235,7 @@ msgstr "ノズルの外径。" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle length" -msgstr "" +msgstr "ノズル長さ" # msgstr "ノズルの長さ" #: fdmprinter.def.json @@ -250,7 +246,7 @@ msgstr "ノズル先端とプリントヘッドの最下部との高さの差。 #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle angle" -msgstr "" +msgstr "ノズル角度" # msgstr "ノズル角度" #: fdmprinter.def.json @@ -261,7 +257,7 @@ msgstr "水平面とノズル直上の円錐部分との間の角度。" #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat zone length" -msgstr "" +msgstr "ノズル加熱長さ" # msgstr "加熱範囲" #: fdmprinter.def.json @@ -272,7 +268,7 @@ msgstr "ノズルからの熱がフィラメントに伝達される距離。" #: fdmprinter.def.json msgctxt "machine_filament_park_distance label" msgid "Filament Park Distance" -msgstr "" +msgstr "フィラメント留め位置" #: fdmprinter.def.json msgctxt "machine_filament_park_distance description" @@ -282,7 +278,7 @@ msgstr "エクストルーダーが使用していない時、フィラメント #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled label" msgid "Enable Nozzle Temperature Control" -msgstr "" +msgstr "ノズルの温度管理を有効にする" #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled description" @@ -292,7 +288,7 @@ msgstr "Curaから温度を制御するかどうか。これをオフにして #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat up speed" -msgstr "" +msgstr "加熱速度" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -302,7 +298,7 @@ msgstr "ノズルが加熱する速度(℃/ s)は、通常の印刷時温度 #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool down speed" -msgstr "" +msgstr "冷却速度" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -312,7 +308,7 @@ msgstr "ノズルが冷却される速度(℃/ s)は、通常の印刷温度 #: fdmprinter.def.json msgctxt "machine_min_cool_heat_time_window label" msgid "Minimal Time Standby Temperature" -msgstr "" +msgstr "スタンバイ温度までの最短時間" #: fdmprinter.def.json msgctxt "machine_min_cool_heat_time_window description" @@ -322,7 +318,7 @@ msgstr "ノズルが冷却される前にエクストルーダーが静止しな #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" msgid "Gcode flavour" -msgstr "" +msgstr "Gcodeフレーバー" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -332,60 +328,60 @@ msgstr "生成するGコードの種類" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option RepRap (Marlin/Sprinter)" msgid "Marlin" -msgstr "" +msgstr "Marlin" # msgstr "Marlin" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option RepRap (Volumetric)" msgid "Marlin (Volumetric)" -msgstr "" +msgstr "Marlin (Volumetric)" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option RepRap (RepRap)" msgid "RepRap" -msgstr "" +msgstr "RepRap" # msgstr "RepRap" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option UltiGCode" msgid "Ultimaker 2" -msgstr "" +msgstr "Ultimaker 2" # msgstr "Ultimaker 2" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option Griffin" msgid "Griffin" -msgstr "" +msgstr "Griffin" # msgstr "Griffin" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option Makerbot" msgid "Makerbot" -msgstr "" +msgstr "Makerbot" # msgstr "Makerbot" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option BFB" msgid "Bits from Bytes" -msgstr "" +msgstr "Bits from Bytes" # msgstr "Bits from Bytes" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option MACH3" msgid "Mach3" -msgstr "" +msgstr "Mach3" # msgstr "Mach3" #: fdmprinter.def.json msgctxt "machine_gcode_flavor option Repetier" msgid "Repetier" -msgstr "" +msgstr "Repetier" # msgstr "Repetier" #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed areas" -msgstr "" +msgstr "拒否エリア" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -395,7 +391,7 @@ msgstr "プリントヘッドの領域を持つポリゴンのリストは入力 #: fdmprinter.def.json msgctxt "nozzle_disallowed_areas label" msgid "Nozzle Disallowed Areas" -msgstr "" +msgstr "ノズル拒否エリア" #: fdmprinter.def.json msgctxt "nozzle_disallowed_areas description" @@ -405,7 +401,7 @@ msgstr "ノズルが入ることができない領域を持つポリゴンのリ #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine head polygon" -msgstr "" +msgstr "プリントヘッドポリゴン" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -415,7 +411,7 @@ msgstr "プリントヘッドの2Dシルエット(ファンキャップは除 #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine head & Fan polygon" -msgstr "" +msgstr "プリントヘッドとファンポリゴン" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -425,7 +421,7 @@ msgstr "プリントヘッドの2Dシルエット(ファンキャップが含 #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry height" -msgstr "" +msgstr "ガントリー高さ" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -435,7 +431,7 @@ msgstr "ノズルの先端とガントリーシステムの高さの差(X軸 #: fdmprinter.def.json msgctxt "machine_nozzle_id label" msgid "Nozzle ID" -msgstr "" +msgstr "ノズルID" # msgstr "ノズル ID" #: fdmprinter.def.json @@ -446,7 +442,7 @@ msgstr "\"AA 0.4\"や\"BB 0.8\"などのノズルID" #: fdmprinter.def.json msgctxt "machine_nozzle_size label" msgid "Nozzle Diameter" -msgstr "" +msgstr "ノズル内径" #: fdmprinter.def.json msgctxt "machine_nozzle_size description" @@ -456,7 +452,7 @@ msgstr "ノズルの内径。標準以外のノズルを使用する場合は、 #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset With Extruder" -msgstr "" +msgstr "エクストルーダーのオフセット" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -466,7 +462,7 @@ msgstr "エクストルーダーのオフセットを座標システムに適用 #: fdmprinter.def.json msgctxt "extruder_prime_pos_z label" msgid "Extruder Prime Z Position" -msgstr "" +msgstr "エクストルーダーのZ座標" #: fdmprinter.def.json msgctxt "extruder_prime_pos_z description" @@ -476,7 +472,7 @@ msgstr "印刷開始時にノズルがポジションを確認するZ座標。" #: fdmprinter.def.json msgctxt "extruder_prime_pos_abs label" msgid "Absolute Extruder Prime Position" -msgstr "" +msgstr "エクストルーダーの絶対位置" #: fdmprinter.def.json msgctxt "extruder_prime_pos_abs description" @@ -486,7 +482,7 @@ msgstr "最後のヘッドの既知位置からではなく、エクストルー #: fdmprinter.def.json msgctxt "machine_max_feedrate_x label" msgid "Maximum Speed X" -msgstr "" +msgstr "最大速度X" #: fdmprinter.def.json msgctxt "machine_max_feedrate_x description" @@ -496,7 +492,7 @@ msgstr "X方向のモーターの最大速度。" #: fdmprinter.def.json msgctxt "machine_max_feedrate_y label" msgid "Maximum Speed Y" -msgstr "" +msgstr "最大速度Y" #: fdmprinter.def.json msgctxt "machine_max_feedrate_y description" @@ -506,7 +502,7 @@ msgstr "Y方向のモーターの最大速度。" #: fdmprinter.def.json msgctxt "machine_max_feedrate_z label" msgid "Maximum Speed Z" -msgstr "" +msgstr "最大速度Z" #: fdmprinter.def.json msgctxt "machine_max_feedrate_z description" @@ -516,7 +512,7 @@ msgstr "Z方向のモーターの最大速度。" #: fdmprinter.def.json msgctxt "machine_max_feedrate_e label" msgid "Maximum Feedrate" -msgstr "" +msgstr "最大送り速度" #: fdmprinter.def.json msgctxt "machine_max_feedrate_e description" @@ -526,7 +522,7 @@ msgstr "フィラメントの最大速度。" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x label" msgid "Maximum Acceleration X" -msgstr "" +msgstr "最大加速度X" #: fdmprinter.def.json msgctxt "machine_max_acceleration_x description" @@ -536,7 +532,7 @@ msgstr "X方向のモーターの最大速度。" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y label" msgid "Maximum Acceleration Y" -msgstr "" +msgstr "最大加速度Y" #: fdmprinter.def.json msgctxt "machine_max_acceleration_y description" @@ -546,7 +542,7 @@ msgstr "Y方向のモーターの最大加速度。" #: fdmprinter.def.json msgctxt "machine_max_acceleration_z label" msgid "Maximum Acceleration Z" -msgstr "" +msgstr "最大加速度Z" #: fdmprinter.def.json msgctxt "machine_max_acceleration_z description" @@ -556,7 +552,7 @@ msgstr "Z方向のモーターの最大加速度。" #: fdmprinter.def.json msgctxt "machine_max_acceleration_e label" msgid "Maximum Filament Acceleration" -msgstr "" +msgstr "フィラメント最大加速度" #: fdmprinter.def.json msgctxt "machine_max_acceleration_e description" @@ -566,7 +562,7 @@ msgstr "フィラメントのモーターの最大加速度。" #: fdmprinter.def.json msgctxt "machine_acceleration label" msgid "Default Acceleration" -msgstr "" +msgstr "デフォルト加速度" #: fdmprinter.def.json msgctxt "machine_acceleration description" @@ -576,7 +572,7 @@ msgstr "プリントヘッド移動のデフォルトの加速度。" #: fdmprinter.def.json msgctxt "machine_max_jerk_xy label" msgid "Default X-Y Jerk" -msgstr "" +msgstr "X-Yデフォルトジャーク" #: fdmprinter.def.json msgctxt "machine_max_jerk_xy description" @@ -586,7 +582,7 @@ msgstr "水平面内での移動のデフォルトジャーク。" #: fdmprinter.def.json msgctxt "machine_max_jerk_z label" msgid "Default Z Jerk" -msgstr "" +msgstr "Zデフォルトジャーク" #: fdmprinter.def.json msgctxt "machine_max_jerk_z description" @@ -596,7 +592,7 @@ msgstr "Z方向のモーターのデフォルトジャーク。" #: fdmprinter.def.json msgctxt "machine_max_jerk_e label" msgid "Default Filament Jerk" -msgstr "" +msgstr "フィラメントデフォルトジャーク" #: fdmprinter.def.json msgctxt "machine_max_jerk_e description" @@ -606,7 +602,7 @@ msgstr "フィラメントのモーターのデフォルトジャーク。" #: fdmprinter.def.json msgctxt "machine_minimum_feedrate label" msgid "Minimum Feedrate" -msgstr "" +msgstr "最小送り速度" #: fdmprinter.def.json msgctxt "machine_minimum_feedrate description" @@ -616,7 +612,7 @@ msgstr "プリントヘッドの最小移動速度。" #: fdmprinter.def.json msgctxt "resolution label" msgid "Quality" -msgstr "" +msgstr "品質" # msgstr "品質" #: fdmprinter.def.json @@ -627,7 +623,7 @@ msgstr "プリントの解像度に影響を与えるすべての設定。これ #: fdmprinter.def.json msgctxt "layer_height label" msgid "Layer Height" -msgstr "" +msgstr "レイヤー高さ" # msgstr "積層ピッチ" #: fdmprinter.def.json @@ -638,7 +634,7 @@ msgstr "各レイヤーの高さ(mm)。値を大きくすると早く印刷 #: fdmprinter.def.json msgctxt "layer_height_0 label" msgid "Initial Layer Height" -msgstr "" +msgstr "初期レイヤー高さ" #: fdmprinter.def.json msgctxt "layer_height_0 description" @@ -648,32 +644,32 @@ msgstr "初期レイヤーの高さ(mm)。厚い初期層はビルドプレ #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "スライス公差" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "表面を斜めにスライスする方法を指定します。レイヤーの領域は、レイヤーの中央がサーフェス(中央)と交差する位置に基づいて生成できます。また、各層は、レイヤーの高さを通してボリュームの内側に収まる領域を持つ(排他)か、またはレイヤー内の任意の場所内に収まる領域を持っています(包括)。排他は最も細かく、包括は最もフィットし、中間は時間がかかります。" #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "中間" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "排他" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "包括" #: fdmprinter.def.json msgctxt "line_width label" msgid "Line Width" -msgstr "" +msgstr "ライン幅" #: fdmprinter.def.json msgctxt "line_width description" @@ -683,7 +679,7 @@ msgstr "1ラインの幅。一般に、各ラインの幅は、ノズルの幅 #: fdmprinter.def.json msgctxt "wall_line_width label" msgid "Wall Line Width" -msgstr "" +msgstr "ウォールライン幅" #: fdmprinter.def.json msgctxt "wall_line_width description" @@ -693,7 +689,7 @@ msgstr "ウォールラインの幅。" #: fdmprinter.def.json msgctxt "wall_line_width_0 label" msgid "Outer Wall Line Width" -msgstr "" +msgstr "外側ウォールライン幅" #: fdmprinter.def.json msgctxt "wall_line_width_0 description" @@ -703,7 +699,7 @@ msgstr "最も外側のウォールラインの幅。この値を下げると、 #: fdmprinter.def.json msgctxt "wall_line_width_x label" msgid "Inner Wall(s) Line Width" -msgstr "" +msgstr "内側ウォールライン幅" #: fdmprinter.def.json msgctxt "wall_line_width_x description" @@ -713,7 +709,7 @@ msgstr "一番外側のウォールラインを除くすべてのウォールラ #: fdmprinter.def.json msgctxt "roofing_line_width label" msgid "Top Surface Skin Line Width" -msgstr "" +msgstr "最上面のライン幅" # msgstr "上表面スキンの線幅" #: fdmprinter.def.json @@ -724,7 +720,7 @@ msgstr "プリントの上部の 線の幅。" #: fdmprinter.def.json msgctxt "skin_line_width label" msgid "Top/Bottom Line Width" -msgstr "" +msgstr "上下面ライン幅" #: fdmprinter.def.json msgctxt "skin_line_width description" @@ -734,7 +730,7 @@ msgstr "上辺/底辺線のライン幅。" #: fdmprinter.def.json msgctxt "infill_line_width label" msgid "Infill Line Width" -msgstr "" +msgstr "インフィルラインの幅" #: fdmprinter.def.json msgctxt "infill_line_width description" @@ -744,7 +740,7 @@ msgstr "インフィル線の幅。" #: fdmprinter.def.json msgctxt "skirt_brim_line_width label" msgid "Skirt/Brim Line Width" -msgstr "" +msgstr "スカート/ブリムラインの幅" #: fdmprinter.def.json msgctxt "skirt_brim_line_width description" @@ -754,7 +750,7 @@ msgstr "単一のスカートまたはブリムラインの幅。" #: fdmprinter.def.json msgctxt "support_line_width label" msgid "Support Line Width" -msgstr "" +msgstr "サポートライン幅" #: fdmprinter.def.json msgctxt "support_line_width description" @@ -764,7 +760,7 @@ msgstr "単一のサポート構造のライン幅。" #: fdmprinter.def.json msgctxt "support_interface_line_width label" msgid "Support Interface Line Width" -msgstr "" +msgstr "サポート面のライン幅" #: fdmprinter.def.json msgctxt "support_interface_line_width description" @@ -774,7 +770,7 @@ msgstr "サポートのルーフ、フロアのライン幅" #: fdmprinter.def.json msgctxt "support_roof_line_width label" msgid "Support Roof Line Width" -msgstr "" +msgstr "サポートルーフのライン幅" # msgstr "サポートルーフライン幅" #: fdmprinter.def.json @@ -785,7 +781,7 @@ msgstr "サポートルーフのライン一幅。" #: fdmprinter.def.json msgctxt "support_bottom_line_width label" msgid "Support Floor Line Width" -msgstr "" +msgstr "サポートフロアのライン幅" # msgstr "サポートフロアライン幅" #: fdmprinter.def.json @@ -796,7 +792,7 @@ msgstr "サポートのフロアのラインの一幅。" #: fdmprinter.def.json msgctxt "prime_tower_line_width label" msgid "Prime Tower Line Width" -msgstr "" +msgstr "プライムタワーのライン幅" #: fdmprinter.def.json msgctxt "prime_tower_line_width description" @@ -806,7 +802,7 @@ msgstr "単一のプライムタワーラインの幅。" #: fdmprinter.def.json msgctxt "initial_layer_line_width_factor label" msgid "Initial Layer Line Width" -msgstr "" +msgstr "初期レイヤーのライン幅" # msgstr "初期レイヤー線幅" #: fdmprinter.def.json @@ -817,7 +813,7 @@ msgstr "最初のレイヤーに線幅の乗数です。この値を増やすと #: fdmprinter.def.json msgctxt "shell label" msgid "Shell" -msgstr "" +msgstr "外郭" # msgstr "外郭" #: fdmprinter.def.json @@ -828,7 +824,7 @@ msgstr "外郭" #: fdmprinter.def.json msgctxt "wall_extruder_nr label" msgid "Wall Extruder" -msgstr "" +msgstr "ウォールエクストルーダー" #: fdmprinter.def.json msgctxt "wall_extruder_nr description" @@ -838,7 +834,7 @@ msgstr "壁造形用のエクストルーダー。デュアルノズル印刷時 #: fdmprinter.def.json msgctxt "wall_0_extruder_nr label" msgid "Outer Wall Extruder" -msgstr "" +msgstr "外壁用エクストルーダー" # msgstr "外側印刷用エクストルーダー" #: fdmprinter.def.json @@ -849,7 +845,7 @@ msgstr "外壁印刷用のエクストルーダー。デュアルノズル印刷 #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "内壁用エクストルーダー" # msgstr "内側用エクストルーダー" #: fdmprinter.def.json @@ -860,7 +856,7 @@ msgstr "内壁印刷用のエクストルーダー。デュアルノズル印刷 #: fdmprinter.def.json msgctxt "wall_thickness label" msgid "Wall Thickness" -msgstr "" +msgstr "壁の厚さ" #: fdmprinter.def.json msgctxt "wall_thickness description" @@ -870,7 +866,7 @@ msgstr "壁の厚さ。この値をラインの幅で割ることで壁の数が #: fdmprinter.def.json msgctxt "wall_line_count label" msgid "Wall Line Count" -msgstr "" +msgstr "ウォールライン数" # msgstr "壁の線本数" #: fdmprinter.def.json @@ -881,7 +877,7 @@ msgstr "ウォールの数。厚さから計算された場合、この値は整 #: fdmprinter.def.json msgctxt "wall_0_wipe_dist label" msgid "Outer Wall Wipe Distance" -msgstr "" +msgstr "外壁移動距離" # msgstr "外壁のワイピング距離" #: fdmprinter.def.json @@ -892,7 +888,7 @@ msgstr "外壁の後に挿入された移動の距離はZシームをよりよ #: fdmprinter.def.json msgctxt "roofing_extruder_nr label" msgid "Top Surface Skin Extruder" -msgstr "" +msgstr "上部表面用エクストルーダー" # msgstr "上層表面スキンエクストルーダー" #: fdmprinter.def.json @@ -903,7 +899,7 @@ msgstr "上部の表面印刷用のエクストルーダー。デュアルノズ #: fdmprinter.def.json msgctxt "roofing_layer_count label" msgid "Top Surface Skin Layers" -msgstr "" +msgstr "上部表面レイヤー" # msgstr "上の表皮層" #: fdmprinter.def.json @@ -914,7 +910,7 @@ msgstr "上部表面のレイヤー数。通常一層で綺麗に出来上がり #: fdmprinter.def.json msgctxt "roofing_pattern label" msgid "Top Surface Skin Pattern" -msgstr "" +msgstr "上部表面パターン" # msgstr "上層表面スキンパターン" #: fdmprinter.def.json @@ -925,25 +921,25 @@ msgstr "上層のパターン" #: fdmprinter.def.json msgctxt "roofing_pattern option lines" msgid "Lines" -msgstr "" +msgstr "直線" # msgstr "線" #: fdmprinter.def.json msgctxt "roofing_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" # msgstr "同心" #: fdmprinter.def.json msgctxt "roofing_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" # msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "roofing_angles label" msgid "Top Surface Skin Line Directions" -msgstr "" +msgstr "最上面のラインの向き" # msgstr "上層表面スキンラインの方向" #: fdmprinter.def.json @@ -954,7 +950,7 @@ msgstr "トップ表面層に縦かジグザグパターンを利用する時に #: fdmprinter.def.json msgctxt "top_bottom_extruder_nr label" msgid "Top/Bottom Extruder" -msgstr "" +msgstr "上部/底面エクストルーダー" # msgstr "トップ/ボトムエクストルーダー" #: fdmprinter.def.json @@ -965,7 +961,7 @@ msgstr "上部と下部の表面を印刷する時に使われるエクストル #: fdmprinter.def.json msgctxt "top_bottom_thickness label" msgid "Top/Bottom Thickness" -msgstr "" +msgstr "上部/底面の厚さ" #: fdmprinter.def.json msgctxt "top_bottom_thickness description" @@ -975,7 +971,7 @@ msgstr "プリント時の最上面、最底面の厚み。これを積層ピッ #: fdmprinter.def.json msgctxt "top_thickness label" msgid "Top Thickness" -msgstr "" +msgstr "上部厚さ" #: fdmprinter.def.json msgctxt "top_thickness description" @@ -985,7 +981,7 @@ msgstr "プリント時の最上面の厚み。これを積層ピッチで割っ #: fdmprinter.def.json msgctxt "top_layers label" msgid "Top Layers" -msgstr "" +msgstr "上部レイヤー" #: fdmprinter.def.json msgctxt "top_layers description" @@ -995,7 +991,7 @@ msgstr "最上面のレイヤー数。トップの厚さを計算する場合、 #: fdmprinter.def.json msgctxt "bottom_thickness label" msgid "Bottom Thickness" -msgstr "" +msgstr "底面厚さ" #: fdmprinter.def.json msgctxt "bottom_thickness description" @@ -1005,7 +1001,7 @@ msgstr "プリント時の最底面の厚み。これを積層ピッチで割っ #: fdmprinter.def.json msgctxt "bottom_layers label" msgid "Bottom Layers" -msgstr "" +msgstr "底面レイヤー" #: fdmprinter.def.json msgctxt "bottom_layers description" @@ -1015,7 +1011,7 @@ msgstr "最底面のレイヤー数。下の厚さで計算すると、この値 #: fdmprinter.def.json msgctxt "top_bottom_pattern label" msgid "Top/Bottom Pattern" -msgstr "" +msgstr "上層/底層パターン" #: fdmprinter.def.json msgctxt "top_bottom_pattern description" @@ -1025,23 +1021,23 @@ msgstr "上層/底層のパターン。" #: fdmprinter.def.json msgctxt "top_bottom_pattern option lines" msgid "Lines" -msgstr "" +msgstr "直線" #: fdmprinter.def.json msgctxt "top_bottom_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" # msgstr "同心" #: fdmprinter.def.json msgctxt "top_bottom_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 label" msgid "Bottom Pattern Initial Layer" -msgstr "" +msgstr "底層初期レイヤー" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 description" @@ -1051,22 +1047,22 @@ msgstr "第1層のプリントの底部のパターン。" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option lines" msgid "Lines" -msgstr "" +msgstr "直線" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" #: fdmprinter.def.json msgctxt "top_bottom_pattern_0 option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "skin_angles label" msgid "Top/Bottom Line Directions" -msgstr "" +msgstr "上層/底層ラインの向き" #: fdmprinter.def.json msgctxt "skin_angles description" @@ -1076,7 +1072,7 @@ msgstr "上/下のレイヤーが線またはジグザグパターンを使う #: fdmprinter.def.json msgctxt "wall_0_inset label" msgid "Outer Wall Inset" -msgstr "" +msgstr "外壁はめ込み" #: fdmprinter.def.json msgctxt "wall_0_inset description" @@ -1086,7 +1082,7 @@ msgstr "外壁の経路にはめ込む。外壁がノズルよりも小さく、 #: fdmprinter.def.json msgctxt "outer_inset_first label" msgid "Outer Before Inner Walls" -msgstr "" +msgstr "外壁優先" #: fdmprinter.def.json msgctxt "outer_inset_first description" @@ -1096,7 +1092,7 @@ msgstr "有効にすると、壁は外側から内側に順番に印刷します #: fdmprinter.def.json msgctxt "alternate_extra_perimeter label" msgid "Alternate Extra Wall" -msgstr "" +msgstr "代替予備壁" #: fdmprinter.def.json msgctxt "alternate_extra_perimeter description" @@ -1106,7 +1102,7 @@ msgstr "すべてのレイヤーごとに予備の壁を印刷します。この #: fdmprinter.def.json msgctxt "travel_compensate_overlapping_walls_enabled label" msgid "Compensate Wall Overlaps" -msgstr "" +msgstr "壁補正" #: fdmprinter.def.json msgctxt "travel_compensate_overlapping_walls_enabled description" @@ -1116,7 +1112,7 @@ msgstr "すでに壁が設置されている部品の壁の流れを補正しま #: fdmprinter.def.json msgctxt "travel_compensate_overlapping_walls_0_enabled label" msgid "Compensate Outer Wall Overlaps" -msgstr "" +msgstr "外壁補正" #: fdmprinter.def.json msgctxt "travel_compensate_overlapping_walls_0_enabled description" @@ -1126,7 +1122,7 @@ msgstr "すでに壁が設置されている場所にプリントされている #: fdmprinter.def.json msgctxt "travel_compensate_overlapping_walls_x_enabled label" msgid "Compensate Inner Wall Overlaps" -msgstr "" +msgstr "内壁補正" #: fdmprinter.def.json msgctxt "travel_compensate_overlapping_walls_x_enabled description" @@ -1136,7 +1132,7 @@ msgstr "すでに壁が設置されている場所にプリントされている #: fdmprinter.def.json msgctxt "fill_perimeter_gaps label" msgid "Fill Gaps Between Walls" -msgstr "" +msgstr "隙間充填" #: fdmprinter.def.json msgctxt "fill_perimeter_gaps description" @@ -1146,17 +1142,17 @@ msgstr "壁が入らない壁の隙間を埋める。" #: fdmprinter.def.json msgctxt "fill_perimeter_gaps option nowhere" msgid "Nowhere" -msgstr "" +msgstr "対象外" #: fdmprinter.def.json msgctxt "fill_perimeter_gaps option everywhere" msgid "Everywhere" -msgstr "" +msgstr "全対象" #: fdmprinter.def.json msgctxt "fill_outline_gaps label" msgid "Print Thin Walls" -msgstr "" +msgstr "薄壁印刷" # msgstr "薄い壁をプリントする" #: fdmprinter.def.json @@ -1167,7 +1163,7 @@ msgstr "ノズルサイズよりも細い壁を作ります" #: fdmprinter.def.json msgctxt "xy_offset label" msgid "Horizontal Expansion" -msgstr "" +msgstr "水平展開" #: fdmprinter.def.json msgctxt "xy_offset description" @@ -1177,7 +1173,7 @@ msgstr "各レイヤーのすべてのポリゴンに適用されるオフセッ #: fdmprinter.def.json msgctxt "xy_offset_layer_0 label" msgid "Initial Layer Horizontal Expansion" -msgstr "" +msgstr "初期層水平展開" # msgstr "初期レイヤー水平方向への展開" #: fdmprinter.def.json @@ -1188,7 +1184,7 @@ msgstr "最初のレイヤーのポリゴンに適用されるオフセットの #: fdmprinter.def.json msgctxt "z_seam_type label" msgid "Z Seam Alignment" -msgstr "" +msgstr "Zシーム合わせ" #: fdmprinter.def.json msgctxt "z_seam_type description" @@ -1198,40 +1194,38 @@ msgstr "レイヤーの経路始点。連続するレイヤー経路が同じポ #: fdmprinter.def.json msgctxt "z_seam_type option back" msgid "User Specified" -msgstr "" +msgstr "ユーザー指定" #: fdmprinter.def.json msgctxt "z_seam_type option shortest" msgid "Shortest" -msgstr "" +msgstr "最短" #: fdmprinter.def.json msgctxt "z_seam_type option random" msgid "Random" -msgstr "" +msgstr "ランダム" #: fdmprinter.def.json msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" -msgstr "" +msgstr "鋭い角" # msgstr "最も鋭利な角" #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" -msgstr "" +msgstr "ZシームX" #: fdmprinter.def.json msgctxt "z_seam_x description" msgid "The X coordinate of the position near where to start printing each part in a layer." -msgstr "" -"レイヤー内の各印刷を開始するX座\n" -"標の位置。" +msgstr "レイヤー内の各印刷を開始するX座\n標の位置。" #: fdmprinter.def.json msgctxt "z_seam_y label" msgid "Z Seam Y" -msgstr "" +msgstr "ZシームY" #: fdmprinter.def.json msgctxt "z_seam_y description" @@ -1241,7 +1235,7 @@ msgstr "レイヤー内の各パーツの印刷を開始する場所の近くの #: fdmprinter.def.json msgctxt "z_seam_corner label" msgid "Seam Corner Preference" -msgstr "" +msgstr "シームコーナー設定" # msgstr "薄層のプレファレンス" #: fdmprinter.def.json @@ -1252,31 +1246,31 @@ msgstr "モデル輪郭のコーナーがシーム(縫い目)の位置に影 #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" msgid "None" -msgstr "" +msgstr "なし" # msgstr "なし" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "" +msgstr "シーム非表示" # msgstr "シームを非表示にする" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "" +msgstr "シーム表示" # msgstr "シームを表示する" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "" +msgstr "シーム表示/非表示" # msgstr "シームを非表示または表示する" #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" -msgstr "" +msgstr "相対Zシーム" # msgstr "Zシーム関連" #: fdmprinter.def.json @@ -1287,7 +1281,7 @@ msgstr "有効時は、Zシームは各パーツの真ん中に設定されま #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" msgid "Ignore Small Z Gaps" -msgstr "" +msgstr "小さいZギャップは無視" # msgstr "小さなZギャップを無視する" #: fdmprinter.def.json @@ -1298,7 +1292,7 @@ msgstr "モデルに垂直方向のギャップが小さくある場合、これ #: fdmprinter.def.json msgctxt "skin_outline_count label" msgid "Extra Skin Wall Count" -msgstr "" +msgstr "外側表面の数" # msgstr "余分な肌壁の本数" #: fdmprinter.def.json @@ -1309,7 +1303,7 @@ msgstr "上部/下部パターンの最も外側の部分を同心円の線で #: fdmprinter.def.json msgctxt "ironing_enabled label" msgid "Enable Ironing" -msgstr "" +msgstr "アイロン有効" # msgstr "アイロンを有効にする" #: fdmprinter.def.json @@ -1320,7 +1314,7 @@ msgstr "ノズルから吐出せずに上部表面を再度動く機能。表面 #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" msgid "Iron Only Highest Layer" -msgstr "" +msgstr "最上層のみアイロン" # msgstr "上層のみアイロンをかけます" #: fdmprinter.def.json @@ -1331,7 +1325,7 @@ msgstr "メッシュの最後のレイヤーでのみアイロンをかけます #: fdmprinter.def.json msgctxt "ironing_pattern label" msgid "Ironing Pattern" -msgstr "" +msgstr "アイロンパターン" # msgstr "アイロン時のパターン" #: fdmprinter.def.json @@ -1342,19 +1336,19 @@ msgstr "アイロンのパターン" #: fdmprinter.def.json msgctxt "ironing_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" # msgstr "同心" #: fdmprinter.def.json msgctxt "ironing_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" # msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "ironing_line_spacing label" msgid "Ironing Line Spacing" -msgstr "" +msgstr "アイロン線のスペース" # msgstr "アイロンラインの線隔" #: fdmprinter.def.json @@ -1365,7 +1359,7 @@ msgstr "アイロンライン同士の距離" #: fdmprinter.def.json msgctxt "ironing_flow label" msgid "Ironing Flow" -msgstr "" +msgstr "アイロンフロー" # msgstr "アイロン時のフロー" #: fdmprinter.def.json @@ -1376,7 +1370,7 @@ msgstr "アイロン時にノズルから出しておくフィラメントの量 #: fdmprinter.def.json msgctxt "ironing_inset label" msgid "Ironing Inset" -msgstr "" +msgstr "アイロンインセット" # msgstr "アイロンを挿入する" #: fdmprinter.def.json @@ -1387,7 +1381,7 @@ msgstr "モデルの端からの距離。端までアイロンをすると、端 #: fdmprinter.def.json msgctxt "speed_ironing label" msgid "Ironing Speed" -msgstr "" +msgstr "アイロン速度" # msgstr "アイロン時のスピード" #: fdmprinter.def.json @@ -1398,7 +1392,7 @@ msgstr "上部表面通過時の速度" #: fdmprinter.def.json msgctxt "acceleration_ironing label" msgid "Ironing Acceleration" -msgstr "" +msgstr "アイロン加速度" # msgstr "アイロン時の加速" #: fdmprinter.def.json @@ -1409,7 +1403,7 @@ msgstr "アイロン時の加速度" #: fdmprinter.def.json msgctxt "jerk_ironing label" msgid "Ironing Jerk" -msgstr "" +msgstr "アイロンジャーク" # msgstr "ジャークをアイロンする" #: fdmprinter.def.json @@ -1420,7 +1414,7 @@ msgstr "アイロン時の最大加速度" #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" -msgstr "" +msgstr "インフィル" # msgstr "インフィル" #: fdmprinter.def.json @@ -1431,7 +1425,7 @@ msgstr "インフィル" #: fdmprinter.def.json msgctxt "infill_extruder_nr label" msgid "Infill Extruder" -msgstr "" +msgstr "インフィルエクストルーダー" # msgstr "インフィルエクストルーダー" #: fdmprinter.def.json @@ -1442,7 +1436,7 @@ msgstr "インフィル造形時に使われるExtruder。デュアルノズル #: fdmprinter.def.json msgctxt "infill_sparse_density label" msgid "Infill Density" -msgstr "" +msgstr "インフィル密度" #: fdmprinter.def.json msgctxt "infill_sparse_density description" @@ -1452,7 +1446,7 @@ msgstr "プリントのインフィルの密度を調整します。" #: fdmprinter.def.json msgctxt "infill_line_distance label" msgid "Infill Line Distance" -msgstr "" +msgstr "インフィルライン距離" #: fdmprinter.def.json msgctxt "infill_line_distance description" @@ -1462,97 +1456,97 @@ msgstr "造形されたインフィルラインの距離。この設定は、イ #: fdmprinter.def.json msgctxt "infill_pattern label" msgid "Infill Pattern" -msgstr "" +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, tri-hexagon, cubic, octet, quarter cubic, cross 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" msgid "Grid" -msgstr "" +msgstr "グリッド" #: fdmprinter.def.json msgctxt "infill_pattern option lines" msgid "Lines" -msgstr "" +msgstr "ライン" #: fdmprinter.def.json msgctxt "infill_pattern option triangles" msgid "Triangles" -msgstr "" +msgstr "トライアングル" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "トライヘキサゴン" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" msgid "Cubic" -msgstr "" +msgstr "キュービック" #: fdmprinter.def.json msgctxt "infill_pattern option cubicsubdiv" msgid "Cubic Subdivision" -msgstr "" +msgstr "キュービックサブディビジョン" #: fdmprinter.def.json msgctxt "infill_pattern option tetrahedral" msgid "Octet" -msgstr "" +msgstr "オクテット" # msgstr "オクテット" #: fdmprinter.def.json msgctxt "infill_pattern option quarter_cubic" msgid "Quarter Cubic" -msgstr "" +msgstr "クォーターキュービック" # msgstr "クォーターキュービック" #: fdmprinter.def.json msgctxt "infill_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" # msgstr "同心円" #: fdmprinter.def.json msgctxt "infill_pattern option concentric_3d" msgid "Concentric 3D" -msgstr "" +msgstr "3D同心円" #: fdmprinter.def.json msgctxt "infill_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "infill_pattern option cross" msgid "Cross" -msgstr "" +msgstr "クロス" # msgstr "クロス" #: fdmprinter.def.json msgctxt "infill_pattern option cross_3d" msgid "Cross 3D" -msgstr "" +msgstr "3Dクロス" # 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 line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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" msgid "Infill Line Directions" -msgstr "" +msgstr "インフィルラインの向き" # msgstr "インフィルラインの方向" #: fdmprinter.def.json @@ -1563,27 +1557,27 @@ msgstr "使用する整数線の方向のリスト。リストの要素は、レ #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "インフィルXオフセット" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "インフィルパターンはX軸に沿ってこの距離を移動します。" #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "インフィルYオフセット" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "インフィルパターンはY軸に沿ってこの距離を移動します。" #: fdmprinter.def.json msgctxt "sub_div_rad_add label" msgid "Cubic Subdivision Shell" -msgstr "" +msgstr "キュービックサブディビジョンシェル" #: fdmprinter.def.json msgctxt "sub_div_rad_add description" @@ -1593,7 +1587,7 @@ msgstr "この立方体を細分するかどうかを決定するために、各 #: fdmprinter.def.json msgctxt "infill_overlap label" msgid "Infill Overlap Percentage" -msgstr "" +msgstr "インフィル公差量" # msgstr "インフィルのオーバーラップ率" #: fdmprinter.def.json @@ -1604,7 +1598,7 @@ msgstr "インフィルと壁が交差する量、わずかな交差によって #: fdmprinter.def.json msgctxt "infill_overlap_mm label" msgid "Infill Overlap" -msgstr "" +msgstr "インフィル公差" # msgstr "インフィルのオーバーラップ" #: fdmprinter.def.json @@ -1615,7 +1609,7 @@ msgstr "インフィルと壁が交差する量、わずかな交差によって #: fdmprinter.def.json msgctxt "skin_overlap label" msgid "Skin Overlap Percentage" -msgstr "" +msgstr "表面公差量" #: fdmprinter.def.json msgctxt "skin_overlap description" @@ -1625,7 +1619,7 @@ msgstr "表面と壁の交わる量。ラインの幅の%で設定。少しの #: fdmprinter.def.json msgctxt "skin_overlap_mm label" msgid "Skin Overlap" -msgstr "" +msgstr "表面公差" # msgstr "スキンオーバーラップ" #: fdmprinter.def.json @@ -1636,7 +1630,7 @@ msgstr "スキンと壁の間の交差した量 わずかなオーバーラッ #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" -msgstr "" +msgstr "インフィル移動距離" # msgstr "インフィルWipe距離" #: fdmprinter.def.json @@ -1647,7 +1641,7 @@ msgstr "インフィルラインごとに挿入された移動距離は壁のイ #: fdmprinter.def.json msgctxt "infill_sparse_thickness label" msgid "Infill Layer Thickness" -msgstr "" +msgstr "インフィル層の厚さ" #: fdmprinter.def.json msgctxt "infill_sparse_thickness description" @@ -1657,7 +1651,7 @@ msgstr "インフィルマテリアルの層ごとの厚さ。この値は常に #: fdmprinter.def.json msgctxt "gradual_infill_steps label" msgid "Gradual Infill Steps" -msgstr "" +msgstr "インフィル半減回数" #: fdmprinter.def.json msgctxt "gradual_infill_steps description" @@ -1667,7 +1661,7 @@ msgstr "天井面の表面に近づく際にインフィル密度が半減する #: fdmprinter.def.json msgctxt "gradual_infill_step_height label" msgid "Gradual Infill Step Height" -msgstr "" +msgstr "インフィル半減高さ" #: fdmprinter.def.json msgctxt "gradual_infill_step_height description" @@ -1677,19 +1671,17 @@ msgstr "密度が半分に切り替わる前の所定のインフィルの高さ #: fdmprinter.def.json msgctxt "infill_before_walls label" msgid "Infill Before Walls" -msgstr "" +msgstr "インフィル優先" #: fdmprinter.def.json msgctxt "infill_before_walls description" msgid "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface." -msgstr "" -"壁より前にインフィルをプリントします はじめに壁をプリントするとより精密な壁になりますが、オーバーハングのプリントは悪化します\n" -"はじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます" +msgstr "壁より前にインフィルをプリントします はじめに壁をプリントするとより精密な壁になりますが、オーバーハングのプリントは悪化します\nはじめにインフィルをプリントすると丈夫な壁になりますが、インフィルの模様が時折表面から透けて表れます" #: fdmprinter.def.json msgctxt "min_infill_area label" msgid "Minimum Infill Area" -msgstr "" +msgstr "最小インフィル領域" #: fdmprinter.def.json msgctxt "min_infill_area description" @@ -1699,7 +1691,7 @@ msgstr "これより小さいインフィルの領域を生成しないでくだ #: fdmprinter.def.json msgctxt "skin_preshrink label" msgid "Skin Removal Width" -msgstr "" +msgstr "表面除去幅" # msgstr "スキン除去幅" #: fdmprinter.def.json @@ -1710,7 +1702,7 @@ msgstr "取り除くスキンエリアの最大幅。この値より小さいす #: fdmprinter.def.json msgctxt "top_skin_preshrink label" msgid "Top Skin Removal Width" -msgstr "" +msgstr "上面除去幅" # msgstr "トップスキン除去幅" #: fdmprinter.def.json @@ -1721,7 +1713,7 @@ msgstr "取り除くスキンエリアの最大幅。この値より小さいす #: fdmprinter.def.json msgctxt "bottom_skin_preshrink label" msgid "Bottom Skin Removal Width" -msgstr "" +msgstr "底面除去幅" # msgstr "ボトムのスキン除去幅" #: fdmprinter.def.json @@ -1732,7 +1724,7 @@ msgstr "取り除くスキンエリアの最大幅。この値より小さいす #: fdmprinter.def.json msgctxt "expand_skins_expand_distance label" msgid "Skin Expand Distance" -msgstr "" +msgstr "表面展開距離" #: fdmprinter.def.json msgctxt "expand_skins_expand_distance description" @@ -1742,7 +1734,7 @@ msgstr "スキンがインフィルまで到達する距離です。高い数値 #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" msgid "Top Skin Expand Distance" -msgstr "" +msgstr "上面展開距離" # msgstr "トップのスキンの展開距離" #: fdmprinter.def.json @@ -1753,7 +1745,7 @@ msgstr "スキンがインフィルまで到達する距離です。高い数値 #: fdmprinter.def.json msgctxt "bottom_skin_expand_distance label" msgid "Bottom Skin Expand Distance" -msgstr "" +msgstr "底面展開距離" # msgstr "ボトムのスキンの展開距離" #: fdmprinter.def.json @@ -1764,7 +1756,7 @@ msgstr "スキンがインフィルまで到達する距離です。高い数値 #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion label" msgid "Maximum Skin Angle for Expansion" -msgstr "" +msgstr "表面展開最大角" #: fdmprinter.def.json msgctxt "max_skin_angle_for_expansion description" @@ -1774,7 +1766,7 @@ msgstr "この設定より大きい角を持つオブジェクトの上部また #: fdmprinter.def.json msgctxt "min_skin_width_for_expansion label" msgid "Minimum Skin Width for Expansion" -msgstr "" +msgstr "表面展開最小角" #: fdmprinter.def.json msgctxt "min_skin_width_for_expansion description" @@ -1784,7 +1776,7 @@ msgstr "これより狭いスキン領域は展開されません。モデル表 #: fdmprinter.def.json msgctxt "material label" msgid "Material" -msgstr "" +msgstr "マテリアル" #: fdmprinter.def.json msgctxt "material description" @@ -1794,7 +1786,7 @@ msgstr "マテリアル" #: fdmprinter.def.json msgctxt "material_flow_dependent_temperature label" msgid "Auto Temperature" -msgstr "" +msgstr "自動温度" #: fdmprinter.def.json msgctxt "material_flow_dependent_temperature description" @@ -1804,7 +1796,7 @@ msgstr "その画層の平均流速で自動的にレイヤーごとに温度を #: fdmprinter.def.json msgctxt "default_material_print_temperature label" msgid "Default Printing Temperature" -msgstr "" +msgstr "デフォルト印刷温度" #: fdmprinter.def.json msgctxt "default_material_print_temperature description" @@ -1814,7 +1806,7 @@ msgstr "印刷中のデフォルトの温度。これはマテリアルの基本 #: fdmprinter.def.json msgctxt "material_print_temperature label" msgid "Printing Temperature" -msgstr "" +msgstr "印刷温度" #: fdmprinter.def.json msgctxt "material_print_temperature description" @@ -1824,7 +1816,7 @@ msgstr "印刷中の温度。" #: fdmprinter.def.json msgctxt "material_print_temperature_layer_0 label" msgid "Printing Temperature Initial Layer" -msgstr "" +msgstr "初期レイヤー印刷温度" #: fdmprinter.def.json msgctxt "material_print_temperature_layer_0 description" @@ -1834,7 +1826,7 @@ msgstr "最初のレイヤーを印刷する温度。初期レイヤーのみ特 #: fdmprinter.def.json msgctxt "material_initial_print_temperature label" msgid "Initial Printing Temperature" -msgstr "" +msgstr "初期印刷温度" #: fdmprinter.def.json msgctxt "material_initial_print_temperature description" @@ -1844,7 +1836,7 @@ msgstr "加熱中、印刷を開始することができる最低の温度。" #: fdmprinter.def.json msgctxt "material_final_print_temperature label" msgid "Final Printing Temperature" -msgstr "" +msgstr "最終印刷温度" #: fdmprinter.def.json msgctxt "material_final_print_temperature description" @@ -1854,7 +1846,7 @@ msgstr "印刷終了直前に冷却を開始する温度。" #: fdmprinter.def.json msgctxt "material_flow_temp_graph label" msgid "Flow Temperature Graph" -msgstr "" +msgstr "フロー温度グラフ" #: fdmprinter.def.json msgctxt "material_flow_temp_graph description" @@ -1864,7 +1856,7 @@ msgstr "マテリアルフロー(毎秒 3mm) と温度 (° c) をリンクしま #: fdmprinter.def.json msgctxt "material_extrusion_cool_down_speed label" msgid "Extrusion Cool Down Speed Modifier" -msgstr "" +msgstr "押出クールダウン速度修飾子" #: fdmprinter.def.json msgctxt "material_extrusion_cool_down_speed description" @@ -1874,7 +1866,7 @@ msgstr "印刷中にノズルが冷える際の速度。同じ値が、加熱す #: fdmprinter.def.json msgctxt "material_bed_temperature label" msgid "Build Plate Temperature" -msgstr "" +msgstr "ビルドプレート温度" #: fdmprinter.def.json msgctxt "material_bed_temperature description" @@ -1884,7 +1876,7 @@ msgstr "加熱式ビルドプレート温度。これが 0 の場合、ベッド #: fdmprinter.def.json msgctxt "material_bed_temperature_layer_0 label" msgid "Build Plate Temperature Initial Layer" -msgstr "" +msgstr "初期レイヤーのビルドプレート温度" #: fdmprinter.def.json msgctxt "material_bed_temperature_layer_0 description" @@ -1894,7 +1886,7 @@ msgstr "最初のレイヤー印刷時のビルドプレートの温度。" #: fdmprinter.def.json msgctxt "material_diameter label" msgid "Diameter" -msgstr "" +msgstr "直径" #: fdmprinter.def.json msgctxt "material_diameter description" @@ -1904,27 +1896,27 @@ msgstr "使用するフィラメントの太さの調整 この値を使用す #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "接着傾向" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "表面の接着傾向。" #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "表面エネルギー" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "表面エネルギー。" #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" -msgstr "" +msgstr "フロー" #: fdmprinter.def.json msgctxt "material_flow description" @@ -1934,7 +1926,7 @@ msgstr "流れの補修: 押出されるマテリアルの量は、この値か #: fdmprinter.def.json msgctxt "retraction_enable label" msgid "Enable Retraction" -msgstr "" +msgstr "引き戻し有効" #: fdmprinter.def.json msgctxt "retraction_enable description" @@ -1944,7 +1936,7 @@ msgstr "ノズルが印刷しないで良い領域を移動する際にフィラ #: fdmprinter.def.json msgctxt "retract_at_layer_change label" msgid "Retract at Layer Change" -msgstr "" +msgstr "レイヤー変更時に引き戻す" #: fdmprinter.def.json msgctxt "retract_at_layer_change description" @@ -1954,7 +1946,7 @@ msgstr "ノズルは次の層に移動するときフィラメントを引き戻 #: fdmprinter.def.json msgctxt "retraction_amount label" msgid "Retraction Distance" -msgstr "" +msgstr "引き戻し距離" #: fdmprinter.def.json msgctxt "retraction_amount description" @@ -1964,7 +1956,7 @@ msgstr "引き戻されるマテリアルの長さ" #: fdmprinter.def.json msgctxt "retraction_speed label" msgid "Retraction Speed" -msgstr "" +msgstr "引き戻し速度" #: fdmprinter.def.json #, fuzzy @@ -1975,7 +1967,7 @@ msgstr "フィラメントが引き戻される時のスピード" #: fdmprinter.def.json msgctxt "retraction_retract_speed label" msgid "Retraction Retract Speed" -msgstr "" +msgstr "引き戻し速度の取り消し" #: fdmprinter.def.json #, fuzzy @@ -1986,7 +1978,7 @@ msgstr "フィラメントが引き戻される時のスピード" #: fdmprinter.def.json msgctxt "retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "押し戻し速度の取り消し" #: fdmprinter.def.json #, fuzzy @@ -1997,7 +1989,7 @@ msgstr "フィラメントが引き戻される時のスピード" #: fdmprinter.def.json msgctxt "retraction_extra_prime_amount label" msgid "Retraction Extra Prime Amount" -msgstr "" +msgstr "余分な押し戻し量の引き戻し" #: fdmprinter.def.json msgctxt "retraction_extra_prime_amount description" @@ -2007,7 +1999,7 @@ msgstr "マテリアルによっては、移動中に滲み出てきてしまう #: fdmprinter.def.json msgctxt "retraction_min_travel label" msgid "Retraction Minimum Travel" -msgstr "" +msgstr "引き戻し最小移動距離" #: fdmprinter.def.json msgctxt "retraction_min_travel description" @@ -2017,7 +2009,7 @@ msgstr "フィラメントを引き戻す際に必要な最小移動距離。こ #: fdmprinter.def.json msgctxt "retraction_count_max label" msgid "Maximum Retraction Count" -msgstr "" +msgstr "最大引き戻し回数" #: fdmprinter.def.json msgctxt "retraction_count_max description" @@ -2027,7 +2019,7 @@ msgstr "この設定は、決められた距離の中で起こる引き戻しの #: fdmprinter.def.json msgctxt "retraction_extrusion_window label" msgid "Minimum Extrusion Distance Window" -msgstr "" +msgstr "最小抽出距離範囲" #: fdmprinter.def.json msgctxt "retraction_extrusion_window description" @@ -2037,7 +2029,7 @@ msgstr "最大の引き戻し回数。この値は引き戻す距離と同じで #: fdmprinter.def.json msgctxt "material_standby_temperature label" msgid "Standby Temperature" -msgstr "" +msgstr "スタンバイ温度" #: fdmprinter.def.json msgctxt "material_standby_temperature description" @@ -2047,7 +2039,7 @@ msgstr "印刷していないノズルの温度(もう一方のノズルが印 #: fdmprinter.def.json msgctxt "switch_extruder_retraction_amount label" msgid "Nozzle Switch Retraction Distance" -msgstr "" +msgstr "ノズルスイッチ引き戻し距離" #: fdmprinter.def.json msgctxt "switch_extruder_retraction_amount description" @@ -2057,7 +2049,7 @@ msgstr "引き込み量:引き込みを行わない場合は0に設定しま #: fdmprinter.def.json msgctxt "switch_extruder_retraction_speeds label" msgid "Nozzle Switch Retraction Speed" -msgstr "" +msgstr "ノズルスイッチ引き戻し速度" #: fdmprinter.def.json msgctxt "switch_extruder_retraction_speeds description" @@ -2067,7 +2059,7 @@ msgstr "フィラメントを引き戻す速度。速度が早い程良いが早 #: fdmprinter.def.json msgctxt "switch_extruder_retraction_speed label" msgid "Nozzle Switch Retract Speed" -msgstr "" +msgstr "ノズルスイッチ引き込み速度" #: fdmprinter.def.json msgctxt "switch_extruder_retraction_speed description" @@ -2077,7 +2069,7 @@ msgstr "ノズル切り替え中のフィラメントの引き込み速度。" #: fdmprinter.def.json msgctxt "switch_extruder_prime_speed label" msgid "Nozzle Switch Prime Speed" -msgstr "" +msgstr "ノズルスイッチ押し戻し速度" #: fdmprinter.def.json msgctxt "switch_extruder_prime_speed description" @@ -2087,7 +2079,7 @@ msgstr "ノズル スイッチ後にフィラメントが押し戻される速 #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" -msgstr "" +msgstr "スピード" #: fdmprinter.def.json msgctxt "speed description" @@ -2097,7 +2089,7 @@ msgstr "スピード" #: fdmprinter.def.json msgctxt "speed_print label" msgid "Print Speed" -msgstr "" +msgstr "印刷速度" #: fdmprinter.def.json msgctxt "speed_print description" @@ -2107,7 +2099,7 @@ msgstr "印刷スピード" #: fdmprinter.def.json msgctxt "speed_infill label" msgid "Infill Speed" -msgstr "" +msgstr "インフィル速度" #: fdmprinter.def.json msgctxt "speed_infill description" @@ -2117,7 +2109,7 @@ msgstr "インフィルを印刷する速度" #: fdmprinter.def.json msgctxt "speed_wall label" msgid "Wall Speed" -msgstr "" +msgstr "ウォール速度" #: fdmprinter.def.json msgctxt "speed_wall description" @@ -2127,7 +2119,7 @@ msgstr "ウォールを印刷する速度" #: fdmprinter.def.json msgctxt "speed_wall_0 label" msgid "Outer Wall Speed" -msgstr "" +msgstr "外壁速度" #: fdmprinter.def.json msgctxt "speed_wall_0 description" @@ -2137,7 +2129,7 @@ msgstr "最も外側のウォールをプリントする速度。外側の壁を #: fdmprinter.def.json msgctxt "speed_wall_x label" msgid "Inner Wall Speed" -msgstr "" +msgstr "内壁速度" #: fdmprinter.def.json msgctxt "speed_wall_x description" @@ -2147,7 +2139,7 @@ msgstr "内側のウォールをプリントする速度 外壁より内壁を #: fdmprinter.def.json msgctxt "speed_roofing label" msgid "Top Surface Skin Speed" -msgstr "" +msgstr "最上面速度" # msgstr "トップサーフェススキンの速度" #: fdmprinter.def.json @@ -2158,7 +2150,7 @@ msgstr "上部表面プリント時の速度" #: fdmprinter.def.json msgctxt "speed_topbottom label" msgid "Top/Bottom Speed" -msgstr "" +msgstr "上面/底面速度" #: fdmprinter.def.json msgctxt "speed_topbottom description" @@ -2168,7 +2160,7 @@ msgstr "トップ/ボトムのレイヤーのプリント速度" #: fdmprinter.def.json msgctxt "speed_support label" msgid "Support Speed" -msgstr "" +msgstr "サポート速度" #: fdmprinter.def.json msgctxt "speed_support description" @@ -2178,7 +2170,7 @@ msgstr "サポート材をプリントする速度です。高速でサポート #: fdmprinter.def.json msgctxt "speed_support_infill label" msgid "Support Infill Speed" -msgstr "" +msgstr "サポートインフィル速度" #: fdmprinter.def.json msgctxt "speed_support_infill description" @@ -2188,7 +2180,7 @@ msgstr "サポート材のインフィルをプリントする速度 低速で #: fdmprinter.def.json msgctxt "speed_support_interface label" msgid "Support Interface Speed" -msgstr "" +msgstr "サポートインタフェース速度" #: fdmprinter.def.json msgctxt "speed_support_interface description" @@ -2198,7 +2190,7 @@ msgstr "ルーフとフロアのサポート材をプリントする速度。低 #: fdmprinter.def.json msgctxt "speed_support_roof label" msgid "Support Roof Speed" -msgstr "" +msgstr "サポートルーフ速度" # msgstr "サポートルーフの速度" #: fdmprinter.def.json @@ -2209,7 +2201,7 @@ msgstr "ルーフとフロアのサポート材をプリントする速度 こ #: fdmprinter.def.json msgctxt "speed_support_bottom label" msgid "Support Floor Speed" -msgstr "" +msgstr "サポートフロア速度" # msgstr "サポートフロアの速度" #: fdmprinter.def.json @@ -2220,7 +2212,7 @@ msgstr "フロアのサポートがプリントされる速度。低速で印刷 #: fdmprinter.def.json msgctxt "speed_prime_tower label" msgid "Prime Tower Speed" -msgstr "" +msgstr "プライムタワー印刷速度" #: fdmprinter.def.json msgctxt "speed_prime_tower description" @@ -2230,7 +2222,7 @@ msgstr "プライムタワーをプリントする速度です。異なるフィ #: fdmprinter.def.json msgctxt "speed_travel label" msgid "Travel Speed" -msgstr "" +msgstr "移動速度" #: fdmprinter.def.json msgctxt "speed_travel description" @@ -2240,7 +2232,7 @@ msgstr "移動中のスピード" #: fdmprinter.def.json msgctxt "speed_layer_0 label" msgid "Initial Layer Speed" -msgstr "" +msgstr "初期レイヤー速度" #: fdmprinter.def.json msgctxt "speed_layer_0 description" @@ -2250,7 +2242,7 @@ msgstr "一層目での速度。ビルトプレートへの接着を向上する #: fdmprinter.def.json msgctxt "speed_print_layer_0 label" msgid "Initial Layer Print Speed" -msgstr "" +msgstr "初期レイヤー印刷速度" #: fdmprinter.def.json msgctxt "speed_print_layer_0 description" @@ -2260,7 +2252,7 @@ msgstr "一層目をプリントする速度 ビルトプレートへの接着 #: fdmprinter.def.json msgctxt "speed_travel_layer_0 label" msgid "Initial Layer Travel Speed" -msgstr "" +msgstr "初期レイヤー移動速度" #: fdmprinter.def.json msgctxt "speed_travel_layer_0 description" @@ -2270,7 +2262,7 @@ msgstr "最初のレイヤーを印刷する際のトラベルスピード。低 #: fdmprinter.def.json msgctxt "skirt_brim_speed label" msgid "Skirt/Brim Speed" -msgstr "" +msgstr "スカート/ブリム速度" #: fdmprinter.def.json msgctxt "skirt_brim_speed description" @@ -2280,7 +2272,7 @@ msgstr "スカートとブリムのプリント速度 通常は一層目のス #: fdmprinter.def.json msgctxt "max_feedrate_z_override label" msgid "Maximum Z Speed" -msgstr "" +msgstr "最大Z速度" #: fdmprinter.def.json msgctxt "max_feedrate_z_override description" @@ -2290,7 +2282,7 @@ msgstr "ビルトプレートが移動する最高速度 この値を0に設 #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" msgid "Number of Slower Layers" -msgstr "" +msgstr "遅いレイヤーの数" #: fdmprinter.def.json msgctxt "speed_slowdown_layers description" @@ -2300,7 +2292,7 @@ msgstr "最初の数層は印刷失敗の可能性を軽減させるために、 #: fdmprinter.def.json msgctxt "speed_equalize_flow_enabled label" msgid "Equalize Filament Flow" -msgstr "" +msgstr "フィラメント均一速度" #: fdmprinter.def.json msgctxt "speed_equalize_flow_enabled description" @@ -2310,7 +2302,7 @@ msgstr "通常より細いラインを高速プリントするので、時間当 #: fdmprinter.def.json msgctxt "speed_equalize_flow_max label" msgid "Maximum Speed for Flow Equalization" -msgstr "" +msgstr "均一フローの最大速度" #: fdmprinter.def.json msgctxt "speed_equalize_flow_max description" @@ -2320,7 +2312,7 @@ msgstr "吐出を均一にするための調整時の最高スピード" #: fdmprinter.def.json msgctxt "acceleration_enabled label" msgid "Enable Acceleration Control" -msgstr "" +msgstr "加速度制御を有効にする" #: fdmprinter.def.json msgctxt "acceleration_enabled description" @@ -2330,7 +2322,7 @@ msgstr "プリントヘッドのスピード調整の有効化 加速度の増 #: fdmprinter.def.json msgctxt "acceleration_print label" msgid "Print Acceleration" -msgstr "" +msgstr "印刷加速度" #: fdmprinter.def.json msgctxt "acceleration_print description" @@ -2340,7 +2332,7 @@ msgstr "印刷の加速スピードです。" #: fdmprinter.def.json msgctxt "acceleration_infill label" msgid "Infill Acceleration" -msgstr "" +msgstr "インフィル加速度" #: fdmprinter.def.json msgctxt "acceleration_infill description" @@ -2350,7 +2342,7 @@ msgstr "インフィルの印刷の加速スピード。" #: fdmprinter.def.json msgctxt "acceleration_wall label" msgid "Wall Acceleration" -msgstr "" +msgstr "ウォール加速度" #: fdmprinter.def.json msgctxt "acceleration_wall description" @@ -2360,7 +2352,7 @@ msgstr "ウォールをプリントする際の加速度。" #: fdmprinter.def.json msgctxt "acceleration_wall_0 label" msgid "Outer Wall Acceleration" -msgstr "" +msgstr "外壁加速度" #: fdmprinter.def.json msgctxt "acceleration_wall_0 description" @@ -2370,7 +2362,7 @@ msgstr "最も外側の壁をプリントする際の加速度" #: fdmprinter.def.json msgctxt "acceleration_wall_x label" msgid "Inner Wall Acceleration" -msgstr "" +msgstr "内壁加速度" #: fdmprinter.def.json msgctxt "acceleration_wall_x description" @@ -2380,7 +2372,7 @@ msgstr "内側のウォールがが出力される際のスピード。" #: fdmprinter.def.json msgctxt "acceleration_roofing label" msgid "Top Surface Skin Acceleration" -msgstr "" +msgstr "最上面加速度" # msgstr "トップ表面スキンの加速度" #: fdmprinter.def.json @@ -2391,7 +2383,7 @@ msgstr "上部表面プリント時の加速度" #: fdmprinter.def.json msgctxt "acceleration_topbottom label" msgid "Top/Bottom Acceleration" -msgstr "" +msgstr "上面/底面加速度" #: fdmprinter.def.json msgctxt "acceleration_topbottom description" @@ -2401,7 +2393,7 @@ msgstr "トップとボトムのレイヤーの印刷加速度。" #: fdmprinter.def.json msgctxt "acceleration_support label" msgid "Support Acceleration" -msgstr "" +msgstr "サポート加速度" #: fdmprinter.def.json msgctxt "acceleration_support description" @@ -2411,7 +2403,7 @@ msgstr "サポート材プリント時の加速スピード" #: fdmprinter.def.json msgctxt "acceleration_support_infill label" msgid "Support Infill Acceleration" -msgstr "" +msgstr "サポートインフィル加速度" #: fdmprinter.def.json msgctxt "acceleration_support_infill description" @@ -2421,7 +2413,7 @@ msgstr "インフィルのサポート材のプリント時の加速度。" #: fdmprinter.def.json msgctxt "acceleration_support_interface label" msgid "Support Interface Acceleration" -msgstr "" +msgstr "サポートインタフェース加速度" #: fdmprinter.def.json msgctxt "acceleration_support_interface description" @@ -2431,7 +2423,7 @@ msgstr "サポートの上面と下面が印刷される加速度。低加速度 #: fdmprinter.def.json msgctxt "acceleration_support_roof label" msgid "Support Roof Acceleration" -msgstr "" +msgstr "サポートルーフ加速度" # msgstr "サポートルーフの加速度" #: fdmprinter.def.json @@ -2442,7 +2434,7 @@ msgstr "サポートの上面がプリントされる加速度、低加速度で #: fdmprinter.def.json msgctxt "acceleration_support_bottom label" msgid "Support Floor Acceleration" -msgstr "" +msgstr "サポートフロア加速度" # msgstr "サポートフロアの加速度" #: fdmprinter.def.json @@ -2453,7 +2445,7 @@ msgstr "サポートのフロアが印刷される加速度。より低い加速 #: fdmprinter.def.json msgctxt "acceleration_prime_tower label" msgid "Prime Tower Acceleration" -msgstr "" +msgstr "プライムタワー加速度" #: fdmprinter.def.json msgctxt "acceleration_prime_tower description" @@ -2463,7 +2455,7 @@ msgstr "プライムタワーの印刷時のスピード。" #: fdmprinter.def.json msgctxt "acceleration_travel label" msgid "Travel Acceleration" -msgstr "" +msgstr "移動か速度" #: fdmprinter.def.json msgctxt "acceleration_travel description" @@ -2473,7 +2465,7 @@ msgstr "移動中の加速度。" #: fdmprinter.def.json msgctxt "acceleration_layer_0 label" msgid "Initial Layer Acceleration" -msgstr "" +msgstr "初期レイヤー加速度" #: fdmprinter.def.json msgctxt "acceleration_layer_0 description" @@ -2483,7 +2475,7 @@ msgstr "初期レイヤーの加速度。" #: fdmprinter.def.json msgctxt "acceleration_print_layer_0 label" msgid "Initial Layer Print Acceleration" -msgstr "" +msgstr "初期レイヤー印刷加速度" #: fdmprinter.def.json msgctxt "acceleration_print_layer_0 description" @@ -2493,7 +2485,7 @@ msgstr "初期レイヤーの印刷中の加速度。" #: fdmprinter.def.json msgctxt "acceleration_travel_layer_0 label" msgid "Initial Layer Travel Acceleration" -msgstr "" +msgstr "初期レイヤー移動加速度" #: fdmprinter.def.json msgctxt "acceleration_travel_layer_0 description" @@ -2503,7 +2495,7 @@ msgstr "最初のレイヤー時の加速度" #: fdmprinter.def.json msgctxt "acceleration_skirt_brim label" msgid "Skirt/Brim Acceleration" -msgstr "" +msgstr "スカート/ブリム加速度" #: fdmprinter.def.json msgctxt "acceleration_skirt_brim description" @@ -2513,7 +2505,7 @@ msgstr "スカートとブリム印刷時の加速度。通常、初期レイヤ #: fdmprinter.def.json msgctxt "jerk_enabled label" msgid "Enable Jerk Control" -msgstr "" +msgstr "ジャーク制御を有効にする" #: fdmprinter.def.json msgctxt "jerk_enabled description" @@ -2523,7 +2515,7 @@ msgstr "X または Y 軸の速度が変更する際、プリントヘッドの #: fdmprinter.def.json msgctxt "jerk_print label" msgid "Print Jerk" -msgstr "" +msgstr "印刷ジャーク" #: fdmprinter.def.json msgctxt "jerk_print description" @@ -2533,7 +2525,7 @@ msgstr "プリントヘッドの最大瞬間速度の変更。" #: fdmprinter.def.json msgctxt "jerk_infill label" msgid "Infill Jerk" -msgstr "" +msgstr "インフィルジャーク" #: fdmprinter.def.json msgctxt "jerk_infill description" @@ -2543,7 +2535,7 @@ msgstr "インフィルの印刷時の瞬間速度の変更。" #: fdmprinter.def.json msgctxt "jerk_wall label" msgid "Wall Jerk" -msgstr "" +msgstr "ウォールジャーク" #: fdmprinter.def.json msgctxt "jerk_wall description" @@ -2553,7 +2545,7 @@ msgstr "ウォールのプリント時の最大瞬間速度を変更。" #: fdmprinter.def.json msgctxt "jerk_wall_0 label" msgid "Outer Wall Jerk" -msgstr "" +msgstr "外壁ジャーク" #: fdmprinter.def.json msgctxt "jerk_wall_0 description" @@ -2563,7 +2555,7 @@ msgstr "外側のウォールが出力される際の最大瞬間速度の変更 #: fdmprinter.def.json msgctxt "jerk_wall_x label" msgid "Inner Wall Jerk" -msgstr "" +msgstr "内壁ジャーク" #: fdmprinter.def.json msgctxt "jerk_wall_x description" @@ -2573,7 +2565,7 @@ msgstr "内側のウォールがプリントされれう際の最大瞬間速度 #: fdmprinter.def.json msgctxt "jerk_roofing label" msgid "Top Surface Skin Jerk" -msgstr "" +msgstr "最上面ジャーク" # msgstr "トップサーフェススキンジャーク" #: fdmprinter.def.json @@ -2584,7 +2576,7 @@ msgstr "上部表面プリント時の最大加速度" #: fdmprinter.def.json msgctxt "jerk_topbottom label" msgid "Top/Bottom Jerk" -msgstr "" +msgstr "上面/下面ジャーク" #: fdmprinter.def.json msgctxt "jerk_topbottom description" @@ -2594,7 +2586,7 @@ msgstr "トップとボトムのレイヤーを印刷する際の最大瞬間速 #: fdmprinter.def.json msgctxt "jerk_support label" msgid "Support Jerk" -msgstr "" +msgstr "サポートジャーク" #: fdmprinter.def.json msgctxt "jerk_support description" @@ -2604,7 +2596,7 @@ msgstr "サポート材の印刷時の最大瞬間速度の変更。" #: fdmprinter.def.json msgctxt "jerk_support_infill label" msgid "Support Infill Jerk" -msgstr "" +msgstr "サポートインフィルジャーク" #: fdmprinter.def.json msgctxt "jerk_support_infill description" @@ -2614,7 +2606,7 @@ msgstr "サポート材の印刷時、最大瞬間速度の変更。" #: fdmprinter.def.json msgctxt "jerk_support_interface label" msgid "Support Interface Jerk" -msgstr "" +msgstr "サポートインタフェースジャーク" #: fdmprinter.def.json msgctxt "jerk_support_interface description" @@ -2624,7 +2616,7 @@ msgstr "どのルーフとフロアのサポート部分を印刷するかによ #: fdmprinter.def.json msgctxt "jerk_support_roof label" msgid "Support Roof Jerk" -msgstr "" +msgstr "サポートルーフジャーク" # msgstr "サポートルーフのジャーク" #: fdmprinter.def.json @@ -2635,7 +2627,7 @@ msgstr "どのサポートのルーフ部分を印刷するかによって最大 #: fdmprinter.def.json msgctxt "jerk_support_bottom label" msgid "Support Floor Jerk" -msgstr "" +msgstr "サポートフロアジャーク" # msgstr "サポートフロアのジャーク" #: fdmprinter.def.json @@ -2646,7 +2638,7 @@ msgstr "どのサポートのフロア部分を印刷するかによって最大 #: fdmprinter.def.json msgctxt "jerk_prime_tower label" msgid "Prime Tower Jerk" -msgstr "" +msgstr "プライムタワージャーク" #: fdmprinter.def.json msgctxt "jerk_prime_tower description" @@ -2656,7 +2648,7 @@ msgstr "プライムタワーがプリントされる際の最大瞬間速度を #: fdmprinter.def.json msgctxt "jerk_travel label" msgid "Travel Jerk" -msgstr "" +msgstr "移動ジャーク" #: fdmprinter.def.json msgctxt "jerk_travel description" @@ -2666,7 +2658,7 @@ msgstr "移動する際の最大瞬時速度の変更。" #: fdmprinter.def.json msgctxt "jerk_layer_0 label" msgid "Initial Layer Jerk" -msgstr "" +msgstr "初期レイヤージャーク" #: fdmprinter.def.json msgctxt "jerk_layer_0 description" @@ -2676,7 +2668,7 @@ msgstr "初期レイヤーの最大瞬時速度の変更。" #: fdmprinter.def.json msgctxt "jerk_print_layer_0 label" msgid "Initial Layer Print Jerk" -msgstr "" +msgstr "初期レイヤー印刷ジャーク" #: fdmprinter.def.json msgctxt "jerk_print_layer_0 description" @@ -2686,7 +2678,7 @@ msgstr "初期レイヤー印刷中の最大瞬時速度の変化。" #: fdmprinter.def.json msgctxt "jerk_travel_layer_0 label" msgid "Initial Layer Travel Jerk" -msgstr "" +msgstr "初期レイヤー移動ジャーク" #: fdmprinter.def.json msgctxt "jerk_travel_layer_0 description" @@ -2696,7 +2688,7 @@ msgstr "移動加速度は最初のレイヤーに適用されます。" #: fdmprinter.def.json msgctxt "jerk_skirt_brim label" msgid "Skirt/Brim Jerk" -msgstr "" +msgstr "スカート/ブリムジャーク" #: fdmprinter.def.json msgctxt "jerk_skirt_brim description" @@ -2706,7 +2698,7 @@ msgstr "スカートとブリムがプリントされる最大瞬時速度の変 #: fdmprinter.def.json msgctxt "travel label" msgid "Travel" -msgstr "" +msgstr "移動" #: fdmprinter.def.json msgctxt "travel description" @@ -2716,7 +2708,7 @@ msgstr "移動" #: fdmprinter.def.json msgctxt "retraction_combing label" msgid "Combing Mode" -msgstr "" +msgstr "コーミングモード" #: fdmprinter.def.json msgctxt "retraction_combing description" @@ -2726,22 +2718,22 @@ msgstr "コーミングは、走行時にすでに印刷された領域内にノ #: fdmprinter.def.json msgctxt "retraction_combing option off" msgid "Off" -msgstr "" +msgstr "オフ" #: fdmprinter.def.json msgctxt "retraction_combing option all" msgid "All" -msgstr "" +msgstr "すべて" #: fdmprinter.def.json msgctxt "retraction_combing option noskin" msgid "No Skin" -msgstr "" +msgstr "表面なし" #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall label" msgid "Retract Before Outer Wall" -msgstr "" +msgstr "外壁の前に引き戻す" #: fdmprinter.def.json msgctxt "travel_retract_before_outer_wall description" @@ -2751,7 +2743,7 @@ msgstr "移動して外側のウォールをプリントする際、毎回引き #: fdmprinter.def.json msgctxt "travel_avoid_other_parts label" msgid "Avoid Printed Parts When Traveling" -msgstr "" +msgstr "移動は印刷したパーツを回避する" #: fdmprinter.def.json msgctxt "travel_avoid_other_parts description" @@ -2761,7 +2753,7 @@ msgstr "ノズルは、移動時に既に印刷されたパーツを避けます #: fdmprinter.def.json msgctxt "travel_avoid_distance label" msgid "Travel Avoid Distance" -msgstr "" +msgstr "移動回避距離" #: fdmprinter.def.json msgctxt "travel_avoid_distance description" @@ -2771,7 +2763,7 @@ msgstr "ノズルが既に印刷された部分を移動する際の間隔" #: fdmprinter.def.json msgctxt "start_layers_at_same_position label" msgid "Start Layers with the Same Part" -msgstr "" +msgstr "同じパーツでレイヤーを開始する" #: fdmprinter.def.json #, fuzzy @@ -2782,7 +2774,7 @@ msgstr "各レイヤーの印刷は決まった場所近い距離のポイント #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" -msgstr "" +msgstr "レイヤー始点X" #: fdmprinter.def.json msgctxt "layer_start_x description" @@ -2792,7 +2784,7 @@ msgstr "各レイヤーのプリントを開始する部分をしめすX座標 #: fdmprinter.def.json msgctxt "layer_start_y label" msgid "Layer Start Y" -msgstr "" +msgstr "レイヤー始点Y" #: fdmprinter.def.json msgctxt "layer_start_y description" @@ -2802,7 +2794,7 @@ msgstr "各レイヤーのプリントを開始する部分をしめすY座標 #: fdmprinter.def.json msgctxt "retraction_hop_enabled label" msgid "Z Hop When Retracted" -msgstr "" +msgstr "引き戻し時のZホップ" #: fdmprinter.def.json msgctxt "retraction_hop_enabled description" @@ -2812,7 +2804,7 @@ msgstr "引き戻しが完了すると、ビルドプレートが下降してノ #: fdmprinter.def.json msgctxt "retraction_hop_only_when_collides label" msgid "Z Hop Only Over Printed Parts" -msgstr "" +msgstr "印刷パーツに対するZホップ" #: fdmprinter.def.json msgctxt "retraction_hop_only_when_collides description" @@ -2822,7 +2814,7 @@ msgstr "走行時に印刷部品への衝突を避けるため、水平移動で #: fdmprinter.def.json msgctxt "retraction_hop label" msgid "Z Hop Height" -msgstr "" +msgstr "Zホップ高さ" #: fdmprinter.def.json msgctxt "retraction_hop description" @@ -2832,7 +2824,7 @@ msgstr "Zホップを実行するときの高さ。" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch label" msgid "Z Hop After Extruder Switch" -msgstr "" +msgstr "エクストルーダースイッチ後のZホップ" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch description" @@ -2842,7 +2834,7 @@ msgstr "マシーンが1つのエクストルーダーからもう一つのエ #: fdmprinter.def.json msgctxt "cooling label" msgid "Cooling" -msgstr "" +msgstr "冷却" #: fdmprinter.def.json msgctxt "cooling description" @@ -2852,7 +2844,7 @@ msgstr "冷却" #: fdmprinter.def.json msgctxt "cool_fan_enabled label" msgid "Enable Print Cooling" -msgstr "" +msgstr "印刷中の冷却を有効にする" #: fdmprinter.def.json msgctxt "cool_fan_enabled description" @@ -2862,7 +2854,7 @@ msgstr "印刷中の冷却ファンを有効にします。ファンは、短い #: fdmprinter.def.json msgctxt "cool_fan_speed label" msgid "Fan Speed" -msgstr "" +msgstr "ファン速度" #: fdmprinter.def.json msgctxt "cool_fan_speed description" @@ -2872,7 +2864,7 @@ msgstr "冷却ファンが回転する速度。" #: fdmprinter.def.json msgctxt "cool_fan_speed_min label" msgid "Regular Fan Speed" -msgstr "" +msgstr "標準ファン速度" #: fdmprinter.def.json #, fuzzy @@ -2883,7 +2875,7 @@ msgstr "しきい値に達する前のファンの回転スピード。プリン #: fdmprinter.def.json msgctxt "cool_fan_speed_max label" msgid "Maximum Fan Speed" -msgstr "" +msgstr "最大ファン速度" #: fdmprinter.def.json msgctxt "cool_fan_speed_max description" @@ -2893,7 +2885,7 @@ msgstr "最小積層時間でファンが回転する速度。しきい値に達 #: fdmprinter.def.json msgctxt "cool_min_layer_time_fan_speed_max label" msgid "Regular/Maximum Fan Speed Threshold" -msgstr "" +msgstr "標準/最大ファン速度のしきい値" #: fdmprinter.def.json msgctxt "cool_min_layer_time_fan_speed_max description" @@ -2903,7 +2895,7 @@ msgstr "通常速度と最速の間でしきい値を設定する積層時間。 #: fdmprinter.def.json msgctxt "cool_fan_speed_0 label" msgid "Initial Fan Speed" -msgstr "" +msgstr "初期ファン速度" #: fdmprinter.def.json #, fuzzy @@ -2914,7 +2906,7 @@ msgstr "プリント開始時にファンが回転する速度。後続のレイ #: fdmprinter.def.json msgctxt "cool_fan_full_at_height label" msgid "Regular Fan Speed at Height" -msgstr "" +msgstr "標準ファン速度時の高さ" #: fdmprinter.def.json msgctxt "cool_fan_full_at_height description" @@ -2924,7 +2916,7 @@ msgstr "通常速度でファンが回転するときの高さ。ここより下 #: fdmprinter.def.json msgctxt "cool_fan_full_layer label" msgid "Regular Fan Speed at Layer" -msgstr "" +msgstr "標準ファン速度時のレイヤー" #: fdmprinter.def.json msgctxt "cool_fan_full_layer description" @@ -2934,7 +2926,7 @@ msgstr "ファンが通常の速度で回転する時のレイヤー。通常速 #: fdmprinter.def.json msgctxt "cool_min_layer_time label" msgid "Minimum Layer Time" -msgstr "" +msgstr "最小レイヤー時間" #: fdmprinter.def.json msgctxt "cool_min_layer_time description" @@ -2944,7 +2936,7 @@ msgstr "一つのレイヤーに最低限費やす時間。1つの層に必ず #: fdmprinter.def.json msgctxt "cool_min_speed label" msgid "Minimum Speed" -msgstr "" +msgstr "最低速度" #: fdmprinter.def.json msgctxt "cool_min_speed description" @@ -2954,7 +2946,7 @@ msgstr "最遅印刷速度。印刷の速度が遅すぎると、ノズル内の #: fdmprinter.def.json msgctxt "cool_lift_head label" msgid "Lift Head" -msgstr "" +msgstr "ヘッド持ち上げ" #: fdmprinter.def.json msgctxt "cool_lift_head description" @@ -2964,7 +2956,7 @@ msgstr "レイヤーの最小プリント時間より早く印刷が終わった #: fdmprinter.def.json msgctxt "support label" msgid "Support" -msgstr "" +msgstr "サポート" #: fdmprinter.def.json msgctxt "support description" @@ -2974,7 +2966,7 @@ msgstr "サポート" #: fdmprinter.def.json msgctxt "support_enable label" msgid "Generate Support" -msgstr "" +msgstr "サポート開始" # msgstr "サポートを生成します。" #: fdmprinter.def.json @@ -2985,7 +2977,7 @@ msgstr "オーバーハングするモデルのサポートパーツの構造を #: fdmprinter.def.json msgctxt "support_extruder_nr label" msgid "Support Extruder" -msgstr "" +msgstr "サポート用エクストルーダー" #: fdmprinter.def.json msgctxt "support_extruder_nr description" @@ -2995,7 +2987,7 @@ msgstr "サポート材を印刷するためのエクストルーダー。複数 #: fdmprinter.def.json msgctxt "support_infill_extruder_nr label" msgid "Support Infill Extruder" -msgstr "" +msgstr "サポート用インフィルエクストルーダー" #: fdmprinter.def.json msgctxt "support_infill_extruder_nr description" @@ -3005,7 +2997,7 @@ msgstr "サポート材のインフィルを印刷に使用するためのエク #: fdmprinter.def.json msgctxt "support_extruder_nr_layer_0 label" msgid "First Layer Support Extruder" -msgstr "" +msgstr "最初のレイヤー用サポートエクストルーダー" #: fdmprinter.def.json msgctxt "support_extruder_nr_layer_0 description" @@ -3015,7 +3007,7 @@ msgstr "サポートのインフィルの最初の層を印刷に使用するエ #: fdmprinter.def.json msgctxt "support_interface_extruder_nr label" msgid "Support Interface Extruder" -msgstr "" +msgstr "サポートインタフェースエクストルーダー" #: fdmprinter.def.json msgctxt "support_interface_extruder_nr description" @@ -3025,7 +3017,7 @@ msgstr "サポートのルーフおよび底面を印刷するために使用す #: fdmprinter.def.json msgctxt "support_roof_extruder_nr label" msgid "Support Roof Extruder" -msgstr "" +msgstr "サポートルーフエクストルーダー" # msgstr "サポートルーフエクストルーダー" #: fdmprinter.def.json @@ -3036,7 +3028,7 @@ msgstr "サポートのルーフ面をプリントする際のエクストルー #: fdmprinter.def.json msgctxt "support_bottom_extruder_nr label" msgid "Support Floor Extruder" -msgstr "" +msgstr "サポートフロアエクストルーダー" # msgstr "サポートフロアエクストルーダー" #: fdmprinter.def.json @@ -3047,7 +3039,7 @@ msgstr "サポートのフロア面をプリントする際に使用するエク #: fdmprinter.def.json msgctxt "support_type label" msgid "Support Placement" -msgstr "" +msgstr "サポート配置" #: fdmprinter.def.json msgctxt "support_type description" @@ -3057,17 +3049,17 @@ msgstr "サポート材の配置を調整します。配置はTouching Buildplat #: fdmprinter.def.json msgctxt "support_type option buildplate" msgid "Touching Buildplate" -msgstr "" +msgstr "ビルドプレートにタッチ" #: fdmprinter.def.json msgctxt "support_type option everywhere" msgid "Everywhere" -msgstr "" +msgstr "全対象" #: fdmprinter.def.json msgctxt "support_angle label" msgid "Support Overhang Angle" -msgstr "" +msgstr "サポートオーバーハング角度" #: fdmprinter.def.json msgctxt "support_angle description" @@ -3077,7 +3069,7 @@ msgstr "サポート材がつくオーバーハングの最小角度。0° の #: fdmprinter.def.json msgctxt "support_pattern label" msgid "Support Pattern" -msgstr "" +msgstr "サポートパターン" #: fdmprinter.def.json msgctxt "support_pattern description" @@ -3087,43 +3079,43 @@ msgstr "サポート材の形。サポート材の除去の方法を頑丈また #: fdmprinter.def.json msgctxt "support_pattern option lines" msgid "Lines" -msgstr "" +msgstr "ライン" #: fdmprinter.def.json msgctxt "support_pattern option grid" msgid "Grid" -msgstr "" +msgstr "グリッド" #: fdmprinter.def.json msgctxt "support_pattern option triangles" msgid "Triangles" -msgstr "" +msgstr "トライアングル" #: fdmprinter.def.json msgctxt "support_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" #: fdmprinter.def.json msgctxt "support_pattern option concentric_3d" msgid "Concentric 3D" -msgstr "" +msgstr "3D同心円" #: fdmprinter.def.json msgctxt "support_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "support_pattern option cross" msgid "Cross" -msgstr "" +msgstr "クロス" # msgstr "クロス" #: fdmprinter.def.json msgctxt "support_connect_zigzags label" msgid "Connect Support ZigZags" -msgstr "" +msgstr "サポートジグザグ接続" #: fdmprinter.def.json msgctxt "support_connect_zigzags description" @@ -3133,7 +3125,7 @@ msgstr "ジグザグを接続します。ジグザグ形のサポート材の強 #: fdmprinter.def.json msgctxt "support_infill_rate label" msgid "Support Density" -msgstr "" +msgstr "サポート密度" #: fdmprinter.def.json msgctxt "support_infill_rate description" @@ -3143,7 +3135,7 @@ msgstr "サポート材の密度を調整します。大きな値ではオーバ #: fdmprinter.def.json msgctxt "support_line_distance label" msgid "Support Line Distance" -msgstr "" +msgstr "サポートライン距離" #: fdmprinter.def.json msgctxt "support_line_distance description" @@ -3153,7 +3145,7 @@ msgstr "印刷されたサポート材の間隔。この設定は、サポート #: fdmprinter.def.json msgctxt "support_z_distance label" msgid "Support Z Distance" -msgstr "" +msgstr "サポートZ距離" #: fdmprinter.def.json msgctxt "support_z_distance description" @@ -3163,7 +3155,7 @@ msgstr "サポート材のトップ/ボトム部分と印刷物との距離。 #: fdmprinter.def.json msgctxt "support_top_distance label" msgid "Support Top Distance" -msgstr "" +msgstr "サポート上部距離" #: fdmprinter.def.json msgctxt "support_top_distance description" @@ -3173,7 +3165,7 @@ msgstr "サポートの上部から印刷物までの距離。" #: fdmprinter.def.json msgctxt "support_bottom_distance label" msgid "Support Bottom Distance" -msgstr "" +msgstr "サポート底部距離" #: fdmprinter.def.json msgctxt "support_bottom_distance description" @@ -3183,7 +3175,7 @@ msgstr "印刷物とサポート材底部までの距離。" #: fdmprinter.def.json msgctxt "support_xy_distance label" msgid "Support X/Y Distance" -msgstr "" +msgstr "サポートX/Y距離" #: fdmprinter.def.json msgctxt "support_xy_distance description" @@ -3193,7 +3185,7 @@ msgstr "印刷物からX/Y方向へのサポート材との距離" #: fdmprinter.def.json msgctxt "support_xy_overrides_z label" msgid "Support Distance Priority" -msgstr "" +msgstr "サポート距離優先順位" #: fdmprinter.def.json msgctxt "support_xy_overrides_z description" @@ -3203,17 +3195,17 @@ msgstr "X /Y方向のサポートの距離がZ方向のサポートの距離を #: fdmprinter.def.json msgctxt "support_xy_overrides_z option xy_overrides_z" msgid "X/Y overrides Z" -msgstr "" +msgstr "X/YがZを上書き" #: fdmprinter.def.json msgctxt "support_xy_overrides_z option z_overrides_xy" msgid "Z overrides X/Y" -msgstr "" +msgstr "ZがX/Yを上書き" #: fdmprinter.def.json msgctxt "support_xy_distance_overhang label" msgid "Minimum Support X/Y Distance" -msgstr "" +msgstr "最小サポートX/Y距離" #: fdmprinter.def.json msgctxt "support_xy_distance_overhang description" @@ -3223,7 +3215,7 @@ msgstr "X/Y方向におけるオーバーハングからサポートまでの距 #: fdmprinter.def.json msgctxt "support_bottom_stair_step_height label" msgid "Support Stair Step Height" -msgstr "" +msgstr "サポート階段高さ" #: fdmprinter.def.json msgctxt "support_bottom_stair_step_height description" @@ -3233,7 +3225,7 @@ msgstr "モデルにのっている階段状のサポートの底のステップ #: fdmprinter.def.json msgctxt "support_bottom_stair_step_width label" msgid "Support Stair Step Maximum Width" -msgstr "" +msgstr "サポート階段最大幅" # msgstr "階段状ステップサポートの最大幅" #: fdmprinter.def.json @@ -3244,7 +3236,7 @@ msgstr "モデルにのっている階段のような下部のサポートのス #: fdmprinter.def.json msgctxt "support_join_distance label" msgid "Support Join Distance" -msgstr "" +msgstr "サポート接合距離" #: fdmprinter.def.json msgctxt "support_join_distance description" @@ -3254,7 +3246,7 @@ msgstr "X/Y方向のサポート構造間の最大距離。別の構造がこの #: fdmprinter.def.json msgctxt "support_offset label" msgid "Support Horizontal Expansion" -msgstr "" +msgstr "サポート水平展開" #: fdmprinter.def.json msgctxt "support_offset description" @@ -3264,7 +3256,7 @@ msgstr "各レイヤーのサポート用ポリゴンに適用されるオフセ #: fdmprinter.def.json msgctxt "support_infill_sparse_thickness label" msgid "Support Infill Layer Thickness" -msgstr "" +msgstr "サポートインフィルレイヤー厚さ" # msgstr "サポートインフィルのレイヤーの厚さ" #: fdmprinter.def.json @@ -3275,7 +3267,7 @@ msgstr "サポートのインフィルの厚さ。この値はレイヤーの倍 #: fdmprinter.def.json msgctxt "gradual_support_infill_steps label" msgid "Gradual Support Infill Steps" -msgstr "" +msgstr "サポートインフィル半減回数" # msgstr "段階的なサポート インフィルステップ" #: fdmprinter.def.json @@ -3286,7 +3278,7 @@ msgstr "天井面より下に遠ざかる際にサポートのインフィル密 #: fdmprinter.def.json msgctxt "gradual_support_infill_step_height label" msgid "Gradual Support Infill Step Height" -msgstr "" +msgstr "サポートインフィル半減前の高さ" # msgstr "段階的なサポート インフィル ステップの高さ" #: fdmprinter.def.json @@ -3297,7 +3289,7 @@ msgstr "密度が半分に切り替える前の所定のサポートのインフ #: fdmprinter.def.json msgctxt "support_interface_enable label" msgid "Enable Support Interface" -msgstr "" +msgstr "サポートインタフェースを有効にする" #: fdmprinter.def.json msgctxt "support_interface_enable description" @@ -3307,7 +3299,7 @@ msgstr "モデルとサポートの間に密なインターフェースを生成 #: fdmprinter.def.json msgctxt "support_roof_enable label" msgid "Enable Support Roof" -msgstr "" +msgstr "サポートルーフを有効にする" # msgstr "サポートルーフの有効化" #: fdmprinter.def.json @@ -3318,7 +3310,7 @@ msgstr "サポートの上部とモデルの間に高密度の厚板を形成し #: fdmprinter.def.json msgctxt "support_bottom_enable label" msgid "Enable Support Floor" -msgstr "" +msgstr "サポートフロアを有効にする" # msgstr "サポートフロアを有効にします。" #: fdmprinter.def.json @@ -3329,7 +3321,7 @@ msgstr "サポートの上部とモデルの間に高密度の厚板を形成し #: fdmprinter.def.json msgctxt "support_interface_height label" msgid "Support Interface Thickness" -msgstr "" +msgstr "サポートインタフェース厚さ" #: fdmprinter.def.json msgctxt "support_interface_height description" @@ -3339,7 +3331,7 @@ msgstr "底面または上部のモデルと接触するサポートのインタ #: fdmprinter.def.json msgctxt "support_roof_height label" msgid "Support Roof Thickness" -msgstr "" +msgstr "サポートルーフ厚さ" #: fdmprinter.def.json msgctxt "support_roof_height description" @@ -3349,7 +3341,7 @@ msgstr "サポートのルーフの厚さ。これは、モデルの下につく #: fdmprinter.def.json msgctxt "support_bottom_height label" msgid "Support Floor Thickness" -msgstr "" +msgstr "サポートフロア厚さ" # msgstr "サポートのフロアの厚み" #: fdmprinter.def.json @@ -3360,7 +3352,7 @@ msgstr "サポート材の底部の厚さ。これは、サポートが置かれ #: fdmprinter.def.json msgctxt "support_interface_skip_height label" msgid "Support Interface Resolution" -msgstr "" +msgstr "サポートインタフェース解像度" #: fdmprinter.def.json msgctxt "support_interface_skip_height description" @@ -3370,7 +3362,7 @@ msgstr "サポートの上下にモデルがあるかどうか確認するには #: fdmprinter.def.json msgctxt "support_interface_density label" msgid "Support Interface Density" -msgstr "" +msgstr "サポートインタフェース密度" #: fdmprinter.def.json msgctxt "support_interface_density description" @@ -3380,7 +3372,7 @@ msgstr "サポート材のルーフとフロアの密度を調整します 大 #: fdmprinter.def.json msgctxt "support_roof_density label" msgid "Support Roof Density" -msgstr "" +msgstr "サポートルーフ密度" # msgstr "サポートルーフの密度" #: fdmprinter.def.json @@ -3391,7 +3383,7 @@ msgstr "サポート材のルーフの部分の密度を調整します 大き #: fdmprinter.def.json msgctxt "support_roof_line_distance label" msgid "Support Roof Line Distance" -msgstr "" +msgstr "サポートルーフライン距離" # msgstr "サポートルーフライン距離" #: fdmprinter.def.json @@ -3402,7 +3394,7 @@ msgstr "印刷されたサポートルーフ線間の距離。この設定は、 #: fdmprinter.def.json msgctxt "support_bottom_density label" msgid "Support Floor Density" -msgstr "" +msgstr "サポートフロア密度" # msgstr "サポートフロア密度" #: fdmprinter.def.json @@ -3413,7 +3405,7 @@ msgstr "サポート構造のフロアの密度です。高い値は、サポー #: fdmprinter.def.json msgctxt "support_bottom_line_distance label" msgid "Support Floor Line Distance" -msgstr "" +msgstr "サポートフロアライン距離" #: fdmprinter.def.json msgctxt "support_bottom_line_distance description" @@ -3423,7 +3415,7 @@ msgstr "印刷されたサポートのフロアのライン間の距離。この #: fdmprinter.def.json msgctxt "support_interface_pattern label" msgid "Support Interface Pattern" -msgstr "" +msgstr "サポートインタフェースパターン" #: fdmprinter.def.json msgctxt "support_interface_pattern description" @@ -3433,37 +3425,37 @@ msgstr "モデルとサポートのインタフェースが印刷されるパタ #: fdmprinter.def.json msgctxt "support_interface_pattern option lines" msgid "Lines" -msgstr "" +msgstr "ライン" #: fdmprinter.def.json msgctxt "support_interface_pattern option grid" msgid "Grid" -msgstr "" +msgstr "グリッド" #: fdmprinter.def.json msgctxt "support_interface_pattern option triangles" msgid "Triangles" -msgstr "" +msgstr "トライアングル" #: fdmprinter.def.json msgctxt "support_interface_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" #: fdmprinter.def.json msgctxt "support_interface_pattern option concentric_3d" msgid "Concentric 3D" -msgstr "" +msgstr "3D同心円" #: fdmprinter.def.json msgctxt "support_interface_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "support_roof_pattern label" msgid "Support Roof Pattern" -msgstr "" +msgstr "サポートルーフパターン" # msgstr "ルーフのサポートのパターン" #: fdmprinter.def.json @@ -3474,43 +3466,43 @@ msgstr "サポートのルーフが印刷されるパターン" #: fdmprinter.def.json msgctxt "support_roof_pattern option lines" msgid "Lines" -msgstr "" +msgstr "ライン" # msgstr "線" #: fdmprinter.def.json msgctxt "support_roof_pattern option grid" msgid "Grid" -msgstr "" +msgstr "グリッド" # msgstr "グリッド" #: fdmprinter.def.json msgctxt "support_roof_pattern option triangles" msgid "Triangles" -msgstr "" +msgstr "トライアングル" # msgstr "三角形" #: fdmprinter.def.json msgctxt "support_roof_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" # msgstr "同心" #: fdmprinter.def.json msgctxt "support_roof_pattern option concentric_3d" msgid "Concentric 3D" -msgstr "" +msgstr "3D同心円" # msgstr "同心3D" #: fdmprinter.def.json msgctxt "support_roof_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" # msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "support_bottom_pattern label" msgid "Support Floor Pattern" -msgstr "" +msgstr "サポートフロアパターン" # msgstr "サポートフロアパターン" #: fdmprinter.def.json @@ -3521,43 +3513,43 @@ msgstr "サポートのフロアが印刷されるパターン。" #: fdmprinter.def.json msgctxt "support_bottom_pattern option lines" msgid "Lines" -msgstr "" +msgstr "ライン" # msgstr "線" #: fdmprinter.def.json msgctxt "support_bottom_pattern option grid" msgid "Grid" -msgstr "" +msgstr "グリッド" # msgstr "グリッド" #: fdmprinter.def.json msgctxt "support_bottom_pattern option triangles" msgid "Triangles" -msgstr "" +msgstr "トライアングル" # msgstr "三角形" #: fdmprinter.def.json msgctxt "support_bottom_pattern option concentric" msgid "Concentric" -msgstr "" +msgstr "同心円" # msgstr "同心円" #: fdmprinter.def.json msgctxt "support_bottom_pattern option concentric_3d" msgid "Concentric 3D" -msgstr "" +msgstr "3D同心円" # msgstr "コンセントリック3D" #: fdmprinter.def.json msgctxt "support_bottom_pattern option zigzag" msgid "Zig Zag" -msgstr "" +msgstr "ジグザグ" # msgstr "ジグザグ" #: fdmprinter.def.json msgctxt "support_use_towers label" msgid "Use Towers" -msgstr "" +msgstr "使用タワー" #: fdmprinter.def.json msgctxt "support_use_towers description" @@ -3567,7 +3559,7 @@ msgstr "特殊なタワーを使用して、小さなオーバーハングして #: fdmprinter.def.json msgctxt "support_tower_diameter label" msgid "Tower Diameter" -msgstr "" +msgstr "タワー直径" #: fdmprinter.def.json msgctxt "support_tower_diameter description" @@ -3577,7 +3569,7 @@ msgstr "特別な塔の直径。" #: fdmprinter.def.json msgctxt "support_minimal_diameter label" msgid "Minimum Diameter" -msgstr "" +msgstr "最小直径" #: fdmprinter.def.json msgctxt "support_minimal_diameter description" @@ -3587,7 +3579,7 @@ msgstr "特殊なサポート塔によって支持される小さな領域のX / #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" msgid "Tower Roof Angle" -msgstr "" +msgstr "タワールーフ角度" #: fdmprinter.def.json msgctxt "support_tower_roof_angle description" @@ -3597,7 +3589,7 @@ msgstr "タワーの屋上の角度。値が高いほど尖った屋根が得ら #: fdmprinter.def.json msgctxt "platform_adhesion label" msgid "Build Plate Adhesion" -msgstr "" +msgstr "ビルドプレート密着性" #: fdmprinter.def.json msgctxt "platform_adhesion description" @@ -3607,7 +3599,7 @@ msgstr "密着性" #: fdmprinter.def.json msgctxt "prime_blob_enable label" msgid "Enable Prime Blob" -msgstr "" +msgstr "プライムボルブを有効にする" # msgstr "プライムブロブを有効にする" #: fdmprinter.def.json @@ -3618,7 +3610,7 @@ msgstr "印刷する前にフィラメントの小さな塊を作るかどうか #: fdmprinter.def.json msgctxt "extruder_prime_pos_x label" msgid "Extruder Prime X Position" -msgstr "" +msgstr "エクストルーダープライムX位置" #: fdmprinter.def.json msgctxt "extruder_prime_pos_x description" @@ -3628,7 +3620,7 @@ msgstr "プリント開始時のノズルの位置を表すX座標。" #: fdmprinter.def.json msgctxt "extruder_prime_pos_y label" msgid "Extruder Prime Y Position" -msgstr "" +msgstr "エクストルーダープライムY位置" #: fdmprinter.def.json msgctxt "extruder_prime_pos_y description" @@ -3638,7 +3630,7 @@ msgstr "プリント開始時にノズル位置を表すY座標。" #: fdmprinter.def.json msgctxt "adhesion_type label" msgid "Build Plate Adhesion Type" -msgstr "" +msgstr "ビルドプレート接着タイプ" #: fdmprinter.def.json msgctxt "adhesion_type description" @@ -3648,31 +3640,31 @@ msgstr "エクストルーダーとビルドプレートへの接着両方を改 #: fdmprinter.def.json msgctxt "adhesion_type option skirt" msgid "Skirt" -msgstr "" +msgstr "スカート" # msgstr "スカート" #: fdmprinter.def.json msgctxt "adhesion_type option brim" msgid "Brim" -msgstr "" +msgstr "ブリム" # msgstr "ブリム" #: fdmprinter.def.json msgctxt "adhesion_type option raft" msgid "Raft" -msgstr "" +msgstr "ラフト" # msgstr "ラフト" #: fdmprinter.def.json msgctxt "adhesion_type option none" msgid "None" -msgstr "" +msgstr "なし" # msgstr "なし" #: fdmprinter.def.json msgctxt "adhesion_extruder_nr label" msgid "Build Plate Adhesion Extruder" -msgstr "" +msgstr "ビルドプレート接着エクストルーダー" #: fdmprinter.def.json msgctxt "adhesion_extruder_nr description" @@ -3682,7 +3674,7 @@ msgstr "スカート/ブリム/ラフトをプリントする際のエクスト #: fdmprinter.def.json msgctxt "skirt_line_count label" msgid "Skirt Line Count" -msgstr "" +msgstr "スカートライン数" #: fdmprinter.def.json msgctxt "skirt_line_count description" @@ -3692,19 +3684,19 @@ msgstr "複数のスカートラインを使用すると、小さなモデル形 #: fdmprinter.def.json msgctxt "skirt_gap label" msgid "Skirt Distance" -msgstr "" +msgstr "スカート距離" #: fdmprinter.def.json 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 "" +msgstr "スカートと印刷の最初の層の間の水平距離。\nこれは最小距離です。複数のスカートラインがこの距離から外側に展開されます。" #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" msgid "Skirt/Brim Minimum Length" -msgstr "" +msgstr "スカート/ブリム最小長さ" #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length description" @@ -3714,7 +3706,7 @@ msgstr "スカートまたはブリム最短の長さ。この長さにすべて #: fdmprinter.def.json msgctxt "brim_width label" msgid "Brim Width" -msgstr "" +msgstr "ブリム幅" #: fdmprinter.def.json msgctxt "brim_width description" @@ -3724,7 +3716,7 @@ msgstr "モデルから最外線のブリムまでの距離。大きなブリム #: fdmprinter.def.json msgctxt "brim_line_count label" msgid "Brim Line Count" -msgstr "" +msgstr "ブリムライン数" #: fdmprinter.def.json msgctxt "brim_line_count description" @@ -3734,7 +3726,7 @@ msgstr "ブリムに使用される線数。ブリムの線数は、ビルドプ #: fdmprinter.def.json msgctxt "brim_outside_only label" msgid "Brim Only on Outside" -msgstr "" +msgstr "外側にブリムのみ印刷" #: fdmprinter.def.json msgctxt "brim_outside_only description" @@ -3744,7 +3736,7 @@ msgstr "モデルの外側のみにブリムを印刷します。これにより #: fdmprinter.def.json msgctxt "raft_margin label" msgid "Raft Extra Margin" -msgstr "" +msgstr "ラフトの余分なマージン" #: fdmprinter.def.json msgctxt "raft_margin description" @@ -3754,17 +3746,17 @@ msgstr "ラフトが有効になっている場合、モデルの周りに余分 #: fdmprinter.def.json msgctxt "raft_smoothing label" msgid "Raft Smoothing" -msgstr "" +msgstr "ラフト補整" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "この設定は、ラフトの輪郭の内側の角がどの程度丸められるかを制御します。内側の角は、ここで指定した値と等しい半径の半円に丸められます。この設定は、そのような円よりも小さいラフトの輪郭の穴を削除します。" #: fdmprinter.def.json msgctxt "raft_airgap label" msgid "Raft Air Gap" -msgstr "" +msgstr "ラフト間のラップ" #: fdmprinter.def.json msgctxt "raft_airgap description" @@ -3774,7 +3766,7 @@ msgstr "モデルの第一層のラフトと最終ラフト層の隙間。この #: fdmprinter.def.json msgctxt "layer_0_z_overlap label" msgid "Initial Layer Z Overlap" -msgstr "" +msgstr "初期レイヤーZのオーバーラップ" #: fdmprinter.def.json msgctxt "layer_0_z_overlap description" @@ -3784,7 +3776,7 @@ msgstr "エアギャップ内で失われたフィラメントを補うために #: fdmprinter.def.json msgctxt "raft_surface_layers label" msgid "Raft Top Layers" -msgstr "" +msgstr "ラフト最上層" #: fdmprinter.def.json msgctxt "raft_surface_layers description" @@ -3794,7 +3786,7 @@ msgstr "第2ラフト層の上の最上層の数。これらは、モデルが #: fdmprinter.def.json msgctxt "raft_surface_thickness label" msgid "Raft Top Layer Thickness" -msgstr "" +msgstr "ラフト最上層厚さ" #: fdmprinter.def.json msgctxt "raft_surface_thickness description" @@ -3804,7 +3796,7 @@ msgstr "トップラフト層の層厚。" #: fdmprinter.def.json msgctxt "raft_surface_line_width label" msgid "Raft Top Line Width" -msgstr "" +msgstr "ラフト最上ライン幅" #: fdmprinter.def.json msgctxt "raft_surface_line_width description" @@ -3814,7 +3806,7 @@ msgstr "ラフトの上面の線の幅。これらは細い線で、ラフトの #: fdmprinter.def.json msgctxt "raft_surface_line_spacing label" msgid "Raft Top Spacing" -msgstr "" +msgstr "ラフト最上面スペース" #: fdmprinter.def.json msgctxt "raft_surface_line_spacing description" @@ -3824,7 +3816,7 @@ msgstr "上のラフト層とラフト線の間の距離。間隔は線の幅と #: fdmprinter.def.json msgctxt "raft_interface_thickness label" msgid "Raft Middle Thickness" -msgstr "" +msgstr "ラフト中央厚さ" #: fdmprinter.def.json msgctxt "raft_interface_thickness description" @@ -3834,7 +3826,7 @@ msgstr "中間のラフト層の層の厚さ。" #: fdmprinter.def.json msgctxt "raft_interface_line_width label" msgid "Raft Middle Line Width" -msgstr "" +msgstr "ラフト中央ライン幅" #: fdmprinter.def.json msgctxt "raft_interface_line_width description" @@ -3844,7 +3836,7 @@ msgstr "中間ラフト層の線の幅。第2層をより押し出すと、ラ #: fdmprinter.def.json msgctxt "raft_interface_line_spacing label" msgid "Raft Middle Spacing" -msgstr "" +msgstr "ラフト中間スペース" #: fdmprinter.def.json msgctxt "raft_interface_line_spacing description" @@ -3854,7 +3846,7 @@ msgstr "中間ラフト層とラフト線の間の距離。中央の間隔はか #: fdmprinter.def.json msgctxt "raft_base_thickness label" msgid "Raft Base Thickness" -msgstr "" +msgstr "ラフトベース厚さ" #: fdmprinter.def.json msgctxt "raft_base_thickness description" @@ -3864,7 +3856,7 @@ msgstr "ベースラフト層の層厚さ。プリンタのビルドプレート #: fdmprinter.def.json msgctxt "raft_base_line_width label" msgid "Raft Base Line Width" -msgstr "" +msgstr "ラフトベースライン幅" #: fdmprinter.def.json msgctxt "raft_base_line_width description" @@ -3874,7 +3866,7 @@ msgstr "ベースラフト層の線幅。ビルドプレートの接着のため #: fdmprinter.def.json msgctxt "raft_base_line_spacing label" msgid "Raft Line Spacing" -msgstr "" +msgstr "ラフトラインスペース" #: fdmprinter.def.json msgctxt "raft_base_line_spacing description" @@ -3884,7 +3876,7 @@ msgstr "ベースラフト層のラフトライン間の距離。広い間隔は #: fdmprinter.def.json msgctxt "raft_speed label" msgid "Raft Print Speed" -msgstr "" +msgstr "ラフト印刷速度" #: fdmprinter.def.json msgctxt "raft_speed description" @@ -3894,7 +3886,7 @@ msgstr "ラフトが印刷される速度。" #: fdmprinter.def.json msgctxt "raft_surface_speed label" msgid "Raft Top Print Speed" -msgstr "" +msgstr "ラフト上層印刷速度" #: fdmprinter.def.json msgctxt "raft_surface_speed description" @@ -3904,7 +3896,7 @@ msgstr "トップラフト層が印刷される速度。この値はノズルが #: fdmprinter.def.json msgctxt "raft_interface_speed label" msgid "Raft Middle Print Speed" -msgstr "" +msgstr "ラフト中間印刷速度" #: fdmprinter.def.json msgctxt "raft_interface_speed description" @@ -3914,7 +3906,7 @@ msgstr "ミドルラフト層が印刷される速度。ノズルから出てく #: fdmprinter.def.json msgctxt "raft_base_speed label" msgid "Raft Base Print Speed" -msgstr "" +msgstr "ラフトベース印刷速度" #: fdmprinter.def.json msgctxt "raft_base_speed description" @@ -3924,7 +3916,7 @@ msgstr "ベースラフト層が印刷される速度。これは、ノズルか #: fdmprinter.def.json msgctxt "raft_acceleration label" msgid "Raft Print Acceleration" -msgstr "" +msgstr "ラフト印刷加速度" #: fdmprinter.def.json msgctxt "raft_acceleration description" @@ -3934,7 +3926,7 @@ msgstr "ラフト印刷時の加速度。" #: fdmprinter.def.json msgctxt "raft_surface_acceleration label" msgid "Raft Top Print Acceleration" -msgstr "" +msgstr "ラフト上層層印刷加速度" #: fdmprinter.def.json msgctxt "raft_surface_acceleration description" @@ -3944,7 +3936,7 @@ msgstr "ラフトのトップ印刷時の加速度" #: fdmprinter.def.json msgctxt "raft_interface_acceleration label" msgid "Raft Middle Print Acceleration" -msgstr "" +msgstr "ラフト中間層印刷加速度" #: fdmprinter.def.json msgctxt "raft_interface_acceleration description" @@ -3954,7 +3946,7 @@ msgstr "ラフトの中間層印刷時の加速度" #: fdmprinter.def.json msgctxt "raft_base_acceleration label" msgid "Raft Base Print Acceleration" -msgstr "" +msgstr "ラフトベース印刷加速度" #: fdmprinter.def.json msgctxt "raft_base_acceleration description" @@ -3964,7 +3956,7 @@ msgstr "ラフトの底面印刷時の加速度" #: fdmprinter.def.json msgctxt "raft_jerk label" msgid "Raft Print Jerk" -msgstr "" +msgstr "ラフト印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_jerk description" @@ -3974,7 +3966,7 @@ msgstr "ラフトが印刷時のジャーク。" #: fdmprinter.def.json msgctxt "raft_surface_jerk label" msgid "Raft Top Print Jerk" -msgstr "" +msgstr "ラフト上層印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_surface_jerk description" @@ -3984,7 +3976,7 @@ msgstr "トップラフト層印刷時のジャーク" #: fdmprinter.def.json msgctxt "raft_interface_jerk label" msgid "Raft Middle Print Jerk" -msgstr "" +msgstr "ラフト中間層印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_interface_jerk description" @@ -3994,7 +3986,7 @@ msgstr "ミドルラフト層印刷時のジャーク" #: fdmprinter.def.json msgctxt "raft_base_jerk label" msgid "Raft Base Print Jerk" -msgstr "" +msgstr "ラフトベース印刷ジャーク" #: fdmprinter.def.json msgctxt "raft_base_jerk description" @@ -4004,7 +3996,7 @@ msgstr "ベースラフト層印刷時のジャーク" #: fdmprinter.def.json msgctxt "raft_fan_speed label" msgid "Raft Fan Speed" -msgstr "" +msgstr "ラフトファン速度" #: fdmprinter.def.json msgctxt "raft_fan_speed description" @@ -4014,7 +4006,7 @@ msgstr "ラフト印刷時のファンの速度。" #: fdmprinter.def.json msgctxt "raft_surface_fan_speed label" msgid "Raft Top Fan Speed" -msgstr "" +msgstr "ラフト上層ファン速度" #: fdmprinter.def.json msgctxt "raft_surface_fan_speed description" @@ -4024,7 +4016,7 @@ msgstr "トップラフト印刷時のファンの速度。" #: fdmprinter.def.json msgctxt "raft_interface_fan_speed label" msgid "Raft Middle Fan Speed" -msgstr "" +msgstr "ラフト中間層ファン速度" #: fdmprinter.def.json msgctxt "raft_interface_fan_speed description" @@ -4034,7 +4026,7 @@ msgstr "ミドルラフト印刷時のファンの速度。" #: fdmprinter.def.json msgctxt "raft_base_fan_speed label" msgid "Raft Base Fan Speed" -msgstr "" +msgstr "ラフトベースファン速度" #: fdmprinter.def.json msgctxt "raft_base_fan_speed description" @@ -4044,7 +4036,7 @@ msgstr "ベースラフト層印刷時のファン速度" #: fdmprinter.def.json msgctxt "dual label" msgid "Dual Extrusion" -msgstr "" +msgstr "デュアルエクストルーダー" #: fdmprinter.def.json msgctxt "dual description" @@ -4054,7 +4046,7 @@ msgstr "デュアルエクストルーダーで印刷するための設定" #: fdmprinter.def.json msgctxt "prime_tower_enable label" msgid "Enable Prime Tower" -msgstr "" +msgstr "プライムタワーを有効にする" #: fdmprinter.def.json msgctxt "prime_tower_enable description" @@ -4064,7 +4056,7 @@ msgstr "印刷物の横にタワーを造形して、ノズル交換後にフィ #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" -msgstr "" +msgstr "プライムタワーのサイズ" #: fdmprinter.def.json msgctxt "prime_tower_size description" @@ -4074,7 +4066,7 @@ msgstr "プライムタワーの幅。" #: fdmprinter.def.json msgctxt "prime_tower_min_volume label" msgid "Prime Tower Minimum Volume" -msgstr "" +msgstr "プライムタワー最小容積" #: fdmprinter.def.json msgctxt "prime_tower_min_volume description" @@ -4084,7 +4076,7 @@ msgstr "プライムタワーの各層の最小容積" #: fdmprinter.def.json msgctxt "prime_tower_wall_thickness label" msgid "Prime Tower Thickness" -msgstr "" +msgstr "プライムタワーの厚さ" #: fdmprinter.def.json msgctxt "prime_tower_wall_thickness description" @@ -4094,7 +4086,7 @@ msgstr "中空プライムタワーの厚さ。プライムタワーの半分を #: fdmprinter.def.json msgctxt "prime_tower_position_x label" msgid "Prime Tower X Position" -msgstr "" +msgstr "プライムタワーX位置" #: fdmprinter.def.json msgctxt "prime_tower_position_x description" @@ -4104,7 +4096,7 @@ msgstr "プライムタワーの位置のx座標。" #: fdmprinter.def.json msgctxt "prime_tower_position_y label" msgid "Prime Tower Y Position" -msgstr "" +msgstr "プライムタワーY位置" #: fdmprinter.def.json msgctxt "prime_tower_position_y description" @@ -4114,7 +4106,7 @@ msgstr "プライムタワーの位置のy座標。" #: fdmprinter.def.json msgctxt "prime_tower_flow label" msgid "Prime Tower Flow" -msgstr "" +msgstr "プライムタワーのフロー" #: fdmprinter.def.json msgctxt "prime_tower_flow description" @@ -4124,7 +4116,7 @@ msgstr "吐出量: マテリアルの吐出量はこの値の乗算で計算さ #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" -msgstr "" +msgstr "プライムタワーノズル拭き取り" #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled description" @@ -4134,7 +4126,7 @@ msgstr "1本のノズルでプライムタワーを印刷した後、もう片 #: fdmprinter.def.json msgctxt "dual_pre_wipe label" msgid "Wipe Nozzle After Switch" -msgstr "" +msgstr "スイッチ後のノズル拭き取り" #: fdmprinter.def.json msgctxt "dual_pre_wipe description" @@ -4144,7 +4136,7 @@ msgstr "エクストルーダーを切り替えた後、最初に印刷したも #: fdmprinter.def.json msgctxt "prime_tower_purge_volume label" msgid "Prime Tower Purge Volume" -msgstr "" +msgstr "プライムタワーのパージ量" # msgstr "プライムタワーのパージ時のボリューム" #: fdmprinter.def.json @@ -4155,7 +4147,7 @@ msgstr "プライムタワーの上を拭くときにパージするフィラメ #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" msgid "Enable Ooze Shield" -msgstr "" +msgstr "Ooze Shieldを有効にする" #: fdmprinter.def.json msgctxt "ooze_shield_enabled description" @@ -4165,7 +4157,7 @@ msgstr "モデルの周りに壁(ooze shield)を作る。これを生成す #: fdmprinter.def.json msgctxt "ooze_shield_angle label" msgid "Ooze Shield Angle" -msgstr "" +msgstr "Ooze Shield角度" #: fdmprinter.def.json msgctxt "ooze_shield_angle description" @@ -4175,7 +4167,7 @@ msgstr "壁(ooze shield)作成時の最大の角度。 0度は垂直であ #: fdmprinter.def.json msgctxt "ooze_shield_dist label" msgid "Ooze Shield Distance" -msgstr "" +msgstr "Ooze Shield距離" #: fdmprinter.def.json msgctxt "ooze_shield_dist description" @@ -4185,7 +4177,7 @@ msgstr "壁(ooze shield)の造形物からの距離" #: fdmprinter.def.json msgctxt "meshfix label" msgid "Mesh Fixes" -msgstr "" +msgstr "メッシュ修正" #: fdmprinter.def.json msgctxt "meshfix description" @@ -4195,7 +4187,7 @@ msgstr "カテゴリー_メッシュ修正" #: fdmprinter.def.json msgctxt "meshfix_union_all label" msgid "Union Overlapping Volumes" -msgstr "" +msgstr "重複量" #: fdmprinter.def.json msgctxt "meshfix_union_all description" @@ -4205,7 +4197,7 @@ msgstr "メッシュ内の重なり合うボリュームから生じる内部ジ #: fdmprinter.def.json msgctxt "meshfix_union_all_remove_holes label" msgid "Remove All Holes" -msgstr "" +msgstr "全穴除去" #: fdmprinter.def.json msgctxt "meshfix_union_all_remove_holes description" @@ -4215,7 +4207,7 @@ msgstr "各レイヤーの穴を消し、外形のみを保持します。これ #: fdmprinter.def.json msgctxt "meshfix_extensive_stitching label" msgid "Extensive Stitching" -msgstr "" +msgstr "強めのスティッチング" #: fdmprinter.def.json msgctxt "meshfix_extensive_stitching description" @@ -4225,7 +4217,7 @@ msgstr "強めのスティッチングは、穴をメッシュで塞いでデー #: fdmprinter.def.json msgctxt "meshfix_keep_open_polygons label" msgid "Keep Disconnected Faces" -msgstr "" +msgstr "スティッチできない部分を保持" #: fdmprinter.def.json msgctxt "meshfix_keep_open_polygons description" @@ -4235,17 +4227,17 @@ msgstr "通常、Curaはメッシュ内の小さな穴をスティッチし、 #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "最大解像度" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "スライス後の線分の最小サイズ。これを増やすと、メッシュの解像度が低くなります。これにより、プリンタが g コードの処理速度に追いつくことができ、処理できないメッシュの詳細を取り除いてスライス速度を速めます。" #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" msgid "Merged Meshes Overlap" -msgstr "" +msgstr "重複メッシュのマージ" #: fdmprinter.def.json msgctxt "multiple_mesh_overlap description" @@ -4255,7 +4247,7 @@ msgstr "触れているメッシュを少し重ねてください。これによ #: fdmprinter.def.json msgctxt "carve_multiple_volumes label" msgid "Remove Mesh Intersection" -msgstr "" +msgstr "重複メッシュの削除" #: fdmprinter.def.json msgctxt "carve_multiple_volumes description" @@ -4265,7 +4257,7 @@ msgstr "複数のメッシュが重なっている領域を削除します。こ #: fdmprinter.def.json msgctxt "alternate_carve_order label" msgid "Alternate Mesh Removal" -msgstr "" +msgstr "代替メッシュの削除" #: fdmprinter.def.json msgctxt "alternate_carve_order description" @@ -4275,17 +4267,17 @@ msgstr "交差するメッシュがどのレイヤーに属しているかを切 #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "空の最初のメッシュの削除" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "最初に印刷したレイヤーの下に空のレイヤーがある場合は取り除きます。この設定を無効にすると、スライストレランスが「排他」または「中間」に設定されている場合に最初のレイヤーが空になる原因になります。" #: fdmprinter.def.json msgctxt "blackmagic label" msgid "Special Modes" -msgstr "" +msgstr "特別モード" #: fdmprinter.def.json msgctxt "blackmagic description" @@ -4295,7 +4287,7 @@ msgstr "カテゴリー_ブラックマジック" #: fdmprinter.def.json msgctxt "print_sequence label" msgid "Print Sequence" -msgstr "" +msgstr "印刷頻度" #: fdmprinter.def.json msgctxt "print_sequence description" @@ -4305,17 +4297,17 @@ msgstr "すべてのモデルをレイヤーごとに印刷するか、1つの #: fdmprinter.def.json msgctxt "print_sequence option all_at_once" msgid "All at Once" -msgstr "" +msgstr "一度にすべて" #: fdmprinter.def.json msgctxt "print_sequence option one_at_a_time" msgid "One at a Time" -msgstr "" +msgstr "1つずつ" #: fdmprinter.def.json msgctxt "infill_mesh label" msgid "Infill Mesh" -msgstr "" +msgstr "インフィルメッシュ" #: fdmprinter.def.json msgctxt "infill_mesh description" @@ -4325,7 +4317,7 @@ msgstr "このメッシュを使用して、重なる他のメッシュのイン #: fdmprinter.def.json msgctxt "infill_mesh_order label" msgid "Infill Mesh Order" -msgstr "" +msgstr "インフィルメッシュの順序" #: fdmprinter.def.json msgctxt "infill_mesh_order description" @@ -4335,7 +4327,7 @@ msgstr "他のインフィルメッシュのインフィル内にあるインフ #: fdmprinter.def.json msgctxt "cutting_mesh label" msgid "Cutting Mesh" -msgstr "" +msgstr "メッシュ切断" # msgstr "メッシュの切断" #: fdmprinter.def.json @@ -4346,7 +4338,7 @@ msgstr "このメッシュの大きさをを他のメッシュ内に制限しま #: fdmprinter.def.json msgctxt "mold_enabled label" msgid "Mold" -msgstr "" +msgstr "型" # msgstr "モールド" #: fdmprinter.def.json @@ -4357,7 +4349,7 @@ msgstr "型を取るため印刷し、ビルドプレート上の同じような #: fdmprinter.def.json msgctxt "mold_width label" msgid "Minimal Mold Width" -msgstr "" +msgstr "最小型幅" # msgstr "最小のモールド幅" #: fdmprinter.def.json @@ -4368,7 +4360,7 @@ msgstr "型用とモデルの外側の最短距離。" #: fdmprinter.def.json msgctxt "mold_roof_height label" msgid "Mold Roof Height" -msgstr "" +msgstr "型ルーフ高さ" # msgstr "モールドの屋根の高さ" #: fdmprinter.def.json @@ -4379,7 +4371,7 @@ msgstr "型を印刷するためのモデルの水平部分上の高さ。" #: fdmprinter.def.json msgctxt "mold_angle label" msgid "Mold Angle" -msgstr "" +msgstr "型角度" # msgstr "モールドの角度" #: fdmprinter.def.json @@ -4390,7 +4382,7 @@ msgstr "型の外側の壁のオーバーハングの角度です。0度にす #: fdmprinter.def.json msgctxt "support_mesh label" msgid "Support Mesh" -msgstr "" +msgstr "サポートメッシュ" #: fdmprinter.def.json msgctxt "support_mesh description" @@ -4400,7 +4392,7 @@ msgstr "このメッシュを使用してサポート領域を指定します。 #: fdmprinter.def.json msgctxt "support_mesh_drop_down label" msgid "Drop Down Support Mesh" -msgstr "" +msgstr "サポートメッシュの下処理" # msgstr "ドロップダウンサポートメッシュ" #: fdmprinter.def.json @@ -4411,7 +4403,7 @@ msgstr "サポートメッシュの下のサポート材を全箇所に作りま #: fdmprinter.def.json msgctxt "anti_overhang_mesh label" msgid "Anti Overhang Mesh" -msgstr "" +msgstr "メッシュオーバーハング例外" #: fdmprinter.def.json msgctxt "anti_overhang_mesh description" @@ -4421,7 +4413,7 @@ msgstr "このメッシュを使用して、モデルのどの部分をオーバ #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode label" msgid "Surface Mode" -msgstr "" +msgstr "表面モード" #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode description" @@ -4431,22 +4423,22 @@ msgstr "モデルを表面のみ、ボリューム、または緩い表面のボ #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode option normal" msgid "Normal" -msgstr "" +msgstr "標準" #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode option surface" msgid "Surface" -msgstr "" +msgstr "表面" #: fdmprinter.def.json msgctxt "magic_mesh_surface_mode option both" msgid "Both" -msgstr "" +msgstr "両方" #: fdmprinter.def.json msgctxt "magic_spiralize label" msgid "Spiralize Outer Contour" -msgstr "" +msgstr "滑らかな外側輪郭" #: fdmprinter.def.json msgctxt "magic_spiralize description" @@ -4456,7 +4448,7 @@ msgstr "Z軸の外側のエッジの動きを滑らかにします。全体の #: fdmprinter.def.json msgctxt "smooth_spiralized_contours label" msgid "Smooth Spiralized Contours" -msgstr "" +msgstr "滑らかな輪郭" # msgstr "滑らかならせん状の輪郭" #: fdmprinter.def.json @@ -4467,7 +4459,7 @@ msgstr "らせん状の輪郭を滑らかにしてZシームの視認性を低 #: fdmprinter.def.json msgctxt "relative_extrusion label" msgid "Relative Extrusion" -msgstr "" +msgstr "相対押出" # msgstr "相対エクストルージョン" #: fdmprinter.def.json @@ -4478,7 +4470,7 @@ msgstr "絶対押出ではなく、相対押出を使用します。相対Eス #: fdmprinter.def.json msgctxt "experimental label" msgid "Experimental" -msgstr "" +msgstr "実験" #: fdmprinter.def.json msgctxt "experimental description" @@ -4488,7 +4480,7 @@ msgstr "実験的" #: fdmprinter.def.json msgctxt "optimize_wall_printing_order label" msgid "Optimize Wall Printing Order" -msgstr "" +msgstr "壁印刷順序の最適化" # msgstr "壁のプリントの順番を最適化する" #: fdmprinter.def.json @@ -4499,7 +4491,7 @@ msgstr "撤回と移動距離を減らすために、壁のプリント順序を #: fdmprinter.def.json msgctxt "support_skip_some_zags label" msgid "Break Up Support In Chunks" -msgstr "" +msgstr "接続部分のサポート分割" # msgstr "かたまりででサポートを割る" #: fdmprinter.def.json @@ -4510,7 +4502,7 @@ msgstr "サポートラインの接続部分をスキップし、サポート材 #: fdmprinter.def.json msgctxt "support_skip_zag_per_mm label" msgid "Support Chunk Size" -msgstr "" +msgstr "サポート分割サイズ" # msgstr "サポートのかたまりサイズ" #: fdmprinter.def.json @@ -4521,7 +4513,7 @@ msgstr "サポート毎行Nミリ時に、サポートの接続をわざと外 #: fdmprinter.def.json msgctxt "support_zag_skip_count label" msgid "Support Chunk Line Count" -msgstr "" +msgstr "サポート分割ライン数" # msgstr "サポートのかたまり線数" #: fdmprinter.def.json @@ -4532,7 +4524,7 @@ msgstr "毎行Nミリ時に、サポートの接続をわざとスキップし #: fdmprinter.def.json msgctxt "draft_shield_enabled label" msgid "Enable Draft Shield" -msgstr "" +msgstr "ドラフトシールドを有効にする" #: fdmprinter.def.json msgctxt "draft_shield_enabled description" @@ -4542,7 +4534,7 @@ msgstr "これにより、モデルの周囲に壁ができ、熱を閉じ込め #: fdmprinter.def.json msgctxt "draft_shield_dist label" msgid "Draft Shield X/Y Distance" -msgstr "" +msgstr "ドラフトシールドとX/Yの距離" #: fdmprinter.def.json msgctxt "draft_shield_dist description" @@ -4552,7 +4544,7 @@ msgstr "ドラフトシールドと造形物のX / Y方向の距離" #: fdmprinter.def.json msgctxt "draft_shield_height_limitation label" msgid "Draft Shield Limitation" -msgstr "" +msgstr "ドラフトシールドの制限" #: fdmprinter.def.json msgctxt "draft_shield_height_limitation description" @@ -4562,17 +4554,17 @@ msgstr "ドラフトシールドの高さを設定します。ドラフトシー #: fdmprinter.def.json msgctxt "draft_shield_height_limitation option full" msgid "Full" -msgstr "" +msgstr "制限なし" #: fdmprinter.def.json msgctxt "draft_shield_height_limitation option limited" msgid "Limited" -msgstr "" +msgstr "制限あり" #: fdmprinter.def.json msgctxt "draft_shield_height label" msgid "Draft Shield Height" -msgstr "" +msgstr "ドラフトシールドの高さ" #: fdmprinter.def.json msgctxt "draft_shield_height description" @@ -4582,7 +4574,7 @@ msgstr "ドラフトシールドの高さ制限。この高さを超えるとド #: fdmprinter.def.json msgctxt "conical_overhang_enabled label" msgid "Make Overhang Printable" -msgstr "" +msgstr "オーバーハング印刷可能" #: fdmprinter.def.json msgctxt "conical_overhang_enabled description" @@ -4592,7 +4584,7 @@ msgstr "最小限のサポートが必要となるように印刷モデルのジ #: fdmprinter.def.json msgctxt "conical_overhang_angle label" msgid "Maximum Model Angle" -msgstr "" +msgstr "最大モデル角度" #: fdmprinter.def.json msgctxt "conical_overhang_angle description" @@ -4602,7 +4594,7 @@ msgstr "印刷可能になったオーバーハングの最大角度。 0°の #: fdmprinter.def.json msgctxt "coasting_enable label" msgid "Enable Coasting" -msgstr "" +msgstr "コースティングを有効にする" #: fdmprinter.def.json msgctxt "coasting_enable description" @@ -4612,7 +4604,7 @@ msgstr "コースティングは、それぞれの造形ラインの最後の部 #: fdmprinter.def.json msgctxt "coasting_volume label" msgid "Coasting Volume" -msgstr "" +msgstr "コースティングのボリューム" #: fdmprinter.def.json msgctxt "coasting_volume description" @@ -4622,7 +4614,7 @@ msgstr "はみ出るフィラメントのボリューム。この値は、一般 #: fdmprinter.def.json msgctxt "coasting_min_volume label" msgid "Minimum Volume Before Coasting" -msgstr "" +msgstr "コースティング前の最小ボリューム" #: fdmprinter.def.json msgctxt "coasting_min_volume description" @@ -4632,7 +4624,7 @@ msgstr "コースティングに必要な最小の容積。より小さい押出 #: fdmprinter.def.json msgctxt "coasting_speed label" msgid "Coasting Speed" -msgstr "" +msgstr "コースティング速度" #: fdmprinter.def.json msgctxt "coasting_speed description" @@ -4642,7 +4634,7 @@ msgstr "コースティング中の移動速度。印刷時の経路の速度設 #: fdmprinter.def.json msgctxt "skin_alternate_rotation label" msgid "Alternate Skin Rotation" -msgstr "" +msgstr "レイヤー回転変更" #: fdmprinter.def.json msgctxt "skin_alternate_rotation description" @@ -4652,7 +4644,7 @@ msgstr "トップ/ボトムのレイヤーが印刷される方向を変更し #: fdmprinter.def.json msgctxt "cross_infill_pocket_size label" msgid "Cross 3D Pocket Size" -msgstr "" +msgstr "3Dクロスポケットのサイズ" # msgstr "クロス3Dポケットサイズ" #: fdmprinter.def.json @@ -4663,7 +4655,7 @@ msgstr "四方でクロス3Dパターンが交差するポケットの大きさ #: fdmprinter.def.json msgctxt "cross_infill_apply_pockets_alternatingly label" msgid "Alternate Cross 3D Pockets" -msgstr "" +msgstr "3Dクロスポケットの変更" # msgstr "クロス3Dポケットと交差させる" #: fdmprinter.def.json @@ -4674,7 +4666,7 @@ msgstr "四方がクロスする、クロス3Dパターン交差時には半分 #: fdmprinter.def.json msgctxt "spaghetti_infill_enabled label" msgid "Spaghetti Infill" -msgstr "" +msgstr "スパゲッティインフィル" # msgstr "スパゲッティ・インフィル" #: fdmprinter.def.json @@ -4685,7 +4677,7 @@ msgstr "時々インフィルを印刷してください、オブジェクト内 #: fdmprinter.def.json msgctxt "spaghetti_infill_stepped label" msgid "Spaghetti Infill Stepping" -msgstr "" +msgstr "スパゲッティインフィルの手順" # msgstr "スパゲッティのインフィルステッピング" #: fdmprinter.def.json @@ -4696,7 +4688,7 @@ msgstr "スパゲッティインフィルをプリントするか印刷の最後 #: fdmprinter.def.json msgctxt "spaghetti_max_infill_angle label" msgid "Spaghetti Maximum Infill Angle" -msgstr "" +msgstr "スパゲッティインフィル最大角度" # msgstr "スパゲッティの最大のインフィルの角度" #: fdmprinter.def.json @@ -4707,7 +4699,7 @@ msgstr "最大角度 w.r.t.-印刷範囲内がスパゲッティ・インフィ #: fdmprinter.def.json msgctxt "spaghetti_max_height label" msgid "Spaghetti Infill Maximum Height" -msgstr "" +msgstr "スパゲッティインフィル最大高さ" # msgstr "スパゲッティインフィルの最大高さ" #: fdmprinter.def.json @@ -4718,7 +4710,7 @@ msgstr "内部空間の上から結合して埋め込むことができる最大 #: fdmprinter.def.json msgctxt "spaghetti_inset label" msgid "Spaghetti Inset" -msgstr "" +msgstr "スパゲッティインフィルのオフセット" # msgstr "スパゲティをセットする" #: fdmprinter.def.json @@ -4729,7 +4721,7 @@ msgstr "スパゲッティ・インフィルがプリントされる壁からの #: fdmprinter.def.json msgctxt "spaghetti_flow label" msgid "Spaghetti Flow" -msgstr "" +msgstr "スパゲッティインフィルフロー" # msgstr "スパゲッティのフロー" #: fdmprinter.def.json @@ -4740,7 +4732,7 @@ msgstr "スパゲッティ・インフィルの密度を調整します。イン #: fdmprinter.def.json msgctxt "spaghetti_infill_extra_volume label" msgid "Spaghetti Infill Extra Volume" -msgstr "" +msgstr "スパゲッティインフィル余剰調整" # msgstr "スパゲッティ・インフィルの余分量" #: fdmprinter.def.json @@ -4751,7 +4743,7 @@ msgstr "スパゲッティをプリントする際に毎回行なう吐出量の #: fdmprinter.def.json msgctxt "support_conical_enabled label" msgid "Enable Conical Support" -msgstr "" +msgstr "円錐サポートを有効にする" #: fdmprinter.def.json msgctxt "support_conical_enabled description" @@ -4761,7 +4753,7 @@ msgstr "実験的機能:オーバーハング部分よりも底面のサポー #: fdmprinter.def.json msgctxt "support_conical_angle label" msgid "Conical Support Angle" -msgstr "" +msgstr "円錐サポートの角度" #: fdmprinter.def.json msgctxt "support_conical_angle description" @@ -4771,7 +4763,7 @@ msgstr "円錐形のサポートの傾きの角度。 0度は垂直であり、9 #: fdmprinter.def.json msgctxt "support_conical_min_width label" msgid "Conical Support Minimum Width" -msgstr "" +msgstr "円錐サポートの最大幅" #: fdmprinter.def.json msgctxt "support_conical_min_width description" @@ -4781,7 +4773,7 @@ msgstr "円錐形のサポート領域のベースが縮小される最小幅。 #: fdmprinter.def.json msgctxt "infill_hollow label" msgid "Hollow Out Objects" -msgstr "" +msgstr "オブジェクトの空洞化" #: fdmprinter.def.json msgctxt "infill_hollow description" @@ -4791,7 +4783,7 @@ msgstr "すべてのインフィルを取り除き、オブジェクトの内部 #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled label" msgid "Fuzzy Skin" -msgstr "" +msgstr "ファジースキン" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_enabled description" @@ -4801,7 +4793,7 @@ msgstr "外壁を印刷する際に振動が起こり、表面が粗くてぼや #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness label" msgid "Fuzzy Skin Thickness" -msgstr "" +msgstr "ファジースキンの厚さ" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_thickness description" @@ -4811,7 +4803,7 @@ msgstr "振動が起こる幅。内壁は変更されていないので、これ #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_density label" msgid "Fuzzy Skin Density" -msgstr "" +msgstr "ファジースキンの密度" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_density description" @@ -4821,7 +4813,7 @@ msgstr "レイヤー内の各ポリゴンに導入されたポイントの平均 #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_dist label" msgid "Fuzzy Skin Point Distance" -msgstr "" +msgstr "ファジースキン点間距離" #: fdmprinter.def.json msgctxt "magic_fuzzy_skin_point_dist description" @@ -4831,27 +4823,27 @@ msgstr "各線分に導入されたランダム点間の平均距離。ポリゴ #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "流量補正時の最大抽出オフセット" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "補正の最大距離をミリ単位で指定します。" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "流量補正要因" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "流量を距離に変換する際の要因。" #: fdmprinter.def.json msgctxt "wireframe_enabled label" msgid "Wire Printing" -msgstr "" +msgstr "ワイヤ印刷" #: fdmprinter.def.json msgctxt "wireframe_enabled description" @@ -4861,7 +4853,7 @@ msgstr "薄い空気中に印刷し、疎なウエブ構造で外面のみを印 #: fdmprinter.def.json msgctxt "wireframe_height label" msgid "WP Connection Height" -msgstr "" +msgstr "WPの高さ" #: fdmprinter.def.json msgctxt "wireframe_height description" @@ -4871,7 +4863,7 @@ msgstr "2つの水平なパーツ間の、上向きおよび斜め下向きの #: fdmprinter.def.json msgctxt "wireframe_roof_inset label" msgid "WP Roof Inset Distance" -msgstr "" +msgstr "WPルーフ距離のオフセット" #: fdmprinter.def.json msgctxt "wireframe_roof_inset description" @@ -4881,7 +4873,7 @@ msgstr "ルーフから内側に輪郭を描くときの距離。ワイヤ印刷 #: fdmprinter.def.json msgctxt "wireframe_printspeed label" msgid "WP Speed" -msgstr "" +msgstr "WP速度" #: fdmprinter.def.json msgctxt "wireframe_printspeed description" @@ -4891,7 +4883,7 @@ msgstr "マテリアルを押し出すときにノズルが動く速度。ワイ #: fdmprinter.def.json msgctxt "wireframe_printspeed_bottom label" msgid "WP Bottom Printing Speed" -msgstr "" +msgstr "WP底面印字速度" #: fdmprinter.def.json msgctxt "wireframe_printspeed_bottom description" @@ -4901,7 +4893,7 @@ msgstr "ブルドプラットフォームに接触する第1層の印刷速度 #: fdmprinter.def.json msgctxt "wireframe_printspeed_up label" msgid "WP Upward Printing Speed" -msgstr "" +msgstr "WP上向き印字速度" #: fdmprinter.def.json msgctxt "wireframe_printspeed_up description" @@ -4911,7 +4903,7 @@ msgstr "薄い空気の中で上向きに線を印刷する速度。ワイヤ印 #: fdmprinter.def.json msgctxt "wireframe_printspeed_down label" msgid "WP Downward Printing Speed" -msgstr "" +msgstr "WP下向き印字速度" #: fdmprinter.def.json msgctxt "wireframe_printspeed_down description" @@ -4921,7 +4913,7 @@ msgstr "斜め下方に線を印刷する速度。ワイヤ印刷のみに適用 #: fdmprinter.def.json msgctxt "wireframe_printspeed_flat label" msgid "WP Horizontal Printing Speed" -msgstr "" +msgstr "WP水平印字速度" #: fdmprinter.def.json msgctxt "wireframe_printspeed_flat description" @@ -4931,7 +4923,7 @@ msgstr "モデルの水平輪郭を印刷する速度。ワイヤ印刷のみに #: fdmprinter.def.json msgctxt "wireframe_flow label" msgid "WP Flow" -msgstr "" +msgstr "WPフロー" #: fdmprinter.def.json msgctxt "wireframe_flow description" @@ -4941,7 +4933,7 @@ msgstr "流れ補正:押出されたマテリアルの量はこの値の乗算 #: fdmprinter.def.json msgctxt "wireframe_flow_connection label" msgid "WP Connection Flow" -msgstr "" +msgstr "WP接続フロー" #: fdmprinter.def.json msgctxt "wireframe_flow_connection description" @@ -4951,7 +4943,7 @@ msgstr "上下に動くときの吐出補正。ワイヤ印刷のみに適用さ #: fdmprinter.def.json msgctxt "wireframe_flow_flat label" msgid "WP Flat Flow" -msgstr "" +msgstr "WPフラットフロー" #: fdmprinter.def.json msgctxt "wireframe_flow_flat description" @@ -4961,7 +4953,7 @@ msgstr "フラットラインを印刷する際の吐出補正。ワイヤ印刷 #: fdmprinter.def.json msgctxt "wireframe_top_delay label" msgid "WP Top Delay" -msgstr "" +msgstr "WP上面遅延" #: fdmprinter.def.json msgctxt "wireframe_top_delay description" @@ -4971,7 +4963,7 @@ msgstr "上向きの線が硬くなるように、上向きの動きの後の時 #: fdmprinter.def.json msgctxt "wireframe_bottom_delay label" msgid "WP Bottom Delay" -msgstr "" +msgstr "WP底面遅延" #: fdmprinter.def.json msgctxt "wireframe_bottom_delay description" @@ -4981,7 +4973,7 @@ msgstr "下降後の遅延時間。ワイヤ印刷のみに適用されます。 #: fdmprinter.def.json msgctxt "wireframe_flat_delay label" msgid "WP Flat Delay" -msgstr "" +msgstr "WP水平遅延" #: fdmprinter.def.json msgctxt "wireframe_flat_delay description" @@ -4991,7 +4983,7 @@ msgstr "2つの水平セグメント間の遅延時間。このような遅延 #: fdmprinter.def.json msgctxt "wireframe_up_half_speed label" msgid "WP Ease Upward" -msgstr "" +msgstr "WP低速移動距離" #: fdmprinter.def.json msgctxt "wireframe_up_half_speed description" @@ -5003,7 +4995,7 @@ msgstr "半分の速度で押出される上方への移動距離。過度にマ #: fdmprinter.def.json msgctxt "wireframe_top_jump label" msgid "WP Knot Size" -msgstr "" +msgstr "WPノットサイズ" #: fdmprinter.def.json msgctxt "wireframe_top_jump description" @@ -5013,7 +5005,7 @@ msgstr "上向きの線の上端に小さな結び目を作成し、連続する #: fdmprinter.def.json msgctxt "wireframe_fall_down label" msgid "WP Fall Down" -msgstr "" +msgstr "WP落下距離" #: fdmprinter.def.json msgctxt "wireframe_fall_down description" @@ -5023,7 +5015,7 @@ msgstr "上向き押出後にマテリアルが落下する距離。この距離 #: fdmprinter.def.json msgctxt "wireframe_drag_along label" msgid "WP Drag Along" -msgstr "" +msgstr "WP引きづり距離" #: fdmprinter.def.json msgctxt "wireframe_drag_along description" @@ -5033,7 +5025,7 @@ msgstr "斜め下方への押出に伴い上向き押出しているマテリア #: fdmprinter.def.json msgctxt "wireframe_strategy label" msgid "WP Strategy" -msgstr "" +msgstr "WPストラテジー" #: fdmprinter.def.json msgctxt "wireframe_strategy description" @@ -5043,22 +5035,22 @@ msgstr "各接続ポイントで2つの連続したレイヤーが密着して #: fdmprinter.def.json msgctxt "wireframe_strategy option compensate" msgid "Compensate" -msgstr "" +msgstr "補正" #: fdmprinter.def.json msgctxt "wireframe_strategy option knot" msgid "Knot" -msgstr "" +msgstr "ノット" #: fdmprinter.def.json msgctxt "wireframe_strategy option retract" msgid "Retract" -msgstr "" +msgstr "引き戻し" #: fdmprinter.def.json msgctxt "wireframe_straight_before_down label" msgid "WP Straighten Downward Lines" -msgstr "" +msgstr "WP下向き直線ライン" #: fdmprinter.def.json msgctxt "wireframe_straight_before_down description" @@ -5068,7 +5060,7 @@ msgstr "水平方向の直線部分で覆われた斜めに下降線の割合で #: fdmprinter.def.json msgctxt "wireframe_roof_fall_down label" msgid "WP Roof Fall Down" -msgstr "" +msgstr "WPルーフ落下距離" #: fdmprinter.def.json msgctxt "wireframe_roof_fall_down description" @@ -5078,7 +5070,7 @@ msgstr "水平ルーフが ”薄い空気”に印刷され落ちる距離。 #: fdmprinter.def.json msgctxt "wireframe_roof_drag_along label" msgid "WP Roof Drag Along" -msgstr "" +msgstr "WPルーフ引きずり距離" #: fdmprinter.def.json msgctxt "wireframe_roof_drag_along description" @@ -5088,7 +5080,7 @@ msgstr "ルーフの外側の輪郭に戻る際に引きずる内側ラインの #: fdmprinter.def.json msgctxt "wireframe_roof_outer_delay label" msgid "WP Roof Outer Delay" -msgstr "" +msgstr "WPルーフ外側処理時間" #: fdmprinter.def.json msgctxt "wireframe_roof_outer_delay description" @@ -5098,7 +5090,7 @@ msgstr "トップレイヤーにある穴の外側に掛ける時間。長い時 #: fdmprinter.def.json msgctxt "wireframe_nozzle_clearance label" msgid "WP Nozzle Clearance" -msgstr "" +msgstr "WPノズル隙間" #: fdmprinter.def.json msgctxt "wireframe_nozzle_clearance description" @@ -5108,7 +5100,7 @@ msgstr "ノズルと水平方向に下向きの線間の距離。大きな隙間 #: fdmprinter.def.json msgctxt "command_line_settings label" msgid "Command Line Settings" -msgstr "" +msgstr "コマンドライン設定" #: fdmprinter.def.json msgctxt "command_line_settings description" @@ -5118,17 +5110,17 @@ msgstr "CuraエンジンがCuraフロントエンドから呼び出されない #: fdmprinter.def.json msgctxt "center_object label" msgid "Center object" -msgstr "" +msgstr "オブジェクト中心配置" #: fdmprinter.def.json msgctxt "center_object description" msgid "Whether to center the object on the middle of the build platform (0,0), instead of using the coordinate system in which the object was saved." -msgstr "オブジェクトが保存された座標系を使用する代わりにビルドプラットフォームの中間(0,0)にオブジェクトを配置するかどうか。" +msgstr "オブジェクトが保存された座標系を使用する代わりにビルドプラットフォームの中間(0,0)にオブジェクトを配置するかどうか。" #: fdmprinter.def.json msgctxt "mesh_position_x label" msgid "Mesh position x" -msgstr "" +msgstr "メッシュ位置X" #: fdmprinter.def.json msgctxt "mesh_position_x description" @@ -5138,7 +5130,7 @@ msgstr "オブジェクトの x 方向に適用されたオフセット。" #: fdmprinter.def.json msgctxt "mesh_position_y label" msgid "Mesh position y" -msgstr "" +msgstr "メッシュ位置Y" #: fdmprinter.def.json msgctxt "mesh_position_y description" @@ -5148,7 +5140,7 @@ msgstr "オブジェクトのY 方向適用されたオフセット。" #: fdmprinter.def.json msgctxt "mesh_position_z label" msgid "Mesh position z" -msgstr "" +msgstr "メッシュ位置Z" #: fdmprinter.def.json msgctxt "mesh_position_z description" @@ -5158,7 +5150,7 @@ msgstr "オブジェクトの z 方向に適用されたオフセット。この #: fdmprinter.def.json msgctxt "mesh_rotation_matrix label" msgid "Mesh Rotation Matrix" -msgstr "" +msgstr "メッシュ回転マトリックス" #: fdmprinter.def.json msgctxt "mesh_rotation_matrix description" diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index d45dec3bb9..a72274dc2c 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.1\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-11-14 22:13+0900\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Brule\n" "Language-Team: Brule\n" "Language: ko_KR\n" @@ -93,7 +93,7 @@ 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" @@ -143,7 +143,7 @@ msgstr "프린터가 사용 중이거나 연결되어 있지 않아 새 작업 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "프린터 사용 불가" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -595,7 +595,7 @@ msgstr "네트워크를 통해 연결" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "{machine_name}의 새로운 기능을 사용할 수 있습니다! 프린터의 펌웨어를 업데이트하는 것이 좋습니다." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -606,7 +606,7 @@ msgstr "새로운 펌웨어를 사용할 수 있습니다." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "업데이트 방법" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -641,7 +641,7 @@ msgstr "시작하는 도중 오류가 발생했습니다!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "시뮬레이션 보기" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -651,7 +651,7 @@ msgstr "와이어 인쇄가 활성화되어있을 때 Cura는 레이어를 정 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "시뮬레이션 보기" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -732,7 +732,7 @@ msgstr "현재 설정으로 슬라이스 할 수 없습니다. 다음 설정에 #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "일부 모델별 설정으로 인해 슬라이스할 수 없습니다. 하나 이상의 모델에서 다음 설정에 오류가 있습니다. {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -767,25 +767,25 @@ msgstr "모델 별 설정 구성" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "설치" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Siemens NX 플러그인 파일을 복사하지 못했습니다. UGII_USER_DIR을 확인하십시오. 디렉터리에 할당되지 않았습니다." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Siemens NX Cura 플러그인을 성공적으로 설치했습니다." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Siemens NX 플러그인 파일을 복사하지 못했습니다. UGII_USER_DIR을 확인하십시오." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Siemens NX 플러그인을 설치하지 못했습니다. Siemens NX의 환경 변수 UGII_USER_DIR을 설정할 수 없습니다." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -948,7 +948,7 @@ msgstr "다른" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "알 수 없음" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1013,12 +1013,12 @@ msgstr "맞춤 소재" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "전역" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "재정의되지 않음" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1067,7 +1067,7 @@ msgstr "프로파일을 ?에 내보냅니다" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "내보내기 완료" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1139,85 +1139,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    치명적인 예외가 발생했습니다. 문제를 해결할 수 있도록 이 충돌 보고서를 보내주십시오.

    \n

    \"보고서 전송\" 버튼을 사용하면 버그 보고서가 서버에 자동으로 보고됩니다.

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "시스템 정보" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "알 수 없음" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Cura 버전: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "플랫폼: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Qt 버전: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "PyQt 버전: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • OpenGL 버전: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • OpenGL 공급업체: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGL Renderer: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "예외 역추적" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "로그" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "사용자 설명" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "보고서 전송" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1255,7 +1255,7 @@ msgstr "G 코드가 로드되어 있으면 다른 파일을 열 수 없습니다 #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "선택한 모델이 너무 작아서 로드할 수 없습니다." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1516,10 +1516,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 코드 파일을 프린터로 전송할 수 있습니다\n" -"\n" -"아래 목록에서 프린터를 선택하십시오" +msgstr ":네트워크를 통해 프린터로 직접 인쇄하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g 코드 파일을 프린터로 전송할 수 있습니다\n\n아래 목록에서 프린터를 선택하십시오" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:44 @@ -1633,7 +1630,7 @@ msgstr "?은 연결된 Ultimaker 3에 연결된 프린터 그룹을 호스트하 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "인쇄 작업 페이지를 기본 웹 브라우저로 엽니다." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1668,7 +1665,7 @@ msgstr "프린터와의 연결이 끊어졌습니다" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "해제됨" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1683,12 +1680,12 @@ msgstr "끝마친" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "일시 중지됨" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "다시 시작" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1830,12 +1827,12 @@ msgstr "라인 유형" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "이송 속도" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "레이어 두께" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1885,12 +1882,12 @@ msgstr "내벽" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "최소" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "최대" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2123,12 +2120,12 @@ msgstr "표시 설정 :" #: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:223 msgctxt "@action:label" msgid "%1 out of %2" -msgstr "" +msgstr "%1/%2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "프로젝트를 로드하면 빌드 플레이트의 모든 모델이 지워집니다." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2171,7 +2168,7 @@ msgid "" "This 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" @@ -2186,7 +2183,7 @@ msgstr "거절" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "사용자 계약" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2436,9 +2433,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" @@ -3069,7 +3064,7 @@ msgstr "Cura 소개" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "버전: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3081,9 +3076,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" @@ -3168,7 +3161,7 @@ msgstr "다각형 클리핑 라이브러리" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Python HTTP 라이브러리" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3188,7 +3181,7 @@ msgstr "윤곽:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "프로필을 사용할 수 없음" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3196,10 +3189,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:152 msgctxt "@label:textbox" @@ -3237,10 +3227,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." @@ -3268,10 +3255,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" @@ -3279,10 +3263,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:120 msgctxt "@label:listbox" @@ -3294,65 +3275,59 @@ msgctxt "@label:listbox" msgid "" "Print Setup disabled\n" "G-code files cannot be modified" -msgstr "" -"인쇄 설정 사용 안 함\n" -"G 코드 파일은 수정할 수 없습니다" +msgstr "인쇄 설정 사용 안 함\nG 코드 파일은 수정할 수 없습니다" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "시간 사양
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "비용 사양" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "총계:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" msgid "Recommended Print Setup

    Print with the recommended settings for the selected printer, material and quality." -msgstr "" -"권장 인쇄 설정\n" -"선택한 프린터, 재질 및 품질에 대한 권장 설정으로 인쇄하십시오." +msgstr "권장 인쇄 설정\n선택한 프린터, 재질 및 품질에 대한 권장 설정으로 인쇄하십시오." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:591 msgctxt "@tooltip" msgid "Custom Print Setup

    Print with finegrained control over every last bit of the slicing process." -msgstr "" -"사용자 정의 인쇄 설정\n" -"마지막 스플 라이스 프로세스의 모든 비트를 미세하게 제어하여 인쇄하십시오." +msgstr "사용자 정의 인쇄 설정\n마지막 스플 라이스 프로세스의 모든 비트를 미세하게 제어하여 인쇄하십시오." #: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:49 msgctxt "@title:menuitem %1 is the automatically selected material" @@ -3467,27 +3442,27 @@ msgstr "인쇄하기 전에 베드를 미리 가열하십시오. 가열되는 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "프린터 제어" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "조그 위치" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "조그 거리" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3532,7 +3507,7 @@ msgstr "그만두다" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "카메라 위치 재설정(&R)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3774,7 +3749,7 @@ msgstr "모델로 모두 가져 오기" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3931,7 +3906,7 @@ msgstr "층 높이" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "사용자 지정 프로필이 현재 활성 상태입니다. 품질 슬라이더를 실행하려면 사용자 지정 탭에서 기본 품질 프로필을 선택하십시오." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3951,7 +3926,7 @@ msgstr "빨리" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "일부 프로필 설정을 수정했습니다. 이러한 설정을 변경하려면 사용자 지정 모드로 이동하십시오." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4001,9 +3976,7 @@ msgstr "테두리 또는 raft 인쇄를 사용합니다. 이렇게하면 개체 #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:934 msgctxt "@label" msgid "Need help improving your prints?
    Read the Ultimaker Troubleshooting Guides" -msgstr "" -"인쇄물 개선에 도움이 필요하십니까?\n" -"Ultimaker 문제 해결 가이드 읽기" +msgstr "인쇄물 개선에 도움이 필요하십니까?\nUltimaker 문제 해결 가이드 읽기" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4045,7 +4018,7 @@ msgstr "자재" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "호환성 확인" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4185,12 +4158,12 @@ msgstr "SolidWorks 통합" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "시뮬레이션 보기를 제공합니다." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "시뮬레이션 보기" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4275,12 +4248,12 @@ msgstr "버전 업그레이드 2.7에서 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Cura 3.0에서 Cura 3.1로 구성을 업그레이드합니다." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "3.0에서 3.1로 버전 업그레이드" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4345,12 +4318,12 @@ msgstr "모델 별 설정 도구" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Siemens NX에서 'Cura로 내보내기' 버튼을 설치할 수 있습니다." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4415,12 +4388,12 @@ msgstr "3MF 기록기" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "사용자에게 라이선스에 동의하는지 한 번 묻습니다." #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "사용자 계약" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4462,13 +4435,13 @@ msgstr "Cura 프로필 판독기" #~ 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 "{machine_name}에 최신 기능이 탑재되어 있는지 확인하려면 정기적으로 펌웨어를 업데이트하는 것이 좋습니다. 이 작업은 {machine_name} (네트워크에 연결된 경우) 또는 USB를 통해 수행 할 수 있습니다." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "레이어 보기" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "레이어 보기" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "레이어 보기" +msgctxt "@info:title" +msgid "Layer View" +msgstr "레이어 보기" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4561,6 +4534,6 @@ msgstr "Cura 프로필 판독기" #~ msgid "Provides the Layer view." #~ msgstr "레이어 보기를 제공합니다." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "레이어보기" +msgctxt "name" +msgid "Layer View" +msgstr "레이어보기" diff --git a/resources/i18n/ko_KR/fdmextruder.def.json.po b/resources/i18n/ko_KR/fdmextruder.def.json.po index 3e5890b31b..2d9cffc0dc 100644 --- a/resources/i18n/ko_KR/fdmextruder.def.json.po +++ b/resources/i18n/ko_KR/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.1\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-20 14:31+0900\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Brule\n" "Language-Team: Brule\n" "Language: ko_KR\n" @@ -41,7 +41,7 @@ msgstr "인쇄에 사용되는 압출기 트레인. 이것은 다중 압출에 #: fdmextruder.def.json msgctxt "machine_nozzle_id label" msgid "Nozzle ID" -msgstr "" +msgstr "노즐 ID" #: fdmextruder.def.json msgctxt "machine_nozzle_id description" diff --git a/resources/i18n/ko_KR/fdmprinter.def.json.po b/resources/i18n/ko_KR/fdmprinter.def.json.po index 949b0fee5c..0af3a1bb27 100644 --- a/resources/i18n/ko_KR/fdmprinter.def.json.po +++ b/resources/i18n/ko_KR/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-11-15 21:07+0900\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Brule\n" "Language-Team: Brule\n" "Language: ko_KR\n" @@ -610,27 +610,27 @@ msgstr "초기 레이어의 높이 (mm)입니다. 두꺼운 초기 레이어는 #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "슬라이싱 허용 오차" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "레이어를 대각선 서피스로 슬라이스하는 방법 레이어 영역은 레이어의 중앙이 서피스와 교차하는 부분(중간)을 기준으로 생성됩니다. 또는 각 레이어에 레이어의 높이 전체의 볼륨에 들어가는 영역(배타)이나 레이어 안의 어느 지점에 들어가는 영역(중복)이 있을 수 있습니다. 배타는 가장 많은 디테일을 포함하고, 중복은 베스트 피트를 만들 수 있으며, 중간은 처리 시간이 가장 짧습니다." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "중간" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "배타" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "중복" #: fdmprinter.def.json msgctxt "line_width label" @@ -785,7 +785,7 @@ msgstr "내관" #: fdmprinter.def.json msgctxt "wall_extruder_nr label" msgid "Wall Extruder" -msgstr "" +msgstr "벽 압출기" #: fdmprinter.def.json msgctxt "wall_extruder_nr description" @@ -805,7 +805,7 @@ msgstr "외벽 인쇄에 사용되는 압출기 트레인. 이것은 다중 압 #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "내벽 압출기" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1385,7 +1385,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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "프린트 충진 재료의 패턴입니다. 선과 갈지자형 충진이 레이어를 하나 걸러서 방향을 바꾸므로 재료비가 절감됩니다. 격자, 삼각형, 삼육각형, 입방체, 옥텟, 4분 입방체, 십자, 동심원 패턴이 레이어마다 완전히 인쇄됩니다. 입방체, 4분 입방체, 옥텟 충진이 레이어마다 변경되므로 각 방향으로 힘이 더 균등하게 분산됩니다." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1405,7 +1405,7 @@ msgstr "삼각형" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "삼육각형" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1460,7 +1460,7 @@ msgstr "충진 선 연결" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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" @@ -1475,22 +1475,22 @@ msgstr "사용할 정수선 방향 목록. 목록의 요소는 레이어가 진 #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "충진 X 오프셋" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "충진 패턴이 X축을 따라 이 거리만큼 이동합니다." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "충진 Y 오프셋" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "충진 패턴이 Y축을 따라 이 거리만큼 이동합니다." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1805,22 +1805,22 @@ msgstr "사용 된 필라멘트의 직경을 조정합니다. 이 값을 사용 #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "점착 기질" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "서피스의 점착 기질입니다." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "서피스 에너지" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "서피스의 에너지입니다." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3552,7 +3552,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 "" +msgstr "프린트의 스커트와 첫 번째 레이어 사이의 수직 거리입니다.\n이는 최소 거리입니다. 여러 개의 스커트 선이 이 거리에서 바깥쪽으로 연장됩니다." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3612,7 +3612,7 @@ msgstr "Raft 부드럽게하기" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "이 설정은 래프트 윤곽의 안쪽 구석의 곡률을 제어합니다. 안쪽 구석이 여기에 지정된 값과 동일한 반경으로 반원 모양으로 휘어집니다. 또한 이 설정을 사용하면 래프트 윤곽에서 그러한 원보다 작은 구멍이 제거됩니다." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4087,12 +4087,12 @@ msgstr "일반적으로 큐라(Cura)는 메쉬의 작은 구멍을 꿰매 붙이 #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "최대 해상도" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "슬라이딩 후의 선분의 최소 크기입니다. 이 값을 높이면 메쉬의 해상도가 낮아집니다. 그러면 프린터가 G 코드를 처리하는 데 필요한 속도를 유지할 수 있으며 처리할 수 없는 메쉬의 디테일이 제거되므로 슬라이드 속도가 높아집니다." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4127,12 +4127,12 @@ msgstr "교차하는 메쉬로 교차하는 볼륨으로 전환하면 겹치는 #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "비어 있는 첫 번째 레이어 제거" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "첫 번째로 인쇄된 레이어 바로 아래의 비어 있는 레이어를 제거합니다(있는 경우). 이 설정을 해제하면 슬라이딩 허용 오차 설정을 배타 또는 중간으로 설정할 경우 첫 번째 레이어가 비어 있게 될 수 있습니다." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4662,22 +4662,22 @@ msgstr "각 선분에 도입 된 임의의 점 사이의 평균 거리입니다. #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "압출 속도 보상 최대 압출 오프셋" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "최대 보상 거리입니다(단위: mm)." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "압출 속도 보상 배율" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "압출 속도를 거리로 변환하는 증배율입니다." #: fdmprinter.def.json msgctxt "wireframe_enabled label" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 460eddc9b3..a6021b3ce0 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -91,7 +91,7 @@ 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" @@ -141,7 +141,7 @@ msgstr "Er kan geen nieuwe taak worden gestart omdat de printer bezig is of niet #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Printer is niet beschikbaar" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -593,7 +593,7 @@ msgstr "Verbinding Maken via Netwerk" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Er zijn nieuwe functies beschikbaar voor uw {machine_name}! Het wordt aanbevolen de firmware van uw printer bij te werken." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -604,7 +604,7 @@ msgstr "Nieuwe firmware voor %s beschikbaar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Instructies voor bijwerken" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -639,7 +639,7 @@ msgstr "Er is een fout opgetreden tijdens het starten van %s!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Simulatieweergave" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -649,7 +649,7 @@ msgstr "Als draadprinten is ingeschakeld, geeft Cura lagen niet nauwkeurig weer" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Simulatieweergave" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -730,7 +730,7 @@ msgstr "Met de huidige instellingen is slicing niet mogelijk. De volgende instel #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Slicing is niet mogelijk vanwege enkele instellingen per model. De volgende instellingen bevatten fouten voor een of meer modellen: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -765,25 +765,25 @@ msgstr "Instellingen per Model configureren" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Installeren" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Kan de bestanden voor de Siemens NX-invoegtoepassingen niet kopiëren. Controleer uw UGII_USER_DIR. Deze is niet ingesteld op een map." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "De Siemens NX Cura-invoegtoepassing is geïnstalleerd." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Kan de bestanden voor de Siemens NX-invoegtoepassingen niet installeren. Controleer uw UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Kan de Siemens NX-invoegtoepassing niet installeren. Het instellen van de omgevingsvariabele UGII_USER_DIR voor Siemens NX is mislukt." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -946,7 +946,7 @@ msgstr "Overig(e)" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Onbekend" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1011,12 +1011,12 @@ msgstr "Aangepast materiaal" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Algemeen" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Niet overschreven" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1065,7 +1065,7 @@ msgstr "Het profiel is geëxporteerd als {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "De export is voltooid" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1137,85 +1137,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    Er is een fatale uitzondering opgetreden. Stuur ons het Crashrapport om het probleem op te lossen

    \n

    Druk op de knop \"Rapport verzenden\" om het foutenrapport automatisch naar onze servers te verzenden

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Systeeminformatie" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Onbekend" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Cura-versie: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Platform: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Qt-versie: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "PyQt-versie: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • OpenGL-versie: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • OpenGL-leverancier: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGL-renderer: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Traceback van uitzondering" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Logboeken" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Gebruikersbeschrijving" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Rapport verzenden" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1253,7 +1253,7 @@ msgstr "Kan geen ander bestand openen als G-code wordt geladen. Het importeren v #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Het geselecteerde model is te klein om te laden." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1514,10 +1514,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1631,7 +1628,7 @@ msgstr "%1 is niet ingesteld voor het hosten van een groep aangesloten Ultimaker #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Hiermee opent u de pagina met printtaken in uw standaard webbrowser." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1666,7 +1663,7 @@ msgstr "Verbinding met de printer is verbroken" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Uitgeschakeld" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1681,12 +1678,12 @@ msgstr "Gereed" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "Gepauzeerd" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Hervatten" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1828,12 +1825,12 @@ msgstr "Lijntype" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Doorvoersnelheid" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Laagdikte" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1883,12 +1880,12 @@ msgstr "Binnenwand" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "min." #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "max." #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 van %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Als u een project laadt, worden alle modellen van het platform gewist." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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 "Deze invoegtoepassing bevat een licentie.\nU moet akkoord gaan met deze licentie om deze invoegtoepassing te mogen installeren.\nGaat u akkoord met de onderstaande voorwaarden?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" @@ -2184,7 +2181,7 @@ msgstr "Nee, ik ga niet akkoord" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Gebruikersovereenkomst" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "Over Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "versie: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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 maakt met trots gebruik 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" @@ -3166,7 +3159,7 @@ msgstr "Bibliotheek met veelhoeken" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Python HTTP-bibliotheek" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "Profiel:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Er is geen profiel beschikbaar" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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 of aanpassingen van instellingen zijn anders dan de waarden die in het profiel zijn opgeslagen.\n" -"\n" -"Klik 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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00u 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Tijdspecificatie
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Kostenspecificatie" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1 m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Totaal:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1 m / ~ %2 g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1 m / ~ %2 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3461,27 +3440,27 @@ msgstr "Verwarm het bed voordat u gaat printen. U kunt doorgaan met het aanpasse #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Printerbediening" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Jog-positie" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Jog-afstand" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3526,7 +3505,7 @@ msgstr "&Afsluiten" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "Camerapositie he&rstellen" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3768,7 +3747,7 @@ msgstr "Allemaal als model importeren" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3925,7 +3904,7 @@ msgstr "Laaghoogte" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Er is momenteel een aangepast profiel actief. Als u de kwaliteitsschuifregelaar wilt gebruiken, kiest u een standaard kwaliteitsprofiel op het tabblad Aangepast" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3945,7 +3924,7 @@ msgstr "Sneller" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "U hebt enkele profielinstellingen aangepast. Ga naar de aangepaste modus als u deze wilt wijzigen." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4037,7 +4016,7 @@ msgstr "Materiaal" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Compatibiliteit controleren" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4177,12 +4156,12 @@ msgstr "SolidWorks-integratie" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Hiermee geeft u de simulatieweergave weer." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Simulatieweergave" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4267,12 +4246,12 @@ msgstr "Versie-upgrade van 2.7 naar 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Hiermee worden configuraties bijgewerkt van Cura 3.0 naar Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Versie-upgrade van 3.0 naar 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4337,12 +4316,12 @@ msgstr "Gereedschap voor Instellingen per Model" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Hiermee kunt u een knop installeren in Siemens NX om te 'exporteren naar Cura'." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integratie" #: 3MFReader/plugin.json msgctxt "description" @@ -4407,12 +4386,12 @@ msgstr "3MF-schrijver" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Vraag de gebruiker één keer of deze akkoord gaat met de licentie" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4454,13 +4433,13 @@ msgstr "Cura-profiellezer" #~ 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 "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." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Laagweergave" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Laagweergave" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Laagweergave" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Laagweergave" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4562,9 +4541,9 @@ msgstr "Cura-profiellezer" #~ msgid "Provides the Layer view." #~ msgstr "Biedt een laagweergave." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Laagweergave" +msgctxt "name" +msgid "Layer View" +msgstr "Laagweergave" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4904,9 +4883,9 @@ msgstr "Cura-profiellezer" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Deze optie biedt ondersteuning voor het importeren van profielen uit G-code-bestanden." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Laagweergave" +msgctxt "@label" +msgid "Layer View" +msgstr "Laagweergave" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/nl_NL/fdmextruder.def.json.po b/resources/i18n/nl_NL/fdmextruder.def.json.po index ba3027de2c..63bd64cd8c 100644 --- a/resources/i18n/nl_NL/fdmextruder.def.json.po +++ b/resources/i18n/nl_NL/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" diff --git a/resources/i18n/nl_NL/fdmprinter.def.json.po b/resources/i18n/nl_NL/fdmprinter.def.json.po index 0aeb2b9d5a..8d25da1379 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -608,27 +608,27 @@ msgstr "De hoogte van de eerste laag in mm. Met een dikkere eerste laag hecht he #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Slicetolerantie" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Geeft aan hoe lagen met een diagonaal oppervlak worden geslicet. De gebieden van een laag kunnen worden gegenereerd op basis van de locatie waar het midden van de laag het oppervlak snijdt (Midden). Daarnaast kan elke laag gebieden hebben die over de gehele hoogte van de laag binnen het volume vallen (Exclusief), of kan een laag gebieden hebben die overal binnen de laag vallen (Inclusief). Met Exclusief worden de meeste details behouden, met Inclusief verkrijgt u de beste pasvorm en met Midden is de verwerkingstijd het kortst." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Midden" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Exclusief" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inclusief" #: fdmprinter.def.json msgctxt "line_width label" @@ -803,7 +803,7 @@ msgstr "De extruder train die voor het printen van de buitenwand wordt gebruikt. #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Extruder binnenwand" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1383,7 +1383,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, tri-hexagon, cubic, octet, quarter cubic, cross 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-, tri-hexagonale, kubische, achtvlaks-, afgeknotte kubus-, kruis- 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" @@ -1403,7 +1403,7 @@ msgstr "Driehoeken" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Tri-hexagonaal" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1458,7 +1458,7 @@ 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 line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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" @@ -1473,22 +1473,22 @@ msgstr "Een lijst met gehele getallen voor lijnrichtingen die moet worden gebrui #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Vulling X-offset" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Het vulpatroon wordt over deze afstand verplaatst over de X-as." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Vulling Y-offset" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Het vulpatroon wordt over deze afstand verplaatst over de Y-as." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1803,22 +1803,22 @@ msgstr "Bepaalt de diameter van het gebruikte filament. Pas deze waarde aan de d #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Hechtingsgevoeligheid" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Hechtingsgevoeligheid van het oppervlak." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Oppervlakte-energie" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Oppervlakte-energie." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3550,7 +3550,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 "" +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" @@ -3610,7 +3610,7 @@ msgstr "Raft effenen" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "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" @@ -4085,12 +4085,12 @@ msgstr "Normaal probeert Cura kleine gaten in het raster te hechten en delen van #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Maximale resolutie" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "Het minimale formaat van een lijnsegment na het slicen. Als u deze waarde verhoogt, wordt het model met een lagere resolutie geprint. Hiermee kan de printer de verwerkingssnelheid van de G-code bijhouden en wordt de slicesnelheid verhoogd doordat details van het raster worden verwijderd die niet kunnen worden verwerkt." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4125,12 +4125,12 @@ msgstr "Schakel naar de rastersnijpuntvolumes die bij elke laag horen, zodat de #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Lege eerste lagen verwijderen" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Hiermee worden de lege lagen onder de eerste geprinte laag verwijderd, indien aanwezig. Als u deze instelling uitschakelt, kunnen lege eerste lagen ontstaan als de Slicetolerantie is ingesteld op Exclusief of Midden." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4660,22 +4660,22 @@ msgstr "De gemiddelde afstand tussen de willekeurig geplaatste punten op elk lij #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Maximale extrusieoffset voor doorvoercompensatie" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "De maximale afstand in mm die moet worden gecompenseerd." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Doorvoercompensatiefactor" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "De vermenigvuldigingsfactor voor de vertaling doorvoer -> afstand." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4827,9 +4827,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" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 9416935018..19b4c72931 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-10-05 17:27+0200\n" +"PO-Revision-Date: 2017-11-22 16:19+0100\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" "Language-Team: reprapy.pl\n" "Language: pl_PL\n" @@ -93,7 +93,7 @@ msgstr "Plik wysłany do Doodle3D Connect" #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@action:button" msgid "Open Connect..." -msgstr "" +msgstr "Otwórz Connect..." #: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 msgctxt "@info:tooltip" @@ -143,7 +143,7 @@ msgstr "Nie można uruchomić nowego zadania, ponieważ drukarka jest zajęta lu #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Drukarka Niedostępna" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -595,7 +595,7 @@ msgstr "Połącz przez sieć" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Nowe funkcje są dostępne dla twojej {machine_name}! Rekomendowane jest zaktualizowanie oprogramowania drukarki." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -606,7 +606,7 @@ msgstr "Nowe oprogramowanie %s jest dostępne" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Jak zaktualizować" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -641,7 +641,7 @@ msgstr "Błąd podczas rozpoczynania %s!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Widok symulacji" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -651,7 +651,7 @@ msgstr "Cura nie wyświetla dokładnie warstw kiedy drukowanie przewodowe jest w #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Widok symulacji" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -732,7 +732,7 @@ msgstr "Nie można pociąć z bieżącymi ustawieniami. Następujące ustawienia #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Nie można pokroić przez ustawienia osobne dla modelu. Następujące ustawienia mają błędy w jednym lub więcej modeli: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -767,25 +767,25 @@ msgstr "Konfiguruj ustawienia każdego modelu z osobna" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Zainstaluj" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Nie udało się skopiować plików pluginu Siemens NX. Proszę sprawdź twój UGII_USER_DIR. Nie jest ustawiony do folderu." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Udało się zainstalować plugin Cura Siemens NX." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Nie udało się skopiować plików pluginu Siemens NX. Proszę sprawdź twój UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Nie udało się zainstalować pluginu Siemens NX. Nie można ustawić zmiennej środowiskowej UGII_USER_DIR dla Siemens NX." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -948,7 +948,7 @@ msgstr "Inny" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Nieznany" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1013,12 +1013,12 @@ msgstr "Niestandardowy materiał" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Globalny" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Nie zastąpione" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1067,7 +1067,7 @@ msgstr "Wyeksportowano profil do {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "Eksport udany" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1140,84 +1140,87 @@ msgid "" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " msgstr "" +"

    Wystąpił fatalny błąd. Proszę wyślij do nas ten Raport Błędu, abyśmy mogli naprawić błąd

    \n" +"

    Proszę użyj przycisku \"Wyślij raport\", aby wysłać raport błędu automatycznie na nasze serwery.

    \n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Informacje o systemie" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Nieznany" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Wersja Cura: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Platforma: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Wersja Qt: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "Wersja PyQt: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • Wersja OpenGL: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • Wydawca OpenGL: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGL Renderer: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Śledzenie błędów" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Logi" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Opis użytkownika" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Wyślij raport" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1255,7 +1258,7 @@ msgstr "Nie można otworzyć żadnego innego pliku, jeśli ładuje się G-code. #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Wybrany model był zbyta mały do załadowania." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1633,7 +1636,7 @@ msgstr "%1 nie została ustawiona do hostowania grupy podłączonych drukarek Ul #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Otwiera stronę zadań drukowania w twojej domyślnej przeglądarce sieciowej." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1668,7 +1671,7 @@ msgstr "Utracone połączenie z drukarką" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Wyłączona" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1683,12 +1686,12 @@ msgstr "Zakończono" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "Wstrzymana" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Wznawianie" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1830,12 +1833,12 @@ msgstr "Rodzaj linii" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Szybkość Posuwu" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Grubość warstwy" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1885,12 +1888,12 @@ msgstr "Wewnętrzna ściana" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "min" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "max" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2128,7 +2131,7 @@ msgstr "%1 poza %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Ładowanie projektu usunie wszystkie modele z platformy roboczej." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2172,6 +2175,9 @@ msgid "" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" msgstr "" +"Ten plugin zawiera licencje.\n" +"Musisz zaakceptować tę licencję, aby zainstalować ten plugin.\n" +"Akceptujesz poniższe postanowienia?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" @@ -2186,7 +2192,7 @@ msgstr "Odrzuć" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Zgoda Użytkownika" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -3069,7 +3075,7 @@ msgstr "O Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "version: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3168,7 +3174,7 @@ msgstr "Biblioteka edytująca pola" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Biblioteka Python HTTP" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3188,7 +3194,7 @@ msgstr "Profil:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Brak Dostępnego Profilu" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3301,44 +3307,44 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00godz. 00min." #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Szacowany czas
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Szacowanie kosztów" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Razem:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3463,27 +3469,27 @@ msgstr "Przed drukowaniem podgrzej stół. W dalszym ciągu można dostosowywać #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Kontrola drukarką" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Pozycja Swobodnego Ruchu" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Dystans Swobodnego Ruchu" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3528,7 +3534,7 @@ msgstr "&Zamknij" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Zresetuj pozycję kamery" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3770,7 +3776,7 @@ msgstr "Importuj wszystkie jako modele" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Cura Ultimaker" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3927,7 +3933,7 @@ msgstr "Wysokość warstwy" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Niestandardowy profil jest obecnie aktywny. Aby włączyć pasek jakości, wybierz domyślny profil w zakładce Niestandardowe" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3947,7 +3953,7 @@ msgstr "Szybciej" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Zmodyfikowałeś ustawienia profilu. Jeżeli chcesz je zmienić, przejdź do trybu niestandardowego." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4039,7 +4045,7 @@ msgstr "Materiał" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Sprawdź kompatybilność" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4179,12 +4185,12 @@ msgstr "Integracja z SolidWorks" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Zapewnia widok Symulacji" #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Widok Symulacji" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4269,12 +4275,12 @@ msgstr "Ulepszenie Wersji 2.7 do 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Ulepsza konfigurację z Cura 3.0 do Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Ulepszenie Wersji 3.0 do 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4339,12 +4345,12 @@ msgstr "Narzędzie Ustawień dla Każdego Modelu" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Pomaga zainstalować przycisk 'eksportuj do Cura' w Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Integracja z Siemens NX" #: 3MFReader/plugin.json msgctxt "description" @@ -4409,12 +4415,12 @@ msgstr "3MF Writer" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Pyta użytkownika czy zgadza się z naszą licencją" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "ZgodaUżytkownika" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4456,13 +4462,13 @@ msgstr "Czytnik Profili Cura" #~ 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 "Aby upewnić się że twoja {machine_name} jest wyposażona w najnowsze opcje rekomendowane jest aktualizowanie oprogramowania regularnie. Może to być wykonane na {machine_name} (kiedy jest podłączona do sieci) lub przez USB." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Widok warstwy" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Widok warstwy" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Widok warstwy" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Widok warstwy" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4564,9 +4570,9 @@ msgstr "Czytnik Profili Cura" #~ msgid "Provides the Layer view." #~ msgstr "Zapewnia widok warstw." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Widok Warstw" +msgctxt "name" +msgid "Layer View" +msgstr "Widok Warstw" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4887,9 +4893,9 @@ msgstr "Czytnik Profili Cura" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Zapewnia obsługę importowania profili z plików g-code." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Widok warstwy" +msgctxt "@label" +msgid "Layer View" +msgstr "Widok warstwy" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/pl_PL/fdmextruder.def.json.po b/resources/i18n/pl_PL/fdmextruder.def.json.po index beb84335cc..8e7a8c2084 100644 --- a/resources/i18n/pl_PL/fdmextruder.def.json.po +++ b/resources/i18n/pl_PL/fdmextruder.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-04 12:25+0200\n" +"PO-Revision-Date: 2017-11-22 15:00+0100\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" "Language-Team: reprapy.pl\n" "Language: pl_PL\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Poedit 2.0.4\n" #: fdmextruder.def.json msgctxt "machine_settings label" diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po index 29929315e0..4803933a28 100644 --- a/resources/i18n/pl_PL/fdmprinter.def.json.po +++ b/resources/i18n/pl_PL/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-29 16:14+0200\n" +"PO-Revision-Date: 2017-11-22 19:41+0100\n" "Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n" "Language-Team: reprapy.pl\n" "Language: pl_PL\n" @@ -613,27 +613,27 @@ msgstr "Wysokość początkowej warstwy w mm. Grubsza początkowa warstwa powodu #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Tolerancja Cięcia" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Jak ciąć warstwy z ukośnymi powierzchniami. Obszary warstwy mogą być generowane na podstawie miejsca gdzie środek warstwy przecina się z powierzchnią (Środek). Alternatywnie każda warstwa może mieć obszary, które wpadają do środka objętości poprzez wysokość warstwy (Wyłączne) lub warstwa ma obszary, które wpadają do środka w każdym miejscu na warstwie (Włącznie). Wyłącznie zatrzymuje najwięcej detali, Włącznie powoduje najlepsze dopasowanie, a Środek wymaga najmniej czasu do przetworzenia." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Środek" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Wyłącznie" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Włącznie" #: fdmprinter.def.json msgctxt "line_width label" @@ -808,7 +808,7 @@ msgstr "Esktruder używany do drukowania zewn. ściany. Używane w multi-ekstruz #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Ekstruder Wewn. Linii" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1388,7 +1388,7 @@ msgstr "Wzór Wypełn." #: 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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "Wzór materiału wypełniającego wydruk. Linie i zygzaki zmieniają kierunek na przemiennych warstwach, redukując koszty materiału. Kratka, trójkąty, tri-sześciokąt, sześcienne, ośmiościenne, ćwierć sześcienny i koncentryczny wzór są drukowane w pełni na każdej warstwie. Sześcienne, ćwierć sześcienne i czworościenne wypełnienie zmienia się co każdą warstwę, aby zapewnić równy rozkład siły w każdym kierunku." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1408,7 +1408,7 @@ msgstr "Trójkąty" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Tri-Sześciokąt" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1463,7 +1463,7 @@ msgstr "Połącz Linie Wypełnienia" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Łączy końce gdzie wzór wypełnienia spotyka się z wewn. ścianą używając linii, która podąża za kształtem wewn. ściany. Włączenie tego ustawienia może spowodować lepszą przyczepność wypełnienia do ścian i zredukować efekty wypełnienia w jakości powierzchni. Wyłączenie tego ustawienia redukuje ilość potrzebnego materiału." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1478,22 +1478,22 @@ msgstr "Lista całkowitych kierunków linii do użycia. Elementy z listy są uż #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Przesunięcie Wypełn. w Osi X" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Wypełnienie jest przesunięte o taką odległość wzdłuż osi X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Przesunięcie Wypełn. w Osi Y" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Wypełnienie jest przesunięte o taką odległość wzdłuż osi Y." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1808,22 +1808,22 @@ msgstr "Dostosowuje średnicę stosowanego filamentu. Dopasuj tę wartość do #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Tendencja Przyczepności" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Tendencja przyczepności powierzchni." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Energia Powierzchni" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Energia powierzchni." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3556,6 +3556,8 @@ 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 "" +"Pozioma odległość między obwódką a pierwszą warstwą nadruku.\n" +"Jest to o minimalnej odległości. Z tej odległości linie będą nakładane w kierunku zewnętrznym." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3615,7 +3617,7 @@ msgstr "Wygładzanie Tratwy" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "To ustawienie kontroluje jak bardzo wewn. narożniki w zewn. krawędzi tratwy mają być zaokrąglone. Wewn. narożniki są zaokrąglane do półokręgów o promieniu równym wartości podanej tutaj. To ustawienie usuwa także otwory w zewn. krawędzi tratwy, które są mniejsze niż taki okrąg." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4090,12 +4092,12 @@ msgstr "Zwykle Cura próbuje zszywać małe dziury w siatce i usunąć części #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Maksymalna Rozdzielczość" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "Minimalny rozmiar linii segmentu po pocięciu. Jeżeli to zwiększysz, siatka będzie miała mniejszą rozdzielczość. Może to spowodować przyspieszenie prędkości przetwarzania g-code i przyspieszenie prędkości cięcia poprzez usunięcie detali siatki, których tak czy tak nie można przetworzyć." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4130,12 +4132,12 @@ msgstr "Przełącz się, to której przecinającej się siatki będą należały #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Usuń Pustą Pierwsz. Warstwę" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Usuń puste warstwy poniżej pierwszej drukowanej warstwy jeżeli takie występują. Wyłączenie tego ustawienia może powodować puste pierwsze warstwy jeżeli Tolerancja Cięcia jest ustawiona na Włącznie lub Środek." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4665,22 +4667,22 @@ msgstr "Średnia odległość między losowymi punktami wprowadzonymi w każdym #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Maks. offset ekstruzji do kompensowania przepływu" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "Maksymalna odległość w mm do skompensowania." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Współczynnik kompensacji przepływu" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "Współczynnik mnożący przepływu -> tłumaczenie odległości." #: fdmprinter.def.json msgctxt "wireframe_enabled label" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 52abe5a64a..e00c6099c4 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-10-05 12:20-0300\n" +"PO-Revision-Date: 2017-12-04 10:20-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio and CoderSquirrel \n" "Language: pt_BR\n" @@ -92,7 +92,7 @@ msgstr "Arquivo enviado ao 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" @@ -142,7 +142,7 @@ msgstr "Incapaz de iniciar novo trabalho porque a impressora está ocupada ou n #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Impressora Não Disponível" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -594,7 +594,7 @@ msgstr "Conectar pela rede" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Novos recursos estão disponível para sua {machine_name}! Recomenda-se atualizar o firmware da impressora." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -605,7 +605,7 @@ msgstr "Novo firmware de %s disponível" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Como atualizar" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -640,7 +640,7 @@ msgstr "Erro ao iniciar %s!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Visão simulada" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -650,7 +650,7 @@ msgstr "O Cura não mostra as camadas corretamente quando Impressão em Arame es #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Visão Simulada" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -731,7 +731,7 @@ msgstr "Incapaz de fatiar com os ajustes atuais. Os seguintes ajustes têm erros #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Incapaz de fatiar devido a alguns ajustes por modelo. Os seguintes ajustes têm erros em um ou mais dos modelos: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -766,25 +766,25 @@ msgstr "Configurar ajustes por Modelo" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Instalar" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Erro ao copiar arquivos de plugins Siemens NX. Por favor verifique seu UGII_USER_DIR. Ele não está configurado para um diretório." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Plugin Siemens NX do Cura instalado com sucesso." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Erro ao copiar arquivos de plugins Siemens NX. Por favor, verifique seu UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Erro ao instalar arquivos de plugins Siemens NX. Não foi possível ajustar a variável de ambiente UGII_USER_DIR para o Simenes NX." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -947,7 +947,7 @@ msgstr "Outros" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Desconhecido" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1012,12 +1012,12 @@ msgstr "Material Personalizado" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Global" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Não sobrepujado" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1066,7 +1066,7 @@ msgstr "Perfil exportado para {0}" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "Exportação concluída" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1139,84 +1139,87 @@ msgid "" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " msgstr "" +"

    Uma exceção fatal aocorreu. Por favor nos envie este Relatório de Erros para consertarmos o problema

    \n" +"

    Por favor use o botão \"Enviar relatório\" para postar um relato de bug automaticamente em nossos servidores

    \n" +" " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Informação do Sistema" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Desconhecida" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Versão do Cura: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Plataforma: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Versão da Qt: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "Versão da PyQt: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • Versão da OpenGL: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • Fornecedor da OpenGL: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • Renderizador da OpenGL: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Traceback de exceção" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Registros" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Descrição do usuário" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Enviar relatório" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1254,7 +1257,7 @@ msgstr "Não é possível abrir nenhum outro arquivo se G-Code estiver sendo car #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "O modelo selecionado é pequenos demais para carregar." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1632,7 +1635,7 @@ msgstr "%1 não está configurada para hospedar um grupo de impressora Ultimaker #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Abre a página de trabalhos de impressão com seu navegador default." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1667,7 +1670,7 @@ msgstr "A conexão à impressora foi perdida" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Desabilitado" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1682,12 +1685,12 @@ msgstr "Finalizado" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "Pausado" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Continuando" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1829,12 +1832,12 @@ msgstr "Tipo de Linha" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Taxa de alimentação" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Largura de camada" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1884,12 +1887,12 @@ msgstr "Parede Interna" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "mín" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "máx" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2127,7 +2130,7 @@ msgstr "%1 de %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Carregar um projeto limpará todos os modelos da mesa de impressão." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2171,6 +2174,9 @@ msgid "" "You need to accept this license to install this plugin.\n" "Do you agree with the terms below?" msgstr "" +"Este plugin contém uma licença.\n" +"Você precisa aceitar esta licença para instalar este plugin.\n" +"Você concorda com os termos abaixo?" #: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 msgctxt "@action:button" @@ -2185,7 +2191,7 @@ msgstr "Recusar" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Termos de Acordo do Usuário" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -3068,7 +3074,7 @@ msgstr "Sobre o Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "versão: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3167,7 +3173,7 @@ msgstr "Biblioteca de recorte de polígonos" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Biblioteca de HTTP Python" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3187,7 +3193,7 @@ msgstr "Perfil:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Nenhum Perfil Disponível" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3298,44 +3304,44 @@ msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00h 00min" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Especificação de tempo
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Especificação de custo" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Total:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3460,27 +3466,27 @@ msgstr "Aquecer a mesa antes de imprimir. Você pode continuar ajustando sua imp #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Controle da Impressora" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Posição de Trote" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Distância de Trote" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3525,7 +3531,7 @@ msgstr "&Sair" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Recompor posições de câmera" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3767,7 +3773,7 @@ msgstr "Importar todos como modelos" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3924,7 +3930,7 @@ msgstr "Altura de Camada" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Um perfil personalizado está atualmente ativo. Para habilitar o controle deslizante de qualidade, escolha um perfil de qualidade default na aba Personalizado" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3944,7 +3950,7 @@ msgstr "Mais Rápido" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Você modificou alguns ajustes de perfil. Se você quiser alterá-los, use o modo personalizado." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4036,7 +4042,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Verificar compatibilidade" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4176,12 +4182,12 @@ msgstr "Integração ao SolidWorks" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Provê a Visão Simulada." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Visão Simulada" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4266,12 +4272,12 @@ msgstr "Atualização de Versão de 2.7 para 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Atualiza configurações do Cura 3.0 para o Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Atualização de Versão 3.0 para 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4336,12 +4342,12 @@ msgstr "Ferramenta de Ajustes Por Modelo" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Auxilia na instalação de um botão 'exportar para o Cura' no Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Integração ao Siemens NX" #: 3MFReader/plugin.json msgctxt "description" @@ -4406,12 +4412,12 @@ msgstr "Gerador de 3MF" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Pergunta ao usuário uma única vez sobre concordância com a licença" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "Acordo de Usuário" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4453,13 +4459,13 @@ msgstr "Leitor de Perfis do Cura" #~ 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 "Para assegurar que sua {machine_name} esteja equipada com os recursos mais recentes, é recomendado atualizar o firmware regularmente. Isto pode ser feito na {machine_name} (quando conectado pela rede) ou via USB." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Visão de Camadas" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Visão de Camadas" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Visão de Camadas" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Visão de Camadas" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4561,9 +4567,9 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "Provides the Layer view." #~ msgstr "Provê a visão de Camadas." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Visão de Camadas" +msgctxt "name" +msgid "Layer View" +msgstr "Visão de Camadas" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4884,9 +4890,9 @@ msgstr "Leitor de Perfis do Cura" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Provê suporte para importar perfis de arquivos G-Code." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Visão de Camadas" +msgctxt "@label" +msgid "Layer View" +msgstr "Visão de Camadas" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/pt_BR/fdmextruder.def.json.po b/resources/i18n/pt_BR/fdmextruder.def.json.po index 816a6ccb4a..1f222f9847 100644 --- a/resources/i18n/pt_BR/fdmextruder.def.json.po +++ b/resources/i18n/pt_BR/fdmextruder.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-10-06 08:00-0300\n" +"PO-Revision-Date: 2017-12-04 09:00-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio and CoderSquirrel \n" "Language: pt_BR\n" diff --git a/resources/i18n/pt_BR/fdmprinter.def.json.po b/resources/i18n/pt_BR/fdmprinter.def.json.po index d0e806e768..4aeea1d2f9 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-10-06 10:00-0300\n" +"PO-Revision-Date: 2017-12-04 10:20-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio and CoderSquirrel \n" "Language: pt_BR\n" @@ -613,27 +613,27 @@ msgstr "A altura da camada inicial em mm. Uma camada inicial mais espessa faz a #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Tolerância de Fatiamento" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Como fatiar camadas com superfícies diagonais. As áreas de uma camada podem ser geradas baseadas em onde o meio da camada interseciona a superfície (Meio). Alternativamente, cada camada pode ter as áreas que se encontram dentro do volume por toda a altura da camada (Exclusivo) ou a camada pode abranger todas as áreas que tenham qualquer penetração dentro do volume (Inclusivo). Exclusivo retém mais detalhes, Inclusivo é melhor para encaixes e Meio toma menos tempo para processar." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Meio" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Exclusivo" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inclusivo" #: fdmprinter.def.json msgctxt "line_width label" @@ -808,7 +808,7 @@ msgstr "O carro extrusor usado para imprimir a parede externa. Este ajuste é us #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Extrusor da Parede Interior" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1388,7 +1388,7 @@ msgstr "Padrão de Preenchimento" #: 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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "O padrão do material de preenchimento da impressão. Preenchimento de Linhas e Ziguezague trocam direções em camadas alternadas, reduzindo custo do material. Os padrões de Grade, Triângulo, Tri-Hexágono, Cúbico, Octeto, Quarto Cúbico, Cruzado e Concêntrico são totalmente impressos em cada camada. Os preenchimentos Cúbico, Quarto Cúbico e Octeto mudam em cada camada para prover uma distribuição mais uniforme de forças em cada direção." #: fdmprinter.def.json msgctxt "infill_pattern option grid" @@ -1408,7 +1408,7 @@ msgstr "Triângulos" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Tri-Hexágono" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1463,7 +1463,7 @@ msgstr "Conectar Linhas de Preenchimento" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of infill on the quality of vertical surfaces. Disabling this setting reduces the amount of material used." -msgstr "" +msgstr "Conecta as extremidades onde o padrão de preenchimento toca a parede interna usando uma linha que segue a forma da parede interna. Habilitar este ajuste pode fazer o preenchimento aderir melhor às paredes e reduzir o efeito do preenchimento na qualidade de superfícies verticais. Desabilitar este ajuda diminui a quantidade de material usado." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1478,22 +1478,22 @@ msgstr "Uma lista de direções de filetes em números inteiros a usar. Elemento #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Deslocamento X do Preenchimento" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "O padrão de preenchimento é corrigido/deslocado nesta distância no eixo X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Deslocamento do Preenchimento Y" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "O padrão de preenchimento é corrigido/deslocado nesta distância no eixo Y." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1643,7 +1643,7 @@ msgstr "Distância de Expansão do Contorno" #: 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 "A distância em que os contornos são expandidos pra dentro do preenchimento. Valores mais altos fazem o contorno aderir melhor ao padrão de preenchimento e faz as paredes de camadas vizinhas aderirem melhor ao contorno. Valores menores diminuem a quantidade de material usado." #: fdmprinter.def.json msgctxt "top_skin_expand_distance label" @@ -1808,22 +1808,22 @@ msgstr "Ajusta o diâmetro do filamento utilizado. Acerte este valor com o diâm #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Tendência à Aderência" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Tendência de aderência da superfície" #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Energia de Superfície" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Energia de superfície." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3556,6 +3556,8 @@ 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 "" +"A distância horizontal entre o skirt a primeira camada da impressão.\n" +"Esta é a distância mínima. Linhas múltiplas de skirt estenderão além desta distância." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3615,7 +3617,7 @@ msgstr "Amaciamento do Raft" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "Este ajuste controla quanto os cantos internos do contorno do raft são arredondados. Esses cantos internos são convertidos em semicírculos com raio igual ao valor dado aqui. Este ajuste também remove furos no contorno do raft que forem menores que o círculo equivalente." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4090,12 +4092,12 @@ msgstr "Normalmente o Cura tenta costurar pequenos furos na malha e remover part #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Resolução Máxima" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "O tamanho mínimo de um segmento de linha após o fatiamento. Se você aumentar este valor, a malha terá uma resolução menor. Isto pode permitir que a impressora mantenha a velocidade que precisa para processar o G-Code e aumentará a velocidade de fatiamento ao remover detalhes da malha que não poderia processar de qualquer jeito." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4130,12 +4132,12 @@ msgstr "Troca quais volumes sobrepondo malhas vão pertencer a cada camada, de m #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Remover Camadas Iniciais Vazias" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Remove camadas vazias entre a primeira camada impressa se estiverem presentes. Desabilitar este ajuste pode criar camadas iniciais vazias se a Tolerância de Fatiamento estiver configurada para Exclusivo ou Meio." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4665,22 +4667,22 @@ msgstr "A distância média entre os pontos aleatórios introduzidos em cada seg #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Deslocamento de extrusão máxima da compensação de taxa de fluxo." #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "A distância máxima em mm a compensar." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Fator de compensaçõ de taxa de fluxo" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "O fator de multiplicação para a tradução entre taxa de fluxo -> distância." #: fdmprinter.def.json msgctxt "wireframe_enabled label" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po old mode 100755 new mode 100644 index 28f3ceae2c..a953a8c87e --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-23 10:40+0300\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Ruslan Popov \n" "Language-Team: Ruslan Popov\n" "Language: ru_RU\n" @@ -93,7 +93,7 @@ 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" @@ -143,7 +143,7 @@ msgstr "Невозможно запустить новое задание, по #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Принтер недоступен" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -595,7 +595,7 @@ msgstr "Подключиться через сеть" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "Для {machine_name} доступны новые функции! Рекомендуется обновить встроенное программное обеспечение принтера." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -606,7 +606,7 @@ msgstr "Доступна новая прошивка %s" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Порядок обновления" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -641,7 +641,7 @@ msgstr "Ошибка при запуске %s!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Вид моделирования" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -651,7 +651,7 @@ msgstr "Cura не аккуратно отображает слои при исп #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Вид моделирования" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -732,7 +732,7 @@ msgstr "Не могу выполнить слайсинг на текущих н #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Не удалось выполнить слайсинг из-за настроек модели. Следующие настройки ошибочны для одной или нескольких моделей: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -767,25 +767,25 @@ msgstr "Правка параметров модели" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Установить" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Не удалось скопировать файлы плагинов Siemens NX. Проверьте переменную среды UGII_USER_DIR. Ей не назначен каталог." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Плагин Siemens NX Cura успешно установлен." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Не удалось скопировать файлы плагинов Siemens NX. Проверьте переменную среды UGII_USER_DIR." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Не удалось установить плагин Siemens NX. Не удалось установить переменную среды UGII_USER_DIR для Siemens NX." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -948,7 +948,7 @@ msgstr "Другое" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Неизвестно" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1013,12 +1013,12 @@ msgstr "Собственный материал" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Общие" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Не переопределен" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1067,7 +1067,7 @@ msgstr "Экспортирование профиля в {0}A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    Произошло критическое исключение. Отправьте нам этот отчёт о сбое, чтобы мы могли устранить проблему

    \n

    Нажмите кнопку «Отправить отчёт», чтобы автоматически отправить отчёт об ошибке на наш сервер

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Информация о системе" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Неизвестно" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Версия Cura: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Платформа: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Версия Qt: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "Версия PyQt: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • Версия OpenGL: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • Поставщик OpenGL: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • Средство визуализации OpenGL: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "Диагностика исключения" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Журналы" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Описание пользователя" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Отправить отчёт" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1255,7 +1255,7 @@ msgstr "Невозможно открыть любой другой файл, е #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Выбранная модель слишком мала для загрузки." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1516,10 +1516,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1633,7 +1630,7 @@ msgstr "%1 не настроен для управления группой по #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 msgctxt "@info:tooltip" msgid "Opens the print jobs page with your default web browser." -msgstr "" +msgstr "Открытие страницы заданий печати в веб-браузере по умолчанию." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1668,7 +1665,7 @@ msgstr "Потеряно соединение с принтером" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Отключено" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1683,12 +1680,12 @@ msgstr "Завершено" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "Приостановлено" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Возобновляется" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1830,12 +1827,12 @@ msgstr "Тип линии" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Скорость подачи" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Толщина слоя" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1885,12 +1882,12 @@ msgstr "Внутренняя стенка" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "мин." #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "макс." #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2130,7 +2127,7 @@ msgstr "%1 из %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Загрузка проекта приведет к удалению всех моделей на рабочем столе." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2173,7 +2170,7 @@ msgid "" "This 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" @@ -2188,7 +2185,7 @@ msgstr "Отклонить" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Пользовательское соглашение" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2438,9 +2435,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" @@ -3071,7 +3066,7 @@ msgstr "О Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "версия: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3083,9 +3078,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" @@ -3170,7 +3163,7 @@ msgstr "Библиотека обрезки полигонов" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Библиотека Python HTTP" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3190,7 +3183,7 @@ msgstr "Профиль:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "отсутствуют доступные профили" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3198,10 +3191,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:152 msgctxt "@label:textbox" @@ -3239,10 +3229,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." @@ -3270,10 +3257,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" @@ -3281,10 +3265,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:120 msgctxt "@label:listbox" @@ -3296,51 +3277,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00 ч 00 мин" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Формат отображения времени
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Настройка расчета стоимости" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1 м" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1 г" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Итого:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1 м / ~ %2 г / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1 м / ~ %2 г" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3467,27 +3446,27 @@ msgstr "Нагрев горячего стола перед печатью. Вы #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Управление принтером" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Положение толчковой подачи" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Расстояние толчковой подачи" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3532,7 +3511,7 @@ msgstr "Выход" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Сбросить положение камеры" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3777,7 +3756,7 @@ msgstr "Импортировать всё как модели" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3934,7 +3913,7 @@ msgstr "Высота слоя" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "В настоящее время активен пользовательский профиль. Чтобы включить ползунок качества, на вкладке «Пользовательские» выберите профиль качества по умолчанию" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3954,7 +3933,7 @@ msgstr "Быстрее" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "В некоторые настройки профиля были внесены изменения. Если их необходимо изменить, перейдите в пользовательский режим." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4047,7 +4026,7 @@ msgstr "Материал" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Проверить совместимость" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4187,12 +4166,12 @@ msgstr "Интеграция с SolidWorks" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Открытие вида моделирования." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Вид моделирования" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4272,17 +4251,17 @@ msgstr "Обновляет конфигурацию Cura 2.7 до Cura 3.0." #: VersionUpgrade/VersionUpgrade27to30/plugin.json msgctxt "name" msgid "Version Upgrade 2.7 to 3.0" -msgstr "" +msgstr "Обновление версии с 2.7 до 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Обновление конфигураций с Cura 3.0 до Cura 3.1." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "Обновление версии с 3.0 до 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4347,12 +4326,12 @@ msgstr "Инструмент для настройки каждой модели #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Позволяет установить кнопку «Экспортировать в Cura» в Siemens NX." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4417,12 +4396,12 @@ msgstr "Запись 3MF" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Запрашивает согласие пользователя с условиями лицензии" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4464,13 +4443,13 @@ msgstr "Чтение профиля Cura" #~ 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 "Рекомендуется регулярно обновлять прошивку принтера {machine_name}. Это может сделано когда {machine_name} подключен к сети или к USB." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Просмотр слоёв" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Просмотр слоёв" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Просмотр слоёв" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Просмотр слоёв" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4571,9 +4550,9 @@ msgstr "Чтение профиля Cura" #~ msgid "Provides the Layer view." #~ msgstr "Предоставляет послойный просмотр." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Просмотр слоёв" +msgctxt "name" +msgid "Layer View" +msgstr "Просмотр слоёв" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4894,9 +4873,9 @@ msgstr "Чтение профиля Cura" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "Предоставляет поддержку для импортирования профилей из GCode файлов." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Просмотр слоёв" +msgctxt "@label" +msgid "Layer View" +msgstr "Просмотр слоёв" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/ru_RU/fdmextruder.def.json.po b/resources/i18n/ru_RU/fdmextruder.def.json.po index 7d44d19ee0..895544cc45 100644 --- a/resources/i18n/ru_RU/fdmextruder.def.json.po +++ b/resources/i18n/ru_RU/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-09 19:26+0300\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Ruslan Popov \n" "Language-Team: Ruslan Popov\n" "Language: ru_RU\n" diff --git a/resources/i18n/ru_RU/fdmprinter.def.json.po b/resources/i18n/ru_RU/fdmprinter.def.json.po old mode 100755 new mode 100644 index 6172a55199..fdeefe1154 --- a/resources/i18n/ru_RU/fdmprinter.def.json.po +++ b/resources/i18n/ru_RU/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-23 11:19+0300\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Ruslan Popov \n" "Language-Team: Ruslan Popov\n" "Language: ru_RU\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-коде, которые будут выполнены при старте печати, разделённые \n" -"." +msgstr "Команды в G-коде, которые будут выполнены при старте печати, разделённые \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-коде, которые будут выполнены в конце печати, разделённые \n" -"." +msgstr "Команды в G-коде, которые будут выполнены в конце печати, разделённые \n." #: fdmprinter.def.json msgctxt "material_guid label" @@ -614,27 +610,27 @@ msgstr "Высота первого слоя в миллиметрах. Боле #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Допуск слайсинга" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Способ выполнения слайсинга слоев диагональными поверхностями. Области слоя можно создать на основе места пересечения середины слоя и поверхности (Середина). Кроме того, каждый слой может иметь области, попадающие в объем по высоте слоя (Исключение), или слой имеет области, попадающие в любое место слоя (Включение). Способ «Исключение» сохраняет больше деталей. Способ «Включение» обеспечивает наилучшую подгонку. Способ «Середина» требует минимального времени для обработки." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Середина" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Исключение" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Включение" #: fdmprinter.def.json msgctxt "line_width label" @@ -809,7 +805,7 @@ msgstr "Этот экструдер используется для печати #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "Экструдер внутренней стенки" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1389,7 +1385,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, tri-hexagon, cubic, octet, quarter cubic, cross 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" @@ -1409,7 +1405,7 @@ msgstr "Треугольник" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Шестигранник из треугольников" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1464,7 +1460,7 @@ msgstr "Соединять линии заполнения" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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" @@ -1479,22 +1475,22 @@ msgstr "Список направлений линии при печати сл #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Смещение заполнения по X" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Расстояние смещения шаблона заполнения по оси X." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Смещение заполнения по Y" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Расстояние смещения шаблона заполнения по оси Y." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1809,22 +1805,22 @@ msgstr "Укажите диаметр используемой нити." #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Тенденция к прилипанию" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Тенденция к прилипанию к поверхности." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Поверхностная энергия" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Поверхностная энергия." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3556,7 +3552,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 "" +msgstr "Горизонтальное расстояние между юбкой и первым слоем печати.\nМинимальное расстояние. Несколько линий юбки будут расширяться от этого расстояния." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3616,7 +3612,7 @@ msgstr "Сглаживание подложки" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "Этот параметр регулирует величину скругления внутренних углов контура подложки. Внутренние углы скругляются до полукруга с радиусом, равным установленному здесь значению. Этот параметр также приводит к удалению отверстий в контуре подложки, которые меньше такого круга." #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4091,12 +4087,12 @@ msgstr "Обычно Cura пытается закрыть небольшие о #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Максимальное разрешение" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "Минимальный размер сегмента линии после слайсинга. Увеличение значения этого параметра понизит разрешение модели. Это может позволить принтеру поддерживать скорость обработки кода G и увеличит скорость слайсинга за счет удаления деталей модели, которые он в любом случае не сможет обработать." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4131,12 +4127,12 @@ msgstr "Чередует какой из объектов, пересекающ #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Удалить первые пустые слои" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Удаление пустых слоёв под первым печатаемым слоем, если они имеются. Отключение этой функции может привести к созданию первых пустых слоев, если для параметра «Допуск слайсинга» установлено значение «Включение» или «Середина»." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4666,22 +4662,22 @@ msgstr "Среднее расстояние между случайными то #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Макс. смещение экструзии для компенсации расхода" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "Максимальное компенсируемое расстояние в миллиметрах." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Коэффициент компенсации расхода" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "Коэффициент перевода расхода в расстояние." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4833,9 +4829,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" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index 8c5a8439e2..c77df51d69 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -91,7 +91,7 @@ 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" @@ -141,7 +141,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:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "Yazıcı Mevcut Değil" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -593,7 +593,7 @@ msgstr "Ağ ile Bağlan" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "{machine_name} adlı cihazınız için yeni özellikler var! Yazıcınızın fabrika yazılımını güncellemeniz önerilir." #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -604,7 +604,7 @@ msgstr "Yeni %s bellenimi mevcut" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "Nasıl güncellenir" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -639,7 +639,7 @@ msgstr "%s başlatılırken hata oluştu!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "Simülasyon görünümü" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -649,7 +649,7 @@ msgstr "Tel Yazma etkinleştirildiğinde, Cura katmanları doğru olarak görün #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "Simülasyon Görünümü" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -730,7 +730,7 @@ msgstr "Geçerli ayarlarla dilimlenemiyor. Şu ayarlarda hata var: {0}" #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "Modele özgü ayarlar nedeniyle dilimlenemedi. Şu ayarlar bir veya daha fazla modelde hataya yol açıyor: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -765,25 +765,25 @@ msgstr "Model Başına Ayarları Yapılandır" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "Yükle" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "Siemens NX eklenti dosyaları kopyalanamadı. Lütfen UGII_USER_DIR ayarınızı kontrol edin. Bir dizine ayarlı değil." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "Siemens NX Cura eklentisi başarıyla yüklendi." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "Siemens NX eklenti dosyaları kopyalanamadı. Lütfen UGII_USER_DIR ayarınızı kontrol edin." #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "Siemens NX eklentisi yüklenemedi. Siemens NX ortam değişkeni UGII_USER_DIR ayarlanamadı." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -946,7 +946,7 @@ msgstr "Diğer" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "Bilinmiyor" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1011,12 +1011,12 @@ msgstr "Özel Malzeme" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "Genel" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "Geçersiz kılınmadı" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1065,7 +1065,7 @@ msgstr "Profil {0} dosyasına aktarıldı" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "Dışa aktarma başarılı" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1137,85 +1137,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    Çok ciddi bir istisna oluştu. Lütfen sorunu çözmek için bize Çökme Raporu'nu gönderin

    \n

    Sunucularımıza otomatik olarak bir hata raporu yüklemek için lütfen \"Rapor gönder\" düğmesini kullanın

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "Sistem bilgileri" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "Bilinmiyor" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Cura sürümü: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "Platform: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Qt sürümü: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "PyQt sürümü: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • OpenGL Sürümü: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • OpenGL Satıcısı: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGL Oluşturucusu: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "İstisna geri izleme" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "Günlükler" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "Kullanıcı açıklaması" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "Rapor gönder" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1253,7 +1253,7 @@ msgstr "G-code yüklenirken başka bir dosya açılamaz. {0} içe aktarma atland #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "Seçilen model yüklenemeyecek kadar küçüktü." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1514,10 +1514,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1631,7 +1628,7 @@ msgstr "%1, bağlı Ultimaker 3 yazıcı grubunu barındırmak için ayarlı de #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/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/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1666,7 +1663,7 @@ msgstr "Yazıcı bağlantısı koptu" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "Devre dışı" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1681,12 +1678,12 @@ msgstr "Tamamlandı" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "Duraklatıldı" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "Devam ediliyor" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1828,12 +1825,12 @@ msgstr "Çizgi Tipi" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "Besleme hızı" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "Katman kalınlığı" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1883,12 +1880,12 @@ msgstr "İç Duvar" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "min" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "maks" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 / %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "Bir projenin yüklenmesi derleme levhasındaki tüm modelleri siler." #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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 "Bu eklenti bir lisans içerir.\nBu eklentiyi yüklemek 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" @@ -2184,7 +2181,7 @@ msgstr "Reddet" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "Kullanıcı Anlaşması" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "Cura hakkında" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "sürüm: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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" @@ -3166,7 +3159,7 @@ msgstr "Poligon kırpma kitaplığı" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Python HTTP kitaplığı" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "Profil:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "Hiçbir Profil Yok" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00sa 00dk" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "Zaman koşulları
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "Maliyet koşulları" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1 m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "Toplam:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1 m / ~ %2 g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1 m / ~ %2 g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3461,27 +3440,27 @@ msgstr "Yazdırma öncesinde yatağı ısıt. Isıtma sırasında yazdırma işi #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "Yazıcı kontrolü" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "Jog Konumu" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "Jog Mesafesi" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3526,7 +3505,7 @@ msgstr "&Çıkış" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "&Kamera konumunu sıfırla" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3768,7 +3747,7 @@ msgstr "Tümünü model olarak içe aktar" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3925,7 +3904,7 @@ msgstr "Katman Yüksekliği" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "Özel bir profil şu anda aktif. Kalite kaydırıcısını etkinleştirmek için Özel sekmesinde varsayılan bir kalite seçin" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3945,7 +3924,7 @@ msgstr "Daha Hızlı" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "Bazı profil ayarlarını değiştirdiniz. Bunları değişiklikleri kaydetmek istiyorsanız, özel moda gidin." #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4037,7 +4016,7 @@ msgstr "Malzeme" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "Uyumluluğu kontrol et" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4177,12 +4156,12 @@ msgstr "SolidWorks Entegrasyonu" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "Simülasyon görünümünü sunar." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "Simülasyon Görünümü" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4267,12 +4246,12 @@ msgstr "2.7’den 3.0’a Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "Yapılandırmaları Cura 3.0'dan Cura 3.1'e yükseltir." #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "3.0'dan 3.1'e Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4337,12 +4316,12 @@ msgstr "Model Başına Ayarlar Aracı" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "Siemens NX'de bir \"Cura'ya dışa aktar\" düğmesi kurmanıza yardımcı olur." #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX Integration" #: 3MFReader/plugin.json msgctxt "description" @@ -4407,12 +4386,12 @@ msgstr "3MF Yazıcı" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "Kullanıcıya bir kez lisansımızı kabul edip etmediğini sorun" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "UserAgreement" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4454,13 +4433,13 @@ msgstr "Cura Profil Okuyucu" #~ 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 "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." -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "Katman görünümü" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "Katman görünümü" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "Katman Görünümü" +msgctxt "@info:title" +msgid "Layer View" +msgstr "Katman Görünümü" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4562,9 +4541,9 @@ msgstr "Cura Profil Okuyucu" #~ msgid "Provides the Layer view." #~ msgstr "Katman görünümü sağlar." -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "Katman Görünümü" +msgctxt "name" +msgid "Layer View" +msgstr "Katman Görünümü" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4885,9 +4864,9 @@ msgstr "Cura Profil Okuyucu" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "G-code dosyalarından profilleri içe aktarmak için destek sağlar." -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "Katman Görünümü" +msgctxt "@label" +msgid "Layer View" +msgstr "Katman Görünümü" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/tr_TR/fdmextruder.def.json.po b/resources/i18n/tr_TR/fdmextruder.def.json.po index 2a90c14cfe..0bb7de91ac 100644 --- a/resources/i18n/tr_TR/fdmextruder.def.json.po +++ b/resources/i18n/tr_TR/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-11 14:30+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" "Language: tr_TR\n" diff --git a/resources/i18n/tr_TR/fdmprinter.def.json.po b/resources/i18n/tr_TR/fdmprinter.def.json.po index 072041b428..f0c2bad612 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\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" @@ -612,27 +608,27 @@ msgstr "İlk katmanın milimetre cinsinden yüksekliği. Kalın ilk katmanlar ya #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "Dilimleme Toleransı" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "Çapraz yüzeylerle katman dilimleme yolları. Bir katmanın alanları katmanın ortasının yüzeyle kesiştiği yere (Ortalayıcı) göre oluşturulabilir. Diğer bir yol da her katmanın yüksekliği boyunca hacim içinde kalan alanları (Dışlayıcı) veya katmanın içinde herhangi bir yerde kalan alanları (Kapsayıcı) almasıdır. Dışlayıcı seçenek en çok ayrıntıyı tutar; Kapsayıcı seçenek en iyi şekilde oturur; Ortalayıcı ise en kısa sürede işlenir." #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Ortalayıcı" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Dışlayıcı" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Kapsayıcı" #: fdmprinter.def.json msgctxt "line_width label" @@ -807,7 +803,7 @@ msgstr "Dış Duvarı yazdırmak için kullanılan ekstruder dişli çarkı. Ço #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "İç Duvar Ekstrüderi" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1387,7 +1383,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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "Baskının dolgu malzemesinin şeklidir. Hat ve zikzak dolgu, farklı katmanlar üzerinde yön değiştirerek malzeme maliyetini azaltır. Izgara, üçgen, üçlü altıgen, kübik, sekizlik, çeyrek kübik, çapraz ve eşmerkezli şekiller, her katmana tam olarak bası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" @@ -1407,7 +1403,7 @@ msgstr "Üçgenler" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "Üçlü Altıgen" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1462,7 +1458,7 @@ 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 line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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ğlar. Bu ayarın etkinleştirilmesi, dolgunun duvarlara daha iyi yapışmasını sağlayabilir ve dolgunun dikey yüzeylerin kalitesinin etkilerini azaltabilir. Bu ayarın devre dışı bırakılması, kullanılan malzemenin miktarını azaltır." #: fdmprinter.def.json msgctxt "infill_angles label" @@ -1477,22 +1473,22 @@ msgstr "Kullanılacak tam sayı hat yönü listesi. Listedeki öğeler, katmanla #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "Dolgu X Kayması" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "Dolgu şekli X ekseni boyunca bu mesafe kadar kaydırılır." #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "Dolgu Y Kayması" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "Dolgu şekli Y ekseni boyunca bu mesafe kadar kaydırılır." #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1807,22 +1803,22 @@ msgstr "Kullanılan filamanın çapını ayarlar. Bu değeri kullanılan filaman #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "Yapışma Eğilimi" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "Yüzeye yapışma eğilimi." #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "Yüzey Enerjisi" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "Yüzey enerjisi." #: fdmprinter.def.json msgctxt "material_flow label" @@ -3554,7 +3550,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 "" +msgstr "Baskının eteği ve ilk katmanı arasındaki yatay mesafe.\nMinimum mesafedir. Bu mesafeden çok sayıda etek hattı dışarı doğru uzanır." #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3614,7 +3610,7 @@ msgstr "Radye Düzeltme" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "Bu ayar, radye ana hattında yer alan iç köşelerin ne kadar yuvarlanacağı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" @@ -4089,12 +4085,12 @@ msgstr "Normal koşullarda, Cura ağdaki küçük boşlukları diker ve büyük #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "Maksimum Çözünürlük" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "Bir çizginin dilimlemeden sonraki minimum boyutu. Bu değer artırıldıktan sonra örgünün çözünürlüğü düşer. Bu, yazıcının g-kodunu işlemek için gereken hıza yetişmesine olanak tanır ve örtünün zaten işlenemeyecek ayrıntılarını kaldırarak dilimleme hızını artırır." #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4129,12 +4125,12 @@ msgstr "Çakışan bileşimlerin birbirine karışması için her bir katmanda b #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "Boş İlk Katmanları Kaldır" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "Basılan ilk katmanın altındaki varsa boş katmanları kaldır. Bu ayarın devre dışı bırakılması, Dilimleme Toleransı Dışlayıcı veya Ortalayıcı olarak ayarlanmışsa, boş ilk katmanlar oluşmasına neden olabilir." #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4664,22 +4660,22 @@ msgstr "Her bir hat dilimine tanıtılan rastgele noktalar arasındaki ortalama #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "Akış hızı dengelemesi maksimum ekstrüzyon kayması" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "Dengelenecek, mm cinsinden maksimum mesafe." #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "Akış hızı dengeleme çarpanı" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "Akış hızından -> mesafeye dönüştürme için çarpan." #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4831,9 +4827,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" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index 8857f5b7b0..f4bf6159d5 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-11-21 16:58+0100\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" @@ -93,7 +93,7 @@ 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" @@ -143,7 +143,7 @@ msgstr "无法启动新作业,因为打印机处于忙碌状态或未连接。 #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 msgctxt "@info:title" msgid "Printer Unavailable" -msgstr "" +msgstr "打印机不可用" #: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 msgctxt "@info:status" @@ -595,7 +595,7 @@ msgstr "通过网络连接" #, python-brace-format msgctxt "@info Don't translate {machine_name}, since it gets replaced by a printer name!" msgid "New features are available for your {machine_name}! It is recommended to update the firmware on your printer." -msgstr "" +msgstr "您的 {machine_name} 有新功能可用! 建议您更新打印机上的固件。" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 #, python-format @@ -606,7 +606,7 @@ msgstr "新 %s 固件可用" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 msgctxt "@action:button" msgid "How to update" -msgstr "" +msgstr "如何更新" #: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 msgctxt "@info" @@ -641,7 +641,7 @@ msgstr "启动 %s 时发生错误!" #: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 msgctxt "@item:inlistbox" msgid "Simulation view" -msgstr "" +msgstr "仿真视图" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 msgctxt "@info:status" @@ -651,7 +651,7 @@ msgstr "当单线打印(Wire Printing)功能开启时,Cura 将无法准确 #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 msgctxt "@info:title" msgid "Simulation View" -msgstr "" +msgstr "仿真视图" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 msgid "Modify G-Code" @@ -732,7 +732,7 @@ msgstr "无法使用当前设置进行切片。以下设置存在错误:{0}" #, python-brace-format msgctxt "@info:status" msgid "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}" -msgstr "" +msgstr "因部分特定模型设置而无法切片。 以下设置在一个或多个模型上存在错误: {error_labels}" #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 msgctxt "@info:status" @@ -767,25 +767,25 @@ msgstr "设置对每个模型的单独设定" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 msgid "Install" -msgstr "" +msgstr "安装" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It is not set to a directory." -msgstr "" +msgstr "复制 Siemens NX 插件文件失败。 请检查您的 UGII_USER_DIR。 未将其设置到目录中。" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 msgid "Successfully installed Siemens NX Cura plugin." -msgstr "" +msgstr "已成功安装 Siemens NX Cura 插件。" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 msgid "Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." -msgstr "" +msgstr "复制 Siemens NX 插件文件失败。 请检查您的 UGII_USER_DIR。" #: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 msgid "Failed to install Siemens NX plugin. Could not set environment variable UGII_USER_DIR for Siemens NX." -msgstr "" +msgstr "安装 Siemens NX 插件失败。 无法为 Siemens NX 设置环境变量 UGII_USER_DIR。" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 @@ -948,7 +948,7 @@ msgstr "其它" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 msgctxt "@label unknown material" msgid "Unknown" -msgstr "" +msgstr "未知" #: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 #, python-brace-format @@ -1013,12 +1013,12 @@ msgstr "自定义材料" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 msgctxt "@menuitem" msgid "Global" -msgstr "" +msgstr "全局" #: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 msgctxt "@menuitem" msgid "Not overridden" -msgstr "" +msgstr "未覆盖" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 msgctxt "@info:status" @@ -1029,7 +1029,7 @@ msgstr "所选材料与所选机器或配置不兼容。" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:title" msgid "Incompatible Material" -msgstr "" +msgstr "不兼容材料" #: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 msgctxt "@info:status Has a cancel button next to it." @@ -1067,7 +1067,7 @@ msgstr "配置文件已导出至: {0} " #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 msgctxt "@info:title" msgid "Export succeeded" -msgstr "" +msgstr "导出成功" #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 #: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 @@ -1139,85 +1139,85 @@ msgid "" "

    A fatal exception has occurred. Please send us this Crash Report to fix the problem

    \n" "

    Please use the \"Send report\" button to post a bug report automatically to our servers

    \n" " " -msgstr "" +msgstr "

    发生了致命错误。 请将这份错误报告发送给我们以便修复问题

    \n

    请使用“发送报告”按钮将错误报告自动发布到我们的服务器

    \n " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 msgctxt "@title:groupbox" msgid "System information" -msgstr "" +msgstr "系统信息" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 msgctxt "@label unknown version of Cura" msgid "Unknown" -msgstr "" +msgstr "未知" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 #, python-brace-format msgctxt "@label Cura version" msgid "Cura version: {version}
    " -msgstr "" +msgstr "Cura 版本: {version}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 #, python-brace-format msgctxt "@label Platform" msgid "Platform: {platform}
    " -msgstr "" +msgstr "平台: {platform}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 #, python-brace-format msgctxt "@label Qt version" msgid "Qt version: {qt}
    " -msgstr "" +msgstr "Qt 版本: {qt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 #, python-brace-format msgctxt "@label PyQt version" msgid "PyQt version: {pyqt}
    " -msgstr "" +msgstr "PyQt 版本: {pyqt}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 #, python-brace-format msgctxt "@label OpenGL" msgid "OpenGL: {opengl}
    " -msgstr "" +msgstr "OpenGL: {opengl}
    " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 #, python-brace-format msgctxt "@label OpenGL version" msgid "
  • OpenGL Version: {version}
  • " -msgstr "" +msgstr "
  • OpenGL 版本: {version}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 #, python-brace-format msgctxt "@label OpenGL vendor" msgid "
  • OpenGL Vendor: {vendor}
  • " -msgstr "" +msgstr "
  • OpenGL 供应商: {vendor}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 #, python-brace-format msgctxt "@label OpenGL renderer" msgid "
  • OpenGL Renderer: {renderer}
  • " -msgstr "" +msgstr "
  • OpenGL 渲染器: {renderer}
  • " #: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 msgctxt "@title:groupbox" msgid "Exception traceback" -msgstr "" +msgstr "异常追溯" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 msgctxt "@title:groupbox" msgid "Logs" -msgstr "" +msgstr "日志" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 msgctxt "@title:groupbox" msgid "User description" -msgstr "" +msgstr "用户说明" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 msgctxt "@action:button" msgid "Send report" -msgstr "" +msgstr "发送报告" #: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 msgctxt "@info:progress" @@ -1255,7 +1255,7 @@ msgstr "如果加载 G-code,则无法打开其他任何文件。{0} 已跳过 #: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 msgctxt "@info:status" msgid "The selected model was too small to load." -msgstr "" +msgstr "所选模型过小,无法加载。" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 msgctxt "@title" @@ -1516,10 +1516,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/resources/qml/Preferences/MachinesPage.qml:44 @@ -1633,7 +1630,7 @@ msgstr "%1 未设置为运行一组连接的 Ultimaker 3 打印机" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/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/UM3NetworkPrinting/OpenPanelButton.qml:15 #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 @@ -1668,7 +1665,7 @@ msgstr "与打印机的连接中断" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 msgctxt "@label:status" msgid "Disabled" -msgstr "" +msgstr "已禁用" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 msgctxt "@label:status" @@ -1683,12 +1680,12 @@ msgstr "已完成" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 msgctxt "@label:status" msgid "Paused" -msgstr "" +msgstr "已暂停" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 msgctxt "@label:status" msgid "Resuming" -msgstr "" +msgstr "恢复" #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 msgctxt "@label:status" @@ -1830,12 +1827,12 @@ msgstr "走线类型" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 msgctxt "@label:listbox" msgid "Feedrate" -msgstr "" +msgstr "进给速度" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 msgctxt "@label:listbox" msgid "Layer thickness" -msgstr "" +msgstr "层厚度" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 msgctxt "@label" @@ -1885,12 +1882,12 @@ msgstr "内壁" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 msgctxt "@label" msgid "min" -msgstr "" +msgstr "最小" #: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 msgctxt "@label" msgid "max" -msgstr "" +msgstr "最大" #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 msgctxt "@title:window" @@ -2126,7 +2123,7 @@ msgstr "%1 / %2" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 msgctxt "@action:warning" msgid "Loading a project will clear all models on the build plate." -msgstr "" +msgstr "加载项目将清除打印平台上的所有模型。" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 msgctxt "@action:button" @@ -2169,7 +2166,7 @@ msgid "" "This 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" @@ -2184,7 +2181,7 @@ msgstr "拒绝" #: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 msgctxt "@title:window" msgid "User Agreement" -msgstr "" +msgstr "用户协议" #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 #: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 @@ -2434,9 +2431,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" @@ -3067,7 +3062,7 @@ msgstr "关于 Cura" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 msgctxt "@label" msgid "version: %1" -msgstr "" +msgstr "版本: %1" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 msgctxt "@label" @@ -3079,9 +3074,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" @@ -3166,7 +3159,7 @@ msgstr "多边形剪辑库" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 msgctxt "@Label" msgid "Python HTTP library" -msgstr "" +msgstr "Python HTTP 库" #: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 msgctxt "@label" @@ -3186,7 +3179,7 @@ msgstr "配置文件:" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 msgctxt "@" msgid "No Profile Available" -msgstr "" +msgstr "没有配置文件可用" #: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 msgctxt "@tooltip" @@ -3194,10 +3187,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:152 msgctxt "@label:textbox" @@ -3235,10 +3225,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." @@ -3266,10 +3253,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" @@ -3277,10 +3261,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:120 msgctxt "@label:listbox" @@ -3292,51 +3273,49 @@ 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:336 msgctxt "@label Hours and minutes" msgid "00h 00min" -msgstr "" +msgstr "00 小时 00 分" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 msgctxt "@tooltip" msgid "Time specification
    " -msgstr "" +msgstr "时间规范
    " #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 msgctxt "@label" msgid "Cost specification" -msgstr "" +msgstr "成本规定" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 msgctxt "@label m for meter" msgid "%1m" -msgstr "" +msgstr "%1m" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 msgctxt "@label g for grams" msgid "%1g" -msgstr "" +msgstr "%1g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 msgctxt "@label" msgid "Total:" -msgstr "" +msgstr "总计:" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 msgctxt "@label Print estimates: m for meters, g for grams, %4 is currency and %3 is print cost" msgid "%1m / ~ %2g / ~ %4 %3" -msgstr "" +msgstr "%1m / ~ %2g / ~ %4 %3" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 msgctxt "@label Print estimates: m for meters, g for grams" msgid "%1m / ~ %2g" -msgstr "" +msgstr "%1m / ~ %2g" #: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 msgctxt "@tooltip" @@ -3459,27 +3438,27 @@ msgstr "打印前请预热热床。您可以在热床加热时继续调整相关 #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 msgctxt "@label" msgid "Printer control" -msgstr "" +msgstr "打印机控制" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 msgctxt "@label" msgid "Jog Position" -msgstr "" +msgstr "垛齐位置" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 msgctxt "@label" msgid "X/Y" -msgstr "" +msgstr "X/Y" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 msgctxt "@label" msgid "Z" -msgstr "" +msgstr "Z" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 msgctxt "@label" msgid "Jog Distance" -msgstr "" +msgstr "垛齐距离" #: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 msgctxt "@label" @@ -3524,7 +3503,7 @@ msgstr "退出(&Q)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 msgctxt "@action:inmenu menubar:view" msgid "&Reset camera position" -msgstr "" +msgstr "重置摄像头位置(&R)" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 msgctxt "@action:inmenu" @@ -3763,7 +3742,7 @@ msgstr "导入所有模型" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 msgctxt "@title:window" msgid "Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 msgctxt "@title:menu menubar:toplevel" @@ -3920,7 +3899,7 @@ msgstr "层高" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 msgctxt "@tooltip" msgid "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab" -msgstr "" +msgstr "自定义配置文件目前处于活动状态。 如要启用质量滑块,请在“自定义”选项卡中选择一个默认质量配置文件" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 msgctxt "@label" @@ -3940,7 +3919,7 @@ msgstr "更快" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 msgctxt "@tooltip" msgid "You have modified some profile settings. If you want to change these go to custom mode." -msgstr "" +msgstr "您已修改部分配置文件设置。 如果您想对其进行更改,请转至自定义模式。" #: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 msgctxt "@label" @@ -4031,7 +4010,7 @@ msgstr "材料" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 msgctxt "@label" msgid "Check compatibility" -msgstr "" +msgstr "检查兼容性" #: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 msgctxt "@tooltip" @@ -4171,12 +4150,12 @@ msgstr "SolidWorks 集成" #: SimulationView/plugin.json msgctxt "description" msgid "Provides the Simulation view." -msgstr "" +msgstr "提供仿真视图" #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "" +msgstr "仿真视图" #: PostProcessingPlugin/plugin.json msgctxt "description" @@ -4261,12 +4240,12 @@ msgstr "版本自 2.7 升级到 3.0" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." -msgstr "" +msgstr "将配置从 Cura 3.0 版本升级至 3.1 版本。" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" -msgstr "" +msgstr "版本自 3.0 升级到 3.1" #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" @@ -4331,12 +4310,12 @@ msgstr "单一模型设置工具" #: cura-siemensnx-plugin/plugin.json msgctxt "description" msgid "Helps you to install an 'export to Cura' button in Siemens NX." -msgstr "" +msgstr "帮助您在 Siemens NX 中安装一个“导出至 Cura”按钮。" #: cura-siemensnx-plugin/plugin.json msgctxt "name" msgid "Siemens NX Integration" -msgstr "" +msgstr "Siemens NX 集成" #: 3MFReader/plugin.json msgctxt "description" @@ -4401,12 +4380,12 @@ msgstr "3MF 写入器" #: UserAgreementPlugin/plugin.json msgctxt "description" msgid "Ask the user once if he/she agrees with our license" -msgstr "" +msgstr "询问用户一次是否同意我们的许可" #: UserAgreementPlugin/plugin.json msgctxt "name" msgid "UserAgreement" -msgstr "" +msgstr "用户协议" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -4448,13 +4427,13 @@ msgstr "Cura 配置文件读取器" #~ 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 "为确保您的 {machine_name} 具备最新功能,建议定期更新固件。 更新可在 {machine_name} 上(连接至网络时)或通过 USB 进行。" -#~ msgctxt "@item:inlistbox" -#~ msgid "Layer view" -#~ msgstr "分层视图" +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "分层视图" -#~ msgctxt "@info:title" -#~ msgid "Layer View" -#~ msgstr "分层视图" +msgctxt "@info:title" +msgid "Layer View" +msgstr "分层视图" #~ msgctxt "@menuitem" #~ msgid "Browse plugins" @@ -4555,9 +4534,9 @@ msgstr "Cura 配置文件读取器" #~ msgid "Provides the Layer view." #~ msgstr "提供分层视图。" -#~ msgctxt "name" -#~ msgid "Layer View" -#~ msgstr "分层视图" +msgctxt "name" +msgid "Layer View" +msgstr "分层视图" #~ msgctxt "@item:inlistbox" #~ msgid "X-Ray" @@ -4878,9 +4857,9 @@ msgstr "Cura 配置文件读取器" #~ msgid "Provides support for importing profiles from g-code files." #~ msgstr "提供了从 GCode 文件中导入配置文件的支持。" -#~ msgctxt "@label" -#~ msgid "Layer View" -#~ msgstr "分层视图" +msgctxt "@label" +msgid "Layer View" +msgstr "分层视图" #~ msgctxt "@info:whatsthis" #~ msgid "Provides the Layer view." diff --git a/resources/i18n/zh_CN/fdmextruder.def.json.po b/resources/i18n/zh_CN/fdmextruder.def.json.po index e6e4c21306..15166711f2 100644 --- a/resources/i18n/zh_CN/fdmextruder.def.json.po +++ b/resources/i18n/zh_CN/fdmextruder.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-08-28 11:00+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" "Language: zh_CN\n" diff --git a/resources/i18n/zh_CN/fdmprinter.def.json.po b/resources/i18n/zh_CN/fdmprinter.def.json.po index 3d191eec96..76bb1c09e7 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -2,13 +2,13 @@ # Copyright (C) 2017 Ultimaker # This file is distributed under the same license as the Cura package. # Ruben Dulek , 2017. -# +# msgid "" msgstr "" "Project-Id-Version: Cura 3.0\n" "Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n" "POT-Creation-Date: 2017-11-21 16:58+0000\n" -"PO-Revision-Date: 2017-09-27 12:27+0200\n" +"PO-Revision-Date: 2017-11-30 13:05+0100\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" @@ -614,27 +610,27 @@ msgstr "起始层高(以毫米为单位)。起始层越厚,与打印平台 #: fdmprinter.def.json msgctxt "slicing_tolerance label" msgid "Slicing Tolerance" -msgstr "" +msgstr "切片公差" #: fdmprinter.def.json msgctxt "slicing_tolerance description" msgid "How to slice layers with diagonal surfaces. The areas of a layer can be generated based on where the middle of the layer intersects the surface (Middle). Alternatively each layer can have the areas which fall inside of the volume throughout the height of the layer (Exclusive) or a layer has the areas which fall inside anywhere within the layer (Inclusive). Exclusive retains the most details, Inclusive makes for the best fit and Middle takes the least time to process." -msgstr "" +msgstr "如何对带有对角线表面的层进行切片。层面积可以根据层的中心与表面(中间)相交的位置生成。或者每一层的面积可以为落在整个层高度中成形体积内的面积 (Exclusive),或者为落在层中任何位置的面积 (Inclusive)。Exclusive 保留大部分细节,Inclusive 可实现最佳匹配,而 Middle 需要的处理的时间最少。" #: fdmprinter.def.json msgctxt "slicing_tolerance option middle" msgid "Middle" -msgstr "" +msgstr "Middle" #: fdmprinter.def.json msgctxt "slicing_tolerance option exclusive" msgid "Exclusive" -msgstr "" +msgstr "Exclusive" #: fdmprinter.def.json msgctxt "slicing_tolerance option inclusive" msgid "Inclusive" -msgstr "" +msgstr "Inclusive" #: fdmprinter.def.json msgctxt "line_width label" @@ -809,7 +805,7 @@ msgstr "用于打印外壁的挤出机组。 用于多重挤出。" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr label" msgid "Inner Wall Extruder" -msgstr "" +msgstr "内壁挤出机" #: fdmprinter.def.json msgctxt "wall_x_extruder_nr description" @@ -1389,7 +1385,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, tri-hexagon, cubic, octet, quarter cubic, cross 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" @@ -1409,7 +1405,7 @@ msgstr "三角形" #: fdmprinter.def.json msgctxt "infill_pattern option trihexagon" msgid "Tri-Hexagon" -msgstr "" +msgstr "内六角" #: fdmprinter.def.json msgctxt "infill_pattern option cubic" @@ -1464,7 +1460,7 @@ msgstr "连接填充走线" #: fdmprinter.def.json msgctxt "zig_zaggify_infill description" msgid "Connect the ends where the infill pattern meets the inner wall using a line which follows the shape of the inner wall. Enabling this setting can make the infill adhere to the walls better and reduce the effects of 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" @@ -1479,22 +1475,22 @@ msgstr "要使用的整数走线方向列表。 列表中的元素随层的进 #: fdmprinter.def.json msgctxt "infill_offset_x label" msgid "Infill X Offset" -msgstr "" +msgstr "填充 X 轴偏移量" #: fdmprinter.def.json msgctxt "infill_offset_x description" msgid "The infill pattern is offset this distance along the X axis." -msgstr "" +msgstr "填充图案沿 X 轴偏移此距离。" #: fdmprinter.def.json msgctxt "infill_offset_y label" msgid "Infill Y Offset" -msgstr "" +msgstr "填充 Y 轴偏移量" #: fdmprinter.def.json msgctxt "infill_offset_y description" msgid "The infill pattern is offset this distance along the Y axis." -msgstr "" +msgstr "填充图案沿 Y 轴偏移此距离。" #: fdmprinter.def.json msgctxt "sub_div_rad_add label" @@ -1809,22 +1805,22 @@ msgstr "调整所用耗材的直径。 将此值与所用耗材的直径匹配 #: fdmprinter.def.json msgctxt "material_adhesion_tendency label" msgid "Adhesion Tendency" -msgstr "" +msgstr "附着倾向" #: fdmprinter.def.json msgctxt "material_adhesion_tendency description" msgid "Surface adhesion tendency." -msgstr "" +msgstr "表面附着倾向。" #: fdmprinter.def.json msgctxt "material_surface_energy label" msgid "Surface Energy" -msgstr "" +msgstr "表面能" #: fdmprinter.def.json msgctxt "material_surface_energy description" msgid "Surface energy." -msgstr "" +msgstr "表面能。" #: fdmprinter.def.json msgctxt "material_flow label" @@ -3556,7 +3552,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 "" +msgstr "skirt 和打印第一层之间的水平距离。\n这是最小距离。多个 skirt 走线将从此距离向外延伸。" #: fdmprinter.def.json msgctxt "skirt_brim_minimal_length label" @@ -3616,7 +3612,7 @@ msgstr "Raft 平滑度" #: fdmprinter.def.json msgctxt "raft_smoothing description" msgid "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." -msgstr "" +msgstr "该设置控制 Raft 轮廓中的内角呈圆形的程度。内向角被设置为半圆形,半径等于此处的值。此设置还会移除 raft 轮廓中小于此半圆形的孔。" #: fdmprinter.def.json msgctxt "raft_airgap label" @@ -4091,12 +4087,12 @@ msgstr "一般情况下,Cura 会尝试缝合网格中的小孔,并移除有 #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution label" msgid "Maximum Resolution" -msgstr "" +msgstr "最大分辨率" #: fdmprinter.def.json msgctxt "meshfix_maximum_resolution description" msgid "The minimum size of a line segment after slicing. If you increase this, the mesh will have a lower resolution. This may allow the printer to keep up with the speed it has to process g-code and will increase slice speed by removing details of the mesh that it can't process anyway." -msgstr "" +msgstr "走线部分在切片后的最小尺寸。如果提高此值,网格的分辨率将降低。这可让打印机保持处理 g-code 所需的速度,并将通过移除无法处理的网格细节提高切片速度。" #: fdmprinter.def.json msgctxt "multiple_mesh_overlap label" @@ -4131,12 +4127,12 @@ msgstr "切换为与每个层相交的网格相交体积,以便重叠的网格 #: fdmprinter.def.json msgctxt "remove_empty_first_layers label" msgid "Remove Empty First Layers" -msgstr "" +msgstr "移除空白第一层" #: fdmprinter.def.json msgctxt "remove_empty_first_layers description" msgid "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle." -msgstr "" +msgstr "移除第一个打印层下方的空白层(如果存在)。如果“切片公差”设置被设为“独占”或“中间”,禁用此设置可能导致空白第一层。" #: fdmprinter.def.json msgctxt "blackmagic label" @@ -4666,22 +4662,22 @@ msgstr "在每个走线部分引入的随机点之间的平均距离。 注意 #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset label" msgid "Flow rate compensation max extrusion offset" -msgstr "" +msgstr "流量补偿最大挤出偏移值" #: fdmprinter.def.json msgctxt "flow_rate_max_extrusion_offset description" msgid "The maximum distance in mm to compensate." -msgstr "" +msgstr "以毫米为单位的最大补偿距离。" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor label" msgid "Flow rate compensation factor" -msgstr "" +msgstr "流量补偿因子" #: fdmprinter.def.json msgctxt "flow_rate_extrusion_offset_factor description" msgid "The multiplication factor for the flow rate -> distance translation." -msgstr "" +msgstr "流量的倍增因子-> 距离转换。" #: fdmprinter.def.json msgctxt "wireframe_enabled label" @@ -4833,9 +4829,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" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po new file mode 100644 index 0000000000..2b000890f5 --- /dev/null +++ b/resources/i18n/zh_TW/cura.po @@ -0,0 +1,4901 @@ +# Cura +# Copyright (C) 2017 Ultimaker +# This file is distributed under the same license as the Cura package. +# Ruben Dulek , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Cura 3.1\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" +"POT-Creation-Date: 2017-08-02 16:53+0000\n" +"PO-Revision-Date: 2017-11-28 23:48+0800\n" +"Last-Translator: Zhang Heh Ji \n" +"Language-Team: TEAM\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 2.0.4\n" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:29 +msgctxt "@action" +msgid "Machine Settings" +msgstr "印表機設定" + +#: /home/ruben/Projects/Cura/plugins/XRayView/__init__.py:12 +msgctxt "@item:inlistbox" +msgid "X-Ray view" +msgstr "透視檢視" + +#: /home/ruben/Projects/Cura/plugins/X3DReader/__init__.py:13 +msgctxt "@item:inlistbox" +msgid "X3D File" +msgstr "X3D 檔案" + +#: /home/ruben/Projects/Cura/plugins/GCodeWriter/__init__.py:16 +msgctxt "@item:inlistbox" +msgid "GCode File" +msgstr "GCode 檔案" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:65 +msgctxt "@action:button" +msgid "Print with Doodle3D WiFi-Box" +msgstr "使用 Doodle3D 無線網路盒列印" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:66 +msgctxt "@properties:tooltip" +msgid "Print with Doodle3D WiFi-Box" +msgstr "使用 Doodle3D 無線網路盒列印" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:86 +msgctxt "@info:status" +msgid "Connecting to Doodle3D Connect" +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 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:874 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:646 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:370 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:78 +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:104 +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:99 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:188 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:376 +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:139 +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:253 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:154 +msgctxt "@info:status" +msgid "Sending data to Doodle3D Connect" +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 "無法向 Doodle3D Connect 發送資料。請確認是否有另一項列印作業正在進行?" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:175 +msgctxt "@info:status" +msgid "Storing data on Doodle3D Connect" +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 "檔案已被傳送到 Doodle3D Connect" + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 +msgctxt "@action:button" +msgid "Open Connect..." +msgstr "開啟連線..." + +#: /home/ruben/Projects/Cura/plugins/Doodle3D-cura-plugin/Doodle3D/D3DCloudPrintOutputDevicePlugin.py:214 +msgctxt "@info:tooltip" +msgid "Open the Doodle3D Connect web interface" +msgstr "開啟 Doodle3D Connect 的網路介面" + +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:34 +msgctxt "@item:inmenu" +msgid "Show Changelog" +msgstr "顯示更新日誌" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:20 +msgctxt "@item:inmenu" +msgid "Flatten active settings" +msgstr "合併有效設定" + +#: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:32 +msgctxt "@info:status" +msgid "Profile has been flattened & activated." +msgstr "列印參數已被合併並啟用。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:26 +msgctxt "@item:inmenu" +msgid "USB printing" +msgstr "USB 連線列印" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:27 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print via USB" +msgstr "透過 USB 連線列印" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:28 +msgctxt "@info:tooltip" +msgid "Print via USB" +msgstr "透過 USB 連線列印" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:30 +msgctxt "@info:status" +msgid "Connected via USB" +msgstr "透過 USB 連接" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 +msgctxt "@info:status" +msgid "Unable to start a new job because the printer is busy or not connected." +msgstr "無法啟動新作業,因為印表機處於忙碌狀態或未連接。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:154 +msgctxt "@info:title" +msgid "Printer Unavailable" +msgstr "印表機無法使用" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 +msgctxt "@info:status" +msgid "" +"This printer does not support USB printing because it uses UltiGCode flavor." +msgstr "" +"此印表機不支援透過 USB 連線列印,因為其使用 UltiGCode 類型的 G-code 檔案。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:457 +msgctxt "@info:title" +msgid "USB Printing" +msgstr "USB 連線列印" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:461 +msgctxt "@info:status" +msgid "" +"Unable to start a new job because the printer does not support usb printing." +msgstr "無法啟動新作業,因為該印表機不支援 USB 連線列印。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:461 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:945 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1349 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1417 +msgctxt "@info:title" +msgid "Warning" +msgstr "警告" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:108 +msgctxt "@info" +msgid "Unable to update firmware because there are no printers connected." +msgstr "無法更新韌體,因為沒有連接印表機。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 +#, python-format +msgctxt "@info" +msgid "Could not find firmware required for the printer at %s." +msgstr "在 %s 無法找到印表機所需的韌體。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDeviceManager.py:122 +msgctxt "@info:title" +msgid "Printer Firmware" +msgstr "印表機韌體" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:23 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Save to Removable Drive" +msgstr "儲存至行動裝置" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:24 +#, python-brace-format +msgctxt "@item:inlistbox" +msgid "Save to Removable Drive {0}" +msgstr "儲存到行動裝置 {0}" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 +#, python-brace-format +msgctxt "@info:progress Don't translate the XML tags !" +msgid "Saving to Removable Drive {0}" +msgstr "正在儲存到行動裝置 {0}" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:89 +msgctxt "@info:title" +msgid "Saving" +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 "無法儲存到 {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 "嘗試寫入到 {device} 時無法找到檔名。" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:131 +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:146 +#, python-brace-format +msgctxt "@info:status" +msgid "Could not save to removable drive {0}: {1}" +msgstr "無法儲存到行動裝置 {0}:{1}" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:132 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:692 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:700 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:146 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:153 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1358 +msgctxt "@info:title" +msgid "Error" +msgstr "錯誤" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 +#, python-brace-format +msgctxt "@info:status" +msgid "Saved to Removable Drive {0} as {1}" +msgstr "儲存到行動裝置 {0}:{1}" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:140 +msgctxt "@info:title" +msgid "File Saved" +msgstr "檔案已儲存" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 +msgctxt "@action:button" +msgid "Eject" +msgstr "卸載" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:141 +#, python-brace-format +msgctxt "@action" +msgid "Eject removable device {0}" +msgstr "卸載行動裝置 {0}" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 +#, python-brace-format +msgctxt "@info:status" +msgid "Ejected {0}. You can now safely remove the drive." +msgstr "已卸載 {0}。現在你可以安全地移除行動裝置。" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:156 +msgctxt "@info:title" +msgid "Safely Remove Hardware" +msgstr "安全移除硬體" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:158 +#, python-brace-format +msgctxt "@info:status" +msgid "Failed to eject {0}. Another program may be using the drive." +msgstr "無法卸載 {0},可能有其它程式正在使用行動裝置。" + +#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/WindowsRemovableDrivePlugin.py:68 +msgctxt "@item:intext" +msgid "Removable Drive" +msgstr "行動裝置" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:109 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:53 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "網路連線列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:110 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "網路連線列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 +msgctxt "@info:status" +msgid "" +"Access to the printer requested. Please approve the request on the printer" +msgstr "已發送印表機存取請求,請在印表機上批准該請求" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:159 +msgctxt "@info:title" +msgid "Connection status" +msgstr "連線狀態" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:160 +msgctxt "@info:status" +msgid "" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:160 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:163 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:164 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:479 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:502 +msgctxt "@info:title" +msgid "Connection Status" +msgstr "連線狀態" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:161 +msgctxt "@action:button" +msgid "Retry" +msgstr "重試" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:161 +msgctxt "@info:tooltip" +msgid "Re-send the access request" +msgstr "重新發送存取請求" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:163 +msgctxt "@info:status" +msgid "Access to the printer accepted" +msgstr "印表機接受了存取請求" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:164 +msgctxt "@info:status" +msgid "No access to print with this printer. Unable to send print job." +msgstr "無法使用本印表機進行列印,無法發送列印作業。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:165 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72 +msgctxt "@action:button" +msgid "Request Access" +msgstr "請求存取" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:165 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71 +msgctxt "@info:tooltip" +msgid "Send access request to the printer" +msgstr "向印表機發送存取請求" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:385 +msgctxt "@info:status" +msgid "" +"Connected over the network. Please approve the access request on the printer." +msgstr "已透過網路連接。請在印表機上接受存取請求。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:392 +msgctxt "@info:status" +msgid "Connected over the network." +msgstr "已透過網路連接。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:405 +msgctxt "@info:status" +msgid "Connected over the network. No access to control the printer." +msgstr "已透過網路連接,但沒有印表機的控制權限。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:410 +msgctxt "@info:status" +msgid "Access request was denied on the printer." +msgstr "存取請求被印表機上拒絕。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:413 +msgctxt "@info:status" +msgid "Access request failed due to a timeout." +msgstr "存取請求超時失敗。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:478 +msgctxt "@info:status" +msgid "The connection with the network was lost." +msgstr "網路連接中斷。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:501 +msgctxt "@info:status" +msgid "" +"The connection with the printer was lost. Check your printer to see if it is " +"connected." +msgstr "與印表機的連接中斷,請檢查印表機是否已連接。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:666 +#, python-format +msgctxt "@info:status" +msgid "" +"Unable to start a new print job, printer is busy. Current printer status is " +"%s." +msgstr "印表機無法啟動新的列印作業,目前的印表機狀態為 %s。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:667 +msgctxt "@info:title" +msgid "Printer Status" +msgstr "印表機狀態" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:691 +#, python-brace-format +msgctxt "@info:status" +msgid "Unable to start a new print job. No Printcore loaded in slot {0}" +msgstr "無法啟動新的列印作業。插槽 {0} 中未載入列印頭。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:699 +#, python-brace-format +msgctxt "@info:status" +msgid "Unable to start a new print job. No material loaded in slot {0}" +msgstr "無法啟動新的列印作業。插槽 {0} 中未載入耗材。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:709 +#, python-brace-format +msgctxt "@label" +msgid "Not enough material for spool {0}." +msgstr "線軸 {0} 上沒有足夠的耗材。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:719 +#, python-brace-format +msgctxt "@label" +msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}" +msgstr "不同的列印頭(Cura:{0},印表機: 為擠出機 {2} 選擇了 {1})" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:733 +#, python-brace-format +msgctxt "@label" +msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +msgstr "你為擠出機 {2} 選擇了不同的耗材(Cura:{0},印表機:{1})" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:741 +#, python-brace-format +msgctxt "@label" +msgid "" +"PrintCore {0} is not properly calibrated. XY calibration needs to be " +"performed on the printer." +msgstr "列印頭 {0} 未正確校準。需要在印表機上執行 XY 校正。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:746 +msgctxt "@label" +msgid "Are you sure you wish to print with the selected configuration?" +msgstr "你確定要使用所選設定進行列印嗎?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:747 +msgctxt "@label" +msgid "" +"There is a mismatch between the configuration or calibration of the printer " +"and Cura. For the best result, always slice for the PrintCores and materials " +"that are inserted in your printer." +msgstr "" +"印表機的設定或校正與 Cura 之間不匹配。為了獲得最佳列印效果,請使用印表機的列" +"印頭和耗材設定進行切片。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:753 +msgctxt "@window:title" +msgid "Mismatched configuration" +msgstr "設定不匹配" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:864 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:262 +msgctxt "@info:status" +msgid "" +"Sending new jobs (temporarily) blocked, still sending the previous print job." +msgstr "前一列印作業傳送中,暫停傳送新列印作業。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:873 +msgctxt "@info:status" +msgid "Sending data to printer" +msgstr "正在向印表機發送資料" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:873 +msgctxt "@info:title" +msgid "Sending Data" +msgstr "發送資料中" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:944 +msgctxt "@info:status" +msgid "Unable to send data to printer. Is another job still active?" +msgstr "無法向印表機發送資料。請確認是否有另一項列印作業正在進行?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1085 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:196 +msgctxt "@label:MonitorStatus" +msgid "Aborting print..." +msgstr "中斷列印..." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1091 +msgctxt "@label:MonitorStatus" +msgid "Print aborted. Please check the printer" +msgstr "列印已中斷。請檢查印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1097 +msgctxt "@label:MonitorStatus" +msgid "Pausing print..." +msgstr "暫停列印..." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1099 +msgctxt "@label:MonitorStatus" +msgid "Resuming print..." +msgstr "繼續列印..." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1289 +msgctxt "@window:title" +msgid "Sync with your printer" +msgstr "與你的印表機同步" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1291 +msgctxt "@label" +msgid "Would you like to use your current printer configuration in Cura?" +msgstr "你想在 Cura 中使用目前的印表機設定嗎?" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:1293 +msgctxt "@label" +msgid "" +"The PrintCores and/or materials on your printer differ from those within " +"your current project. For the best result, always slice for the PrintCores " +"and materials that are inserted in your printer." +msgstr "" +"印表機上的列印頭和/或耗材與目前專案中的不同。為獲得最佳列印效果,請使用目前印" +"表機的列印頭和耗材設定進行切片。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:112 +msgid "" +"This printer is not set up to host a group of connected Ultimaker 3 printers." +msgstr "這台印表機未設定成管理一組連線的 Ultimaker 3 印表機的主機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:113 +#, 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 "這台印表機是 {count} 台連線的 Ultimaker 3 印表機群組的主機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:114 +#, python-brace-format +msgid "" +"{printer_name} has finished printing '{job_name}'. Please collect the print " +"and confirm clearing the build plate." +msgstr "" +"{printer_name} 已完成列印 '{job_name}'。請收起列印件並確認清空列印平台。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:115 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:520 +#, 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 "" +"{printer_name} 已為了列印 '{job_name}' 保留。請更改印表機設定配合此列印作業," +"以便開始列印。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:278 +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 "" +"無法傳送新的列印作業:這台印表機尚未設定成管理一組連線的 Ultimaker 3 印表機的" +"主機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:410 +#, python-brace-format +msgctxt "@info:status" +msgid "Unable to send print job to group {cluster_name}." +msgstr "無法傳送列印作業到群組 {cluster_name}。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:418 +#, python-brace-format +msgctxt "@info:status" +msgid "Sent {file_name} to group {cluster_name}." +msgstr "{file_name} 已傳送到群組 {cluster_name}。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:423 +msgctxt "@action:button" +msgid "Show print jobs" +msgstr "顯示列印作業" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:424 +msgctxt "@info:tooltip" +msgid "Opens the print jobs interface in your browser." +msgstr "使用瀏覽器開啟列印作業介面。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:489 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:239 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:47 +msgctxt "@label" +msgid "Unknown" +msgstr "未知" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:492 +#, python-brace-format +msgctxt "@info:status" +msgid "Printer '{printer_name}' has finished printing '{job_name}'." +msgstr "印表機 '{printer_name}' 已完成列印 '{job_name}'。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:494 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:497 +msgctxt "@info:status" +msgid "Print finished" +msgstr "列印已完成" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:522 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:525 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:282 +msgctxt "@label:status" +msgid "Action required" +msgstr "需要採取的動作" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkClusterPrinterOutputDevice.py:643 +#, python-brace-format +msgctxt "@info:progress" +msgid "Sending {file_name} to group {cluster_name}" +msgstr "傳送 {file_name} 到群組 {cluster_name} 中" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19 +msgctxt "@action" +msgid "Connect via Network" +msgstr "透過網路連接" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:64 +#, python-brace-format +msgctxt "" +"@info Don't translate {machine_name}, since it gets replaced by a printer " +"name!" +msgid "" +"New features are available for your {machine_name}! It is recommended to " +"update the firmware on your printer." +msgstr "你的 {machine_name} 有新功能可用!建議更新印表機韌體。" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:65 +#, python-format +msgctxt "@info:title The %s gets replaced with the printer name." +msgid "New %s firmware available" +msgstr "有新 %s 韌體可用" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:66 +msgctxt "@action:button" +msgid "How to update" +msgstr "如何更新" + +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:77 +msgctxt "@info" +msgid "Could not access update information." +msgstr "無法存取更新資訊。" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/SolidWorksReader.py:199 +msgctxt "@info:status" +msgid "" +"Errors appeared while opening your SolidWorks file! Please " +"check, whether it is possible to open your file in SolidWorks itself without " +"any problems as well!" +msgstr "" +"開啟 SolidWorks 檔案時發生錯誤! 請檢查能否在 SolidWorks 中正常開" +"啟檔案而不出現任何問題!" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/__init__.py:31 +msgctxt "@item:inlistbox" +msgid "SolidWorks part file" +msgstr "SolidWorks 零件檔案" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/__init__.py:35 +msgctxt "@item:inlistbox" +msgid "SolidWorks assembly file" +msgstr "SolidWorks 組件檔案" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.py:21 +msgid "Configure" +msgstr "設定" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/CommonComReader.py:135 +#, python-format +msgctxt "@info:status" +msgid "Error while starting %s!" +msgstr "啟動 %s 時發生錯誤!" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14 +msgctxt "@item:inlistbox" +msgid "Simulation view" +msgstr "模擬檢視" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:100 +msgctxt "@info:status" +msgid "Cura does not accurately display layers when Wire Printing is enabled" +msgstr "" +"當鐵絲網列印(Wire Printing)功能開啟時,Cura 將無法準確地顯示列印層" +"(Layers)" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:101 +msgctxt "@info:title" +msgid "Simulation View" +msgstr "模擬檢視" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:26 +msgid "Modify G-Code" +msgstr "修改 G-Code 檔案" + +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:43 +msgctxt "@info" +msgid "" +"Cura collects anonymised slicing statistics. You can disable this in the " +"preferences." +msgstr "Cura 收集匿名切片統計資料。你可以在偏好設定中關閉此選項。" + +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:46 +msgctxt "@info:title" +msgid "Collecting Data" +msgstr "收集資料中" + +#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48 +msgctxt "@action:button" +msgid "Dismiss" +msgstr "關閉此通知" + +#: /home/ruben/Projects/Cura/plugins/LegacyProfileReader/__init__.py:14 +msgctxt "@item:inlistbox" +msgid "Cura 15.04 profiles" +msgstr "Cura 15.04 列印參數" + +#: /home/ruben/Projects/Cura/plugins/GCodeProfileReader/__init__.py:14 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:14 +msgctxt "@item:inlistbox" +msgid "G-code File" +msgstr "G-code 檔案" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14 +msgctxt "@item:inlistbox" +msgid "JPG Image" +msgstr "JPG 圖片" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:18 +msgctxt "@item:inlistbox" +msgid "JPEG Image" +msgstr "JPEG 圖片" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:22 +msgctxt "@item:inlistbox" +msgid "PNG Image" +msgstr "PNG 圖片" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:26 +msgctxt "@item:inlistbox" +msgid "BMP Image" +msgstr "BMP 圖片" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:30 +msgctxt "@item:inlistbox" +msgid "GIF Image" +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 "無法使用目前耗材切片,因為它與所選機器或設定不相容。" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:269 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:297 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:319 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:327 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:336 +msgctxt "@info:title" +msgid "Unable to slice" +msgstr "無法切片" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:296 +#, python-brace-format +msgctxt "@info:status" +msgid "" +"Unable to slice with the current settings. The following settings have " +"errors: {0}" +msgstr "無法使用目前設定進行切片。以下設定存在錯誤:{0}" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:318 +#, python-brace-format +msgctxt "@info:status" +msgid "" +"Unable to slice due to some per-model settings. The following settings have " +"errors on one or more models: {error_labels}" +msgstr "" +"因部份模型設定問題無法進行切片。部份模型的下列設定有錯誤:{error_labels}" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:326 +msgctxt "@info:status" +msgid "" +"Unable to slice because the prime tower or prime position(s) are invalid." +msgstr "無法切片(原因:換料塔或主位置無效)。" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:335 +msgctxt "@info:status" +msgid "" +"Nothing to slice because none of the models fit the build volume. Please " +"scale or rotate models to fit." +msgstr "" +"沒有模型可進行切片,因為模型超出了列印範圍。請縮放或旋轉模型, 讓模型可置入列" +"印範圍。" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:50 +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:239 +msgctxt "@info:status" +msgid "Processing Layers" +msgstr "正在處理層" + +#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py:239 +msgctxt "@info:title" +msgid "Information" +msgstr "資訊" + +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:14 +msgctxt "@label" +msgid "Per Model Settings" +msgstr "單一模型設定" + +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/__init__.py:15 +msgctxt "@info:tooltip" +msgid "Configure Per Model Settings" +msgstr "設定對每個模型的單獨設定" + +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:23 +msgid "Install" +msgstr "安裝" + +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:43 +msgid "" +"Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR. It " +"is not set to a directory." +msgstr "" +"無法複製 Siemens NX 外掛檔案。請檢查你的 UGII_USER_DIR,它沒有設置到正確的目" +"錄。" + +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:50 +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:59 +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:81 +msgid "Successfully installed Siemens NX Cura plugin." +msgstr "Siemens NX Cura 外掛已成功安裝。" + +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:65 +msgid "" +"Failed to copy Siemens NX plugins files. Please check your UGII_USER_DIR." +msgstr "無法複製 Siemens NX 外掛檔案。請檢查你的 UGII_USER_DIR。" + +#: /home/ruben/Projects/Cura/plugins/cura-siemensnx-plugin/Installer.py:85 +msgid "" +"Failed to install Siemens NX plugin. Could not set environment variable " +"UGII_USER_DIR for Siemens NX." +msgstr "" +"無法安裝 Siemens NX 外掛。無法為 Siemens NX 設定環境變數 UGII_USER_DIR。" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:167 +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:585 +msgctxt "@title:tab" +msgid "Recommended" +msgstr "推薦" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.py:169 +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:590 +msgctxt "@title:tab" +msgid "Custom" +msgstr "自訂選項" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:30 +#: /home/ruben/Projects/Cura/plugins/3MFReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "3MF File" +msgstr "3MF 檔案" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:126 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1142 +msgctxt "@label" +msgid "Nozzle" +msgstr "噴頭" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:164 +#, python-brace-format +msgctxt "@info:status" +msgid "Failed to get plugin ID from {0}" +msgstr "無法從 {0} 取得外掛 ID" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:165 +msgctxt "@info:tile" +msgid "Warning" +msgstr "警告" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.py:203 +msgctxt "@window:title" +msgid "Plugin browser" +msgstr "外掛瀏覽器" + +#: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12 +msgctxt "@item:inmenu" +msgid "Solid view" +msgstr "實體檢視" + +#: /home/ruben/Projects/Cura/plugins/GCodeReader/__init__.py:18 +msgctxt "@item:inlistbox" +msgid "G File" +msgstr "G 檔案" + +#: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:314 +msgctxt "@info:status" +msgid "Parsing G-code" +msgstr "正在解析 G-code" + +#: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:316 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:426 +msgctxt "@info:title" +msgid "G-code Details" +msgstr "G-code 細項設定" + +#: /home/ruben/Projects/Cura/plugins/GCodeReader/GCodeReader.py:424 +msgctxt "@info:generic" +msgid "" +"Make sure the g-code is suitable for your printer and printer configuration " +"before sending the file to it. The g-code representation may not be accurate." +msgstr "" +"發送檔案之前,請確保 G-code 適用於目前印表機和印表機設定。目前 G-code 檔案可" +"能不準確。" + +#: /home/ruben/Projects/Cura/plugins/CuraProfileWriter/__init__.py:14 +#: /home/ruben/Projects/Cura/plugins/CuraProfileReader/__init__.py:14 +msgctxt "@item:inlistbox" +msgid "Cura Profile" +msgstr "Cura 列印參數" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:30 +msgctxt "@item:inlistbox" +msgid "3MF file" +msgstr "3MF 檔案" + +#: /home/ruben/Projects/Cura/plugins/3MFWriter/__init__.py:38 +msgctxt "@item:inlistbox" +msgid "Cura Project 3MF file" +msgstr "Cura 專案 3MF 檔案" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:20 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18 +msgctxt "@action" +msgid "Select upgrades" +msgstr "選擇升級" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py:12 +msgctxt "@action" +msgid "Upgrade Firmware" +msgstr "升級韌體" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.py:14 +msgctxt "@action" +msgid "Checkup" +msgstr "檢查" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.py:15 +msgctxt "@action" +msgid "Level build plate" +msgstr "調平列印平台" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:89 +msgctxt "@tooltip" +msgid "Outer Wall" +msgstr "外壁" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:90 +msgctxt "@tooltip" +msgid "Inner Walls" +msgstr "內壁" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:91 +msgctxt "@tooltip" +msgid "Skin" +msgstr "表層" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:92 +msgctxt "@tooltip" +msgid "Infill" +msgstr "填充" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:93 +msgctxt "@tooltip" +msgid "Support Infill" +msgstr "支撐填充" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:94 +msgctxt "@tooltip" +msgid "Support Interface" +msgstr "支撐介面" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:95 +msgctxt "@tooltip" +msgid "Support" +msgstr "支撐" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:96 +msgctxt "@tooltip" +msgid "Skirt" +msgstr "外圍" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:97 +msgctxt "@tooltip" +msgid "Travel" +msgstr "移動" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:98 +msgctxt "@tooltip" +msgid "Retractions" +msgstr "回抽" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:99 +msgctxt "@tooltip" +msgid "Other" +msgstr "其它" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:199 +msgctxt "@label unknown material" +msgid "Unknown" +msgstr "未知" + +#: /home/ruben/Projects/Cura/cura/PrintInformation.py:284 +#, python-brace-format +msgctxt "@label" +msgid "Pre-sliced file {0}" +msgstr "預切片檔案 {0}" + +#: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:469 +msgctxt "@item:material" +msgid "No material loaded" +msgstr "未載入耗材" + +#: /home/ruben/Projects/Cura/cura/PrinterOutputDevice.py:476 +msgctxt "@item:material" +msgid "Unknown material" +msgstr "未知耗材" + +#: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:30 +msgctxt "@info:status" +msgid "Finding new location for objects" +msgstr "正在為物件尋找新位置" + +#: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:34 +msgctxt "@info:title" +msgid "Finding Location" +msgstr "尋找位置中" + +#: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:89 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 +msgctxt "@info:status" +msgid "Unable to find a location within the build volume for all objects" +msgstr "無法在列印範圍內放下全部物件" + +#: /home/ruben/Projects/Cura/cura/ArrangeObjectsJob.py:90 +msgctxt "@info:title" +msgid "Can't Find Location" +msgstr "無法找到位置" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:431 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:113 +msgctxt "@title:window" +msgid "File Already Exists" +msgstr "檔案已經存在" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:432 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:114 +#, 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 "檔案 {0} 已存在。你確定要覆蓋掉它嗎?" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:815 +msgctxt "@label" +msgid "Custom" +msgstr "自訂" + +#: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:819 +msgctxt "@label" +msgid "Custom Material" +msgstr "自訂耗材" + +#: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:182 +msgctxt "@menuitem" +msgid "Global" +msgstr "整體" + +#: /home/ruben/Projects/Cura/cura/Settings/ExtrudersModel.py:229 +msgctxt "@menuitem" +msgid "Not overridden" +msgstr "不覆寫" + +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:117 +msgctxt "@info:status" +msgid "" +"The selected material is incompatible with the selected machine or " +"configuration." +msgstr "所選耗材與所選機器或設定不相容。" + +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:118 +#: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 +msgctxt "@info:title" +msgid "Incompatible Material" +msgstr "不相容的耗材" + +#: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:24 +msgctxt "@info:status Has a cancel button next to it." +msgid "" +"The selected material diameter causes the material to become incompatible " +"with the current printer." +msgstr "所選耗材直徑導致耗材與目前印表機不相容。" + +#: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:25 +msgctxt "@action:button" +msgid "Undo" +msgstr "復原" + +#: /home/ruben/Projects/Cura/cura/Settings/MaterialManager.py:25 +msgctxt "@action" +msgid "Undo changing the material diameter." +msgstr "復原更改耗材直徑。" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "" +"Failed to export profile to {0}: {1}" +msgstr "無法將列印參數匯出至 {0}{1}" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:151 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tag !" +msgid "" +"Failed to export profile to {0}: Writer plugin reported " +"failure." +msgstr "無法將列印參數匯出至 {0}:寫入器外掛報告故障。" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:156 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tag !" +msgid "Exported profile to {0}" +msgstr "列印參數已匯出至:{0}" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:157 +msgctxt "@info:title" +msgid "Export succeeded" +msgstr "匯出成功" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:183 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:205 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:214 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:248 +#, python-brace-format +msgctxt "@info:status Don't translate the XML tags or !" +msgid "" +"Failed to import profile from {0}: {1}" +msgstr "無法從 {0} 匯入列印參數:{1}" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:216 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:252 +#, python-brace-format +msgctxt "@info:status" +msgid "Successfully imported profile {0}" +msgstr "已成功匯入列印參數 {0}" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:255 +#, python-brace-format +msgctxt "@info:status" +msgid "Profile {0} has an unknown file type or is corrupted." +msgstr "列印參數 {0} 檔案類型未知或已損壞。" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:274 +msgctxt "@label" +msgid "Custom profile" +msgstr "自訂列印參數" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:285 +msgctxt "@info:status" +msgid "Profile is missing a quality type." +msgstr "列印參數缺少列印品質類型定義。" + +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:321 +#, python-brace-format +msgctxt "@info:status" +msgid "Could not find a quality type {0} for the current configuration." +msgstr "無法為目前設定找到品質類型 {0}。" + +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:100 +msgctxt "@info:status" +msgid "" +"The build volume height has been reduced due to the value of the \"Print " +"Sequence\" setting to prevent the gantry from colliding with printed models." +msgstr "" +"由於「列印序列」設定的值,成形列印範圍高度已被減少,以防止龍門與列印模型相衝" +"突。" + +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:102 +msgctxt "@info:title" +msgid "Build Volume" +msgstr "列印範圍" + +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:34 +msgctxt "@info:status" +msgid "Multiplying and placing objects" +msgstr "正在複製並放置模型" + +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:35 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:83 +msgctxt "@info:title" +msgid "Placing Object" +msgstr "擺放物件中" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:80 +msgctxt "@title:window" +msgid "Crash Report" +msgstr "錯誤報告" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:93 +msgctxt "@label crash message" +msgid "" +"

    A fatal exception has occurred. Please send us this Crash Report to " +"fix the problem

    \n" +"

    Please use the \"Send report\" button to post a bug report " +"automatically to our servers

    \n" +" " +msgstr "" +"

    程式發生了致命異常。請將錯誤報告傳送給我們以解決這個問題

    \n" +"

    請使用「送出報告」按鈕將錯誤報告自動發送到我們的伺服器

    \n" +" " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:101 +msgctxt "@title:groupbox" +msgid "System information" +msgstr "系統資訊" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:109 +msgctxt "@label unknown version of Cura" +msgid "Unknown" +msgstr "未知" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:111 +#, python-brace-format +msgctxt "@label Cura version" +msgid "Cura version: {version}
    " +msgstr "Cura 版本: {version}
    " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:112 +#, python-brace-format +msgctxt "@label Platform" +msgid "Platform: {platform}
    " +msgstr "平台: {platform}
    " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:113 +#, python-brace-format +msgctxt "@label Qt version" +msgid "Qt version: {qt}
    " +msgstr "Qt 版本: {qt}
    " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:114 +#, python-brace-format +msgctxt "@label PyQt version" +msgid "PyQt version: {pyqt}
    " +msgstr "PyQt 版本: {pyqt}
    " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:115 +#, python-brace-format +msgctxt "@label OpenGL" +msgid "OpenGL: {opengl}
    " +msgstr "OpenGL: {opengl}
    " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:130 +#, python-brace-format +msgctxt "@label OpenGL version" +msgid "
  • OpenGL Version: {version}
  • " +msgstr "
  • OpenGL 版本:{version}
  • " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:131 +#, python-brace-format +msgctxt "@label OpenGL vendor" +msgid "
  • OpenGL Vendor: {vendor}
  • " +msgstr "
  • OpenGL 供應商:{vendor}
  • " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:132 +#, python-brace-format +msgctxt "@label OpenGL renderer" +msgid "
  • OpenGL Renderer: {renderer}
  • " +msgstr "
  • OpenGL 渲染器:{renderer}
  • " + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:141 +msgctxt "@title:groupbox" +msgid "Exception traceback" +msgstr "異常追溯" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:208 +msgctxt "@title:groupbox" +msgid "Logs" +msgstr "日誌" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:231 +msgctxt "@title:groupbox" +msgid "User description" +msgstr "使用者描述" + +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:246 +msgctxt "@action:button" +msgid "Send report" +msgstr "送出報告" + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:256 +msgctxt "@info:progress" +msgid "Loading machines..." +msgstr "正在載入印表機..." + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:661 +msgctxt "@info:progress" +msgid "Setting up scene..." +msgstr "正在設定場景..." + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:703 +msgctxt "@info:progress" +msgid "Loading interface..." +msgstr "正在載入介面…" + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:874 +#, python-format +msgctxt "" +"@info 'width', 'depth' and 'height' are variable names that must NOT be " +"translated; just translate the format of ##x##x## mm." +msgid "%(width).1f x %(depth).1f x %(height).1f mm" +msgstr "%(width).1f x %(depth).1f x %(height).1f mm" + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1348 +#, python-brace-format +msgctxt "@info:status" +msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" +msgstr "一次只能載入一個 G-code 檔案。{0} 已跳過匯入" + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1357 +#, python-brace-format +msgctxt "@info:status" +msgid "Can't open any other file if G-code is loading. Skipped importing {0}" +msgstr "如果載入 G-code,則無法開啟其他任何檔案。{0} 已跳過匯入" + +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1416 +msgctxt "@info:status" +msgid "The selected model was too small to load." +msgstr "選擇的模型太小無法載入。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:59 +msgctxt "@title" +msgid "Machine Settings" +msgstr "印表機設定" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:78 +msgctxt "@title:tab" +msgid "Printer" +msgstr "印表機" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:97 +msgctxt "@label" +msgid "Printer Settings" +msgstr "印表機設定" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:108 +msgctxt "@label" +msgid "X (Width)" +msgstr "X (寬度)" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:109 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:129 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:235 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:288 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:300 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:391 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:401 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:413 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:840 +msgctxt "@label" +msgid "mm" +msgstr "mm" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:118 +msgctxt "@label" +msgid "Y (Depth)" +msgstr "Y (深度)" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:128 +msgctxt "@label" +msgid "Z (Height)" +msgstr "Z (高度)" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:140 +msgctxt "@label" +msgid "Build plate shape" +msgstr "列印平台形狀" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:149 +msgctxt "@option:check" +msgid "Origin at center" +msgstr "原點位於中心" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:157 +msgctxt "@option:check" +msgid "Heated bed" +msgstr "熱床" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:168 +msgctxt "@label" +msgid "Gcode flavor" +msgstr "GCode 類型" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:181 +msgctxt "@label" +msgid "Printhead Settings" +msgstr "列印頭設定" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:191 +msgctxt "@label" +msgid "X min" +msgstr "X 最小值" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:192 +msgctxt "@tooltip" +msgid "" +"Distance from the left of the printhead to the center of the nozzle. Used to " +"prevent colissions between previous prints and the printhead when printing " +"\"One at a Time\"." +msgstr "" +"列印頭左側至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰" +"撞。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:201 +msgctxt "@label" +msgid "Y min" +msgstr "Y 最小值" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:202 +msgctxt "@tooltip" +msgid "" +"Distance from the front of the printhead to the center of the nozzle. Used " +"to prevent colissions between previous prints and the printhead when " +"printing \"One at a Time\"." +msgstr "" +"列印頭前端至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰" +"撞。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:211 +msgctxt "@label" +msgid "X max" +msgstr "X 最大值" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:212 +msgctxt "@tooltip" +msgid "" +"Distance from the right of the printhead to the center of the nozzle. Used " +"to prevent colissions between previous prints and the printhead when " +"printing \"One at a Time\"." +msgstr "" +"列印頭右側至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰" +"撞。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:221 +msgctxt "@label" +msgid "Y max" +msgstr "Y 最大值" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:222 +msgctxt "@tooltip" +msgid "" +"Distance from the rear of the printhead to the center of the nozzle. Used to " +"prevent colissions between previous prints and the printhead when printing " +"\"One at a Time\"." +msgstr "" +"列印頭後部至噴頭中心的距離。用於防止「排隊列印」時之前的列印品與列印頭發生碰" +"撞。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:234 +msgctxt "@label" +msgid "Gantry height" +msgstr "龍門高度" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:236 +msgctxt "@tooltip" +msgid "" +"The height difference between the tip of the nozzle and the gantry system (X " +"and Y axes). Used to prevent collisions between previous prints and the " +"gantry when printing \"One at a Time\"." +msgstr "" +"噴頭尖端與龍門系統(X 軸和 Y 軸)之間的高度差。用於防止「排隊列印」時之前的列" +"印品與龍門發生碰撞。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:255 +msgctxt "@label" +msgid "Number of Extruders" +msgstr "擠出機數目" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:289 +msgctxt "@tooltip" +msgid "" +"The nominal diameter of filament supported by the printer. The exact " +"diameter will be overridden by the material and/or the profile." +msgstr "印表機所支援的耗材直徑。實際列印的耗材直徑由耗材和/或列印參數提供。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:291 +msgctxt "@label" +msgid "Material diameter" +msgstr "耗材直徑" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:299 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:390 +msgctxt "@label" +msgid "Nozzle size" +msgstr "噴頭孔徑" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:317 +msgctxt "@label" +msgid "Start Gcode" +msgstr "起始 Gcode" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:327 +msgctxt "@tooltip" +msgid "Gcode commands to be executed at the very start." +msgstr "將在開始時執行的 Gcode 命令。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:336 +msgctxt "@label" +msgid "End Gcode" +msgstr "結束 Gcode" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:346 +msgctxt "@tooltip" +msgid "Gcode commands to be executed at the very end." +msgstr "將在結束時執行的 Gcode 命令。" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:378 +msgctxt "@label" +msgid "Nozzle Settings" +msgstr "噴頭設定" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:400 +msgctxt "@label" +msgid "Nozzle offset X" +msgstr "噴頭偏移 X" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:412 +msgctxt "@label" +msgid "Nozzle offset Y" +msgstr "噴頭偏移 Y" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:433 +msgctxt "@label" +msgid "Extruder Start Gcode" +msgstr "擠出機起始 Gcode" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:451 +msgctxt "@label" +msgid "Extruder End Gcode" +msgstr "擠出機結束 Gcode" + +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:18 +msgctxt "@label" +msgid "Changelog" +msgstr "更新日誌" + +#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.qml:37 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:107 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:55 +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:445 +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:357 +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:123 +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:147 +#: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:38 +msgctxt "@action:button" +msgid "Close" +msgstr "關閉" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:22 +msgctxt "@title:window" +msgid "Firmware Update" +msgstr "韌體更新" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:42 +msgctxt "@label" +msgid "Firmware update completed." +msgstr "韌體更新已完成。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:47 +msgctxt "@label" +msgid "Starting firmware update, this may take a while." +msgstr "正在開始韌體更新。可能需要花費一些時間,請耐心等待。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:52 +msgctxt "@label" +msgid "Updating firmware." +msgstr "更新韌體中..." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:61 +msgctxt "@label" +msgid "Firmware update failed due to an unknown error." +msgstr "由於未知錯誤,韌體更新失敗。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:64 +msgctxt "@label" +msgid "Firmware update failed due to an communication error." +msgstr "由於通訊錯誤,導致韌體更新失敗。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:67 +msgctxt "@label" +msgid "Firmware update failed due to an input/output error." +msgstr "由於輸入/輸出錯誤,導致韌體更新失敗。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:70 +msgctxt "@label" +msgid "Firmware update failed due to missing firmware." +msgstr "由於韌體遺失,導致韌體更新失敗。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:73 +msgctxt "@label" +msgid "Unknown error code: %1" +msgstr "未知錯誤代碼: %1" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:55 +msgctxt "@title:window" +msgid "Connect to Networked Printer" +msgstr "連接到網路印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:65 +msgctxt "@label" +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" +"從以下列表中選擇你的印表機:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:75 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:44 +msgctxt "@action:button" +msgid "Add" +msgstr "增加" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:85 +msgctxt "@action:button" +msgid "Edit" +msgstr "編輯" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:96 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:50 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:95 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:190 +msgctxt "@action:button" +msgid "Remove" +msgstr "移除" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:104 +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:35 +msgctxt "@action:button" +msgid "Refresh" +msgstr "刷新" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:194 +msgctxt "@label" +msgid "" +"If your printer is not listed, read the network printing " +"troubleshooting guide" +msgstr "如果你的印表機未被列出,請閱讀網路列印故障排除指南" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:221 +msgctxt "@label" +msgid "Type" +msgstr "類型" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:233 +msgctxt "@label" +msgid "Ultimaker 3" +msgstr "Ultimaker 3" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:236 +msgctxt "@label" +msgid "Ultimaker 3 Extended" +msgstr "Ultimaker 3 Extended" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:252 +msgctxt "@label" +msgid "Firmware version" +msgstr "韌體版本" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:264 +msgctxt "@label" +msgid "Address" +msgstr "位址" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:286 +msgctxt "@label" +msgid "This printer is not set up to host a group of Ultimaker 3 printers." +msgstr "這台印表機未設定成管理一組 Ultimaker 3 印表機的主機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:290 +msgctxt "@label" +msgid "This printer is the host for a group of %1 Ultimaker 3 printers." +msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:300 +msgctxt "@label" +msgid "The printer at this address has not yet responded." +msgstr "該網路位址的印表機尚無回應。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:305 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38 +msgctxt "@action:button" +msgid "Connect" +msgstr "連接" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319 +msgctxt "@title:window" +msgid "Printer Address" +msgstr "印表機網路位址" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:349 +msgctxt "@alabel" +msgid "Enter the IP address or hostname of your printer on the network." +msgstr "輸入印表機在網路上的 IP 位址或主機名。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:379 +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:92 +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:88 +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 +msgctxt "@action:button" +msgid "OK" +msgstr "確定" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:24 +msgctxt "@title:window" +msgid "Print over network" +msgstr "網路連線列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrintWindow.qml:92 +msgctxt "@action:button" +msgid "Print" +msgstr "列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml:36 +msgctxt "@label: arg 1 is group name" +msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" +msgstr "%1 未設定成管理一組連線的 Ultimaker 3 印表機的主機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:14 +msgctxt "@info:tooltip" +msgid "Opens the print jobs page with your default web browser." +msgstr "使用預設瀏覽器開啟列印作業頁面。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/OpenPanelButton.qml:15 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:131 +msgctxt "@action:button" +msgid "View print jobs" +msgstr "檢視列印作業" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:37 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:278 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:408 +msgctxt "@label" +msgid "Preparing to print" +msgstr "準備列印中" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:39 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:271 +msgctxt "@label:status" +msgid "Printing" +msgstr "正在列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:41 +msgctxt "@label:status" +msgid "Available" +msgstr "可用" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:43 +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:101 +msgctxt "@label:MonitorStatus" +msgid "Lost connection with the printer" +msgstr "與印表機的連接中斷" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:257 +msgctxt "@label:status" +msgid "Disabled" +msgstr "已關閉" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:273 +msgctxt "@label:status" +msgid "Reserved" +msgstr "保留" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:275 +msgctxt "@label:status" +msgid "Finished" +msgstr "已完成" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:290 +msgctxt "@label:status" +msgid "Paused" +msgstr "已暫停" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:292 +msgctxt "@label:status" +msgid "Resuming" +msgstr "繼續" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:294 +msgctxt "@label:status" +msgid "Print aborted" +msgstr "列印已取消" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:410 +msgctxt "@label" +msgid "Not accepting print jobs" +msgstr "不接受列印作業" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:403 +msgctxt "@label" +msgid "Finishes at: " +msgstr "完成時間:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:405 +msgctxt "@label" +msgid "Clear build plate" +msgstr "清空列印平台" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/PrinterInfoBlock.qml:414 +msgctxt "@label" +msgid "Waiting for configuration change" +msgstr "等待設定更動" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:64 +msgctxt "@title" +msgid "Print jobs" +msgstr "列印作業" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:94 +msgctxt "@label" +msgid "Printing" +msgstr "已排入佇列" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:112 +msgctxt "@label" +msgid "Queued" +msgstr "已排入佇列" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:171 +msgctxt "@label:title" +msgid "Printers" +msgstr "印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/ClusterControlItem.qml:225 +msgctxt "@action:button" +msgid "View printers" +msgstr "檢視印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37 +msgctxt "@info:tooltip" +msgid "Connect to a printer" +msgstr "連接到印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116 +msgctxt "@info:tooltip" +msgid "Load the configuration of the printer into Cura" +msgstr "將印表機設定載入 Cura" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117 +msgctxt "@action:button" +msgid "Activate Configuration" +msgstr "啟用設定" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:20 +msgctxt "@title:window" +msgid "Cura SolidWorks Plugin Configuration" +msgstr "Cura SolidWorks 外掛設定" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:44 +msgctxt "@action:label" +msgid "Default quality of the exported STL:" +msgstr "預設的匯出 STL 品質:" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:79 +msgctxt "@option:curaSolidworksStlQuality" +msgid "Always ask" +msgstr "總是詢問" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:80 +msgctxt "@option:curaSolidworksStlQuality" +msgid "Always use Fine quality" +msgstr "總是使用精細品質" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ConfigDialog.qml:81 +msgctxt "@option:curaSolidworksStlQuality" +msgid "Always use Coarse quality" +msgstr "總是使用粗糙品質" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:20 +msgctxt "@title:window" +msgid "Import SolidWorks File as STL..." +msgstr "匯入 SolidWorks 檔案為 STL..." + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:43 +msgctxt "@info:tooltip" +msgid "Quality of the Exported STL" +msgstr "匯出 STL 的品質" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:48 +msgctxt "@action:label" +msgid "Quality" +msgstr "品質" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:62 +msgctxt "@option:curaSolidworksStlQuality" +msgid "Coarse" +msgstr "粗糙" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:63 +msgctxt "@option:curaSolidworksStlQuality" +msgid "Fine" +msgstr "精細" + +#: /home/ruben/Projects/Cura/plugins/CuraSolidWorksPlugin/ExportSTLUI.qml:78 +#: /home/ruben/Projects/Cura/resources/qml/AskOpenAsProjectOrModelsDialog.qml:82 +msgctxt "@text:window" +msgid "Remember my choice" +msgstr "記住我的選擇" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:81 +msgctxt "@label" +msgid "Color scheme" +msgstr "顏色方案" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:96 +msgctxt "@label:listbox" +msgid "Material Color" +msgstr "耗材顏色" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:100 +msgctxt "@label:listbox" +msgid "Line Type" +msgstr "線條類型" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:104 +msgctxt "@label:listbox" +msgid "Feedrate" +msgstr "進給率" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:108 +msgctxt "@label:listbox" +msgid "Layer thickness" +msgstr "層厚" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:148 +msgctxt "@label" +msgid "Compatibility Mode" +msgstr "相容模式" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:230 +msgctxt "@label" +msgid "Show Travels" +msgstr "顯示移動軌跡" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:236 +msgctxt "@label" +msgid "Show Helpers" +msgstr "顯示輔助結構" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:242 +msgctxt "@label" +msgid "Show Shell" +msgstr "顯示外殼" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:248 +msgctxt "@label" +msgid "Show Infill" +msgstr "顯示填充" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:297 +msgctxt "@label" +msgid "Only Show Top Layers" +msgstr "只顯示頂層" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:306 +msgctxt "@label" +msgid "Show 5 Detailed Layers On Top" +msgstr "顯示頂端 5 層列印細節" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:317 +msgctxt "@label" +msgid "Top / Bottom" +msgstr "頂 / 底層" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:321 +msgctxt "@label" +msgid "Inner Wall" +msgstr "內壁" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:378 +msgctxt "@label" +msgid "min" +msgstr "最小值" + +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.qml:420 +msgctxt "@label" +msgid "max" +msgstr "最大值" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18 +msgctxt "@title:window" +msgid "Post Processing Plugin" +msgstr "後處理外掛" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49 +msgctxt "@label" +msgid "Post Processing Scripts" +msgstr "後處理腳本" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:217 +msgctxt "@action" +msgid "Add a script" +msgstr "添加一個腳本" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:263 +msgctxt "@label" +msgid "Settings" +msgstr "設定" + +#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:455 +msgctxt "@info:tooltip" +msgid "Change active post-processing scripts" +msgstr "更改目前啟用的後處理腳本" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 +msgctxt "@title:window" +msgid "Convert Image..." +msgstr "轉換圖片..." + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:33 +msgctxt "@info:tooltip" +msgid "The maximum distance of each pixel from \"Base.\"" +msgstr "每個像素與底板的最大距離。" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:38 +msgctxt "@action:label" +msgid "Height (mm)" +msgstr "高度 (mm)" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:56 +msgctxt "@info:tooltip" +msgid "The base height from the build plate in millimeters." +msgstr "距離列印平台的底板高度,以毫米為單位。" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:61 +msgctxt "@action:label" +msgid "Base (mm)" +msgstr "底板 (mm)" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:79 +msgctxt "@info:tooltip" +msgid "The width in millimeters on the build plate." +msgstr "列印平台寬度,以毫米為單位。" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:84 +msgctxt "@action:label" +msgid "Width (mm)" +msgstr "寬度 (mm)" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:103 +msgctxt "@info:tooltip" +msgid "The depth in millimeters on the build plate" +msgstr "列印平台深度,以毫米為單位" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:108 +msgctxt "@action:label" +msgid "Depth (mm)" +msgstr "深度 (mm)" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 +msgctxt "@info:tooltip" +msgid "" +"By default, white pixels represent high points on the mesh and black pixels " +"represent low points on the mesh. Change this option to reverse the behavior " +"such that black pixels represent high points on the mesh and white pixels " +"represent low points on the mesh." +msgstr "" +"預設情況下,白色像素表示網格上的高點,黑色像素表示網格上的低點。更改此選項將" +"以相反方式呈現,黑色像素表示網格上的高點,白色像素表示網格上的低點。" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 +msgctxt "@item:inlistbox" +msgid "Lighter is higher" +msgstr "顏色越淺高度越高" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 +msgctxt "@item:inlistbox" +msgid "Darker is higher" +msgstr "顏色越深高度越高" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:149 +msgctxt "@info:tooltip" +msgid "The amount of smoothing to apply to the image." +msgstr "影像平滑程度。" + +#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:154 +msgctxt "@action:label" +msgid "Smoothing" +msgstr "平滑" + +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:208 +msgctxt "@action:button" +msgid "Select settings" +msgstr "選擇設定" + +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:248 +msgctxt "@title:window" +msgid "Select Settings to Customize for this model" +msgstr "選擇對此模型的自訂設定" + +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:272 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:91 +msgctxt "@label:textbox" +msgid "Filter..." +msgstr "篩選…" + +#: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:296 +msgctxt "@label:checkbox" +msgid "Show all" +msgstr "顯示全部" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:14 +msgctxt "@title:window" +msgid "Open Project" +msgstr "開啟專案" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58 +msgctxt "@action:ComboBox option" +msgid "Update existing" +msgstr "更新已有設定" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59 +msgctxt "@action:ComboBox option" +msgid "Create new" +msgstr "新建" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:70 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:72 +msgctxt "@action:title" +msgid "Summary - Cura Project" +msgstr "摘要 - Cura 專案" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:92 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:90 +msgctxt "@action:label" +msgid "Printer settings" +msgstr "印表機設定" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:108 +msgctxt "@info:tooltip" +msgid "How should the conflict in the machine be resolved?" +msgstr "如何解決機器的設定衝突?" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:128 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:99 +msgctxt "@action:label" +msgid "Type" +msgstr "類型" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:144 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:201 +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:293 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:190 +msgctxt "@action:label" +msgid "Name" +msgstr "名稱" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:165 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:166 +msgctxt "@action:label" +msgid "Profile settings" +msgstr "列印參數設定" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:181 +msgctxt "@info:tooltip" +msgid "How should the conflict in the profile be resolved?" +msgstr "如何解决列印參數中的設定衝突?" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:174 +msgctxt "@action:label" +msgid "Not in profile" +msgstr "不在列印參數中" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:221 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:179 +msgctxt "@action:label" +msgid "%1 override" +msgid_plural "%1 overrides" +msgstr[0] "%1 覆寫" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:232 +msgctxt "@action:label" +msgid "Derivative from" +msgstr "衍生自" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:237 +msgctxt "@action:label" +msgid "%1, %2 override" +msgid_plural "%1, %2 overrides" +msgstr[0] "%1, %2 覆寫" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:253 +msgctxt "@action:label" +msgid "Material settings" +msgstr "耗材設定" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:269 +msgctxt "@info:tooltip" +msgid "How should the conflict in the material be resolved?" +msgstr "如何解决耗材的設定衝突?" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:209 +msgctxt "@action:label" +msgid "Setting visibility" +msgstr "參數顯示設定" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:321 +msgctxt "@action:label" +msgid "Mode" +msgstr "模式" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:337 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:218 +msgctxt "@action:label" +msgid "Visible settings:" +msgstr "可見設定:" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:342 +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:223 +msgctxt "@action:label" +msgid "%1 out of %2" +msgstr "%1 / %2" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:368 +msgctxt "@action:warning" +msgid "Loading a project will clear all models on the build plate." +msgstr "載入專案時將清除列印平台上的所有模型。" + +#: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:386 +msgctxt "@action:button" +msgid "Open" +msgstr "開啟" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:11 +msgctxt "@title:window" +msgid "Find & Update plugins" +msgstr "查找與更新外掛" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:27 +msgctxt "@label" +msgid "Here you can find a list of Third Party plugins." +msgstr "你可以在這裡找到第三方外掛列表。" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:145 +msgctxt "@action:button" +msgid "Upgrade" +msgstr "升級" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:147 +msgctxt "@action:button" +msgid "Installed" +msgstr "已安裝" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:149 +msgctxt "@action:button" +msgid "Download" +msgstr "下載" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:199 +msgctxt "@title:window" +msgid "Plugin License Agreement" +msgstr "外掛授權協議" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:220 +msgctxt "@label" +msgid "" +"This plugin contains a license.\n" +"You need to accept this license to install this plugin.\n" +"Do you agree with the terms below?" +msgstr "" +"外掛內含一份授權協議。\n" +"你必需同意此份授權協議才能安裝此外掛。\n" +"是否同意下列條款?" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:242 +msgctxt "@action:button" +msgid "Accept" +msgstr "接受" + +#: /home/ruben/Projects/Cura/plugins/PluginBrowser/PluginBrowser.qml:253 +msgctxt "@action:button" +msgid "Decline" +msgstr "拒絕" + +#: /home/ruben/Projects/Cura/plugins/UserAgreementPlugin/UserAgreement.qml:16 +msgctxt "@title:window" +msgid "User Agreement" +msgstr "使用者授權" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:25 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25 +msgctxt "@title" +msgid "Select Printer Upgrades" +msgstr "選擇印表機更新檔案" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:37 +msgctxt "@label" +msgid "Please select any upgrades made to this Ultimaker 2." +msgstr "請選擇適用於 Ultimaker 2 的更新檔案。" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:45 +msgctxt "@label" +msgid "Olsson Block" +msgstr "Olsson Block" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:27 +msgctxt "@title" +msgid "Build Plate Leveling" +msgstr "列印平台調平" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:38 +msgctxt "@label" +msgid "" +"To make sure your prints will come out great, you can now adjust your " +"buildplate. When you click 'Move to Next Position' the nozzle will move to " +"the different positions that can be adjusted." +msgstr "" +"為了確保列印品質出色,你現在可以開始調整你的列印平台。當你點擊「移動到下一個" +"位置」時,噴頭將移動到不同的可調節位置。" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:47 +msgctxt "@label" +msgid "" +"For every position; insert a piece of paper under the nozzle and adjust the " +"print build plate height. The print build plate height is right when the " +"paper is slightly gripped by the tip of the nozzle." +msgstr "" +"在噴頭停止的每一個位置下方插入一張紙,並調整平台高度。當紙張恰好被噴頭的尖端" +"輕微壓住時,表示列印平台已被校準在正確的高度。" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:62 +msgctxt "@action:button" +msgid "Start Build Plate Leveling" +msgstr "開始進行列印平台調平" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/BedLevelMachineAction.qml:74 +msgctxt "@action:button" +msgid "Move to Next Position" +msgstr "移動到下一個位置" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:27 +msgctxt "@title" +msgid "Upgrade Firmware" +msgstr "升級韌體" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:38 +msgctxt "@label" +msgid "" +"Firmware is the piece of software running directly on your 3D printer. This " +"firmware controls the step motors, regulates the temperature and ultimately " +"makes your printer work." +msgstr "" +"韌體是直接在 3D 印表機上運行的一個軟體。此韌體控制步進馬達,調節溫度讓印表機" +"正常運作。" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:48 +msgctxt "@label" +msgid "" +"The firmware shipping with new printers works, but new versions tend to have " +"more features and improvements." +msgstr "" +"新印表機出廠配備的韌體完全可以正常使用,但新版本往往具有更多的新功能和改進。" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:62 +msgctxt "@action:button" +msgid "Automatically upgrade Firmware" +msgstr "自動升級韌體" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:72 +msgctxt "@action:button" +msgid "Upload custom Firmware" +msgstr "上傳自訂韌體" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml:83 +msgctxt "@title:window" +msgid "Select custom firmware" +msgstr "選擇自訂韌體" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:37 +msgctxt "@label" +msgid "Please select any upgrades made to this Ultimaker Original" +msgstr "請選擇適用於 Ultimaker Original 的更新檔案" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:45 +msgctxt "@label" +msgid "Heated Build Plate (official kit or self-built)" +msgstr "熱床(官方版本或自製版本)" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:27 +msgctxt "@title" +msgid "Check Printer" +msgstr "檢查印表機" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:39 +msgctxt "@label" +msgid "" +"It's a good idea to do a few sanity checks on your Ultimaker. You can skip " +"this step if you know your machine is functional" +msgstr "" +"對 Ultimaker 進行幾項正確性檢查是很好的做法。如果你知道你的機器功能正常,則可" +"跳過此步驟" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:53 +msgctxt "@action:button" +msgid "Start Printer Check" +msgstr "開始印表機檢查" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:80 +msgctxt "@label" +msgid "Connection: " +msgstr "連接:" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:89 +msgctxt "@info:status" +msgid "Connected" +msgstr "已連接" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:89 +msgctxt "@info:status" +msgid "Not connected" +msgstr "未連接" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:99 +msgctxt "@label" +msgid "Min endstop X: " +msgstr "X Min 限位開關:" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:109 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:130 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:151 +msgctxt "@info:status" +msgid "Works" +msgstr "正常" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:109 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:130 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:151 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:173 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:234 +msgctxt "@info:status" +msgid "Not checked" +msgstr "未檢查" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:120 +msgctxt "@label" +msgid "Min endstop Y: " +msgstr "Y Min 限位開關:" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:141 +msgctxt "@label" +msgid "Min endstop Z: " +msgstr "Z Min 限位開關:" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:163 +msgctxt "@label" +msgid "Nozzle temperature check: " +msgstr "檢查噴頭溫度:" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:187 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:248 +msgctxt "@action:button" +msgid "Stop Heating" +msgstr "停止加熱" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:187 +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:248 +msgctxt "@action:button" +msgid "Start Heating" +msgstr "開始加熱" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:223 +msgctxt "@label" +msgid "Build plate temperature check:" +msgstr "熱床溫度檢查:" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:234 +msgctxt "@info:status" +msgid "Checked" +msgstr "已檢查" + +#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml:284 +msgctxt "@label" +msgid "Everything is in order! You're done with your CheckUp." +msgstr "一切正常!你已經完成檢查。" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:88 +msgctxt "@label:MonitorStatus" +msgid "Not connected to a printer" +msgstr "未連接至印表機" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:90 +msgctxt "@label:MonitorStatus" +msgid "Printer does not accept commands" +msgstr "印表機不接受命令" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:96 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:194 +msgctxt "@label:MonitorStatus" +msgid "In maintenance. Please check the printer" +msgstr "維護中。請檢查印表機" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:103 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:184 +msgctxt "@label:MonitorStatus" +msgid "Printing..." +msgstr "列印中..." + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:106 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:186 +msgctxt "@label:MonitorStatus" +msgid "Paused" +msgstr "已暫停" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:109 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:188 +msgctxt "@label:MonitorStatus" +msgid "Preparing..." +msgstr "準備中..." + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:111 +msgctxt "@label:MonitorStatus" +msgid "Please remove the print" +msgstr "請取出列印件" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:237 +msgctxt "@label:" +msgid "Resume" +msgstr "繼續" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:241 +msgctxt "@label:" +msgid "Pause" +msgstr "暫停" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:270 +msgctxt "@label:" +msgid "Abort Print" +msgstr "中斷列印" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:280 +msgctxt "@window:title" +msgid "Abort print" +msgstr "中斷列印" + +#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:282 +msgctxt "@label" +msgid "Are you sure you want to abort the print?" +msgstr "你確定要中斷列印嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:15 +msgctxt "@title:window" +msgid "Discard or Keep changes" +msgstr "捨棄或保留更改" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:57 +msgctxt "@text:window" +msgid "" +"You have customized some profile settings.\n" +"Would you like to keep or discard those settings?" +msgstr "" +"你已自訂部份列印參數設定。\n" +"你想保留或捨棄這些設定嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:110 +msgctxt "@title:column" +msgid "Profile settings" +msgstr "列印參數設定" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:117 +msgctxt "@title:column" +msgid "Default" +msgstr "預設" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:124 +msgctxt "@title:column" +msgid "Customized" +msgstr "自訂" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:593 +msgctxt "@option:discardOrKeep" +msgid "Always ask me this" +msgstr "總是詢問" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:158 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:594 +msgctxt "@option:discardOrKeep" +msgid "Discard and never ask again" +msgstr "捨棄更改,並不再詢問此問題" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:159 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:595 +msgctxt "@option:discardOrKeep" +msgid "Keep and never ask again" +msgstr "保留更改,並不再詢問此問題" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:196 +msgctxt "@action:button" +msgid "Discard" +msgstr "捨棄" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:209 +msgctxt "@action:button" +msgid "Keep" +msgstr "保留" + +#: /home/ruben/Projects/Cura/resources/qml/DiscardOrKeepProfileChangesDialog.qml:222 +msgctxt "@action:button" +msgid "Create New Profile" +msgstr "創建新的列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:44 +msgctxt "@title" +msgid "Information" +msgstr "資訊" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:68 +msgctxt "@label" +msgid "Display Name" +msgstr "顯示名稱" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:78 +msgctxt "@label" +msgid "Brand" +msgstr "品牌" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:92 +msgctxt "@label" +msgid "Material Type" +msgstr "耗材類型" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:105 +msgctxt "@label" +msgid "Color" +msgstr "顏色" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:139 +msgctxt "@label" +msgid "Properties" +msgstr "屬性" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:141 +msgctxt "@label" +msgid "Density" +msgstr "密度" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:156 +msgctxt "@label" +msgid "Diameter" +msgstr "直徑" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:185 +msgctxt "@label" +msgid "Filament Cost" +msgstr "耗材成本" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:201 +msgctxt "@label" +msgid "Filament weight" +msgstr "耗材重量" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:218 +msgctxt "@label" +msgid "Filament length" +msgstr "耗材長度" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:227 +msgctxt "@label" +msgid "Cost per Meter" +msgstr "每公尺成本" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:241 +msgctxt "@label" +msgid "This material is linked to %1 and shares some of its properties." +msgstr "此耗材與 %1 相關聯,並共享其部份屬性。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:248 +msgctxt "@label" +msgid "Unlink Material" +msgstr "解除聯結耗材" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:259 +msgctxt "@label" +msgid "Description" +msgstr "描述" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:272 +msgctxt "@label" +msgid "Adhesion Information" +msgstr "附著資訊" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:298 +msgctxt "@label" +msgid "Print settings" +msgstr "列印設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:14 +msgctxt "@title:tab" +msgid "Setting Visibility" +msgstr "參數顯示設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/SettingVisibilityPage.qml:44 +msgctxt "@label:textbox" +msgid "Check all" +msgstr "全選" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:40 +msgctxt "@info:status" +msgid "Calculated" +msgstr "已計算" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:53 +msgctxt "@title:column" +msgid "Setting" +msgstr "設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:60 +msgctxt "@title:column" +msgid "Profile" +msgstr "列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:67 +msgctxt "@title:column" +msgid "Current" +msgstr "目前" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfileTab.qml:75 +msgctxt "@title:column" +msgid "Unit" +msgstr "單位" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:14 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:439 +msgctxt "@title:tab" +msgid "General" +msgstr "基本" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:128 +msgctxt "@label" +msgid "Interface" +msgstr "介面" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:139 +msgctxt "@label" +msgid "Language:" +msgstr "語言:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:205 +msgctxt "@label" +msgid "Currency:" +msgstr "貨幣:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:219 +msgctxt "@label" +msgid "Theme:" +msgstr "主題:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:279 +msgctxt "@label" +msgid "" +"You will need to restart the application for these changes to have effect." +msgstr "需重新啟動 Cura,新的設定才能生效。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:296 +msgctxt "@info:tooltip" +msgid "Slice automatically when changing settings." +msgstr "當設定變更時自動進行切片。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:304 +msgctxt "@option:check" +msgid "Slice automatically" +msgstr "自動切片" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:318 +msgctxt "@label" +msgid "Viewport behavior" +msgstr "顯示區設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:326 +msgctxt "@info:tooltip" +msgid "" +"Highlight unsupported areas of the model in red. Without support these areas " +"will not print properly." +msgstr "以紅色凸顯模型缺少支撐的區域。如果沒有支撐這些區域將無法正常列印。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:335 +msgctxt "@option:check" +msgid "Display overhang" +msgstr "顯示懸垂(Overhang)" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:342 +msgctxt "@info:tooltip" +msgid "" +"Moves the camera so the model is in the center of the view when a model is " +"selected" +msgstr "當模型被選中時,視角將自動調整到最合適的觀察位置(模型處於正中央)" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:347 +msgctxt "@action:button" +msgid "Center camera when item is selected" +msgstr "當專案被選中時,自動置中視角" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 +msgctxt "@info:tooltip" +msgid "Should the default zoom behavior of cura be inverted?" +msgstr "需要讓 Cura 的預設縮放操作反轉嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 +msgctxt "@action:button" +msgid "Invert the direction of camera zoom." +msgstr "反轉視角縮放方向。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +msgctxt "@info:tooltip" +msgid "Should zooming move in the direction of the mouse?" +msgstr "是否跟隨滑鼠方向進行縮放?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:375 +msgctxt "@action:button" +msgid "Zoom toward mouse direction" +msgstr "跟隨滑鼠方向縮放" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:384 +msgctxt "@info:tooltip" +msgid "" +"Should models on the platform be moved so that they no longer intersect?" +msgstr "需要移動平台上的模型,使它們不再交錯嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:389 +msgctxt "@option:check" +msgid "Ensure models are kept apart" +msgstr "確保每個模型都保持分離" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:397 +msgctxt "@info:tooltip" +msgid "Should models on the platform be moved down to touch the build plate?" +msgstr "要將模型下降到碰觸列印平台嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 +msgctxt "@option:check" +msgid "Automatically drop models to the build plate" +msgstr "自動下降模型到列印平台" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:414 +msgctxt "@info:tooltip" +msgid "Show caution message in gcode reader." +msgstr "在 G-code 讀取器中顯示警告資訊。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:423 +msgctxt "@option:check" +msgid "Caution message in gcode reader" +msgstr "G-code 讀取器中的警告資訊" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:430 +msgctxt "@info:tooltip" +msgid "Should layer be forced into compatibility mode?" +msgstr "分層檢視要強制進入相容模式嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:435 +msgctxt "@option:check" +msgid "Force layer view compatibility mode (restart required)" +msgstr "強制分層檢視相容模式(需要重新啟動)" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:451 +msgctxt "@label" +msgid "Opening and saving files" +msgstr "開啟並儲存檔案" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:457 +msgctxt "@info:tooltip" +msgid "Should models be scaled to the build volume if they are too large?" +msgstr "當模型的尺寸過大時,是否將模型自動縮小至列印範圍嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:462 +msgctxt "@option:check" +msgid "Scale large models" +msgstr "縮小過大模型" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +msgctxt "@info:tooltip" +msgid "" +"An model may appear extremely small if its unit is for example in meters " +"rather than millimeters. Should these models be scaled up?" +msgstr "" +"部份模型採用較大的單位(例如:公尺),導致模型變得非常小,要將這些模型放大嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:476 +msgctxt "@option:check" +msgid "Scale extremely small models" +msgstr "放大過小模型" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:485 +msgctxt "@info:tooltip" +msgid "" +"Should a prefix based on the printer name be added to the print job name " +"automatically?" +msgstr "是否自動將印表機名稱作為列印作業名稱的前綴?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:490 +msgctxt "@option:check" +msgid "Add machine prefix to job name" +msgstr "將印表機名稱前綴添加到列印作業名稱中" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:499 +msgctxt "@info:tooltip" +msgid "Should a summary be shown when saving a project file?" +msgstr "儲存專案檔案時是否顯示摘要?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:503 +msgctxt "@option:check" +msgid "Show summary dialog when saving project" +msgstr "儲存專案時顯示摘要對話框" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512 +msgctxt "@info:tooltip" +msgid "Default behavior when opening a project file" +msgstr "開啟專案檔案時的預設行為" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +msgctxt "@window:text" +msgid "Default behavior when opening a project file: " +msgstr "開啟專案檔案時的預設行為:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:533 +msgctxt "@option:openProject" +msgid "Always ask" +msgstr "總是詢問" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:534 +msgctxt "@option:openProject" +msgid "Always open as a project" +msgstr "總是作為一個專案開啟" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:535 +msgctxt "@option:openProject" +msgid "Always import models" +msgstr "總是匯入模型" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:571 +msgctxt "@info:tooltip" +msgid "" +"When you have made changes to a profile and switched to a different one, a " +"dialog will be shown asking whether you want to keep your modifications or " +"not, or you can choose a default behaviour and never show that dialog again." +msgstr "" +"當你對列印參數進行更改然後切換到其他列印參數時,將顯示一個對話框詢問你是否要" +"保留修改。你也可以選擇預設不顯示該對話框。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:580 +msgctxt "@label" +msgid "Override Profile" +msgstr "覆寫列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:629 +msgctxt "@label" +msgid "Privacy" +msgstr "隱私權" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:636 +msgctxt "@info:tooltip" +msgid "Should Cura check for updates when the program is started?" +msgstr "當 Cura 啟動時,是否自動檢查更新?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641 +msgctxt "@option:check" +msgid "Check for updates on start" +msgstr "啟動時檢查更新" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:651 +msgctxt "@info:tooltip" +msgid "" +"Should anonymous data about your print be sent to Ultimaker? Note, no " +"models, IP addresses or other personally identifiable information is sent or " +"stored." +msgstr "" +"你願意將關於你的列印資料以匿名形式發送到 Ultimaker 嗎?注意:我們不會記錄或發" +"送任何模型、IP 地址或其他私人資料。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 +msgctxt "@option:check" +msgid "Send (anonymous) print information" +msgstr "(匿名)發送列印資訊" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:15 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:444 +msgctxt "@title:tab" +msgid "Printers" +msgstr "印表機" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:37 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:51 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:137 +msgctxt "@action:button" +msgid "Activate" +msgstr "啟用" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:57 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +msgctxt "@action:button" +msgid "Rename" +msgstr "重命名" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:149 +msgctxt "@label" +msgid "Printer type:" +msgstr "印表機類型:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:158 +msgctxt "@label" +msgid "Connection:" +msgstr "連接:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:52 +msgctxt "@info:status" +msgid "The printer is not connected." +msgstr "尚未連接到印表機。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:170 +msgctxt "@label" +msgid "State:" +msgstr "狀態:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:190 +msgctxt "@label:MonitorStatus" +msgid "Waiting for someone to clear the build plate" +msgstr "等待清空列印平台" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:199 +msgctxt "@label:MonitorStatus" +msgid "Waiting for a printjob" +msgstr "等待列印作業" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:15 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:448 +msgctxt "@title:tab" +msgid "Profiles" +msgstr "列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:29 +msgctxt "@label" +msgid "Protected profiles" +msgstr "受保護的列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:29 +msgctxt "@label" +msgid "Custom profiles" +msgstr "自訂列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:64 +msgctxt "@label" +msgid "Create" +msgstr "創建" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:80 +msgctxt "@label" +msgid "Duplicate" +msgstr "複製" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:113 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:201 +msgctxt "@action:button" +msgid "Import" +msgstr "匯入" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:119 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:212 +msgctxt "@action:button" +msgid "Export" +msgstr "匯出" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:126 +msgctxt "@label %1 is printer name" +msgid "Printer: %1" +msgstr "印表機:%1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:165 +msgctxt "@action:button" +msgid "Update profile with current settings/overrides" +msgstr "使用目前設定 / 覆寫值更新列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:173 +msgctxt "@action:button" +msgid "Discard current changes" +msgstr "捨棄目前更改" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:190 +msgctxt "@action:label" +msgid "" +"This profile uses the defaults specified by the printer, so it has no " +"settings/overrides in the list below." +msgstr "此列印參數使用印表機指定的預設值,因此在下面的列表中沒有此設定項。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:197 +msgctxt "@action:label" +msgid "Your current settings match the selected profile." +msgstr "你目前的設定與選定的列印參數相匹配。" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:215 +msgctxt "@title:tab" +msgid "Global Settings" +msgstr "全局設定" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:258 +msgctxt "@title:window" +msgid "Rename Profile" +msgstr "重命名列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:271 +msgctxt "@title:window" +msgid "Create Profile" +msgstr "創建列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:285 +msgctxt "@title:window" +msgid "Duplicate Profile" +msgstr "複製列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:299 +msgctxt "@window:title" +msgid "Import Profile" +msgstr "匯入列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:307 +msgctxt "@title:window" +msgid "Import Profile" +msgstr "匯入列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:335 +msgctxt "@title:window" +msgid "Export Profile" +msgstr "匯出列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:15 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:446 +msgctxt "@title:tab" +msgid "Materials" +msgstr "耗材" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:116 +msgctxt "" +"@action:label %1 is printer name, %2 is how this printer names variants, %3 " +"is variant name" +msgid "Printer: %1, %2: %3" +msgstr "印表機:%1, %2: %3" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:120 +msgctxt "@action:label %1 is printer name" +msgid "Printer: %1" +msgstr "印表機:%1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:149 +msgctxt "@action:button" +msgid "Create" +msgstr "創建" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:168 +msgctxt "@action:button" +msgid "Duplicate" +msgstr "複製" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:319 +msgctxt "@title:window" +msgid "Import Material" +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 "無法匯入耗材 %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 "成功匯入耗材 %1" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:343 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialsPage.qml:358 +msgctxt "@title:window" +msgid "Export Material" +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 "無法匯出耗材至 %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 "成功匯出耗材至:%1" + +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:18 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:793 +msgctxt "@title:window" +msgid "Add Printer" +msgstr "新增印表機" + +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:185 +msgctxt "@label" +msgid "Printer Name:" +msgstr "印表機名稱:" + +#: /home/ruben/Projects/Cura/resources/qml/AddMachineDialog.qml:208 +msgctxt "@action:button" +msgid "Add Printer" +msgstr "新增印表機" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15 +msgctxt "@title:window" +msgid "About Cura" +msgstr "關於 Cura" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:43 +msgctxt "@label" +msgid "version: %1" +msgstr "版本:%1" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:56 +msgctxt "@label" +msgid "End-to-end solution for fused filament 3D printing." +msgstr "熔絲 3D 列印技術的的端對端解決方案。" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:69 +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 使用以下開源專案:" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:118 +msgctxt "@label" +msgid "Graphical user interface" +msgstr "圖形用戶介面" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:119 +msgctxt "@label" +msgid "Application framework" +msgstr "應用框架" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:120 +msgctxt "@label" +msgid "GCode generator" +msgstr "GCode 產生器" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:121 +msgctxt "@label" +msgid "Interprocess communication library" +msgstr "進程間通訊交互使用庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:123 +msgctxt "@label" +msgid "Programming language" +msgstr "編程語言" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:124 +msgctxt "@label" +msgid "GUI framework" +msgstr "GUI 框架" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:125 +msgctxt "@label" +msgid "GUI framework bindings" +msgstr "GUI 框架綁定" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:126 +msgctxt "@label" +msgid "C/C++ Binding library" +msgstr "C / C++ 綁定庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:127 +msgctxt "@label" +msgid "Data interchange format" +msgstr "資料交換格式" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:128 +msgctxt "@label" +msgid "Support library for scientific computing" +msgstr "科學計算函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:129 +msgctxt "@label" +msgid "Support library for faster math" +msgstr "高速運算函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:130 +msgctxt "@label" +msgid "Support library for handling STL files" +msgstr "用於處理 STL 檔案的函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:131 +msgctxt "@label" +msgid "Support library for handling 3MF files" +msgstr "用於處理 3MF 檔案的函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:132 +msgctxt "@label" +msgid "Serial communication library" +msgstr "串口通訊函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:133 +msgctxt "@label" +msgid "ZeroConf discovery library" +msgstr "ZeroConf 發現函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:134 +msgctxt "@label" +msgid "Polygon clipping library" +msgstr "多邊形剪輯函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:135 +msgctxt "@Label" +msgid "Python HTTP library" +msgstr "Python HTTP 函式庫" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:137 +msgctxt "@label" +msgid "Font" +msgstr "字體" + +#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:138 +msgctxt "@label" +msgid "SVG icons" +msgstr "SVG 圖標" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:41 +msgctxt "@label" +msgid "Profile:" +msgstr "列印參數:" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:66 +msgctxt "@" +msgid "No Profile Available" +msgstr "無可用的列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:104 +msgctxt "@tooltip" +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" +"點擊開啟列印參數管理器。" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:152 +msgctxt "@label:textbox" +msgid "Search..." +msgstr "搜尋..." + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:483 +msgctxt "@action:menu" +msgid "Copy value to all extruders" +msgstr "將設定值複製到所有擠出機" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:498 +msgctxt "@action:menu" +msgid "Hide this setting" +msgstr "隱藏此設定" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:508 +msgctxt "@action:menu" +msgid "Don't show this setting" +msgstr "不再顯示此設定" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 +msgctxt "@action:menu" +msgid "Keep this setting visible" +msgstr "保持此設定可見" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:531 +msgctxt "@action:menu" +msgid "Configure setting visiblity..." +msgstr "設定設定可見性..." + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:123 +msgctxt "@label" +msgid "" +"Some hidden settings use values different from their normal calculated " +"value.\n" +"\n" +"Click to make these settings visible." +msgstr "" +"部份隱藏設定使用的值與一般計算所得的值不同。\n" +"\n" +"點擊以顯這些設定。" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:62 +msgctxt "@label Header for list of settings." +msgid "Affects" +msgstr "影響" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +msgctxt "@label Header for list of settings." +msgid "Affected By" +msgstr "影響因素" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:157 +msgctxt "@label" +msgid "" +"This setting is always shared between all extruders. Changing it here will " +"change the value for all extruders" +msgstr "這個設定由全部的擠出機共享,變更這個設定將改變全部擠出機的設定值" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:160 +msgctxt "@label" +msgid "The value is resolved from per-extruder values " +msgstr "這個數值是由每個擠出機的設定值解析出來的" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 +msgctxt "@label" +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" +"單擊以復原列印參數的值。" + +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:284 +msgctxt "@label" +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" +"點擊以恢復計算得出的數值。" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:120 +msgctxt "@label:listbox" +msgid "Print Setup" +msgstr "列印設定" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:120 +msgctxt "@label:listbox" +msgid "" +"Print Setup disabled\n" +"G-code files cannot be modified" +msgstr "" +"列印設定已關閉\n" +"G-code 檔案無法被修改" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:336 +msgctxt "@label Hours and minutes" +msgid "00h 00min" +msgstr "00 小時 00 分" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:354 +msgctxt "@tooltip" +msgid "Time specification
    " +msgstr "時間資訊
    " + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:429 +msgctxt "@label" +msgid "Cost specification" +msgstr "成本明細" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:434 +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:445 +msgctxt "@label m for meter" +msgid "%1m" +msgstr "%1m" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:446 +msgctxt "@label g for grams" +msgid "%1g" +msgstr "%1g" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:444 +msgctxt "@label" +msgid "Total:" +msgstr "總共:" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:498 +msgctxt "" +"@label Print estimates: m for meters, g for grams, %4 is currency and %3 is " +"print cost" +msgid "%1m / ~ %2g / ~ %4 %3" +msgstr "%1m / ~ %2g / ~ %4 %3" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:503 +msgctxt "@label Print estimates: m for meters, g for grams" +msgid "%1m / ~ %2g" +msgstr "%1m / ~ %2g" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:586 +msgctxt "@tooltip" +msgid "" +"Recommended Print Setup

    Print with the recommended settings " +"for the selected printer, material and quality." +msgstr "" +"推薦的列印設定

    使用針對所選印表機、耗材和品質的推薦設定進行" +"列印。" + +#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:591 +msgctxt "@tooltip" +msgid "" +"Custom Print Setup

    Print with finegrained control over every " +"last bit of the slicing process." +msgstr "自訂列印設定
    對切片過程中的每一個細節進行精細控制。" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:49 +msgctxt "@title:menuitem %1 is the automatically selected material" +msgid "Automatic: %1" +msgstr "自動:%1" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:12 +msgctxt "@title:menu menubar:toplevel" +msgid "&View" +msgstr "檢視(&V)" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:40 +msgctxt "@title:menuitem %1 is the nozzle currently loaded in the printer" +msgid "Automatic: %1" +msgstr "自動: %1" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:25 +msgctxt "@label" +msgid "Print Selected Model With:" +msgid_plural "Print Selected Models With:" +msgstr[0] "列印所選模型:" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:83 +msgctxt "@title:window" +msgid "Multiply Selected Model" +msgid_plural "Multiply Selected Models" +msgstr[0] "複製所選模型" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ContextMenu.qml:108 +msgctxt "@label" +msgid "Number of Copies" +msgstr "複製個數" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/RecentFilesMenu.qml:13 +msgctxt "@title:menu menubar:file" +msgid "Open &Recent" +msgstr "最近開啟的檔案(&R)" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:38 +msgctxt "@info:status" +msgid "No printer connected" +msgstr "沒有連接印表機" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:90 +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:138 +msgctxt "@label" +msgid "Extruder" +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 "" +"加熱端的目標溫度。加熱端將加熱或冷卻至此溫度。若設定為 0,則關閉加熱端的加" +"熱。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:152 +msgctxt "@tooltip" +msgid "The current temperature of this extruder." +msgstr "該擠出機的目前溫度。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:188 +msgctxt "@tooltip" +msgid "The colour of the material in this extruder." +msgstr "該擠出機中耗材的顏色。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:220 +msgctxt "@tooltip" +msgid "The material in this extruder." +msgstr "該擠出機中的耗材。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:252 +msgctxt "@tooltip" +msgid "The nozzle inserted in this extruder." +msgstr "該擠出機所使用的噴頭。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:283 +msgctxt "@label" +msgid "Build plate" +msgstr "列印平台" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:312 +msgctxt "@tooltip" +msgid "" +"The target temperature of the heated bed. The bed will heat up or cool down " +"towards this temperature. If this is 0, the bed heating is turned off." +msgstr "熱床的目標溫度。熱床將加熱或冷卻至此溫度。若設定為 0,則不使用熱床。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:344 +msgctxt "@tooltip" +msgid "The current temperature of the heated bed." +msgstr "熱床目前溫度。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:423 +msgctxt "@tooltip of temperature input" +msgid "The temperature to pre-heat the bed to." +msgstr "熱床的預熱溫度。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:623 +msgctxt "@button Cancel pre-heating" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:623 +msgctxt "@button" +msgid "Pre-heat" +msgstr "預熱" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:650 +msgctxt "@tooltip of pre-heat" +msgid "" +"Heat the bed in advance before printing. You can continue adjusting your " +"print while it is heating, and you won't have to wait for the bed to heat up " +"when you're ready to print." +msgstr "" +"列印前請預熱熱床。你可以在熱床加熱時繼續調整相關物件,讓你在準備列印時不必等" +"待熱床加熱完畢。" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:703 +msgctxt "@label" +msgid "Printer control" +msgstr "印表機控制" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:717 +msgctxt "@label" +msgid "Jog Position" +msgstr "輕搖位置" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:735 +msgctxt "@label" +msgid "X/Y" +msgstr "X/Y" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:842 +msgctxt "@label" +msgid "Z" +msgstr "Z" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:907 +msgctxt "@label" +msgid "Jog Distance" +msgstr "輕搖距離" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1018 +msgctxt "@label" +msgid "Active print" +msgstr "正在列印" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1023 +msgctxt "@label" +msgid "Job Name" +msgstr "作業名稱" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1029 +msgctxt "@label" +msgid "Printing Time" +msgstr "列印時間" + +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:1035 +msgctxt "@label" +msgid "Estimated time left" +msgstr "預計剩餘時間" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:72 +msgctxt "@action:inmenu" +msgid "Toggle Fu&ll Screen" +msgstr "切換全螢幕(&F)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:79 +msgctxt "@action:inmenu menubar:edit" +msgid "&Undo" +msgstr "復原(&U)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:89 +msgctxt "@action:inmenu menubar:edit" +msgid "&Redo" +msgstr "取消復原(&R)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:99 +msgctxt "@action:inmenu menubar:file" +msgid "&Quit" +msgstr "退出(&Q)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:107 +msgctxt "@action:inmenu menubar:view" +msgid "&Reset camera position" +msgstr "重置視角位置" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +msgctxt "@action:inmenu" +msgid "Configure Cura..." +msgstr "設定 Cura…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:121 +msgctxt "@action:inmenu menubar:printer" +msgid "&Add Printer..." +msgstr "新增印表機(&A)…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:127 +msgctxt "@action:inmenu menubar:printer" +msgid "Manage Pr&inters..." +msgstr "管理印表機(&I)..." + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:134 +msgctxt "@action:inmenu" +msgid "Manage Materials..." +msgstr "管理耗材…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:142 +msgctxt "@action:inmenu menubar:profile" +msgid "&Update profile with current settings/overrides" +msgstr "使用目前設定 / 覆寫更新列印參數(&U)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +msgctxt "@action:inmenu menubar:profile" +msgid "&Discard current changes" +msgstr "捨棄目前更改(&D)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:162 +msgctxt "@action:inmenu menubar:profile" +msgid "&Create profile from current settings/overrides..." +msgstr "從目前設定 / 覆寫值創建列印參數(&C)…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:168 +msgctxt "@action:inmenu menubar:profile" +msgid "Manage Profiles..." +msgstr "管理列印參數.." + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:175 +msgctxt "@action:inmenu menubar:help" +msgid "Show Online &Documentation" +msgstr "顯示線上說明文件(&D)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:183 +msgctxt "@action:inmenu menubar:help" +msgid "Report a &Bug" +msgstr "BUG 回報(&B)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:191 +msgctxt "@action:inmenu menubar:help" +msgid "&About..." +msgstr "關於(&A)…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:198 +msgctxt "@action:inmenu menubar:edit" +msgid "Delete &Selected Model" +msgid_plural "Delete &Selected Models" +msgstr[0] "刪除所選模型(&S)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:208 +msgctxt "@action:inmenu menubar:edit" +msgid "Center Selected Model" +msgid_plural "Center Selected Models" +msgstr[0] "置中所選模型" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:217 +msgctxt "@action:inmenu menubar:edit" +msgid "Multiply Selected Model" +msgid_plural "Multiply Selected Models" +msgstr[0] "複製所選模型" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:226 +msgctxt "@action:inmenu" +msgid "Delete Model" +msgstr "刪除模型" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:234 +msgctxt "@action:inmenu" +msgid "Ce&nter Model on Platform" +msgstr "將模型置中(&N)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:240 +msgctxt "@action:inmenu menubar:edit" +msgid "&Group Models" +msgstr "群組模型(&G)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:250 +msgctxt "@action:inmenu menubar:edit" +msgid "Ungroup Models" +msgstr "取消模型群組" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:260 +msgctxt "@action:inmenu menubar:edit" +msgid "&Merge Models" +msgstr "結合模型(&M)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:270 +msgctxt "@action:inmenu" +msgid "&Multiply Model..." +msgstr "複製模型…(&M)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +msgctxt "@action:inmenu menubar:edit" +msgid "&Select All Models" +msgstr "選擇所有模型(&S)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:287 +msgctxt "@action:inmenu menubar:edit" +msgid "&Clear Build Plate" +msgstr "清空列印平台(&C)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:297 +msgctxt "@action:inmenu menubar:file" +msgid "Re&load All Models" +msgstr "重新載入所有模型(&L)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:306 +msgctxt "@action:inmenu menubar:edit" +msgid "Arrange All Models" +msgstr "編位所有的模型" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:314 +msgctxt "@action:inmenu menubar:edit" +msgid "Arrange Selection" +msgstr "為所選模型編位" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +msgctxt "@action:inmenu menubar:edit" +msgid "Reset All Model Positions" +msgstr "重置所有模型位置" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:328 +msgctxt "@action:inmenu menubar:edit" +msgid "Reset All Model &Transformations" +msgstr "重置所有模型旋轉(&T)" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:335 +msgctxt "@action:inmenu menubar:file" +msgid "&Open File(s)..." +msgstr "開啟檔案(&O)…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:343 +msgctxt "@action:inmenu menubar:file" +msgid "&New Project..." +msgstr "新建專案(&N)…" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350 +msgctxt "@action:inmenu menubar:help" +msgid "Show Engine &Log..." +msgstr "顯示切片引擎日誌(&L)..." + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +msgctxt "@action:inmenu menubar:help" +msgid "Show Configuration Folder" +msgstr "顯示設定資料夾" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:365 +msgctxt "@action:menu" +msgid "Configure setting visibility..." +msgstr "參數顯示設定..." + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:372 +msgctxt "@action:menu" +msgid "Browse plugins..." +msgstr "瀏覽外掛..." + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:379 +msgctxt "@action:menu" +msgid "Installed plugins..." +msgstr "安裝外掛..." + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:28 +msgctxt "@label:PrintjobStatus" +msgid "Please load a 3D model" +msgstr "請載入一個 3D 模型" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:34 +msgctxt "@label:PrintjobStatus" +msgid "Ready to slice" +msgstr "切片已準備就緒" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:36 +msgctxt "@label:PrintjobStatus" +msgid "Slicing..." +msgstr "正在切片..." + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:38 +msgctxt "@label:PrintjobStatus %1 is target operation" +msgid "Ready to %1" +msgstr "%1 已準備就緒" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:40 +msgctxt "@label:PrintjobStatus" +msgid "Unable to Slice" +msgstr "無法切片" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:42 +msgctxt "@label:PrintjobStatus" +msgid "Slicing unavailable" +msgstr "切片無法使用" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:162 +msgctxt "@label:Printjob" +msgid "Prepare" +msgstr "準備" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:162 +msgctxt "@label:Printjob" +msgid "Cancel" +msgstr "取消" + +#: /home/ruben/Projects/Cura/resources/qml/SaveButton.qml:302 +msgctxt "@info:tooltip" +msgid "Select the active output device" +msgstr "選擇作用中的輸出裝置" + +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:19 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:620 +msgctxt "@title:window" +msgid "Open file(s)" +msgstr "開啟檔案" + +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:64 +msgctxt "@text:window" +msgid "" +"We have found one or more project file(s) within the files you have " +"selected. You can open only one project file at a time. We suggest to only " +"import models from those files. Would you like to proceed?" +msgstr "" +"我們已經在你所選擇的檔案中找到一個或多個專案檔案,但一次只能開啟一個專案檔" +"案。我們建議只從那些檔案中匯入模型而不開啟專案。你要繼續操作嗎?" + +#: /home/ruben/Projects/Cura/resources/qml/OpenFilesIncludingProjectsDialog.qml:99 +msgctxt "@action:button" +msgid "Import all as models" +msgstr "匯入所有模型" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:19 +msgctxt "@title:window" +msgid "Ultimaker Cura" +msgstr "Ultimaker Cura" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:81 +msgctxt "@title:menu menubar:toplevel" +msgid "&File" +msgstr "檔案(&F)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:98 +msgctxt "@action:inmenu menubar:file" +msgid "&Save Selection to File" +msgstr "儲存到檔案(&S)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:107 +msgctxt "@title:menu menubar:file" +msgid "Save &As..." +msgstr "另存為(&A)…" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:118 +msgctxt "@title:menu menubar:file" +msgid "Save project" +msgstr "儲存專案" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141 +msgctxt "@title:menu menubar:toplevel" +msgid "&Edit" +msgstr "編輯(&E)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:158 +msgctxt "@title:menu" +msgid "&View" +msgstr "檢視(&V)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:163 +msgctxt "@title:menu" +msgid "&Settings" +msgstr "設定(&S)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:165 +msgctxt "@title:menu menubar:toplevel" +msgid "&Printer" +msgstr "印表機(&P)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:175 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:187 +msgctxt "@title:menu" +msgid "&Material" +msgstr "耗材(&M)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:188 +msgctxt "@title:menu" +msgid "&Profile" +msgstr "列印參數(&P)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:180 +msgctxt "@action:inmenu" +msgid "Set as Active Extruder" +msgstr "設為主要擠出機" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:198 +msgctxt "@title:menu menubar:toplevel" +msgid "E&xtensions" +msgstr "擴充功能(&X)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:232 +msgctxt "@title:menu menubar:toplevel" +msgid "P&lugins" +msgstr "外掛(&l)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:240 +msgctxt "@title:menu menubar:toplevel" +msgid "P&references" +msgstr "偏好設定(&R)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:248 +msgctxt "@title:menu menubar:toplevel" +msgid "&Help" +msgstr "幫助(&H)" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:330 +msgctxt "@action:button" +msgid "Open File" +msgstr "開啟檔案" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:442 +msgctxt "@title:tab" +msgid "Settings" +msgstr "設定" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:478 +msgctxt "@title:window" +msgid "New project" +msgstr "新建專案" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:479 +msgctxt "@info:question" +msgid "" +"Are you sure you want to start a new project? This will clear the build " +"plate and any unsaved settings." +msgstr "你確定要開始一個新專案嗎?這將清除列印平台及任何未儲存的設定。" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:721 +msgctxt "@window:title" +msgid "Install Plugin" +msgstr "安裝外掛" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728 +msgctxt "@title:window" +msgid "Open File(s)" +msgstr "開啟檔案" + +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:731 +msgctxt "@text:window" +msgid "" +"We have found one or more G-Code files within the files you have selected. " +"You can only open one G-Code file at a time. If you want to open a G-Code " +"file, please just select only one." +msgstr "" +"我們已經在你選擇的檔案中找到一個或多個 G-Code 檔案。你一次只能開啟一個 G-" +"Code 檔案。若需開啟 G-Code 檔案,請僅選擇一個。" + +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:14 +msgctxt "@title:window" +msgid "Save Project" +msgstr "儲存專案" + +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:136 +msgctxt "@action:label" +msgid "Extruder %1" +msgstr "擠出機 %1" + +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:146 +msgctxt "@action:label" +msgid "%1 & material" +msgstr "%1 & 耗材" + +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:242 +msgctxt "@action:label" +msgid "Don't show project summary on save again" +msgstr "儲存時不再顯示專案摘要" + +#: /home/ruben/Projects/Cura/resources/qml/WorkspaceSummaryDialog.qml:264 +msgctxt "@action:button" +msgid "Save" +msgstr "儲存" + +#: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:74 +msgctxt "@title:tab" +msgid "Prepare" +msgstr "準備" + +#: /home/ruben/Projects/Cura/resources/qml/Topbar.qml:100 +msgctxt "@title:tab" +msgid "Monitor" +msgstr "監控" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:163 +msgctxt "@label" +msgid "Layer Height" +msgstr "層高" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:323 +msgctxt "@tooltip" +msgid "" +"A custom profile is currently active. To enable the quality slider, choose a " +"default quality profile in Custom tab" +msgstr "" +"目前正使用自訂列印參數。若要使用品質滑動條,在自訂分頁中選擇預設的列印參數" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:340 +msgctxt "@label" +msgid "Print Speed" +msgstr "列印速度" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:350 +msgctxt "@label" +msgid "Slower" +msgstr "更慢" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:361 +msgctxt "@label" +msgid "Faster" +msgstr "更快" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:388 +msgctxt "@tooltip" +msgid "" +"You have modified some profile settings. If you want to change these go to " +"custom mode." +msgstr "你修改過部份列印參數設定。如果你想改變這些設定,請切換到自訂模式。" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:413 +msgctxt "@label" +msgid "Infill" +msgstr "填充" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:633 +msgctxt "@label" +msgid "" +"Gradual infill will gradually increase the amount of infill towards the top." +msgstr "漸層填充(Gradual infill)將隨著列印高度的提升而逐漸加大填充密度。" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:645 +msgctxt "@label" +msgid "Enable gradual" +msgstr "啟用漸層" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:712 +msgctxt "@label" +msgid "Generate Support" +msgstr "產生支撐" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:746 +msgctxt "@label" +msgid "" +"Generate structures to support parts of the model which have overhangs. " +"Without these structures, such parts would collapse during printing." +msgstr "" +"在模型的懸垂(Overhangs)部分產生支撐結構。若不這樣做,這些部分在列印時將倒" +"塌。" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:764 +msgctxt "@label" +msgid "Support Extruder" +msgstr "支撐用擠出機" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:816 +msgctxt "@label" +msgid "" +"Select which extruder to use for support. This will build up supporting " +"structures below the model to prevent the model from sagging or printing in " +"mid air." +msgstr "" +"選擇用於支撐的擠出機。該擠出機將在模型之下建立支撐結構,以防止模型下垂或在空" +"中列印。" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:839 +msgctxt "@label" +msgid "Build Plate Adhesion" +msgstr "列印平台附著" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:894 +msgctxt "@label" +msgid "" +"Enable printing a brim or raft. This will add a flat area around or under " +"your object which is easy to cut off afterwards." +msgstr "" +"允許列印邊緣或木筏。這將在你的物件周圍或下方添加一個容易切斷的平面區域。" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarSimple.qml:934 +msgctxt "@label" +msgid "" +"Need help improving your prints?
    Read the Ultimaker " +"Troubleshooting Guides" +msgstr "需要幫助改善你的列印?閱讀 Ultimaker 故障排除指南" + +#: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 +msgctxt "@label %1 is filled in with the name of an extruder" +msgid "Print Selected Model with %1" +msgid_plural "Print Selected Models with %1" +msgstr[0] "用 %1 列印所選模型" + +#: /home/ruben/Projects/Cura/resources/qml/AskOpenAsProjectOrModelsDialog.qml:20 +msgctxt "@title:window" +msgid "Open project file" +msgstr "開啟專案檔案" + +#: /home/ruben/Projects/Cura/resources/qml/AskOpenAsProjectOrModelsDialog.qml:72 +msgctxt "@text:window" +msgid "" +"This is a Cura project file. Would you like to open it as a project or " +"import the models from it?" +msgstr "這是一個 Cura 專案檔案。你想將其作為一個專案開啟還是從中匯入模型?" + +#: /home/ruben/Projects/Cura/resources/qml/AskOpenAsProjectOrModelsDialog.qml:103 +msgctxt "@action:button" +msgid "Open as project" +msgstr "作為專案開啟" + +#: /home/ruben/Projects/Cura/resources/qml/AskOpenAsProjectOrModelsDialog.qml:122 +msgctxt "@action:button" +msgid "Import models" +msgstr "匯入模型" + +#: /home/ruben/Projects/Cura/resources/qml/EngineLog.qml:15 +msgctxt "@title:window" +msgid "Engine Log" +msgstr "引擎日誌" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:242 +msgctxt "@label" +msgid "Material" +msgstr "耗材" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:349 +msgctxt "@label" +msgid "Check compatibility" +msgstr "檢查耗材相容性" + +#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:369 +msgctxt "@tooltip" +msgid "Click to check the material compatibility on Ultimaker.com." +msgstr "點擊查看 Ultimaker.com 上的耗材相容性。" + +#: MachineSettingsAction/plugin.json +msgctxt "description" +msgid "" +"Provides a way to change machine settings (such as build volume, nozzle " +"size, etc)" +msgstr "提供更改印表機設定(如成形空間體積、噴頭口徑等)的方法" + +#: MachineSettingsAction/plugin.json +msgctxt "name" +msgid "Machine Settings action" +msgstr "印表機設定操作" + +#: XRayView/plugin.json +msgctxt "description" +msgid "Provides the X-Ray view." +msgstr "提供透視檢視。" + +#: XRayView/plugin.json +msgctxt "name" +msgid "X-Ray View" +msgstr "透視檢視" + +#: X3DReader/plugin.json +msgctxt "description" +msgid "Provides support for reading X3D files." +msgstr "提供讀取 X3D 檔案的支援。" + +#: X3DReader/plugin.json +msgctxt "name" +msgid "X3D Reader" +msgstr "X3D 讀取器" + +#: GCodeWriter/plugin.json +msgctxt "description" +msgid "Writes GCode to a file." +msgstr "將 GCode 寫入至檔案。" + +#: GCodeWriter/plugin.json +msgctxt "name" +msgid "GCode Writer" +msgstr "GCode 寫入器" + +#: cura-god-mode-plugin/src/GodMode/plugin.json +msgctxt "description" +msgid "Dump the contents of all settings to a HTML file." +msgstr "將所有設定內容轉儲至 HTML 檔案。" + +#: cura-god-mode-plugin/src/GodMode/plugin.json +msgctxt "name" +msgid "God Mode" +msgstr "上帝模式" + +#: Doodle3D-cura-plugin/Doodle3D/plugin.json +msgctxt "description" +msgid "Accepts G-Code and sends them over WiFi to a Doodle3D WiFi-Box." +msgstr "接受 G-Code 並透過 WiFi 將其發送到 Doodle3D 無線網路盒。" + +#: Doodle3D-cura-plugin/Doodle3D/plugin.json +msgctxt "name" +msgid "Doodle3D WiFi-Box" +msgstr "Doodle3D 無線網路盒" + +#: ChangeLogPlugin/plugin.json +msgctxt "description" +msgid "Shows changes since latest checked version." +msgstr "顯示最新版本更動。" + +#: ChangeLogPlugin/plugin.json +msgctxt "name" +msgid "Changelog" +msgstr "更新日誌" + +#: ProfileFlattener/plugin.json +msgctxt "description" +msgid "Create a flattend quality changes profile." +msgstr "創建一份合併品質變化列印參數。" + +#: ProfileFlattener/plugin.json +msgctxt "name" +msgid "Profile flatener" +msgstr "列印參數合併器" + +#: USBPrinting/plugin.json +msgctxt "description" +msgid "" +"Accepts G-Code and sends them to a printer. Plugin can also update firmware." +msgstr "接受 G-Code 並且傳送到印表機。此外掛也可以更新韌體。" + +#: USBPrinting/plugin.json +msgctxt "name" +msgid "USB printing" +msgstr "USB 連線列印" + +#: RemovableDriveOutputDevice/plugin.json +msgctxt "description" +msgid "Provides removable drive hotplugging and writing support." +msgstr "提供行動裝置熱插拔和寫入檔案的支援。" + +#: RemovableDriveOutputDevice/plugin.json +msgctxt "name" +msgid "Removable Drive Output Device Plugin" +msgstr "行動裝置輸出設備外掛" + +#: UM3NetworkPrinting/plugin.json +msgctxt "description" +msgid "Manages network connections to Ultimaker 3 printers" +msgstr "管理與 Ultimaker 3 印表機的網路連接" + +#: UM3NetworkPrinting/plugin.json +msgctxt "name" +msgid "UM3 Network Connection" +msgstr "UM3 網路連接" + +#: FirmwareUpdateChecker/plugin.json +msgctxt "description" +msgid "Checks for firmware updates." +msgstr "檢查是否有韌體更新。" + +#: FirmwareUpdateChecker/plugin.json +msgctxt "name" +msgid "Firmware Update Checker" +msgstr "韌體更新檢查" + +#: CuraSolidWorksPlugin/plugin.json +msgctxt "description" +msgid "" +"Gives you the possibility to open certain files via SolidWorks itself. These " +"are then converted and loaded into Cura" +msgstr "" +"讓你可以透過 SolidWorks 自身開啟特定檔案。隨後會將這些檔案進行轉換並載入 Cura" + +#: CuraSolidWorksPlugin/plugin.json +msgctxt "name" +msgid "SolidWorks Integration" +msgstr "SolidWorks 整合" + +#: SimulationView/plugin.json +msgctxt "description" +msgid "Provides the Simulation view." +msgstr "提供模擬檢視。" + +#: SimulationView/plugin.json +msgctxt "name" +msgid "Simulation View" +msgstr "模擬檢視" + +#: PostProcessingPlugin/plugin.json +msgctxt "description" +msgid "Extension that allows for user created scripts for post processing" +msgstr "擴充程式(允許用戶建立腳本進行後處理)" + +#: PostProcessingPlugin/plugin.json +msgctxt "name" +msgid "Post Processing" +msgstr "後處理" + +#: AutoSave/plugin.json +msgctxt "description" +msgid "Automatically saves Preferences, Machines and Profiles after changes." +msgstr "偏好設定、機器設定和列印參數修改後自動儲存。" + +#: AutoSave/plugin.json +msgctxt "name" +msgid "Auto Save" +msgstr "自動儲存" + +#: SliceInfoPlugin/plugin.json +msgctxt "description" +msgid "Submits anonymous slice info. Can be disabled through preferences." +msgstr "提交匿名切片資訊。這項功能可以在偏好設定中關閉。" + +#: SliceInfoPlugin/plugin.json +msgctxt "name" +msgid "Slice info" +msgstr "切片資訊" + +#: XmlMaterialProfile/plugin.json +msgctxt "description" +msgid "Provides capabilities to read and write XML-based material profiles." +msgstr "提供讀寫 XML 格式耗材參數的功能。" + +#: XmlMaterialProfile/plugin.json +msgctxt "name" +msgid "Material Profiles" +msgstr "耗材參數" + +#: LegacyProfileReader/plugin.json +msgctxt "description" +msgid "Provides support for importing profiles from legacy Cura versions." +msgstr "提供匯入 Cura 舊版本列印參數的支援。" + +#: LegacyProfileReader/plugin.json +msgctxt "name" +msgid "Legacy Cura Profile Reader" +msgstr "舊版 Cura 列印參數讀取器" + +#: GCodeProfileReader/plugin.json +msgctxt "description" +msgid "Provides support for importing profiles from g-code files." +msgstr "提供匯入 G-code 檔案中列印參數的支援。" + +#: GCodeProfileReader/plugin.json +msgctxt "name" +msgid "GCode Profile Reader" +msgstr "G-code 列印參數讀取器" + +#: VersionUpgrade/VersionUpgrade25to26/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 2.5 to Cura 2.6." +msgstr "將設定從 Cura 2.5 版本升級至 2.6 版本。" + +#: VersionUpgrade/VersionUpgrade25to26/plugin.json +msgctxt "name" +msgid "Version Upgrade 2.5 to 2.6" +msgstr "升級版本 2.5 到 2.6" + +#: VersionUpgrade/VersionUpgrade27to30/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 2.7 to Cura 3.0." +msgstr "將設定從 Cura 2.7 版本升級至 3.0 版本。" + +#: VersionUpgrade/VersionUpgrade27to30/plugin.json +msgctxt "name" +msgid "Version Upgrade 2.7 to 3.0" +msgstr "升級版本 2.7 到 3.0" + +#: VersionUpgrade/VersionUpgrade30to31/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 3.0 to Cura 3.1." +msgstr "將設定從 Cura 3.0 版本升級至 3.1 版本。" + +#: VersionUpgrade/VersionUpgrade30to31/plugin.json +msgctxt "name" +msgid "Version Upgrade 3.0 to 3.1" +msgstr "升級版本 3.0 到 3.1" + +#: VersionUpgrade/VersionUpgrade26to27/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." +msgstr "將設定從 Cura 2.6 版本升級至 2.7 版本。" + +#: VersionUpgrade/VersionUpgrade26to27/plugin.json +msgctxt "name" +msgid "Version Upgrade 2.6 to 2.7" +msgstr "升級版本 2.6 到 2.7" + +#: VersionUpgrade/VersionUpgrade21to22/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 2.1 to Cura 2.2." +msgstr "將設定從 Cura 2.1 版本升級至 2.2 版本。" + +#: VersionUpgrade/VersionUpgrade21to22/plugin.json +msgctxt "name" +msgid "Version Upgrade 2.1 to 2.2" +msgstr "升級版本 2.1 到 2.2" + +#: VersionUpgrade/VersionUpgrade22to24/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 2.2 to Cura 2.4." +msgstr "將設定從 Cura 2.2 版本升級至 2.4 版本。" + +#: VersionUpgrade/VersionUpgrade22to24/plugin.json +msgctxt "name" +msgid "Version Upgrade 2.2 to 2.4" +msgstr "升級版本 2.2 到 2.4" + +#: ImageReader/plugin.json +msgctxt "description" +msgid "Enables ability to generate printable geometry from 2D image files." +msgstr "支援從 2D 圖片檔案產生可列印 3D 模型的能力。" + +#: ImageReader/plugin.json +msgctxt "name" +msgid "Image Reader" +msgstr "圖片讀取器" + +#: CuraEngineBackend/plugin.json +msgctxt "description" +msgid "Provides the link to the CuraEngine slicing backend." +msgstr "提供連結到 Cura 切片引擎後台。" + +#: CuraEngineBackend/plugin.json +msgctxt "name" +msgid "CuraEngine Backend" +msgstr "Cura 引擎後台" + +#: PerObjectSettingsTool/plugin.json +msgctxt "description" +msgid "Provides the Per Model Settings." +msgstr "提供對每個模型的單獨設定。" + +#: PerObjectSettingsTool/plugin.json +msgctxt "name" +msgid "Per Model Settings Tool" +msgstr "單一模型設定工具" + +#: cura-siemensnx-plugin/plugin.json +msgctxt "description" +msgid "Helps you to install an 'export to Cura' button in Siemens NX." +msgstr "協助你在 Siemens NX 中安裝一個「匯出到 Cura」按鈕。" + +#: cura-siemensnx-plugin/plugin.json +msgctxt "name" +msgid "Siemens NX Integration" +msgstr "Siemens NX 整合" + +#: 3MFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading 3MF files." +msgstr "提供讀取 3MF 格式檔案的支援。" + +#: 3MFReader/plugin.json +msgctxt "name" +msgid "3MF Reader" +msgstr "3MF 讀取器" + +#: PluginBrowser/plugin.json +msgctxt "description" +msgid "Find, manage and install new plugins." +msgstr "尋找、管理和安裝新外掛。" + +#: PluginBrowser/plugin.json +msgctxt "name" +msgid "Plugin Browser" +msgstr "外掛瀏覽器" + +#: SolidView/plugin.json +msgctxt "description" +msgid "Provides a normal solid mesh view." +msgstr "提供一個基本的實體網格檢視。" + +#: SolidView/plugin.json +msgctxt "name" +msgid "Solid View" +msgstr "實體檢視" + +#: GCodeReader/plugin.json +msgctxt "description" +msgid "Allows loading and displaying G-code files." +msgstr "允許載入和顯示 G-code 檔案。" + +#: GCodeReader/plugin.json +msgctxt "name" +msgid "G-code Reader" +msgstr "G-code 讀取器" + +#: CuraProfileWriter/plugin.json +msgctxt "description" +msgid "Provides support for exporting Cura profiles." +msgstr "提供匯出 Cura 列印參數的支援。" + +#: CuraProfileWriter/plugin.json +msgctxt "name" +msgid "Cura Profile Writer" +msgstr "Cura 列印參數寫入器" + +#: 3MFWriter/plugin.json +msgctxt "description" +msgid "Provides support for writing 3MF files." +msgstr "提供寫入 3MF 檔案的支援。" + +#: 3MFWriter/plugin.json +msgctxt "name" +msgid "3MF Writer" +msgstr "3MF 寫入器" + +#: UserAgreementPlugin/plugin.json +msgctxt "description" +msgid "Ask the user once if he/she agrees with our license" +msgstr "詢問使用者是否同意我們的授權協議" + +#: UserAgreementPlugin/plugin.json +msgctxt "name" +msgid "UserAgreement" +msgstr "使用者授權" + +#: UltimakerMachineActions/plugin.json +msgctxt "description" +msgid "" +"Provides machine actions for Ultimaker machines (such as bed leveling " +"wizard, selecting upgrades, etc)" +msgstr "提供 Ultimaker 印表機專屬功能(如平台調平精靈、選擇升級等)" + +#: UltimakerMachineActions/plugin.json +msgctxt "name" +msgid "Ultimaker machine actions" +msgstr "Ultimaker 印表機操作" + +#: CuraProfileReader/plugin.json +msgctxt "description" +msgid "Provides support for importing Cura profiles." +msgstr "提供匯入 Cura 列印參數的支援。" + +#: CuraProfileReader/plugin.json +msgctxt "name" +msgid "Cura Profile Reader" +msgstr "Cura 列印參數讀取器" + +#~ msgctxt "@label:status" +#~ msgid "Blocked" +#~ msgstr "暫停" + +#~ msgctxt "@label:status" +#~ msgid "Can't start print" +#~ msgstr "無法開始列印" + +#~ msgctxt "@info:title" +#~ msgid "Print Details" +#~ msgstr "列印細項設定" + +#~ 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 "" +#~ "為了確保您的 {machine_name} 配備了最新功能,建議定期更新韌體。 這可以在 " +#~ "{machine_name} 上完成(有連接到網絡時)或透過 USB 完成。" + +msgctxt "@info:title" +msgid "Layer View" +msgstr "分層檢視" + +#~ msgctxt "@menuitem" +#~ msgid "Browse plugins" +#~ msgstr "瀏覽外掛" + +#~ msgctxt "@info:title" +#~ msgid "Export Details" +#~ msgstr "匯出細項設定" + +#~ msgctxt "@label" +#~ 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

    \n" +#~ " " + +#~ msgctxt "@action:button" +#~ msgid "Open Web Page" +#~ msgstr "開啟網頁" + +#~ msgctxt "@action:button" +#~ msgid "Ok" +#~ msgstr "確定" + +#~ msgctxt "@label" +#~ msgid "" +#~ "This printer is not set up to host a group of connected Ultimaker 3 " +#~ "printers" +#~ msgstr "這台印表機未設定成管理一組連線的 Ultimaker 3 印表機的主機" + +#~ msgctxt "@label" +#~ msgid "" +#~ "This printer is the host for a group of %1 connected Ultimaker 3 printers" +#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機" + +#~ msgctxt "@label:status" +#~ msgid "Preparing" +#~ msgstr "正在準備" + +#~ msgctxt "@label" +#~ msgid "Completed on: " +#~ msgstr "完成時間:" + +#~ msgctxt "@label" +#~ msgid "PRINTER GROUP" +#~ msgstr "印表機群組" + +#~ msgctxt "@description" +#~ msgid "Print time" +#~ msgstr "列印時間" + +#~ msgctxt "@title:window" +#~ msgid "Cura" +#~ msgstr "Cura" + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection (Cluster)" +#~ msgstr "UM3 網路連接(叢集)" + +#~ msgctxt "description" +#~ msgid "Provides the Layer view." +#~ msgstr "提供分層檢視。" + +msgctxt "name" +msgid "Layer View" +msgstr "分層檢視" + +#~ msgctxt "@item:inlistbox" +#~ msgid "X-Ray" +#~ msgstr "透視" + +#~ msgctxt "@label" +#~ msgid "Doodle3D" +#~ msgstr "Doodle3D" + +#~ msgctxt "@info:tooltip" +#~ msgid "Print with " +#~ msgstr "使用 " + +#~ msgctxt "@title:menu" +#~ msgid "Doodle3D" +#~ msgstr "Doodle3D 列印" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Enable Scan devices..." +#~ msgstr "啟用掃描設備..." + +#~ msgctxt "X3G Writer File Description" +#~ msgid "X3G File" +#~ msgstr "X3G 檔案" + +#~ msgctxt "@info:status" +#~ msgid "" +#~ "Please keep in mind, that you have to reopen your SolidWorks file " +#~ "manually! Reloading the model won't work!" +#~ msgstr "" +#~ "請注意,重新載入模型功能無法運作!你必須手動重新開啟 SolidWorks 檔案!" + +#~ msgctxt "@item:inlistbox" +#~ msgid "Layers" +#~ msgstr "層" + +#~ msgctxt "@item:inmenu" +#~ msgid "Solid" +#~ msgstr "實體" + +#~ msgctxt "@title:window" +#~ msgid "Doodle3D Settings" +#~ msgstr "Doodle3D 設定" + +#~ msgctxt "@title:window" +#~ msgid "Print to: %1" +#~ msgstr "列印至:%1" + +#~ msgctxt "@label" +#~ msgid "Extruder Temperature: %1/%2°C" +#~ msgstr "列印頭溫度:%1/%2 °C" + +#~ msgctxt "@label" +#~ msgid "Bed Temperature: %1/%2°C" +#~ msgstr "熱床溫度:%1/%2°C" + +#~ msgctxt "@label" +#~ msgid "View Mode: Layers" +#~ msgstr "檢視模式:分層" + +#~ msgctxt "@label" +#~ msgid "Hotend" +#~ msgstr "熱端" + +#~ msgctxt "@action:button" +#~ msgid "View Mode" +#~ msgstr "檢視模式" + +#~ msgctxt "@title:tab" +#~ msgid "Print" +#~ msgstr "列印" + +#~ msgctxt "@label" +#~ msgid "0%" +#~ msgstr "0%" + +#~ msgctxt "@label" +#~ msgid "Empty infill will leave your model hollow with low strength." +#~ msgstr "無填充將使模型處於低強度且保持空心狀態。" + +#~ msgctxt "@label" +#~ msgid "20%" +#~ msgstr "20%" + +#~ msgctxt "@label" +#~ msgid "Light (20%) infill will give your model an average strength." +#~ msgstr "輕度(20%)填充將使列印模型處於中等強度。" + +#~ msgctxt "@label" +#~ msgid "50%" +#~ msgstr "50%" + +#~ msgctxt "@label" +#~ msgid "Dense (50%) infill will give your model an above average strength." +#~ msgstr "密集(50%)填充將使列印模型高於平均的強度。" + +#~ msgctxt "@label" +#~ msgid "100%" +#~ msgstr "100%" + +#~ msgctxt "@label" +#~ msgid "Solid (100%) infill will make your model completely solid." +#~ msgstr "完全(100%)填充將使你的模型處於完全實心狀態。" + +#~ msgctxt "@label" +#~ msgid "Gradual" +#~ msgstr "漸層填充" + +#~ msgctxt "description" +#~ msgid "Provides support for writing X3G files" +#~ msgstr "提供寫入 X3G 檔案的支援" + +#~ msgctxt "name" +#~ msgid "X3G Writer" +#~ msgstr "X3G 寫入器" + +#Added manually to fix a string that was changed after string freeze. +msgctxt "@item:inlistbox" +msgid "Layer view" +msgstr "分層檢視" \ No newline at end of file diff --git a/resources/i18n/zh_TW/fdmextruder.def.json.po b/resources/i18n/zh_TW/fdmextruder.def.json.po new file mode 100644 index 0000000000..1b5f351cf9 --- /dev/null +++ b/resources/i18n/zh_TW/fdmextruder.def.json.po @@ -0,0 +1,210 @@ +# Cura JSON setting files +# Copyright (C) 2017 Ultimaker +# This file is distributed under the same license as the Cura package. +# Ruben Dulek , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Cura 3.1\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" +"POT-Creation-Date: 2017-08-02 16:53+0000\n" +"PO-Revision-Date: 2017-11-22 23:36+0800\n" +"Last-Translator: Zhang Heh Ji \n" +"Language-Team: TEAM\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.4\n" + +#: fdmextruder.def.json +msgctxt "machine_settings label" +msgid "Machine" +msgstr "機型" + +#: fdmextruder.def.json +msgctxt "machine_settings description" +msgid "Machine specific settings" +msgstr "機器詳細設定" + +#: fdmextruder.def.json +msgctxt "extruder_nr label" +msgid "Extruder" +msgstr "擠出機" + +#: fdmextruder.def.json +msgctxt "extruder_nr description" +msgid "The extruder train used for printing. This is used in multi-extrusion." +msgstr "用於列印的擠出機,在多擠出機情況下適用。" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_id label" +msgid "Nozzle ID" +msgstr "噴頭 ID" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_id description" +msgid "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\"." +msgstr "擠出機組的噴頭 ID,比如 \"AA 0.4\" 和 \"BB 0.8\"。" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_size label" +msgid "Nozzle Diameter" +msgstr "噴頭直徑" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_size description" +msgid "" +"The inner diameter of the nozzle. Change this setting when using a non-" +"standard nozzle size." +msgstr "噴頭內徑,在使用非標準噴頭尺寸時需更改此設定。" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_offset_x label" +msgid "Nozzle X Offset" +msgstr "噴頭 X 軸偏移量" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_offset_x description" +msgid "The x-coordinate of the offset of the nozzle." +msgstr "噴頭 X 軸座標偏移。" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_offset_y label" +msgid "Nozzle Y Offset" +msgstr "噴頭 Y 軸偏移量" + +#: fdmextruder.def.json +msgctxt "machine_nozzle_offset_y description" +msgid "The y-coordinate of the offset of the nozzle." +msgstr "噴頭 Y 軸座標偏移。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_code label" +msgid "Extruder Start G-Code" +msgstr "擠出機起始 G-code" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_code description" +msgid "Start g-code to execute whenever turning the extruder on." +msgstr "打開擠出機將執行此段 G-code。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_pos_abs label" +msgid "Extruder Start Position Absolute" +msgstr "擠出機起點絕對位置" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_pos_abs description" +msgid "" +"Make the extruder starting position absolute rather than relative to the " +"last-known location of the head." +msgstr "讓擠出機以絕對位置做為起點,而不是與前一次位置的相對位置。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_pos_x label" +msgid "Extruder Start Position X" +msgstr "擠出機起始位置 X 座標" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_pos_x description" +msgid "The x-coordinate of the starting position when turning the extruder on." +msgstr "打開擠出機時起始位置的 X 座標。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_pos_y label" +msgid "Extruder Start Position Y" +msgstr "擠出機起始位置 Y 座標" + +#: fdmextruder.def.json +msgctxt "machine_extruder_start_pos_y description" +msgid "The y-coordinate of the starting position when turning the extruder on." +msgstr "打開擠壓機時的起始位置 Y 座標。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_code label" +msgid "Extruder End G-Code" +msgstr "擠出機結束 Gcode" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_code description" +msgid "End g-code to execute whenever turning the extruder off." +msgstr "在關閉擠出機時,執行結束 G-code。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_pos_abs label" +msgid "Extruder End Position Absolute" +msgstr "擠出機終點絕對位置" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_pos_abs description" +msgid "" +"Make the extruder ending position absolute rather than relative to the last-" +"known location of the head." +msgstr "讓擠出機以絕對位置為終點,而不是與前一次位置的相對位置。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_pos_x label" +msgid "Extruder End Position X" +msgstr "擠出機結束位置 X 座標" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_pos_x description" +msgid "The x-coordinate of the ending position when turning the extruder off." +msgstr "關閉擠出機時的終止位置的 X 座標。" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_pos_y label" +msgid "Extruder End Position Y" +msgstr "擠出機終點位置 Y 座標" + +#: fdmextruder.def.json +msgctxt "machine_extruder_end_pos_y description" +msgid "The y-coordinate of the ending position when turning the extruder off." +msgstr "關閉擠出機時的終止位置的 Y 座標。" + +#: fdmextruder.def.json +msgctxt "extruder_prime_pos_z label" +msgid "Extruder Prime Z Position" +msgstr "擠出機初始 Z 軸位置" + +#: fdmextruder.def.json +msgctxt "extruder_prime_pos_z description" +msgid "" +"The Z coordinate of the position where the nozzle primes at the start of " +"printing." +msgstr "列印開始時,噴頭在 Z 軸座標上的起始位置." + +#: fdmextruder.def.json +msgctxt "platform_adhesion label" +msgid "Build Plate Adhesion" +msgstr "列印平台附著" + +#: fdmextruder.def.json +msgctxt "platform_adhesion description" +msgid "Adhesion" +msgstr "附著" + +#: fdmextruder.def.json +msgctxt "extruder_prime_pos_x label" +msgid "Extruder Prime X Position" +msgstr "擠出機 X 軸座標" + +#: fdmextruder.def.json +msgctxt "extruder_prime_pos_x description" +msgid "" +"The X coordinate of the position where the nozzle primes at the start of " +"printing." +msgstr "列印開始時,噴頭在 X 軸上初始位置。" + +#: fdmextruder.def.json +msgctxt "extruder_prime_pos_y label" +msgid "Extruder Prime Y Position" +msgstr "擠出機 Y 軸起始位置" + +#: fdmextruder.def.json +msgctxt "extruder_prime_pos_y description" +msgid "" +"The Y coordinate of the position where the nozzle primes at the start of " +"printing." +msgstr "列印開始時,噴頭在 Y 軸座標上初始位置。" diff --git a/resources/i18n/zh_TW/fdmprinter.def.json.po b/resources/i18n/zh_TW/fdmprinter.def.json.po new file mode 100644 index 0000000000..2be6fbeefe --- /dev/null +++ b/resources/i18n/zh_TW/fdmprinter.def.json.po @@ -0,0 +1,6222 @@ +# Cura JSON setting files +# Copyright (C) 2017 Ultimaker +# This file is distributed under the same license as the Cura package. +# Ruben Dulek , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Cura 3.1\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" +"POT-Creation-Date: 2017-08-02 16:53+0000\n" +"PO-Revision-Date: 2017-11-25 00:31+0800\n" +"Last-Translator: Zhang Heh Ji \n" +"Language-Team: TEAM\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.4\n" + +#: fdmprinter.def.json +msgctxt "machine_settings label" +msgid "Machine" +msgstr "機器" + +#: fdmprinter.def.json +msgctxt "machine_settings description" +msgid "Machine specific settings" +msgstr "機器詳細設定" + +#: fdmprinter.def.json +msgctxt "machine_name label" +msgid "Machine Type" +msgstr "機器類型" + +#: fdmprinter.def.json +msgctxt "machine_name description" +msgid "The name of your 3D printer model." +msgstr "你的 3D 印表機型號的名稱。" + +#: fdmprinter.def.json +msgctxt "machine_show_variants label" +msgid "Show Machine Variants" +msgstr "顯示印表機型號" + +#: fdmprinter.def.json +msgctxt "machine_show_variants description" +msgid "" +"Whether to show the different variants of this machine, which are described " +"in separate json files." +msgstr "是否顯示這台印表機在不同的 JSON 檔案中所描述的型號。" + +#: fdmprinter.def.json +msgctxt "machine_start_gcode label" +msgid "Start GCode" +msgstr "起始 G-code" + +#: fdmprinter.def.json +msgctxt "machine_start_gcode description" +msgid "" +"Gcode commands to be executed at the very start - separated by \n" +"." +msgstr "" +"在開始後執行的 G-code 命令 - 以 \n" +" 分行。" + +#: fdmprinter.def.json +msgctxt "machine_end_gcode label" +msgid "End GCode" +msgstr "結束 G-code" + +#: fdmprinter.def.json +msgctxt "machine_end_gcode description" +msgid "" +"Gcode commands to be executed at the very end - separated by \n" +"." +msgstr "" +"在結束前執行的 G-code 命令 - 以 \n" +" 分行。" + +#: fdmprinter.def.json +msgctxt "material_guid label" +msgid "Material GUID" +msgstr "耗材 GUID" + +#: fdmprinter.def.json +msgctxt "material_guid description" +msgid "GUID of the material. This is set automatically. " +msgstr "耗材 GUID,此項為自動設定。" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_wait label" +msgid "Wait for Build Plate Heatup" +msgstr "等待列印平台加熱" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_wait description" +msgid "" +"Whether to insert a command to wait until the build plate temperature is " +"reached at the start." +msgstr "是否插入一條命令,在開始時等待列印平台達到設定溫度。" + +#: fdmprinter.def.json +msgctxt "material_print_temp_wait label" +msgid "Wait for Nozzle Heatup" +msgstr "等待噴頭加熱" + +#: fdmprinter.def.json +msgctxt "material_print_temp_wait description" +msgid "Whether to wait until the nozzle temperature is reached at the start." +msgstr "是否在開始時等待噴頭達到設定溫度。" + +#: fdmprinter.def.json +msgctxt "material_print_temp_prepend label" +msgid "Include Material Temperatures" +msgstr "插入耗材溫度" + +#: fdmprinter.def.json +msgctxt "material_print_temp_prepend description" +msgid "" +"Whether to include nozzle temperature commands at the start of the gcode. " +"When the start_gcode already contains nozzle temperature commands Cura " +"frontend will automatically disable this setting." +msgstr "" +"是否在 G-code 開始部分插入噴頭溫度命令。當起始 G-code 已包含噴頭溫度命令時," +"Cura 前端將自動關閉此設定。" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_prepend label" +msgid "Include Build Plate Temperature" +msgstr "插入熱床溫度" + +#: fdmprinter.def.json +msgctxt "material_bed_temp_prepend description" +msgid "" +"Whether to include build plate temperature commands at the start of the " +"gcode. When the start_gcode already contains build plate temperature " +"commands Cura frontend will automatically disable this setting." +msgstr "" +"是否需要在 G-code 開始部分插入熱床溫度的命令。當起始 G-code 包含熱床溫度命令" +"時,Cura 前端將自動關閉此設定。" + +#: fdmprinter.def.json +msgctxt "machine_width label" +msgid "Machine Width" +msgstr "機器寬度" + +#: fdmprinter.def.json +msgctxt "machine_width description" +msgid "The width (X-direction) of the printable area." +msgstr "機器可列印區域寬度(X 座標)" + +#: fdmprinter.def.json +msgctxt "machine_depth label" +msgid "Machine Depth" +msgstr "機器深度" + +#: fdmprinter.def.json +msgctxt "machine_depth description" +msgid "The depth (Y-direction) of the printable area." +msgstr "機器可列印區域深度(Y 座標)" + +#: fdmprinter.def.json +msgctxt "machine_shape label" +msgid "Build Plate Shape" +msgstr "列印平台形狀" + +#: fdmprinter.def.json +msgctxt "machine_shape description" +msgid "" +"The shape of the build plate without taking unprintable areas into account." +msgstr "列印平台形狀(不計算不可列印區域)。" + +#: fdmprinter.def.json +msgctxt "machine_shape option rectangular" +msgid "Rectangular" +msgstr "矩形" + +#: fdmprinter.def.json +msgctxt "machine_shape option elliptic" +msgid "Elliptic" +msgstr "類圓形" + +#: fdmprinter.def.json +msgctxt "machine_height label" +msgid "Machine Height" +msgstr "機器高度" + +#: fdmprinter.def.json +msgctxt "machine_height description" +msgid "The height (Z-direction) of the printable area." +msgstr "機器可列印區域高度(Z 座標)" + +#: fdmprinter.def.json +msgctxt "machine_heated_bed label" +msgid "Has Heated Build Plate" +msgstr "有熱床" + +#: fdmprinter.def.json +msgctxt "machine_heated_bed description" +msgid "Whether the machine has a heated build plate present." +msgstr "機器是否有熱床。" + +#: fdmprinter.def.json +msgctxt "machine_center_is_zero label" +msgid "Is Center Origin" +msgstr "原點是否位於中心" + +#: fdmprinter.def.json +msgctxt "machine_center_is_zero description" +msgid "" +"Whether the X/Y coordinates of the zero position of the printer is at the " +"center of the printable area." +msgstr "印表機的 X/Y 座標原點是否位於可列印區域的中心。" + +#: fdmprinter.def.json +msgctxt "machine_extruder_count label" +msgid "Number of Extruders" +msgstr "擠出機數目" + +#: fdmprinter.def.json +msgctxt "machine_extruder_count description" +msgid "" +"Number of extruder trains. An extruder train is the combination of a feeder, " +"bowden tube, and nozzle." +msgstr "擠出機組數目。擠出機組是指進料裝置、喉管和噴頭的組合。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_tip_outer_diameter label" +msgid "Outer nozzle diameter" +msgstr "噴頭外徑" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_tip_outer_diameter description" +msgid "The outer diameter of the tip of the nozzle." +msgstr "噴頭尖端的外徑。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_head_distance label" +msgid "Nozzle length" +msgstr "噴頭長度" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_head_distance description" +msgid "" +"The height difference between the tip of the nozzle and the lowest part of " +"the print head." +msgstr "噴頭尖端與列印頭最低部分之間的高度差。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_expansion_angle label" +msgid "Nozzle angle" +msgstr "噴頭角度" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_expansion_angle description" +msgid "" +"The angle between the horizontal plane and the conical part right above the " +"tip of the nozzle." +msgstr "水平面與噴頭尖端上部圓錐形之間的角度。" + +#: fdmprinter.def.json +msgctxt "machine_heat_zone_length label" +msgid "Heat zone length" +msgstr "加熱區長度" + +#: fdmprinter.def.json +msgctxt "machine_heat_zone_length description" +msgid "" +"The distance from the tip of the nozzle in which heat from the nozzle is " +"transferred to the filament." +msgstr "與噴頭尖端的距離,噴頭產生的熱量在這段距離內傳遞到耗材中。" + +#: fdmprinter.def.json +msgctxt "machine_filament_park_distance label" +msgid "Filament Park Distance" +msgstr "耗材停放距離" + +#: fdmprinter.def.json +msgctxt "machine_filament_park_distance description" +msgid "" +"The distance from the tip of the nozzle where to park the filament when an " +"extruder is no longer used." +msgstr "與噴頭尖端的距離,當不再使用擠出機時會將耗材停放在此區域。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_temp_enabled label" +msgid "Enable Nozzle Temperature Control" +msgstr "啟用噴頭溫度控制" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_temp_enabled description" +msgid "" +"Whether to control temperature from Cura. Turn this off to control nozzle " +"temperature from outside of Cura." +msgstr "是否從 Cura 控制溫度。若要從 Cura 外部控制噴頭溫度,關閉此選項。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_heat_up_speed label" +msgid "Heat up speed" +msgstr "加熱速度" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_heat_up_speed description" +msgid "" +"The speed (°C/s) by which the nozzle heats up averaged over the window of " +"normal printing temperatures and the standby temperature." +msgstr "噴頭從待機溫度加熱到列印溫度的平均速度(℃/ s)。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_cool_down_speed label" +msgid "Cool down speed" +msgstr "冷卻速度" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_cool_down_speed description" +msgid "" +"The speed (°C/s) by which the nozzle cools down averaged over the window of " +"normal printing temperatures and the standby temperature." +msgstr "噴頭從列印溫度冷卻到待機溫度的平均速度(℃/ s)。" + +#: fdmprinter.def.json +msgctxt "machine_min_cool_heat_time_window label" +msgid "Minimal Time Standby Temperature" +msgstr "待機溫度最短時間" + +#: fdmprinter.def.json +msgctxt "machine_min_cool_heat_time_window description" +msgid "" +"The minimal time an extruder has to be inactive before the nozzle is cooled. " +"Only when an extruder is not used for longer than this time will it be " +"allowed to cool down to the standby temperature." +msgstr "" +"擠出機必須保持不活動以便噴頭冷卻的最短時間。擠出機必須停用超過此時間,才可以" +"冷卻到待機溫度。" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor label" +msgid "Gcode flavour" +msgstr "G-code 類型" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor description" +msgid "The type of gcode to be generated." +msgstr "需要產生的 G-code 類型。" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option RepRap (Marlin/Sprinter)" +msgid "Marlin" +msgstr "Marlin" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option RepRap (Volumetric)" +msgid "Marlin (Volumetric)" +msgstr "Marlin(容積)" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option RepRap (RepRap)" +msgid "RepRap" +msgstr "RepRap" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option UltiGCode" +msgid "Ultimaker 2" +msgstr "Ultimaker 2" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option Griffin" +msgid "Griffin" +msgstr "Griffin" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option Makerbot" +msgid "Makerbot" +msgstr "Makerbot" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option BFB" +msgid "Bits from Bytes" +msgstr "Bits from Bytes" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option MACH3" +msgid "Mach3" +msgstr "Mach3" + +#: fdmprinter.def.json +msgctxt "machine_gcode_flavor option Repetier" +msgid "Repetier" +msgstr "Repetier" + +#: fdmprinter.def.json +msgctxt "machine_disallowed_areas label" +msgid "Disallowed areas" +msgstr "不允許區域" + +#: fdmprinter.def.json +msgctxt "machine_disallowed_areas description" +msgid "A list of polygons with areas the print head is not allowed to enter." +msgstr "不允許列印頭進入區域的多邊形列表。" + +#: fdmprinter.def.json +msgctxt "nozzle_disallowed_areas label" +msgid "Nozzle Disallowed Areas" +msgstr "噴頭不允許區域" + +#: fdmprinter.def.json +msgctxt "nozzle_disallowed_areas description" +msgid "A list of polygons with areas the nozzle is not allowed to enter." +msgstr "不允許噴頭進入區域的多邊形列表。" + +#: fdmprinter.def.json +msgctxt "machine_head_polygon label" +msgid "Machine head polygon" +msgstr "機器頭多邊形" + +#: fdmprinter.def.json +msgctxt "machine_head_polygon description" +msgid "A 2D silhouette of the print head (fan caps excluded)." +msgstr "列印頭 2D 輪廓圖(不包含風扇蓋)。" + +#: fdmprinter.def.json +msgctxt "machine_head_with_fans_polygon label" +msgid "Machine head & Fan polygon" +msgstr "機器頭和風扇多邊形" + +#: fdmprinter.def.json +msgctxt "machine_head_with_fans_polygon description" +msgid "A 2D silhouette of the print head (fan caps included)." +msgstr "列印頭 2D 輪廓圖(包含風扇蓋)。" + +#: fdmprinter.def.json +msgctxt "gantry_height label" +msgid "Gantry height" +msgstr "吊車高度" + +#: fdmprinter.def.json +msgctxt "gantry_height description" +msgid "" +"The height difference between the tip of the nozzle and the gantry system (X " +"and Y axes)." +msgstr "噴頭尖端與吊車之間的高度差。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_id label" +msgid "Nozzle ID" +msgstr "噴頭 ID" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_id description" +msgid "The nozzle ID for an extruder train, such as \"AA 0.4\" and \"BB 0.8\"." +msgstr "擠出機組的噴頭 ID,比如\"AA 0.4\"和\"BB 0.8\"。" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_size label" +msgid "Nozzle Diameter" +msgstr "噴頭直徑" + +#: fdmprinter.def.json +msgctxt "machine_nozzle_size description" +msgid "" +"The inner diameter of the nozzle. Change this setting when using a non-" +"standard nozzle size." +msgstr "噴頭內徑,在使用非標準噴頭尺寸時需更改此設定。" + +#: fdmprinter.def.json +msgctxt "machine_use_extruder_offset_to_offset_coords label" +msgid "Offset With Extruder" +msgstr "擠出機偏移量" + +#: fdmprinter.def.json +msgctxt "machine_use_extruder_offset_to_offset_coords description" +msgid "Apply the extruder offset to the coordinate system." +msgstr "將擠出機偏移量套用到座標軸系統。" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_z label" +msgid "Extruder Prime Z Position" +msgstr "擠出機初始 Z 軸位置" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_z description" +msgid "" +"The Z coordinate of the position where the nozzle primes at the start of " +"printing." +msgstr "列印開始時,噴頭在 Z 軸座標上的起始位置." + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_abs label" +msgid "Absolute Extruder Prime Position" +msgstr "擠出機使用絕對位置" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_abs description" +msgid "" +"Make the extruder prime position absolute rather than relative to the last-" +"known location of the head." +msgstr "擠出機的控制參數使用絕對位置,而不是與前次位置的相對位移。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_x label" +msgid "Maximum Speed X" +msgstr "X 軸最大速度" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_x description" +msgid "The maximum speed for the motor of the X-direction." +msgstr "X 軸方向馬達的最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_y label" +msgid "Maximum Speed Y" +msgstr "Y 軸最大速度" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_y description" +msgid "The maximum speed for the motor of the Y-direction." +msgstr "Y 軸方向馬達的最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_z label" +msgid "Maximum Speed Z" +msgstr "Z 軸最大速度" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_z description" +msgid "The maximum speed for the motor of the Z-direction." +msgstr "Z 軸方向馬達的最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_e label" +msgid "Maximum Feedrate" +msgstr "最大進料速率" + +#: fdmprinter.def.json +msgctxt "machine_max_feedrate_e description" +msgid "The maximum speed of the filament." +msgstr "耗材的最大速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_x label" +msgid "Maximum Acceleration X" +msgstr "X 軸最大加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_x description" +msgid "Maximum acceleration for the motor of the X-direction" +msgstr "X 軸方向馬達的最大加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_y label" +msgid "Maximum Acceleration Y" +msgstr "Y 軸最大加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_y description" +msgid "Maximum acceleration for the motor of the Y-direction." +msgstr "Y 軸方向馬達的最大加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_z label" +msgid "Maximum Acceleration Z" +msgstr "Z 軸最大加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_z description" +msgid "Maximum acceleration for the motor of the Z-direction." +msgstr "Z 軸方向馬達的最大加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_e label" +msgid "Maximum Filament Acceleration" +msgstr "擠出馬達最大加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_acceleration_e description" +msgid "Maximum acceleration for the motor of the filament." +msgstr "擠出馬達的最大加速度。" + +#: fdmprinter.def.json +msgctxt "machine_acceleration label" +msgid "Default Acceleration" +msgstr "預設加速度" + +#: fdmprinter.def.json +msgctxt "machine_acceleration description" +msgid "The default acceleration of print head movement." +msgstr "列印頭移動的預設加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_xy label" +msgid "Default X-Y Jerk" +msgstr "預設 X-Y 平面加加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_xy description" +msgid "Default jerk for movement in the horizontal plane." +msgstr "水平面移動的預設加加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_z label" +msgid "Default Z Jerk" +msgstr "預設 Z 軸加加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_z description" +msgid "Default jerk for the motor of the Z-direction." +msgstr "Z 軸方向馬達的預設加加速度。" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_e label" +msgid "Default Filament Jerk" +msgstr "預設擠出馬達加加速度" + +#: fdmprinter.def.json +msgctxt "machine_max_jerk_e description" +msgid "Default jerk for the motor of the filament." +msgstr "擠出馬達的預設加加速度。" + +#: fdmprinter.def.json +msgctxt "machine_minimum_feedrate label" +msgid "Minimum Feedrate" +msgstr "最小進料速率" + +#: fdmprinter.def.json +msgctxt "machine_minimum_feedrate description" +msgid "The minimal movement speed of the print head." +msgstr "列印頭的最低移動速度。" + +#: fdmprinter.def.json +msgctxt "resolution label" +msgid "Quality" +msgstr "品質" + +#: fdmprinter.def.json +msgctxt "resolution description" +msgid "" +"All settings that influence the resolution of the print. These settings have " +"a large impact on the quality (and print time)" +msgstr "影響列印解析度的所有設定。這些設定會對品質(和列印時間)產生顯著影響" + +#: fdmprinter.def.json +msgctxt "layer_height label" +msgid "Layer Height" +msgstr "層高" + +#: fdmprinter.def.json +msgctxt "layer_height description" +msgid "" +"The height of each layer in mm. Higher values produce faster prints in lower " +"resolution, lower values produce slower prints in higher resolution." +msgstr "" +"每層的高度(以毫米為單位)。值越高,則列印速度越快,解析度越低;值越低,則列" +"印速度越慢,解析度越高。" + +#: fdmprinter.def.json +msgctxt "layer_height_0 label" +msgid "Initial Layer Height" +msgstr "起始層高" + +#: fdmprinter.def.json +msgctxt "layer_height_0 description" +msgid "" +"The height of the initial layer in mm. A thicker initial layer makes " +"adhesion to the build plate easier." +msgstr "起始層高(以毫米為單位)。起始層越厚,與列印平台的附著越輕鬆。" + +#: fdmprinter.def.json +msgctxt "slicing_tolerance label" +msgid "Slicing Tolerance" +msgstr "切片公差" + +#: fdmprinter.def.json +msgctxt "slicing_tolerance description" +msgid "" +"How to slice layers with diagonal surfaces. The areas of a layer can be " +"generated based on where the middle of the layer intersects the surface " +"(Middle). Alternatively each layer can have the areas which fall inside of " +"the volume throughout the height of the layer (Exclusive) or a layer has the " +"areas which fall inside anywhere within the layer (Inclusive). Exclusive " +"retains the most details, Inclusive makes for the best fit and Middle takes " +"the least time to process." +msgstr "" +"如何使用傾斜的外表切片。可以使用層高的中間與外表相交產生的截面(中間)。也可" +"以使用該層高完全不超出模型體積的區域(排除),或是該層高的模型投影區域(包" +"含)。「排除」保留最多的細節,「包含」有最符合的外形,而「中間」花最少的運算" +"時間。" + +#: fdmprinter.def.json +msgctxt "slicing_tolerance option middle" +msgid "Middle" +msgstr "中間" + +#: fdmprinter.def.json +msgctxt "slicing_tolerance option exclusive" +msgid "Exclusive" +msgstr "排除" + +#: fdmprinter.def.json +msgctxt "slicing_tolerance option inclusive" +msgid "Inclusive" +msgstr "包含" + +#: fdmprinter.def.json +msgctxt "line_width label" +msgid "Line Width" +msgstr "線寬" + +#: fdmprinter.def.json +msgctxt "line_width description" +msgid "" +"Width of a single line. Generally, the width of each line should correspond " +"to the width of the nozzle. However, slightly reducing this value could " +"produce better prints." +msgstr "" +"單一線寬。一般而言,每條線條的寬度應與噴頭的寬度對應。但是,稍微降低此值可以" +"產生更好的列印成果。" + +#: fdmprinter.def.json +msgctxt "wall_line_width label" +msgid "Wall Line Width" +msgstr "牆壁線寬" + +#: fdmprinter.def.json +msgctxt "wall_line_width description" +msgid "Width of a single wall line." +msgstr "單層牆壁線寬。" + +#: fdmprinter.def.json +msgctxt "wall_line_width_0 label" +msgid "Outer Wall Line Width" +msgstr "線寬(外壁)" + +#: fdmprinter.def.json +msgctxt "wall_line_width_0 description" +msgid "" +"Width of the outermost wall line. By lowering this value, higher levels of " +"detail can be printed." +msgstr "最外側牆壁的線寬。降低此值,可列印出更高水準的細節。" + +#: fdmprinter.def.json +msgctxt "wall_line_width_x label" +msgid "Inner Wall(s) Line Width" +msgstr "內壁線寬" + +#: fdmprinter.def.json +msgctxt "wall_line_width_x description" +msgid "" +"Width of a single wall line for all wall lines except the outermost one." +msgstr "除了外壁以外牆壁的線寬。" + +#: fdmprinter.def.json +msgctxt "roofing_line_width label" +msgid "Top Surface Skin Line Width" +msgstr "頂部表層線寬" + +#: fdmprinter.def.json +msgctxt "roofing_line_width description" +msgid "Width of a single line of the areas at the top of the print." +msgstr "列印頂部區域單一線寬。" + +#: fdmprinter.def.json +msgctxt "skin_line_width label" +msgid "Top/Bottom Line Width" +msgstr "頂部/底部線寬" + +#: fdmprinter.def.json +msgctxt "skin_line_width description" +msgid "Width of a single top/bottom line." +msgstr "單一頂部/底部線寬。" + +#: fdmprinter.def.json +msgctxt "infill_line_width label" +msgid "Infill Line Width" +msgstr "填充線寬" + +#: fdmprinter.def.json +msgctxt "infill_line_width description" +msgid "Width of a single infill line." +msgstr "單一填充線寬。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_line_width label" +msgid "Skirt/Brim Line Width" +msgstr "外圍/邊緣線寬" + +#: fdmprinter.def.json +msgctxt "skirt_brim_line_width description" +msgid "Width of a single skirt or brim line." +msgstr "單一外圍或邊緣的線寬。" + +#: fdmprinter.def.json +msgctxt "support_line_width label" +msgid "Support Line Width" +msgstr "支撐線寬" + +#: fdmprinter.def.json +msgctxt "support_line_width description" +msgid "Width of a single support structure line." +msgstr "單一支撐線寬。" + +#: fdmprinter.def.json +msgctxt "support_interface_line_width label" +msgid "Support Interface Line Width" +msgstr "支撐介面線寬" + +#: fdmprinter.def.json +msgctxt "support_interface_line_width description" +msgid "Width of a single line of support roof or floor." +msgstr "支撐頂板或底板單一線寬。" + +#: fdmprinter.def.json +msgctxt "support_roof_line_width label" +msgid "Support Roof Line Width" +msgstr "支撐頂板線寬" + +#: fdmprinter.def.json +msgctxt "support_roof_line_width description" +msgid "Width of a single support roof line." +msgstr "單一支撐頂板線寬。" + +#: fdmprinter.def.json +msgctxt "support_bottom_line_width label" +msgid "Support Floor Line Width" +msgstr "支撐底板線寬" + +#: fdmprinter.def.json +msgctxt "support_bottom_line_width description" +msgid "Width of a single support floor line." +msgstr "單一支撐底板線寬。" + +#: fdmprinter.def.json +msgctxt "prime_tower_line_width label" +msgid "Prime Tower Line Width" +msgstr "換料塔線寬" + +#: fdmprinter.def.json +msgctxt "prime_tower_line_width description" +msgid "Width of a single prime tower line." +msgstr "單一換料塔線寬。" + +#: fdmprinter.def.json +msgctxt "initial_layer_line_width_factor label" +msgid "Initial Layer Line Width" +msgstr "起始層線寬" + +#: fdmprinter.def.json +msgctxt "initial_layer_line_width_factor description" +msgid "" +"Multiplier of the line width on the first layer. Increasing this could " +"improve bed adhesion." +msgstr "第一層線寬倍數。增大此倍數可改善熱床附著。" + +#: fdmprinter.def.json +msgctxt "shell label" +msgid "Shell" +msgstr "外殼" + +#: fdmprinter.def.json +msgctxt "shell description" +msgid "Shell" +msgstr "外殼" + +#: fdmprinter.def.json +msgctxt "wall_extruder_nr label" +msgid "Wall Extruder" +msgstr "牆壁擠出機" + +#: fdmprinter.def.json +msgctxt "wall_extruder_nr description" +msgid "" +"The extruder train used for printing the walls. This is used in multi-" +"extrusion." +msgstr "用於列印牆壁的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "wall_0_extruder_nr label" +msgid "Outer Wall Extruder" +msgstr "外壁擠出機" + +#: fdmprinter.def.json +msgctxt "wall_0_extruder_nr description" +msgid "" +"The extruder train used for printing the outer wall. This is used in multi-" +"extrusion." +msgstr "用於列印外壁的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "wall_x_extruder_nr label" +msgid "Inner Wall Extruder" +msgstr "內壁擠出機" + +#: fdmprinter.def.json +msgctxt "wall_x_extruder_nr description" +msgid "" +"The extruder train used for printing the inner walls. This is used in multi-" +"extrusion." +msgstr "用於列印內壁的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "wall_thickness label" +msgid "Wall Thickness" +msgstr "壁厚" + +#: fdmprinter.def.json +msgctxt "wall_thickness description" +msgid "" +"The thickness of the walls in the horizontal direction. This value divided " +"by the wall line width defines the number of walls." +msgstr "水平方向的牆壁厚度。此值除以壁線寬度決定牆壁數量。" + +#: fdmprinter.def.json +msgctxt "wall_line_count label" +msgid "Wall Line Count" +msgstr "牆壁線條圈數" + +#: fdmprinter.def.json +msgctxt "wall_line_count description" +msgid "" +"The number of walls. When calculated by the wall thickness, this value is " +"rounded to a whole number." +msgstr "牆壁的線條圈數,如果由壁厚計算,會四捨五入為一個整數值。" + +#: fdmprinter.def.json +msgctxt "wall_0_wipe_dist label" +msgid "Outer Wall Wipe Distance" +msgstr "外壁擦拭噴頭長度" + +#: fdmprinter.def.json +msgctxt "wall_0_wipe_dist description" +msgid "" +"Distance of a travel move inserted after the outer wall, to hide the Z seam " +"better." +msgstr "在列印外壁後插入的空跑距離,以便消除隱藏 Z 縫的銜接痕跡。" + +#: fdmprinter.def.json +msgctxt "roofing_extruder_nr label" +msgid "Top Surface Skin Extruder" +msgstr "頂部表層擠出機" + +#: fdmprinter.def.json +msgctxt "roofing_extruder_nr description" +msgid "" +"The extruder train used for printing the top most skin. This is used in " +"multi-extrusion." +msgstr "用於列印最頂部表層的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "roofing_layer_count label" +msgid "Top Surface Skin Layers" +msgstr "頂部表層" + +#: fdmprinter.def.json +msgctxt "roofing_layer_count description" +msgid "" +"The number of top most skin layers. Usually only one top most layer is " +"sufficient to generate higher quality top surfaces." +msgstr "最頂部表層層數。通常只需一層最頂部就足以產生較高品質的頂部表面。" + +#: fdmprinter.def.json +msgctxt "roofing_pattern label" +msgid "Top Surface Skin Pattern" +msgstr "頂部表層列印樣式" + +#: fdmprinter.def.json +msgctxt "roofing_pattern description" +msgid "The pattern of the top most layers." +msgstr "最頂部列印樣式。" + +#: fdmprinter.def.json +msgctxt "roofing_pattern option lines" +msgid "Lines" +msgstr "線條" + +#: fdmprinter.def.json +msgctxt "roofing_pattern option concentric" +msgid "Concentric" +msgstr "同心" + +#: fdmprinter.def.json +msgctxt "roofing_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "roofing_angles label" +msgid "Top Surface Skin Line Directions" +msgstr "頂部表層線條方向" + +#: fdmprinter.def.json +msgctxt "roofing_angles description" +msgid "" +"A list of integer line directions to use when the top surface skin layers " +"use the lines or zig zag pattern. Elements from the list are used " +"sequentially as the layers progress and when the end of the list is reached, " +"it starts at the beginning again. The list items are separated by commas and " +"the whole list is contained in square brackets. Default is an empty list " +"which means use the traditional default angles (45 and 135 degrees)." +msgstr "" +"當頂部表層採用線條或鋸齒狀的列印樣式時使用的整數線條方向的列表。列表中的元素" +"隨層的進度依次使用,當達到列表末尾時,它將從頭開始。列表項以逗號分隔,整個列" +"表包含在方括號中。預設使用傳統的預設角度(45 和 135 度)。" + +#: fdmprinter.def.json +msgctxt "top_bottom_extruder_nr label" +msgid "Top/Bottom Extruder" +msgstr "頂部/底部擠出機" + +#: fdmprinter.def.json +msgctxt "top_bottom_extruder_nr description" +msgid "" +"The extruder train used for printing the top and bottom skin. This is used " +"in multi-extrusion." +msgstr "用於列印頂部和底部表層的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "top_bottom_thickness label" +msgid "Top/Bottom Thickness" +msgstr "頂部 / 底部厚度" + +#: fdmprinter.def.json +msgctxt "top_bottom_thickness description" +msgid "" +"The thickness of the top/bottom layers in the print. This value divided by " +"the layer height defines the number of top/bottom layers." +msgstr "列印模型中頂部/底部的厚度。該值除以層高決定頂部/底部的層數。" + +#: fdmprinter.def.json +msgctxt "top_thickness label" +msgid "Top Thickness" +msgstr "頂部厚度" + +#: fdmprinter.def.json +msgctxt "top_thickness description" +msgid "" +"The thickness of the top layers in the print. This value divided by the " +"layer height defines the number of top layers." +msgstr "列印模型中頂部的厚度。該值除以層高決定頂部的層數。" + +#: fdmprinter.def.json +msgctxt "top_layers label" +msgid "Top Layers" +msgstr "頂部層數" + +#: fdmprinter.def.json +msgctxt "top_layers description" +msgid "" +"The number of top layers. When calculated by the top thickness, this value " +"is rounded to a whole number." +msgstr "頂部列印層數,當由頂部厚度來計算時層數時,會四捨五入為一個整數值。" + +#: fdmprinter.def.json +msgctxt "bottom_thickness label" +msgid "Bottom Thickness" +msgstr "底部厚度" + +#: fdmprinter.def.json +msgctxt "bottom_thickness description" +msgid "" +"The thickness of the bottom layers in the print. This value divided by the " +"layer height defines the number of bottom layers." +msgstr "列印模型中底部的厚度。此值除以層高決定底部的層數。" + +#: fdmprinter.def.json +msgctxt "bottom_layers label" +msgid "Bottom Layers" +msgstr "底部層數" + +#: fdmprinter.def.json +msgctxt "bottom_layers description" +msgid "" +"The number of bottom layers. When calculated by the bottom thickness, this " +"value is rounded to a whole number." +msgstr "底部列印層數,當由底部厚度來計算時層數時,會四捨五入為一個整數值。" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern label" +msgid "Top/Bottom Pattern" +msgstr "頂部/底部填充樣式" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern description" +msgid "The pattern of the top/bottom layers." +msgstr "頂部/底部的列印樣式。" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern option lines" +msgid "Lines" +msgstr "直線" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern option concentric" +msgid "Concentric" +msgstr "同心圓" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 label" +msgid "Bottom Pattern Initial Layer" +msgstr "初始層列印樣式" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 description" +msgid "The pattern on the bottom of the print on the first layer." +msgstr "列印件底部第一層的列印樣式。" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 option lines" +msgid "Lines" +msgstr "直線" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 option concentric" +msgid "Concentric" +msgstr "同心圓" + +#: fdmprinter.def.json +msgctxt "top_bottom_pattern_0 option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "skin_angles label" +msgid "Top/Bottom Line Directions" +msgstr "頂部/底部線條方向" + +#: fdmprinter.def.json +msgctxt "skin_angles description" +msgid "" +"A list of integer line directions to use when the top/bottom layers use the " +"lines or zig zag pattern. Elements from the list are used sequentially as " +"the layers progress and when the end of the list is reached, it starts at " +"the beginning again. The list items are separated by commas and the whole " +"list is contained in square brackets. Default is an empty list which means " +"use the traditional default angles (45 and 135 degrees)." +msgstr "" +"當頂部/底部採用線條或鋸齒狀的列印樣式時使用的整數線條方向的列表。列表中的元素" +"隨層的進度依次使用,當達到列表末尾時,它將從頭開始。列表元素以逗號分隔,整個" +"列表包含在方括號中。空的列表代表使用傳統的預設角度(45 和 135 度)。" + +#: fdmprinter.def.json +msgctxt "wall_0_inset label" +msgid "Outer Wall Inset" +msgstr "外壁內嵌" + +#: fdmprinter.def.json +msgctxt "wall_0_inset description" +msgid "" +"Inset applied to the path of the outer wall. If the outer wall is smaller " +"than the nozzle, and printed after the inner walls, use this offset to get " +"the hole in the nozzle to overlap with the inner walls instead of the " +"outside of the model." +msgstr "" +"內嵌是套用在外壁路徑上的功能。如果外壁小於噴頭,並且在內壁之後列印,則此偏移" +"量將使噴頭孔內移與內壁重疊而不是行走在模型外部。" + +#: fdmprinter.def.json +msgctxt "outer_inset_first label" +msgid "Outer Before Inner Walls" +msgstr "先印外壁後印內壁" + +#: fdmprinter.def.json +msgctxt "outer_inset_first description" +msgid "" +"Prints walls in order of outside to inside when enabled. This can help " +"improve dimensional accuracy in X and Y when using a high viscosity plastic " +"like ABS; however it can decrease outer surface print quality, especially on " +"overhangs." +msgstr "" +"啟用時以從外向內的順序列印壁。當使用高黏度塑料如 ABS 時,這有助於提高 X 和 Y " +"的尺寸精度;但是,它可能會降低外表面列印品質,特别是在懸垂部分。" + +#: fdmprinter.def.json +msgctxt "alternate_extra_perimeter label" +msgid "Alternate Extra Wall" +msgstr "交錯額外牆壁" + +#: fdmprinter.def.json +msgctxt "alternate_extra_perimeter description" +msgid "" +"Prints an extra wall at every other layer. This way infill gets caught " +"between these extra walls, resulting in stronger prints." +msgstr "" +"每兩層建立一個額外牆壁,這些額外的牆壁能更緊密地抓填充部分,產生較強壯的模" +"型。" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_enabled label" +msgid "Compensate Wall Overlaps" +msgstr "補償牆壁重疊" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_enabled description" +msgid "" +"Compensate the flow for parts of a wall being printed where there is already " +"a wall in place." +msgstr "彌補牆壁重疊部分的流量。" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_0_enabled label" +msgid "Compensate Outer Wall Overlaps" +msgstr "補償外壁重疊" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_0_enabled description" +msgid "" +"Compensate the flow for parts of an outer wall being printed where there is " +"already a wall in place." +msgstr "列印外壁時如果該位置已經有牆壁存在,所進行的的流量補償。" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_x_enabled label" +msgid "Compensate Inner Wall Overlaps" +msgstr "補償內壁重疊" + +#: fdmprinter.def.json +msgctxt "travel_compensate_overlapping_walls_x_enabled description" +msgid "" +"Compensate the flow for parts of an inner wall being printed where there is " +"already a wall in place." +msgstr "列印內壁時如果該位置已經有牆壁存在,所進行的的流量補償。" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps label" +msgid "Fill Gaps Between Walls" +msgstr "填充牆壁之間空隙" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps description" +msgid "Fills the gaps between walls where no walls fit." +msgstr "填充牆壁之間空隙。" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps option nowhere" +msgid "Nowhere" +msgstr "都不填充" + +#: fdmprinter.def.json +msgctxt "fill_perimeter_gaps option everywhere" +msgid "Everywhere" +msgstr "全部填充" + +#: fdmprinter.def.json +msgctxt "fill_outline_gaps label" +msgid "Print Thin Walls" +msgstr "列印薄壁" + +#: fdmprinter.def.json +msgctxt "fill_outline_gaps description" +msgid "" +"Print pieces of the model which are horizontally thinner than the nozzle " +"size." +msgstr "列印在水平面上比噴頭尺寸更薄的模型部件。" + +#: fdmprinter.def.json +msgctxt "xy_offset label" +msgid "Horizontal Expansion" +msgstr "水平擴展" + +#: fdmprinter.def.json +msgctxt "xy_offset description" +msgid "" +"Amount of offset applied to all polygons in each layer. Positive values can " +"compensate for too big holes; negative values can compensate for too small " +"holes." +msgstr "" +"如果模型有挖孔,以便用來組合、鑲嵌時,這個偏移量可以用來微調孔的大小,當設為" +"正值時,模型外擴,孔會變小;若設為負值,模型內縮,孔會變大。" + +#: fdmprinter.def.json +msgctxt "xy_offset_layer_0 label" +msgid "Initial Layer Horizontal Expansion" +msgstr "起始層水平擴展" + +#: fdmprinter.def.json +msgctxt "xy_offset_layer_0 description" +msgid "" +"Amount of offset applied to all polygons in the first layer. A negative " +"value can compensate for squishing of the first layer known as \"elephant's " +"foot\"." +msgstr "" +"套用到第一層所有多邊形的偏移量。負數值可以補償第一層的壓扁量(被稱為“象" +"脚”)。" + +#: fdmprinter.def.json +msgctxt "z_seam_type label" +msgid "Z Seam Alignment" +msgstr "Z 接縫對齊" + +#: fdmprinter.def.json +msgctxt "z_seam_type description" +msgid "" +"Starting point of each path in a layer. When paths in consecutive layers " +"start at the same point a vertical seam may show on the print. When aligning " +"these near a user specified location, the seam is easiest to remove. When " +"placed randomly the inaccuracies at the paths' start will be less " +"noticeable. When taking the shortest path the print will be quicker." +msgstr "" +"一層中每條路徑的起點。當連續多層的路徑從相同點開始時,則列印物上會顯示一條垂" +"直縫隙。如果將這些路徑靠近一個使用者指定的位置對齊,則縫隙最容易移除。如果隨" +"機放置,則路徑起點的不精準度將較不明顯。採用最短的路徑時,列印將更為快速。" + +#: fdmprinter.def.json +msgctxt "z_seam_type option back" +msgid "User Specified" +msgstr "使用者指定" + +#: fdmprinter.def.json +msgctxt "z_seam_type option shortest" +msgid "Shortest" +msgstr "最短" + +#: fdmprinter.def.json +msgctxt "z_seam_type option random" +msgid "Random" +msgstr "隨機" + +#: fdmprinter.def.json +msgctxt "z_seam_type option sharpest_corner" +msgid "Sharpest Corner" +msgstr "最尖銳的轉角" + +#: fdmprinter.def.json +msgctxt "z_seam_x label" +msgid "Z Seam X" +msgstr "Z 接縫 X 座標" + +#: fdmprinter.def.json +msgctxt "z_seam_x description" +msgid "" +"The X coordinate of the position near where to start printing each part in a " +"layer." +msgstr "位置的 X 軸座標,在該位置附近開始列印層中各個部分。" + +#: fdmprinter.def.json +msgctxt "z_seam_y label" +msgid "Z Seam Y" +msgstr "Z 接縫 Y 座標" + +#: fdmprinter.def.json +msgctxt "z_seam_y description" +msgid "" +"The Y coordinate of the position near where to start printing each part in a " +"layer." +msgstr "位置的 Y 軸座標,在該位置附近開始列印層中各個部分。" + +#: fdmprinter.def.json +msgctxt "z_seam_corner label" +msgid "Seam Corner Preference" +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 "" +"控制接縫是否受模型輪廓上的角影響。'無'表示轉角不影響接縫位置。'隱藏接縫'表示" +"使用盡可能使用凹角做為接縫位置。'暴露接縫'表示盡可能使用凸角做為接縫位置。'隱" +"藏或暴露接縫'則同時使用凹角和凸角做為接縫位置。" + +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_none" +msgid "None" +msgstr "無" + +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_inner" +msgid "Hide Seam" +msgstr "隱藏接縫" + +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_outer" +msgid "Expose Seam" +msgstr "暴露接縫" + +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_any" +msgid "Hide or Expose Seam" +msgstr "隱藏或暴露接縫" + +#: fdmprinter.def.json +msgctxt "z_seam_relative label" +msgid "Z Seam Relative" +msgstr "Z 接縫相對" + +#: fdmprinter.def.json +msgctxt "z_seam_relative description" +msgid "" +"When enabled, the z seam coordinates are relative to each part's centre. " +"When disabled, the coordinates define an absolute position on the build " +"plate." +msgstr "" +"啟用時,Z 接縫座標為相對於各個部分中心的值。關閉時,座標固定在列印平台上的一" +"個絕對位置。" + +#: fdmprinter.def.json +msgctxt "skin_no_small_gaps_heuristic label" +msgid "Ignore Small Z Gaps" +msgstr "忽略 Z 方向的小間隙" + +#: fdmprinter.def.json +msgctxt "skin_no_small_gaps_heuristic description" +msgid "" +"When the model has small vertical gaps, about 5% extra computation time can " +"be spent on generating top and bottom skin in these narrow spaces. In such " +"case, disable the setting." +msgstr "" +"當模型具有微小的垂直間隙時,為了在這些間隙上產生頂部、底部等表面,會花費大約" +"5%的額外的計算時間。勾選這個項目可以節省時間,但是間隙會消失,若要保留這些間" +"隙,不要勾選這個項目。" + +#: fdmprinter.def.json +msgctxt "skin_outline_count label" +msgid "Extra Skin Wall Count" +msgstr "額外表層牆壁計數" + +#: fdmprinter.def.json +msgctxt "skin_outline_count description" +msgid "" +"Replaces the outermost part of the top/bottom pattern with a number of " +"concentric lines. Using one or two lines improves roofs that start on infill " +"material." +msgstr "" +"用多個同心線代替頂部/底部列印樣式的最外面部分。使用一條或兩條線可以改善列印在" +"填充上的頂板。" + +#: fdmprinter.def.json +msgctxt "ironing_enabled label" +msgid "Enable Ironing" +msgstr "啟用燙平" + +#: fdmprinter.def.json +msgctxt "ironing_enabled description" +msgid "" +"Go over the top surface one additional time, but without extruding material. " +"This is meant to melt the plastic on top further, creating a smoother " +"surface." +msgstr "" +"再一次經過頂部表面,但不擠出耗材。這是為了進一步融化頂部的塑料,打造更平滑的" +"表面。" + +#: fdmprinter.def.json +msgctxt "ironing_only_highest_layer label" +msgid "Iron Only Highest Layer" +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 "" +"只在網格的最後一層進行燙平處理。 如果下層不需要光滑的表面,可啟用此選項以節省" +"時間。" + +#: fdmprinter.def.json +msgctxt "ironing_pattern label" +msgid "Ironing Pattern" +msgstr "燙平列印樣式" + +#: fdmprinter.def.json +msgctxt "ironing_pattern description" +msgid "The pattern to use for ironing top surfaces." +msgstr "用於燙平頂部表面的列印樣式。" + +#: fdmprinter.def.json +msgctxt "ironing_pattern option concentric" +msgid "Concentric" +msgstr "同心" + +#: fdmprinter.def.json +msgctxt "ironing_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "ironing_line_spacing label" +msgid "Ironing Line Spacing" +msgstr "燙平線條間距" + +#: fdmprinter.def.json +msgctxt "ironing_line_spacing description" +msgid "The distance between the lines of ironing." +msgstr "燙平線條之間的距離。" + +#: fdmprinter.def.json +msgctxt "ironing_flow label" +msgid "Ironing Flow" +msgstr "燙平流量" + +#: fdmprinter.def.json +msgctxt "ironing_flow description" +msgid "" +"The amount of material, relative to a normal skin line, to extrude during " +"ironing. Keeping the nozzle filled helps filling some of the crevices of the " +"top surface, but too much results in overextrusion and blips on the side of " +"the surface." +msgstr "" +"燙平期間相對於正常表層線條的擠出耗材量。保持噴頭填充狀态有助於填充頂部表面的" +"一些縫隙,但如填充過多則會導致表面上過度擠出和光點。" + +#: fdmprinter.def.json +msgctxt "ironing_inset label" +msgid "Ironing Inset" +msgstr "燙平內嵌" + +#: fdmprinter.def.json +msgctxt "ironing_inset description" +msgid "" +"A distance to keep from the edges of the model. Ironing all the way to the " +"edge of the mesh may result in a jagged edge on your print." +msgstr "" +"與模型邊緣保持的距離。一直燙平至網格的邊緣可能導致列印品出現鋸齒狀邊緣。" + +#: fdmprinter.def.json +msgctxt "speed_ironing label" +msgid "Ironing Speed" +msgstr "燙平速度" + +#: fdmprinter.def.json +msgctxt "speed_ironing description" +msgid "The speed at which to pass over the top surface." +msgstr "通過頂部表面的速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_ironing label" +msgid "Ironing Acceleration" +msgstr "燙平加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_ironing description" +msgid "The acceleration with which ironing is performed." +msgstr "執行燙平的加速度。" + +#: fdmprinter.def.json +msgctxt "jerk_ironing label" +msgid "Ironing Jerk" +msgstr "燙平加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_ironing description" +msgid "The maximum instantaneous velocity change while performing ironing." +msgstr "執行燙平時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "infill label" +msgid "Infill" +msgstr "填充" + +#: fdmprinter.def.json +msgctxt "infill description" +msgid "Infill" +msgstr "填充" + +#: fdmprinter.def.json +msgctxt "infill_extruder_nr label" +msgid "Infill Extruder" +msgstr "填充擠出機" + +#: fdmprinter.def.json +msgctxt "infill_extruder_nr description" +msgid "" +"The extruder train used for printing infill. This is used in multi-extrusion." +msgstr "用於列印填充的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "infill_sparse_density label" +msgid "Infill Density" +msgstr "填充密度" + +#: fdmprinter.def.json +msgctxt "infill_sparse_density description" +msgid "Adjusts the density of infill of the print." +msgstr "調整列印填充的密度。" + +#: fdmprinter.def.json +msgctxt "infill_line_distance label" +msgid "Infill Line Distance" +msgstr "填充線條距離" + +#: fdmprinter.def.json +msgctxt "infill_line_distance description" +msgid "" +"Distance between the printed infill lines. This setting is calculated by the " +"infill density and the infill line width." +msgstr "列印填充線條之間的距離。該設定是通過填充密度和填充線寬度計算。" + +#: fdmprinter.def.json +msgctxt "infill_pattern label" +msgid "Infill Pattern" +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, tri-hexagon, cubic, octet, quarter cubic, cross 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 "" +"填充耗材的樣式。線條和鋸齒狀填充輪流在每一層交換方向,以降低耗材成本。網格、" +"三角形、三-六邊形、立方體、八面體、四分立方體、十字形和同心的列印樣式在每層完" +"整列印。立方體、四分立方體和八面體填充隨每層變化,以在各個方向提供更均衡的强" +"度分布。" + +#: fdmprinter.def.json +msgctxt "infill_pattern option grid" +msgid "Grid" +msgstr "網格" + +#: fdmprinter.def.json +msgctxt "infill_pattern option lines" +msgid "Lines" +msgstr "直線" + +#: fdmprinter.def.json +msgctxt "infill_pattern option triangles" +msgid "Triangles" +msgstr "三角形" + +#: fdmprinter.def.json +msgctxt "infill_pattern option trihexagon" +msgid "Tri-Hexagon" +msgstr "三-六邊形" + +#: fdmprinter.def.json +msgctxt "infill_pattern option cubic" +msgid "Cubic" +msgstr "立方體" + +#: fdmprinter.def.json +msgctxt "infill_pattern option cubicsubdiv" +msgid "Cubic Subdivision" +msgstr "立方體細分" + +#: fdmprinter.def.json +msgctxt "infill_pattern option tetrahedral" +msgid "Octet" +msgstr "八面體" + +#: fdmprinter.def.json +msgctxt "infill_pattern option quarter_cubic" +msgid "Quarter Cubic" +msgstr "四分立方體" + +#: fdmprinter.def.json +msgctxt "infill_pattern option concentric" +msgid "Concentric" +msgstr "同心圓" + +#: fdmprinter.def.json +msgctxt "infill_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "立體同心圓" + +#: fdmprinter.def.json +msgctxt "infill_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "infill_pattern option cross" +msgid "Cross" +msgstr "十字形" + +#: fdmprinter.def.json +msgctxt "infill_pattern option cross_3d" +msgid "Cross 3D" +msgstr "立體十字形" + +#: fdmprinter.def.json +msgctxt "zig_zaggify_infill label" +msgid "Connect Infill Lines" +msgstr "連接填充線條" + +#: fdmprinter.def.json +msgctxt "zig_zaggify_infill description" +msgid "" +"Connect the ends where the infill pattern meets the inner wall using a line " +"which follows the shape of the inner wall. Enabling this setting can make " +"the infill adhere to the walls better and reduce the effects of infill on " +"the quality of vertical surfaces. Disabling this setting reduces the amount " +"of material used." +msgstr "" +"使用一條線沿著內牆的形狀,連接填充線條與內牆交會的末端。啟用此設定可以使填充" +"更好地附著在內牆上,並減少對垂直表面品質的影響。關閉此設定可降低材料的使用" +"量。" + +#: fdmprinter.def.json +msgctxt "infill_angles label" +msgid "Infill Line Directions" +msgstr "填充線條方向" + +#: fdmprinter.def.json +msgctxt "infill_angles description" +msgid "" +"A list of integer line directions to use. Elements from the list are used " +"sequentially as the layers progress and when the end of the list is reached, " +"it starts at the beginning again. The list items are separated by commas and " +"the whole list is contained in square brackets. Default is an empty list " +"which means use the traditional default angles (45 and 135 degrees for the " +"lines and zig zag patterns and 45 degrees for all other patterns)." +msgstr "" +"要使用的整數線條方向列表。列表中的元素隨層的進度依次使用,當達到列表末尾時," +"它將從頭開始。列表元素以逗號分隔,整個列表包含在方括號中。空的列表代表使用傳" +"統的預設角度(線條和鋸齒狀的列印樣式為 45 和 135 度,其他所有的列印樣式為 45 " +"度)。" + +#: fdmprinter.def.json +msgctxt "infill_offset_x label" +msgid "Infill X Offset" +msgstr "填充 X 軸偏移" + +#: fdmprinter.def.json +msgctxt "infill_offset_x description" +msgid "The infill pattern is offset this distance along the X axis." +msgstr "填充樣式在 X 軸方向偏移此距離。" + +#: fdmprinter.def.json +msgctxt "infill_offset_y label" +msgid "Infill Y Offset" +msgstr "填充 Y 軸偏移" + +#: fdmprinter.def.json +msgctxt "infill_offset_y description" +msgid "The infill pattern is offset this distance along the Y axis." +msgstr "填充樣式在 Y 軸方向偏移此距離。" + +#: fdmprinter.def.json +msgctxt "sub_div_rad_add label" +msgid "Cubic Subdivision Shell" +msgstr "立方體細分外殼" + +#: fdmprinter.def.json +msgctxt "sub_div_rad_add description" +msgid "" +"An addition to the radius from the center of each cube to check for the " +"boundary of the model, as to decide whether this cube should be subdivided. " +"Larger values lead to a thicker shell of small cubes near the boundary of " +"the model." +msgstr "" +"每個立方體半徑的增加量,用來檢查模型的邊界,決定是否應該細分該立方體。值越" +"大,靠近模型邊界附近的小立方體的殼越厚。" + +#: fdmprinter.def.json +msgctxt "infill_overlap label" +msgid "Infill Overlap Percentage" +msgstr "填充重疊百分比" + +#: fdmprinter.def.json +msgctxt "infill_overlap description" +msgid "" +"The amount of overlap between the infill and the walls. A slight overlap " +"allows the walls to connect firmly to the infill." +msgstr "填充和牆壁之間的重疊量。稍微重疊可讓各個牆壁與填充牢固連接。" + +#: fdmprinter.def.json +msgctxt "infill_overlap_mm label" +msgid "Infill Overlap" +msgstr "填充重疊" + +#: fdmprinter.def.json +msgctxt "infill_overlap_mm description" +msgid "" +"The amount of overlap between the infill and the walls. A slight overlap " +"allows the walls to connect firmly to the infill." +msgstr "填充和牆壁之間的重疊量。稍微重疊可讓各個壁與填充牢固連接。" + +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "表層重疊百分比" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "" +"The amount of overlap between the skin and the walls as a percentage of the " +"line width. A slight overlap allows the walls to connect firmly to the skin. " +"This is a percentage of the average line widths of the skin lines and the " +"innermost wall." +msgstr "" +"表層和牆壁之間的重疊量,以線寬百分比表示。稍微重疊可讓各個牆壁與表層牢固連" +"接。這是表層平均線寬和最內壁的百分比。" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "表層重疊" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "" +"The amount of overlap between the skin and the walls. A slight overlap " +"allows the walls to connect firmly to the skin." +msgstr "表層和牆壁之間的重疊量。稍微重疊可讓各個牆壁與表層牢固連接。" + +#: fdmprinter.def.json +msgctxt "infill_wipe_dist label" +msgid "Infill Wipe Distance" +msgstr "填充擦拭距離" + +#: fdmprinter.def.json +msgctxt "infill_wipe_dist description" +msgid "" +"Distance of a travel move inserted after every infill line, to make the " +"infill stick to the walls better. This option is similar to infill overlap, " +"but without extrusion and only on one end of the infill line." +msgstr "" +"每條填充線條後插入的空跑距離,讓填充更好地附著到壁上。此選項與填充重疊類似," +"但没有擠出,且僅位於填充線條的一端。" + +#: fdmprinter.def.json +msgctxt "infill_sparse_thickness label" +msgid "Infill Layer Thickness" +msgstr "填充層厚度" + +#: fdmprinter.def.json +msgctxt "infill_sparse_thickness description" +msgid "" +"The thickness per layer of infill material. This value should always be a " +"multiple of the layer height and is otherwise rounded." +msgstr "每層填充的厚度。此值應該是層高度的倍數,並且否則會四捨五入。" + +#: fdmprinter.def.json +msgctxt "gradual_infill_steps label" +msgid "Gradual Infill Steps" +msgstr "漸進填充步階數" + +#: fdmprinter.def.json +msgctxt "gradual_infill_steps description" +msgid "" +"Number of times to reduce the infill density by half when getting further " +"below top surfaces. Areas which are closer to top surfaces get a higher " +"density, up to the Infill Density." +msgstr "" +"由模型頂部往下,填充密度減半的次數。愈接近頂部的填充密度愈高,直到所設定的填" +"充密度。" + +#: fdmprinter.def.json +msgctxt "gradual_infill_step_height label" +msgid "Gradual Infill Step Height" +msgstr "漸進填充步階高度" + +#: fdmprinter.def.json +msgctxt "gradual_infill_step_height description" +msgid "" +"The height of infill of a given density before switching to half the density." +msgstr "減半填充密度的高度。" + +#: fdmprinter.def.json +msgctxt "infill_before_walls label" +msgid "Infill Before Walls" +msgstr "先印填充再印牆壁" + +#: fdmprinter.def.json +msgctxt "infill_before_walls description" +msgid "" +"Print the infill before printing the walls. Printing the walls first may " +"lead to more accurate walls, but overhangs print worse. Printing the infill " +"first leads to sturdier walls, but the infill pattern might sometimes show " +"through the surface." +msgstr "" +"列印牆壁前先列印填充。先列印牆壁可以產生更精確的牆壁,但懸垂列印品質會較差。" +"先列印填充會產生更牢固的牆壁,但有時候填充的列印樣式會透過表面顯現出來。" + +#: fdmprinter.def.json +msgctxt "min_infill_area label" +msgid "Minimum Infill Area" +msgstr "最小填充區域" + +#: fdmprinter.def.json +msgctxt "min_infill_area description" +msgid "Don't generate areas of infill smaller than this (use skin instead)." +msgstr "不要產生小於此面積的填充區域(使用表層取代)。" + +#: fdmprinter.def.json +msgctxt "skin_preshrink label" +msgid "Skin Removal Width" +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 "" +"要移除表層區域的最大寬度。寬度小於此值的表層區域將會消失。這有助於減少在列印" +"模型傾斜的頂部表層和底部表層所花費的時間和耗材。" + +#: fdmprinter.def.json +msgctxt "top_skin_preshrink label" +msgid "Top Skin Removal Width" +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 "" +"要移除頂部表層區域的最大寬度。寬度小於此值的頂部表層區域將會消失。這有助於減" +"少在列印模型傾斜的頂部表層所花費的時間和耗材。" + +#: fdmprinter.def.json +msgctxt "bottom_skin_preshrink label" +msgid "Bottom Skin Removal Width" +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 "" +"要移除底部表層區域的最大寬度。寬度小於此值的底部表層區域將會消失。這有助於減" +"少在列印模型傾斜的底部表層所花費的時間和耗材。" + +#: fdmprinter.def.json +msgctxt "expand_skins_expand_distance label" +msgid "Skin Expand Distance" +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 "" +"表層延伸進入填充的距離。值愈高表層與填充之間的附著愈好,並使相鄰層的牆壁與表" +"層黏得更緊。而較低的值可以節省耗材的使用。" + +#: fdmprinter.def.json +msgctxt "top_skin_expand_distance label" +msgid "Top Skin Expand Distance" +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 "" +"頂部表層延伸進入填充的距離。值愈高表層與填充之間的附著愈好,並使上方的牆壁與" +"表層黏得更緊。而較低的值可以節省耗材的使用。" + +#: fdmprinter.def.json +msgctxt "bottom_skin_expand_distance label" +msgid "Bottom Skin Expand Distance" +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 "" +"底部表層延伸進入填充的距離。值愈高表層與填充之間的附著愈好,並使下方的牆壁與" +"表層黏得更緊。而較低的值可以節省耗材的使用。" + +#: fdmprinter.def.json +msgctxt "max_skin_angle_for_expansion label" +msgid "Maximum Skin Angle for Expansion" +msgstr "最大延伸表層角度" + +#: fdmprinter.def.json +msgctxt "max_skin_angle_for_expansion description" +msgid "" +"Top and/or bottom surfaces of your object with an angle larger than this " +"setting, won't have their top/bottom skin expanded. This avoids expanding " +"the narrow skin areas that are created when the model surface has a near " +"vertical slope. An angle of 0° is horizontal, while an angle of 90° is " +"vertical." +msgstr "" +"如果模型的頂部和/或底部表面的角度大於此設定,則不要延伸其頂部/底部表層。這會" +"避免延伸作用在模型表面有接近垂直的斜面時所形成的狹窄表層區域。0° 的角為水平," +"90° 的角為垂直。" + +#: fdmprinter.def.json +msgctxt "min_skin_width_for_expansion label" +msgid "Minimum Skin Width for Expansion" +msgstr "最小延伸表層寬度" + +#: fdmprinter.def.json +msgctxt "min_skin_width_for_expansion description" +msgid "" +"Skin areas narrower than this are not expanded. This avoids expanding the " +"narrow skin areas that are created when the model surface has a slope close " +"to the vertical." +msgstr "" +"如果表層區域寬度小於此值,則不會延伸。這會避免延伸在模型表面的斜度接近垂直時" +"所形成的狹窄表層區域。" + +#: fdmprinter.def.json +msgctxt "material label" +msgid "Material" +msgstr "耗材" + +#: fdmprinter.def.json +msgctxt "material description" +msgid "Material" +msgstr "耗材" + +#: fdmprinter.def.json +msgctxt "material_flow_dependent_temperature label" +msgid "Auto Temperature" +msgstr "自動溫度" + +#: fdmprinter.def.json +msgctxt "material_flow_dependent_temperature description" +msgid "" +"Change the temperature for each layer automatically with the average flow " +"speed of that layer." +msgstr "根據每一層的平均流速自動更改每層的溫度。" + +#: fdmprinter.def.json +msgctxt "default_material_print_temperature label" +msgid "Default Printing Temperature" +msgstr "預設列印溫度" + +#: fdmprinter.def.json +msgctxt "default_material_print_temperature description" +msgid "" +"The default temperature used for printing. This should be the \"base\" " +"temperature of a material. All other print temperatures should use offsets " +"based on this value" +msgstr "" +"用於列印的預設溫度。應為耗材的\"基本\"溫度。所有其他列印溫度均應使用基於此值" +"的偏移量" + +#: fdmprinter.def.json +msgctxt "material_print_temperature label" +msgid "Printing Temperature" +msgstr "列印溫度" + +#: fdmprinter.def.json +msgctxt "material_print_temperature description" +msgid "The temperature used for printing." +msgstr "用於列印的溫度。" + +#: fdmprinter.def.json +msgctxt "material_print_temperature_layer_0 label" +msgid "Printing Temperature Initial Layer" +msgstr "列印溫度起始層" + +#: fdmprinter.def.json +msgctxt "material_print_temperature_layer_0 description" +msgid "" +"The temperature used for printing the first layer. Set at 0 to disable " +"special handling of the initial layer." +msgstr "用於列印第一層的溫度。設為 0 即關閉對起始層的特别處理。" + +#: fdmprinter.def.json +msgctxt "material_initial_print_temperature label" +msgid "Initial Printing Temperature" +msgstr "起始列印溫度" + +#: fdmprinter.def.json +msgctxt "material_initial_print_temperature description" +msgid "" +"The minimal temperature while heating up to the Printing Temperature at " +"which printing can already start." +msgstr "加熱到可以開始列印的列印溫度時的最低溫度。" + +#: fdmprinter.def.json +msgctxt "material_final_print_temperature label" +msgid "Final Printing Temperature" +msgstr "最終列印溫度" + +#: fdmprinter.def.json +msgctxt "material_final_print_temperature description" +msgid "" +"The temperature to which to already start cooling down just before the end " +"of printing." +msgstr "列印結束前開始冷卻的溫度。" + +#: fdmprinter.def.json +msgctxt "material_flow_temp_graph label" +msgid "Flow Temperature Graph" +msgstr "流量溫度圖" + +#: fdmprinter.def.json +msgctxt "material_flow_temp_graph description" +msgid "" +"Data linking material flow (in mm3 per second) to temperature (degrees " +"Celsius)." +msgstr "數據連接耗材流量(mm3/s)到溫度(攝氏)。" + +#: fdmprinter.def.json +msgctxt "material_extrusion_cool_down_speed label" +msgid "Extrusion Cool Down Speed Modifier" +msgstr "擠出降溫速度修正" + +#: fdmprinter.def.json +msgctxt "material_extrusion_cool_down_speed description" +msgid "" +"The extra speed by which the nozzle cools while extruding. The same value is " +"used to signify the heat up speed lost when heating up while extruding." +msgstr "" +"解決在擠料的同時因為噴頭冷卻所造成的影響的額外速度修正。相同的值被用於表示在" +"擠壓時所失去的升溫速度。" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature label" +msgid "Build Plate Temperature" +msgstr "列印平台溫度" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature description" +msgid "" +"The temperature used for the heated build plate. If this is 0, the bed will " +"not heat up for this print." +msgstr "" +"用於加熱列印平台的溫度。如果列印平台溫度為 0,則熱床將不會為此次列印加熱。" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature_layer_0 label" +msgid "Build Plate Temperature Initial Layer" +msgstr "列印平台溫度起始層" + +#: fdmprinter.def.json +msgctxt "material_bed_temperature_layer_0 description" +msgid "The temperature used for the heated build plate at the first layer." +msgstr "用於第一層加熱列印平台的溫度。" + +#: fdmprinter.def.json +msgctxt "material_diameter label" +msgid "Diameter" +msgstr "直徑" + +#: fdmprinter.def.json +msgctxt "material_diameter description" +msgid "" +"Adjusts the diameter of the filament used. Match this value with the " +"diameter of the used filament." +msgstr "調整所使用耗材的直徑。這個數值要等同於所使用耗材的直徑。" + +#: fdmprinter.def.json +msgctxt "material_adhesion_tendency label" +msgid "Adhesion Tendency" +msgstr "附著趨勢" + +#: fdmprinter.def.json +msgctxt "material_adhesion_tendency description" +msgid "Surface adhesion tendency." +msgstr "表面附著趨勢。" + +#: fdmprinter.def.json +msgctxt "material_surface_energy label" +msgid "Surface Energy" +msgstr "表面能量" + +#: fdmprinter.def.json +msgctxt "material_surface_energy description" +msgid "Surface energy." +msgstr "表面能量。" + +#: fdmprinter.def.json +msgctxt "material_flow label" +msgid "Flow" +msgstr "流量" + +#: fdmprinter.def.json +msgctxt "material_flow description" +msgid "" +"Flow compensation: the amount of material extruded is multiplied by this " +"value." +msgstr "流量補償:擠出的耗材量乘以此值。" + +#: fdmprinter.def.json +msgctxt "retraction_enable label" +msgid "Enable Retraction" +msgstr "啟用回抽" + +#: fdmprinter.def.json +msgctxt "retraction_enable description" +msgid "" +"Retract the filament when the nozzle is moving over a non-printed area. " +msgstr "當噴頭移動到非列印區域上方時回抽耗材。" + +#: fdmprinter.def.json +msgctxt "retract_at_layer_change label" +msgid "Retract at Layer Change" +msgstr "列印下一層時回抽" + +#: fdmprinter.def.json +msgctxt "retract_at_layer_change description" +msgid "Retract the filament when the nozzle is moving to the next layer." +msgstr "當噴頭移動到下一層時回抽耗材。" + +#: fdmprinter.def.json +msgctxt "retraction_amount label" +msgid "Retraction Distance" +msgstr "回抽距離" + +#: fdmprinter.def.json +msgctxt "retraction_amount description" +msgid "The length of material retracted during a retraction move." +msgstr "回抽移動期間回抽的耗材長度。" + +#: fdmprinter.def.json +msgctxt "retraction_speed label" +msgid "Retraction Speed" +msgstr "回抽速度" + +#: fdmprinter.def.json +msgctxt "retraction_speed description" +msgid "" +"The speed at which the filament is retracted and primed during a retraction " +"move." +msgstr "回抽移動期間耗材回抽和裝填的速度。" + +#: fdmprinter.def.json +msgctxt "retraction_retract_speed label" +msgid "Retraction Retract Speed" +msgstr "回抽速度" + +#: fdmprinter.def.json +msgctxt "retraction_retract_speed description" +msgid "The speed at which the filament is retracted during a retraction move." +msgstr "回抽移動期間耗材回抽的速度。" + +#: fdmprinter.def.json +msgctxt "retraction_prime_speed label" +msgid "Retraction Prime Speed" +msgstr "回抽裝填速度" + +#: fdmprinter.def.json +msgctxt "retraction_prime_speed description" +msgid "The speed at which the filament is primed during a retraction move." +msgstr "回抽移動期間耗材裝填的速度。" + +#: fdmprinter.def.json +msgctxt "retraction_extra_prime_amount label" +msgid "Retraction Extra Prime Amount" +msgstr "回抽額外裝填量" + +#: fdmprinter.def.json +msgctxt "retraction_extra_prime_amount description" +msgid "" +"Some material can ooze away during a travel move, which can be compensated " +"for here." +msgstr "有些耗材可能會在空跑過程中滲出,可以在這裡對其進行補償。" + +#: fdmprinter.def.json +msgctxt "retraction_min_travel label" +msgid "Retraction Minimum Travel" +msgstr "回抽最小空跑距離" + +#: fdmprinter.def.json +msgctxt "retraction_min_travel description" +msgid "" +"The minimum distance of travel needed for a retraction to happen at all. " +"This helps to get fewer retractions in a small area." +msgstr "觸發回抽所需的最小空跑距離。這有助於減少小區域內的回抽次數。" + +#: fdmprinter.def.json +msgctxt "retraction_count_max label" +msgid "Maximum Retraction Count" +msgstr "最大回抽次數" + +#: fdmprinter.def.json +msgctxt "retraction_count_max description" +msgid "" +"This setting limits the number of retractions occurring within the minimum " +"extrusion distance window. Further retractions within this window will be " +"ignored. This avoids retracting repeatedly on the same piece of filament, as " +"that can flatten the filament and cause grinding issues." +msgstr "" +"此設定限制在最小擠出距離範圍內發生的回抽數。此範圍內的額外回抽將會忽略。這避" +"免了在同一件耗材上重複回抽,從而導致耗材變扁並引起磨損問題。" + +#: fdmprinter.def.json +msgctxt "retraction_extrusion_window label" +msgid "Minimum Extrusion Distance Window" +msgstr "最小擠出距離範圍" + +#: fdmprinter.def.json +msgctxt "retraction_extrusion_window description" +msgid "" +"The window in which the maximum retraction count is enforced. This value " +"should be approximately the same as the retraction distance, so that " +"effectively the number of times a retraction passes the same patch of " +"material is limited." +msgstr "" +"最大回抽次數範圍。此值應大致與回抽距離相等,從而有效地限制在同一段耗材上的回" +"抽次數。" + +#: fdmprinter.def.json +msgctxt "material_standby_temperature label" +msgid "Standby Temperature" +msgstr "待機溫度" + +#: fdmprinter.def.json +msgctxt "material_standby_temperature description" +msgid "" +"The temperature of the nozzle when another nozzle is currently used for " +"printing." +msgstr "當另一個噴頭進行列印時,這個噴頭要保持的溫度。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_amount label" +msgid "Nozzle Switch Retraction Distance" +msgstr "噴頭切換回抽距離" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_amount description" +msgid "" +"The amount of retraction: Set at 0 for no retraction at all. This should " +"generally be the same as the length of the heat zone." +msgstr "回抽量:設為 0,不進行任何回抽。該值通常應與加熱區的長度相同。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speeds label" +msgid "Nozzle Switch Retraction Speed" +msgstr "噴頭切換回抽速度" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speeds description" +msgid "" +"The speed at which the filament is retracted. A higher retraction speed " +"works better, but a very high retraction speed can lead to filament grinding." +msgstr "" +"回抽耗材的速度。較高的回抽速度效果較好,但回抽速度過高可能導致耗材磨損。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speed label" +msgid "Nozzle Switch Retract Speed" +msgstr "噴頭切換回抽速度" + +#: fdmprinter.def.json +msgctxt "switch_extruder_retraction_speed description" +msgid "" +"The speed at which the filament is retracted during a nozzle switch retract." +msgstr "噴頭切換回抽期間耗材回抽的速度。" + +#: fdmprinter.def.json +msgctxt "switch_extruder_prime_speed label" +msgid "Nozzle Switch Prime Speed" +msgstr "噴頭切換裝填速度" + +#: fdmprinter.def.json +msgctxt "switch_extruder_prime_speed description" +msgid "" +"The speed at which the filament is pushed back after a nozzle switch " +"retraction." +msgstr "噴頭切換回抽後耗材被推回的速度。" + +#: fdmprinter.def.json +msgctxt "speed label" +msgid "Speed" +msgstr "速度" + +#: fdmprinter.def.json +msgctxt "speed description" +msgid "Speed" +msgstr "速度" + +#: fdmprinter.def.json +msgctxt "speed_print label" +msgid "Print Speed" +msgstr "列印速度" + +#: fdmprinter.def.json +msgctxt "speed_print description" +msgid "The speed at which printing happens." +msgstr "開始列印的速度。" + +#: fdmprinter.def.json +msgctxt "speed_infill label" +msgid "Infill Speed" +msgstr "填充速度" + +#: fdmprinter.def.json +msgctxt "speed_infill description" +msgid "The speed at which infill is printed." +msgstr "列印填充的速度。" + +#: fdmprinter.def.json +msgctxt "speed_wall label" +msgid "Wall Speed" +msgstr "牆壁速度" + +#: fdmprinter.def.json +msgctxt "speed_wall description" +msgid "The speed at which the walls are printed." +msgstr "列印牆壁的速度。" + +#: fdmprinter.def.json +msgctxt "speed_wall_0 label" +msgid "Outer Wall Speed" +msgstr "外壁速度" + +#: fdmprinter.def.json +msgctxt "speed_wall_0 description" +msgid "" +"The speed at which the outermost walls are printed. Printing the outer wall " +"at a lower speed improves the final skin quality. However, having a large " +"difference between the inner wall speed and the outer wall speed will affect " +"quality in a negative way." +msgstr "" +"列印最外壁的速度。以較低速度列印外壁可改善最終表層品質。但是,如果內壁速度和" +"外壁速度差距過大,則將對品質產生負面影響。" + +#: fdmprinter.def.json +msgctxt "speed_wall_x label" +msgid "Inner Wall Speed" +msgstr "內壁速度" + +#: fdmprinter.def.json +msgctxt "speed_wall_x description" +msgid "" +"The speed at which all inner walls are printed. Printing the inner wall " +"faster than the outer wall will reduce printing time. It works well to set " +"this in between the outer wall speed and the infill speed." +msgstr "" +"列印所有內壁的速度。以比外壁更快的速度列印內壁將減少列印時間。將該值設為外壁" +"速度和填充速度之間也可行。" + +#: fdmprinter.def.json +msgctxt "speed_roofing label" +msgid "Top Surface Skin Speed" +msgstr "頂部表層速度" + +#: fdmprinter.def.json +msgctxt "speed_roofing description" +msgid "The speed at which top surface skin layers are printed." +msgstr "列印頂部表層的速度。" + +#: fdmprinter.def.json +msgctxt "speed_topbottom label" +msgid "Top/Bottom Speed" +msgstr "頂部/底部速度" + +#: fdmprinter.def.json +msgctxt "speed_topbottom description" +msgid "The speed at which top/bottom layers are printed." +msgstr "列印頂部/底部層的速度。" + +#: fdmprinter.def.json +msgctxt "speed_support label" +msgid "Support Speed" +msgstr "支撐速度" + +#: fdmprinter.def.json +msgctxt "speed_support description" +msgid "" +"The speed at which the support structure is printed. Printing support at " +"higher speeds can greatly reduce printing time. The surface quality of the " +"support structure is not important since it is removed after printing." +msgstr "" +"在列印支撐結構時的速度。以更高的速度列印支撐可以大大減少列印時間。因為支撐在" +"列印後會被清除,所以表面品質並不重要。" + +#: fdmprinter.def.json +msgctxt "speed_support_infill label" +msgid "Support Infill Speed" +msgstr "支撐填充速度" + +#: fdmprinter.def.json +msgctxt "speed_support_infill description" +msgid "" +"The speed at which the infill of support is printed. Printing the infill at " +"lower speeds improves stability." +msgstr "列印支撐填充的速度。以較低的速度列印填充可改善穩定性。" + +#: fdmprinter.def.json +msgctxt "speed_support_interface label" +msgid "Support Interface Speed" +msgstr "支撐介面速度" + +#: fdmprinter.def.json +msgctxt "speed_support_interface description" +msgid "" +"The speed at which the roofs and floors of support are printed. Printing " +"them at lower speeds can improve overhang quality." +msgstr "列印支撐頂板和底板的速度。以較低的速度列印可以改善懸垂品質。" + +#: fdmprinter.def.json +msgctxt "speed_support_roof label" +msgid "Support Roof Speed" +msgstr "支撐頂板速度" + +#: fdmprinter.def.json +msgctxt "speed_support_roof description" +msgid "" +"The speed at which the roofs of support are printed. Printing them at lower " +"speeds can improve overhang quality." +msgstr "列印支撐頂板的速度。以較低的速度列印可以改善懸垂品質。" + +#: fdmprinter.def.json +msgctxt "speed_support_bottom label" +msgid "Support Floor Speed" +msgstr "支撐底板速度" + +#: fdmprinter.def.json +msgctxt "speed_support_bottom description" +msgid "" +"The speed at which the floor of support is printed. Printing it at lower " +"speed can improve adhesion of support on top of your model." +msgstr "列印支撐底板的速度。以較低的速度列印可以改善支撐在模型頂部的附著。" + +#: fdmprinter.def.json +msgctxt "speed_prime_tower label" +msgid "Prime Tower Speed" +msgstr "換料塔速度" + +#: fdmprinter.def.json +msgctxt "speed_prime_tower description" +msgid "" +"The speed at which the prime tower is printed. Printing the prime tower " +"slower can make it more stable when the adhesion between the different " +"filaments is suboptimal." +msgstr "" +"列印換料塔的速度。當不同耗材之間的黏合力不佳時,較慢地列印速度可以讓它更穩" +"定。" + +#: fdmprinter.def.json +msgctxt "speed_travel label" +msgid "Travel Speed" +msgstr "空跑速度" + +#: fdmprinter.def.json +msgctxt "speed_travel description" +msgid "The speed at which travel moves are made." +msgstr "噴頭在非列印時的移動速度。" + +#: fdmprinter.def.json +msgctxt "speed_layer_0 label" +msgid "Initial Layer Speed" +msgstr "起始層速度" + +#: fdmprinter.def.json +msgctxt "speed_layer_0 description" +msgid "" +"The speed for the initial layer. A lower value is advised to improve " +"adhesion to the build plate." +msgstr "起始層的速度。建議採用較低的值以便改善與列印平台的附著。" + +#: fdmprinter.def.json +msgctxt "speed_print_layer_0 label" +msgid "Initial Layer Print Speed" +msgstr "起始層列印速度" + +#: fdmprinter.def.json +msgctxt "speed_print_layer_0 description" +msgid "" +"The speed of printing for the initial layer. A lower value is advised to " +"improve adhesion to the build plate." +msgstr "列印起始層的速度。建議採用較低的值以便改善與列印平台的附著。" + +#: fdmprinter.def.json +msgctxt "speed_travel_layer_0 label" +msgid "Initial Layer Travel Speed" +msgstr "起始層空跑速度" + +#: fdmprinter.def.json +msgctxt "speed_travel_layer_0 description" +msgid "" +"The speed of travel moves in the initial layer. A lower value is advised to " +"prevent pulling previously printed parts away from the build plate. The " +"value of this setting can automatically be calculated from the ratio between " +"the Travel Speed and the Print Speed." +msgstr "" +"起始層中的空跑速度。建議採用較低的值,以防止將之前列印的部分從列印平台上拉" +"離。該設定的值可以根據空跑速度和列印速度的比率自動計算得出。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_speed label" +msgid "Skirt/Brim Speed" +msgstr "外圍/邊緣速度" + +#: fdmprinter.def.json +msgctxt "skirt_brim_speed description" +msgid "" +"The speed at which the skirt and brim are printed. Normally this is done at " +"the initial layer speed, but sometimes you might want to print the skirt or " +"brim at a different speed." +msgstr "" +"列印外圍和邊緣的速度。一般情况是以起始層速度列印這些部分,但有時候你可能想要" +"以不同速度來列印外圍或邊緣。" + +#: fdmprinter.def.json +msgctxt "max_feedrate_z_override label" +msgid "Maximum Z Speed" +msgstr "最大 Z 軸速度" + +#: fdmprinter.def.json +msgctxt "max_feedrate_z_override description" +msgid "" +"The maximum speed with which the build plate is moved. Setting this to zero " +"causes the print to use the firmware defaults for the maximum z speed." +msgstr "" +"列印平台移動的最大速度。將該值設為零會使列印為最大 Z 速度採用韌體預設值。" + +#: fdmprinter.def.json +msgctxt "speed_slowdown_layers label" +msgid "Number of Slower Layers" +msgstr "慢速列印層數" + +#: fdmprinter.def.json +msgctxt "speed_slowdown_layers description" +msgid "" +"The first few layers are printed slower than the rest of the model, to get " +"better adhesion to the build plate and improve the overall success rate of " +"prints. The speed is gradually increased over these layers." +msgstr "" +"前幾層的列印速度比模型的其他層慢,以便實現與列印平台的更好附著,並改善整體的" +"列印成功率。該速度在這些層中會逐漸增加。" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_enabled label" +msgid "Equalize Filament Flow" +msgstr "均衡耗材流量" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_enabled description" +msgid "" +"Print thinner than normal lines faster so that the amount of material " +"extruded per second remains the same. Thin pieces in your model might " +"require lines printed with smaller line width than provided in the settings. " +"This setting controls the speed changes for such lines." +msgstr "" +"以較快的速度列印比正常線條更細的線條,使每秒擠出的耗材量保持相同。模型中較薄" +"的部分可能需要以低於設定中所提供寬度的線寬來列印線條。該設定控制這些線條的速" +"度變化。" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_max label" +msgid "Maximum Speed for Flow Equalization" +msgstr "流量均衡的最大速度" + +#: fdmprinter.def.json +msgctxt "speed_equalize_flow_max description" +msgid "" +"Maximum print speed when adjusting the print speed in order to equalize flow." +msgstr "調整列印速度以便均衡流量時的最大列印速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_enabled label" +msgid "Enable Acceleration Control" +msgstr "啟用加速度控制" + +#: fdmprinter.def.json +msgctxt "acceleration_enabled description" +msgid "" +"Enables adjusting the print head acceleration. Increasing the accelerations " +"can reduce printing time at the cost of print quality." +msgstr "啟用調整噴頭的加速度。增加加速度可以減少列印時間卻會犧牲列印品質。" + +#: fdmprinter.def.json +msgctxt "acceleration_print label" +msgid "Print Acceleration" +msgstr "列印加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_print description" +msgid "The acceleration with which printing happens." +msgstr "列印發生的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_infill label" +msgid "Infill Acceleration" +msgstr "填充加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_infill description" +msgid "The acceleration with which infill is printed." +msgstr "列印填充的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_wall label" +msgid "Wall Acceleration" +msgstr "牆壁加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_wall description" +msgid "The acceleration with which the walls are printed." +msgstr "列印牆壁的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_0 label" +msgid "Outer Wall Acceleration" +msgstr "外壁加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_0 description" +msgid "The acceleration with which the outermost walls are printed." +msgstr "列印最外壁的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_x label" +msgid "Inner Wall Acceleration" +msgstr "內壁加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_wall_x description" +msgid "The acceleration with which all inner walls are printed." +msgstr "列印所有內壁的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_roofing label" +msgid "Top Surface Skin Acceleration" +msgstr "頂部表層加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_roofing description" +msgid "The acceleration with which top surface skin layers are printed." +msgstr "列印頂部表層的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_topbottom label" +msgid "Top/Bottom Acceleration" +msgstr "頂部/底部加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_topbottom description" +msgid "The acceleration with which top/bottom layers are printed." +msgstr "列印頂部/底部層的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_support label" +msgid "Support Acceleration" +msgstr "支撐加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_support description" +msgid "The acceleration with which the support structure is printed." +msgstr "列印支撐的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_support_infill label" +msgid "Support Infill Acceleration" +msgstr "支撐填充加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_support_infill description" +msgid "The acceleration with which the infill of support is printed." +msgstr "列印支撐填充的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_support_interface label" +msgid "Support Interface Acceleration" +msgstr "支撐介面加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_support_interface description" +msgid "" +"The acceleration with which the roofs and floors of support are printed. " +"Printing them at lower acceleration can improve overhang quality." +msgstr "列印支撐頂板和底板的加速度。以較低的加速度列印可以改善懸垂品質。" + +#: fdmprinter.def.json +msgctxt "acceleration_support_roof label" +msgid "Support Roof Acceleration" +msgstr "支撐頂板加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_support_roof description" +msgid "" +"The acceleration with which the roofs of support are printed. Printing them " +"at lower acceleration can improve overhang quality." +msgstr "列印支撐頂板的加速度。以較低的加速度列印可以改善懸垂品質。" + +#: fdmprinter.def.json +msgctxt "acceleration_support_bottom label" +msgid "Support Floor Acceleration" +msgstr "支撐底板加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_support_bottom description" +msgid "" +"The acceleration with which the floors of support are printed. Printing them " +"at lower acceleration can improve adhesion of support on top of your model." +msgstr "列印支撐底板的加速度。以較低的加速度列印可以改善支撐在模型頂部的附著。" + +#: fdmprinter.def.json +msgctxt "acceleration_prime_tower label" +msgid "Prime Tower Acceleration" +msgstr "換料塔加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_prime_tower description" +msgid "The acceleration with which the prime tower is printed." +msgstr "列印換料塔的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_travel label" +msgid "Travel Acceleration" +msgstr "空跑加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_travel description" +msgid "The acceleration with which travel moves are made." +msgstr "進行空跑的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_layer_0 label" +msgid "Initial Layer Acceleration" +msgstr "起始層加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_layer_0 description" +msgid "The acceleration for the initial layer." +msgstr "起始層的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_print_layer_0 label" +msgid "Initial Layer Print Acceleration" +msgstr "起始層列印加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_print_layer_0 description" +msgid "The acceleration during the printing of the initial layer." +msgstr "列印起始層時的加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_travel_layer_0 label" +msgid "Initial Layer Travel Acceleration" +msgstr "起始層空跑加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_travel_layer_0 description" +msgid "The acceleration for travel moves in the initial layer." +msgstr "起始層中的空跑加速度。" + +#: fdmprinter.def.json +msgctxt "acceleration_skirt_brim label" +msgid "Skirt/Brim Acceleration" +msgstr "外圍/邊緣加速度" + +#: fdmprinter.def.json +msgctxt "acceleration_skirt_brim description" +msgid "" +"The acceleration with which the skirt and brim are printed. Normally this is " +"done with the initial layer acceleration, but sometimes you might want to " +"print the skirt or brim at a different acceleration." +msgstr "" +"列印外圍和邊緣的加速度。一般情况是以起始層加速度列印這些部分,但有時候你可能" +"想要以不同加速度來列印外圍或邊緣。" + +#: fdmprinter.def.json +msgctxt "jerk_enabled label" +msgid "Enable Jerk Control" +msgstr "啟用加加速度控制" + +#: fdmprinter.def.json +msgctxt "jerk_enabled description" +msgid "" +"Enables adjusting the jerk of print head when the velocity in the X or Y " +"axis changes. Increasing the jerk can reduce printing time at the cost of " +"print quality." +msgstr "" +"啟用當 X 或 Y 軸的速度變化時調整列印頭的加加速度。提高加加速度可以通過以列印" +"品質為代價來縮短列印時間。" + +#: fdmprinter.def.json +msgctxt "jerk_print label" +msgid "Print Jerk" +msgstr "列印加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_print description" +msgid "The maximum instantaneous velocity change of the print head." +msgstr "列印頭的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_infill label" +msgid "Infill Jerk" +msgstr "填充加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_infill description" +msgid "The maximum instantaneous velocity change with which infill is printed." +msgstr "列印填充時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_wall label" +msgid "Wall Jerk" +msgstr "牆壁加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_wall description" +msgid "" +"The maximum instantaneous velocity change with which the walls are printed." +msgstr "列印牆壁時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_wall_0 label" +msgid "Outer Wall Jerk" +msgstr "外壁加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_wall_0 description" +msgid "" +"The maximum instantaneous velocity change with which the outermost walls are " +"printed." +msgstr "列印最外壁時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_wall_x label" +msgid "Inner Wall Jerk" +msgstr "內壁加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_wall_x description" +msgid "" +"The maximum instantaneous velocity change with which all inner walls are " +"printed." +msgstr "列印所有內壁時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_roofing label" +msgid "Top Surface Skin Jerk" +msgstr "頂部表層加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_roofing description" +msgid "" +"The maximum instantaneous velocity change with which top surface skin layers " +"are printed." +msgstr "列印頂部表層時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_topbottom label" +msgid "Top/Bottom Jerk" +msgstr "頂部/底部加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_topbottom description" +msgid "" +"The maximum instantaneous velocity change with which top/bottom layers are " +"printed." +msgstr "列印頂部/底部層時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_support label" +msgid "Support Jerk" +msgstr "支撐加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_support description" +msgid "" +"The maximum instantaneous velocity change with which the support structure " +"is printed." +msgstr "列印支撐結構時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_support_infill label" +msgid "Support Infill Jerk" +msgstr "支撐填充加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_support_infill description" +msgid "" +"The maximum instantaneous velocity change with which the infill of support " +"is printed." +msgstr "列印支撐填充時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_support_interface label" +msgid "Support Interface Jerk" +msgstr "支撐介面加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_support_interface description" +msgid "" +"The maximum instantaneous velocity change with which the roofs and floors of " +"support are printed." +msgstr "列印支撐頂板和底板的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_support_roof label" +msgid "Support Roof Jerk" +msgstr "支撐頂板加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_support_roof description" +msgid "" +"The maximum instantaneous velocity change with which the roofs of support " +"are printed." +msgstr "列印支撐頂板的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_support_bottom label" +msgid "Support Floor Jerk" +msgstr "支撐底板加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_support_bottom description" +msgid "" +"The maximum instantaneous velocity change with which the floors of support " +"are printed." +msgstr "列印支撐底板時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_prime_tower label" +msgid "Prime Tower Jerk" +msgstr "換料塔加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_prime_tower description" +msgid "" +"The maximum instantaneous velocity change with which the prime tower is " +"printed." +msgstr "列印換料塔時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_travel label" +msgid "Travel Jerk" +msgstr "空跑加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_travel description" +msgid "" +"The maximum instantaneous velocity change with which travel moves are made." +msgstr "進行空跑時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_layer_0 label" +msgid "Initial Layer Jerk" +msgstr "起始層加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_layer_0 description" +msgid "The print maximum instantaneous velocity change for the initial layer." +msgstr "起始層的列印最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_print_layer_0 label" +msgid "Initial Layer Print Jerk" +msgstr "起始層列印加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_print_layer_0 description" +msgid "" +"The maximum instantaneous velocity change during the printing of the initial " +"layer." +msgstr "列印起始層時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "jerk_travel_layer_0 label" +msgid "Initial Layer Travel Jerk" +msgstr "起始層空跑加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_travel_layer_0 description" +msgid "The acceleration for travel moves in the initial layer." +msgstr "起始層中的空跑加速度。" + +#: fdmprinter.def.json +msgctxt "jerk_skirt_brim label" +msgid "Skirt/Brim Jerk" +msgstr "外圍/邊緣加加速度" + +#: fdmprinter.def.json +msgctxt "jerk_skirt_brim description" +msgid "" +"The maximum instantaneous velocity change with which the skirt and brim are " +"printed." +msgstr "列印外圍和邊緣時的最大瞬時速度變化。" + +#: fdmprinter.def.json +msgctxt "travel label" +msgid "Travel" +msgstr "空跑" + +#: fdmprinter.def.json +msgctxt "travel description" +msgid "travel" +msgstr "空跑" + +#: fdmprinter.def.json +msgctxt "retraction_combing label" +msgid "Combing Mode" +msgstr "梳理模式" + +#: fdmprinter.def.json +msgctxt "retraction_combing description" +msgid "" +"Combing keeps the nozzle within already printed areas when traveling. This " +"results in slightly longer travel moves but reduces the need for " +"retractions. If combing is off, the material will retract and the nozzle " +"moves in a straight line to the next point. It is also possible to avoid " +"combing over top/bottom skin areas by combing within the infill only." +msgstr "" +"梳理可在空跑時讓噴頭保持在已列印區域內。這會使空跑距離稍微延長,但可減少回抽" +"需求。如果關閉梳理,則耗材將回抽,且噴頭沿著直線移動到下一個點。也可以通過僅" +"在填充內進行梳理避免梳理頂部/底部表層區域。" + +#: fdmprinter.def.json +msgctxt "retraction_combing option off" +msgid "Off" +msgstr "關" + +#: fdmprinter.def.json +msgctxt "retraction_combing option all" +msgid "All" +msgstr "所有" + +#: fdmprinter.def.json +msgctxt "retraction_combing option noskin" +msgid "No Skin" +msgstr "表層除外" + +#: fdmprinter.def.json +msgctxt "travel_retract_before_outer_wall label" +msgid "Retract Before Outer Wall" +msgstr "列印外壁前先進行回抽" + +#: fdmprinter.def.json +msgctxt "travel_retract_before_outer_wall description" +msgid "Always retract when moving to start an outer wall." +msgstr "當移動到外牆起始點時總是進行回抽。" + +#: fdmprinter.def.json +msgctxt "travel_avoid_other_parts label" +msgid "Avoid Printed Parts When Traveling" +msgstr "空跑時避開已列印部分" + +#: fdmprinter.def.json +msgctxt "travel_avoid_other_parts description" +msgid "" +"The nozzle avoids already printed parts when traveling. This option is only " +"available when combing is enabled." +msgstr "噴頭會在空跑時避開已列印的部分。此選項僅在啟用梳理功能時可用。" + +#: fdmprinter.def.json +msgctxt "travel_avoid_distance label" +msgid "Travel Avoid Distance" +msgstr "空跑避開距離" + +#: fdmprinter.def.json +msgctxt "travel_avoid_distance description" +msgid "" +"The distance between the nozzle and already printed parts when avoiding " +"during travel moves." +msgstr "噴頭和已列印部分之間在空跑時避開的距離。" + +#: fdmprinter.def.json +msgctxt "start_layers_at_same_position label" +msgid "Start Layers with the Same Part" +msgstr "在相同的位置列印新層" + +#: fdmprinter.def.json +msgctxt "start_layers_at_same_position description" +msgid "" +"In each layer start with printing the object near the same point, so that we " +"don't start a new layer with printing the piece which the previous layer " +"ended with. This makes for better overhangs and small parts, but increases " +"printing time." +msgstr "" +"每一層都在相同點附近開始列印,這樣在列印新的一層時,就不需要列印前一層結束時" +"的那一小段區域。在懸垂部分和小零件有良好的效果,但會增加列印時間。" + +#: fdmprinter.def.json +msgctxt "layer_start_x label" +msgid "Layer Start X" +msgstr "每層列印起始點的 X 座標" + +#: fdmprinter.def.json +msgctxt "layer_start_x description" +msgid "" +"The X coordinate of the position near where to find the part to start " +"printing each layer." +msgstr "每一層列印起始點附近位置的 X 坐標。" + +#: fdmprinter.def.json +msgctxt "layer_start_y label" +msgid "Layer Start Y" +msgstr "每層列印起始點的 Y 座標" + +#: fdmprinter.def.json +msgctxt "layer_start_y description" +msgid "" +"The Y coordinate of the position near where to find the part to start " +"printing each layer." +msgstr "每一層列印起始點附近位置的 Y 坐標。" + +#: fdmprinter.def.json +msgctxt "retraction_hop_enabled label" +msgid "Z Hop When Retracted" +msgstr "回抽時 Z 抬升" + +#: fdmprinter.def.json +msgctxt "retraction_hop_enabled description" +msgid "" +"Whenever a retraction is done, the build plate is lowered to create " +"clearance between the nozzle and the print. It prevents the nozzle from " +"hitting the print during travel moves, reducing the chance to knock the " +"print from the build plate." +msgstr "" +"每當回抽完成時,列印平台會降低以便在噴頭和列印品之間形成空隙。它可以防止噴頭" +"在空跑過程中撞到列印品,降低將列印品從列印平台撞掉的幾率。" + +#: fdmprinter.def.json +msgctxt "retraction_hop_only_when_collides label" +msgid "Z Hop Only Over Printed Parts" +msgstr "僅在已列印部分上 Z 抬升" + +#: fdmprinter.def.json +msgctxt "retraction_hop_only_when_collides description" +msgid "" +"Only perform a Z Hop when moving over printed parts which cannot be avoided " +"by horizontal motion by Avoid Printed Parts when Traveling." +msgstr "" +"僅在移動到無法通過“空跑時避開已列印部分”選項的水平操作避開的已列印部分上方時" +"執行 Z 抬升。" + +#: fdmprinter.def.json +msgctxt "retraction_hop label" +msgid "Z Hop Height" +msgstr "Z 抬升高度" + +#: fdmprinter.def.json +msgctxt "retraction_hop description" +msgid "The height difference when performing a Z Hop." +msgstr "執行 Z 抬升的高度差。" + +#: fdmprinter.def.json +msgctxt "retraction_hop_after_extruder_switch label" +msgid "Z Hop After Extruder Switch" +msgstr "擠出機切換後的 Z 抬升" + +#: fdmprinter.def.json +msgctxt "retraction_hop_after_extruder_switch description" +msgid "" +"After the machine switched from one extruder to the other, the build plate " +"is lowered to create clearance between the nozzle and the print. This " +"prevents the nozzle from leaving oozed material on the outside of a print." +msgstr "" +"當機器從一個擠出機切換到另一個時,列印平台會降低以便在噴頭和列印品之間形成空" +"隙。這將防止噴頭在列印品外部留下滲出物。" + +#: fdmprinter.def.json +msgctxt "cooling label" +msgid "Cooling" +msgstr "冷卻" + +#: fdmprinter.def.json +msgctxt "cooling description" +msgid "Cooling" +msgstr "冷卻" + +#: fdmprinter.def.json +msgctxt "cool_fan_enabled label" +msgid "Enable Print Cooling" +msgstr "開啟列印冷卻" + +#: fdmprinter.def.json +msgctxt "cool_fan_enabled description" +msgid "" +"Enables the print cooling fans while printing. The fans improve print " +"quality on layers with short layer times and bridging / overhangs." +msgstr "" +"列印時啟用列印冷卻風扇。風扇可以在列印時間較短的層和橋接/懸垂結構提高列印品" +"質。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed label" +msgid "Fan Speed" +msgstr "風扇轉速" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed description" +msgid "The speed at which the print cooling fans spin." +msgstr "列印冷卻風扇旋轉的速度。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_min label" +msgid "Regular Fan Speed" +msgstr "標準風扇轉速" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_min description" +msgid "" +"The speed at which the fans spin before hitting the threshold. When a layer " +"prints faster than the threshold, the fan speed gradually inclines towards " +"the maximum fan speed." +msgstr "" +"在單層列印時間大於門檻值時,風扇運轉的速度。當單層列印時間小於門檻值時,系統" +"會根據單層列印時間決定使用的風扇轉速。列印時間愈短,所使用的風扇轉速愈快,但" +"不會超過最大風扇轉速。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_max label" +msgid "Maximum Fan Speed" +msgstr "最大風扇轉速" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_max description" +msgid "" +"The speed at which the fans spin on the minimum layer time. The fan speed " +"gradually increases between the regular fan speed and maximum fan speed when " +"the threshold is hit." +msgstr "" +"在“最短單層列印時間”時,風扇運轉的速度。當單層列印時間小於門檻值時,系統會根" +"據單層列印時間決定使用的風扇轉速。列印時間愈短,所使用的風扇轉速愈快,但不會" +"超過最大風扇轉速。" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time_fan_speed_max label" +msgid "Regular/Maximum Fan Speed Threshold" +msgstr "標準風扇轉速門檻值" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time_fan_speed_max description" +msgid "" +"The layer time which sets the threshold between regular fan speed and " +"maximum fan speed. Layers that print slower than this time use regular fan " +"speed. For faster layers the fan speed gradually increases towards the " +"maximum fan speed." +msgstr "" +"使用標準風扇轉速的單層列印時間門檻值。如果單層列印時間大於這個門檻值,就使用" +"標準風扇轉速。如果單層列印時間比這個門檻值短,系統會根據單層列印時間決定使用" +"的風扇轉速。列印時間愈短,所使用的風扇轉速愈快,但不會超過最大風扇轉速。" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_0 label" +msgid "Initial Fan Speed" +msgstr "起始層風扇轉速" + +#: fdmprinter.def.json +msgctxt "cool_fan_speed_0 description" +msgid "" +"The speed at which the fans spin at the start of the print. In subsequent " +"layers the fan speed is gradually increased up to the layer corresponding to " +"Regular Fan Speed at Height." +msgstr "" +"列印起始層時的風扇轉速。在隨後的層中,風扇轉速會逐漸增加到對應層所設定的速" +"度。" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_at_height label" +msgid "Regular Fan Speed at Height" +msgstr "標準風扇轉速(高度)" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_at_height description" +msgid "" +"The height at which the fans spin on regular fan speed. At the layers below " +"the fan speed gradually increases from Initial Fan Speed to Regular Fan " +"Speed." +msgstr "" +"使用標準風扇轉速的高度。風扇轉速會從起始轉速逐漸增加,在此高度達到標準風扇轉" +"速。" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_layer label" +msgid "Regular Fan Speed at Layer" +msgstr "標準風扇轉速(層)" + +#: fdmprinter.def.json +msgctxt "cool_fan_full_layer description" +msgid "" +"The layer at which the fans spin on regular fan speed. If regular fan speed " +"at height is set, this value is calculated and rounded to a whole number." +msgstr "" +"要使用標準風扇轉速的層。如果標準風扇轉速高度已被設定,這個值將使用計算出來後" +"取四捨五入的整數值。" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time label" +msgid "Minimum Layer Time" +msgstr "最短單層列印時間" + +#: fdmprinter.def.json +msgctxt "cool_min_layer_time description" +msgid "" +"The minimum time spent in a layer. This forces the printer to slow down, to " +"at least spend the time set here in one layer. This allows the printed " +"material to cool down properly before printing the next layer. Layers may " +"still take shorter than the minimal layer time if Lift Head is disabled and " +"if the Minimum Speed would otherwise be violated." +msgstr "" +"單層列印時間的下限。這會迫使印表機減速,以便在單層列印中消耗此處所規定的時" +"間。這會讓模型充分冷卻後再列印下一層。如果“噴頭抬升”功能被關閉,為了不違反“最" +"低列印速度”,單層列印時間仍有可能低於此設定值。" + +#: fdmprinter.def.json +msgctxt "cool_min_speed label" +msgid "Minimum Speed" +msgstr "最低列印速度" + +#: fdmprinter.def.json +msgctxt "cool_min_speed description" +msgid "" +"The minimum print speed, despite slowing down due to the minimum layer time. " +"When the printer would slow down too much, the pressure in the nozzle would " +"be too low and result in bad print quality." +msgstr "" +"列印速度的下限,限制因“最短單層列印時間”的減速。當印表機減速過多時,噴頭中的" +"壓力將過低並導致較差的列印品質。" + +#: fdmprinter.def.json +msgctxt "cool_lift_head label" +msgid "Lift Head" +msgstr "噴頭抬升" + +#: fdmprinter.def.json +msgctxt "cool_lift_head description" +msgid "" +"When the minimum speed is hit because of minimum layer time, lift the head " +"away from the print and wait the extra time until the minimum layer time is " +"reached." +msgstr "" +"當“最短單層列印時間”受到“最低列印速度”限制時,將噴頭從模型上抬高,並等候達到" +"最短單層列印時間。" + +#: fdmprinter.def.json +msgctxt "support label" +msgid "Support" +msgstr "支撐" + +#: fdmprinter.def.json +msgctxt "support description" +msgid "Support" +msgstr "支撐" + +#: fdmprinter.def.json +msgctxt "support_enable label" +msgid "Generate Support" +msgstr "產生支撐" + +#: fdmprinter.def.json +msgctxt "support_enable description" +msgid "" +"Generate structures to support parts of the model which have overhangs. " +"Without these structures, such parts would collapse during printing." +msgstr "" +"在模型的懸垂(Overhangs)部分產生支撐結構。若不這樣做,這些部分在列印時將倒" +"塌。" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr label" +msgid "Support Extruder" +msgstr "支撐用擠出機" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr description" +msgid "" +"The extruder train to use for printing the support. This is used in multi-" +"extrusion." +msgstr "用於列印支撐的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "support_infill_extruder_nr label" +msgid "Support Infill Extruder" +msgstr "支撐填充擠出機" + +#: fdmprinter.def.json +msgctxt "support_infill_extruder_nr description" +msgid "" +"The extruder train to use for printing the infill of the support. This is " +"used in multi-extrusion." +msgstr "用於列印支撐填充的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr_layer_0 label" +msgid "First Layer Support Extruder" +msgstr "第一層支撐擠出機" + +#: fdmprinter.def.json +msgctxt "support_extruder_nr_layer_0 description" +msgid "" +"The extruder train to use for printing the first layer of support infill. " +"This is used in multi-extrusion." +msgstr "用於列印支撐填充第一層的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "support_interface_extruder_nr label" +msgid "Support Interface Extruder" +msgstr "支撐介面擠出機" + +#: fdmprinter.def.json +msgctxt "support_interface_extruder_nr description" +msgid "" +"The extruder train to use for printing the roofs and floors of the support. " +"This is used in multi-extrusion." +msgstr "用於列印支撐頂板和底板的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "support_roof_extruder_nr label" +msgid "Support Roof Extruder" +msgstr "支撐頂板擠出機" + +#: fdmprinter.def.json +msgctxt "support_roof_extruder_nr description" +msgid "" +"The extruder train to use for printing the roofs of the support. This is " +"used in multi-extrusion." +msgstr "用於列印支撐頂板的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "support_bottom_extruder_nr label" +msgid "Support Floor Extruder" +msgstr "支撐底板擠出機" + +#: fdmprinter.def.json +msgctxt "support_bottom_extruder_nr description" +msgid "" +"The extruder train to use for printing the floors of the support. This is " +"used in multi-extrusion." +msgstr "用於列印支撐底板的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "support_type label" +msgid "Support Placement" +msgstr "支撐位置" + +#: fdmprinter.def.json +msgctxt "support_type description" +msgid "" +"Adjusts the placement of the support structures. The placement can be set to " +"touching build plate or everywhere. When set to everywhere the support " +"structures will also be printed on the model." +msgstr "" +"調整支撐結構的位置。位置可以設定為“接觸列印平台”或“每個地方”。當設定為“每個地" +"方”時,在模型上也會列印支撐結構。" + +#: fdmprinter.def.json +msgctxt "support_type option buildplate" +msgid "Touching Buildplate" +msgstr "接觸列印平台" + +#: fdmprinter.def.json +msgctxt "support_type option everywhere" +msgid "Everywhere" +msgstr "每個地方" + +#: fdmprinter.def.json +msgctxt "support_angle label" +msgid "Support Overhang Angle" +msgstr "支撐懸垂角度" + +#: fdmprinter.def.json +msgctxt "support_angle description" +msgid "" +"The minimum angle of overhangs for which support is added. At a value of 0° " +"all overhangs are supported, 90° will not provide any support." +msgstr "" +"添加支撐的最小懸垂角度。當角度為 0° 時,將支撐所有懸垂,當角度為 90° 時,不提" +"供任何支撐。" + +#: fdmprinter.def.json +msgctxt "support_pattern label" +msgid "Support Pattern" +msgstr "支撐列印樣式" + +#: fdmprinter.def.json +msgctxt "support_pattern description" +msgid "" +"The pattern of the support structures of the print. The different options " +"available result in sturdy or easy to remove support." +msgstr "支撐結構的列印樣式。有不同的選項可產生堅固的或容易清除的支撐。" + +#: fdmprinter.def.json +msgctxt "support_pattern option lines" +msgid "Lines" +msgstr "線條" + +#: fdmprinter.def.json +msgctxt "support_pattern option grid" +msgid "Grid" +msgstr "網格" + +#: fdmprinter.def.json +msgctxt "support_pattern option triangles" +msgid "Triangles" +msgstr "三角形" + +#: fdmprinter.def.json +msgctxt "support_pattern option concentric" +msgid "Concentric" +msgstr "同心" + +#: fdmprinter.def.json +msgctxt "support_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "同心 3D" + +#: fdmprinter.def.json +msgctxt "support_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "support_pattern option cross" +msgid "Cross" +msgstr "十字形" + +#: fdmprinter.def.json +msgctxt "support_connect_zigzags label" +msgid "Connect Support ZigZags" +msgstr "連接支撐鋸齒狀" + +#: fdmprinter.def.json +msgctxt "support_connect_zigzags description" +msgid "" +"Connect the ZigZags. This will increase the strength of the zig zag support " +"structure." +msgstr "連接鋸齒狀。這將增加鋸齒狀支撐結構的强度。" + +#: fdmprinter.def.json +msgctxt "support_infill_rate label" +msgid "Support Density" +msgstr "支撐密度" + +#: fdmprinter.def.json +msgctxt "support_infill_rate description" +msgid "" +"Adjusts the density of the support structure. A higher value results in " +"better overhangs, but the supports are harder to remove." +msgstr "調整支撐結構的密度。較高的值會實現更好的懸垂,但支撐將更加難以移除。" + +#: fdmprinter.def.json +msgctxt "support_line_distance label" +msgid "Support Line Distance" +msgstr "支撐線條間距" + +#: fdmprinter.def.json +msgctxt "support_line_distance description" +msgid "" +"Distance between the printed support structure lines. This setting is " +"calculated by the support density." +msgstr "已列印支撐結構線條之間的距離。該設定通過支撐密度計算。" + +#: fdmprinter.def.json +msgctxt "support_z_distance label" +msgid "Support Z Distance" +msgstr "支撐 Z 間距" + +#: fdmprinter.def.json +msgctxt "support_z_distance description" +msgid "" +"Distance from the top/bottom of the support structure to the print. This gap " +"provides clearance to remove the supports after the model is printed. This " +"value is rounded up to a multiple of the layer height." +msgstr "" +"支撐結構距離模型頂部/底部的距離。這一個小的差距使得它更容易被去除,這個數值會" +"被無條件進位到層高的倍數。" + +#: fdmprinter.def.json +msgctxt "support_top_distance label" +msgid "Support Top Distance" +msgstr "支撐頂部間距" + +#: fdmprinter.def.json +msgctxt "support_top_distance description" +msgid "Distance from the top of the support to the print." +msgstr "從支撐頂部到列印品的距離。" + +#: fdmprinter.def.json +msgctxt "support_bottom_distance label" +msgid "Support Bottom Distance" +msgstr "支撐底部間距" + +#: fdmprinter.def.json +msgctxt "support_bottom_distance description" +msgid "Distance from the print to the bottom of the support." +msgstr "從列印品到支撐底部的距離。" + +#: fdmprinter.def.json +msgctxt "support_xy_distance label" +msgid "Support X/Y Distance" +msgstr "支撐 X/Y 間距" + +#: fdmprinter.def.json +msgctxt "support_xy_distance description" +msgid "Distance of the support structure from the print in the X/Y directions." +msgstr "支撐結構在 X/Y 方向距列印品的距離。" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z label" +msgid "Support Distance Priority" +msgstr "支撐間距優先權" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z description" +msgid "" +"Whether the Support X/Y Distance overrides the Support Z Distance or vice " +"versa. When X/Y overrides Z the X/Y distance can push away the support from " +"the model, influencing the actual Z distance to the overhang. We can disable " +"this by not applying the X/Y distance around overhangs." +msgstr "" +"支撐 X/Y 間距是否優先於支撐 Z 間距的設定。當 X/Y 間距優先於 Z 時,X/Y 間距可" +"將支撐從模型上推離,同時影響與懸垂之間的實際 Z 間距。我們可以通過不在懸垂周圍" +"套用 X/Y 間距來關閉此選項。" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z option xy_overrides_z" +msgid "X/Y overrides Z" +msgstr "X/Y 優先 Z" + +#: fdmprinter.def.json +msgctxt "support_xy_overrides_z option z_overrides_xy" +msgid "Z overrides X/Y" +msgstr "Z 優先 X/Y" + +#: fdmprinter.def.json +msgctxt "support_xy_distance_overhang label" +msgid "Minimum Support X/Y Distance" +msgstr "最小支撐 X/Y 間距" + +#: fdmprinter.def.json +msgctxt "support_xy_distance_overhang description" +msgid "" +"Distance of the support structure from the overhang in the X/Y directions. " +msgstr "支撐結構在 X/Y 方向與懸垂的間距。" + +#: fdmprinter.def.json +msgctxt "support_bottom_stair_step_height label" +msgid "Support Stair Step Height" +msgstr "支撐階梯高度" + +#: fdmprinter.def.json +msgctxt "support_bottom_stair_step_height description" +msgid "" +"The height of the steps of the stair-like bottom of support resting on the " +"model. A low value makes the support harder to remove, but too high values " +"can lead to unstable support structures. Set to zero to turn off the stair-" +"like behaviour." +msgstr "" +"模型上的支撐階梯狀底部的階梯高度。較低的值會使支撐更難於移除,但過高的值可能" +"導致不穩定的支撐結構。設為零可以關閉階梯狀行為。" + +#: fdmprinter.def.json +msgctxt "support_bottom_stair_step_width label" +msgid "Support Stair Step Maximum Width" +msgstr "支撐階梯最大寬度" + +#: fdmprinter.def.json +msgctxt "support_bottom_stair_step_width description" +msgid "" +"The maximum width of the steps of the stair-like bottom of support resting " +"on the model. A low value makes the support harder to remove, but too high " +"values can lead to unstable support structures." +msgstr "" +"停留在模型上的支撐階梯狀底部的最大階梯寬度。較低的值會使支撐更難於移除,但過" +"高的值可能導致不穩定的支撐結構。" + +#: fdmprinter.def.json +msgctxt "support_join_distance label" +msgid "Support Join Distance" +msgstr "支撐結合距離" + +#: fdmprinter.def.json +msgctxt "support_join_distance description" +msgid "" +"The maximum distance between support structures in the X/Y directions. When " +"seperate structures are closer together than this value, the structures " +"merge into one." +msgstr "" +"支撐結構間在 X/Y 方向的最大距離。當分離結構之間的距離小於此值時,這些結構將合" +"併為一個。" + +#: fdmprinter.def.json +msgctxt "support_offset label" +msgid "Support Horizontal Expansion" +msgstr "支撐水平擴展" + +#: fdmprinter.def.json +msgctxt "support_offset description" +msgid "" +"Amount of offset applied to all support polygons in each layer. Positive " +"values can smooth out the support areas and result in more sturdy support." +msgstr "" +"套用到每一層所有支撐多邊形的偏移量。正值可以讓支撐區域更平滑,並產生更為牢固" +"的支撐。" + +#: fdmprinter.def.json +msgctxt "support_infill_sparse_thickness label" +msgid "Support Infill Layer Thickness" +msgstr "支撐填充層厚度" + +#: fdmprinter.def.json +msgctxt "support_infill_sparse_thickness description" +msgid "" +"The thickness per layer of support infill material. This value should always " +"be a multiple of the layer height and is otherwise rounded." +msgstr "" +"支撐填充耗材每層的厚度。該值應為層高的倍數,否則數值會被四捨五入到層高的倍" +"數。" + +#: fdmprinter.def.json +msgctxt "gradual_support_infill_steps label" +msgid "Gradual Support Infill Steps" +msgstr "漸進支撐填充步階" + +#: fdmprinter.def.json +msgctxt "gradual_support_infill_steps description" +msgid "" +"Number of times to reduce the support infill density by half when getting " +"further below top surfaces. Areas which are closer to top surfaces get a " +"higher density, up to the Support Infill Density." +msgstr "" +"從支撐頂層往下,填充密度減半的次數。越靠近頂層的填充密度越高,最高密度為支撐" +"填充密度。" + +#: fdmprinter.def.json +msgctxt "gradual_support_infill_step_height label" +msgid "Gradual Support Infill Step Height" +msgstr "漸進支撐填充步階高度" + +#: fdmprinter.def.json +msgctxt "gradual_support_infill_step_height description" +msgid "" +"The height of support infill of a given density before switching to half the " +"density." +msgstr "支撐層密度減半的厚度。" + +#: fdmprinter.def.json +msgctxt "support_interface_enable label" +msgid "Enable Support Interface" +msgstr "啟用支撐介面" + +#: fdmprinter.def.json +msgctxt "support_interface_enable description" +msgid "" +"Generate a dense interface between the model and the support. This will " +"create a skin at the top of the support on which the model is printed and at " +"the bottom of the support, where it rests on the model." +msgstr "" +"在模型和支撐之間產生一個密度較高的介面。這會在承載模型的支撐頂部和座落在模型" +"上的支撐底部創造出一個介面層。" + +#: fdmprinter.def.json +msgctxt "support_roof_enable label" +msgid "Enable Support Roof" +msgstr "啟用支撐頂板" + +#: fdmprinter.def.json +msgctxt "support_roof_enable description" +msgid "" +"Generate a dense slab of material between the top of support and the model. " +"This will create a skin between the model and support." +msgstr "" +"在支撐頂部和模型之間產生一個密集的平板。這會在模型和支撐之間形成一個介面層。" + +#: fdmprinter.def.json +msgctxt "support_bottom_enable label" +msgid "Enable Support Floor" +msgstr "啟用支撐底板" + +#: fdmprinter.def.json +msgctxt "support_bottom_enable description" +msgid "" +"Generate a dense slab of material between the bottom of the support and the " +"model. This will create a skin between the model and support." +msgstr "" +"在支撐底部和模型之間產生一個密集的平板。這會在模型和支撐之間形成一個介面層。" + +#: fdmprinter.def.json +msgctxt "support_interface_height label" +msgid "Support Interface Thickness" +msgstr "支撐介面厚度" + +#: fdmprinter.def.json +msgctxt "support_interface_height description" +msgid "" +"The thickness of the interface of the support where it touches with the " +"model on the bottom or the top." +msgstr "支撐與模型在底部或頂部接觸的介面厚度。" + +#: fdmprinter.def.json +msgctxt "support_roof_height label" +msgid "Support Roof Thickness" +msgstr "支撐頂板厚度" + +#: fdmprinter.def.json +msgctxt "support_roof_height description" +msgid "" +"The thickness of the support roofs. This controls the amount of dense layers " +"at the top of the support on which the model rests." +msgstr "支撐頂板的厚度。這會控制承載模型的支撐頂部密集層的數量。" + +#: fdmprinter.def.json +msgctxt "support_bottom_height label" +msgid "Support Floor Thickness" +msgstr "支撐底板厚度" + +#: fdmprinter.def.json +msgctxt "support_bottom_height description" +msgid "" +"The thickness of the support floors. This controls the number of dense " +"layers that are printed on top of places of a model on which support rests." +msgstr "支撐底板的厚度。這會控制座落在模型上的支撐底部密集層的數量。" + +#: fdmprinter.def.json +msgctxt "support_interface_skip_height label" +msgid "Support Interface Resolution" +msgstr "支撐介面解析度" + +#: fdmprinter.def.json +msgctxt "support_interface_skip_height description" +msgid "" +"When checking where there's model above and below the support, take steps of " +"the given height. Lower values will slice slower, while higher values may " +"cause normal support to be printed in some places where there should have " +"been support interface." +msgstr "" +"在檢查支撐上方或下方是否有模型時,所採用步階的高度。值越低切片速度越慢,而較" +"高的值會導致在部分應有支撐介面的位置列印一般的支撐。" + +#: fdmprinter.def.json +msgctxt "support_interface_density label" +msgid "Support Interface Density" +msgstr "支撐介面密度" + +#: fdmprinter.def.json +msgctxt "support_interface_density description" +msgid "" +"Adjusts the density of the roofs and floors of the support structure. A " +"higher value results in better overhangs, but the supports are harder to " +"remove." +msgstr "" +"調整支撐結構頂板和底板的密度。較高的值會實現更好的懸垂,但支撐將更加難以移" +"除。" + +#: fdmprinter.def.json +msgctxt "support_roof_density label" +msgid "Support Roof Density" +msgstr "支撐頂板密度" + +#: fdmprinter.def.json +msgctxt "support_roof_density description" +msgid "" +"The density of the roofs of the support structure. A higher value results in " +"better overhangs, but the supports are harder to remove." +msgstr "支撐結構頂板的密度。較高的值會讓懸垂印得更好,但支撐將更加難以移除。" + +#: fdmprinter.def.json +msgctxt "support_roof_line_distance label" +msgid "Support Roof Line Distance" +msgstr "支撐頂板線條距離" + +#: fdmprinter.def.json +msgctxt "support_roof_line_distance description" +msgid "" +"Distance between the printed support roof lines. This setting is calculated " +"by the Support Roof Density, but can be adjusted separately." +msgstr "支撐頂板線條之間的距離。該設定是通過支撐頂板密度計算,但可以單獨調整。" + +#: fdmprinter.def.json +msgctxt "support_bottom_density label" +msgid "Support Floor Density" +msgstr "支撐底板密度" + +#: fdmprinter.def.json +msgctxt "support_bottom_density description" +msgid "" +"The density of the floors of the support structure. A higher value results " +"in better adhesion of the support on top of the model." +msgstr "支撐結構底板的密度。較高的值會讓支撐更容易附著在模型上。" + +#: fdmprinter.def.json +msgctxt "support_bottom_line_distance label" +msgid "Support Floor Line Distance" +msgstr "支撐底板線條距離" + +#: fdmprinter.def.json +msgctxt "support_bottom_line_distance description" +msgid "" +"Distance between the printed support floor lines. This setting is calculated " +"by the Support Floor Density, but can be adjusted separately." +msgstr "支撐底板線條之間的距離。該設定是通過支撐底板密度計算,但可以單獨調整。" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern label" +msgid "Support Interface Pattern" +msgstr "支撐介面列印樣式" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern description" +msgid "" +"The pattern with which the interface of the support with the model is " +"printed." +msgstr "支撐與模型之間介面的列印樣式。" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option lines" +msgid "Lines" +msgstr "線條" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option grid" +msgid "Grid" +msgstr "網格" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option triangles" +msgid "Triangles" +msgstr "三角形" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option concentric" +msgid "Concentric" +msgstr "同心" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "同心 3D" + +#: fdmprinter.def.json +msgctxt "support_interface_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern label" +msgid "Support Roof Pattern" +msgstr "支撐頂板列印樣式" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern description" +msgid "The pattern with which the roofs of the support are printed." +msgstr "列印支撐頂板的列印樣式。" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern option lines" +msgid "Lines" +msgstr "直線" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern option grid" +msgid "Grid" +msgstr "網格" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern option triangles" +msgid "Triangles" +msgstr "三角形" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern option concentric" +msgid "Concentric" +msgstr "同心圓" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "立體同心圓" + +#: fdmprinter.def.json +msgctxt "support_roof_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern label" +msgid "Support Floor Pattern" +msgstr "支撐底板列印樣式" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern description" +msgid "The pattern with which the floors of the support are printed." +msgstr "列印支撐底板的列印樣式。" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern option lines" +msgid "Lines" +msgstr "線條" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern option grid" +msgid "Grid" +msgstr "網格" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern option triangles" +msgid "Triangles" +msgstr "三角形" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern option concentric" +msgid "Concentric" +msgstr "同心" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern option concentric_3d" +msgid "Concentric 3D" +msgstr "同心 3D" + +#: fdmprinter.def.json +msgctxt "support_bottom_pattern option zigzag" +msgid "Zig Zag" +msgstr "鋸齒狀" + +#: fdmprinter.def.json +msgctxt "support_use_towers label" +msgid "Use Towers" +msgstr "使用塔型支撐" + +#: fdmprinter.def.json +msgctxt "support_use_towers description" +msgid "" +"Use specialized towers to support tiny overhang areas. These towers have a " +"larger diameter than the region they support. Near the overhang the towers' " +"diameter decreases, forming a roof." +msgstr "" +"使用專門的塔來支撐較小的懸垂區域。這些塔的直徑比它們所支撐的區域要大。在靠近" +"懸垂物時,塔的直徑減小,形成頂板。" + +#: fdmprinter.def.json +msgctxt "support_tower_diameter label" +msgid "Tower Diameter" +msgstr "塔直徑" + +#: fdmprinter.def.json +msgctxt "support_tower_diameter description" +msgid "The diameter of a special tower." +msgstr "特殊塔的直徑。" + +#: fdmprinter.def.json +msgctxt "support_minimal_diameter label" +msgid "Minimum Diameter" +msgstr "最小直徑" + +#: fdmprinter.def.json +msgctxt "support_minimal_diameter description" +msgid "" +"Minimum diameter in the X/Y directions of a small area which is to be " +"supported by a specialized support tower." +msgstr "小區域中支撐塔的 X/Y 軸方向最小直徑。" + +#: fdmprinter.def.json +msgctxt "support_tower_roof_angle label" +msgid "Tower Roof Angle" +msgstr "塔頂板角度" + +#: fdmprinter.def.json +msgctxt "support_tower_roof_angle description" +msgid "" +"The angle of a rooftop of a tower. A higher value results in pointed tower " +"roofs, a lower value results in flattened tower roofs." +msgstr "塔頂角度。該值越高,塔頂越尖,值越低,塔頂越平。" + +#: fdmprinter.def.json +msgctxt "platform_adhesion label" +msgid "Build Plate Adhesion" +msgstr "列印平台附著" + +#: fdmprinter.def.json +msgctxt "platform_adhesion description" +msgid "Adhesion" +msgstr "附著" + +#: fdmprinter.def.json +msgctxt "prime_blob_enable label" +msgid "Enable Prime Blob" +msgstr "啟用少量裝填" + +#: fdmprinter.def.json +msgctxt "prime_blob_enable description" +msgid "" +"Whether to prime the filament with a blob before printing. Turning this " +"setting on will ensure that the extruder will have material ready at the " +"nozzle before printing. Printing Brim or Skirt can act like priming too, in " +"which case turning this setting off saves some time." +msgstr "" +"列印前是否裝填少量的耗材。開啟此設定將確保列印前擠出機的噴頭處已準備好耗材。" +"列印邊緣或外圍也可作為裝填用途,這種情况下關閉此設定可以節省時間。" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_x label" +msgid "Extruder Prime X Position" +msgstr "擠出機 X 軸起始位置" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_x description" +msgid "" +"The X coordinate of the position where the nozzle primes at the start of " +"printing." +msgstr "列印開始時,噴頭在 X 軸上初始位置。" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_y label" +msgid "Extruder Prime Y Position" +msgstr "擠出機 Y 軸起始位置" + +#: fdmprinter.def.json +msgctxt "extruder_prime_pos_y description" +msgid "" +"The Y coordinate of the position where the nozzle primes at the start of " +"printing." +msgstr "列印開始時,噴頭在 Y 軸座標上初始位置。" + +#: fdmprinter.def.json +msgctxt "adhesion_type label" +msgid "Build Plate Adhesion Type" +msgstr "列印平台附著類型" + +#: fdmprinter.def.json +msgctxt "adhesion_type description" +msgid "" +"Different options that help to improve both priming your extrusion and " +"adhesion to the build plate. Brim adds a single layer flat area around the " +"base of your model to prevent warping. Raft adds a thick grid with a roof " +"below the model. Skirt is a line printed around the model, but not connected " +"to the model." +msgstr "" +"幫助改善擠出裝填以及與列印平台附著的不同選項。邊緣會在模型基座周圍添加單層平" +"面區域,以防止翹曲。木筏會在模型底下添加一個有頂板的厚網格。外圍是在模型四周" +"列印的一條線,但並不與模型連接。" + +#: fdmprinter.def.json +msgctxt "adhesion_type option skirt" +msgid "Skirt" +msgstr "外圍" + +#: fdmprinter.def.json +msgctxt "adhesion_type option brim" +msgid "Brim" +msgstr "邊緣" + +#: fdmprinter.def.json +msgctxt "adhesion_type option raft" +msgid "Raft" +msgstr "木筏" + +#: fdmprinter.def.json +msgctxt "adhesion_type option none" +msgid "None" +msgstr "無" + +#: fdmprinter.def.json +msgctxt "adhesion_extruder_nr label" +msgid "Build Plate Adhesion Extruder" +msgstr "列印平台附著擠出機" + +#: fdmprinter.def.json +msgctxt "adhesion_extruder_nr description" +msgid "" +"The extruder train to use for printing the skirt/brim/raft. This is used in " +"multi-extrusion." +msgstr "用於列印外圍/邊緣/木筏的擠出機組。在多擠出機情況下適用。" + +#: fdmprinter.def.json +msgctxt "skirt_line_count label" +msgid "Skirt Line Count" +msgstr "外圍線條數量" + +#: fdmprinter.def.json +msgctxt "skirt_line_count description" +msgid "" +"Multiple skirt lines help to prime your extrusion better for small models. " +"Setting this to 0 will disable the skirt." +msgstr "" +"多條外圍線條有助你在列印小型模型時,更好地裝填的擠出機組。將其設為 0 將關閉外" +"圍。" + +#: fdmprinter.def.json +msgctxt "skirt_gap label" +msgid "Skirt Distance" +msgstr "外圍間距" + +#: fdmprinter.def.json +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 "" +"外圍和列印第一層之間的水平距離。\n" +"這是最小距離,多個外圍線條將從此距離向外延伸。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_minimal_length label" +msgid "Skirt/Brim Minimum Length" +msgstr "外圍/邊緣最小長度" + +#: fdmprinter.def.json +msgctxt "skirt_brim_minimal_length description" +msgid "" +"The minimum length of the skirt or brim. If this length is not reached by " +"all skirt or brim lines together, more skirt or brim lines will be added " +"until the minimum length is reached. Note: If the line count is set to 0 " +"this is ignored." +msgstr "" +"外圍或邊緣的最小長度。如果所有外圍或邊緣線條之和都没有達到此長度,則將添加更" +"多外圍或邊緣線條直至達到最小長度。注意:如果線條計數設為 0,則將忽略此選項。" + +#: fdmprinter.def.json +msgctxt "brim_width label" +msgid "Brim Width" +msgstr "邊緣寬度" + +#: fdmprinter.def.json +msgctxt "brim_width description" +msgid "" +"The distance from the model to the outermost brim line. A larger brim " +"enhances adhesion to the build plate, but also reduces the effective print " +"area." +msgstr "" +"模型到最外側邊緣線的距離。較大的邊緣可增强與列印平台的附著,但也會減少有效列" +"印區域。" + +#: fdmprinter.def.json +msgctxt "brim_line_count label" +msgid "Brim Line Count" +msgstr "邊緣線條數量" + +#: fdmprinter.def.json +msgctxt "brim_line_count description" +msgid "" +"The number of lines used for a brim. More brim lines enhance adhesion to the " +"build plate, but also reduces the effective print area." +msgstr "" +"邊緣所用線條數量。更多邊緣線條可增强與列印平台的附著,但也會減少有效列印區" +"域。" + +#: fdmprinter.def.json +msgctxt "brim_outside_only label" +msgid "Brim Only on Outside" +msgstr "僅在外部列印邊緣" + +#: fdmprinter.def.json +msgctxt "brim_outside_only description" +msgid "" +"Only print the brim on the outside of the model. This reduces the amount of " +"brim you need to remove afterwards, while it doesn't reduce the bed adhesion " +"that much." +msgstr "" +"僅在模型外部列印邊緣。這會減少你之後需要移除的邊緣量,而不會過度影響列印平台" +"附著。" + +#: fdmprinter.def.json +msgctxt "raft_margin label" +msgid "Raft Extra Margin" +msgstr "木筏額外邊緣" + +#: fdmprinter.def.json +msgctxt "raft_margin description" +msgid "" +"If the raft is enabled, this is the extra raft area around the model which " +"is also given a raft. Increasing this margin will create a stronger raft " +"while using more material and leaving less area for your print." +msgstr "" +"如果啟用了木筏,在模型周圍也會增加額外邊緣。增大這個邊緣將產生更強的木筏,不" +"過也會使用更多的耗材,並減少印表機的可列印面積。" + +#: fdmprinter.def.json +msgctxt "raft_smoothing label" +msgid "Raft Smoothing" +msgstr "木筏平滑處理" + +#: fdmprinter.def.json +msgctxt "raft_smoothing description" +msgid "" +"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." +msgstr "" +"此設定控制木筏輪廓凹角導圓角的量。向內的轉角會被導為圓弧,其半徑等於此設定" +"值。此設定同時可以移除木筏輪廓中半徑小於此設定值的圓孔。" + +#: fdmprinter.def.json +msgctxt "raft_airgap label" +msgid "Raft Air Gap" +msgstr "木筏間隙" + +#: fdmprinter.def.json +msgctxt "raft_airgap description" +msgid "" +"The gap between the final raft layer and the first layer of the model. Only " +"the first layer is raised by this amount to lower the bonding between the " +"raft layer and the model. Makes it easier to peel off the raft." +msgstr "" +"木筏最後一層與模型第一層之間的間隙。只有第一層被提高了這個距離,以便降低木筏" +"和模型之間的附著。讓木筏更容易剝離。" + +#: fdmprinter.def.json +msgctxt "layer_0_z_overlap label" +msgid "Initial Layer Z Overlap" +msgstr "起始層 Z 重疊" + +#: fdmprinter.def.json +msgctxt "layer_0_z_overlap description" +msgid "" +"Make the first and second layer of the model overlap in the Z direction to " +"compensate for the filament lost in the airgap. All models above the first " +"model layer will be shifted down by this amount." +msgstr "" +"使模型的第一層和第二層在 Z 方向上重疊以補償在空隙中損失的耗材。第一個模型層上" +"方的所有模型將向下移動此重疊量。" + +#: fdmprinter.def.json +msgctxt "raft_surface_layers label" +msgid "Raft Top Layers" +msgstr "木筏頂部層數" + +#: fdmprinter.def.json +msgctxt "raft_surface_layers description" +msgid "" +"The number of top layers on top of the 2nd raft layer. These are fully " +"filled layers that the model sits on. 2 layers result in a smoother top " +"surface than 1." +msgstr "" +"位於木筏中層上方的頂部層數。這是承載模型的完全填充層。兩層會產生比一層更平滑" +"的頂部表面。" + +#: fdmprinter.def.json +msgctxt "raft_surface_thickness label" +msgid "Raft Top Layer Thickness" +msgstr "木筏頂部層厚" + +#: fdmprinter.def.json +msgctxt "raft_surface_thickness description" +msgid "Layer thickness of the top raft layers." +msgstr "木筏頂部單層的厚度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_width label" +msgid "Raft Top Line Width" +msgstr "木筏頂部線寬" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_width description" +msgid "" +"Width of the lines in the top surface of the raft. These can be thin lines " +"so that the top of the raft becomes smooth." +msgstr "木筏頂部表面的線寬。這些線條可以是細線,以便讓木筏頂部變得平滑。" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_spacing label" +msgid "Raft Top Spacing" +msgstr "木筏頂部間距" + +#: fdmprinter.def.json +msgctxt "raft_surface_line_spacing description" +msgid "" +"The distance between the raft lines for the top raft layers. The spacing " +"should be equal to the line width, so that the surface is solid." +msgstr "木筏頂部線條之間的距離。間距應等於線寬,以便打造堅固表面。" + +#: fdmprinter.def.json +msgctxt "raft_interface_thickness label" +msgid "Raft Middle Thickness" +msgstr "木筏中層厚度" + +#: fdmprinter.def.json +msgctxt "raft_interface_thickness description" +msgid "Layer thickness of the middle raft layer." +msgstr "木筏中層的層厚。" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_width label" +msgid "Raft Middle Line Width" +msgstr "木筏中層線寬" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_width description" +msgid "" +"Width of the lines in the middle raft layer. Making the second layer extrude " +"more causes the lines to stick to the build plate." +msgstr "木筏中層的線寬。第二層擠出多一些會讓線條附著在列印平台上。" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_spacing label" +msgid "Raft Middle Spacing" +msgstr "木筏中層間距" + +#: fdmprinter.def.json +msgctxt "raft_interface_line_spacing description" +msgid "" +"The distance between the raft lines for the middle raft layer. The spacing " +"of the middle should be quite wide, while being dense enough to support the " +"top raft layers." +msgstr "" +"木筏中層線條之間的距離。中層的間距應足夠寬,同時也要足夠密集,以便支撐木筏頂" +"部。" + +#: fdmprinter.def.json +msgctxt "raft_base_thickness label" +msgid "Raft Base Thickness" +msgstr "木筏底部厚度" + +#: fdmprinter.def.json +msgctxt "raft_base_thickness description" +msgid "" +"Layer thickness of the base raft layer. This should be a thick layer which " +"sticks firmly to the printer build plate." +msgstr "木筏底部的層厚。本層應為與印表機列印平台穩固附著厚實的一層。" + +#: fdmprinter.def.json +msgctxt "raft_base_line_width label" +msgid "Raft Base Line Width" +msgstr "木筏底部線寬" + +#: fdmprinter.def.json +msgctxt "raft_base_line_width description" +msgid "" +"Width of the lines in the base raft layer. These should be thick lines to " +"assist in build plate adhesion." +msgstr "木筏底部的線寬。這些線條應該是粗線,以便協助列印平台附著。" + +#: fdmprinter.def.json +msgctxt "raft_base_line_spacing label" +msgid "Raft Line Spacing" +msgstr "木筏底部間距" + +#: fdmprinter.def.json +msgctxt "raft_base_line_spacing description" +msgid "" +"The distance between the raft lines for the base raft layer. Wide spacing " +"makes for easy removal of the raft from the build plate." +msgstr "木筏底部線條之間的距離。寬間距方便讓木筏從列印平台移除。" + +#: fdmprinter.def.json +msgctxt "raft_speed label" +msgid "Raft Print Speed" +msgstr "木筏列印速度" + +#: fdmprinter.def.json +msgctxt "raft_speed description" +msgid "The speed at which the raft is printed." +msgstr "列印木筏的速度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_speed label" +msgid "Raft Top Print Speed" +msgstr "木筏頂部列印速度" + +#: fdmprinter.def.json +msgctxt "raft_surface_speed description" +msgid "" +"The speed at which the top raft layers are printed. These should be printed " +"a bit slower, so that the nozzle can slowly smooth out adjacent surface " +"lines." +msgstr "" +"列印木筏頂部的速度。這些層應以稍慢的速度列印,以便噴頭緩慢地整平臨近的表面線" +"條。" + +#: fdmprinter.def.json +msgctxt "raft_interface_speed label" +msgid "Raft Middle Print Speed" +msgstr "木筏中層列印速度" + +#: fdmprinter.def.json +msgctxt "raft_interface_speed description" +msgid "" +"The speed at which the middle raft layer is printed. This should be printed " +"quite slowly, as the volume of material coming out of the nozzle is quite " +"high." +msgstr "" +"列印木筏中層的速度。這些層應以很慢的速度列印,因為噴頭所出的耗材量非常高。" + +#: fdmprinter.def.json +msgctxt "raft_base_speed label" +msgid "Raft Base Print Speed" +msgstr "木筏底部列印速度" + +#: fdmprinter.def.json +msgctxt "raft_base_speed description" +msgid "" +"The speed at which the base raft layer is printed. This should be printed " +"quite slowly, as the volume of material coming out of the nozzle is quite " +"high." +msgstr "" +"列印木筏底部的速度。這些層應以很慢的速度列印,因為噴頭所出的耗材量非常高。" + +#: fdmprinter.def.json +msgctxt "raft_acceleration label" +msgid "Raft Print Acceleration" +msgstr "木筏列印加速度" + +#: fdmprinter.def.json +msgctxt "raft_acceleration description" +msgid "The acceleration with which the raft is printed." +msgstr "列印木筏的加速度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_acceleration label" +msgid "Raft Top Print Acceleration" +msgstr "木筏頂部列印加速度" + +#: fdmprinter.def.json +msgctxt "raft_surface_acceleration description" +msgid "The acceleration with which the top raft layers are printed." +msgstr "列印木筏頂部的加速度。" + +#: fdmprinter.def.json +msgctxt "raft_interface_acceleration label" +msgid "Raft Middle Print Acceleration" +msgstr "木筏中層列印加速度" + +#: fdmprinter.def.json +msgctxt "raft_interface_acceleration description" +msgid "The acceleration with which the middle raft layer is printed." +msgstr "列印木筏中層的加速度。" + +#: fdmprinter.def.json +msgctxt "raft_base_acceleration label" +msgid "Raft Base Print Acceleration" +msgstr "木筏底部列印加速度" + +#: fdmprinter.def.json +msgctxt "raft_base_acceleration description" +msgid "The acceleration with which the base raft layer is printed." +msgstr "列印木筏底部的加速度。" + +#: fdmprinter.def.json +msgctxt "raft_jerk label" +msgid "Raft Print Jerk" +msgstr "木筏列印加加速度" + +#: fdmprinter.def.json +msgctxt "raft_jerk description" +msgid "The jerk with which the raft is printed." +msgstr "列印木筏的加加速度。" + +#: fdmprinter.def.json +msgctxt "raft_surface_jerk label" +msgid "Raft Top Print Jerk" +msgstr "木筏頂部列印加加速度" + +#: fdmprinter.def.json +msgctxt "raft_surface_jerk description" +msgid "The jerk with which the top raft layers are printed." +msgstr "列印木筏頂部的加加速度。" + +#: fdmprinter.def.json +msgctxt "raft_interface_jerk label" +msgid "Raft Middle Print Jerk" +msgstr "木筏中層列印加加速度" + +#: fdmprinter.def.json +msgctxt "raft_interface_jerk description" +msgid "The jerk with which the middle raft layer is printed." +msgstr "列印木筏中層的加加速度。" + +#: fdmprinter.def.json +msgctxt "raft_base_jerk label" +msgid "Raft Base Print Jerk" +msgstr "木筏底部列印加加速度" + +#: fdmprinter.def.json +msgctxt "raft_base_jerk description" +msgid "The jerk with which the base raft layer is printed." +msgstr "列印木筏底部的加加速度。" + +#: fdmprinter.def.json +msgctxt "raft_fan_speed label" +msgid "Raft Fan Speed" +msgstr "木筏風扇轉速" + +#: fdmprinter.def.json +msgctxt "raft_fan_speed description" +msgid "The fan speed for the raft." +msgstr "木筏的風扇轉速。" + +#: fdmprinter.def.json +msgctxt "raft_surface_fan_speed label" +msgid "Raft Top Fan Speed" +msgstr "木筏頂部風扇轉速" + +#: fdmprinter.def.json +msgctxt "raft_surface_fan_speed description" +msgid "The fan speed for the top raft layers." +msgstr "木筏頂部的風扇轉速。" + +#: fdmprinter.def.json +msgctxt "raft_interface_fan_speed label" +msgid "Raft Middle Fan Speed" +msgstr "木筏中層風扇轉速" + +#: fdmprinter.def.json +msgctxt "raft_interface_fan_speed description" +msgid "The fan speed for the middle raft layer." +msgstr "木筏中層的風扇轉速。" + +#: fdmprinter.def.json +msgctxt "raft_base_fan_speed label" +msgid "Raft Base Fan Speed" +msgstr "木筏底部風扇轉速" + +#: fdmprinter.def.json +msgctxt "raft_base_fan_speed description" +msgid "The fan speed for the base raft layer." +msgstr "木筏底部的風扇轉速。" + +#: fdmprinter.def.json +msgctxt "dual label" +msgid "Dual Extrusion" +msgstr "雙重擠出機" + +#: fdmprinter.def.json +msgctxt "dual description" +msgid "Settings used for printing with multiple extruders." +msgstr "用於多擠出機情況下的設定。" + +#: fdmprinter.def.json +msgctxt "prime_tower_enable label" +msgid "Enable Prime Tower" +msgstr "啟用換料塔" + +#: fdmprinter.def.json +msgctxt "prime_tower_enable description" +msgid "" +"Print a tower next to the print which serves to prime the material after " +"each nozzle switch." +msgstr "在列印件旁邊印一個塔,用在每次切換噴頭後填充耗材。" + +#: fdmprinter.def.json +msgctxt "prime_tower_size label" +msgid "Prime Tower Size" +msgstr "換料塔尺寸" + +#: fdmprinter.def.json +msgctxt "prime_tower_size description" +msgid "The width of the prime tower." +msgstr "換料塔的寬度。" + +#: fdmprinter.def.json +msgctxt "prime_tower_min_volume label" +msgid "Prime Tower Minimum Volume" +msgstr "換料塔最小體積" + +#: fdmprinter.def.json +msgctxt "prime_tower_min_volume description" +msgid "" +"The minimum volume for each layer of the prime tower in order to purge " +"enough material." +msgstr "為了清除足夠的耗材,換料塔每層的最小體積。" + +#: fdmprinter.def.json +msgctxt "prime_tower_wall_thickness label" +msgid "Prime Tower Thickness" +msgstr "換料塔厚度" + +#: fdmprinter.def.json +msgctxt "prime_tower_wall_thickness description" +msgid "" +"The thickness of the hollow prime tower. A thickness larger than half the " +"Prime Tower Minimum Volume will result in a dense prime tower." +msgstr "" +"空心換料塔的厚度。如果厚度大於換料塔最小體積的一半,則將形成一個密集的換料" +"塔。" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_x label" +msgid "Prime Tower X Position" +msgstr "換料塔 X 位置" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_x description" +msgid "The x coordinate of the position of the prime tower." +msgstr "換料塔位置的 X 座標。" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_y label" +msgid "Prime Tower Y Position" +msgstr "換料塔 Y 位置" + +#: fdmprinter.def.json +msgctxt "prime_tower_position_y description" +msgid "The y coordinate of the position of the prime tower." +msgstr "換料塔位置的 Y 座標。" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "換料塔流量" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "" +"Flow compensation: the amount of material extruded is multiplied by this " +"value." +msgstr "流量補償:擠出的耗材量乘以此值。" + +#: fdmprinter.def.json +msgctxt "prime_tower_wipe_enabled label" +msgid "Wipe Inactive Nozzle on Prime Tower" +msgstr "在換料塔上擦拭非作用中的噴頭" + +#: fdmprinter.def.json +msgctxt "prime_tower_wipe_enabled description" +msgid "" +"After printing the prime tower with one nozzle, wipe the oozed material from " +"the other nozzle off on the prime tower." +msgstr "在一個噴頭列印換料塔後,在換料塔上擦拭另一個噴頭滲出的耗材。" + +#: fdmprinter.def.json +msgctxt "dual_pre_wipe label" +msgid "Wipe Nozzle After Switch" +msgstr "切換後擦拭噴頭" + +#: fdmprinter.def.json +msgctxt "dual_pre_wipe description" +msgid "" +"After switching extruder, wipe the oozed material off of the nozzle on the " +"first thing printed. This performs a safe slow wipe move at a place where " +"the oozed material causes least harm to the surface quality of your print." +msgstr "" +"切換擠出機後,在列印的第一個物件上擦拭噴頭上的滲出耗材。這會在滲出耗材對列印" +"品表面品質造成最小損害的位置進行緩慢安全的擦拭動作。" + +#: fdmprinter.def.json +msgctxt "prime_tower_purge_volume label" +msgid "Prime Tower Purge Volume" +msgstr "換料塔清洗量" + +#: fdmprinter.def.json +msgctxt "prime_tower_purge_volume description" +msgid "" +"Amount of filament to be purged when wiping on the prime tower. Purging is " +"useful for compensating the filament lost by oozing during inactivity of the " +"nozzle." +msgstr "" +"在換料塔上進行擦拭時要清洗的耗材量。清洗可用於補償在噴頭不活動期間由於滲出而" +"損失的耗材。" + +#: fdmprinter.def.json +msgctxt "ooze_shield_enabled label" +msgid "Enable Ooze Shield" +msgstr "啟用擦拭牆" + +#: fdmprinter.def.json +msgctxt "ooze_shield_enabled description" +msgid "" +"Enable exterior ooze shield. This will create a shell around the model which " +"is likely to wipe a second nozzle if it's at the same height as the first " +"nozzle." +msgstr "" +"啟用外部擦拭牆。這將在模型周圍創建一個外殼,如果與第一個噴頭處於相同的高度," +"則可能會擦拭第二個噴頭。" + +#: fdmprinter.def.json +msgctxt "ooze_shield_angle label" +msgid "Ooze Shield Angle" +msgstr "擦拭牆角度" + +#: fdmprinter.def.json +msgctxt "ooze_shield_angle description" +msgid "" +"The maximum angle a part in the ooze shield will have. With 0 degrees being " +"vertical, and 90 degrees being horizontal. A smaller angle leads to less " +"failed ooze shields, but more material." +msgstr "" +"擦拭牆中的一部分的最大角度。0度為垂直,90度為水平。較小的角度擦拭效果較好,但" +"是要用更多的耗材。" + +#: fdmprinter.def.json +msgctxt "ooze_shield_dist label" +msgid "Ooze Shield Distance" +msgstr "擦拭牆距離" + +#: fdmprinter.def.json +msgctxt "ooze_shield_dist description" +msgid "Distance of the ooze shield from the print, in the X/Y directions." +msgstr "擦拭牆與模型間的水平 ( X/Y 方向 ) 距離。" + +#: fdmprinter.def.json +msgctxt "meshfix label" +msgid "Mesh Fixes" +msgstr "網格修復" + +#: fdmprinter.def.json +msgctxt "meshfix description" +msgid "category_fixes" +msgstr "修復" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all label" +msgid "Union Overlapping Volumes" +msgstr "合併重疊體積" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all description" +msgid "" +"Ignore the internal geometry arising from overlapping volumes within a mesh " +"and print the volumes as one. This may cause unintended internal cavities to " +"disappear." +msgstr "" +"忽略由網格內的重疊體積產生的內部幾何,並將多個部分作為一個列印。這可能會導致" +"意外的內部孔洞消失。" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all_remove_holes label" +msgid "Remove All Holes" +msgstr "移除所有孔洞" + +#: fdmprinter.def.json +msgctxt "meshfix_union_all_remove_holes description" +msgid "" +"Remove the holes in each layer and keep only the outside shape. This will " +"ignore any invisible internal geometry. However, it also ignores layer holes " +"which can be viewed from above or below." +msgstr "" +"移除每層的孔洞,僅保留外部形狀。這會忽略任何不可見的內部幾何。但是,也會忽略" +"可從上方或下方看到的層孔洞。" + +#: fdmprinter.def.json +msgctxt "meshfix_extensive_stitching label" +msgid "Extensive Stitching" +msgstr "廣泛縫合" + +#: fdmprinter.def.json +msgctxt "meshfix_extensive_stitching description" +msgid "" +"Extensive stitching tries to stitch up open holes in the mesh by closing the " +"hole with touching polygons. This option can introduce a lot of processing " +"time." +msgstr "" +"廣泛縫合嘗試通過接觸多邊形來閉合孔洞,以此縫合網格中的開孔。此選項可能會產生" +"大量的處理時間。" + +#: fdmprinter.def.json +msgctxt "meshfix_keep_open_polygons label" +msgid "Keep Disconnected Faces" +msgstr "保持斷開表面" + +#: fdmprinter.def.json +msgctxt "meshfix_keep_open_polygons description" +msgid "" +"Normally Cura tries to stitch up small holes in the mesh and remove parts of " +"a layer with big holes. Enabling this option keeps those parts which cannot " +"be stitched. This option should be used as a last resort option when " +"everything else fails to produce proper GCode." +msgstr "" +"一般情况下,Cura 會嘗試縫合網格中的小孔,並移除有大孔的部分層。啟用此選項將保" +"留那些無法縫合的部分。當其他所有方法都無法產生正確的 GCode 時,該選項應該被用" +"作最後手段。" + +#: fdmprinter.def.json +msgctxt "meshfix_maximum_resolution label" +msgid "Maximum Resolution" +msgstr "最高解析度" + +#: fdmprinter.def.json +msgctxt "meshfix_maximum_resolution description" +msgid "" +"The minimum size of a line segment after slicing. If you increase this, the " +"mesh will have a lower resolution. This may allow the printer to keep up " +"with the speed it has to process g-code and will increase slice speed by " +"removing details of the mesh that it can't process anyway." +msgstr "" +"切片後線段的最小尺寸。 如果你增加此設定值,網格的解析度將較低。 這允許印表機" +"保持處理 G-code 的速度,並通過移除無法處理的網格細節來增加切片速度。" + +#: fdmprinter.def.json +msgctxt "multiple_mesh_overlap label" +msgid "Merged Meshes Overlap" +msgstr "合併網格重疊" + +#: fdmprinter.def.json +msgctxt "multiple_mesh_overlap description" +msgid "" +"Make meshes which are touching each other overlap a bit. This makes them " +"bond together better." +msgstr "使彼此接觸的網格稍微重疊。使他們能更緊密地結合在一起。" + +#: fdmprinter.def.json +msgctxt "carve_multiple_volumes label" +msgid "Remove Mesh Intersection" +msgstr "刪除網格交集部分" + +#: fdmprinter.def.json +msgctxt "carve_multiple_volumes description" +msgid "" +"Remove areas where multiple meshes are overlapping with each other. This may " +"be used if merged dual material objects overlap with each other." +msgstr "" +"刪除多個網格彼此重疊的區域。如果合併的雙重耗材對象彼此重疊,則可以使用此選" +"項。" + +#: fdmprinter.def.json +msgctxt "alternate_carve_order label" +msgid "Alternate Mesh Removal" +msgstr "交互移除網格重疊部分" + +#: fdmprinter.def.json +msgctxt "alternate_carve_order description" +msgid "" +"Switch to which mesh intersecting volumes will belong with every layer, so " +"that the overlapping meshes become interwoven. Turning this setting off will " +"cause one of the meshes to obtain all of the volume in the overlap, while it " +"is removed from the other meshes." +msgstr "" +"將網格重疊的部分,交互的在每一層中歸屬到不同的網格,以便重疊的網格交織在一" +"起。關閉此設定將使其中一個網格物體獲得重疊中的所有體積,而從其他網格物體中移" +"除。" + +#: fdmprinter.def.json +msgctxt "remove_empty_first_layers label" +msgid "Remove Empty First Layers" +msgstr "移除空的第一層" + +#: fdmprinter.def.json +msgctxt "remove_empty_first_layers description" +msgid "" +"Remove empty layers beneath the first printed layer if they are present. " +"Disabling this setting can cause empty first layers if the Slicing Tolerance " +"setting is set to Exclusive or Middle." +msgstr "" +"如果可列印的第一層下方有空的層,將其移除。假如「切片公差」設定為「排除」或" +"「中間」,關閉此設定可能會導致空的第一層。" + +#: fdmprinter.def.json +msgctxt "blackmagic label" +msgid "Special Modes" +msgstr "特殊模式" + +#: fdmprinter.def.json +msgctxt "blackmagic description" +msgid "category_blackmagic" +msgstr "黑魔法" + +#: fdmprinter.def.json +msgctxt "print_sequence label" +msgid "Print Sequence" +msgstr "列印順序" + +#: fdmprinter.def.json +msgctxt "print_sequence description" +msgid "" +"Whether to print all models one layer at a time or to wait for one model to " +"finish, before moving on to the next. One at a time mode is only possible if " +"all models are separated in such a way that the whole print head can move in " +"between and all models are lower than the distance between the nozzle and " +"the X/Y axes." +msgstr "" +"選擇一次列印一層中的所有模型或等待一個模型完成後再轉到下一個模型。排隊模式只" +"有在所有模型以一種整個列印頭可以在各個模型之間移動的方式分隔開,且所有模型都" +"低於噴頭和 X / Y 軸之間距離的情况下可用。" + +#: fdmprinter.def.json +msgctxt "print_sequence option all_at_once" +msgid "All at Once" +msgstr "同時列印" + +#: fdmprinter.def.json +msgctxt "print_sequence option one_at_a_time" +msgid "One at a Time" +msgstr "排隊列印" + +#: fdmprinter.def.json +msgctxt "infill_mesh label" +msgid "Infill Mesh" +msgstr "填充網格" + +#: fdmprinter.def.json +msgctxt "infill_mesh description" +msgid "" +"Use this mesh to modify the infill of other meshes with which it overlaps. " +"Replaces infill regions of other meshes with regions for this mesh. It's " +"suggested to only print one Wall and no Top/Bottom Skin for this mesh." +msgstr "" +"使用此網格修改與其重疊的其他網格的填充。利用此網格的區域替換其他網格的填充區" +"域。建議僅為此網格列印一個壁,而不列印頂部/底部表層。" + +#: fdmprinter.def.json +msgctxt "infill_mesh_order label" +msgid "Infill Mesh Order" +msgstr "填充網格順序" + +#: fdmprinter.def.json +msgctxt "infill_mesh_order description" +msgid "" +"Determines which infill mesh is inside the infill of another infill mesh. An " +"infill mesh with a higher order will modify the infill of infill meshes with " +"lower order and normal meshes." +msgstr "" +"確定哪個填充網格在另一個填充網格的填充內。順序較高的填充網格將修改順序較低的" +"填充網格以及普通網格的填充。" + +#: fdmprinter.def.json +msgctxt "cutting_mesh label" +msgid "Cutting Mesh" +msgstr "切割網格" + +#: fdmprinter.def.json +msgctxt "cutting_mesh description" +msgid "" +"Limit the volume of this mesh to within other meshes. You can use this to " +"make certain areas of one mesh print with different settings and with a " +"whole different extruder." +msgstr "" +"將此網格的體積限制在其他網格內。你可以使用它來制作採用不同的設定以及完全不同" +"的擠出機的網格列印的特定區域。" + +#: fdmprinter.def.json +msgctxt "mold_enabled label" +msgid "Mold" +msgstr "模具" + +#: fdmprinter.def.json +msgctxt "mold_enabled description" +msgid "" +"Print models as a mold, which can be cast in order to get a model which " +"resembles the models on the build plate." +msgstr "將模型作為模具列印,可進行鑄造,以便獲取與列印平台上的模型類似的模型。" + +#: fdmprinter.def.json +msgctxt "mold_width label" +msgid "Minimal Mold Width" +msgstr "最小模具寬度" + +#: fdmprinter.def.json +msgctxt "mold_width description" +msgid "" +"The minimal distance between the ouside of the mold and the outside of the " +"model." +msgstr "模具外側和模型外側之間的最小距離。" + +#: fdmprinter.def.json +msgctxt "mold_roof_height label" +msgid "Mold Roof Height" +msgstr "模具頂板高度" + +#: fdmprinter.def.json +msgctxt "mold_roof_height description" +msgid "The height above horizontal parts in your model which to print mold." +msgstr "用於列印模具的模型水平部分上方的高度。" + +#: fdmprinter.def.json +msgctxt "mold_angle label" +msgid "Mold Angle" +msgstr "模具角度" + +#: fdmprinter.def.json +msgctxt "mold_angle description" +msgid "" +"The angle of overhang of the outer walls created for the mold. 0° will make " +"the outer shell of the mold vertical, while 90° will make the outside of the " +"model follow the contour of the model." +msgstr "" +"為模具創建的外壁的懸垂角度。0° 將使模具的外殼垂直,而 90° 將使模型的外部遵循" +"模型的輪廓。" + +#: fdmprinter.def.json +msgctxt "support_mesh label" +msgid "Support Mesh" +msgstr "支撐網格" + +#: fdmprinter.def.json +msgctxt "support_mesh description" +msgid "" +"Use this mesh to specify support areas. This can be used to generate support " +"structure." +msgstr "使用此網格指定支撐區域。可用於產生支撐結構。" + +#: fdmprinter.def.json +msgctxt "support_mesh_drop_down label" +msgid "Drop Down Support Mesh" +msgstr "下拉式支撐網格" + +#: fdmprinter.def.json +msgctxt "support_mesh_drop_down description" +msgid "" +"Make support everywhere below the support mesh, so that there's no overhang " +"in the support mesh." +msgstr "在支撐網格下方的所有位置進行支撐,讓支撐網格中没有懸垂。" + +#: fdmprinter.def.json +msgctxt "anti_overhang_mesh label" +msgid "Anti Overhang Mesh" +msgstr "防懸網格" + +#: fdmprinter.def.json +msgctxt "anti_overhang_mesh description" +msgid "" +"Use this mesh to specify where no part of the model should be detected as " +"overhang. This can be used to remove unwanted support structure." +msgstr "" +"使用此網格指定模型的任何部分不應被檢測為懸垂的區域。可用於移除不需要的支撐結" +"構。" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode label" +msgid "Surface Mode" +msgstr "表面模式" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode description" +msgid "" +"Treat the model as a surface only, a volume, or volumes with loose surfaces. " +"The normal print mode only prints enclosed volumes. \"Surface\" prints a " +"single wall tracing the mesh surface with no infill and no top/bottom skin. " +"\"Both\" prints enclosed volumes like normal and any remaining polygons as " +"surfaces." +msgstr "" +"將模型作為僅表面、一個空間或多個具有鬆散表面的空間處理。“正常”僅列印封閉的空" +"間。“表面”列印模型表面的單壁,没有填充,也没有頂部/底部表層。“兩者”將封閉空間" +"正常列印,並將任何剩餘多邊形作為表面列印。" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode option normal" +msgid "Normal" +msgstr "正常" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode option surface" +msgid "Surface" +msgstr "表面" + +#: fdmprinter.def.json +msgctxt "magic_mesh_surface_mode option both" +msgid "Both" +msgstr "兩者" + +#: fdmprinter.def.json +msgctxt "magic_spiralize label" +msgid "Spiralize Outer Contour" +msgstr "螺旋列印外輪廓" + +#: fdmprinter.def.json +msgctxt "magic_spiralize description" +msgid "" +"Spiralize smooths out the Z move of the outer edge. This will create a " +"steady Z increase over the whole print. This feature turns a solid model " +"into a single walled print with a solid bottom. This feature should only be " +"enabled when each layer only contains a single part." +msgstr "" +"螺旋列印實現外部邊緣的平滑 Z 移動。這會在整個列印上改成 Z 軸穩定增動。該功能" +"會將一個實心模型轉變為具有實體底部的單壁列印。只有在當每一層只包含一個封閉面" +"時才應啟用此功能。" + +#: fdmprinter.def.json +msgctxt "smooth_spiralized_contours label" +msgid "Smooth Spiralized Contours" +msgstr "平滑螺旋輪廓" + +#: fdmprinter.def.json +msgctxt "smooth_spiralized_contours description" +msgid "" +"Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-" +"seam should be barely visible on the print but will still be visible in the " +"layer view). Note that smoothing will tend to blur fine surface details." +msgstr "" +"平滑螺旋輪廓可以減少 Z 縫的出現(Z 縫應在列印品上幾乎看不到,但在分層檢視中仍" +"然可見)。請注意,平滑操作將傾向於模糊精細的表面細節。" + +#: fdmprinter.def.json +msgctxt "relative_extrusion label" +msgid "Relative Extrusion" +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 "" +"擠出控制使用相對模式而非絕對模式。使用相對的 E 步數使 G-code 在後處理上更為簡" +"便。然而並非所有印表機都支援此模式,而且和絕對的 E 步數相比,它可能在沉積耗材" +"的使用量上產生輕微的偏差。無論此設定為何,在輸出任何 G-code 腳本之前,擠出模" +"式將始終設定為絕對模式。" + +#: fdmprinter.def.json +msgctxt "experimental label" +msgid "Experimental" +msgstr "實驗性" + +#: fdmprinter.def.json +msgctxt "experimental description" +msgid "experimental!" +msgstr "實驗性!" + +#: fdmprinter.def.json +msgctxt "optimize_wall_printing_order label" +msgid "Optimize Wall Printing Order" +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 "" +"最佳化牆壁列印順序以減少回抽的次數和空跑的距離。啟用此功能對大多數是有益的," +"但有的可能會花更多的時間。所以請比較有無最佳化的估算時間進行確認。" + +#: fdmprinter.def.json +msgctxt "support_skip_some_zags label" +msgid "Break Up Support In Chunks" +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 "" +"省略支撐的部分連接線,讓支撐結構更容易拆除。此設定適用於鋸齒狀的支撐樣式。" + +#: fdmprinter.def.json +msgctxt "support_skip_zag_per_mm label" +msgid "Support Chunk Size" +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 "每隔 N 毫米省略一次連接線,讓支撐結構更容易拆除。" + +#: fdmprinter.def.json +msgctxt "support_zag_skip_count label" +msgid "Support Chunk Line Count" +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 "每隔 N 個連接線省略一次,讓支撐結構更容易拆除。" + +#: fdmprinter.def.json +msgctxt "draft_shield_enabled label" +msgid "Enable Draft Shield" +msgstr "啟用防風罩" + +#: fdmprinter.def.json +msgctxt "draft_shield_enabled description" +msgid "" +"This will create a wall around the model, which traps (hot) air and shields " +"against exterior airflow. Especially useful for materials which warp easily." +msgstr "" +"這將在模型周圍建立一個牆壁留住(熱)空氣並遮住外部氣流。對於容易翹曲的耗材非" +"常有用。" + +#: fdmprinter.def.json +msgctxt "draft_shield_dist label" +msgid "Draft Shield X/Y Distance" +msgstr "防風罩 X/Y 距離" + +#: fdmprinter.def.json +msgctxt "draft_shield_dist description" +msgid "Distance of the draft shield from the print, in the X/Y directions." +msgstr "防風罩與模型在 X/Y 軸方向的距離。" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation label" +msgid "Draft Shield Limitation" +msgstr "防風罩限高" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation description" +msgid "" +"Set the height of the draft shield. Choose to print the draft shield at the " +"full height of the model or at a limited height." +msgstr "設定防風罩的高度。選擇防風罩與模型同高或只列印到限制的高度。" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation option full" +msgid "Full" +msgstr "完整" + +#: fdmprinter.def.json +msgctxt "draft_shield_height_limitation option limited" +msgid "Limited" +msgstr "限制" + +#: fdmprinter.def.json +msgctxt "draft_shield_height label" +msgid "Draft Shield Height" +msgstr "防風罩高度" + +#: fdmprinter.def.json +msgctxt "draft_shield_height description" +msgid "" +"Height limitation of the draft shield. Above this height no draft shield " +"will be printed." +msgstr "防風罩的高度限制。超過這個高度就不再列印防風罩。" + +#: fdmprinter.def.json +msgctxt "conical_overhang_enabled label" +msgid "Make Overhang Printable" +msgstr "使懸垂可列印" + +#: fdmprinter.def.json +msgctxt "conical_overhang_enabled description" +msgid "" +"Change the geometry of the printed model such that minimal support is " +"required. Steep overhangs will become shallow overhangs. Overhanging areas " +"will drop down to become more vertical." +msgstr "" +"更改列印模型的幾何形狀,以最大程度減少需要的支撐。陡峭的懸垂物將變淺。懸垂區" +"域將下降變得更垂直。" + +#: fdmprinter.def.json +msgctxt "conical_overhang_angle label" +msgid "Maximum Model Angle" +msgstr "最大模型角度" + +#: fdmprinter.def.json +msgctxt "conical_overhang_angle description" +msgid "" +"The maximum angle of overhangs after the they have been made printable. At a " +"value of 0° all overhangs are replaced by a piece of model connected to the " +"build plate, 90° will not change the model in any way." +msgstr "" +"在懸垂變得可列印後懸垂的最大角度。當該值為 0° 時,所有懸垂將被與列印平台連接" +"的模型的一個部分替代,如果為 90° 時,不會以任何方式更改模型。" + +#: fdmprinter.def.json +msgctxt "coasting_enable label" +msgid "Enable Coasting" +msgstr "啟用滑行" + +#: fdmprinter.def.json +msgctxt "coasting_enable description" +msgid "" +"Coasting replaces the last part of an extrusion path with a travel path. The " +"oozed material is used to print the last piece of the extrusion path in " +"order to reduce stringing." +msgstr "" +"滑行會用一個空跑路徑替代擠出路徑的最後部分。滲出耗材用於列印擠出路徑的最後部" +"分,以便減少牽絲。" + +#: fdmprinter.def.json +msgctxt "coasting_volume label" +msgid "Coasting Volume" +msgstr "滑行體積" + +#: fdmprinter.def.json +msgctxt "coasting_volume description" +msgid "" +"The volume otherwise oozed. This value should generally be close to the " +"nozzle diameter cubed." +msgstr "不進行滑行時,會滲出的體積。該值一般應接近噴頭直徑的立方。" + +#: fdmprinter.def.json +msgctxt "coasting_min_volume label" +msgid "Minimum Volume Before Coasting" +msgstr "滑行前最小體積" + +#: fdmprinter.def.json +msgctxt "coasting_min_volume description" +msgid "" +"The smallest volume an extrusion path should have before allowing coasting. " +"For smaller extrusion paths, less pressure has been built up in the bowden " +"tube and so the coasted volume is scaled linearly. This value should always " +"be larger than the Coasting Volume." +msgstr "" +"可以進行滑行前,擠出路徑應有的最小體積。對於較小的擠出路徑,喉管內累積的壓力" +"較少,因此滑行體積採用線性比率縮小。該值應大於滑行體積。" + +#: fdmprinter.def.json +msgctxt "coasting_speed label" +msgid "Coasting Speed" +msgstr "滑行速度" + +#: fdmprinter.def.json +msgctxt "coasting_speed description" +msgid "" +"The speed by which to move during coasting, relative to the speed of the " +"extrusion path. A value slightly under 100% is advised, since during the " +"coasting move the pressure in the bowden tube drops." +msgstr "" +"滑行期間相對於擠出路徑的移動速度。建議採用略低於 100% 的值,因為在滑行移動期" +"間喉管中的壓力會下降。" + +#: fdmprinter.def.json +msgctxt "skin_alternate_rotation label" +msgid "Alternate Skin Rotation" +msgstr "交替表層旋轉" + +#: fdmprinter.def.json +msgctxt "skin_alternate_rotation description" +msgid "" +"Alternate the direction in which the top/bottom layers are printed. Normally " +"they are printed diagonally only. This setting adds the X-only and Y-only " +"directions." +msgstr "" +"交替列印頂部/底部層的方向。通常它們只進行對角線列印。此設定添加純 X 和純 Y 方" +"向。" + +#: fdmprinter.def.json +msgctxt "cross_infill_pocket_size label" +msgid "Cross 3D Pocket Size" +msgstr "立體十字形氣囊大小" + +#: 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 "立體十字形在樣式閉合的高度處,中央十字交叉的氣囊大小。" + +#: fdmprinter.def.json +msgctxt "cross_infill_apply_pockets_alternatingly label" +msgid "Alternate Cross 3D Pockets" +msgstr "交錯立體十字形氣囊" + +#: 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 "" +"在立體十字形樣式中,只在半數樣式閉合的中央十字交叉處使用氣囊,並在高度上交錯" +"排列。" + +#: fdmprinter.def.json +msgctxt "spaghetti_infill_enabled label" +msgid "Spaghetti Infill" +msgstr "義大利麵式填充" + +#: fdmprinter.def.json +msgctxt "spaghetti_infill_enabled description" +msgid "" +"Print the infill every so often, so that the filament will curl up " +"chaotically inside the object. This reduces print time, but the behaviour is " +"rather unpredictable." +msgstr "" +"經常列印填充,使得耗材在模型內部混亂地捲曲。這會縮短列印時間,但行為會難以預" +"測。" + +#: fdmprinter.def.json +msgctxt "spaghetti_infill_stepped label" +msgid "Spaghetti Infill Stepping" +msgstr "義大利麵式逐步填充" + +#: fdmprinter.def.json +msgctxt "spaghetti_infill_stepped description" +msgid "" +"Whether to print spaghetti infill in steps or extrude all the infill " +"filament at the end of the print." +msgstr "是否逐步列印義大利麵式填充或在列印結束時一次擠出所有填充耗材。" + +#: fdmprinter.def.json +msgctxt "spaghetti_max_infill_angle label" +msgid "Spaghetti Maximum Infill Angle" +msgstr "義大利麵式填充 - 最大填充角度" + +#: fdmprinter.def.json +msgctxt "spaghetti_max_infill_angle description" +msgid "" +"The maximum angle w.r.t. the Z axis of the inside of the print for areas " +"which are to be filled with spaghetti infill afterwards. Lowering this value " +"causes more angled parts in your model to be filled on each layer." +msgstr "" +"允許延後填充義大利麵式填充的最大角度,取列印物內側與 Z 軸的夾角。降低此值會導" +"致模型中的更多有角度部位在各層填充。" + +#: fdmprinter.def.json +msgctxt "spaghetti_max_height label" +msgid "Spaghetti Infill Maximum Height" +msgstr "義大利麵式填充 - 最大填充高度" + +#: fdmprinter.def.json +msgctxt "spaghetti_max_height description" +msgid "" +"The maximum height of inside space which can be combined and filled from the " +"top." +msgstr "可以從頂部組合和填充的內部空間的最大高度。" + +#: fdmprinter.def.json +msgctxt "spaghetti_inset label" +msgid "Spaghetti Inset" +msgstr "義大利麵式填充內嵌" + +#: fdmprinter.def.json +msgctxt "spaghetti_inset description" +msgid "" +"The offset from the walls from where the spaghetti infill will be printed." +msgstr "列印義大利麵式填充開始位置與牆壁的偏移量。" + +#: fdmprinter.def.json +msgctxt "spaghetti_flow label" +msgid "Spaghetti Flow" +msgstr "義大利麵式填充流量" + +#: fdmprinter.def.json +msgctxt "spaghetti_flow description" +msgid "" +"Adjusts the density of the spaghetti infill. Note that the Infill Density " +"only controls the line spacing of the filling pattern, not the amount of " +"extrusion for spaghetti infill." +msgstr "" +"調整義大利麵式填充的密度。注意,填充密度僅控制填充列印樣式的線條間距,而不是" +"義大利麵式填充的擠出量。" + +#: fdmprinter.def.json +msgctxt "spaghetti_infill_extra_volume label" +msgid "Spaghetti Infill Extra Volume" +msgstr "義大利麵式填充額外體積" + +#: fdmprinter.def.json +msgctxt "spaghetti_infill_extra_volume description" +msgid "" +"A correction term to adjust the total volume being extruded each time when " +"filling spaghetti." +msgstr "一個用於調整每次進行義大利麵式填充時擠出總量的修正項。" + +#: fdmprinter.def.json +msgctxt "support_conical_enabled label" +msgid "Enable Conical Support" +msgstr "啟用錐形支撐" + +#: fdmprinter.def.json +msgctxt "support_conical_enabled description" +msgid "" +"Experimental feature: Make support areas smaller at the bottom than at the " +"overhang." +msgstr "實驗性功能: 讓底部的支撐區域小於懸垂處的支撐區域。" + +#: fdmprinter.def.json +msgctxt "support_conical_angle label" +msgid "Conical Support Angle" +msgstr "錐形支撐角度" + +#: fdmprinter.def.json +msgctxt "support_conical_angle description" +msgid "" +"The angle of the tilt of conical support. With 0 degrees being vertical, and " +"90 degrees being horizontal. Smaller angles cause the support to be more " +"sturdy, but consist of more material. Negative angles cause the base of the " +"support to be wider than the top." +msgstr "" +"錐形支撐的傾斜角度。角度 0 度時為垂直,角度 90 度時為水平。較小的角度會讓支撐" +"更為牢固,但需要更多耗材。負值會讓支撐底座比頂部寬。" + +#: fdmprinter.def.json +msgctxt "support_conical_min_width label" +msgid "Conical Support Minimum Width" +msgstr "錐形支撐最小寬度" + +#: fdmprinter.def.json +msgctxt "support_conical_min_width description" +msgid "" +"Minimum width to which the base of the conical support area is reduced. " +"Small widths can lead to unstable support structures." +msgstr "錐形支撐區域底部的最小寬度。寬度較小可能導致不穩定的支撐結構。" + +#: fdmprinter.def.json +msgctxt "infill_hollow label" +msgid "Hollow Out Objects" +msgstr "挖空模型" + +#: fdmprinter.def.json +msgctxt "infill_hollow description" +msgid "" +"Remove all infill and make the inside of the object eligible for support." +msgstr "移除所有填充並讓模型內部可以進行支撐。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_enabled label" +msgid "Fuzzy Skin" +msgstr "絨毛皮膚" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_enabled description" +msgid "" +"Randomly jitter while printing the outer wall, so that the surface has a " +"rough and fuzzy look." +msgstr "在列印外牆時隨機抖動,使表面具有粗糙和模糊的外觀。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_thickness label" +msgid "Fuzzy Skin Thickness" +msgstr "絨毛皮膚厚度" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_thickness description" +msgid "" +"The width within which to jitter. It's advised to keep this below the outer " +"wall width, since the inner walls are unaltered." +msgstr "進行抖動的寬度。建議讓此值低於外壁寬度,因為內壁不會更改。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_density label" +msgid "Fuzzy Skin Density" +msgstr "絨毛皮膚密度" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_density description" +msgid "" +"The average density of points introduced on each polygon in a layer. Note " +"that the original points of the polygon are discarded, so a low density " +"results in a reduction of the resolution." +msgstr "" +"在每一層中,每個多邊形上改變的點的平均密度。注意,多邊形的原始點會被捨棄,因" +"此低密度導致解析度降低。" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_dist label" +msgid "Fuzzy Skin Point Distance" +msgstr "絨毛皮膚距離" + +#: fdmprinter.def.json +msgctxt "magic_fuzzy_skin_point_dist description" +msgid "" +"The average distance between the random points introduced on each line " +"segment. Note that the original points of the polygon are discarded, so a " +"high smoothness results in a reduction of the resolution. This value must be " +"higher than half the Fuzzy Skin Thickness." +msgstr "" +"在每個線條部分改變的隨機點之間的平均距離。注意,多邊形的原始點會被捨棄,因此" +"高平滑度導致解析度降低。該值必須大於絨毛皮膚厚度的一半。" + +#: fdmprinter.def.json +msgctxt "flow_rate_max_extrusion_offset label" +msgid "Flow rate compensation max extrusion offset" +msgstr "流量補償的最大擠出偏移量" + +#: fdmprinter.def.json +msgctxt "flow_rate_max_extrusion_offset description" +msgid "The maximum distance in mm to compensate." +msgstr "最大補償距離(以毫米為單位)。" + +#: fdmprinter.def.json +msgctxt "flow_rate_extrusion_offset_factor label" +msgid "Flow rate compensation factor" +msgstr "流量補償因子" + +#: fdmprinter.def.json +msgctxt "flow_rate_extrusion_offset_factor description" +msgid "The multiplication factor for the flow rate -> distance translation." +msgstr "流量倍率 -> 移動距離。" + +#: fdmprinter.def.json +msgctxt "wireframe_enabled label" +msgid "Wire Printing" +msgstr "鐵絲網列印(以下簡稱 WP)" + +#: fdmprinter.def.json +msgctxt "wireframe_enabled description" +msgid "" +"Print only the outside surface with a sparse webbed structure, printing 'in " +"thin air'. This is realized by horizontally printing the contours of the " +"model at given Z intervals which are connected via upward and diagonally " +"downward lines." +msgstr "" +"只列印一個具有稀疏網狀結構的外表面,在“稀疏的空中”列印。這是在给定的 Z 軸間隔" +"內,通過上行線和下行斜線連接,橫向列印模型的輪廓來實現的。" + +#: fdmprinter.def.json +msgctxt "wireframe_height label" +msgid "WP Connection Height" +msgstr "WP 連接高度" + +#: fdmprinter.def.json +msgctxt "wireframe_height description" +msgid "" +"The height of the upward and diagonally downward lines between two " +"horizontal parts. This determines the overall density of the net structure. " +"Only applies to Wire Printing." +msgstr "" +"兩個水平部分之間上行線和下行斜線的高度。這决定網狀結構的整體密度。僅套用於鐵" +"絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_inset label" +msgid "WP Roof Inset Distance" +msgstr "WP 頂板嵌入距離" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_inset description" +msgid "" +"The distance covered when making a connection from a roof outline inward. " +"Only applies to Wire Printing." +msgstr "在從頂板輪廓向內進行連接時所覆蓋的距離。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed label" +msgid "WP Speed" +msgstr "WP 速度" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed description" +msgid "" +"Speed at which the nozzle moves when extruding material. Only applies to " +"Wire Printing." +msgstr "擠出耗材時噴頭移動的速度。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_bottom label" +msgid "WP Bottom Printing Speed" +msgstr "WP 底部列印速度" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_bottom description" +msgid "" +"Speed of printing the first layer, which is the only layer touching the " +"build platform. Only applies to Wire Printing." +msgstr "列印第一層的速度,該層是唯一接觸列印平台的層。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_up label" +msgid "WP Upward Printing Speed" +msgstr "WP 上升列印速度" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_up description" +msgid "" +"Speed of printing a line upward 'in thin air'. Only applies to Wire Printing." +msgstr "在“稀疏的空中”向上列印線條的速度。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_down label" +msgid "WP Downward Printing Speed" +msgstr "WP 下降列印速度" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_down description" +msgid "" +"Speed of printing a line diagonally downward. Only applies to Wire Printing." +msgstr "列印下行斜線的速度。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_flat label" +msgid "WP Horizontal Printing Speed" +msgstr "WP 水平列印速度" + +#: fdmprinter.def.json +msgctxt "wireframe_printspeed_flat description" +msgid "" +"Speed of printing the horizontal contours of the model. Only applies to Wire " +"Printing." +msgstr "列印模型水平輪廓的速度。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_flow label" +msgid "WP Flow" +msgstr "WP 列印流量" + +#: fdmprinter.def.json +msgctxt "wireframe_flow description" +msgid "" +"Flow compensation: the amount of material extruded is multiplied by this " +"value. Only applies to Wire Printing." +msgstr "流量補償:擠出的耗材量乘以此值。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_connection label" +msgid "WP Connection Flow" +msgstr "WP 連接流量" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_connection description" +msgid "Flow compensation when going up or down. Only applies to Wire Printing." +msgstr "向上或向下時的流量補償。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_flat label" +msgid "WP Flat Flow" +msgstr "WP 平面流量" + +#: fdmprinter.def.json +msgctxt "wireframe_flow_flat description" +msgid "" +"Flow compensation when printing flat lines. Only applies to Wire Printing." +msgstr "列印平面線條時的流量補償。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_top_delay label" +msgid "WP Top Delay" +msgstr "WP 頂部延遲" + +#: fdmprinter.def.json +msgctxt "wireframe_top_delay description" +msgid "" +"Delay time after an upward move, so that the upward line can harden. Only " +"applies to Wire Printing." +msgstr "向上移動後的延遲時間,以便上行線條硬化。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_bottom_delay label" +msgid "WP Bottom Delay" +msgstr "WP 底部延遲" + +#: fdmprinter.def.json +msgctxt "wireframe_bottom_delay description" +msgid "Delay time after a downward move. Only applies to Wire Printing." +msgstr "向下移動後的延遲時間。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_flat_delay label" +msgid "WP Flat Delay" +msgstr "WP 平面延遲" + +#: fdmprinter.def.json +msgctxt "wireframe_flat_delay description" +msgid "" +"Delay time between two horizontal segments. Introducing such a delay can " +"cause better adhesion to previous layers at the connection points, while too " +"long delays cause sagging. Only applies to Wire Printing." +msgstr "" +"兩個水平部分之間的延遲時間。引入這樣的延遲可以在連接點處與先前的層產生更好的" +"附著,而太長的延遲會引起下垂。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_up_half_speed label" +msgid "WP Ease Upward" +msgstr "WP 輕鬆上行" + +#: fdmprinter.def.json +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" +"這會與之前的層產生更好的附著,而不會將這些層中的耗材過度加熱。僅套用於鐵絲網" +"列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_top_jump label" +msgid "WP Knot Size" +msgstr "WP 紐結大小" + +#: fdmprinter.def.json +msgctxt "wireframe_top_jump description" +msgid "" +"Creates a small knot at the top of an upward line, so that the consecutive " +"horizontal layer has a better chance to connect to it. Only applies to Wire " +"Printing." +msgstr "" +"在上行線條的頂部創建一個小紐結,使連續的水平層有更好的機會與其連接。僅套用於" +"鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_fall_down label" +msgid "WP Fall Down" +msgstr "WP 倒塌" + +#: fdmprinter.def.json +msgctxt "wireframe_fall_down description" +msgid "" +"Distance with which the material falls down after an upward extrusion. This " +"distance is compensated for. Only applies to Wire Printing." +msgstr "耗材在向上擠出後倒塌的距離。將對此距離進行補償。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_drag_along label" +msgid "WP Drag Along" +msgstr "WP 拖行" + +#: fdmprinter.def.json +msgctxt "wireframe_drag_along description" +msgid "" +"Distance with which the material of an upward extrusion is dragged along " +"with the diagonally downward extrusion. This distance is compensated for. " +"Only applies to Wire Printing." +msgstr "" +"向上擠出耗材與斜向下擠出一起拖動的距離。將對此距離進行補償。僅套用於鐵絲網列" +"印。" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy label" +msgid "WP Strategy" +msgstr "WP 使用策略" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy description" +msgid "" +"Strategy for making sure two consecutive layers connect at each connection " +"point. Retraction lets the upward lines harden in the right position, but " +"may cause filament grinding. A knot can be made at the end of an upward line " +"to heighten the chance of connecting to it and to let the line cool; " +"however, it may require slow printing speeds. Another strategy is to " +"compensate for the sagging of the top of an upward line; however, the lines " +"won't always fall down as predicted." +msgstr "" +"用於確定兩個連續層在每個連接點連接的策略。回抽可讓上行線條在正確的位置硬化," +"但可能導致耗材磨損。紐結可以在上行線條的尾端進行打結以便提高與其連接的幾率," +"並讓線條冷卻;但這會需要較慢的列印速度。另一種策略是補償上行線條頂部的下垂;" +"然而,線條不會總是如預期的那樣下降。" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy option compensate" +msgid "Compensate" +msgstr "補償" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy option knot" +msgid "Knot" +msgstr "紐結" + +#: fdmprinter.def.json +msgctxt "wireframe_strategy option retract" +msgid "Retract" +msgstr "回抽" + +#: fdmprinter.def.json +msgctxt "wireframe_straight_before_down label" +msgid "WP Straighten Downward Lines" +msgstr "WP 拉直下行線條" + +#: fdmprinter.def.json +msgctxt "wireframe_straight_before_down description" +msgid "" +"Percentage of a diagonally downward line which is covered by a horizontal " +"line piece. This can prevent sagging of the top most point of upward lines. " +"Only applies to Wire Printing." +msgstr "" +"水平線條部分所覆蓋的斜下行線條的百分比。這可以防止上行線最頂端點下垂。僅套用" +"於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_fall_down label" +msgid "WP Roof Fall Down" +msgstr "WP 頂板倒塌" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_fall_down description" +msgid "" +"The distance which horizontal roof lines printed 'in thin air' fall down " +"when being printed. This distance is compensated for. Only applies to Wire " +"Printing." +msgstr "" +"列印時,在“稀疏的空中”列印的水平頂板線條倒塌的距離。將對此距離進行補償。僅套" +"用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_drag_along label" +msgid "WP Roof Drag Along" +msgstr "WP 頂板拖行" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_drag_along description" +msgid "" +"The distance of the end piece of an inward line which gets dragged along " +"when going back to the outer outline of the roof. This distance is " +"compensated for. Only applies to Wire Printing." +msgstr "" +"向內線的末端在返回至頂板外部輪廓時被拖行的距離。將對此距離進行補償。僅套用於" +"鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_outer_delay label" +msgid "WP Roof Outer Delay" +msgstr "WP 頂板外部延遲" + +#: fdmprinter.def.json +msgctxt "wireframe_roof_outer_delay description" +msgid "" +"Time spent at the outer perimeters of hole which is to become a roof. Longer " +"times can ensure a better connection. Only applies to Wire Printing." +msgstr "" +"在成為頂板的孔的外圍花費的時間。較長的時間可確保更好的連接。僅套用於鐵絲網列" +"印。" + +#: fdmprinter.def.json +msgctxt "wireframe_nozzle_clearance label" +msgid "WP Nozzle Clearance" +msgstr "WP 噴頭間隙" + +#: fdmprinter.def.json +msgctxt "wireframe_nozzle_clearance description" +msgid "" +"Distance between the nozzle and horizontally downward lines. Larger " +"clearance results in diagonally downward lines with a less steep angle, " +"which in turn results in less upward connections with the next layer. Only " +"applies to Wire Printing." +msgstr "" +"噴頭和水平下行線之間的距離。較大的間隙會讓斜下行線角度較平緩,進而使第二層的" +"上行連接較少。僅套用於鐵絲網列印。" + +#: fdmprinter.def.json +msgctxt "command_line_settings label" +msgid "Command Line Settings" +msgstr "命令行設定" + +#: fdmprinter.def.json +msgctxt "command_line_settings description" +msgid "" +"Settings which are only used if CuraEngine isn't called from the Cura " +"frontend." +msgstr "未從 Cura 前端調用 CuraEngine 時使用的設定。" + +#: fdmprinter.def.json +msgctxt "center_object label" +msgid "Center object" +msgstr "模型置中" + +#: fdmprinter.def.json +msgctxt "center_object description" +msgid "" +"Whether to center the object on the middle of the build platform (0,0), " +"instead of using the coordinate system in which the object was saved." +msgstr "是否將模型放置在列印平台中心 (0,0),而不是使用模型內儲存的座標系統。" + +#: fdmprinter.def.json +msgctxt "mesh_position_x label" +msgid "Mesh position x" +msgstr "網格位置 x" + +#: fdmprinter.def.json +msgctxt "mesh_position_x description" +msgid "Offset applied to the object in the x direction." +msgstr "套用在模型 x 方向上的偏移量。" + +#: fdmprinter.def.json +msgctxt "mesh_position_y label" +msgid "Mesh position y" +msgstr "網格位置 y" + +#: fdmprinter.def.json +msgctxt "mesh_position_y description" +msgid "Offset applied to the object in the y direction." +msgstr "套用在模型 y 方向上的偏移量。" + +#: fdmprinter.def.json +msgctxt "mesh_position_z label" +msgid "Mesh position z" +msgstr "網格位置 z" + +#: fdmprinter.def.json +msgctxt "mesh_position_z description" +msgid "" +"Offset applied to the object in the z direction. With this you can perform " +"what was used to be called 'Object Sink'." +msgstr "" +"套用在模型 z 方向上的偏移量。利用此選項,你可以執行過去被稱為“模型沉降”的操" +"作。" + +#: fdmprinter.def.json +msgctxt "mesh_rotation_matrix label" +msgid "Mesh Rotation Matrix" +msgstr "網格旋轉矩陣" + +#: fdmprinter.def.json +msgctxt "mesh_rotation_matrix description" +msgid "" +"Transformation matrix to be applied to the model when loading it from file." +msgstr "在將模型從檔案中載入時套用在模型上的轉換矩陣。" + +#~ 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 "" +#~ "擠出機在第一層從正常高度偏移了此設定量。它可以是正值(上升)或負值(下" +#~ "降)。某些耗材類型在擠出機稍微上升情況下,會更好地附著在列印平台上。" + +#~ msgctxt "z_offset_taper_layers label" +#~ msgid "Z Offset Taper Layers" +#~ msgstr "Z 軸偏移漸減層數" + +#~ 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 "" +#~ "當此值不為 0 時,Z 軸偏移量在經過此層數時逐漸降為 0。此值設為 0 表示所有列" +#~ "印層的 Z 軸偏移量保持為固定值。" + +#~ msgctxt "infill_pattern option tetrahedral" +#~ msgid "Tetrahedral" +#~ msgstr "正四面體" + +#~ msgctxt "expand_skins_into_infill label" +#~ msgid "Expand Skins Into Infill" +#~ msgstr "將表層延伸到填充中" + +#~ msgctxt "expand_skins_into_infill description" +#~ msgid "" +#~ "Expand skin areas of top and/or bottom skin of flat surfaces. By default, " +#~ "skins stop under the wall lines that surround infill but this can lead to " +#~ "holes appearing when the infill density is low. This setting extends the " +#~ "skins beyond the wall lines so that the infill on the next layer rests on " +#~ "skin." +#~ msgstr "" +#~ "延伸平面頂部和/或底部表層的區域。預設情况下,表層會在環繞填充的壁線下方停" +#~ "止,但如果填充密度較低,則可能導致出現孔洞。該設定將表層延展到壁線以外,因" +#~ "此下一層的填充會座落在表層上。" + +#~ msgctxt "expand_upper_skins label" +#~ msgid "Expand Top Skins Into Infill" +#~ msgstr "將頂部表層延伸到填充中" + +#~ msgctxt "expand_upper_skins description" +#~ msgid "" +#~ "Expand the top skin areas (areas with air above) so that they support " +#~ "infill above." +#~ msgstr "延伸頂部表層區域(上方有空氣的區域),讓它們支撐上方的填充。" + +#~ msgctxt "expand_lower_skins label" +#~ msgid "Expand Bottom Skins Into Infill" +#~ msgstr "將底部表層延伸到填充中" + +#~ msgctxt "expand_lower_skins description" +#~ msgid "" +#~ "Expand the bottom skin areas (areas with air below) so that they are " +#~ "anchored by the infill layers above and below." +#~ msgstr "延伸底部表層區域(下方有空氣的區域),讓它們由上下的填充層錨定。" + +#~ msgctxt "support_skip_some_zags label" +#~ msgid "Skip Some ZigZags Connections" +#~ msgstr "跳過部分鋸齒狀連接" + +#~ msgctxt "support_zag_skip_count label" +#~ msgid "ZigZag Connection Skip Count" +#~ msgstr "鋸齒狀連接跳過計數" diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index cc27520a02..aa185f8615 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -18,6 +18,7 @@ Item property alias redo: redoAction; property alias homeCamera: homeCameraAction; + property alias expandSidebar: expandSidebarAction; property alias deleteSelection: deleteSelectionAction; property alias centerSelection: centerSelectionAction; @@ -244,6 +245,16 @@ Item onTriggered: CuraApplication.groupSelected(); } + Action + { + id: reloadQmlAction + onTriggered: + { + CuraApplication.reloadQML() + } + shortcut: "Shift+F5" + } + Action { id: unGroupObjectsAction @@ -379,4 +390,11 @@ Item text: catalog.i18nc("@action:menu", "Installed plugins..."); iconName: "plugins_configure" } + + Action + { + id: expandSidebarAction; + text: catalog.i18nc("@action:inmenu menubar:view","Expand/Collapse Sidebar"); + shortcut: "Ctrl+E"; + } } diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index fb2bd3bff2..91098bbb29 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -20,14 +20,34 @@ UM.MainWindow viewportRect: Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0) property bool showPrintMonitor: false + // This connection is here to support legacy printer output devices that use the showPrintMonitor signal on Application to switch to the monitor stage + // It should be phased out in newer plugin versions. Connections { - target: Printer + target: CuraApplication onShowPrintMonitor: { if (show) { - topbar.startMonitoringPrint() + UM.Controller.setActiveStage("MonitorStage") } else { - topbar.stopMonitoringPrint() + UM.Controller.setActiveStage("PrepareStage") + } + } + } + + onWidthChanged: + { + // If slidebar is collapsed then it should be invisible + // otherwise after the main_window resize the sidebar will be fully re-drawn + if (sidebar.collapsed){ + if (sidebar.visible == true){ + sidebar.visible = false + sidebar.initialWidth = 0 + } + } + else{ + if (sidebar.visible == false){ + sidebar.visible = true + sidebar.initialWidth = UM.Theme.getSize("sidebar").width } } } @@ -46,6 +66,7 @@ UM.MainWindow // // This has been fixed for QtQuick Controls 2 since the Shortcut item has a context property. Cura.Actions.parent = backgroundItem + CuraApplication.purgeWindows() } Item @@ -115,7 +136,7 @@ UM.MainWindow MenuItem { id: saveWorkspaceMenu - text: catalog.i18nc("@title:menu menubar:file","Save project") + text: catalog.i18nc("@title:menu menubar:file","Save &Project...") onTriggered: { if(UM.Preferences.getValue("cura/dialog_on_project_save")) @@ -330,7 +351,7 @@ UM.MainWindow text: catalog.i18nc("@action:button","Open File"); iconSource: UM.Theme.getIcon("load") style: UM.Theme.styles.tool_button - tooltip: ''; + tooltip: "" anchors { top: topbar.bottom; @@ -357,62 +378,91 @@ UM.MainWindow Topbar { id: topbar - anchors.left:parent.left + anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top - monitoringPrint: base.showPrintMonitor - onStartMonitoringPrint: base.showPrintMonitor = true - onStopMonitoringPrint: base.showPrintMonitor = false } - Sidebar + Loader { - id: sidebar; + id: sidebar - anchors - { - top: topbar.bottom; - bottom: parent.bottom; - right: parent.right; + property bool collapsed: false; + property var initialWidth: UM.Theme.getSize("sidebar").width; + + function callExpandOrCollapse() { + if (collapsed) { + sidebar.visible = true; + sidebar.initialWidth = UM.Theme.getSize("sidebar").width; + viewportRect = Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0); + expandSidebarAnimation.start(); + } else { + viewportRect = Qt.rect(0, 0, 1, 1.0); + collapseSidebarAnimation.start(); + } + collapsed = !collapsed; + UM.Preferences.setValue("cura/sidebar_collapse", collapsed); } - z: 1 - width: UM.Theme.getSize("sidebar").width; - monitoringPrint: base.showPrintMonitor - } - Rectangle - { - id: viewportOverlay - - color: UM.Theme.getColor("viewport_overlay") anchors { - top: topbar.bottom + top: topbar.top bottom: parent.bottom - left:parent.left - right: sidebar.left } - visible: opacity > 0 - opacity: base.showPrintMonitor ? 1 : 0 - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.AllButtons + width: initialWidth + x: base.width - sidebar.width + source: UM.Controller.activeStage.sidebarComponent - onWheel: wheel.accepted = true + NumberAnimation { + id: collapseSidebarAnimation + target: sidebar + properties: "x" + to: base.width + duration: 100 + } + + NumberAnimation { + id: expandSidebarAnimation + target: sidebar + properties: "x" + to: base.width - sidebar.width + duration: 100 + } + + Component.onCompleted: + { + var sidebarCollapsed = UM.Preferences.getValue("cura/sidebar_collapse"); + + if (sidebarCollapsed) { + sidebar.collapsed = true; + viewportRect = Qt.rect(0, 0, 1, 1.0) + collapseSidebarAnimation.start(); + } } } Loader { - sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem: null - visible: base.showPrintMonitor - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenterOffset: - UM.Theme.getSize("sidebar").width / 2 - anchors.verticalCenterOffset: UM.Theme.getSize("sidebar_header").height / 2 - property real maximumWidth: viewportOverlay.width - property real maximumHeight: viewportOverlay.height + id: main + + anchors + { + top: topbar.bottom + bottom: parent.bottom + left: parent.left + right: sidebar.left + } + + MouseArea + { + visible: UM.Controller.activeStage.mainComponent != "" + anchors.fill: parent + acceptedButtons: Qt.AllButtons + onWheel: wheel.accepted = true + } + + source: UM.Controller.activeStage.mainComponent } UM.MessageStack @@ -428,6 +478,13 @@ UM.MainWindow } } + // Expand or collapse sidebar + Connections + { + target: Cura.Actions.expandSidebar + onTriggered: sidebar.callExpandOrCollapse() + } + UM.PreferencesDialog { id: preferences @@ -829,7 +886,7 @@ UM.MainWindow Connections { - target: Printer + target: CuraApplication onShowMessageBox: { messageDialog.title = title @@ -875,7 +932,7 @@ UM.MainWindow Connections { - target: Printer + target: CuraApplication onRequestAddPrinter: { addMachineDialog.visible = true diff --git a/resources/qml/MachineSelection.qml b/resources/qml/MachineSelection.qml new file mode 100644 index 0000000000..e40731f3ca --- /dev/null +++ b/resources/qml/MachineSelection.qml @@ -0,0 +1,71 @@ +// Copyright (c) 2017 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Layouts 1.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura +import "Menus" + +ToolButton +{ + text: Cura.MachineManager.activeMachineName + + tooltip: Cura.MachineManager.activeMachineName + + style: ButtonStyle + { + background: Rectangle + { + color: + { + if(control.pressed) + { + return UM.Theme.getColor("sidebar_header_active"); + } + else if(control.hovered) + { + return UM.Theme.getColor("sidebar_header_hover"); + } + else + { + return UM.Theme.getColor("sidebar_header_bar"); + } + } + Behavior on color { ColorAnimation { duration: 50; } } + + UM.RecolorImage + { + id: downArrow + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: width + color: UM.Theme.getColor("text_emphasis") + source: UM.Theme.getIcon("arrow_bottom") + } + Label + { + id: sidebarComboBoxLabel + color: UM.Theme.getColor("sidebar_header_text_active") + text: control.text; + elide: Text.ElideRight; + anchors.left: parent.left; + anchors.leftMargin: UM.Theme.getSize("default_margin").width * 2 + anchors.right: downArrow.left; + anchors.rightMargin: control.rightMargin; + anchors.verticalCenter: parent.verticalCenter; + font: UM.Theme.getFont("large") + } + } + label: Label {} + } + + menu: PrinterMenu { } +} diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index a6666b67f4..c1a1eea7a7 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -157,7 +157,7 @@ Menu } //: Model used to populate the brandModel - UM.InstanceContainersModel + Cura.MaterialsModel { id: materialsModel filter: materialFilter() diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index bb5999edb9..c8243ad2ed 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -12,22 +12,25 @@ Menu title: catalog.i18nc("@title:menu menubar:toplevel", "&View"); id: menu enabled: !PrintInformation.preSliced + + // main views Instantiator { - model: UM.ViewModel { } + model: UM.ViewModel{} MenuItem { - text: model.name; - checkable: true; - checked: model.active; - exclusiveGroup: group; - onTriggered: UM.Controller.setActiveView(model.id); + text: model.name + checkable: true + checked: model.active + exclusiveGroup: group + onTriggered: UM.Controller.setActiveView(model.id) } onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) } - ExclusiveGroup { id: group; } + ExclusiveGroup { id: group } MenuSeparator {} MenuItem { action: Cura.Actions.homeCamera; } + MenuItem { action: Cura.Actions.expandSidebar; } } diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml index 29b00f50e6..9305e2261a 100644 --- a/resources/qml/MonitorButton.qml +++ b/resources/qml/MonitorButton.qml @@ -18,7 +18,6 @@ Item property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands property real progress: printerConnected ? Cura.MachineManager.printerOutputDevices[0].progress : 0 - property int backendState: UM.Backend.state property bool showProgress: { // determine if we need to show the progress bar + percentage @@ -199,14 +198,19 @@ Item spacing: UM.Theme.getSize("default_margin").width } + Component.onCompleted: { + updateAdditionalComponents("monitorButtons") + } + Connections { - target: Printer - onAdditionalComponentsChanged: - { - if(areaId == "monitorButtons") { - for (var component in CuraApplication.additionalComponents["monitorButtons"]) { - CuraApplication.additionalComponents["monitorButtons"][component].parent = additionalComponentsRow - } + target: CuraApplication + onAdditionalComponentsChanged: updateAdditionalComponents + } + + function updateAdditionalComponents (areaId) { + if(areaId == "monitorButtons") { + for (var component in CuraApplication.additionalComponents["monitorButtons"]) { + CuraApplication.additionalComponents["monitorButtons"][component].parent = additionalComponentsRow } } } diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index dc5853ebb2..e9dae6eb11 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -151,7 +151,7 @@ UM.PreferencesPage append({ text: "English", code: "en_US" }) append({ text: "Deutsch", code: "de_DE" }) append({ text: "Español", code: "es_ES" }) - append({ text: "Suomi", code: "fi_FI" }) + //Finnish is disabled for being incomplete: append({ text: "Suomi", code: "fi_FI" }) append({ text: "Français", code: "fr_FR" }) append({ text: "Italiano", code: "it_IT" }) append({ text: "日本語", code: "ja_JP" }) @@ -159,9 +159,10 @@ UM.PreferencesPage append({ text: "Nederlands", code: "nl_NL" }) append({ text: "Polski", code: "pl_PL" }) append({ text: "Português do Brasil", code: "pt_BR" }) - //Russian is disabled for being incomplete: append({ text: "Русский", code: "ru_RU" }) + append({ text: "Русский", code: "ru_RU" }) append({ text: "Türkçe", code: "tr_TR" }) append({ text: "简体中文", code: "zh_CN" }) + append({ text: "正體字", code: "zh_TW" }) var date_object = new Date(); if (date_object.getUTCMonth() == 8 && date_object.getUTCDate() == 19) //Only add Pirate on the 19th of September. diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index dc978c0f7a..a8e25155e1 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -222,14 +222,19 @@ UM.ManagementPage } } + Component.onCompleted: { + addAdditionalComponents("machinesDetailPane") + } + Connections { - target: Printer - onAdditionalComponentsChanged: - { - if(areaId == "machinesDetailPane") { - for (var component in CuraApplication.additionalComponents["machinesDetailPane"]) { - CuraApplication.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn - } + target: CuraApplication + onAdditionalComponentsChanged: addAdditionalComponents + } + + function addAdditionalComponents (areaId) { + if(areaId == "machinesDetailPane") { + for (var component in CuraApplication.additionalComponents["machinesDetailPane"]) { + CuraApplication.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn } } } diff --git a/resources/qml/Preferences/MaterialView.qml b/resources/qml/Preferences/MaterialView.qml index 143f29c86e..311150c6b9 100644 --- a/resources/qml/Preferences/MaterialView.qml +++ b/resources/qml/Preferences/MaterialView.qml @@ -41,7 +41,7 @@ TabView Tab { - title: catalog.i18nc("@title","Information") + title: catalog.i18nc("@title", "Information") anchors.margins: UM.Theme.getSize("default_margin").width diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index cd04b79b20..c33cdbfc89 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -182,6 +182,7 @@ UM.ManagementPage { Cura.MachineManager.setActiveMaterial(material_id) } + // TODO: this doesn't work because the source is a bit delayed base.objectList.currentIndex = base.getIndexById(material_id); } }, @@ -292,10 +293,16 @@ UM.ManagementPage base_file = base.currentItem.id } var guid = Cura.ContainerManager.getContainerMetaDataEntry(base.currentItem.id, "GUID") + // remove base container first, it otherwise triggers loading the base file while removing other containers + var base_containers = Cura.ContainerManager.findInstanceContainers({"GUID": guid, "id": base_file, "base_file": base_file, "type": "material"}) + for(var i in base_containers) + { + Cura.ContainerManager.removeContainer(base_containers[i]); + } var containers = Cura.ContainerManager.findInstanceContainers({"GUID": guid, "base_file": base_file, "type": "material"}) for(var i in containers) { - Cura.ContainerManager.removeContainer(containers[i]) + Cura.ContainerManager.removeContainer(containers[i]); } if(base.objectList.currentIndex > 0) { diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index e69f7cf4fd..5a5c160b51 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -1171,4 +1171,4 @@ Column } } } -} \ No newline at end of file +} diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml index b258ecad43..c5025dea78 100644 --- a/resources/qml/SaveButton.qml +++ b/resources/qml/SaveButton.qml @@ -12,11 +12,9 @@ Item { id: base; UM.I18nCatalog { id: catalog; name:"cura"} - property real progress: UM.Backend.progress; - property int backendState: UM.Backend.state; - - property var backend: CuraApplication.getBackend(); - property bool activity: CuraApplication.platformActivity; + property real progress: UM.Backend.progress + property int backendState: UM.Backend.state + property bool activity: CuraApplication.platformActivity property alias buttonRowWidth: saveRow.width @@ -28,6 +26,10 @@ Item { return catalog.i18nc("@label:PrintjobStatus", "Please load a 3D model"); } + if (base.backendState == "undefined") { + return "" + } + switch(base.backendState) { case 1: @@ -46,10 +48,14 @@ Item { } function sliceOrStopSlicing() { - if ([1, 5].indexOf(UM.Backend.state) != -1) { - backend.forceSlice(); - } else { - backend.stopSlicing(); + try { + if ([1, 5].indexOf(base.backendState) != -1) { + CuraApplication.backend.forceSlice(); + } else { + CuraApplication.backend.stopSlicing(); + } + } catch (e) { + console.log('Could not start or stop slicing', e) } } @@ -81,7 +87,7 @@ Item { height: parent.height color: UM.Theme.getColor("progressbar_control") radius: UM.Theme.getSize("progressbar_radius").width - visible: base.backendState == 2 ? true : false + visible: (base.backendState != "undefined" && base.backendState == 2) ? true : false } } @@ -131,14 +137,19 @@ Item { spacing: UM.Theme.getSize("default_margin").width } + Component.onCompleted: { + addAdditionalComponents("saveButton") + } + Connections { - target: Printer - onAdditionalComponentsChanged: - { - if(areaId == "saveButton") { - for (var component in CuraApplication.additionalComponents["saveButton"]) { - CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow - } + target: CuraApplication + onAdditionalComponentsChanged: addAdditionalComponents + } + + function addAdditionalComponents (areaId) { + if(areaId == "saveButton") { + for (var component in CuraApplication.additionalComponents["saveButton"]) { + CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow } } } @@ -157,12 +168,10 @@ Item { Button { id: prepareButton - tooltip: [1, 5].indexOf(UM.Backend.state) != -1 ? catalog.i18nc("@info:tooltip","Slice current printjob") : catalog.i18nc("@info:tooltip","Cancel slicing process") + tooltip: [1, 5].indexOf(base.backendState) != -1 ? catalog.i18nc("@info:tooltip","Slice current printjob") : catalog.i18nc("@info:tooltip","Cancel slicing process") // 1 = not started, 2 = Processing - enabled: (base.backendState == 1 || base.backendState == 2) && base.activity == true - visible: { - return !autoSlice && (base.backendState == 1 || base.backendState == 2) && base.activity == true; - } + enabled: base.backendState != "undefined" && (base.backendState == 1 || base.backendState == 2) && base.activity == true + visible: base.backendState != "undefined" && !autoSlice && (base.backendState == 1 || base.backendState == 2) && base.activity == true property bool autoSlice height: UM.Theme.getSize("save_button_save_to_button").height @@ -171,7 +180,7 @@ Item { anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width // 1 = not started, 5 = disabled - text: [1, 5].indexOf(UM.Backend.state) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel") + text: [1, 5].indexOf(base.backendState) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel") onClicked: { sliceOrStopSlicing(); @@ -235,10 +244,8 @@ Item { tooltip: UM.OutputDeviceManager.activeDeviceDescription; // 3 = done, 5 = disabled - enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true - visible: { - return autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true); - } + enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true + visible: base.backendState != "undefined" && autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true) property bool autoSlice height: UM.Theme.getSize("save_button_save_to_button").height @@ -315,8 +322,8 @@ Item { width: UM.Theme.getSize("save_button_save_to_button").height height: UM.Theme.getSize("save_button_save_to_button").height // 3 = Done, 5 = Disabled - enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true - visible: (devicesModel.deviceCount > 1) && (base.backendState == 3 || base.backendState == 5) && base.activity == true + enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true + visible: base.backendState != "undefined" && (devicesModel.deviceCount > 1) && (base.backendState == 3 || base.backendState == 5) && base.activity == true style: ButtonStyle { diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 6234e5f1f7..1fa83cb6d4 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -14,9 +14,9 @@ import "." Item { id: base; - height: UM.Theme.getSize("section").height; + height: UM.Theme.getSize("section").height - property alias contents: controlContainer.children; + property alias contents: controlContainer.children property alias hovered: mouse.containsMouse property var showRevertButton: true @@ -179,8 +179,13 @@ Item { iconSource: UM.Theme.getIcon("reset") onClicked: { - revertButton.focus = true; - Cura.MachineManager.clearUserSettingAllCurrentStacks(propertyProvider.key); + revertButton.focus = true + + if (externalResetHandler) { + externalResetHandler(propertyProvider.key) + } else { + Cura.MachineManager.clearUserSettingAllCurrentStacks(propertyProvider.key) + } } onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile.")) } diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 1ebb5cc40e..5d39572647 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -287,6 +287,7 @@ Item property var settingDefinitionsModel: definitionsModel property var propertyProvider: provider property var globalPropertyProvider: inheritStackProvider + property var externalResetHandler: false //Qt5.4.2 and earlier has a bug where this causes a crash: https://bugreports.qt.io/browse/QTBUG-35989 //In addition, while it works for 5.5 and higher, the ordering of the actual combo box drop down changes, diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 31bda45b56..db7851a101 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -22,9 +22,8 @@ Rectangle property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - property int backendState: UM.Backend.state - property bool monitoringPrint: false + property bool monitoringPrint: UM.Controller.activeStage.stageId == "MonitorStage" property variant printDuration: PrintInformation.currentPrintTime property variant printMaterialLengths: PrintInformation.materialLengths @@ -87,10 +86,19 @@ Rectangle } } + MachineSelection { + id: machineSelection + width: base.width + height: UM.Theme.getSize("sidebar_header").height + anchors.top: base.top + anchors.right: parent.right + } + SidebarHeader { id: header width: parent.width visible: machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants + anchors.top: machineSelection.bottom onShowTooltip: base.showTooltip(item, location, text) onHideTooltip: base.hideTooltip() @@ -263,7 +271,7 @@ Rectangle { id: controlItem anchors.bottom: footerSeparator.top - anchors.top: headerSeparator.bottom + anchors.top: monitoringPrint ? machineSelection.bottom : headerSeparator.bottom anchors.left: base.left anchors.right: base.right sourceComponent: @@ -282,7 +290,7 @@ Rectangle Loader { anchors.bottom: footerSeparator.top - anchors.top: headerSeparator.bottom + anchors.top: monitoringPrint ? machineSelection.bottom : headerSeparator.bottom anchors.left: base.left anchors.right: base.right source: @@ -350,21 +358,20 @@ Rectangle var total_seconds = parseInt(base.printDuration.getDisplayString(UM.DurationFormat.Seconds)) // A message is created and displayed when the user hover the time label - var content = catalog.i18nc("@tooltip", "Time specification
    "); + var tooltip_html = "%1
    ".arg(catalog.i18nc("@tooltip", "Time specification")); for(var feature in print_time) { if(!print_time[feature].isTotalDurationZero) { - content += "" + - "" + - "" + - "" + + "".arg(print_time[feature].getDisplayString(UM.DurationFormat.ISO8601).slice(0,-3)) + + "".arg(Math.round(100 * parseInt(print_time[feature].getDisplayString(UM.DurationFormat.Seconds)) / total_seconds)) + ""; } } - content += "
    " + feature + "
    " + print_time[feature].getDisplayString(UM.DurationFormat.Short) + "  " + Math.round(100 * parseInt(print_time[feature].getDisplayString(UM.DurationFormat.Seconds)) / total_seconds) + "%" + + tooltip_html += "
    " + feature + ":  %1  %1%
    "; + tooltip_html += ""; - base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), content); + base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), tooltip_html); } } onExited: @@ -376,9 +383,26 @@ Rectangle Label { + function formatRow(items) + { + var row_html = ""; + for(var item = 0; item < items.length; item++) + { + if (item == 0) + { + row_html += "%1".arg(items[item]); + } + else + { + row_html += "  %1".arg(items[item]); + } + } + row_html += ""; + return row_html; + } - function getSpecsData(){ - + function getSpecsData() + { var lengths = []; var total_length = 0; var weights = []; @@ -387,7 +411,8 @@ Rectangle var total_cost = 0; var some_costs_known = false; var names = []; - if(base.printMaterialLengths) { + if(base.printMaterialLengths) + { for(var index = 0; index < base.printMaterialLengths.length; index++) { if(base.printMaterialLengths[index] > 0) @@ -415,34 +440,28 @@ Rectangle costs = ["0.00"]; } - var tooltip_html = "%1
    ".arg(catalog.i18nc("@label", "Cost specification")); + var tooltip_html = "%1
    ".arg(catalog.i18nc("@label", "Cost specification")); for(var index = 0; index < lengths.length; index++) { - var item_strings = [ + tooltip_html += formatRow([ "%1:".arg(names[index]), catalog.i18nc("@label m for meter", "%1m").arg(lengths[index]), catalog.i18nc("@label g for grams", "%1g").arg(weights[index]), - "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index]), - ]; - tooltip_html += ""; - for(var item = 0; item < item_strings.length; item++) { - tooltip_html += "".arg(item_strings[item]); - } + "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index]), + ]); } - var item_strings = [ - catalog.i18nc("@label", "Total:"), - catalog.i18nc("@label m for meter", "%1m").arg(total_length.toFixed(2)), - catalog.i18nc("@label g for grams", "%1g").arg(Math.round(total_weight)), - "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(total_cost.toFixed(2)), - ]; - tooltip_html += ""; - for(var item = 0; item < item_strings.length; item++) { - tooltip_html += "".arg(item_strings[item]); + if(lengths.length > 1) + { + tooltip_html += formatRow([ + catalog.i18nc("@label", "Total:"), + catalog.i18nc("@label m for meter", "%1m").arg(total_length.toFixed(2)), + catalog.i18nc("@label g for grams", "%1g").arg(Math.round(total_weight)), + "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(total_cost.toFixed(2)), + ]); } - tooltip_html += "
    %1  
    %1  
    "; + tooltip_html += ""; tooltipText = tooltip_html; - return tooltipText } @@ -538,7 +557,6 @@ Rectangle visible: monitoringPrint } - SidebarTooltip { id: tooltip; diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index fab8dc6130..3e1e85824a 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -34,6 +34,7 @@ Column width: height } + // Extruder Row Item { id: extruderSelectionRow @@ -72,7 +73,7 @@ Column orientation: ListView.Horizontal - model: Cura.ExtrudersModel { id: extrudersModel; addGlobal: false } + model: Cura.ExtrudersModel { id: extrudersModel; } Connections { @@ -185,6 +186,8 @@ Column // Only draw the filling colour of the material inside the SVG border. Rectangle { + id: materialColorCircle + anchors { right: parent.right diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index 020b75e3ce..62cf6f9d34 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -303,7 +303,7 @@ Item // only change if an active machine is set and the slider is visible at all. if (Cura.MachineManager.activeMachine != null && visible) { // prevent updating during view initializing. Trigger only if the value changed by user - if (qualitySlider.value != qualityModel.qualitySliderActiveIndex) { + if (qualitySlider.value != qualityModel.qualitySliderActiveIndex && qualityModel.qualitySliderActiveIndex != -1) { // start updating with short delay qualitySliderChangeTimer.start() } @@ -368,7 +368,7 @@ Item { id: customisedSettings - visible: Cura.SimpleModeSettingsManager.isProfileCustomized + visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.SimpleModeSettingsManager.isProfileUserCreated height: speedSlider.height * 0.8 width: speedSlider.height * 0.8 @@ -381,7 +381,18 @@ Item onClicked: { - discardOrKeepProfileChangesDialog.show() + // if the current profile is user-created, switch to a built-in quality + if (Cura.SimpleModeSettingsManager.isProfileUserCreated) + { + if (Cura.ProfilesModel.rowCount() > 0) + { + Cura.MachineManager.setActiveQuality(Cura.ProfilesModel.getItem(0).id) + } + } + if (Cura.SimpleModeSettingsManager.isProfileCustomized) + { + discardOrKeepProfileChangesDialog.show() + } } onEntered: { @@ -392,8 +403,6 @@ Item } } - - // // Infill // @@ -557,18 +566,20 @@ Item model: infillModel anchors.fill: parent - property int activeIndex: { + function activeIndex () { for (var i = 0; i < infillModel.count; i++) { var density = parseInt(infillDensity.properties.value) var steps = parseInt(infillSteps.properties.value) var infillModelItem = infillModel.get(i) - if (density >= infillModelItem.percentageMin + if (infillModelItem != "undefined" + && density >= infillModelItem.percentageMin && density <= infillModelItem.percentageMax && steps >= infillModelItem.stepsMin - && steps <= infillModelItem.stepsMax){ - return i - } + && steps <= infillModelItem.stepsMax + ){ + return i + } } return -1 } @@ -576,7 +587,7 @@ Item Rectangle { anchors.fill: parent - visible: infillIconList.activeIndex == index + visible: infillIconList.activeIndex() == index border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("quality_slider_unavailable") diff --git a/resources/qml/Topbar.qml b/resources/qml/Topbar.qml index 6085c6fe7e..9b67856fc8 100644 --- a/resources/qml/Topbar.qml +++ b/resources/qml/Topbar.qml @@ -6,7 +6,7 @@ import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 -import UM 1.2 as UM +import UM 1.4 as UM import Cura 1.0 as Cura import "Menus" @@ -16,26 +16,25 @@ Rectangle anchors.left: parent.left anchors.right: parent.right height: UM.Theme.getSize("sidebar_header").height - color: base.monitoringPrint ? UM.Theme.getColor("topbar_background_color_monitoring") : UM.Theme.getColor("topbar_background_color") + color: UM.Controller.activeStage.stageId == "MonitorStage" ? UM.Theme.getColor("topbar_background_color_monitoring") : UM.Theme.getColor("topbar_background_color") property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property bool monitoringPrint: false - // outgoing signal - signal startMonitoringPrint() - signal stopMonitoringPrint() + property int rightMargin: UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width; + property int allItemsWidth: 0; - // update monitoring status when event was triggered outside topbar - Component.onCompleted: { - startMonitoringPrint.connect(function () { - base.monitoringPrint = true - UM.Controller.disableModelRendering() - }) - stopMonitoringPrint.connect(function () { - base.monitoringPrint = false - UM.Controller.enableModelRendering() - }) + function updateMarginsAndSizes() { + if (UM.Preferences.getValue("cura/sidebar_collapse")) { + rightMargin = UM.Theme.getSize("default_margin").width; + } else { + rightMargin = UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width; + } + allItemsWidth = ( + logo.width + UM.Theme.getSize("topbar_logo_right_margin").width + + UM.Theme.getSize("topbar_logo_right_margin").width + stagesMenuContainer.width + + UM.Theme.getSize("default_margin").width + viewModeButton.width + + rightMargin); } UM.I18nCatalog @@ -61,239 +60,110 @@ Rectangle Row { + id: stagesMenuContainer anchors.left: logo.right anchors.leftMargin: UM.Theme.getSize("topbar_logo_right_margin").width - anchors.right: machineSelection.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("default_margin").width - Button + // The topbar is dynamically filled with all available stages + Repeater { - id: showSettings - height: UM.Theme.getSize("sidebar_header").height - text: catalog.i18nc("@title:tab", "Prepare") - checkable: true - checked: isChecked() - exclusiveGroup: sidebarHeaderBarGroup - style: UM.Theme.styles.topbar_header_tab + id: stagesMenu - // We use a Qt.binding to re-bind the checkbox state after manually setting it - // https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing - onClicked: { - base.stopMonitoringPrint() - checked = Qt.binding(isChecked) - } + model: UM.StageModel{} - function isChecked () { - return !base.monitoringPrint - } - - property color overlayColor: "transparent" - property string overlayIconSource: "" - } - - Button - { - id: showMonitor - width: UM.Theme.getSize("topbar_button").width - height: UM.Theme.getSize("sidebar_header").height - text: catalog.i18nc("@title:tab", "Monitor") - checkable: true - checked: isChecked() - exclusiveGroup: sidebarHeaderBarGroup - style: UM.Theme.styles.topbar_header_tab_no_overlay - - // We use a Qt.binding to re-bind the checkbox state after manually setting it - // https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing - onClicked: { - base.startMonitoringPrint() - checked = Qt.binding(isChecked) - } - - function isChecked () { - return base.monitoringPrint - } - - property string iconSource: + delegate: Button { - if (!printerConnected) - { - return UM.Theme.getIcon("tab_status_unknown"); - } - else if (!printerAcceptsCommands) - { - return UM.Theme.getIcon("tab_status_unknown"); - } + text: model.name + checkable: true + checked: model.active + exclusiveGroup: topbarMenuGroup + style: (model.stage.iconSource != "") ? UM.Theme.styles.topbar_header_tab_no_overlay : UM.Theme.styles.topbar_header_tab + height: UM.Theme.getSize("sidebar_header").height + onClicked: UM.Controller.setActiveStage(model.id) + iconSource: model.stage.iconSource - if (Cura.MachineManager.printerOutputDevices[0].printerState == "maintenance") - { - return UM.Theme.getIcon("tab_status_busy"); - } - - switch (Cura.MachineManager.printerOutputDevices[0].jobState) - { - case "printing": - case "pre_print": - case "pausing": - case "resuming": - return UM.Theme.getIcon("tab_status_busy"); - case "wait_cleanup": - return UM.Theme.getIcon("tab_status_finished"); - case "ready": - case "": - return UM.Theme.getIcon("tab_status_connected") - case "paused": - return UM.Theme.getIcon("tab_status_paused") - case "error": - return UM.Theme.getIcon("tab_status_stopped") - default: - return UM.Theme.getIcon("tab_status_unknown") - } + property color overlayColor: "transparent" + property string overlayIconSource: "" } } - ExclusiveGroup { id: sidebarHeaderBarGroup } + ExclusiveGroup { id: topbarMenuGroup } } - ToolButton - { - id: machineSelection - text: Cura.MachineManager.activeMachineName - - width: UM.Theme.getSize("sidebar").width - height: UM.Theme.getSize("sidebar_header").height - tooltip: Cura.MachineManager.activeMachineName - - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - style: ButtonStyle - { - background: Rectangle - { - color: - { - if(control.pressed) - { - return UM.Theme.getColor("sidebar_header_active"); - } - else if(control.hovered) - { - return UM.Theme.getColor("sidebar_header_hover"); - } - else - { - return UM.Theme.getColor("sidebar_header_bar"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - UM.RecolorImage - { - id: downArrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("text_emphasis") - source: UM.Theme.getIcon("arrow_bottom") - } - Label - { - id: sidebarComboBoxLabel - color: UM.Theme.getColor("sidebar_header_text_active") - text: control.text; - elide: Text.ElideRight; - anchors.left: parent.left; - anchors.leftMargin: UM.Theme.getSize("default_margin").width * 2 - anchors.right: downArrow.left; - anchors.rightMargin: control.rightMargin; - anchors.verticalCenter: parent.verticalCenter; - font: UM.Theme.getFont("large") - } - } - label: Label {} - } - - menu: PrinterMenu { } - } - - //View orientation Item + // View orientation Item Row { id: viewOrientationControl height: 30 - spacing: 2 + visible: UM.Controller.activeStage.stageId != "MonitorStage" - visible: !base.monitoringPrint - - anchors { + anchors + { verticalCenter: base.verticalCenter - right: viewModeButton.right - rightMargin: UM.Theme.getSize("default_margin").width + viewModeButton.width + right: viewModeButton.left + rightMargin: UM.Theme.getSize("default_margin").width } // #1 3d view Button { iconSource: UM.Theme.getIcon("view_3d") - style: UM.Theme.styles.orientation_button + style: UM.Theme.styles.small_tool_button anchors.verticalCenter: viewOrientationControl.verticalCenter onClicked:{ UM.Controller.rotateView("3d", 0); } - visible: base.width > 1100 + visible: base.width - allItemsWidth - 4 * this.width > 0; } // #2 Front view Button { iconSource: UM.Theme.getIcon("view_front") - style: UM.Theme.styles.orientation_button + style: UM.Theme.styles.small_tool_button anchors.verticalCenter: viewOrientationControl.verticalCenter onClicked:{ UM.Controller.rotateView("home", 0); } - visible: base.width > 1130 + visible: base.width - allItemsWidth - 3 * this.width > 0; } // #3 Top view Button { iconSource: UM.Theme.getIcon("view_top") - style: UM.Theme.styles.orientation_button + style: UM.Theme.styles.small_tool_button anchors.verticalCenter: viewOrientationControl.verticalCenter onClicked:{ UM.Controller.rotateView("y", 90); } - visible: base.width > 1160 + visible: base.width - allItemsWidth - 2 * this.width > 0; } // #4 Left view Button { iconSource: UM.Theme.getIcon("view_left") - style: UM.Theme.styles.orientation_button + style: UM.Theme.styles.small_tool_button anchors.verticalCenter: viewOrientationControl.verticalCenter onClicked:{ UM.Controller.rotateView("x", 90); } - visible: base.width > 1190 + visible: base.width - allItemsWidth - 1 * this.width > 0; } // #5 Left view Button { iconSource: UM.Theme.getIcon("view_right") - style: UM.Theme.styles.orientation_button + style: UM.Theme.styles.small_tool_button anchors.verticalCenter: viewOrientationControl.verticalCenter onClicked:{ UM.Controller.rotateView("x", -90); } - visible: base.width > 1210 + visible: base.width - allItemsWidth > 0; } } @@ -304,11 +174,11 @@ Rectangle anchors { verticalCenter: parent.verticalCenter right: parent.right - rightMargin: UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width + rightMargin: rightMargin } style: UM.Theme.styles.combobox - visible: !base.monitoringPrint + visible: UM.Controller.activeStage.stageId != "MonitorStage" model: UM.ViewModel { } textRole: "name" @@ -364,4 +234,16 @@ Rectangle source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : ""; } + // Expand or collapse sidebar + Connections + { + target: Cura.Actions.expandSidebar + onTriggered: updateMarginsAndSizes() + } + + Component.onCompleted: + { + updateMarginsAndSizes(); + } + } diff --git a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..92f899bdeb --- /dev/null +++ b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Coarse +definition = builder_premium_small + +[metadata] +type = quality +quality_type = coarse +material = verbatim_bvoh_175 +setting_version = 4 +weight = -1 + +[values] +material_print_temperature = =default_material_print_temperature + 5 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.3 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 40 + diff --git a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg new file mode 100644 index 0000000000..cd8947aa80 --- /dev/null +++ b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = High Quality +definition = builder_premium_small + +[metadata] +type = quality +quality_type = high +material = verbatim_bvoh_175 +setting_version = 4 +weight = 1 + +[values] +acceleration_print = 2000 +material_print_temperature = =default_material_print_temperature + 5 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.1 +top_thickness = =layer_height * 7 +bottom_thickness = =layer_height * 5 +speed_print = 40 +layer_height_0 = 0.2 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..d59f768470 --- /dev/null +++ b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg @@ -0,0 +1,23 @@ +[general] +version = 2 +name = Normal +definition = builder_premium_small + +[metadata] +type = quality +quality_type = normal +material = verbatim_bvoh_175 +setting_version = 4 +weight = 0 + +[values] +material_print_temperature = =default_material_print_temperature + 5 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.2 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 40 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..41d882ee1d --- /dev/null +++ b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Coarse +definition = builder_premium_small + +[metadata] +type = quality +quality_type = coarse +material = innofill_innoflex60_175 +setting_version = 4 +weight = -1 + +[values] +material_print_temperature = =default_material_print_temperature +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.3 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 30 + diff --git a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg new file mode 100644 index 0000000000..147e1f4db8 --- /dev/null +++ b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = High Quality +definition = builder_premium_small + +[metadata] +type = quality +quality_type = high +material = innofill_innoflex60_175 +setting_version = 4 +weight = 1 + +[values] +acceleration_print = 2000 +material_print_temperature = =default_material_print_temperature +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.1 +top_thickness = =layer_height * 7 +bottom_thickness = =layer_height * 5 +speed_print = 30 +layer_height_0 = 0.2 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..fb43c8de19 --- /dev/null +++ b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg @@ -0,0 +1,23 @@ +[general] +version = 2 +name = Normal +definition = builder_premium_small + +[metadata] +type = quality +quality_type = normal +material = innofill_innoflex60_175 +setting_version = 4 +weight = 0 + +[values] +material_print_temperature = =default_material_print_temperature +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.2 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 30 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..f887600585 --- /dev/null +++ b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Coarse +definition = builder_premium_small + +[metadata] +type = quality +quality_type = coarse +material = generic_petg_175 +setting_version = 4 +weight = -1 + +[values] +material_print_temperature = =default_material_print_temperature - 5 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.3 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 60 + diff --git a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg new file mode 100644 index 0000000000..4258f2f708 --- /dev/null +++ b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = High Quality +definition = builder_premium_small + +[metadata] +type = quality +quality_type = high +material = generic_petg_175 +setting_version = 4 +weight = 1 + +[values] +acceleration_print = 2000 +material_print_temperature = =default_material_print_temperature - 5 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.1 +top_thickness = =layer_height * 7 +bottom_thickness = =layer_height * 5 +speed_print = 40 +layer_height_0 = 0.2 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..b732073795 --- /dev/null +++ b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg @@ -0,0 +1,23 @@ +[general] +version = 2 +name = Normal +definition = builder_premium_small + +[metadata] +type = quality +quality_type = normal +material = generic_petg_175 +setting_version = 4 +weight = 0 + +[values] +material_print_temperature = =default_material_print_temperature - 5 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.2 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 50 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg index 3454f8b3ad..4f0c26dd7d 100644 --- a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg @@ -9,7 +9,6 @@ quality_type = coarse material = generic_pla_175 setting_version = 4 weight = -1 -global_quality = True [values] material_print_temperature = =default_material_print_temperature + 15 diff --git a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg index b5ac4cb6a1..4a9bcb90bf 100644 --- a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg @@ -9,7 +9,6 @@ quality_type = high material = generic_pla_175 setting_version = 4 weight = 1 -global_quality = True [values] acceleration_print = 2000 diff --git a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg index c5a93e65c1..6af5601fd6 100644 --- a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg @@ -9,7 +9,6 @@ quality_type = normal material = generic_pla_175 setting_version = 4 weight = 0 -global_quality = True [values] material_print_temperature = =default_material_print_temperature + 15 diff --git a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..12a4c9d883 --- /dev/null +++ b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg @@ -0,0 +1,24 @@ +[general] +version = 2 +name = Coarse +definition = builder_premium_small + +[metadata] +type = quality +quality_type = coarse +material = generic_pva_175 +setting_version = 4 +weight = -1 + +[values] +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.3 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 40 + diff --git a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg new file mode 100644 index 0000000000..d32017c5f2 --- /dev/null +++ b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg @@ -0,0 +1,25 @@ +[general] +version = 2 +name = High Quality +definition = builder_premium_small + +[metadata] +type = quality +quality_type = high +material = generic_pva_175 +setting_version = 4 +weight = 1 + +[values] +acceleration_print = 2000 +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.1 +top_thickness = =layer_height * 7 +bottom_thickness = =layer_height * 5 +speed_print = 40 +layer_height_0 = 0.2 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..2acc354822 --- /dev/null +++ b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg @@ -0,0 +1,23 @@ +[general] +version = 2 +name = Normal +definition = builder_premium_small + +[metadata] +type = quality +quality_type = normal +material = generic_pva_175 +setting_version = 4 +weight = 0 + +[values] +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = =material_print_temperature +material_initial_print_temperature= =material_print_temperature +material_final_print_temperature= =material_print_temperature +material_bed_temperature = 45 +material_bed_temperature_layer_0= =material_bed_temperature +layer_height = 0.2 +top_thickness = =layer_height * 5 +bottom_thickness = =layer_height * 3 +speed_print = 40 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg new file mode 100644 index 0000000000..4b66293d04 --- /dev/null +++ b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Coarse +definition = builder_premium_small + +[metadata] +type = quality +quality_type = coarse +setting_version = 4 +weight = -1 +global_quality = True + +[values] +layer_height = 0.3 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg new file mode 100644 index 0000000000..4a97dda084 --- /dev/null +++ b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = High Quality +definition = builder_premium_small + +[metadata] +type = quality +quality_type = high +setting_version = 4 +weight = 1 +global_quality = True + +[values] +layer_height = 0.1 \ No newline at end of file diff --git a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..15ea66879f --- /dev/null +++ b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Normal +definition = builder_premium_small + +[metadata] +type = quality +quality_type = normal +setting_version = 4 +weight = 0 +global_quality = True + +[values] +layer_height = 0.2 \ No newline at end of file diff --git a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg index 5d798d556e..fc7d4d12d2 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg @@ -14,7 +14,6 @@ setting_version = 4 cool_fan_speed = 40 infill_overlap = 15 material_final_print_temperature = =material_print_temperature - 5 -prime_tower_enable = True prime_tower_purge_volume = 0.6 prime_tower_size = 12 prime_tower_wall_thickness = 0.9 diff --git a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg index a68b43fa2a..83e0c549c4 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -11,7 +11,6 @@ weight = 0 setting_version = 4 [values] -infill_overlap = =10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 prime_tower_size = 12 prime_tower_wall_thickness = 0.9 retraction_extrusion_window = 0.5 diff --git a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg index fda770266e..58ddc32101 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -14,9 +14,8 @@ setting_version = 4 cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 12 infill_line_width = =round(line_width * 0.5 / 0.4, 2) -infill_overlap = =10 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0 machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 2.0 +machine_nozzle_heat_up_speed = 1.4 ooze_shield_angle = 40 raft_acceleration = =acceleration_layer_0 raft_airgap = =round(layer_height_0 * 0.85, 2) @@ -24,8 +23,7 @@ raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 3) raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) -retraction_extrusion_window = =retraction_amount -retraction_min_travel = =line_width * 2 +retraction_min_travel = 5 skin_overlap = 50 speed_print = 70 speed_topbottom = =math.ceil(speed_print * 30 / 70) diff --git a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg index 43b8f95677..7c9fa32949 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg @@ -28,6 +28,9 @@ machine_min_cool_heat_time_window = 15 multiple_mesh_overlap = 0 ooze_shield_angle = 40 prime_tower_enable = True +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +raft_interface_thickness = =max(layer_height * 1.5, 0.225) retraction_count_max = 80 retraction_hop = 2 retraction_hop_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg index d3772448cf..1bee4b8f18 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -17,11 +17,10 @@ cool_min_speed = 10 infill_overlap = 10 infill_pattern = grid machine_nozzle_cool_down_speed = 0.9 -machine_nozzle_heat_up_speed = 2.0 +machine_nozzle_heat_up_speed = 1.4 material_final_print_temperature = =max(-273.15, material_print_temperature - 15) material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) material_print_temperature = 190 -retraction_extrusion_window = =retraction_amount retraction_hop = 0.2 skin_overlap = 5 speed_layer_0 = 30 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg index 7f138f979d..58e7fdc688 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg @@ -57,4 +57,3 @@ travel_avoid_distance = 3 wall_0_inset = 0 wall_line_width_x = =line_width wall_thickness = =line_width * 3 - diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg index 980da522c8..f3c6ae8387 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg @@ -15,8 +15,7 @@ cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed machine_nozzle_cool_down_speed = 0.75 machine_nozzle_heat_up_speed = 1.6 -material_print_temperature = =230 -material_standby_temperature = 100 +material_print_temperature = =default_material_print_temperature + 5 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 20 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg index 86b584c9af..e027477595 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg @@ -11,12 +11,10 @@ weight = -1 setting_version = 4 [values] -default_material_print_temperature = 225 cool_fan_full_at_height = =layer_height_0 + 2 * layer_height cool_fan_speed_max = =cool_fan_speed machine_nozzle_cool_down_speed = 0.75 machine_nozzle_heat_up_speed = 1.6 -material_standby_temperature = 100 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 speed_print = 80 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..3ced3a0417 --- /dev/null +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 2 +name = Fine +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_bam_ultimaker3_AA_0.4 +weight = 0 +setting_version = 4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature - 10 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +skin_overlap = 10 +speed_layer_0 = 20 +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 1) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = 10 +top_bottom_thickness = 1 +wall_thickness = 1 diff --git a/resources/shaders/transparent_object.shader b/resources/shaders/transparent_object.shader index faa43bb46c..75fe7e4b2c 100644 --- a/resources/shaders/transparent_object.shader +++ b/resources/shaders/transparent_object.shader @@ -111,6 +111,7 @@ u_modelMatrix = model_matrix u_viewProjectionMatrix = view_projection_matrix u_normalMatrix = normal_matrix u_lightPosition = light_0_position +u_diffuseColor = diffuse_color [attributes] a_vertex = vertex diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 5cfed426e5..9e99945d3d 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -55,6 +55,15 @@ "button_disabled": [39, 44, 48, 255], "button_disabled_text": [255, 255, 255, 101], + "small_button": [39, 44, 48, 0], + "small_button_hover": [39, 44, 48, 255], + "small_button_active": [67, 72, 75, 255], + "small_button_active_hover": [67, 72, 75, 255], + "small_button_text": [255, 255, 255, 197], + "small_button_text_hover": [255, 255, 255, 255], + "small_button_text_active": [255, 255, 255, 255], + "small_button_text_active_hover": [255, 255, 255, 255], + "button_tooltip": [39, 44, 48, 255], "button_tooltip_border": [39, 44, 48, 255], "button_tooltip_text": [255, 255, 255, 172], diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index 0f3c910270..0de761b7d9 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -295,16 +295,26 @@ QtObject { anchors.fill: parent; property bool down: control.pressed || (control.checkable && control.checked); - color: { - if(control.customColor !== undefined && control.customColor !== null) { + color: + { + if(control.customColor !== undefined && control.customColor !== null) + { return control.customColor - } else if(control.checkable && control.checked && control.hovered) { + } + else if(control.checkable && control.checked && control.hovered) + { return Theme.getColor("button_active_hover"); - } else if(control.pressed || (control.checkable && control.checked)) { + } + else if(control.pressed || (control.checkable && control.checked)) + { return Theme.getColor("button_active"); - } else if(control.hovered) { + } + else if(control.hovered) + { return Theme.getColor("button_hover"); - } else { + } + else + { return Theme.getColor("button"); } } @@ -381,30 +391,39 @@ QtObject { } } - property Component orientation_button: Component { + property Component small_tool_button: Component { ButtonStyle { background: Item { - implicitWidth: 25; - implicitHeight: 25; + implicitWidth: Theme.getSize("small_button").width; + implicitHeight: Theme.getSize("small_button").height; Rectangle { - id: buttonFace2; + id: smallButtonFace; anchors.fill: parent; property bool down: control.pressed || (control.checkable && control.checked); - color: { - if(control.customColor !== undefined && control.customColor !== null) { + color: + { + if(control.customColor !== undefined && control.customColor !== null) + { return control.customColor - } else if(control.checkable && control.checked && control.hovered) { - return Theme.getColor("button_active_hover"); - } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("button_active"); - } else if(control.hovered) { - return Theme.getColor("button_hover"); - } else { - //return Theme.getColor("button"); - return "transparent" + } + else if(control.checkable && control.checked && control.hovered) + { + return Theme.getColor("small_button_active_hover"); + } + else if(control.pressed || (control.checkable && control.checked)) + { + return Theme.getColor("small_button_active"); + } + else if(control.hovered) + { + return Theme.getColor("small_button_hover"); + } + else + { + return Theme.getColor("small_button"); } } Behavior on color { ColorAnimation { duration: 50; } } @@ -413,17 +432,10 @@ QtObject { border.color: Theme.getColor("tool_button_border") UM.RecolorImage { - id: tool_button_arrow2 - //anchors.right: parent.right; - //anchors.rightMargin: (Theme.getSize("button").width - Theme.getSize("button_icon").width) / 4 - //anchors.bottom: parent.bottom; - //anchors.bottomMargin: (Theme.getSize("button").height - Theme.getSize("button_icon").height) / 4 - //width: Theme.getSize("standard_arrow").width - //height: Theme.getSize("standard_arrow").height + id: smallToolButtonArrow width: 5 height: 5 - sourceSize.width: 5 sourceSize.height: 5 visible: control.menu != null; @@ -431,19 +443,19 @@ QtObject { { if(control.checkable && control.checked && control.hovered) { - return Theme.getColor("button_text_active_hover"); + return Theme.getColor("small_button_text_active_hover"); } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("button_text_active"); + return Theme.getColor("small_button_text_active"); } else if(control.hovered) { - return Theme.getColor("button_text_hover"); + return Theme.getColor("small_button_text_hover"); } else { - return Theme.getColor("button_text"); + return Theme.getColor("small_button_text"); } } source: Theme.getIcon("arrow_bottom") @@ -456,31 +468,29 @@ QtObject { anchors.centerIn: parent; opacity: !control.enabled ? 0.2 : 1.0 source: control.iconSource; - width: 20; - height: 20; + width: Theme.getSize("small_button_icon").width; + height: Theme.getSize("small_button_icon").height; color: { if(control.checkable && control.checked && control.hovered) { - return Theme.getColor("button_text_active_hover"); + return Theme.getColor("small_button_text_active_hover"); } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("button_text_active"); + return Theme.getColor("small_button_text_active"); } else if(control.hovered) { - //return Theme.getColor("button_text_hover"); - return "white" + return Theme.getColor("small_button_text_hover"); } else { - //return Theme.getColor("button_text"); - return "black" + return Theme.getColor("small_button_text"); } } - sourceSize: Theme.getSize("button_icon") + sourceSize: Theme.getSize("small_button_icon") } } } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 09f93d413e..47de3cd382 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -103,6 +103,15 @@ "button_disabled": [31, 36, 39, 255], "button_disabled_text": [255, 255, 255, 101], + "small_button": [31, 36, 39, 0], + "small_button_hover": [68, 72, 75, 255], + "small_button_active": [68, 72, 75, 255], + "small_button_active_hover": [68, 72, 75, 255], + "small_button_text": [31, 36, 39, 197], + "small_button_text_hover": [255, 255, 255, 255], + "small_button_text_active": [255, 255, 255, 255], + "small_button_text_active_hover": [255, 255, 255, 255], + "button_tooltip": [31, 36, 39, 255], "button_tooltip_border": [68, 192, 255, 255], "button_tooltip_text": [192, 193, 194, 255], @@ -257,6 +266,7 @@ "model_unslicable": [122, 122, 122, 255], "model_unslicable_alt": [172, 172, 127, 255], "model_selection_outline": [12, 169, 227, 255], + "model_non_printing": [122, 122, 122, 255], "xray": [26, 26, 62, 255], "xray_error": [255, 0, 0, 255], @@ -323,6 +333,9 @@ "button_icon": [2.5, 2.5], "button_lining": [0, 0], + "small_button": [2, 2], + "small_button_icon": [1.5, 1.5], + "topbar_logo_right_margin": [3, 0], "topbar_button": [8, 4], "topbar_button_icon": [1.2, 1.2], diff --git a/resources/variants/ultimaker3_aa0.25.inst.cfg b/resources/variants/ultimaker3_aa0.25.inst.cfg index ebb584f674..e6f852c02c 100644 --- a/resources/variants/ultimaker3_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_aa0.25.inst.cfg @@ -11,7 +11,6 @@ setting_version = 4 [values] brim_width = 7 infill_line_width = 0.23 -infill_overlap = 0 layer_height_0 = 0.17 line_width = 0.23 machine_nozzle_cool_down_speed = 0.85 @@ -21,10 +20,18 @@ machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 0.65 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 +raft_airgap = 0.3 +raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 +raft_interface_line_spacing = =raft_interface_line_width + 0.2 +raft_interface_line_width = =line_width * 2 raft_interface_thickness = =layer_height * 1.5 +raft_jerk = =jerk_print +raft_margin = 15 +raft_surface_layers = 2 retraction_count_max = 25 retraction_extrusion_window = 1 retraction_min_travel = 0.7 +retraction_prime_speed = =retraction_speed skin_overlap = 15 speed_layer_0 = 20 speed_print = 55 @@ -32,9 +39,12 @@ speed_topbottom = 20 speed_wall = =math.ceil(speed_print * 30 / 55) support_angle = 60 support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag support_top_distance = =support_z_distance +support_use_towers = True support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = =switch_extruder_retraction_speeds +switch_extruder_retraction_amount = =machine_heat_zone_length top_bottom_thickness = 1.2 wall_line_width_x = 0.23 wall_thickness = 1.3 - diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index a6d33afc6d..9e5692b565 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -6,7 +6,9 @@ import pytest #This module contains unit tests. import shutil #To copy files to make a temporary file. import unittest.mock #To mock and monkeypatch stuff. import urllib.parse +import copy +import cura.CuraApplication from cura.Settings.CuraContainerRegistry import CuraContainerRegistry #The class we're testing. from cura.Settings.ExtruderStack import ExtruderStack #Testing for returning the correct types of stacks. from cura.Settings.GlobalStack import GlobalStack #Testing for returning the correct types of stacks. @@ -15,6 +17,32 @@ import UM.Settings.InstanceContainer #Creating instance containers to register. import UM.Settings.ContainerRegistry #Making empty container stacks. import UM.Settings.ContainerStack #Setting the container registry here properly. from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Settings.ContainerRegistry import ContainerRegistry + +def creteEmptyContainers(): + empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + empty_variant_container = copy.deepcopy(empty_container) + empty_variant_container.setMetaDataEntry("id", "empty_variant") + empty_variant_container.addMetaDataEntry("type", "variant") + ContainerRegistry.getInstance().addContainer(empty_variant_container) + + empty_material_container = copy.deepcopy(empty_container) + empty_material_container.setMetaDataEntry("id", "empty_material") + empty_material_container.addMetaDataEntry("type", "material") + ContainerRegistry.getInstance().addContainer(empty_material_container) + + empty_quality_container = copy.deepcopy(empty_container) + empty_quality_container.setMetaDataEntry("id", "empty_quality") + empty_quality_container.setName("Not Supported") + empty_quality_container.addMetaDataEntry("quality_type", "not_supported") + empty_quality_container.addMetaDataEntry("type", "quality") + empty_quality_container.addMetaDataEntry("supported", False) + ContainerRegistry.getInstance().addContainer(empty_quality_container) + + empty_quality_changes_container = copy.deepcopy(empty_container) + empty_quality_changes_container.setMetaDataEntry("id", "empty_quality_changes") + empty_quality_changes_container.addMetaDataEntry("type", "quality_changes") + ContainerRegistry.getInstance().addContainer(empty_quality_changes_container) ## Gives a fresh CuraContainerRegistry instance. @pytest.fixture() @@ -37,6 +65,7 @@ def teardown(): ## Tests whether addContainer properly converts to ExtruderStack. def test_addContainerExtruderStack(container_registry, definition_container): + creteEmptyContainers() container_registry.addContainer(definition_container) container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Container Stack") #A container we're going to convert. @@ -74,7 +103,7 @@ def test_addContainerGoodSettingVersion(container_registry, definition_container instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") instance.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) - instance.setDefinition(definition_container) + instance.setDefinition(definition_container.getId()) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -89,7 +118,7 @@ def test_addContainerNoSettingVersion(container_registry, definition_container): instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") #Don't add setting_version metadata. - instance.setDefinition(definition_container) + instance.setDefinition(definition_container.getId()) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -104,7 +133,7 @@ def test_addContainerBadSettingVersion(container_registry, definition_container) instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance") instance.addMetaDataEntry("setting_version", 9001) #Wrong version! - instance.setDefinition(definition_container) + instance.setDefinition(definition_container.getId()) mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -113,72 +142,36 @@ def test_addContainerBadSettingVersion(container_registry, definition_container) mock_super_add_container.assert_not_called() #Should not get passed on to UM.Settings.ContainerRegistry.addContainer, because the setting_version doesn't match its definition! ## Tests whether loading gives objects of the correct type. -@pytest.mark.parametrize("filename, output_class", [ - ("ExtruderLegacy.stack.cfg", ExtruderStack), - ("MachineLegacy.stack.cfg", GlobalStack), - ("Left.extruder.cfg", ExtruderStack), - ("Global.global.cfg", GlobalStack), - ("Global.stack.cfg", GlobalStack) -]) -def test_loadTypes(filename, output_class, container_registry): - #Mock some dependencies. - Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. - - def findContainers(container_type = 0, id = None): - if id == "some_instance": - return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] - elif id == "some_definition": - return [DefinitionContainer(container_id = id)] - else: - return [] - - container_registry.findContainers = findContainers - - with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): - with unittest.mock.patch("os.remove"): - container_registry.load() - - #Check whether the resulting type was correct. - stack_id = filename.split(".")[0] - for container in container_registry._containers: #Stupid ContainerRegistry class doesn't expose any way of getting at this except by prodding the privates. - if container.getId() == stack_id: #This is the one we're testing. - assert type(container) == output_class - break - else: - assert False #Container stack with specified ID was not loaded. - -## Tests whether loading a legacy file moves the upgraded file properly. -def test_loadLegacyFileRenamed(container_registry): - #Create a temporary file for the registry to load. - stacks_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks") - temp_file = os.path.join(stacks_folder, "temporary.stack.cfg") - temp_file_source = os.path.join(stacks_folder, "MachineLegacy.stack.cfg") - shutil.copyfile(temp_file_source, temp_file) - - #Mock some dependencies. - UM.Settings.ContainerStack.setContainerRegistry(container_registry) - Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [temp_file]) #Return a temporary file that we'll make for this test. - - def findContainers(container_type = 0, id = None): - if id == "MachineLegacy": - return None - - container = UM.Settings.ContainerRegistry._EmptyInstanceContainer(id) - container.getNextStack = unittest.mock.MagicMock() - return [container] - - old_find_containers = container_registry.findContainers - container_registry.findContainers = findContainers - - with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): - container_registry.load() - - container_registry.findContainers = old_find_containers - - container_registry.saveAll() - print("all containers in registry", container_registry._containers) - assert not os.path.isfile(temp_file) - mime_type = container_registry.getMimeTypeForContainer(GlobalStack) - file_name = urllib.parse.quote_plus("MachineLegacy") + "." + mime_type.preferredSuffix - path = Resources.getStoragePath(Resources.ContainerStacks, file_name) - assert os.path.isfile(path) +# @pytest.mark.parametrize("filename, output_class", [ +# ("ExtruderLegacy.stack.cfg", ExtruderStack), +# ("MachineLegacy.stack.cfg", GlobalStack), +# ("Left.extruder.cfg", ExtruderStack), +# ("Global.global.cfg", GlobalStack), +# ("Global.stack.cfg", GlobalStack) +# ]) +# def test_loadTypes(filename, output_class, container_registry): +# #Mock some dependencies. +# Resources.getAllResourcesOfType = unittest.mock.MagicMock(return_value = [os.path.join(os.path.dirname(os.path.abspath(__file__)), "stacks", filename)]) #Return just this tested file. +# +# def findContainers(container_type = 0, id = None): +# if id == "some_instance": +# return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)] +# elif id == "some_definition": +# return [DefinitionContainer(container_id = id)] +# else: +# return [] +# +# container_registry.findContainers = findContainers +# +# with unittest.mock.patch("cura.Settings.GlobalStack.GlobalStack.findContainer"): +# with unittest.mock.patch("os.remove"): +# container_registry.load() +# +# #Check whether the resulting type was correct. +# stack_id = filename.split(".")[0] +# for container_id, container in container_registry._containers.items(): #Stupid ContainerRegistry class doesn't expose any way of getting at this except by prodding the privates. +# if container_id == stack_id: #This is the one we're testing. +# assert type(container) == output_class +# break +# else: +# assert False #Container stack with specified ID was not loaded. \ No newline at end of file diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index 6ed2c6649b..2a8d19b80f 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -3,7 +3,9 @@ import pytest #This module contains automated tests. import unittest.mock #For the mocking and monkeypatching functionality. +import copy +import cura.CuraApplication import UM.Settings.ContainerRegistry #To create empty instance containers. import UM.Settings.ContainerStack #To set the container registry the container stacks use. from UM.Settings.DefinitionContainer import DefinitionContainer #To check against the class of DefinitionContainer. @@ -12,6 +14,7 @@ import cura.Settings.ExtruderStack #The module we're testing. from cura.Settings.Exceptions import InvalidContainerError, InvalidOperationError #To check whether the correct exceptions are raised. from cura.Settings.ExtruderManager import ExtruderManager +from UM.Settings.ContainerRegistry import ContainerRegistry ## Fake container registry that always provides all containers you ask of. @pytest.yield_fixture() @@ -32,6 +35,7 @@ def container_registry(): ## An empty extruder stack to test with. @pytest.fixture() def extruder_stack() -> cura.Settings.ExtruderStack.ExtruderStack: + creteEmptyContainers() return cura.Settings.ExtruderStack.ExtruderStack("TestStack") ## Gets an instance container with a specified container type. @@ -43,6 +47,31 @@ def getInstanceContainer(container_type) -> InstanceContainer: container.addMetaDataEntry("type", container_type) return container +def creteEmptyContainers(): + empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + empty_variant_container = copy.deepcopy(empty_container) + empty_variant_container.setMetaDataEntry("id", "empty_variant") + empty_variant_container.addMetaDataEntry("type", "variant") + ContainerRegistry.getInstance().addContainer(empty_variant_container) + + empty_material_container = copy.deepcopy(empty_container) + empty_material_container.setMetaDataEntry("id", "empty_material") + empty_material_container.addMetaDataEntry("type", "material") + ContainerRegistry.getInstance().addContainer(empty_material_container) + + empty_quality_container = copy.deepcopy(empty_container) + empty_quality_container.setMetaDataEntry("id", "empty_quality") + empty_quality_container.setName("Not Supported") + empty_quality_container.addMetaDataEntry("quality_type", "not_supported") + empty_quality_container.addMetaDataEntry("type", "quality") + empty_quality_container.addMetaDataEntry("supported", False) + ContainerRegistry.getInstance().addContainer(empty_quality_container) + + empty_quality_changes_container = copy.deepcopy(empty_container) + empty_quality_changes_container.setMetaDataEntry("id", "empty_quality_changes") + empty_quality_changes_container.addMetaDataEntry("type", "quality_changes") + ContainerRegistry.getInstance().addContainer(empty_quality_changes_container) + class DefinitionContainerSubClass(DefinitionContainer): def __init__(self): super().__init__(container_id = "SubDefinitionContainer") diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py index afd3d2b425..9b0735c8f2 100755 --- a/tests/Settings/TestGlobalStack.py +++ b/tests/Settings/TestGlobalStack.py @@ -3,7 +3,9 @@ import pytest #This module contains unit tests. import unittest.mock #To monkeypatch some mocks in place of dependencies. +import copy +import cura.CuraApplication import cura.Settings.GlobalStack #The module we're testing. import cura.Settings.CuraContainerStack #To get the list of container types. from cura.Settings.Exceptions import TooManyExtrudersError, InvalidContainerError, InvalidOperationError #To test raising these errors. @@ -13,6 +15,7 @@ from UM.Settings.SettingInstance import InstanceState import UM.Settings.ContainerRegistry import UM.Settings.ContainerStack import UM.Settings.SettingDefinition #To add settings to the definition. +from UM.Settings.ContainerRegistry import ContainerRegistry ## Fake container registry that always provides all containers you ask of. @pytest.yield_fixture() @@ -33,6 +36,7 @@ def container_registry(): #An empty global stack to test with. @pytest.fixture() def global_stack() -> cura.Settings.GlobalStack.GlobalStack: + creteEmptyContainers() return cura.Settings.GlobalStack.GlobalStack("TestStack") ## Gets an instance container with a specified container type. @@ -44,6 +48,31 @@ def getInstanceContainer(container_type) -> InstanceContainer: container.addMetaDataEntry("type", container_type) return container +def creteEmptyContainers(): + empty_container = ContainerRegistry.getInstance().getEmptyInstanceContainer() + empty_variant_container = copy.deepcopy(empty_container) + empty_variant_container.setMetaDataEntry("id", "empty_variant") + empty_variant_container.addMetaDataEntry("type", "variant") + ContainerRegistry.getInstance().addContainer(empty_variant_container) + + empty_material_container = copy.deepcopy(empty_container) + empty_material_container.setMetaDataEntry("id", "empty_material") + empty_material_container.addMetaDataEntry("type", "material") + ContainerRegistry.getInstance().addContainer(empty_material_container) + + empty_quality_container = copy.deepcopy(empty_container) + empty_quality_container.setMetaDataEntry("id", "empty_quality") + empty_quality_container.setName("Not Supported") + empty_quality_container.addMetaDataEntry("quality_type", "not_supported") + empty_quality_container.addMetaDataEntry("type", "quality") + empty_quality_container.addMetaDataEntry("supported", False) + ContainerRegistry.getInstance().addContainer(empty_quality_container) + + empty_quality_changes_container = copy.deepcopy(empty_container) + empty_quality_changes_container.setMetaDataEntry("id", "empty_quality_changes") + empty_quality_changes_container.addMetaDataEntry("type", "quality_changes") + ContainerRegistry.getInstance().addContainer(empty_quality_changes_container) + class DefinitionContainerSubClass(DefinitionContainer): def __init__(self): super().__init__(container_id = "SubDefinitionContainer")