Merge branch 'maintenance' into devel
This commit is contained in:
commit
cf9e17ebfd
20 changed files with 473 additions and 320 deletions
|
|
@ -397,13 +397,10 @@ class FileManager(object):
|
|||
if hook_file_object is not None:
|
||||
file_object = hook_file_object
|
||||
file_path = self._storage(destination).add_file(path, file_object, links=links, printer_profile=printer_profile, allow_overwrite=allow_overwrite)
|
||||
absolute_path = self._storage(destination).path_on_disk(file_path)
|
||||
_, file_name = self._storage(destination).split_path(file_path)
|
||||
|
||||
if analysis is None:
|
||||
file_type = get_file_type(absolute_path)
|
||||
if file_type:
|
||||
queue_entry = QueueEntry(file_name, file_path, file_type[-1], destination, absolute_path, printer_profile)
|
||||
queue_entry = self._analysis_queue_entry(destination, file_path, printer_profile=printer_profile)
|
||||
if queue_entry:
|
||||
self._analysis_queue.enqueue(queue_entry, high_priority=True)
|
||||
else:
|
||||
self._add_analysis_result(destination, path, analysis)
|
||||
|
|
@ -412,6 +409,8 @@ class FileManager(object):
|
|||
return file_path
|
||||
|
||||
def remove_file(self, destination, path):
|
||||
queue_entry = self._analysis_queue_entry(destination, path)
|
||||
self._analysis_queue.dequeue(queue_entry)
|
||||
self._storage(destination).remove_file(path)
|
||||
eventManager().fire(Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
|
|
@ -420,6 +419,8 @@ class FileManager(object):
|
|||
eventManager().fire(Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def move_file(self, destination, source, dst):
|
||||
queue_entry = self._analysis_queue_entry(destination, source)
|
||||
self._analysis_queue.dequeue(queue_entry)
|
||||
self._storage(destination).move_file(source, dst)
|
||||
eventManager().fire(Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
|
|
@ -429,7 +430,10 @@ class FileManager(object):
|
|||
return folder_path
|
||||
|
||||
def remove_folder(self, destination, path, recursive=True):
|
||||
self._analysis_queue.dequeue_folder(destination, path)
|
||||
self._analysis_queue.pause()
|
||||
self._storage(destination).remove_folder(path, recursive=recursive)
|
||||
self._analysis_queue.resume()
|
||||
eventManager().fire(Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def copy_folder(self, destination, source, dst):
|
||||
|
|
@ -437,7 +441,10 @@ class FileManager(object):
|
|||
eventManager().fire(Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def move_folder(self, destination, source, dst):
|
||||
self._analysis_queue.dequeue_folder(destination, source)
|
||||
self._analysis_queue.pause()
|
||||
self._storage(destination).move_folder(source, dst)
|
||||
self._analysis_queue.resume()
|
||||
eventManager().fire(Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def get_metadata(self, destination, path):
|
||||
|
|
@ -542,3 +549,15 @@ class FileManager(object):
|
|||
def _on_analysis_finished(self, entry, result):
|
||||
self._add_analysis_result(entry.location, entry.path, result)
|
||||
|
||||
def _analysis_queue_entry(self, destination, path, printer_profile=None):
|
||||
if printer_profile is None:
|
||||
printer_profile = self._printer_profile_manager.get_current_or_default()
|
||||
|
||||
absolute_path = self._storage(destination).path_on_disk(path)
|
||||
_, file_name = self._storage(destination).split_path(path)
|
||||
file_type = get_file_type(absolute_path)
|
||||
|
||||
if file_type:
|
||||
return QueueEntry(file_name, path, file_type[-1], destination, absolute_path, printer_profile)
|
||||
else:
|
||||
return None
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import collections
|
|||
import time
|
||||
|
||||
from octoprint.events import Events, eventManager
|
||||
from octoprint.settings import settings
|
||||
|
||||
import octoprint.util.gcodeInterpreter as gcodeInterpreter
|
||||
|
||||
|
|
@ -40,6 +41,12 @@ class QueueEntry(collections.namedtuple("QueueEntry", "name, path, type, locatio
|
|||
return "{location}:{path}".format(location=self.location, path=self.path)
|
||||
|
||||
|
||||
class AnalysisAborted(Exception):
|
||||
def __init__(self, reenqueue=True, *args, **kwargs):
|
||||
Exception.__init__(self, *args, **kwargs)
|
||||
self.reenqueue = reenqueue
|
||||
|
||||
|
||||
class AnalysisQueue(object):
|
||||
"""
|
||||
OctoPrint's :class:`AnalysisQueue` can manage various :class:`AbstractAnalysisQueue` implementations, mapped
|
||||
|
|
@ -77,6 +84,16 @@ class AnalysisQueue(object):
|
|||
self._queues[entry.type].enqueue(entry, high_priority=high_priority)
|
||||
return True
|
||||
|
||||
def dequeue(self, entry):
|
||||
if not entry.type in self._queues:
|
||||
return False
|
||||
|
||||
self._queues[entry.type].dequeue(entry.location, entry.path)
|
||||
|
||||
def dequeue_folder(self, destination, path):
|
||||
for queue in self._queues.values():
|
||||
queue.dequeue_folder(destination, path)
|
||||
|
||||
def pause(self):
|
||||
for queue in self._queues.values():
|
||||
queue.pause()
|
||||
|
|
@ -112,8 +129,10 @@ class AbstractAnalysisQueue(object):
|
|||
.. automethod:: _do_abort
|
||||
"""
|
||||
|
||||
LOW_PRIO = 0
|
||||
HIGH_PRIO = 100
|
||||
LOW_PRIO = 100
|
||||
LOW_PRIO_ABORTED = 75
|
||||
HIGH_PRIO = 50
|
||||
HIGH_PRIO_ABORTED = 0
|
||||
|
||||
def __init__(self, finished_callback):
|
||||
self._logger = logging.getLogger(__name__)
|
||||
|
|
@ -123,11 +142,15 @@ class AbstractAnalysisQueue(object):
|
|||
self._active = threading.Event()
|
||||
self._active.set()
|
||||
|
||||
self._done = threading.Event()
|
||||
self._done.clear()
|
||||
|
||||
self._currentFile = None
|
||||
self._currentProgress = None
|
||||
|
||||
self._queue = queue.PriorityQueue()
|
||||
self._current = None
|
||||
self._current_highprio = False
|
||||
|
||||
self._worker = threading.Thread(target=self._work)
|
||||
self._worker.daemon = True
|
||||
|
|
@ -153,7 +176,24 @@ class AbstractAnalysisQueue(object):
|
|||
self._logger.debug("Adding entry {entry} to analysis queue with low priority".format(entry=entry))
|
||||
prio = self.__class__.LOW_PRIO
|
||||
|
||||
self._queue.put((prio, entry))
|
||||
self._queue.put((prio, entry, high_priority))
|
||||
if high_priority and self._current is not None and not self._current_highprio:
|
||||
self._logger.debug("Aborting current analysis in favor of high priority one")
|
||||
self._do_abort()
|
||||
|
||||
def dequeue(self, location, path):
|
||||
if self._current is not None and self._current.location == location \
|
||||
and self._current.path == path:
|
||||
self._do_abort(reenqueue=False)
|
||||
self._done.wait()
|
||||
self._done.clear()
|
||||
|
||||
def dequeue_folder(self, location, path):
|
||||
if self._current is not None and self._current.location == location \
|
||||
and self._current.path.startswith(path + "/"):
|
||||
self._do_abort(reenqueue=False)
|
||||
self._done.wait()
|
||||
self._done.clear()
|
||||
|
||||
def pause(self):
|
||||
"""
|
||||
|
|
@ -175,24 +215,23 @@ class AbstractAnalysisQueue(object):
|
|||
self._active.set()
|
||||
|
||||
def _work(self):
|
||||
aborted = None
|
||||
while True:
|
||||
if aborted is not None:
|
||||
entry = aborted
|
||||
aborted = None
|
||||
self._logger.debug("Got an aborted analysis job for entry {entry}, processing this instead of first item in queue".format(**locals()))
|
||||
else:
|
||||
(priority, entry) = self._queue.get()
|
||||
self._logger.debug("Processing entry {entry} from queue (priority {priority})".format(**locals()))
|
||||
|
||||
(priority, entry, high_priority) = self._queue.get()
|
||||
self._logger.debug("Processing entry {} from queue (priority {})".format(entry, priority))
|
||||
self._active.wait()
|
||||
|
||||
try:
|
||||
self._analyze(entry, high_priority=(priority == self.__class__.HIGH_PRIO))
|
||||
self._analyze(entry, high_priority=high_priority)
|
||||
self._queue.task_done()
|
||||
except gcodeInterpreter.AnalysisAborted:
|
||||
aborted = entry
|
||||
self._logger.debug("Running analysis of entry {entry} aborted".format(**locals()))
|
||||
self._done.set()
|
||||
except AnalysisAborted as ex:
|
||||
if ex.reenqueue:
|
||||
self._queue.put((self.__class__.HIGH_PRIO_ABORTED if high_priority else self.__class__.LOW_PRIO_ABORTED,
|
||||
entry,
|
||||
high_priority))
|
||||
self._logger.debug("Running analysis of entry {} aborted".format(entry))
|
||||
self._queue.task_done()
|
||||
self._done.set()
|
||||
else:
|
||||
time.sleep(1.0)
|
||||
|
||||
|
|
@ -202,10 +241,12 @@ class AbstractAnalysisQueue(object):
|
|||
return
|
||||
|
||||
self._current = entry
|
||||
self._current_highprio = high_priority
|
||||
self._current_progress = 0
|
||||
|
||||
try:
|
||||
self._logger.info("Starting analysis of {entry}".format(**locals()))
|
||||
start_time = time.time()
|
||||
self._logger.info("Starting analysis of {}".format(entry))
|
||||
eventManager().fire(Events.METADATA_ANALYSIS_STARTED, {"name": entry.name,
|
||||
"path": entry.path,
|
||||
"origin": entry.location,
|
||||
|
|
@ -217,7 +258,7 @@ class AbstractAnalysisQueue(object):
|
|||
result = self._do_analysis(high_priority=high_priority)
|
||||
except TypeError:
|
||||
result = self._do_analysis()
|
||||
self._logger.debug("Analysis of entry {entry} finished, notifying callback".format(**locals()))
|
||||
self._logger.info("Analysis of entry {} finished, needed {:.2f}s".format(entry, time.time() - start_time))
|
||||
self._finished_callback(self._current, result)
|
||||
finally:
|
||||
self._current = None
|
||||
|
|
@ -237,7 +278,7 @@ class AbstractAnalysisQueue(object):
|
|||
"""
|
||||
return None
|
||||
|
||||
def _do_abort(self):
|
||||
def _do_abort(self, reenqueue=True):
|
||||
"""
|
||||
Aborts analysis of the current entry. Needs to be overridden by sub classes.
|
||||
"""
|
||||
|
|
@ -266,11 +307,11 @@ class GcodeAnalysisQueue(AbstractAnalysisQueue):
|
|||
|
||||
def _do_analysis(self, high_priority=False):
|
||||
try:
|
||||
def throttle():
|
||||
time.sleep(0.01)
|
||||
|
||||
throttle_callback = throttle
|
||||
if high_priority:
|
||||
throttle = settings().getFloat(["gcodeAnalysis", "throttle_highprio"]) if high_priority else settings().getFloat(["gcodeAnalysis", "throttle_normalprio"])
|
||||
if throttle > 0:
|
||||
def throttle_callback():
|
||||
time.sleep(throttle)
|
||||
else:
|
||||
throttle_callback = None
|
||||
|
||||
self._gcode = gcodeInterpreter.gcode()
|
||||
|
|
@ -289,9 +330,11 @@ class GcodeAnalysisQueue(AbstractAnalysisQueue):
|
|||
"volume": self._gcode.extrusionVolume[i]
|
||||
}
|
||||
return result
|
||||
except gcodeInterpreter.AnalysisAborted as ex:
|
||||
raise AnalysisAborted(reenqueue=ex.reenqueue)
|
||||
finally:
|
||||
self._gcode = None
|
||||
|
||||
def _do_abort(self):
|
||||
def _do_abort(self, reenqueue=True):
|
||||
if self._gcode:
|
||||
self._gcode.abort()
|
||||
self._gcode.abort(reenqueue=reenqueue)
|
||||
|
|
|
|||
|
|
@ -473,10 +473,10 @@ class LocalFileStorage(StorageInterface):
|
|||
if not metadata:
|
||||
metadata = dict()
|
||||
for entry in scandir(path):
|
||||
if is_hidden_path(entry.name) or not octoprint.filemanager.valid_file_type(entry.name):
|
||||
if is_hidden_path(entry.name):
|
||||
continue
|
||||
|
||||
if entry.is_file():
|
||||
if entry.is_file() and octoprint.filemanager.valid_file_type(entry.name):
|
||||
if not entry.name in metadata or not isinstance(metadata[entry.name], dict) or not "analysis" in metadata[entry.name]:
|
||||
printer_profile_rels = self.get_link(entry.path, "printerprofile")
|
||||
if printer_profile_rels:
|
||||
|
|
@ -511,7 +511,7 @@ class LocalFileStorage(StorageInterface):
|
|||
filepath = self.sanitize_path(filepath)
|
||||
path = self.sanitize_path(path)
|
||||
|
||||
return filepath == path or filepath.startswith(path + "/")
|
||||
return filepath == path or filepath.startswith(path + os.sep)
|
||||
|
||||
def file_exists(self, path):
|
||||
path, name = self.sanitize(path)
|
||||
|
|
|
|||
|
|
@ -63,12 +63,14 @@ defaults = dict(
|
|||
solid_top=True,
|
||||
solid_bottom=True,
|
||||
fill_overlap=15,
|
||||
perimeter_before_infill=False,
|
||||
|
||||
# speeds
|
||||
print_speed=50.0,
|
||||
travel_speed=150.0,
|
||||
bottom_layer_speed=20.0,
|
||||
infill_speed=0.0,
|
||||
solidarea_speed=0.0,
|
||||
outer_shell_speed=0.0,
|
||||
inner_shell_speed=0.0,
|
||||
|
||||
|
|
@ -117,8 +119,11 @@ defaults = dict(
|
|||
raft_base_linewidth=1.0,
|
||||
raft_interface_thickness=0.27,
|
||||
raft_interface_linewidth=0.4,
|
||||
raft_airgap_all=0.0,
|
||||
raft_airgap=0.22,
|
||||
raft_surface_layers=2,
|
||||
raft_surface_thickness=0.27,
|
||||
raft_surface_linewidth=0.4,
|
||||
|
||||
# repairing
|
||||
fix_horrible_union_all_type_a=True,
|
||||
|
|
@ -754,9 +759,13 @@ class Profile(object):
|
|||
|
||||
prefix = ""
|
||||
|
||||
gcode_parameter_key = "S"
|
||||
if self.get("gcode_flavor") == GcodeFlavors.MACH3:
|
||||
gcode_parameter_key = "P"
|
||||
|
||||
e_steps = self.get_float("steps_per_e")
|
||||
if e_steps > 0:
|
||||
prefix += "M92 E{e_steps}\n" % (e_steps)
|
||||
prefix += "M92 E{e_steps}\n".format(e_steps=e_steps)
|
||||
temp = self.get_float("print_temperature")
|
||||
|
||||
bed_temp = 0
|
||||
|
|
@ -765,30 +774,30 @@ class Profile(object):
|
|||
include_bed_temp = bed_temp > 0 and not "{print_bed_temperature}" in Profile.regex_strip_comments.sub("", contents)
|
||||
|
||||
if include_bed_temp:
|
||||
prefix += "M140 S{bed_temp}\n".format(bed_temp=bed_temp)
|
||||
prefix += "M140 {param}{bed_temp}\n".format(param=gcode_parameter_key, bed_temp=bed_temp)
|
||||
|
||||
if temp > 0 and not "{print_temperature}" in Profile.regex_strip_comments.sub("", contents):
|
||||
if extruder_count > 0:
|
||||
def temp_line(temp, extruder, template):
|
||||
def temp_line(temp, extruder, param, template):
|
||||
t = temp
|
||||
if extruder > 0:
|
||||
print_temp = self.get_float("print_temperature%d" % (extruder + 1))
|
||||
if print_temp > 0:
|
||||
t = print_temp
|
||||
return template.format(extruder=extruder, temp=t)
|
||||
return template.format(extruder=extruder, temp=t, param=param)
|
||||
|
||||
prefix_preheat = ""
|
||||
prefix_waitheat = ""
|
||||
for n in range(0, extruder_count):
|
||||
if n > 0:
|
||||
prefix_preheat += temp_line(temp, n, "M104 T{extruder} S{temp}\n")
|
||||
prefix_waitheat += temp_line(temp, n, "M109 T{extruder} S{temp}\n")
|
||||
prefix_preheat += temp_line(temp, n, gcode_parameter_key, "M104 T{extruder} {param}{temp}\n")
|
||||
prefix_waitheat += temp_line(temp, n, gcode_parameter_key, "M109 T{extruder} {param}{temp}\n")
|
||||
prefix += prefix_preheat + prefix_waitheat + "T0\n"
|
||||
else:
|
||||
prefix += "M109 S{temp}\n".format(temp=temp)
|
||||
prefix += "M109 {param}{temp}\n".format(param=gcode_parameter_key, temp=temp)
|
||||
|
||||
if include_bed_temp:
|
||||
prefix += "M190 S{bed_temp}\n".format(bed_temp=bed_temp)
|
||||
prefix += "M190 {param}{bed_temp}\n".format(param=gcode_parameter_key, bed_temp=bed_temp)
|
||||
|
||||
return prefix
|
||||
|
||||
|
|
@ -822,7 +831,7 @@ class Profile(object):
|
|||
if layer_height == 0.0:
|
||||
return 1
|
||||
import math
|
||||
return int(math.ceil(solid_thickness / (layer_height - 0.0001)))
|
||||
return int(math.ceil((solid_thickness - 0.0001) / layer_height))
|
||||
|
||||
def calculate_minimal_extruder_count(self):
|
||||
extruder_count = self.get("extruder_amount")
|
||||
|
|
@ -871,12 +880,14 @@ class Profile(object):
|
|||
"downSkinCount": solid_layer_count if self.get_boolean("solid_bottom") else 0,
|
||||
"upSkinCount": solid_layer_count if self.get_boolean("solid_top") else 0,
|
||||
"infillOverlap": self.get_int("fill_overlap"),
|
||||
"perimeterBeforeInfill": 1 if self.get_boolean("perimeter_before_infill") else 0,
|
||||
"initialSpeedupLayers": int(4),
|
||||
"initialLayerSpeed": self.get_int("bottom_layer_speed"),
|
||||
"printSpeed": self.get_int("print_speed"),
|
||||
"infillSpeed": self.get_int("infill_speed") if self.get_int("infill_speed") > 0 else self.get_int("print_speed"),
|
||||
"inset0Speed": self.get_int("outer_shell_speed") if self.get_int("outer_shell_speed") > 0 else self.get_int("print_speed"),
|
||||
"insetXSpeed": self.get_int("inner_shell_speed") if self.get_int("inner_shell_speed") > 0 else self.get_int("print_speed"),
|
||||
"skinSpeed": self.get_int("solidarea_speed") if self.get_int("solidarea_speed") > 0 > 0 else self.get_int("print_speed"),
|
||||
"moveSpeed": self.get_int("travel_speed"),
|
||||
"fanSpeedMin": self.get_int("fan_speed") if self.get_boolean("fan_enabled") else 0,
|
||||
"fanSpeedMax": self.get_int("fan_speed_max") if self.get_boolean("fan_enabled") else 0,
|
||||
|
|
@ -892,13 +903,14 @@ class Profile(object):
|
|||
"retractionAmountExtruderSwitch": self.get_microns("retraction_dual_amount"),
|
||||
"retractionZHop": self.get_microns("retraction_hop"),
|
||||
"minimalExtrusionBeforeRetraction": self.get_microns("retraction_minimal_extrusion"),
|
||||
"enableCombing": 1 if self.get("retraction_combing") == RetractionCombingTypes.ALL else (2 if self.get("retraction_combing") == RetractionCombingTypes.NO_SKIN else 0),
|
||||
"multiVolumeOverlap": self.get_microns("overlap_dual"),
|
||||
"objectSink": max(0, self.get_microns("object_sink")),
|
||||
"minimalLayerTime": self.get_int("cool_min_layer_time"),
|
||||
"minimalFeedrate": self.get_int("cool_min_feedrate"),
|
||||
"coolHeadLift": 1 if self.get_boolean("cool_head_lift") else 0,
|
||||
|
||||
"enableCombing": 1 if self.get("retraction_combing") == RetractionCombingTypes.ALL else (2 if self.get("retraction_combing") == RetractionCombingTypes.NO_SKIN else 0),
|
||||
|
||||
# model positioning
|
||||
"posx": self.get_pos_x() * 1000, # in microns
|
||||
"posy": self.get_pos_y() * 1000, # in microns
|
||||
|
|
@ -952,12 +964,13 @@ class Profile(object):
|
|||
settings["raftInterfaceThickness"] = self.get_microns("raft_interface_thickness")
|
||||
settings["raftInterfaceLinewidth"] = self.get_microns("raft_interface_linewidth")
|
||||
settings["raftInterfaceLineSpacing"] = self.get_microns("raft_interface_linewidth") * 2
|
||||
settings["raftAirGapLayer0"] = self.get_microns("raft_airgap")
|
||||
settings["raftAirGapLayer0"] = self.get_microns("raft_airgap") + self.get_microns("raft_airgap_all")
|
||||
settings["raftAirGap"] = self.get_microns("raft_airgap_all")
|
||||
settings["raftBaseSpeed"] = self.get_int("bottom_layer_speed")
|
||||
settings["raftFanSpeed"] = 100
|
||||
settings["raftSurfaceThickness"] = settings["raftInterfaceThickness"]
|
||||
settings["raftSurfaceLinewidth"] = int(edge_width * 1000)
|
||||
settings["raftSurfaceLineSpacing"] = int(edge_width * 1000 * 0.9)
|
||||
settings["raftFanSpeed"] = 0
|
||||
settings["raftSurfaceThickness"] = self.get_microns("raft_surface_thickness")
|
||||
settings["raftSurfaceLinewidth"] = self.get_microns("raft_surface_linewidth")
|
||||
settings["raftSurfaceLineSpacing"] = self.get_microns("raft_surface_linewidth")
|
||||
settings["raftSurfaceLayers"] = self.get_int("raft_surface_layers")
|
||||
settings["raftSurfaceSpeed"] = self.get_int("bottom_layer_speed")
|
||||
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback):
|
|||
#~~ progress plugin reporting
|
||||
|
||||
def _reportPrintProgressToPlugins(self, progress):
|
||||
if not progress or not self._selectedFile or not "sd" in self._selectedFile or not "filename" in self._selectedFile:
|
||||
if progress is None or not self._selectedFile or not "sd" in self._selectedFile or not "filename" in self._selectedFile:
|
||||
return
|
||||
|
||||
storage = "sdcard" if self._selectedFile["sd"] else "local"
|
||||
|
|
|
|||
|
|
@ -248,8 +248,8 @@ def _verifyFolderExists(origin, foldername):
|
|||
|
||||
|
||||
def _isBusy(target, path):
|
||||
currentOrigin, currentFilename = _getCurrentFile()
|
||||
if currentFilename is not None and currentOrigin == target and fileManager.file_in_path(FileDestinations.LOCAL, path, currentFilename) and (printer.is_printing() or printer.is_paused()):
|
||||
currentOrigin, currentPath = _getCurrentFile()
|
||||
if currentPath is not None and currentOrigin == target and fileManager.file_in_path(FileDestinations.LOCAL, path, currentPath) and (printer.is_printing() or printer.is_paused()):
|
||||
return True
|
||||
|
||||
return any(target == x[0] and fileManager.file_in_path(FileDestinations.LOCAL, path, x[1]) for x in fileManager.get_busy_files())
|
||||
|
|
@ -705,8 +705,8 @@ def deleteGcodeFile(filename, target):
|
|||
return make_response("Trying to delete a file that is currently in use: %s" % filename, 409)
|
||||
|
||||
# deselect the file if it's currently selected
|
||||
currentOrigin, currentFilename = _getCurrentFile()
|
||||
if currentFilename is not None and currentOrigin == target and filename == currentFilename:
|
||||
currentOrigin, currentPath = _getCurrentFile()
|
||||
if currentPath is not None and currentOrigin == target and filename == currentPath:
|
||||
printer.unselect_file()
|
||||
|
||||
# delete it
|
||||
|
|
@ -723,8 +723,8 @@ def deleteGcodeFile(filename, target):
|
|||
return make_response("Trying to delete a folder that contains a file that is currently in use: %s" % filename, 409)
|
||||
|
||||
# deselect the file if it's currently selected
|
||||
currentOrigin, currentFilename = _getCurrentFile()
|
||||
if currentFilename is not None and currentOrigin == target and fileManager.file_in_path(target, filename, currentFilename):
|
||||
currentOrigin, currentPath = _getCurrentFile()
|
||||
if currentPath is not None and currentOrigin == target and fileManager.file_in_path(target, filename, currentPath):
|
||||
printer.unselect_file()
|
||||
|
||||
# delete it
|
||||
|
|
@ -734,8 +734,8 @@ def deleteGcodeFile(filename, target):
|
|||
|
||||
def _getCurrentFile():
|
||||
currentJob = printer.get_current_job()
|
||||
if currentJob is not None and "file" in currentJob.keys() and "name" in currentJob["file"] and "origin" in currentJob["file"]:
|
||||
return currentJob["file"]["origin"], currentJob["file"]["name"]
|
||||
if currentJob is not None and "file" in currentJob.keys() and "path" in currentJob["file"] and "origin" in currentJob["file"]:
|
||||
return currentJob["file"]["origin"], currentJob["file"]["path"]
|
||||
else:
|
||||
return None, None
|
||||
|
||||
|
|
|
|||
|
|
@ -154,12 +154,12 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection, octoprint.printer.
|
|||
messages = self._messageBacklog
|
||||
self._messageBacklog = []
|
||||
|
||||
busy_files = [dict(origin=v[0], name=v[1]) for v in self._fileManager.get_busy_files()]
|
||||
busy_files = [dict(origin=v[0], path=v[1]) for v in self._fileManager.get_busy_files()]
|
||||
if "job" in data and data["job"] is not None \
|
||||
and "file" in data["job"] and "name" in data["job"]["file"] and "origin" in data["job"]["file"] \
|
||||
and data["job"]["file"]["name"] is not None and data["job"]["file"]["origin"] is not None \
|
||||
and "file" in data["job"] and "path" in data["job"]["file"] and "origin" in data["job"]["file"] \
|
||||
and data["job"]["file"]["path"] is not None and data["job"]["file"]["origin"] is not None \
|
||||
and (self._printer.is_printing() or self._printer.is_paused()):
|
||||
busy_files.append(dict(origin=data["job"]["file"]["origin"], name=data["job"]["file"]["name"]))
|
||||
busy_files.append(dict(origin=data["job"]["file"]["origin"], path=data["job"]["file"]["path"]))
|
||||
|
||||
data.update({
|
||||
"serverTime": time.time(),
|
||||
|
|
|
|||
|
|
@ -178,7 +178,9 @@ default_settings = {
|
|||
"sizeThreshold": 20 * 1024 * 1024, # 20MB
|
||||
},
|
||||
"gcodeAnalysis": {
|
||||
"maxExtruders": 10
|
||||
"maxExtruders": 10,
|
||||
"throttle_normalprio": 0.01,
|
||||
"throttle_highprio": 0.0
|
||||
},
|
||||
"feature": {
|
||||
"temperatureGraph": True,
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -106,12 +106,6 @@ $(function() {
|
|||
self.login();
|
||||
};
|
||||
|
||||
self.onKeyUp = function(data, event) {
|
||||
if (event && event.keyCode == 13) {
|
||||
$('#loginForm').submit();
|
||||
}
|
||||
}
|
||||
|
||||
self.onAllBound = function(allViewModels) {
|
||||
self.allViewModels = allViewModels;
|
||||
};
|
||||
|
|
@ -125,6 +119,28 @@ $(function() {
|
|||
self.elementUsernameInput = $("#login_user");
|
||||
self.elementPasswordInput = $("#login_pass");
|
||||
self.elementLoginButton = $("#login_button");
|
||||
|
||||
var toggle = $("li.dropdown#navbar_login");
|
||||
var button = $("a", toggle);
|
||||
|
||||
button.on("click", function(e) {
|
||||
$(this).parent().toggleClass("open");
|
||||
});
|
||||
|
||||
$("body").on("click", function(e) {
|
||||
var anyFormLinkOrButton = $("#login_dropdown_loggedout a, #login_dropdown_loggedin a, #login_dropdown_loggedout button, #login_dropdown_loggedin button");
|
||||
var dropdown = $("li.dropdown#navbar_login");
|
||||
var anyLastpassButton = $("#__lpform_login_user, #__lpform_login_pass");
|
||||
|
||||
var isLinkOrButton = anyFormLinkOrButton.is(e.target) || anyFormLinkOrButton.has(e.target).length !== 0;
|
||||
var isDropdown = dropdown.is(e.target) || dropdown.has(e.target).length === 0;
|
||||
var isLastpass = anyLastpassButton.is(e.target) || anyLastpassButton.has(e.target).length === 0;
|
||||
|
||||
if (isLinkOrButton || !(isDropdown || isLastpass)) {
|
||||
toggle.removeClass("open");
|
||||
}
|
||||
});
|
||||
|
||||
if (self.elementUsernameInput && self.elementUsernameInput.length
|
||||
&& self.elementLoginButton && self.elementLoginButton.length) {
|
||||
self.elementLoginButton.blur(function() {
|
||||
|
|
|
|||
|
|
@ -256,8 +256,8 @@ $(function() {
|
|||
self._processBusyFiles = function(data) {
|
||||
var busyFiles = [];
|
||||
_.each(data, function(entry) {
|
||||
if (entry.hasOwnProperty("name") && entry.hasOwnProperty("origin")) {
|
||||
busyFiles.push(entry.origin + ":" + entry.name);
|
||||
if (entry.hasOwnProperty("path") && entry.hasOwnProperty("origin")) {
|
||||
busyFiles.push(entry.origin + ":" + entry.path);
|
||||
}
|
||||
});
|
||||
self.busyFiles(busyFiles);
|
||||
|
|
|
|||
|
|
@ -1139,3 +1139,29 @@ input[type=number] {
|
|||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
// Navbar loginForm
|
||||
// Make the overlay always visible so that extensions are able to auto-submit (i.e. password-managers)
|
||||
#navbar_login:not(.open) #login_dropdown_loggedout {
|
||||
display: block;
|
||||
z-index: -1;
|
||||
height: 0;
|
||||
width: 0;
|
||||
padding: 0 !important;
|
||||
overflow: hidden;
|
||||
border: 0;
|
||||
box-shadow: none;
|
||||
left: -9999px;
|
||||
|
||||
&.hide {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#loginForm {
|
||||
margin: 0;
|
||||
|
||||
button {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
<a href="#" class="dropdown-toggle">
|
||||
<i class="icon-user"></i> <span data-bind="text: loginState.userMenuText">{{ _('Login') }}</span>
|
||||
<b class="caret"></b>
|
||||
</a>
|
||||
<div id="login_dropdown_loggedout" style="padding: 15px" class="dropdown-menu" data-bind="css: {hide: loginState.loggedIn(), 'dropdown-menu': !loginState.loggedIn()}">
|
||||
<form id="loginForm" data-bind="event: {'submit': loginState.prepareLogin }" autocomplete="on">
|
||||
<form id="loginForm" data-bind="event: {'submit': loginState.prepareLogin }">
|
||||
<label for="login_user">{{ _('Username') }}</label>
|
||||
<input type="text" id="login_user" name="username" data-bind="valueWithInit: loginState.loginUser, event: {'keyup': loginState.onKeyUp }" placeholder="{{ _('Username') }}" autocapitalize="none" autocomplete="on">
|
||||
<input type="text" id="login_user" name="username" data-bind="valueWithInit: loginState.loginUser" placeholder="{{ _('Username') }}" autocapitalize="none">
|
||||
<label for="login_pass">{{ _('Password') }}</label>
|
||||
<input type="password" id="login_pass" name="password" data-bind="valueWithInit: loginState.loginPass, event: {'keyup': loginState.onKeyUp }" placeholder="{{ _('Password') }}" autocomplete="on">
|
||||
<input type="password" id="login_pass" name="password" data-bind="valueWithInit: loginState.loginPass" placeholder="{{ _('Password') }}">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" id="login_remember" data-bind="checked: loginState.loginRemember"> {{ _('Remember me') }}
|
||||
</label>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,14 +1,14 @@
|
|||
# German translations for OctoPrint.
|
||||
# Copyright (C) 2016 The OctoPrint Project
|
||||
# Copyright (C) 2017 The OctoPrint Project
|
||||
# This file is distributed under the same license as the OctoPrint project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OctoPrint\n"
|
||||
"Report-Msgid-Bugs-To: i18n@octoprint.org\n"
|
||||
"POT-Creation-Date: 2016-12-02 12:37+0100\n"
|
||||
"PO-Revision-Date: 2016-12-02 12:38+0100\n"
|
||||
"POT-Creation-Date: 2017-01-12 14:29+0100\n"
|
||||
"PO-Revision-Date: 2017-01-12 14:30+0100\n"
|
||||
"Last-Translator: Gina Häußge <osd@foosel.net>\n"
|
||||
"Language: de\n"
|
||||
"Language-Team: German (http://www.transifex.com/projects/p/octoprint/language/de/)\n"
|
||||
|
|
@ -159,16 +159,16 @@ msgstr ""
|
|||
|
||||
#: src/octoprint/plugins/corewizard/templates/corewizard_acl_wizard.jinja2:19
|
||||
#: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:45
|
||||
#: src/octoprint/templates/navbar/login.jinja2:6
|
||||
#: src/octoprint/templates/navbar/login.jinja2:7
|
||||
#: src/octoprint/templates/navbar/login.jinja2:8
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
||||
|
||||
#: src/octoprint/plugins/corewizard/templates/corewizard_acl_wizard.jinja2:25
|
||||
#: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:51
|
||||
#: src/octoprint/templates/dialogs/usersettings/access.jinja2:3
|
||||
#: src/octoprint/templates/navbar/login.jinja2:8
|
||||
#: src/octoprint/templates/navbar/login.jinja2:9
|
||||
#: src/octoprint/templates/navbar/login.jinja2:10
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
|
|
@ -326,22 +326,22 @@ msgid ""
|
|||
msgstr "<p>Um Snapshots zu Zeitrafferaufnahmen zu rendern muss OctoPrint auch den korrekten <strong>Pfad zu FFMPEG</strong> wissen.</p>"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:176
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:296
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:297
|
||||
msgid "The path doesn't exist"
|
||||
msgstr "Der Pfad existiert nicht"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:178
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:298
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:299
|
||||
msgid "The path is not a file"
|
||||
msgstr "Der Pfad ist keine Datei"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:180
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:300
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:301
|
||||
msgid "The path is not an executable"
|
||||
msgstr "Der Pfad ist nicht ausführbar"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:183
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:303
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:304
|
||||
msgid "The path is valid"
|
||||
msgstr "Der Pfad ist valide"
|
||||
|
||||
|
|
@ -1400,8 +1400,8 @@ msgid "The server is currently running in safe mode. Third party plugins are dis
|
|||
msgstr "Der Server ist aktuell im Sicherheitsmodus. Third-Party-Plugins sind deaktiviert und können nicht aktiviert werden."
|
||||
|
||||
#: src/octoprint/static/js/app/dataupdater.js:170
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:848
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:855
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:849
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:856
|
||||
#, python-format
|
||||
msgid "Slicing ... (%(percentage)d%%)"
|
||||
msgstr "Slice ... (%(percentage)d%%)"
|
||||
|
|
@ -1569,7 +1569,7 @@ msgstr "Trennen"
|
|||
#: src/octoprint/static/js/app/viewmodels/control.js:62
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:589
|
||||
#: src/octoprint/static/js/app/viewmodels/gcode.js:482
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:231
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:232
|
||||
#: src/octoprint/static/js/app/viewmodels/temperature.js:62
|
||||
msgid "Tool"
|
||||
msgstr "Werkzeug"
|
||||
|
|
@ -1650,51 +1650,51 @@ msgstr "Druckvolumen: (%(profile.minX).2f, %(profile.minY).2f, %(profile.minZ).2
|
|||
msgid "Object doesn't fit print volume"
|
||||
msgstr "Objekt passt nicht in Druckvolumen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:850
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:851
|
||||
msgid "Slicing ..."
|
||||
msgstr "Slice ..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:876
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:877
|
||||
msgid "Slicing done"
|
||||
msgstr "Slicing abgeschlossen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:877
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:878
|
||||
#, python-format
|
||||
msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds"
|
||||
msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:892
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:893
|
||||
#, python-format
|
||||
msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s"
|
||||
msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:893
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:894
|
||||
msgid "Slicing failed"
|
||||
msgstr "Slicing fehlgeschlagen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:910
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:911
|
||||
msgid "Streaming ..."
|
||||
msgstr "Streaming ..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:922
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:923
|
||||
msgid "Streaming done"
|
||||
msgstr "Streaming abgeschlossen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:923
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:924
|
||||
#, python-format
|
||||
msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"
|
||||
msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1019
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1020
|
||||
#, python-format
|
||||
msgid "Could not upload the file. Make sure that it is a valid file with one of these extensions: %(extensions)s"
|
||||
msgstr "Konnte die Datei nicht hochladen. Bitte stelle sicher, dass es sich um eine valide Datei mit einer dieser Erweiterungen ist: %(extensions)s"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1040
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1041
|
||||
msgid "Saving ..."
|
||||
msgstr "Speichere ..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1040
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1041
|
||||
msgid "Uploading ..."
|
||||
msgstr "Uploade ..."
|
||||
|
||||
|
|
@ -1749,7 +1749,7 @@ msgstr "GCODE Befehle"
|
|||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:26
|
||||
#: src/octoprint/templates/navbar/login.jinja2:2
|
||||
#: src/octoprint/templates/navbar/login.jinja2:13
|
||||
#: src/octoprint/templates/navbar/login.jinja2:14
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
|
|
@ -1762,19 +1762,19 @@ msgstr "Login erfolgreich"
|
|||
msgid "You are now logged in as \"%(username)s\""
|
||||
msgstr "Du bist jetzt eingeloggt als \"%(username)s\""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:81
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:85
|
||||
msgid "Login failed"
|
||||
msgstr "Login fehlgeschlagen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:81
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:85
|
||||
msgid "User unknown or wrong password"
|
||||
msgstr "Nutzer unbekannt oder falsches Passwort"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:88
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:92
|
||||
msgid "Logout successful"
|
||||
msgstr "Logout erfolgreich"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:88
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:92
|
||||
msgid "You are now logged out"
|
||||
msgstr "Du bist jetzt ausgeloggt"
|
||||
|
||||
|
|
@ -1867,83 +1867,91 @@ msgstr "Druckerprofil hinzufügen"
|
|||
msgid "Edit Printer Profile \"%(name)s\""
|
||||
msgstr "Druckerprofile \"%(name)s\" bearbeiten"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:46
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:47
|
||||
msgid "Restarts the print job from the beginning"
|
||||
msgstr "Started den Druckjob von vorne"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:47
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:48
|
||||
msgid "Starts the print job"
|
||||
msgstr "Startet den Druckjob"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:48
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:49
|
||||
msgid "Resumes the print job"
|
||||
msgstr "Setzt den Druckjob fort"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:49
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:50
|
||||
msgid "Pauses the print job"
|
||||
msgstr "Pausiert den Druckjob"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:82
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:83
|
||||
msgid "Still stabilizing..."
|
||||
msgstr "Noch zu ungenau..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:92
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:93
|
||||
msgid "Based on a linear approximation (very low accuracy, especially at the beginning of the print)"
|
||||
msgstr "Basiert auf einer linearen Approximation (sehr geringe Genauigkeit, insbesondere zu Beginn eines Drucks)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:95
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:96
|
||||
msgid "Based on the estimate from analysis of file (medium accuracy)"
|
||||
msgstr "Basiert auf der Schätzung der Analyse der Datei (mittlere Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:98
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:99
|
||||
msgid "Based on a mix of estimate from analysis and calculation (medium accuracy)"
|
||||
msgstr "Basiert auf einem Mix der Schätzung aus der Analyse und der Berechnung (mittlere Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:101
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:102
|
||||
msgid "Based on the average total of past prints of this model with the same printer profile (usually good accuracy)"
|
||||
msgstr "Basiert auf der durchschnittlichen Dauer vergangener Druckjobs dieses Modells mit dem selben Druckerprofil (normalerweise gute Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:104
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:105
|
||||
msgid "Based on a mix of average total from past prints and calculation (usually good accuracy)"
|
||||
msgstr "Basiert auf einem Mix der durschnittlichen Dauer vergangener Druckjobs und der Berechnung (normalerweise gute Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:107
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:108
|
||||
msgid "Based on the calculated estimate (best accuracy)"
|
||||
msgstr "Basiert auf der berechneten Schätzung (beste Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:145
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:146
|
||||
msgid "Continue"
|
||||
msgstr "Fortsetzen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:147
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:148
|
||||
#: src/octoprint/templates/sidebar/state.jinja2:24
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:158
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:159
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:11
|
||||
msgid "On Z Change"
|
||||
msgstr "Bei Ebenenwechsel"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:160
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:161
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:10
|
||||
msgid "Timed"
|
||||
msgstr "Nach Zeit"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:160
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:161
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:25
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:39
|
||||
msgid "sec"
|
||||
msgstr "Sek"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:268
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:269
|
||||
msgid "This will restart the print job from the beginning."
|
||||
msgstr "Der Druckjob wird zurückgesetzt und von vorne begonnen."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:292
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:296
|
||||
msgid "This will cancel your print."
|
||||
msgstr "Das wird deinen Druck abbrechen."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:297
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:298
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:64
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:82
|
||||
msgid "violet"
|
||||
|
|
@ -1958,27 +1966,27 @@ msgstr "weiß"
|
|||
msgid "Autodetect from browser"
|
||||
msgstr "Automatisch vom Browser erkennen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:230
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:231
|
||||
msgid "If you see your webcam stream below, the entered stream URL is ok."
|
||||
msgstr "Falls du unten den Webcamstream sehen kannst, ist die Stream-URL ok."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:236
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:237
|
||||
msgid "Stream test"
|
||||
msgstr "Stream Test"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:249
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:250
|
||||
msgid "Could not retrieve snapshot URL, please double check the URL"
|
||||
msgstr "Konnte die Snapshot-URL nicht abgreifen, bitte prüfen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:250
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:251
|
||||
msgid "Snapshot test failed"
|
||||
msgstr "Snapshot Test fehlgeschlagen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:272
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:273
|
||||
msgid "If you see your webcam snapshot picture below, the entered snapshot URL is ok."
|
||||
msgstr "Falls du unten dein Snapshotbild sehen kannst, ist die Snapshot-URL ok."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:274
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:275
|
||||
msgid "Snapshot test"
|
||||
msgstr "Snapshot Test"
|
||||
|
||||
|
|
@ -2421,22 +2429,26 @@ msgid "Beta"
|
|||
msgstr "Beta"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:19
|
||||
msgid "Confirm before cancelling a print"
|
||||
msgstr "Vor Abbruch eines Druckjobs bestätigen"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:26
|
||||
msgid "Enable SD support"
|
||||
msgstr "SD-Unterstützung aktivieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:26
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:33
|
||||
msgid "Enable Keyboard Control"
|
||||
msgstr "Tastatursteuerung aktivieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:33
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:40
|
||||
msgid "Wait for <code>start</code> on connect"
|
||||
msgstr "Bei der Verbindung auf <code>start</code> warten"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:41
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:47
|
||||
msgid "Enable automatic firmware detection"
|
||||
msgstr "Automatische Firmwareerkennung einschalten"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:42
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:48
|
||||
msgid ""
|
||||
"\n"
|
||||
" If enabled, OctoPrint will try to figure out your printer's firmware automatically and adjust a couple of communication parameters based on that.\n"
|
||||
|
|
@ -2444,52 +2456,52 @@ msgid ""
|
|||
" "
|
||||
msgstr "Falls diese Option eingeschaltet ist, versucht OctoPrint die Firmware des Druckers automatisch zu erkennen und darauf basierend diverse Kommunikationsparameter zu konfigurieren.Falls das für dich nicht korrekt funktioniert oder du mehr Kontrolle haben möchtest, schalte diese Option aus und die entsprechenden Parameter werden zur manuellen Konfigurationeingeblendet."
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:53
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:59
|
||||
msgid "Select SD files by relative path"
|
||||
msgstr "SD Dateien per relativem Pfad addressieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:53
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:59
|
||||
msgid "RepRap Firmware"
|
||||
msgstr "RepRap Firmware"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:60
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:66
|
||||
msgid "Always assume SD card is present"
|
||||
msgstr "Immer davon ausgehen, dass eine SD-Karte vorhanden ist"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:60
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:67
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:74
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:81
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:66
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:73
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:80
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:87
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:98
|
||||
msgid "Repetier"
|
||||
msgstr "Repetier"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:67
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:73
|
||||
msgid "Ignore consecutive resend requests for the same line"
|
||||
msgstr "Aufeinanderfolgende Resend Requests für die selbe Zeilennummer ignorieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:74
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:80
|
||||
#, python-format
|
||||
msgid "Support <code>TargetExtr%%n</code>/<code>TargetBed</code> target temperature format"
|
||||
msgstr "<code>TargetExtr%%n</code>/<code>TargetBed</code> Zieltemperaturformat unterstützen"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:81
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:87
|
||||
msgid "Disable detection of external heatups"
|
||||
msgstr "Detektierung externer Aufheizvorgänge deaktivieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:86
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
msgid "Send a checksum with the command"
|
||||
msgstr "Eine Prüfsumme mit dem Befehl senden"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:89
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:95
|
||||
msgid "When printing"
|
||||
msgstr "Beim Drucken"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:98
|
||||
msgid "Always"
|
||||
msgstr "Immer"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:95
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:101
|
||||
msgid "Never"
|
||||
msgstr "Nie"
|
||||
|
||||
|
|
@ -2863,15 +2875,15 @@ msgid ""
|
|||
" get you printing in no time!\n"
|
||||
msgstr "Danke, dass du OctoPrint installiert hast! Dieser Wizard wird dich nun durch die letzten Schritte begleiten, um deine OctoPrint Instanz fertig einzurichten."
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:11
|
||||
#: src/octoprint/templates/navbar/login.jinja2:12
|
||||
msgid "Remember me"
|
||||
msgstr "Login merken"
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:16
|
||||
#: src/octoprint/templates/navbar/login.jinja2:18
|
||||
msgid "User Settings"
|
||||
msgstr "Nutzereinstellungen"
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:17
|
||||
#: src/octoprint/templates/navbar/login.jinja2:19
|
||||
msgid "Logout"
|
||||
msgstr "Logout"
|
||||
|
||||
|
|
@ -3479,7 +3491,7 @@ msgstr ""
|
|||
"<p>\n"
|
||||
" Du hast <strong data-bind=\"text: selectedFile.name\"></strong> zum Drucken ausgewählt das\n"
|
||||
" <strong data-bind=\"text: formatSize(selectedFile.size())\"></strong> groß ist. Abhängig von Deinem\n"
|
||||
" System könnte das zu groß zum Rendern sein und Deinen Browser zum Absturz bringen. might be too large for rendering and cause your browser to become unresponsive or crash.\n"
|
||||
" System könnte das zu groß zum Rendern sein und Deinen Browser zum Absturz bringen.\n"
|
||||
" </p>\n"
|
||||
"\n"
|
||||
" <p>\n"
|
||||
|
|
@ -3655,7 +3667,7 @@ msgstr "Zeitrafferaufnahme rendern"
|
|||
#~ msgstr "Vorhandene Datei überschreiben"
|
||||
|
||||
#~ msgid ""
|
||||
#~ msgstr ""
|
||||
#~ msgstr "Falls dir OctoPrint gefällt, bitte ziehe es in Betracht <a href=\"%(url)s\" target=\"_blank\">seine fortlaufende Entwicklung zu unterstützen</a>. Diese Entwicklung wird vollständig durch User wie Dich finanziert! Du kannst diesen Link auch im \"Über\" Dialog finden. <strong>Danke!</strong>"
|
||||
|
||||
#~ msgid "Bundled"
|
||||
#~ msgstr "Gebundled"
|
||||
|
|
@ -3695,9 +3707,3 @@ msgstr "Zeitrafferaufnahme rendern"
|
|||
|
||||
#~ msgid "Reboot"
|
||||
#~ msgstr "Neustart"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " If you enjoy OctoPrint, please consider <a href=\"%(url)s\" target=\"_blank\">supporting its ongoing\n"
|
||||
#~ " development</a>. It's fully funded by users like you! You can also find this link in the \"About\" dialog. <strong>Thank you!</strong>\n"
|
||||
#~ msgstr "Falls dir OctoPrint gefällt, bitte ziehe es in Betracht <a href=\"%(url)s\" target=\"_blank\">seine fortlaufende Entwicklung zu unterstützen</a>. Diese Entwicklung wird vollständig durch User wie Dich finanziert! Du kannst diesen Link auch im \"Über\" Dialog finden. <strong>Danke!</strong>"
|
||||
|
|
|
|||
|
|
@ -172,7 +172,9 @@ class MinMax3D(object):
|
|||
|
||||
|
||||
class AnalysisAborted(Exception):
|
||||
pass
|
||||
def __init__(self, reenqueue=True, *args, **kwargs):
|
||||
self.reenqueue = reenqueue
|
||||
Exception.__init__(self, *args, **kwargs)
|
||||
|
||||
|
||||
class gcode(object):
|
||||
|
|
@ -185,6 +187,7 @@ class gcode(object):
|
|||
self.filename = None
|
||||
self.progressCallback = None
|
||||
self._abort = False
|
||||
self._reenqueue = True
|
||||
self._filamentDiameter = 0
|
||||
self._minMax = MinMax3D()
|
||||
|
||||
|
|
@ -213,8 +216,9 @@ class gcode(object):
|
|||
with codecs.open(filename, encoding="utf-8", errors="replace") as f:
|
||||
self._load(f, printer_profile, throttle=throttle)
|
||||
|
||||
def abort(self):
|
||||
def abort(self, reenqueue=True):
|
||||
self._abort = True
|
||||
self._reenqueue = reenqueue
|
||||
|
||||
def _load(self, gcodeFile, printer_profile, throttle=None):
|
||||
filePos = 0
|
||||
|
|
@ -240,7 +244,7 @@ class gcode(object):
|
|||
|
||||
for line in gcodeFile:
|
||||
if self._abort:
|
||||
raise AnalysisAborted()
|
||||
raise AnalysisAborted(reenqueue=self._reenqueue)
|
||||
filePos += 1
|
||||
readBytes += len(line)
|
||||
|
||||
|
|
|
|||
|
|
@ -171,9 +171,13 @@ class FileManagerTest(unittest.TestCase):
|
|||
self.fire_event.assert_called_once_with(octoprint.filemanager.Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def test_remove_file(self):
|
||||
self.local_storage.path_on_disk.return_value = "prefix/test.file"
|
||||
self.local_storage.split_path.return_value = ("", "test.file")
|
||||
|
||||
self.file_manager.remove_file(octoprint.filemanager.FileDestinations.LOCAL, "test.file")
|
||||
|
||||
self.local_storage.remove_file.assert_called_once_with("test.file")
|
||||
self.analysis_queue.dequeue.assert_called_once()
|
||||
self.fire_event.assert_called_once_with(octoprint.filemanager.Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def test_add_folder(self):
|
||||
|
|
@ -199,11 +203,13 @@ class FileManagerTest(unittest.TestCase):
|
|||
self.file_manager.remove_folder(octoprint.filemanager.FileDestinations.LOCAL, "test_folder")
|
||||
|
||||
self.local_storage.remove_folder.assert_called_once_with("test_folder", recursive=True)
|
||||
self.analysis_queue.dequeue_folder.assert_called_once_with(octoprint.filemanager.FileDestinations.LOCAL, "test_folder")
|
||||
self.fire_event.assert_called_once_with(octoprint.filemanager.Events.UPDATED_FILES, dict(type="printables"))
|
||||
|
||||
def test_remove_folder_nonrecursive(self):
|
||||
self.file_manager.remove_folder(octoprint.filemanager.FileDestinations.LOCAL, "test_folder", recursive=False)
|
||||
self.local_storage.remove_folder.assert_called_once_with("test_folder", recursive=False)
|
||||
self.analysis_queue.dequeue_folder.assert_called_once_with(octoprint.filemanager.FileDestinations.LOCAL, "test_folder")
|
||||
|
||||
@mock.patch("octoprint.util.atomic_write", create=True)
|
||||
@mock.patch("yaml.safe_dump", create=True)
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,14 +1,14 @@
|
|||
# German translations for OctoPrint.
|
||||
# Copyright (C) 2016 The OctoPrint Project
|
||||
# Copyright (C) 2017 The OctoPrint Project
|
||||
# This file is distributed under the same license as the OctoPrint project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OctoPrint\n"
|
||||
"Report-Msgid-Bugs-To: i18n@octoprint.org\n"
|
||||
"POT-Creation-Date: 2016-12-02 12:37+0100\n"
|
||||
"PO-Revision-Date: 2016-12-02 12:38+0100\n"
|
||||
"POT-Creation-Date: 2017-01-12 14:29+0100\n"
|
||||
"PO-Revision-Date: 2017-01-12 14:30+0100\n"
|
||||
"Last-Translator: Gina Häußge <osd@foosel.net>\n"
|
||||
"Language: de\n"
|
||||
"Language-Team: German (http://www.transifex.com/projects/p/octoprint/language/de/)\n"
|
||||
|
|
@ -159,16 +159,16 @@ msgstr ""
|
|||
|
||||
#: src/octoprint/plugins/corewizard/templates/corewizard_acl_wizard.jinja2:19
|
||||
#: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:45
|
||||
#: src/octoprint/templates/navbar/login.jinja2:6
|
||||
#: src/octoprint/templates/navbar/login.jinja2:7
|
||||
#: src/octoprint/templates/navbar/login.jinja2:8
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
||||
|
||||
#: src/octoprint/plugins/corewizard/templates/corewizard_acl_wizard.jinja2:25
|
||||
#: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:51
|
||||
#: src/octoprint/templates/dialogs/usersettings/access.jinja2:3
|
||||
#: src/octoprint/templates/navbar/login.jinja2:8
|
||||
#: src/octoprint/templates/navbar/login.jinja2:9
|
||||
#: src/octoprint/templates/navbar/login.jinja2:10
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
|
|
@ -326,22 +326,22 @@ msgid ""
|
|||
msgstr "<p>Um Snapshots zu Zeitrafferaufnahmen zu rendern muss OctoPrint auch den korrekten <strong>Pfad zu FFMPEG</strong> wissen.</p>"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:176
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:296
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:297
|
||||
msgid "The path doesn't exist"
|
||||
msgstr "Der Pfad existiert nicht"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:178
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:298
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:299
|
||||
msgid "The path is not a file"
|
||||
msgstr "Der Pfad ist keine Datei"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:180
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:300
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:301
|
||||
msgid "The path is not an executable"
|
||||
msgstr "Der Pfad ist nicht ausführbar"
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:183
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:303
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:304
|
||||
msgid "The path is valid"
|
||||
msgstr "Der Pfad ist valide"
|
||||
|
||||
|
|
@ -1400,8 +1400,8 @@ msgid "The server is currently running in safe mode. Third party plugins are dis
|
|||
msgstr "Der Server ist aktuell im Sicherheitsmodus. Third-Party-Plugins sind deaktiviert und können nicht aktiviert werden."
|
||||
|
||||
#: src/octoprint/static/js/app/dataupdater.js:170
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:848
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:855
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:849
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:856
|
||||
#, python-format
|
||||
msgid "Slicing ... (%(percentage)d%%)"
|
||||
msgstr "Slice ... (%(percentage)d%%)"
|
||||
|
|
@ -1569,7 +1569,7 @@ msgstr "Trennen"
|
|||
#: src/octoprint/static/js/app/viewmodels/control.js:62
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:589
|
||||
#: src/octoprint/static/js/app/viewmodels/gcode.js:482
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:231
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:232
|
||||
#: src/octoprint/static/js/app/viewmodels/temperature.js:62
|
||||
msgid "Tool"
|
||||
msgstr "Werkzeug"
|
||||
|
|
@ -1650,51 +1650,51 @@ msgstr "Druckvolumen: (%(profile.minX).2f, %(profile.minY).2f, %(profile.minZ).2
|
|||
msgid "Object doesn't fit print volume"
|
||||
msgstr "Objekt passt nicht in Druckvolumen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:850
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:851
|
||||
msgid "Slicing ..."
|
||||
msgstr "Slice ..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:876
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:877
|
||||
msgid "Slicing done"
|
||||
msgstr "Slicing abgeschlossen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:877
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:878
|
||||
#, python-format
|
||||
msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds"
|
||||
msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:892
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:893
|
||||
#, python-format
|
||||
msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s"
|
||||
msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:893
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:894
|
||||
msgid "Slicing failed"
|
||||
msgstr "Slicing fehlgeschlagen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:910
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:911
|
||||
msgid "Streaming ..."
|
||||
msgstr "Streaming ..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:922
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:923
|
||||
msgid "Streaming done"
|
||||
msgstr "Streaming abgeschlossen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:923
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:924
|
||||
#, python-format
|
||||
msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"
|
||||
msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1019
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1020
|
||||
#, python-format
|
||||
msgid "Could not upload the file. Make sure that it is a valid file with one of these extensions: %(extensions)s"
|
||||
msgstr "Konnte die Datei nicht hochladen. Bitte stelle sicher, dass es sich um eine valide Datei mit einer dieser Erweiterungen ist: %(extensions)s"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1040
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1041
|
||||
msgid "Saving ..."
|
||||
msgstr "Speichere ..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1040
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1041
|
||||
msgid "Uploading ..."
|
||||
msgstr "Uploade ..."
|
||||
|
||||
|
|
@ -1749,7 +1749,7 @@ msgstr "GCODE Befehle"
|
|||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:26
|
||||
#: src/octoprint/templates/navbar/login.jinja2:2
|
||||
#: src/octoprint/templates/navbar/login.jinja2:13
|
||||
#: src/octoprint/templates/navbar/login.jinja2:14
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
|
|
@ -1762,19 +1762,19 @@ msgstr "Login erfolgreich"
|
|||
msgid "You are now logged in as \"%(username)s\""
|
||||
msgstr "Du bist jetzt eingeloggt als \"%(username)s\""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:81
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:85
|
||||
msgid "Login failed"
|
||||
msgstr "Login fehlgeschlagen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:81
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:85
|
||||
msgid "User unknown or wrong password"
|
||||
msgstr "Nutzer unbekannt oder falsches Passwort"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:88
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:92
|
||||
msgid "Logout successful"
|
||||
msgstr "Logout erfolgreich"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:88
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:92
|
||||
msgid "You are now logged out"
|
||||
msgstr "Du bist jetzt ausgeloggt"
|
||||
|
||||
|
|
@ -1867,83 +1867,91 @@ msgstr "Druckerprofil hinzufügen"
|
|||
msgid "Edit Printer Profile \"%(name)s\""
|
||||
msgstr "Druckerprofile \"%(name)s\" bearbeiten"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:46
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:47
|
||||
msgid "Restarts the print job from the beginning"
|
||||
msgstr "Started den Druckjob von vorne"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:47
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:48
|
||||
msgid "Starts the print job"
|
||||
msgstr "Startet den Druckjob"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:48
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:49
|
||||
msgid "Resumes the print job"
|
||||
msgstr "Setzt den Druckjob fort"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:49
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:50
|
||||
msgid "Pauses the print job"
|
||||
msgstr "Pausiert den Druckjob"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:82
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:83
|
||||
msgid "Still stabilizing..."
|
||||
msgstr "Noch zu ungenau..."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:92
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:93
|
||||
msgid "Based on a linear approximation (very low accuracy, especially at the beginning of the print)"
|
||||
msgstr "Basiert auf einer linearen Approximation (sehr geringe Genauigkeit, insbesondere zu Beginn eines Drucks)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:95
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:96
|
||||
msgid "Based on the estimate from analysis of file (medium accuracy)"
|
||||
msgstr "Basiert auf der Schätzung der Analyse der Datei (mittlere Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:98
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:99
|
||||
msgid "Based on a mix of estimate from analysis and calculation (medium accuracy)"
|
||||
msgstr "Basiert auf einem Mix der Schätzung aus der Analyse und der Berechnung (mittlere Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:101
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:102
|
||||
msgid "Based on the average total of past prints of this model with the same printer profile (usually good accuracy)"
|
||||
msgstr "Basiert auf der durchschnittlichen Dauer vergangener Druckjobs dieses Modells mit dem selben Druckerprofil (normalerweise gute Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:104
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:105
|
||||
msgid "Based on a mix of average total from past prints and calculation (usually good accuracy)"
|
||||
msgstr "Basiert auf einem Mix der durschnittlichen Dauer vergangener Druckjobs und der Berechnung (normalerweise gute Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:107
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:108
|
||||
msgid "Based on the calculated estimate (best accuracy)"
|
||||
msgstr "Basiert auf der berechneten Schätzung (beste Genauigkeit)"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:145
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:146
|
||||
msgid "Continue"
|
||||
msgstr "Fortsetzen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:147
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:148
|
||||
#: src/octoprint/templates/sidebar/state.jinja2:24
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:158
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:159
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:11
|
||||
msgid "On Z Change"
|
||||
msgstr "Bei Ebenenwechsel"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:160
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:161
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:10
|
||||
msgid "Timed"
|
||||
msgstr "Nach Zeit"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:160
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:161
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:25
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:39
|
||||
msgid "sec"
|
||||
msgstr "Sek"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:268
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:269
|
||||
msgid "This will restart the print job from the beginning."
|
||||
msgstr "Der Druckjob wird zurückgesetzt und von vorne begonnen."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:292
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:296
|
||||
msgid "This will cancel your print."
|
||||
msgstr "Das wird deinen Druck abbrechen."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:297
|
||||
msgid "No"
|
||||
msgstr "Nein"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:298
|
||||
msgid "Yes"
|
||||
msgstr "Ja"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:64
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:82
|
||||
msgid "violet"
|
||||
|
|
@ -1958,27 +1966,27 @@ msgstr "weiß"
|
|||
msgid "Autodetect from browser"
|
||||
msgstr "Automatisch vom Browser erkennen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:230
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:231
|
||||
msgid "If you see your webcam stream below, the entered stream URL is ok."
|
||||
msgstr "Falls du unten den Webcamstream sehen kannst, ist die Stream-URL ok."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:236
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:237
|
||||
msgid "Stream test"
|
||||
msgstr "Stream Test"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:249
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:250
|
||||
msgid "Could not retrieve snapshot URL, please double check the URL"
|
||||
msgstr "Konnte die Snapshot-URL nicht abgreifen, bitte prüfen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:250
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:251
|
||||
msgid "Snapshot test failed"
|
||||
msgstr "Snapshot Test fehlgeschlagen"
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:272
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:273
|
||||
msgid "If you see your webcam snapshot picture below, the entered snapshot URL is ok."
|
||||
msgstr "Falls du unten dein Snapshotbild sehen kannst, ist die Snapshot-URL ok."
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:274
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:275
|
||||
msgid "Snapshot test"
|
||||
msgstr "Snapshot Test"
|
||||
|
||||
|
|
@ -2421,22 +2429,26 @@ msgid "Beta"
|
|||
msgstr "Beta"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:19
|
||||
msgid "Confirm before cancelling a print"
|
||||
msgstr "Vor Abbruch eines Druckjobs bestätigen"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:26
|
||||
msgid "Enable SD support"
|
||||
msgstr "SD-Unterstützung aktivieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:26
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:33
|
||||
msgid "Enable Keyboard Control"
|
||||
msgstr "Tastatursteuerung aktivieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:33
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:40
|
||||
msgid "Wait for <code>start</code> on connect"
|
||||
msgstr "Bei der Verbindung auf <code>start</code> warten"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:41
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:47
|
||||
msgid "Enable automatic firmware detection"
|
||||
msgstr "Automatische Firmwareerkennung einschalten"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:42
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:48
|
||||
msgid ""
|
||||
"\n"
|
||||
" If enabled, OctoPrint will try to figure out your printer's firmware automatically and adjust a couple of communication parameters based on that.\n"
|
||||
|
|
@ -2444,52 +2456,52 @@ msgid ""
|
|||
" "
|
||||
msgstr "Falls diese Option eingeschaltet ist, versucht OctoPrint die Firmware des Druckers automatisch zu erkennen und darauf basierend diverse Kommunikationsparameter zu konfigurieren.Falls das für dich nicht korrekt funktioniert oder du mehr Kontrolle haben möchtest, schalte diese Option aus und die entsprechenden Parameter werden zur manuellen Konfigurationeingeblendet."
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:53
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:59
|
||||
msgid "Select SD files by relative path"
|
||||
msgstr "SD Dateien per relativem Pfad addressieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:53
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:59
|
||||
msgid "RepRap Firmware"
|
||||
msgstr "RepRap Firmware"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:60
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:66
|
||||
msgid "Always assume SD card is present"
|
||||
msgstr "Immer davon ausgehen, dass eine SD-Karte vorhanden ist"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:60
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:67
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:74
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:81
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:66
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:73
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:80
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:87
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:98
|
||||
msgid "Repetier"
|
||||
msgstr "Repetier"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:67
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:73
|
||||
msgid "Ignore consecutive resend requests for the same line"
|
||||
msgstr "Aufeinanderfolgende Resend Requests für die selbe Zeilennummer ignorieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:74
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:80
|
||||
#, python-format
|
||||
msgid "Support <code>TargetExtr%%n</code>/<code>TargetBed</code> target temperature format"
|
||||
msgstr "<code>TargetExtr%%n</code>/<code>TargetBed</code> Zieltemperaturformat unterstützen"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:81
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:87
|
||||
msgid "Disable detection of external heatups"
|
||||
msgstr "Detektierung externer Aufheizvorgänge deaktivieren"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:86
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
msgid "Send a checksum with the command"
|
||||
msgstr "Eine Prüfsumme mit dem Befehl senden"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:89
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:95
|
||||
msgid "When printing"
|
||||
msgstr "Beim Drucken"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:98
|
||||
msgid "Always"
|
||||
msgstr "Immer"
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:95
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:101
|
||||
msgid "Never"
|
||||
msgstr "Nie"
|
||||
|
||||
|
|
@ -2863,15 +2875,15 @@ msgid ""
|
|||
" get you printing in no time!\n"
|
||||
msgstr "Danke, dass du OctoPrint installiert hast! Dieser Wizard wird dich nun durch die letzten Schritte begleiten, um deine OctoPrint Instanz fertig einzurichten."
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:11
|
||||
#: src/octoprint/templates/navbar/login.jinja2:12
|
||||
msgid "Remember me"
|
||||
msgstr "Login merken"
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:16
|
||||
#: src/octoprint/templates/navbar/login.jinja2:18
|
||||
msgid "User Settings"
|
||||
msgstr "Nutzereinstellungen"
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:17
|
||||
#: src/octoprint/templates/navbar/login.jinja2:19
|
||||
msgid "Logout"
|
||||
msgstr "Logout"
|
||||
|
||||
|
|
@ -3479,7 +3491,7 @@ msgstr ""
|
|||
"<p>\n"
|
||||
" Du hast <strong data-bind=\"text: selectedFile.name\"></strong> zum Drucken ausgewählt das\n"
|
||||
" <strong data-bind=\"text: formatSize(selectedFile.size())\"></strong> groß ist. Abhängig von Deinem\n"
|
||||
" System könnte das zu groß zum Rendern sein und Deinen Browser zum Absturz bringen. might be too large for rendering and cause your browser to become unresponsive or crash.\n"
|
||||
" System könnte das zu groß zum Rendern sein und Deinen Browser zum Absturz bringen.\n"
|
||||
" </p>\n"
|
||||
"\n"
|
||||
" <p>\n"
|
||||
|
|
@ -3655,7 +3667,7 @@ msgstr "Zeitrafferaufnahme rendern"
|
|||
#~ msgstr "Vorhandene Datei überschreiben"
|
||||
|
||||
#~ msgid ""
|
||||
#~ msgstr ""
|
||||
#~ msgstr "Falls dir OctoPrint gefällt, bitte ziehe es in Betracht <a href=\"%(url)s\" target=\"_blank\">seine fortlaufende Entwicklung zu unterstützen</a>. Diese Entwicklung wird vollständig durch User wie Dich finanziert! Du kannst diesen Link auch im \"Über\" Dialog finden. <strong>Danke!</strong>"
|
||||
|
||||
#~ msgid "Bundled"
|
||||
#~ msgstr "Gebundled"
|
||||
|
|
@ -3695,9 +3707,3 @@ msgstr "Zeitrafferaufnahme rendern"
|
|||
|
||||
#~ msgid "Reboot"
|
||||
#~ msgstr "Neustart"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ " If you enjoy OctoPrint, please consider <a href=\"%(url)s\" target=\"_blank\">supporting its ongoing\n"
|
||||
#~ " development</a>. It's fully funded by users like you! You can also find this link in the \"About\" dialog. <strong>Thank you!</strong>\n"
|
||||
#~ msgstr "Falls dir OctoPrint gefällt, bitte ziehe es in Betracht <a href=\"%(url)s\" target=\"_blank\">seine fortlaufende Entwicklung zu unterstützen</a>. Diese Entwicklung wird vollständig durch User wie Dich finanziert! Du kannst diesen Link auch im \"Über\" Dialog finden. <strong>Danke!</strong>"
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
# Translations template for OctoPrint.
|
||||
# Copyright (C) 2016 The OctoPrint Project
|
||||
# Copyright (C) 2017 The OctoPrint Project
|
||||
# This file is distributed under the same license as the OctoPrint project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OctoPrint 1.3.0.dev1608+gefb2f99.dirty\n"
|
||||
"Project-Id-Version: OctoPrint 1.3.1.dev40+gfb5d568\n"
|
||||
"Report-Msgid-Bugs-To: i18n@octoprint.org\n"
|
||||
"POT-Creation-Date: 2016-12-02 12:37+0100\n"
|
||||
"POT-Creation-Date: 2017-01-12 14:29+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -156,16 +156,16 @@ msgstr ""
|
|||
|
||||
#: src/octoprint/plugins/corewizard/templates/corewizard_acl_wizard.jinja2:19
|
||||
#: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:45
|
||||
#: src/octoprint/templates/navbar/login.jinja2:6
|
||||
#: src/octoprint/templates/navbar/login.jinja2:7
|
||||
#: src/octoprint/templates/navbar/login.jinja2:8
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/plugins/corewizard/templates/corewizard_acl_wizard.jinja2:25
|
||||
#: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:51
|
||||
#: src/octoprint/templates/dialogs/usersettings/access.jinja2:3
|
||||
#: src/octoprint/templates/navbar/login.jinja2:8
|
||||
#: src/octoprint/templates/navbar/login.jinja2:9
|
||||
#: src/octoprint/templates/navbar/login.jinja2:10
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -332,22 +332,22 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:176
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:296
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:297
|
||||
msgid "The path doesn't exist"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:178
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:298
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:299
|
||||
msgid "The path is not a file"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:180
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:300
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:301
|
||||
msgid "The path is not an executable"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/plugins/cura/static/js/cura.js:183
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:303
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:304
|
||||
msgid "The path is valid"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1501,8 +1501,8 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/dataupdater.js:170
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:848
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:855
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:849
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:856
|
||||
#, python-format
|
||||
msgid "Slicing ... (%(percentage)d%%)"
|
||||
msgstr ""
|
||||
|
|
@ -1674,7 +1674,7 @@ msgstr ""
|
|||
#: src/octoprint/static/js/app/viewmodels/control.js:62
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:589
|
||||
#: src/octoprint/static/js/app/viewmodels/gcode.js:482
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:231
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:232
|
||||
#: src/octoprint/static/js/app/viewmodels/temperature.js:62
|
||||
msgid "Tool"
|
||||
msgstr ""
|
||||
|
|
@ -1765,53 +1765,53 @@ msgstr ""
|
|||
msgid "Object doesn't fit print volume"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:850
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:851
|
||||
msgid "Slicing ..."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:876
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:877
|
||||
msgid "Slicing done"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:877
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:878
|
||||
#, python-format
|
||||
msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:892
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:893
|
||||
#, python-format
|
||||
msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:893
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:894
|
||||
msgid "Slicing failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:910
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:911
|
||||
msgid "Streaming ..."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:922
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:923
|
||||
msgid "Streaming done"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:923
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:924
|
||||
#, python-format
|
||||
msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1019
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1020
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Could not upload the file. Make sure that it is a valid file with one of "
|
||||
"these extensions: %(extensions)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1040
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1041
|
||||
msgid "Saving ..."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1040
|
||||
#: src/octoprint/static/js/app/viewmodels/files.js:1041
|
||||
msgid "Uploading ..."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1866,7 +1866,7 @@ msgstr ""
|
|||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:26
|
||||
#: src/octoprint/templates/navbar/login.jinja2:2
|
||||
#: src/octoprint/templates/navbar/login.jinja2:13
|
||||
#: src/octoprint/templates/navbar/login.jinja2:14
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1879,19 +1879,19 @@ msgstr ""
|
|||
msgid "You are now logged in as \"%(username)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:81
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:85
|
||||
msgid "Login failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:81
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:85
|
||||
msgid "User unknown or wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:88
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:92
|
||||
msgid "Logout successful"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:88
|
||||
#: src/octoprint/static/js/app/viewmodels/loginstate.js:92
|
||||
msgid "You are now logged out"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1990,89 +1990,97 @@ msgstr ""
|
|||
msgid "Edit Printer Profile \"%(name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:46
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:47
|
||||
msgid "Restarts the print job from the beginning"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:47
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:48
|
||||
msgid "Starts the print job"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:48
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:49
|
||||
msgid "Resumes the print job"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:49
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:50
|
||||
msgid "Pauses the print job"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:82
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:83
|
||||
msgid "Still stabilizing..."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:92
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:93
|
||||
msgid ""
|
||||
"Based on a linear approximation (very low accuracy, especially at the "
|
||||
"beginning of the print)"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:95
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:96
|
||||
msgid "Based on the estimate from analysis of file (medium accuracy)"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:98
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:99
|
||||
msgid "Based on a mix of estimate from analysis and calculation (medium accuracy)"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:101
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:102
|
||||
msgid ""
|
||||
"Based on the average total of past prints of this model with the same "
|
||||
"printer profile (usually good accuracy)"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:104
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:105
|
||||
msgid ""
|
||||
"Based on a mix of average total from past prints and calculation (usually"
|
||||
" good accuracy)"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:107
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:108
|
||||
msgid "Based on the calculated estimate (best accuracy)"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:145
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:146
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:147
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:148
|
||||
#: src/octoprint/templates/sidebar/state.jinja2:24
|
||||
msgid "Pause"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:158
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:159
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:11
|
||||
msgid "On Z Change"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:160
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:161
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:10
|
||||
msgid "Timed"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:160
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:161
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:25
|
||||
#: src/octoprint/templates/tabs/timelapse.jinja2:39
|
||||
msgid "sec"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:268
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:269
|
||||
msgid "This will restart the print job from the beginning."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:292
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:296
|
||||
msgid "This will cancel your print."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:297
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/printerstate.js:298
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:64
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:82
|
||||
msgid "violet"
|
||||
|
|
@ -2087,29 +2095,29 @@ msgstr ""
|
|||
msgid "Autodetect from browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:230
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:231
|
||||
msgid "If you see your webcam stream below, the entered stream URL is ok."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:236
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:237
|
||||
msgid "Stream test"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:249
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:250
|
||||
msgid "Could not retrieve snapshot URL, please double check the URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:250
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:251
|
||||
msgid "Snapshot test failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:272
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:273
|
||||
msgid ""
|
||||
"If you see your webcam snapshot picture below, the entered snapshot URL "
|
||||
"is ok."
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:274
|
||||
#: src/octoprint/static/js/app/viewmodels/settings.js:275
|
||||
msgid "Snapshot test"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -2588,22 +2596,26 @@ msgid "Beta"
|
|||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:19
|
||||
msgid "Enable SD support"
|
||||
msgid "Confirm before cancelling a print"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:26
|
||||
msgid "Enable Keyboard Control"
|
||||
msgid "Enable SD support"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:33
|
||||
msgid "Enable Keyboard Control"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:40
|
||||
msgid "Wait for <code>start</code> on connect"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:41
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:47
|
||||
msgid "Enable automatic firmware detection"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:42
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:48
|
||||
msgid ""
|
||||
"\n"
|
||||
" If enabled, OctoPrint will try to figure out your "
|
||||
|
|
@ -2615,54 +2627,54 @@ msgid ""
|
|||
" "
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:53
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:59
|
||||
msgid "Select SD files by relative path"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:53
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:59
|
||||
msgid "RepRap Firmware"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:60
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:66
|
||||
msgid "Always assume SD card is present"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:60
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:67
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:74
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:81
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:66
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:73
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:80
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:87
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:98
|
||||
msgid "Repetier"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:67
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:73
|
||||
msgid "Ignore consecutive resend requests for the same line"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:74
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:80
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Support <code>TargetExtr%%n</code>/<code>TargetBed</code> target "
|
||||
"temperature format"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:81
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:87
|
||||
msgid "Disable detection of external heatups"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:86
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
msgid "Send a checksum with the command"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:89
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:95
|
||||
msgid "When printing"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:92
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:98
|
||||
msgid "Always"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:95
|
||||
#: src/octoprint/templates/dialogs/settings/features.jinja2:101
|
||||
msgid "Never"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -3100,15 +3112,15 @@ msgid ""
|
|||
" get you printing in no time!\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:11
|
||||
#: src/octoprint/templates/navbar/login.jinja2:12
|
||||
msgid "Remember me"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:16
|
||||
#: src/octoprint/templates/navbar/login.jinja2:18
|
||||
msgid "User Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/octoprint/templates/navbar/login.jinja2:17
|
||||
#: src/octoprint/templates/navbar/login.jinja2:19
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue