export default {
// Navigation
nav: {
printers: 'Drucker',
archives: 'Archiv',
queue: 'Warteschlange',
stats: 'Statistiken',
profiles: 'Profile',
maintenance: 'Wartung',
projects: 'Projekte',
inventory: 'Filament',
files: 'Dateimanager',
settings: 'Einstellungen',
system: 'System',
collapseSidebar: 'Seitenleiste einklappen',
expandSidebar: 'Seitenleiste ausklappen',
update: 'Update',
updateAvailable: 'Update verfügbar: v{{version}}',
updateAvailableBanner: 'Version {{version}} ist verfügbar!',
viewUpdate: 'Update anzeigen',
viewOnGithub: 'Auf GitHub ansehen',
keyboardShortcuts: 'Tastaturkürzel (?)',
switchToLight: 'Zum hellen Modus wechseln',
switchToDark: 'Zum dunklen Modus wechseln',
smartSwitches: 'Smart Switches',
logout: 'Abmelden',
},
// Common
common: {
save: 'Speichern',
saving: 'Speichern...',
cancel: 'Abbrechen',
delete: 'Löschen',
edit: 'Bearbeiten',
add: 'Hinzufügen',
close: 'Schließen',
confirm: 'Bestätigen',
loading: 'Lädt...',
error: 'Fehler',
success: 'Erfolg',
warning: 'Warnung',
enabled: 'Aktiviert',
disabled: 'Deaktiviert',
yes: 'Ja',
no: 'Nein',
on: 'An',
off: 'Aus',
all: 'Alle',
none: 'Keine',
search: 'Suchen',
filter: 'Filtern',
sort: 'Sortieren',
refresh: 'Aktualisieren',
download: 'Herunterladen',
upload: 'Hochladen',
uploading: 'Hochladen...',
uploadFailed: 'Hochladen fehlgeschlagen',
actions: 'Aktionen',
status: 'Status',
name: 'Name',
description: 'Beschreibung',
date: 'Datum',
time: 'Zeit',
hours: 'Stunden',
minutes: 'Minuten',
seconds: 'Sekunden',
days: 'Tage',
enable: 'Aktivieren',
disable: 'Deaktivieren',
permissions: 'Berechtigungen',
noPrinters: 'Keine Drucker konfiguriert',
noData: 'Keine Daten verfügbar',
linkNotFound: 'Link nicht gefunden',
required: 'Erforderlich',
optional: 'Optional',
dismiss: 'Schließen',
apply: 'Anwenden',
reset: 'Zurücksetzen',
export: 'Exportieren',
import: 'Importieren',
clear: 'Leeren',
selectAll: 'Alle auswählen',
deselectAll: 'Auswahl aufheben',
noChange: '— Keine Änderung —',
unchanged: 'Unverändert',
unassigned: 'Nicht zugewiesen',
unknown: 'Unbekannt',
unknownError: 'Unbekannter Fehler',
today: 'Heute',
tomorrow: 'Morgen',
asap: 'Sofort',
overdue: 'Überfällig',
now: 'Jetzt',
collapse: 'Einklappen',
expand: 'Ausklappen',
viewArchive: 'Archiv anzeigen',
viewInFileManager: 'Im Dateimanager anzeigen',
addedBy: 'Hinzugefügt von {{username}}',
prints: 'Drucke',
more: '+{{count}} weitere',
ascending: 'Aufsteigend',
descending: 'Absteigend',
printer: 'Drucker',
remove: 'Entfernen',
type: 'Typ',
print: 'Drucken',
rename: 'Umbenennen',
move: 'Verschieben',
create: 'Erstellen',
duplicate: 'Duplizieren',
left: 'Links',
right: 'Rechts',
},
// Printers page
printers: {
title: 'Drucker',
addPrinter: 'Drucker hinzufügen',
editPrinter: 'Drucker bearbeiten',
deletePrinter: 'Drucker löschen',
printerName: 'Druckername',
serialNumber: 'Seriennummer',
ipAddress: 'IP-Adresse / Hostname',
accessCode: 'Zugangscode',
model: 'Modell',
nozzleCount: 'Düsenanzahl',
autoArchive: 'Automatische Archivierung',
status: {
available: 'Verfügbar',
idle: 'Bereit',
printing: 'Druckt',
paused: 'Pausiert',
offline: 'Offline',
error: 'Fehler',
finished: 'Fertig',
unknown: 'Unbekannt',
},
temperatures: {
nozzle: 'Düse',
bed: 'Druckbett',
chamber: 'Kammer',
},
progress: '{{percent}}% abgeschlossen',
timeRemaining: 'Noch {{time}}',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen?',
maintenanceOk: 'Wartung OK',
maintenanceWarning: '{{count}} Warnung',
maintenanceWarning_plural: '{{count}} Warnungen',
maintenanceDue: '{{count}} fällig',
maintenanceDue_plural: '{{count}} fällig',
// Sort options
sort: {
name: 'Name',
status: 'Status',
model: 'Modell',
location: 'Standort',
ascending: 'Aufsteigend sortieren',
descending: 'Absteigend sortieren',
},
// Card size
cardSize: {
small: 'Kleine Karten',
medium: 'Mittlere Karten',
large: 'Große Karten',
extraLarge: 'Extra große Karten',
},
// Controls
hideOffline: 'Offline ausblenden',
nextAvailable: 'Nächster verfügbar',
powerOn: 'Einschalten',
offlinePrintersWithPlugs: 'Offline-Drucker mit Smart-Plugs',
noPrintersConfigured: 'Noch keine Drucker konfiguriert',
// Printer card
readyToPrint: 'Druckbereit',
external: 'Extern',
extL: 'Ext-L',
extR: 'Ext-R',
deleteArchives: 'Druckarchive löschen',
noLabel: 'Keine Bezeichnung',
printPreview: 'Druckvorschau',
width: 'Breite',
height: 'Höhe',
noObjectsFound: 'Keine Objekte gefunden',
objectsLoadedOnPrintStart: 'Objekte werden beim Druckstart geladen',
willBeSkipped: 'Wird übersprungen',
name: 'Name',
serialCannotBeChanged: 'Seriennummer kann nicht geändert werden',
locationHelp: 'Dient zur Gruppierung von Druckern und zum Filtern von Warteschlangenaufträgen',
// WiFi signal strength
wifiSignal: {
veryWeak: 'Sehr schwach',
weak: 'Schwach',
fair: 'Ausreichend',
good: 'Gut',
excellent: 'Ausgezeichnet',
},
// Maintenance
maintenanceUpToDate: 'Alle Wartungen aktuell - Klicken zum Anzeigen',
// Chamber light
chamberLightOn: 'Kammerbeleuchtung einschalten',
chamberLightOff: 'Kammerbeleuchtung ausschalten',
// Files
files: 'Dateien',
browseFiles: 'Druckerdateien durchsuchen',
// Smart plug
autoOffAfterPrint: 'Automatisches Ausschalten nach Druck',
autoOffExecuted: 'Auto-off wurde ausgeführt - Drucker einschalten zum Zurücksetzen',
// HMS errors
hmsErrors: 'HMS-Fehler',
viewHmsErrors: '{{count}} HMS-Fehler anzeigen',
// Actions
resume: 'Fortsetzen',
pause: 'Pausieren',
stop: 'Stoppen',
camera: 'Kamera',
skipObject: 'Objekt überspringen',
reconnect: 'Neu verbinden',
mqttDebug: 'MQTT-Debug',
printerInformation: 'Druckerinformationen',
copyToClipboard: 'Kopieren',
copied: 'Kopiert!',
state: 'Zustand',
wifiSignalLabel: 'WLAN-Signal',
developerMode: 'Entwicklermodus',
enabled: 'Aktiviert',
disabled: 'Deaktiviert',
addedOn: 'Hinzugefügt',
sdCard: 'SD-Karte',
inserted: 'Eingelegt',
notInserted: 'Nicht eingelegt',
totalPrintHours: 'Druckstunden',
activeNozzle: 'Aktiv: {{nozzle}} Düse',
nozzleRack: 'Düsenhalter',
nozzleDocked: 'Angedockt',
nozzleMounted: 'Montiert',
nozzleActive: 'Aktiv',
nozzleIdle: 'Inaktiv',
nozzleDiameter: 'Durchmesser',
nozzleType: 'Typ',
nozzleStatus: 'Status',
nozzleFilament: 'Filament',
nozzleWear: 'Verschleiß',
nozzleMaxTemp: 'Max Temp',
nozzleSerial: 'Seriennr.',
nozzleHardenedSteel: 'Gehärteter Stahl',
nozzleStainlessSteel: 'Edelstahl',
nozzleTungstenCarbide: 'Wolframkarbid',
nozzleFlow: 'Durchfluss',
nozzleHighFlow: 'High Flow',
nozzleStandardFlow: 'Standard',
// Firmware
firmwareUpdate: 'Firmware-Update',
firmwareInstructions: 'Gehen Sie auf dem Touchscreen des Druckers zu',
firmwareNav: 'Navigieren Sie zu',
settings: 'Einstellungen',
firmware: 'Firmware',
// Discovery
discoverPrinters: 'Drucker entdecken',
searching: 'Suche...',
manualEntry: 'Manuelle Eingabe',
addFromCloud: 'Aus Cloud hinzufügen',
// Toast messages
toast: {
printerDeleted: 'Drucker gelöscht',
printerAdded: 'Drucker hinzugefügt',
printerUpdated: 'Drucker aktualisiert',
failedToDelete: 'Drucker konnte nicht gelöscht werden',
failedToAdd: 'Drucker konnte nicht hinzugefügt werden',
failedToUpdate: 'Drucker konnte nicht aktualisiert werden',
commandSent: 'Befehl gesendet',
failedToSendCommand: 'Befehl konnte nicht gesendet werden',
turnedOn: '{{name}} eingeschaltet',
failedToPowerOn: '{{name}} konnte nicht eingeschaltet werden',
scriptTriggered: 'Skript ausgelöst',
printStopped: 'Druck gestoppt',
printPaused: 'Druck pausiert',
printResumed: 'Druck fortgesetzt',
referenceDeleted: 'Referenz gelöscht',
detectionAreaSaved: 'Erkennungsbereich gespeichert',
failedToRunScript: 'Skript konnte nicht ausgeführt werden',
failedToStopPrint: 'Druck konnte nicht gestoppt werden',
failedToPausePrint: 'Druck konnte nicht pausiert werden',
failedToResumePrint: 'Druck konnte nicht fortgesetzt werden',
failedToControlChamberLight: 'Kammerbeleuchtung konnte nicht gesteuert werden',
failedToUpdateSetting: 'Einstellung konnte nicht aktualisiert werden',
failedToSkipObjects: 'Objekte konnten nicht übersprungen werden',
failedToRereadRfid: 'RFID konnte nicht erneut gelesen werden',
failedToCheckPlate: 'Platte konnte nicht überprüft werden',
failedToUpdateLabel: 'Bezeichnung konnte nicht aktualisiert werden',
failedToDeleteReference: 'Referenz konnte nicht gelöscht werden',
failedToSaveDetectionArea: 'Erkennungsbereich konnte nicht gespeichert werden',
plateCheckEnabled: 'Plattenprüfung aktiviert',
plateCheckDisabled: 'Plattenprüfung deaktiviert',
calibrationSaved: 'Kalibrierung gespeichert!',
calibrationFailed: 'Kalibrierung fehlgeschlagen',
rfidRereadInitiated: 'RFID-Neueinlesen gestartet',
},
// Connection status
connection: {
connected: 'Verbunden',
offline: 'Offline',
},
// Queue info
queue: {
inQueue: '{{count}} Druck in Warteschlange',
inQueue_plural: '{{count}} Drucke in Warteschlange',
},
// Controls section
controls: 'Steuerung',
// RFID
rfid: {
reread: 'RFID neu lesen',
},
// Permissions
permission: {
noAdd: 'Sie haben keine Berechtigung, Drucker hinzuzufügen',
noEdit: 'Sie haben keine Berechtigung, Drucker zu bearbeiten',
noDelete: 'Sie haben keine Berechtigung, Drucker zu löschen',
noControl: 'Sie haben keine Berechtigung, Drucker zu steuern',
noFiles: 'Sie haben keine Berechtigung, auf Druckerdateien zuzugreifen',
noAmsRfid: 'Sie haben keine Berechtigung, AMS-RFID erneut zu lesen',
noSmartPlugControl: 'Sie haben keine Berechtigung, Smart Plugs zu steuern',
noCamera: 'Sie haben keine Berechtigung, Kameras anzuzeigen',
},
// Add/Edit modal
modal: {
addTitle: 'Drucker hinzufügen',
editTitle: 'Drucker bearbeiten',
myPrinter: 'Mein Drucker',
selectModel: 'Modell auswählen...',
locationGroup: 'Standort / Gruppe (optional)',
locationPlaceholder: 'z.B. Werkstatt, Büro, Keller',
autoArchiveLabel: 'Abgeschlossene Drucke automatisch archivieren',
fromPrinterSettings: 'Aus Druckereinstellungen',
modelOptional: 'Modell (optional)',
saveChanges: 'Änderungen speichern',
},
// Skip objects
skipObjects: {
tooltip: 'Objekte überspringen',
onlyWhilePrinting: 'Objekte überspringen (nur während des Drucks)',
requiresMultiple: 'Objekte überspringen (erfordert 2+ Objekte)',
title: 'Objekte überspringen',
matchIdsInfo: 'IDs mit Drucker-Display abgleichen',
printerShowsIds: 'Der Druckerbildschirm zeigt Objekt-IDs auf der Bauplatte',
skipSelected: 'Ausgewählte überspringen',
skipping: 'Überspringe...',
noObjectsSelected: 'Keine Objekte ausgewählt',
selectObjectsToSkip: 'Wählen Sie Objekte aus, die Sie vom aktuellen Druck überspringen möchten',
skipped: 'übersprungen',
objectsSkipped: 'Objekte übersprungen',
activeCount: '{{count}} aktiv',
waitForLayer: 'Warten Sie auf Schicht 2+ zum Überspringen von Objekten (aktuell Schicht {{layer}})',
skip: 'Überspringen',
confirmTitle: 'Objekt überspringen?',
confirmMessage: 'Möchten Sie "{{name}}" wirklich überspringen? Dies kann nicht rückgängig gemacht werden.',
},
// Confirm modals
confirm: {
deleteTitle: 'Drucker löschen',
deleteMessage: 'Möchten Sie "{{name}}" wirklich löschen? Alle Verbindungseinstellungen werden entfernt.',
deleteArchivesNote: 'Der gesamte Druckverlauf für diesen Drucker wird dauerhaft gelöscht.',
keepArchivesNote: 'Der Druckverlauf wird beibehalten, aber nicht mehr mit diesem Drucker verknüpft.',
stopTitle: 'Druck stoppen',
stopMessage: 'Möchten Sie den aktuellen Druck auf "{{name}}" wirklich stoppen? Der Druckauftrag wird abgebrochen.',
stopButton: 'Druck stoppen',
pauseTitle: 'Druck pausieren',
pauseMessage: 'Möchten Sie den aktuellen Druck auf "{{name}}" wirklich pausieren?',
pauseButton: 'Druck pausieren',
resumeTitle: 'Druck fortsetzen',
resumeMessage: 'Möchten Sie den Druck auf "{{name}}" fortsetzen?',
resumeButton: 'Druck fortsetzen',
powerOnTitle: 'Drucker einschalten',
powerOnMessage: 'Möchten Sie die Stromversorgung für "{{name}}" wirklich EINSCHALTEN?',
powerOnButton: 'Einschalten',
powerOffTitle: 'Drucker ausschalten',
powerOffMessage: 'Möchten Sie die Stromversorgung für "{{name}}" wirklich AUSSCHALTEN?',
powerOffWarning: 'WARNUNG: "{{name}}" druckt gerade! Möchten Sie die Stromversorgung wirklich AUSSCHALTEN? Dies unterbricht den Druck und kann den Drucker beschädigen.',
powerOffButton: 'Ausschalten',
},
// Discovery
discovery: {
title: 'Drucker entdecken',
searching: 'Suche...',
scanning: 'Scanne...',
scanProgress: 'Scanne... {{scanned}}/{{total}}',
foundPrinters: '{{count}} Drucker gefunden',
noPrintersFound: 'Keine Drucker gefunden',
noPrintersFoundSubnet: 'Keine Drucker im angegebenen Subnetz gefunden.',
noPrintersFoundNetwork: 'Keine Drucker im Netzwerk gefunden.',
allConfigured: 'Alle erkannten Drucker sind bereits konfiguriert.',
alreadyAdded: 'Bereits hinzugefügt',
select: 'Auswählen',
manualEntry: 'Manuelle Eingabe',
addFromCloud: 'Aus Cloud hinzufügen',
subnetToScan: 'Zu scannendes Subnetz',
dockerNote: 'Docker erkannt. Geben Sie das Subnetz Ihres Druckers in CIDR-Notation ein. Erfordert network_mode: host in docker-compose.yml.',
scanSubnet: 'Subnetz nach Druckern scannen',
discoverNetwork: 'Drucker im Netzwerk suchen',
scanningSubnet: 'Subnetz wird nach Bambu-Druckern gescannt...',
scanningNetwork: 'Netzwerk wird gescannt...',
serialRequired: 'Seriennummer erforderlich',
unknown: 'Unbekannt',
failedToStart: 'Erkennung konnte nicht gestartet werden',
},
// Filaments section
filaments: 'Filamente',
// Camera
openCameraOverlay: 'Kamera-Overlay öffnen',
openCameraWindow: 'Kamera in neuem Fenster öffnen',
// Firmware
firmwareUpdateAvailable: 'Firmware-Update verfügbar: {{current}} → {{latest}}',
firmwareUpToDate: 'Firmware {{version}} — Aktuell',
firmwareUpdateButton: 'Update',
// Plate detection
plateDetection: {
noPermission: 'Sie haben keine Berechtigung, Drucker zu aktualisieren',
enabledClick: 'Plattenprüfung aktiviert - Klicken zum Deaktivieren',
disabledClick: 'Plattenprüfung deaktiviert - Klicken zum Aktivieren',
manageCalibration: 'Platten-Erkennungskalibrierung verwalten',
calibrationRequired: 'Kalibrierung erforderlich',
calibrationInstructions: 'Bitte stellen Sie sicher, dass die Druckplatte vollständig leer ist, und klicken Sie dann auf Kalibrieren.',
calibrationDescription: 'Die Kalibrierung erfasst ein Referenzbild der leeren Platte. Zukünftige Prüfungen vergleichen mit dieser Referenz, um Objekte zu erkennen.',
calibrationTip: 'Tipp: Sie können bis zu 5 Kalibrierungen für verschiedene Platten speichern. Das System verwendet automatisch die beste Übereinstimmung bei der Prüfung.',
plateEmpty: 'Platte erscheint leer',
objectsDetected: 'Objekte auf Platte erkannt',
confidence: 'Konfidenz',
difference: 'Differenz',
analysisPreview: 'Analysevorschau:',
analysisLegend: 'Grüner Rahmen = Erkennungsbereich, Rote Überlagerung = Unterschiede zur Kalibrierung',
savedReferences: 'Gespeicherte Referenzen ({{count}}/{{max}})',
deleteReference: 'Referenz löschen',
labelPlaceholder: 'Bezeichnung...',
clickToEdit: '{{label}} - Zum Bearbeiten klicken',
clickToAddLabel: 'Zum Hinzufügen einer Bezeichnung klicken',
},
// Fans
fans: {
partCooling: 'Bauteilkühlung',
auxiliary: 'Hilfsventilator',
chamber: 'Kammerventilator',
},
// HMS errors
clickToViewHmsErrors: 'Klicken, um HMS-Fehler anzuzeigen',
estimatedCompletion: 'Geschätzte Fertigstellungszeit',
slotOptions: 'Slot-Optionen',
// AMS hover popup
amsPopup: {
friendlyName: 'AMS-Name',
friendlyNamePlaceholder: 'z. B. AMS-Anzeigename',
serialNumber: 'Seriennummer',
firmwareVersion: 'Firmware',
save: 'Speichern',
clear: 'Löschen',
noEditPermission: 'Sie haben keine Berechtigung, AMS-Einheiten umzubenennen',
},
// Firmware modal
firmwareModal: {
title: 'Firmware-Update',
titleUpToDate: 'Firmware-Info',
currentVersion: 'Aktuell:',
latestVersion: 'Neueste:',
releaseNotes: 'Versionshinweise',
checkingPrereqs: 'Prüfe Voraussetzungen...',
sdCardReady: 'SD-Karte bereit. Klicken Sie unten, um die Firmware hochzuladen.',
uploadedSuccess: 'Firmware auf SD-Karte hochgeladen!',
applyInstructions: 'So wenden Sie das Update auf Ihrem Drucker an:',
step1: 'Gehen Sie auf dem Touchscreen des Druckers zu Einstellungen',
step2: 'Navigieren Sie zu Firmware',
step3: 'Wählen Sie Update von SD-Karte',
step4: 'Das Update dauert 10-20 Minuten',
done: 'Fertig',
starting: 'Starte...',
uploadFirmware: 'Firmware hochladen',
uploadFailed: 'Upload fehlgeschlagen: {{error}}',
uploadedToast: 'Firmware hochgeladen! Starten Sie das Update vom Druckerbildschirm.',
},
accessCodePlaceholder: 'Leer lassen, um den aktuellen zu behalten',
// ROI editor
roi: {
title: 'Erkennungsbereich (ROI)',
xStart: 'X-Start',
yStart: 'Y-Start',
width: 'Breite',
height: 'Höhe',
instruction: 'Passen Sie den Erkennungsbereich an, um sich auf die Druckplatte zu konzentrieren. Der grüne Rahmen in der Vorschau zeigt den aktuellen Bereich.',
},
developerModeWarning: 'Der Entwickler-LAN-Modus ist nicht aktiviert auf: {{names}}. Einige Funktionen funktionieren möglicherweise nicht.',
howToEnable: 'Aktivieren',
incompatibleFile: 'Diese Datei wurde für {{slicedFor}} geslicet, aber dieser Drucker ist ein {{printerModel}}',
dropNotPrintable: 'Nur .gcode- und .gcode.3mf-Dateien können gedruckt werden',
dropToPrint: 'Zum Drucken ablegen',
cannotPrint: 'Drucker beschäftigt',
},
// Archives page
archives: {
title: 'Druckarchiv',
searchPlaceholder: 'Archiv durchsuchen...',
filterByPrinter: 'Nach Drucker filtern',
filterByStatus: 'Nach Status filtern',
sortBy: 'Sortieren nach',
sortNewest: 'Neueste zuerst',
sortOldest: 'Älteste zuerst',
sortName: 'Name',
sortDuration: 'Dauer',
sortLargest: 'Größte zuerst',
sortSmallest: 'Kleinste zuerst',
sortSize: 'Größe',
noArchives: 'Keine Archive gefunden',
noArchivesSearch: 'Keine Archive entsprechen Ihrer Suche',
noArchivesYet: 'Noch keine Archive',
loadingArchives: 'Lade Archive...',
releaseToUpload: 'Loslassen zum Hochladen',
showAll: 'Alle anzeigen',
showFavoritesOnly: 'Nur Favoriten anzeigen',
gridView: 'Rasteransicht',
listView: 'Listenansicht',
calendarView: 'Kalenderansicht',
logView: 'Druckprotokoll',
manageTags: 'Tags verwalten',
showFailedPrints: 'Fehlgeschlagene Drucke anzeigen',
hideFailedPrints: 'Fehlgeschlagene Drucke ausblenden',
printTime: 'Druckzeit',
filamentUsed: 'Verbrauchtes Filament',
cost: 'Kosten',
reprint: 'Drucken',
preview: 'Vorschau',
deleteArchive: 'Archiv löschen',
deleteConfirm: 'Möchten Sie dieses Archiv wirklich löschen?',
favorite: 'Favorit',
unfavorite: 'Aus Favoriten entfernen',
viewDetails: 'Details anzeigen',
status: {
completed: 'Abgeschlossen',
failed: 'Fehlgeschlagen',
stopped: 'Gestoppt',
},
toast: {
source3mfAttached: 'Quell-3MF angehängt: {{filename}}',
failedUploadSource3mf: 'Fehler beim Hochladen der Quell-3MF',
source3mfRemoved: 'Quell-3MF entfernt',
failedRemoveSource3mf: 'Fehler beim Entfernen der Quell-3MF',
f3dAttached: 'F3D angehängt: {{filename}}',
failedUploadF3d: 'Fehler beim Hochladen der F3D',
f3dRemoved: 'F3D entfernt',
failedRemoveF3d: 'Fehler beim Entfernen der F3D',
timelapseAttached: 'Zeitraffer angehängt: {{filename}}',
timelapseAlreadyAttached: 'Zeitraffer bereits angehängt',
noMatchingTimelapse: 'Kein passender Zeitraffer gefunden',
failedScanTimelapse: 'Fehler beim Suchen nach Zeitraffer',
failedAttachTimelapse: 'Fehler beim Anhängen des Zeitraffers',
timelapseRemoved: 'Zeitraffer entfernt',
failedRemoveTimelapse: 'Fehler beim Entfernen des Zeitraffers',
timelapseUploaded: 'Zeitraffer hochgeladen: {{filename}}',
failedUploadTimelapse: 'Fehler beim Hochladen des Zeitraffers',
archiveDeleted: 'Archiv gelöscht',
failedDeleteArchive: 'Fehler beim Löschen des Archivs',
addedToFavorites: 'Zu Favoriten hinzugefügt',
removedFromFavorites: 'Aus Favoriten entfernt',
projectUpdated: 'Projekt aktualisiert',
failedUpdateProject: 'Fehler beim Aktualisieren des Projekts',
linkCopied: 'Link in die Zwischenablage kopiert',
failedCopyLink: 'Fehler beim Kopieren des Links',
photoDeleted: 'Foto gelöscht',
failedDeletePhoto: 'Fehler beim Löschen des Fotos',
failedDeleteArchives: 'Fehler beim Löschen der Archive',
failedUpdateFavorites: 'Fehler beim Aktualisieren der Favoriten',
exportDownloaded: 'Export heruntergeladen',
exportFailed: 'Export fehlgeschlagen',
},
menu: {
print: 'Drucken',
schedule: 'Planen',
openInBambuStudio: 'Im Slicer öffnen',
slice: 'Slicen',
externalLink: 'Externer Link',
viewOnMakerWorld: 'Auf MakerWorld ansehen',
preview3d: '3D-Vorschau',
viewTimelapse: 'Zeitraffer ansehen',
scanForTimelapse: 'Nach Zeitraffer suchen',
uploadTimelapse: 'Zeitraffer hochladen',
removeTimelapse: 'Zeitraffer entfernen',
downloadSource3mf: 'Quell-3MF herunterladen',
uploadSource3mf: 'Quell-3MF hochladen',
replaceSource3mf: 'Quell-3MF ersetzen',
removeSource3mf: 'Quell-3MF entfernen',
uploadF3d: 'F3D hochladen',
replaceF3d: 'F3D ersetzen',
downloadF3d: 'F3D herunterladen',
removeF3d: 'F3D entfernen',
download: 'Herunterladen',
copyDownloadLink: 'Download-Link kopieren',
qrCode: 'QR-Code',
viewPhotos: 'Fotos ansehen',
viewPhotosCount: 'Fotos ansehen ({{count}})',
projectPage: 'Projektseite',
addToFavorites: 'Zu Favoriten hinzufügen',
removeFromFavorites: 'Aus Favoriten entfernen',
edit: 'Bearbeiten',
goToProject: 'Zum Projekt: {{name}}',
addToProject: 'Zu Projekt hinzufügen',
removeFromProject: 'Aus Projekt entfernen',
loading: 'Laden...',
noProjectsAvailable: 'Keine Projekte verfügbar',
select: 'Auswählen',
deselect: 'Abwählen',
delete: 'Löschen',
},
permission: {
noReprint: 'Sie haben keine Berechtigung, dieses Archiv erneut zu drucken',
noAddToQueue: 'Sie haben keine Berechtigung, zur Warteschlange hinzuzufügen',
noUpdateArchives: 'Sie haben keine Berechtigung, Archive zu aktualisieren',
noUploadFiles: 'Sie haben keine Berechtigung, Dateien hochzuladen',
noDownload: 'Sie haben keine Berechtigung, Archive herunterzuladen',
noCopyLink: 'Sie haben keine Berechtigung, Download-Links zu kopieren',
noDelete: 'Sie haben keine Berechtigung, dieses Archiv zu löschen',
noCreate: 'Sie haben keine Berechtigung, Archive zu erstellen',
},
card: {
previousPlate: 'Vorherige Platte',
nextPlate: 'Nächste Platte',
plateNumber: 'Platte {{index}}',
moreOptions: 'Rechtsklick für mehr Optionen',
addToFavorites: 'Zu Favoriten hinzufügen',
removeFromFavorites: 'Aus Favoriten entfernen',
cancelled: 'abgebrochen',
failed: 'fehlgeschlagen',
duplicate: 'Duplikat',
duplicateTitle: 'Dieses Modell wurde bereits zuvor gedruckt',
openSource3mf: 'Quell-3MF in Bambu Studio öffnen (Rechtsklick für mehr Optionen)',
downloadF3d: 'Fusion 360 Designdatei herunterladen',
viewTimelapse: 'Zeitraffer ansehen',
viewPhoto: '1 Foto ansehen',
viewPhotos: '{{count}} Fotos ansehen',
openFolder: 'Ordner öffnen: {{name}}',
slicedFile: 'Geslicte Datei - druckbereit',
sourceFile: 'Nur Quelldatei - keine AMS-Zuordnung verfügbar',
gcode: 'GCODE',
source: 'QUELLE',
project: 'Projekt: {{name}}',
estimated: 'Geschätzt: {{time}}',
actual: 'Tatsächlich: {{time}}',
accuracy: 'Genauigkeit: {{percent}}%',
filament: '{{weight}}g',
layer: '{{count}} Schicht',
layers: '{{count}} Schichten',
object: '{{count}} Objekt',
objects: '{{count}} Objekte',
slicedFor: 'Geslict für {{model}}',
uploadedBy: 'Hochgeladen von',
noPermissionReprint: 'Sie haben keine Berechtigung, erneut zu drucken',
noFileForReprint: 'Keine 3MF-Datei verfügbar — die Datei konnte beim Aufzeichnen des Drucks nicht vom Drucker heruntergeladen werden',
noPermissionEdit: 'Sie haben keine Berechtigung, Archive zu bearbeiten',
noPermissionDelete: 'Sie haben keine Berechtigung, Archive zu löschen',
reprint: 'Drucken',
schedulePrint: 'Druck planen',
schedule: 'Planen',
openInBambuStudio: 'Im Slicer öffnen',
openInBambuStudioToSlice: 'Im Slicer öffnen zum Slicen',
slice: 'Slicen',
externalLink: 'Externer Link',
makerWorld: 'MakerWorld: {{designer}}',
viewProject: 'Projekt ansehen',
noExternalLink: 'Kein externer Link',
preview3d: '3D-Vorschau',
download: 'Herunterladen',
edit: 'Bearbeiten',
delete: 'Löschen',
},
modal: {
deleteArchive: 'Archiv löschen',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.',
deleteButton: 'Löschen',
removeSource3mf: 'Quell-3MF entfernen',
removeSource3mfConfirm: 'Möchten Sie die Quell-3MF-Datei wirklich von "{{name}}" entfernen? Die ursprüngliche Slicer-Projektdatei wird gelöscht.',
removeButton: 'Entfernen',
removeF3d: 'F3D entfernen',
removeF3dConfirm: 'Möchten Sie die Fusion 360 Designdatei wirklich von "{{name}}" entfernen?',
removeTimelapse: 'Zeitraffer entfernen',
removeTimelapseConfirm: 'Möchten Sie das Zeitraffervideo wirklich von "{{name}}" entfernen?',
timelapse: '{{name}} - Zeitraffer',
selectTimelapse: 'Zeitraffer auswählen',
selectTimelapseDesc: 'Keine automatische Übereinstimmung gefunden. Wählen Sie den Zeitraffer für diesen Druck:',
deleteArchives: 'Archive löschen',
deleteArchivesConfirm: 'Möchten Sie wirklich {{count}} Archiv(e) löschen? Diese Aktion kann nicht rückgängig gemacht werden.',
deleteCount: '{{count}} löschen',
},
page: {
title: 'Archive',
printsCount: '{{filtered}} von {{total}} Drucken',
dropFilesHere: '.3mf-Dateien hier ablegen',
releaseToUpload: 'Loslassen zum Hochladen',
only3mfSupported: 'Nur .3mf-Dateien werden unterstützt',
close: 'Schließen',
selected: '{{count}} ausgewählt',
selectAll: 'Alle auswählen',
tags: 'Tags',
project: 'Projekt',
favorite: 'Favorit',
delete: 'Löschen',
toggledFavorites: 'Favoriten für {{count}} Archiv(e) umgeschaltet',
failedUpdateFavorites: 'Fehler beim Aktualisieren der Favoriten',
archivesDeleted: '{{count}} Archiv(e) gelöscht',
failedDeleteArchives: 'Fehler beim Löschen der Archive',
photoDeleted: 'Foto gelöscht',
failedDeletePhoto: 'Fehler beim Löschen des Fotos',
},
list: {
name: 'Name',
printer: 'Drucker',
date: 'Datum',
size: 'Größe',
actions: 'Aktionen',
hasTimelapse: 'Hat Zeitraffer',
},
log: {
date: 'Datum',
printName: 'Druckname',
printer: 'Drucker',
user: 'Benutzer',
status: 'Status',
duration: 'Dauer',
filament: 'Filament',
allPrinters: 'Alle Drucker',
allUsers: 'Alle Benutzer',
allStatuses: 'Alle Status',
cancelled: 'Abgebrochen',
skipped: 'Übersprungen',
dateFrom: 'Von',
dateTo: 'Bis',
noEntries: 'Keine Druckprotokolleinträge gefunden',
showing: '{{count}} von {{total}} Einträgen',
rowsPerPage: 'Zeilen',
page: 'Seite',
prev: 'Zurück',
next: 'Weiter',
clearLog: 'Protokoll löschen',
clearLogTitle: 'Druckprotokoll löschen',
clearLogConfirm: 'Alle Druckprotokolleinträge werden dauerhaft gelöscht. Archive und Warteschlangeneinträge sind nicht betroffen. Diese Aktion kann nicht rückgängig gemacht werden. Sind Sie sicher?',
clearLogButton: 'Alle löschen',
cleared: '{{count}} Protokolleinträge gelöscht',
clearFailed: 'Druckprotokoll konnte nicht gelöscht werden',
},
},
// Queue page
queue: {
title: 'Druckwarteschlange',
subtitle: 'Planen und verwalten Sie Ihre Druckaufträge',
addToQueue: 'Zur Warteschlange hinzufügen',
// Print modal
print: 'Drucken',
reprint: 'Erneut drucken',
schedulePrint: 'Druck planen',
editQueueItem: 'Warteschlangeneintrag bearbeiten',
printToPrinters: 'Auf {{count}} Druckern drucken',
queueToPrinters: 'Zu {{count}} Druckern hinzufügen',
sending: 'Wird gesendet...',
sendingProgress: 'Sende {{current}}/{{total}}...',
adding: 'Wird hinzugefügt...',
addingProgress: 'Füge hinzu {{current}}/{{total}}...',
savingProgress: 'Speichere {{current}}/{{total}}...',
clearQueue: 'Warteschlange leeren',
clearHistory: 'Verlauf löschen',
emptyQueue: 'Warteschlange ist leer',
position: 'Position',
scheduledTime: 'Geplante Zeit',
moveUp: 'Nach oben',
moveDown: 'Nach unten',
startNow: 'Jetzt starten',
printingInProgress: 'Druck läuft...',
viewArchive: 'Archiv anzeigen',
viewInFileManager: 'Im Dateimanager anzeigen',
itemCount: '{{count}} Element',
itemCount_plural: '{{count}} Elemente',
dragToReorder: 'Ziehen zum Neuordnen (nur Sofort)',
reorderHint: 'Position betrifft nur Sofort-Elemente. Geplante Elemente werden zur festgelegten Zeit ausgeführt.',
addedBy: 'Hinzugefügt von {{name}}',
nextInQueue: 'Nächster in der Warteschlange',
clearPlate: 'Druckplatte freigeben & Nächsten starten',
clearPlateSuccess: 'Druckplatte freigegeben — bereit für nächsten Druck',
plateReady: 'Druckplatte freigegeben — bereit für nächsten Druck',
plateNumber: 'Platte {{index}}',
// Sections
sections: {
currentlyPrinting: 'Aktuell druckend',
queued: 'In Warteschlange',
history: 'Verlauf',
},
// Status
status: {
pending: 'Ausstehend',
waiting: 'Wartend',
printing: 'Druckt',
paused: 'Pausiert',
completed: 'Abgeschlossen',
failed: 'Fehlgeschlagen',
skipped: 'Übersprungen',
cancelled: 'Abgebrochen',
},
// Summary cards
summary: {
printing: 'Druckt',
queued: 'In Warteschlange',
totalTime: 'Gesamte Wartezeit',
totalWeight: 'Gesamtgewicht der Warteschlange',
history: 'Verlauf',
},
// Filters
filter: {
allPrinters: 'Alle Drucker',
unassigned: 'Nicht zugewiesen',
allStatus: 'Alle Status',
allLocations: 'Alle Standorte',
any: 'Beliebig',
},
// Sort
sort: {
byPosition: 'Nach Position sortieren',
byName: 'Nach Name sortieren',
byPrinter: 'Nach Drucker sortieren',
bySchedule: 'Nach Zeitplan sortieren',
byDate: 'Nach Datum sortieren',
ascendingOldest: 'Aufsteigend (älteste zuerst)',
descendingNewest: 'Absteigend (neueste zuerst)',
},
// Badges
badges: {
staged: 'Bereitgestellt',
requiresPrevious: 'Erfordert vorherigen Erfolg',
autoPowerOff: 'Automatisch ausschalten',
},
// Empty state
empty: {
title: 'Keine Drucke geplant',
description: 'Planen Sie einen Druck von der Archivseite über die Option "Planen" im Kontextmenü oder ziehen Sie Dateien hierher.',
},
// Time
time: {
asap: 'Sofort',
overdue: 'Überfällig',
now: 'Jetzt',
lessThanMinute: 'In weniger als einer Minute',
inMinutes: 'In {{count}} Min',
inHours: 'In {{count}} Stunden',
},
// Actions
actions: {
stopPrint: 'Druck stoppen',
startPrint: 'Druck starten',
requeue: 'Erneut einreihen',
},
// Bulk edit
bulkEdit: {
title: '{{count}} Element bearbeiten',
title_plural: '{{count}} Elemente bearbeiten',
description: 'Nur geänderte Einstellungen werden auf ausgewählte Elemente angewendet.',
printer: 'Drucker',
noChange: '— Keine Änderung —',
queueOptions: 'Warteschlangenoptionen',
staged: 'Bereitgestellt (manueller Start)',
autoPowerOff: 'Nach Druck automatisch ausschalten',
requirePrevious: 'Vorherigen Erfolg erfordern',
printOptions: 'Druckoptionen',
bedLevelling: 'Bett-Nivellierung',
flowCalibration: 'Fluss-Kalibrierung',
vibrationCalibration: 'Vibrations-Kalibrierung',
layerInspection: 'Erste-Schicht-Prüfung',
timelapse: 'Zeitraffer',
useAms: 'AMS verwenden',
applyChanges: 'Änderungen übernehmen',
selectAll: 'Alle auswählen',
deselectAll: 'Auswahl aufheben',
selected: '{{count}} ausgewählt',
editSelected: 'Ausgewählte bearbeiten',
cancelSelected: 'Ausgewählte abbrechen',
},
// Confirmations
confirm: {
cancelTitle: 'Geplanten Druck abbrechen',
cancelMessage: 'Möchten Sie "{{name}}" wirklich abbrechen?',
stopTitle: 'Druck stoppen',
stopMessage: 'Möchten Sie den aktuellen Druck "{{name}}" wirklich stoppen? Der Druckauftrag wird am Drucker abgebrochen.',
removeTitle: 'Aus Verlauf entfernen',
removeMessage: 'Möchten Sie "{{name}}" wirklich aus dem Warteschlangenverlauf entfernen?',
clearHistoryTitle: 'Verlauf löschen',
clearHistoryMessage: 'Möchten Sie alle {{count}} Element(e) aus dem Verlauf entfernen?',
cancelButton: 'Druck abbrechen',
stopButton: 'Druck stoppen',
thisPrint: 'diesen Druck',
thisItem: 'dieses Element',
},
// Toast messages
toast: {
cancelled: 'Warteschlangenelement abgebrochen',
cancelFailed: 'Element konnte nicht abgebrochen werden',
removed: 'Warteschlangenelement entfernt',
removeFailed: 'Element konnte nicht entfernt werden',
stopped: 'Druck gestoppt',
stopFailed: 'Druck konnte nicht gestoppt werden',
released: 'Druck in Warteschlange freigegeben',
startFailed: 'Druck konnte nicht gestartet werden',
reorderFailed: 'Warteschlange konnte nicht neu geordnet werden',
historyCleared: '{{count}} Verlaufselement(e) gelöscht',
clearHistoryFailed: 'Verlauf konnte nicht gelöscht werden',
updateFailed: 'Elemente konnten nicht aktualisiert werden',
bulkCancelled: '{{count}} Element(e) abgebrochen',
bulkCancelFailed: 'Elemente konnten nicht abgebrochen werden',
},
// Permissions
permissions: {
noStopPrint: 'Sie haben keine Berechtigung, Drucke zu stoppen',
noStartPrint: 'Sie haben keine Berechtigung, Drucke zu starten',
noEdit: 'Sie haben keine Berechtigung, dieses Warteschlangenelement zu bearbeiten',
noCancel: 'Sie haben keine Berechtigung, dieses Warteschlangenelement abzubrechen',
noRequeue: 'Sie haben keine Berechtigung, Elemente erneut einzureihen',
noRemove: 'Sie haben keine Berechtigung, dieses Warteschlangenelement zu entfernen',
noClearHistory: 'Sie haben keine Berechtigung, den gesamten Verlauf zu löschen',
noEditItems: 'Sie haben keine Berechtigung, Warteschlangenelemente zu bearbeiten',
noCancelItems: 'Sie haben keine Berechtigung, Warteschlangenelemente abzubrechen',
},
},
backgroundDispatch: {
unknownFile: 'Unbekannte Datei',
unknownPrinter: 'Unbekannter Drucker',
startingPrints: 'Starte Drucke',
progressSummary: '{{complete}}/{{total}} abgeschlossen • Geplant: {{dispatched}} • In Bearbeitung: {{processing}}',
expandDetails: 'Dispatch-Details ausklappen',
collapseDetails: 'Dispatch-Details einklappen',
dismissToast: 'Dispatch-Hinweis schließen',
cancelDispatchJob: 'Dispatch-Job abbrechen',
cancel: 'Abbrechen',
cancelling: 'Wird abgebrochen…',
status: {
dispatched: 'Geplant',
processing: 'In Bearbeitung',
completed: 'Abgeschlossen',
failed: 'Fehlgeschlagen',
cancelled: 'Abgebrochen',
},
toast: {
cancellingUpload: 'Upload wird abgebrochen...',
cancelled: 'Dispatch abgebrochen',
cancelFailed: 'Dispatch konnte nicht abgebrochen werden',
completeWithFailures: 'Background Dispatch abgeschlossen: {{completed}} erfolgreich, {{failed}} fehlgeschlagen',
completeSuccess: 'Background Dispatch abgeschlossen: {{completed}} erfolgreich',
printStartedRemaining: '{{completed}} Druck(e) gestartet, {{remaining}} weitere werden gesendet...',
},
},
// Statistics page
stats: {
title: 'Dashboard',
subtitle: 'Widgets zum Neuanordnen ziehen. Auf das Augensymbol klicken zum Ausblenden.',
overview: 'Übersicht',
totalPrints: 'Gesamtdrucke',
successRate: 'Erfolgsrate',
totalPrintTime: 'Gesamtdruckzeit',
printTime: 'Druckzeit',
totalFilament: 'Gesamtverbrauch Filament',
filamentUsed: 'Filamentverbrauch',
filamentCost: 'Filamentkosten',
totalCost: 'Gesamtkosten',
energyUsed: 'Energieverbrauch',
energyCost: 'Energiekosten',
averagePrintTime: 'Durchschnittliche Druckzeit',
printsPerDay: 'Drucke pro Tag',
byPrinter: 'Nach Drucker',
printsByPrinter: 'Drucke nach Drucker',
byMaterial: 'Nach Material',
byMonth: 'Nach Monat',
last7Days: 'Letzte 7 Tage',
last30Days: 'Letzte 30 Tage',
last90Days: 'Letzte 90 Tage',
allTime: 'Gesamt',
// Widgets
quickStats: 'Schnellstatistiken',
printActivity: 'Druckaktivität',
filamentTypes: 'Filamenttypen',
filamentTrends: 'Filamenttrends',
failureAnalysis: 'Fehleranalyse',
timeAccuracy: 'Zeitgenauigkeit',
successful: 'Erfolgreich:',
failed: 'Fehlgeschlagen:',
perfectEstimate: '100% = perfekte Schätzung',
noTimeAccuracyData: 'Noch keine Zeitgenauigkeitsdaten',
noFilamentData: 'Keine Filamentdaten verfügbar',
noPrinterData: 'Keine Druckerdaten verfügbar',
noPrintData: 'Keine Druckdaten verfügbar',
noPrintDataLast30Days: 'Keine Druckdaten in den letzten 30 Tagen',
failureReasons: 'Fehlerursachen',
topFailureReasons: 'Häufigste Fehlerursachen',
failedPrintsCount: '{{failed}} / {{total}} Drucke fehlgeschlagen',
lastWeekRate: 'Letzte Woche: {{rate}}%',
// Actions
resetLayout: 'Layout zurücksetzen',
recalculateCosts: 'Kosten neu berechnen',
recalculateCostsHint: 'Alle Archivkosten mit aktuellen Filamentpreisen neu berechnen',
exportStats: 'Statistiken exportieren',
exportAsCsv: 'Als CSV exportieren',
exportAsExcel: 'Als Excel exportieren',
hiddenCount: '{{count}} ausgeblendet',
// Toast
exportDownloaded: 'Export heruntergeladen',
exportFailed: 'Export fehlgeschlagen',
layoutReset: 'Layout zurückgesetzt',
recalculatedCosts: 'Kosten für {{count}} Archive neu berechnet',
recalculateFailed: 'Kosten konnten nicht neu berechnet werden',
// Loading
loadingStats: 'Statistiken werden geladen...',
// Permissions
noPermissionResetLayout: 'Sie haben keine Berechtigung, das Layout zurückzusetzen',
noPermissionRecalculate: 'Sie haben keine Berechtigung, Kosten neu zu berechnen',
noPrintDataInRange: 'Keine Druckdaten im ausgewählten Zeitraum',
periodFilament: 'Filamentverbrauch',
periodCost: 'Kosten',
avgPerPrint: 'Durchschnitt pro Druck',
usageOverTime: 'Verbrauch im Zeitverlauf',
filamentByWeight: 'Gewicht',
printDuration: 'Druckdauer',
printerUtilization: 'Druckerauslastung',
filamentSuccess: 'Erfolg nach Material',
printHabits: 'Druckgewohnheiten',
printTimeOfDay: 'Druck-Tageszeit',
colorDistribution: 'Farbverteilung',
noColorData: 'Keine Farbdaten verfügbar',
records: 'Rekorde',
longestPrint: 'Längster Druck',
heaviestPrint: 'Schwerster Druck',
mostExpensivePrint: 'Teuerster Druck',
busiestDay: 'Aktivster Tag',
successStreak: 'Erfolgsserie',
streakPrint: 'aufeinanderfolgender Druck',
streakPrints: '{{count}} aufeinanderfolgende Drucke',
printerStats: 'Druckerstatistiken',
hours: 'Stunden',
avgPrints: 'Ø Drucke',
noArchiveData: 'Keine Druckdaten verfügbar',
filamentByTime: 'Zeitverlauf',
avgWeight: 'Ø Gewicht',
avgTime: 'Ø Zeit',
filamentByPrints: 'Drucke',
timeframe: {
'today': 'Heute',
'this-week': 'Diese Woche',
'this-month': 'Dieser Monat',
'last-7': 'Letzte 7 Tage',
'last-30': 'Letzte 30 Tage',
'last-90': 'Letzte 90 Tage',
'this-year': 'Dieses Jahr',
'all-time': 'Gesamt',
'custom': 'Benutzerdefiniert',
from: 'Von',
to: 'Bis',
},
},
// Maintenance page
maintenance: {
title: 'Wartung',
overview: 'Übersicht',
allOk: 'Alle Wartungen aktuell',
dueCount: '{{count}} Aufgabe fällig',
dueCount_plural: '{{count}} Aufgaben fällig',
warningCount: '{{count}} Warnung',
warningCount_plural: '{{count}} Warnungen',
totalPrintTime: 'Gesamtdruckzeit',
nextMaintenance: 'Nächste Wartung',
nothingDue: 'Nichts fällig',
tasks: 'Aufgaben',
lastPerformed: 'Zuletzt durchgeführt',
interval: 'Intervall',
hoursRemaining: '{{hours}}h verbleibend',
hoursOverdue: '{{hours}}h überfällig',
markDone: 'Als erledigt markieren',
performMaintenance: 'Wartung durchführen',
history: 'Verlauf',
noHistory: 'Kein Wartungsverlauf',
editPrintHours: 'Druckstunden bearbeiten',
currentHours: 'Aktuelle Stunden',
// Tabs
statusTab: 'Status',
settingsTab: 'Einstellungen',
// Status
overdueCount: '{{count}} überfällig',
dueSoonCount: '{{count}} bald fällig',
dueSoon: 'Bald fällig',
allGood: 'Alles in Ordnung',
overdueBy: 'Überfällig um {{duration}}',
dueIn: 'Fällig in {{duration}}',
timeLeft: '{{duration}} verbleibend',
// Duration formats
day: '1 Tag',
days: '{{count}} Tage',
week: '1 Woche',
weeks: '{{count}} Wochen',
month: '1 Monat',
months: '{{count}} Monate',
year: '1 Jahr',
// Settings
maintenanceTypes: 'Wartungstypen',
maintenanceTypesDescription: 'Systemtypen und Ihre benutzerdefinierten Wartungsaufgaben',
addCustomType: 'Benutzerdefinierten Typ hinzufügen',
restoreDefaults: 'Standardaufgaben wiederherstellen',
intervalType: 'Intervalltyp',
intervalValue: 'Intervall ({{type}})',
icon: 'Symbol',
documentationLink: 'Dokumentationslink (optional)',
assignToPrinters: 'Druckern zuweisen',
selectAtLeastOnePrinter: 'Wählen Sie mindestens einen Drucker',
addType: 'Typ hinzufügen',
custom: 'Benutzerdefiniert',
printHours: 'Druckstunden',
calendarDays: 'Kalendertage',
exampleName: 'z.B. HEPA-Filter ersetzen',
viewDocumentation: 'Dokumentation anzeigen',
timeBasedInterval: 'Zeitbasiertes Intervall',
// Interval overrides
intervalOverrides: 'Intervall-Überschreibungen',
intervalOverridesDescription: 'Intervalle für bestimmte Drucker anpassen',
// Printer assignment
assignedToPrinters: 'Druckern zugewiesen:',
noPrintersAssigned: 'Keine Drucker zugewiesen',
addPrinterShort: 'Hinzufügen:',
printersAssignedClick: '{{count}} Drucker zugewiesen - klicken zum Verwalten',
removeFromPrinter: 'Von diesem Drucker entfernen',
// Types
types: {
lubricateCarbonRods: 'Karbonstäbe schmieren',
lubricateRails: 'Linearschienen schmieren',
cleanNozzle: 'Düse/Hotend reinigen',
checkBelts: 'Riemenspannung prüfen',
cleanBuildPlate: 'Druckbett reinigen',
checkExtruder: 'Extruderzahnräder prüfen',
checkCooling: 'Kühlungslüfter prüfen',
generalInspection: 'Allgemeine Inspektion',
cleanCarbonRods: 'Kohlenstoffstangen reinigen',
lubricateSteelRods: 'Stahlstangen schmieren',
cleanSteelRods: 'Stahlstangen reinigen',
cleanLinearRails: 'Linearschienen reinigen',
checkPtfeTube: 'PTFE-Schlauch prüfen',
replaceHepaFilter: 'HEPA-Filter ersetzen',
replaceCarbonFilter: 'Aktivkohlefilter ersetzen',
lubricateLeftNozzleRail: 'Linke Düsenschiene schmieren',
},
// Toast
maintenanceComplete: 'Wartung als abgeschlossen markiert',
typeUpdated: 'Wartungstyp aktualisiert',
typeDeleted: 'Wartungstyp gelöscht',
defaultsRestored: '{{count}} Standardaufgabe(n) wiederhergestellt',
printHoursUpdated: 'Druckstunden aktualisiert',
printerAssigned: 'Drucker zugewiesen',
printerRemoved: 'Drucker entfernt',
// Confirmation
deleteTypeConfirm: '"{{name}}" löschen?',
deleteSystemTypeTitle: 'Standard-Wartungsaufgabe löschen?',
deleteSystemTypeMessage: 'Möchten Sie die Standard-Wartungsaufgabe "{{name}}" wirklich löschen?',
// Permissions
noPermissionUpdate: 'Sie haben keine Berechtigung, Wartungselemente zu aktualisieren',
noPermissionPerform: 'Sie haben keine Berechtigung, Wartungen durchzuführen',
noPermissionEditTypes: 'Sie haben keine Berechtigung, Wartungstypen zu bearbeiten',
noPermissionDeleteTypes: 'Sie haben keine Berechtigung, Wartungstypen zu löschen',
noPermissionEditHours: 'Sie haben keine Berechtigung, Druckstunden zu bearbeiten',
noPermissionRemovePrinter: 'Sie haben keine Berechtigung, Druckerzuweisungen zu entfernen',
noPermissionAssignPrinter: 'Sie haben keine Berechtigung, Drucker zuzuweisen',
noPermissionEditIntervals: 'Sie haben keine Berechtigung, Intervalle zu bearbeiten',
// Configure link
configureSettings: 'Wartungstypen und Intervalle konfigurieren',
},
// Settings page
settings: {
title: 'Einstellungen',
general: 'Allgemein',
// Tab names
tabs: {
general: 'Allgemein',
smartPlugs: 'Smart Plugs',
notifications: 'Benachrichtigungen',
filament: 'Filament',
network: 'Netzwerk',
apiKeys: 'API-Schlüssel',
virtualPrinter: 'Virtueller Drucker',
users: 'Authentifizierung',
backup: 'Sicherung',
emailAuth: 'E-Mail-Authentifizierung',
},
// Email settings
email: {
smtpSettings: 'SMTP-Konfiguration',
smtpHost: 'SMTP-Server',
smtpPort: 'SMTP-Port',
security: 'Sicherheit',
authentication: 'Authentifizierung',
username: 'Benutzername',
password: 'Passwort',
fromEmail: 'Absender-E-Mail',
fromName: 'Absendername',
testConnection: 'SMTP-Verbindung testen',
testRecipient: 'Test-Empfänger-E-Mail',
sendTest: 'Test-E-Mail senden',
sending: 'Wird gesendet...',
save: 'Einstellungen speichern',
saving: 'Wird gespeichert...',
advancedAuth: 'Erweiterte Authentifizierung',
advancedAuthEnabled: 'Erweiterte Authentifizierung ist aktiviert',
advancedAuthEnabledDesc: 'E-Mail-basierte Benutzerverwaltungsfunktionen sind aktiv. Neue Benutzer erhalten automatisch generierte Passwörter per E-Mail und können ihr Passwort über die Passwort vergessen Funktion zurücksetzen.',
advancedAuthDisabled: 'Erweiterte Authentifizierung ist deaktiviert',
advancedAuthDisabledDesc: 'Aktivieren Sie die erweiterte Authentifizierung, um E-Mail-basierte Funktionen für die Benutzerverwaltung zu aktivieren.',
enable: 'Aktivieren',
disable: 'Deaktivieren',
feature1: 'Passwörter werden automatisch generiert und an neue Benutzer gesendet',
feature2: 'Benutzer können sich mit Benutzername oder E-Mail anmelden',
feature3: 'Passwort vergessen Funktion ist verfügbar',
feature4: 'Administratoren können Benutzerpasswörter per E-Mail zurücksetzen',
// Error messages
errors: {
requiredFields: 'Bitte füllen Sie alle Pflichtfelder aus',
usernameRequired: 'Benutzername ist erforderlich, wenn Authentifizierung aktiviert ist',
enterTestEmail: 'Bitte geben Sie eine Test-E-Mail-Adresse ein',
smtpServerAndEmail: 'Bitte füllen Sie SMTP-Server und Absender-E-Mail aus, bevor Sie testen',
usernamePasswordRequired: 'Benutzername und Passwort sind erforderlich, wenn Authentifizierung aktiviert ist',
configureSmtpFirst: 'Bitte konfigurieren und testen Sie zuerst die SMTP-Einstellungen',
},
// Success messages
success: {
settingsSaved: 'SMTP-Einstellungen erfolgreich gespeichert',
},
// Security options
securityOptions: {
starttls: 'STARTTLS (Port 587)',
ssl: 'SSL/TLS (Port 465)',
none: 'Keine (Port 25)',
},
// Authentication options
authOptions: {
enabled: 'Aktiviert',
disabled: 'Deaktiviert',
},
},
appearance: 'Erscheinungsbild',
notifications: 'Benachrichtigungen',
smartPlugs: 'Smart Plugs',
spoolman: 'Spoolman',
updates: 'Updates',
language: 'Sprache',
languageDescription: 'Wählen Sie Ihre bevorzugte Sprache',
theme: 'Design',
themeLight: 'Hell',
themeDark: 'Dunkel',
themeSystem: 'System',
defaultView: 'Standardansicht',
defaultViewDescription: 'Seite, die beim Öffnen der App angezeigt wird',
checkForUpdates: 'Nach Updates suchen',
autoUpdate: 'Automatische Updates',
currentVersion: 'Aktuelle Version',
latestVersion: 'Neueste Version',
upToDate: 'Sie sind auf dem neuesten Stand',
updateAvailable: 'Update verfügbar',
// Notifications
notificationLanguage: 'Benachrichtigungssprache',
notificationLanguageDescription: 'Sprache für Push-Benachrichtigungen',
bedCooledThreshold: 'Bett-Abkühlung Schwellenwert',
bedCooledThresholdDescription: 'Temperatur, unter der das Bett nach einem Druck als abgekühlt gilt',
notificationProviders: 'Benachrichtigungsanbieter',
addProvider: 'Anbieter hinzufügen',
editProvider: 'Anbieter bearbeiten',
providerType: 'Anbietertyp',
testNotification: 'Testbenachrichtigung',
testSuccess: 'Testbenachrichtigung erfolgreich gesendet',
testFailed: 'Testbenachrichtigung konnte nicht gesendet werden',
quietHours: 'Ruhezeiten',
quietHoursDescription: 'Keine Störungen während dieser Zeiten',
quietHoursStart: 'Beginn',
quietHoursEnd: 'Ende',
events: {
title: 'Benachrichtigungsereignisse',
printStart: 'Druck gestartet',
printComplete: 'Druck abgeschlossen',
printFailed: 'Druck fehlgeschlagen',
printStopped: 'Druck gestoppt',
printProgress: 'Fortschrittsmeldungen',
printProgressDescription: 'Bei 25%, 50%, 75% benachrichtigen',
printerOffline: 'Drucker offline',
printerError: 'Druckerfehler',
filamentLow: 'Filament niedrig',
maintenanceDue: 'Wartung fällig',
maintenanceDueDescription: 'Benachrichtigen, wenn Wartung erforderlich',
},
// Smart Plugs
smartPlug: {
title: 'Smart Plugs',
add: 'Smart Plug hinzufügen',
edit: 'Smart Plug bearbeiten',
name: 'Name',
ipAddress: 'IP-Adresse',
linkedPrinter: 'Verknüpfter Drucker',
autoOn: 'Automatisch einschalten',
autoOnDescription: 'Einschalten beim Druckstart',
autoOff: 'Automatisch ausschalten',
autoOffDescription: 'Ausschalten nach Druckende',
offDelay: 'Ausschaltverzögerung',
offDelayMinutes: 'Minuten nach Druck',
offDelayTemp: 'Wenn Düse unter Temperatur',
currentState: 'Aktueller Status',
turnOn: 'Einschalten',
turnOff: 'Ausschalten',
},
// Filament Tracking Mode
filamentTracking: 'Filament-Verfolgung',
filamentTrackingDesc: 'Wählen Sie, wie Sie Ihre Filamentspulen verfolgen möchten. Sie können das integrierte Inventar oder einen externen Spoolman-Server verwenden.',
trackingModeBuiltIn: 'Integriertes Inventar',
trackingModeBuiltInDesc: 'RFID-Erkennung und Verbrauchserfassung inklusive',
trackingModeSpoolmanDesc: 'Externer Filament-Management-Server',
builtInFeatureRfid: 'Erkennt automatisch Bambu Lab RFID-Spulen im AMS',
builtInFeatureUsage: 'Erfasst den Filamentverbrauch pro Druck',
builtInFeatureCatalog: 'Spulen, Farben und K-Faktor-Profile verwalten',
builtInFeatureThirdParty: 'Drittanbieter-Spulen können Inventarspulen zugewiesen werden',
amsSyncButton: 'Gewichte vom AMS synchronisieren',
amsSyncTitle: 'Spulengewichte vom AMS synchronisieren',
amsSyncMessage: 'Alle Inventar-Spulengewichte werden mit den aktuellen AMS-Restwerten der verbundenen Drucker überschrieben. Verwenden Sie dies zur Wiederherstellung beschädigter Gewichtsdaten. Drucker müssen online sein.',
amsSyncing: 'Synchronisiere...',
amsSyncSuccess: '{{synced}} Spule(n) synchronisiert, {{skipped}} übersprungen',
amsSyncError: 'Synchronisierung der Gewichte vom AMS fehlgeschlagen',
// Spoolman settings
spoolmanUrl: 'Spoolman URL',
spoolmanUrlHint: 'URL Ihres Spoolman-Servers (z.B. http://localhost:7912)',
spoolmanConnected: 'Verbunden',
spoolmanDisconnected: 'Nicht verbunden',
status: 'Status',
connect: 'Verbinden',
disconnect: 'Trennen',
howSyncWorks: 'So funktioniert die Synchronisierung',
syncInfoRfidOnly: 'Nur offizielle Bambu Lab Spulen mit RFID werden synchronisiert',
syncInfoAutoCreate: 'Neue Spulen werden bei der ersten Synchronisierung automatisch in Spoolman erstellt',
syncInfoThirdPartySkipped: 'Nicht-Bambu-Lab-Spulen (Drittanbieter, nachgefüllt) werden übersprungen',
linkingExistingSpools: 'Vorhandene Spulen verknüpfen',
linkingExistingSpoolsDesc: 'Um vorhandene Spoolman-Spulen mit Ihrem AMS zu verknüpfen, fahren Sie über einen AMS-Slot und klicken Sie auf "Mit Spoolman verknüpfen".',
syncMode: 'Synchronisierungsmodus',
syncModeAuto: 'Automatisch',
syncModeManual: 'Nur manuell',
syncModeAutoDesc: 'AMS-Daten werden automatisch synchronisiert, wenn Änderungen erkannt werden',
syncModeManualDesc: 'Nur bei manueller Auslösung synchronisieren',
syncAmsData: 'AMS-Daten synchronisieren',
syncAmsDataDesc: 'AMS-Daten des Druckers manuell mit Spoolman synchronisieren',
allPrinters: 'Alle Drucker',
// Default printer
noDefaultPrinter: 'Kein Standard (jedes Mal fragen)',
// Sidebar
sidebarOrder: 'Seitenleisten-Reihenfolge',
// Camera
saveThumbnails: 'Vorschaubilder speichern',
captureFinishPhoto: 'Abschlussfoto aufnehmen',
noPrintersConfigured: 'Keine Drucker konfiguriert',
// Archive settings
archiveMode: {
always: 'Immer Archiveintrag erstellen',
never: 'Nie Archiveintrag erstellen',
ask: 'Jedes Mal fragen',
},
// Updates
checkForUpdatesLabel: 'Nach Updates suchen',
checkPrinterFirmware: 'Drucker-Firmware prüfen',
includeBetaUpdates: 'Beta-Versionen einschließen',
includeBetaUpdatesDesc: 'Über Beta- und Vorabversionen bei der Updateprüfung benachrichtigen',
// Queue
enableRetry: 'Wiederholung aktivieren',
// Home Assistant
homeAssistantDescription: 'Smart Plugs über Home Assistant steuern',
environmentManagedLabel: '(Umgebungsvariable)',
autoEnabledViaEnv: 'Automatisch über Umgebungsvariablen aktiviert',
urlFromEnvReadOnly: 'Wert wird über HA_URL Umgebungsvariable gesetzt (schreibgeschützt)',
tokenFromEnvReadOnly: 'Wert wird über HA_TOKEN Umgebungsvariable gesetzt (schreibgeschützt)',
// MQTT
mqttConnectedTo: 'Verbunden mit',
// Prometheus
prometheusDescription: 'Druckerdaten im Prometheus-Format bereitstellen',
// Smart plugs empty state
noSmartPlugsTitle: 'Keine Smart Plugs konfiguriert',
noSmartPlugsDescription: 'Fügen Sie einen Tasmota-basierten Smart Plug hinzu, um den Energieverbrauch zu verfolgen und die Stromsteuerung zu automatisieren.',
// Notifications empty state
noProvidersTitle: 'Keine Anbieter konfiguriert',
noProvidersDescription: 'Fügen Sie einen Anbieter hinzu, um Benachrichtigungen zu erhalten.',
noTemplatesAvailable: 'Keine Vorlagen verfügbar. Starten Sie das Backend neu, um Standardvorlagen zu laden.',
// API permissions
apiPermissionView: 'Druckerstatus und Warteschlange anzeigen',
apiPermissionEdit: 'Elemente zur Druckwarteschlange hinzufügen und entfernen',
// API keys
apiKeysEmptyTitle: 'Keine API-Schlüssel',
apiKeysEmptyDescription: 'Erstellen Sie einen API-Schlüssel zur Integration mit externen Diensten.',
// Users
noUsersFound: 'Keine Benutzer gefunden',
noGroupsFound: 'Keine Gruppen gefunden',
noGroupsAvailable: 'Keine Gruppen verfügbar',
passwordsDoNotMatch: 'Passwörter stimmen nicht überein',
systemGroupWarning: 'System-Gruppennamen können nicht geändert werden',
// Auth disabled
authDisabledTitle: 'Authentifizierung ist deaktiviert',
authDisabledFeature1: 'Anmeldung zum Zugriff auf das System erforderlich',
authDisabledFeature2: 'Mehrere Benutzer mit gruppenbasierten Berechtigungen erstellen',
authDisabledFeature3: 'Zugriff mit über 50 granularen Berechtigungen steuern',
// User deletion
userHasCreated: 'Dieser Benutzer hat erstellt:',
userItemsQuestion: 'Was möchten Sie mit diesen Elementen tun?',
deleteUserConfirm: 'Möchten Sie diesen Benutzer wirklich löschen?',
actionCannotBeUndone: 'Diese Aktion kann nicht rückgängig gemacht werden.',
// Smart plugs
addFirstSmartPlug: 'Ersten Smart Plug hinzufügen',
// Notifications
providers: 'Anbieter',
log: 'Protokoll',
testAll: 'Alle testen',
testResults: 'Testergebnisse',
testPassedCount: '{{count}} bestanden',
testFailedCount: '{{count}} fehlgeschlagen',
messageTemplates: 'Nachrichtenvorlagen',
messageTemplatesDescription: 'Passen Sie Benachrichtigungen für jedes Ereignis an.',
// API Keys section
apiKeys: 'API-Schlüssel',
apiKeysDescription: 'Erstellen Sie API-Schlüssel für externe Integrationen und Webhooks.',
createKey: 'Schlüssel erstellen',
apiKeyCreated: 'API-Schlüssel erfolgreich erstellt',
apiKeyCopyWarning: 'Kopieren Sie diesen Schlüssel jetzt - er wird nicht mehr angezeigt!',
useInApiBrowser: 'Im API-Browser verwenden',
createNewApiKey: 'Neuen API-Schlüssel erstellen',
keyName: 'Schlüsselname',
keyNamePlaceholder: 'z.B. Home Assistant, OctoPrint',
readStatus: 'Status lesen',
readStatusDescription: 'Druckerstatus und Warteschlange anzeigen',
manageQueue: 'Warteschlange verwalten',
manageQueueDescription: 'Elemente zur Druckwarteschlange hinzufügen und entfernen',
controlPrinter: 'Drucker steuern',
controlPrinterDescription: 'Drucke pausieren, fortsetzen und stoppen',
unnamedKey: 'Unbenannter Schlüssel',
lastUsed: 'Zuletzt verwendet',
read: 'Lesen',
control: 'Steuern',
createFirstKey: 'Ersten Schlüssel erstellen',
webhookEndpoints: 'Webhook-Endpunkte',
webhookApiKeyHint: 'Verwenden Sie Ihren API-Schlüssel im X-API-Key-Header.',
webhook: {
getAllStatus: 'Alle Druckerstatus abrufen',
getSpecificStatus: 'Spezifischen Druckerstatus abrufen',
addToQueue: 'Zur Druckwarteschlange hinzufügen',
pausePrint: 'Druck pausieren',
resumePrint: 'Druck fortsetzen',
stopPrint: 'Druck stoppen',
},
apiBrowser: 'API-Browser',
apiBrowserDescription: 'Erkunden und testen Sie alle verfügbaren API-Endpunkte.',
apiKeyForTesting: 'API-Schlüssel zum Testen',
apiKeyPlaceholder: 'Fügen Sie hier Ihren API-Schlüssel ein, um authentifizierte Endpunkte zu testen...',
apiKeyHint: 'Dieser Schlüssel wird als X-API-Key-Header mit Anfragen gesendet.',
deleteApiKeyTitle: 'API-Schlüssel löschen',
deleteApiKeyMessage: 'Möchten Sie diesen API-Schlüssel wirklich löschen? Alle Integrationen, die diesen Schlüssel verwenden, funktionieren nicht mehr.',
deleteKey: 'Schlüssel löschen',
// Filament tab
amsDisplayThresholds: 'AMS-Anzeigeschwellenwerte',
amsThresholdsDescription: 'Konfigurieren Sie Farbschwellenwerte für AMS-Feuchtigkeits- und Temperaturanzeigen.',
humidity: 'Luftfeuchtigkeit',
goodGreen: 'Gut (grün)',
fairOrange: 'Mittel (orange)',
aboveFairBad: 'Über dem mittleren Schwellenwert wird rot angezeigt (schlecht)',
temperature: 'Temperatur',
goodBlue: 'Gut (blau)',
aboveFairHot: 'Über dem mittleren Schwellenwert wird rot angezeigt (heiß)',
historyRetention: 'Verlaufsaufbewahrung',
keepSensorHistory: 'Sensorverlauf behalten für',
historyRetentionDescription: 'Ältere Feuchtigkeits- und Temperaturdaten werden automatisch gelöscht',
printModal: 'Druckdialog',
expandCustomMapping: 'Benutzerdefinierte Zuordnung standardmäßig erweitern',
expandCustomMappingDescription: 'Bei Druck auf mehrere Drucker die AMS-Zuordnung pro Drucker erweitert anzeigen',
// User management
authentication: 'Authentifizierung',
authEnabledDescription: 'Ihre Instanz ist mit Benutzerauthentifizierung gesichert',
authDisabledDescription: 'Aktivieren Sie die Anmeldepflicht und verwalten Sie den Benutzerzugriff',
authDisabledMessage: 'Aktivieren Sie die Authentifizierung, um Benutzerkonten zu erstellen, Berechtigungen zu verwalten und Ihre Bambuddy-Instanz zu sichern.',
enableAuthentication: 'Authentifizierung aktivieren',
currentUser: 'Aktueller Benutzer',
changePassword: 'Passwort ändern',
admin: 'Admin',
users: 'Benutzer',
addUser: 'Benutzer hinzufügen',
groups: 'Gruppen',
addGroup: 'Gruppe hinzufügen',
system: 'System',
noDescription: 'Keine Beschreibung',
userCount: '{{count}} Benutzer',
permissionCount: '{{count}} Berechtigungen',
createUser: 'Benutzer erstellen',
username: 'Benutzername',
enterUsername: 'Benutzername eingeben',
password: 'Passwort',
enterPassword: 'Passwort eingeben (min. 6 Zeichen)',
confirmPassword: 'Passwort bestätigen',
confirmPasswordPlaceholder: 'Passwort bestätigen',
// Title tooltips
viewReleaseOnGitHub: 'Release auf GitHub anzeigen',
turnAllPlugsOn: 'Alle Stecker einschalten',
turnAllPlugsOff: 'Alle Stecker ausschalten',
// Modal: Clear logs
clearNotificationLogs: 'Benachrichtigungsprotokolle löschen',
clearLogsMessage: 'Dadurch werden alle Benachrichtigungsprotokolle, die älter als 30 Tage sind, dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.',
clearLogs: 'Protokolle löschen',
// Modal: Reset UI
resetUiPreferences: 'UI-Einstellungen zurücksetzen',
resetUiPreferencesMessage: 'Dadurch werden alle UI-Einstellungen auf Standardwerte zurückgesetzt: Seitenleisten-Reihenfolge, Theme, Dashboard-Layout, Ansichtsmodi und Sortiereinstellungen. Ihre Drucker, Archive und Servereinstellungen werden NICHT beeinträchtigt. Die Seite wird nach dem Löschen neu geladen.',
resetPreferences: 'Einstellungen zurücksetzen',
// Modal: Delete group
deleteGroupTitle: 'Gruppe löschen',
deleteGroupMessage: 'Möchten Sie diese Gruppe wirklich löschen? Benutzer in dieser Gruppe verlieren diese Berechtigungen.',
deleteGroup: 'Gruppe löschen',
// Modal: Disable auth
disableAuthenticationTitle: 'Authentifizierung deaktivieren',
disableAuthenticationMessage: 'Möchten Sie die Authentifizierung wirklich deaktivieren? Dadurch wird Ihre Bambuddy-Instanz ohne Anmeldung zugänglich. Alle Benutzer bleiben in der Datenbank, aber die Authentifizierung wird deaktiviert.',
disableAuthentication: 'Authentifizierung deaktivieren',
// Additional settings
configureBambuddy: 'Bambuddy konfigurieren',
systemDefault: 'Systemstandard',
archiveSettings: 'Archiv-Einstellungen',
newWindow: 'Neues Fenster',
embeddedOverlay: 'Eingebettetes Overlay',
preferredSlicer: 'Bevorzugter Slicer',
preferredSlicerDescription: 'Wähle die Slicer-Anwendung zum Öffnen von Dateien',
externalCameras: 'Externe Kameras',
costTracking: 'Kostenverfolgung',
printsOnly: 'Nur Drucke',
totalConsumption: 'Gesamtverbrauch',
dataManagement: 'Datenverwaltung',
storageUsage: 'Speichernutzung',
storageUsageDescription: 'Aufschlüsselung der Datennutzung nach Kategorie',
storageUsageTotal: 'Gesamt',
storageUsageErrors: 'Fehler',
storageUsageOtherBreakdown: 'Sonstiges (enthält statische Assets, Skripte und Konfigurationsdateien)',
storageUsageSystem: 'System',
storageUsageData: 'Daten',
storageUsageUnavailable: 'Speichernutzungsinformationen nicht verfügbar',
clearNotificationLogsDescription: 'Benachrichtigungsprotokolle älter als 30 Tage löschen',
resetUiPreferencesDescription: 'Seitenleisten-Reihenfolge, Theme, Ansichtsmodi und Layout-Einstellungen zurücksetzen. Drucker, Archive und Einstellungen werden nicht beeinflusst.',
enableHomeAssistant: 'Home Assistant aktivieren',
enableMqtt: 'MQTT aktivieren',
useTls: 'TLS verwenden',
enableMetricsEndpoint: 'Metrik-Endpunkt aktivieren',
availableMetrics: 'Verfügbare Metriken',
editUser: 'Benutzer bearbeiten',
deleteUserTitle: 'Benutzer löschen',
groupName: 'Gruppenname',
// Placeholders
leaveEmptyForAnonymous: 'Leer lassen für anonym',
leaveEmptyForNoAuth: 'Leer lassen für keine Authentifizierung',
enterNewPassword: 'Neues Passwort eingeben',
confirmNewPassword: 'Neues Passwort bestätigen',
enterGroupName: 'Gruppenname eingeben',
enterDescriptionOptional: 'Beschreibung eingeben (optional)',
enterCurrentPassword: 'Aktuelles Passwort eingeben',
enterNewPasswordMin6: 'Neues Passwort eingeben (min. 6 Zeichen)',
toast: {
keyCopied: 'Schlüssel in Zwischenablage kopiert',
copyFailed: 'Schlüssel konnte nicht kopiert werden',
keyAddedToBrowser: 'Schlüssel zum API-Browser hinzugefügt',
clearLogsFailed: 'Protokolle konnten nicht gelöscht werden',
uiPreferencesReset: 'UI-Einstellungen zurückgesetzt. Wird neu geladen...',
authDisabled: 'Authentifizierung erfolgreich deaktiviert',
authDisableFailed: 'Authentifizierung konnte nicht deaktiviert werden',
apiKeyCreated: 'API-Schlüssel erstellt',
apiKeyDeleted: 'API-Schlüssel gelöscht',
userCreated: 'Benutzer erfolgreich erstellt',
userUpdated: 'Benutzer erfolgreich aktualisiert',
userDeleted: 'Benutzer erfolgreich gelöscht',
groupCreated: 'Gruppe erfolgreich erstellt',
groupUpdated: 'Gruppe erfolgreich aktualisiert',
groupDeleted: 'Gruppe erfolgreich gelöscht',
fillRequiredFields: 'Bitte füllen Sie alle erforderlichen Felder aus',
passwordsDoNotMatch: 'Passwörter stimmen nicht überein',
passwordTooShort: 'Passwort muss mindestens 6 Zeichen lang sein',
enterGroupName: 'Bitte geben Sie einen Gruppennamen ein',
settingsSaved: 'Einstellungen gespeichert',
cameraSettingsSaved: 'Kamera-Einstellungen gespeichert',
enterCameraUrl: 'Bitte geben Sie eine Kamera-URL ein',
passwordChanged: 'Passwort erfolgreich geändert',
connectionFailed: 'Verbindung fehlgeschlagen',
testFailed: 'Test fehlgeschlagen',
cameraConnected: 'Kamera verbunden{{resolution}}',
},
testConnection: 'Verbindung testen',
catalog: {
spoolCatalog: 'Spulenkatalog',
spoolCatalogDescription: 'Leerspulengewichte nach Marke/Typ. Wird für die automatische Gewichtssuche beim Hinzufügen von Spulen verwendet.',
searchCatalog: 'Katalog durchsuchen...',
addNewEntry: 'Neuen Eintrag hinzufügen',
namePlaceholder: 'Name (z.B. Bambu Lab - Plastik)',
weight: 'Gewicht',
type: 'Typ',
default: 'Standard',
custom: 'Benutzerdefiniert',
noMatch: 'Keine Einträge entsprechen Ihrer Suche',
empty: 'Keine Einträge im Katalog',
deleteEntry: 'Eintrag löschen',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen?',
resetCatalog: 'Katalog zurücksetzen',
resetConfirm: 'Katalog auf Standardwerte zurücksetzen? Alle benutzerdefinierten Einträge werden entfernt.',
loadFailed: 'Spulenkatalog konnte nicht geladen werden',
nameWeightRequired: 'Name und Gewicht sind erforderlich',
entryAdded: 'Eintrag hinzugefügt',
addFailed: 'Eintrag konnte nicht hinzugefügt werden',
entryUpdated: 'Eintrag aktualisiert',
updateFailed: 'Eintrag konnte nicht aktualisiert werden',
entryDeleted: 'Eintrag gelöscht',
deleteFailed: 'Eintrag konnte nicht gelöscht werden',
resetSuccess: 'Katalog auf Standardwerte zurückgesetzt',
resetFailed: 'Katalog konnte nicht zurückgesetzt werden',
exported: '{{count}} Einträge exportiert',
imported: '{{added}} Einträge importiert ({{skipped}} übersprungen)',
importFailed: 'Import fehlgeschlagen: ungültiges JSON-Format',
exportTooltip: 'Katalog als JSON exportieren',
importTooltip: 'Katalog aus JSON importieren',
resetTooltip: 'Auf Standardwerte zurücksetzen',
},
colorCatalog: {
title: 'Farbkatalog',
description: 'Filamentfarben nach Hersteller/Material. Wird für die automatische Farbsuche beim Hinzufügen von Spulen verwendet.',
searchColors: 'Farben durchsuchen...',
allManufacturers: 'Alle Hersteller',
addNewColor: 'Neue Farbe hinzufügen',
manufacturer: 'Hersteller',
colorName: 'Farbname',
hex: 'Hex',
materialOptional: 'Material (optional)',
showing: '{{filtered}} von {{total}} Farben angezeigt',
noMatch: 'Keine Farben entsprechen Ihrer Suche',
empty: 'Keine Farben im Katalog',
deleteColor: 'Farbe löschen',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen?',
resetCatalog: 'Farbkatalog zurücksetzen',
resetConfirm: 'Katalog auf Standardwerte zurücksetzen? Alle benutzerdefinierten Farben werden entfernt.',
sync: 'Sync',
starting: 'Starten...',
syncTooltip: 'Von FilamentColors.xyz synchronisieren (2000+ Farben)',
loadFailed: 'Farbkatalog konnte nicht geladen werden',
fieldsRequired: 'Hersteller, Farbname und Hex-Farbe sind erforderlich',
colorAdded: 'Farbe hinzugefügt',
addFailed: 'Farbe konnte nicht hinzugefügt werden',
colorUpdated: 'Farbe aktualisiert',
updateFailed: 'Farbe konnte nicht aktualisiert werden',
colorDeleted: 'Farbe gelöscht',
deleteFailed: 'Farbe konnte nicht gelöscht werden',
resetSuccess: 'Farbkatalog auf Standardwerte zurückgesetzt',
resetFailed: 'Katalog konnte nicht zurückgesetzt werden',
syncUpToDate: 'Bereits aktuell ({{count}} Farben geprüft)',
syncComplete: '{{added}} neue Farben hinzugefügt ({{skipped}} bereits vorhanden)',
syncError: 'Sync-Fehler',
syncFailed: 'Synchronisierung von FilamentColors.xyz fehlgeschlagen',
exported: '{{count}} Farben exportiert',
imported: '{{added}} Farben importiert ({{skipped}} übersprungen)',
importFailed: 'Import fehlgeschlagen: ungültiges JSON-Format',
},
// General tab
dateFormat: 'Datumsformat',
dateFormatUs: 'US (MM/TT/JJJJ)',
dateFormatEu: 'EU (TT/MM/JJJJ)',
dateFormatIso: 'ISO (JJJJ-MM-TT)',
timeFormat: 'Zeitformat',
timeFormat12: '12-Stunden (3:30 PM)',
timeFormat24: '24-Stunden (15:30)',
defaultPrinter: 'Standarddrucker',
defaultPrinterDescription: 'Diesen Drucker für Uploads, Nachdrucke und andere Vorgänge vorauswählen.',
slicerBambuStudio: 'Bambu Studio',
slicerOrcaSlicer: 'OrcaSlicer',
sidebarOrderDescription: 'Elemente in der Seitenleiste per Drag & Drop neu anordnen. Hier auf Standardreihenfolge zurücksetzen.',
reset: 'Zurücksetzen',
// Appearance
darkMode: 'Dunkelmodus',
lightMode: 'Hellmodus',
active: '(aktiv)',
background: 'Hintergrund',
accent: 'Akzent',
style: 'Stil',
bgNeutral: 'Neutral',
bgWarm: 'Warm',
bgCool: 'Kühl',
bgOled: 'OLED Schwarz',
bgSlate: 'Schieferblau',
bgForest: 'Waldgrün',
accentGreen: 'Grün',
accentTeal: 'Türkis',
accentBlue: 'Blau',
accentOrange: 'Orange',
accentPurple: 'Lila',
accentRed: 'Rot',
styleClassic: 'Klassisch',
styleGlow: 'Leuchtend',
styleVibrant: 'Lebendig',
themeToggleHint: 'Zwischen Hell- und Dunkelmodus mit dem Sonnen-/Mondsymbol in der Seitenleiste wechseln.',
// Archive
autoArchivePrints: 'Drucke automatisch archivieren',
autoArchiveDescription: '3MF-Dateien automatisch speichern, wenn Drucke abgeschlossen sind',
saveThumbnailsDescription: 'Vorschaubilder aus 3MF-Dateien extrahieren und speichern',
captureFinishPhotoDescription: 'Foto von der Druckerkamera aufnehmen, wenn der Druck abgeschlossen ist',
ffmpegNotInstalled: 'ffmpeg nicht installiert',
ffmpegRequired: 'Kameraaufnahme benötigt ffmpeg. Installieren über brew install ffmpeg (macOS) oder apt install ffmpeg (Linux).',
// Camera
camera: 'Kamera',
cameraViewMode: 'Kamera-Ansichtsmodus',
cameraOverlayDescription: 'Kamera öffnet sich als größenveränderbares Overlay auf dem Hauptbildschirm',
cameraWindowDescription: 'Kamera öffnet sich in einem separaten Browserfenster',
externalCamerasDescription: 'Externe Kameras konfigurieren, um die eingebaute Druckerkamera zu ersetzen. Unterstützt MJPEG-Streams, RTSP, HTTP-Snapshots und USB-Kameras (V4L2). Wenn aktiviert, wird die externe Kamera für Live-Ansicht und Abschlussfotos verwendet.',
cameraPlaceholderUsb: 'Gerätepfad (/dev/video0)',
cameraPlaceholderUrl: 'Kamera-URL (rtsp://... oder http://...)',
cameraTypeMjpeg: 'MJPEG-Stream',
cameraTypeRtsp: 'RTSP-Stream',
cameraTypeSnapshot: 'HTTP-Snapshot',
cameraTypeUsb: 'USB-Kamera (V4L2)',
test: 'Testen',
connected: 'Verbunden',
disconnected: 'Getrennt',
// Cost tracking
currency: 'Währung',
defaultFilamentCost: 'Standard-Filamentkosten (pro kg)',
electricityCost: 'Stromkosten pro kWh',
energyDisplayMode: 'Energieanzeige-Modus',
energyModePrintDescription: 'Dashboard zeigt Summe der während Drucken verbrauchten Energie',
energyModeTotalDescription: 'Dashboard zeigt Gesamtenergie der Smart Plugs',
// File Manager
fileManager: 'Dateimanager',
createArchiveEntry: 'Archiveintrag beim Drucken erstellen',
createArchiveEntryDescription: 'Beim Drucken aus dem Dateimanager optional einen Archiveintrag erstellen',
lowDiskSpaceWarning: 'Warnung bei wenig Speicherplatz',
lowDiskSpaceDescription: 'Warnung anzeigen, wenn freier Speicherplatz unter diesen Schwellenwert fällt',
// Updates
printerFirmware: 'Drucker-Firmware',
checkFirmwareDescription: 'Nach Firmware-Updates von Bambu Lab suchen',
bambuddySoftware: 'Bambuddy Software',
autoCheckDescription: 'Automatisch beim Start nach neuen Versionen suchen',
checkNow: 'Jetzt prüfen',
updateAvailableVersion: 'Update verfügbar: v{{version}}',
releaseNotes: 'Versionshinweise',
updateViaDocker: 'Update über Docker Compose:',
installUpdate: 'Update installieren',
latestVersionRunning: 'Sie verwenden die neueste Version',
failedToCheckUpdates: 'Update-Prüfung fehlgeschlagen: {{error}}',
// Data Management
backupRestore: 'Sicherung & Wiederherstellung',
backupRestoreDescription: 'Einstellungen exportieren/importieren und GitHub-Backup konfigurieren',
goToBackup: 'Zur Sicherung',
// Network tab
externalUrl: 'Externe URL',
externalUrlDescription: 'Die externe URL, unter der Bambuddy erreichbar ist. Wird für Benachrichtigungsbilder und externe Integrationen verwendet.',
bambuddyUrl: 'Bambuddy-URL',
externalUrlHint: 'Protokoll und Port angeben (z.B. http://192.168.1.100:8000)',
ftpRetry: 'FTP-Wiederholung',
ftpRetryDescription: 'FTP-Operationen bei unzuverlässigem Drucker-WLAN wiederholen. Gilt für 3MF-Downloads, Druck-Uploads, Zeitraffer-Downloads und Firmware-Updates.',
autoRetryDescription: 'Fehlgeschlagene FTP-Operationen automatisch wiederholen',
retryAttempts: 'Wiederholungsversuche',
retryDelay: 'Wiederholungsverzögerung',
connectionTimeout: 'Verbindungs-Timeout',
time_one: '{{count}} Mal',
time_other: '{{count}} Mal',
second_one: '{{count}} Sekunde',
second_other: '{{count}} Sekunden',
nSeconds: '{{count}} Sekunden',
increaseForWeakWifi: 'Erhöhen für Drucker mit schwachem WLAN',
// Home Assistant
homeAssistant: 'Home Assistant',
homeAssistantFullDescription: 'Mit Home Assistant verbinden, um Smart Plugs über die HA REST-API zu steuern. Unterstützt Switch-, Light-, Input_Boolean- und Script-Entitäten.',
homeAssistantUrl: 'Home Assistant URL',
longLivedAccessToken: 'Langlebiges Zugriffstoken',
haTokenHint: 'Token in HA erstellen: Profil → Langlebige Zugriffstoken → Token erstellen',
connectionSuccessful: 'Verbindung erfolgreich',
connectionFailed: 'Verbindung fehlgeschlagen',
haConnectionSuccess: 'Erfolgreich mit Home Assistant verbunden.',
haConnectionFailed: 'Verbindung zu Home Assistant fehlgeschlagen.',
// MQTT
mqttPublishing: 'MQTT-Veröffentlichung',
mqttDescription: 'BamBuddy-Ereignisse an einen externen MQTT-Broker zur Integration mit Node-RED, Home Assistant und anderen Automatisierungssystemen veröffentlichen.',
mqttEnableDescription: 'Ereignisse an externen MQTT-Broker veröffentlichen',
brokerHostname: 'Broker-Hostname',
port: 'Port',
usernameOptional: 'Benutzername (optional)',
passwordOptional: 'Passwort (optional)',
topicPrefix: 'Topic-Präfix',
topicPrefixHint: 'Topics werden sein: {{prefix}}/printers//status, etc.',
// Prometheus
prometheusMetrics: 'Prometheus-Metriken',
prometheusEndpointDescription: 'Druckermetriken unter /api/v1/metrics für Prometheus/Grafana-Überwachung bereitstellen.',
bearerTokenOptional: 'Bearer-Token (optional)',
bearerTokenHint: 'Wenn gesetzt, müssen Anfragen Authorization: Bearer enthalten',
metricsConnectionStatus: 'Verbindungsstatus',
metricsPrinterState: 'Druckerstatus (idle/printing/etc)',
metricsPrintProgress: 'Druckfortschritt 0-100%',
metricsBedTemp: 'Betttemperatur',
metricsNozzleTemp: 'Düsentemperatur',
metricsPrintsTotal: 'Gesamtdrucke nach Ergebnis',
metricsMore: '...und mehr (Schichten, Lüfter, Warteschlange, Filamentverbrauch)',
// Smart Plugs
smartPlugsDescription: 'Smart Plugs (Tasmota oder Home Assistant) verbinden, um Stromsteuerung zu automatisieren und Energieverbrauch für Ihre Drucker zu verfolgen.',
allOn: 'Alle Ein',
allOff: 'Alle Aus',
addSmartPlug: 'Smart Plug hinzufügen',
energySummary: 'Energieübersicht',
currentPower: 'Aktuelle Leistung',
plugsOnline: '{{reachable}}/{{total}} Plugs online',
today: 'Heute',
yesterday: 'Gestern',
total: 'Gesamt',
enablePlugsForSummary: 'Plugs aktivieren, um Energieübersicht zu sehen',
addNotificationProvider: 'Hinzufügen',
// Users
systemBadge: '(System)',
creating: 'Erstellen...',
changing: 'Ändern...',
deleteUserAndItems: 'Benutzer UND dessen Elemente löschen',
deleteUserKeepItems: 'Benutzer löschen, Elemente behalten (werden herrenlos)',
ok: 'OK',
},
// Notifications (for push notifications)
notification: {
printStarted: {
title: 'Druck gestartet',
body: '{{printer}}: {{filename}} wird gedruckt',
},
printCompleted: {
title: 'Druck abgeschlossen',
body: '{{printer}}: {{filename}} erfolgreich abgeschlossen',
},
printFailed: {
title: 'Druck fehlgeschlagen',
body: '{{printer}}: {{filename}} ist fehlgeschlagen',
},
printStopped: {
title: 'Druck gestoppt',
body: '{{printer}}: {{filename}} wurde gestoppt',
},
printProgress: {
title: 'Druckfortschritt',
body: '{{printer}}: {{filename}} ist zu {{percent}}% abgeschlossen',
},
printerOffline: {
title: 'Drucker offline',
body: '{{printer}} ist offline',
},
printerError: {
title: 'Druckerfehler',
body: '{{printer}}: {{error}}',
},
filamentLow: {
title: 'Filament niedrig',
body: '{{printer}}: Filament geht zur Neige',
},
maintenanceDue: {
title: 'Wartung fällig',
body: '{{printer}}: {{items}} benötigen Aufmerksamkeit',
},
},
// Errors
errors: {
generic: 'Etwas ist schiefgelaufen',
networkError: 'Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung.',
notFound: 'Nicht gefunden',
unauthorized: 'Nicht autorisiert',
serverError: 'Serverfehler',
validationError: 'Bitte überprüfen Sie Ihre Eingabe',
printerConnectionFailed: 'Verbindung zum Drucker fehlgeschlagen',
saveFailed: 'Speichern fehlgeschlagen',
deleteFailed: 'Löschen fehlgeschlagen',
loadFailed: 'Laden der Daten fehlgeschlagen',
},
// HMS Errors modal
hmsErrors: {
title: 'Fehler - {{name}}',
noErrors: 'Keine Fehler',
viewOnWiki: 'Im Bambu Lab Wiki ansehen',
clearInstructions: 'Löschen Sie die Fehler am Drucker, um sie hier zu entfernen.',
clearErrors: 'Fehler löschen',
clearSuccess: 'HMS-Fehler gelöscht',
clearFailed: 'HMS-Fehler konnten nicht gelöscht werden',
},
// MQTT Debug modal
mqttDebug: {
title: 'MQTT-Debug-Protokoll',
searchPlaceholder: 'Topic oder Payload suchen...',
noMessages: 'Noch keine Nachrichten protokolliert',
startLoggingHint: 'Klicken Sie auf "Protokollierung starten", um MQTT-Nachrichten aufzuzeichnen',
noMessagesMatch: 'Keine Nachrichten entsprechen Ihrem Filter',
adjustFilterHint: 'Versuchen Sie, Ihre Such- oder Filterkriterien anzupassen',
incoming: 'Eingehend',
outgoing: 'Ausgehend',
loggingStopped: 'Protokollierung gestoppt',
loggingActive: 'Protokollierung aktiv - Nachrichten werden automatisch aktualisiert',
startLogging: 'Protokollierung starten',
stopLogging: 'Protokollierung stoppen',
clearLog: 'Protokoll löschen',
topic: 'Topic',
timestamp: 'Zeitstempel',
direction: 'Richtung',
all: 'Alle',
},
// Printer File Manager modal (printer internal storage)
printerFiles: {
title: 'Dateimanager',
storageUsed: 'Belegt:',
storageFree: 'Frei:',
filterPlaceholder: 'Dateien filtern...',
deleteButton: 'Löschen',
deleteFiles: '{{count}} Dateien löschen',
deleteFileConfirm: '"{{name}}" löschen? Dies kann nicht rückgängig gemacht werden.',
deleteFilesConfirm: '{{count}} ausgewählte Dateien löschen? Dies kann nicht rückgängig gemacht werden.',
noFiles: 'Keine Dateien auf dem Drucker',
loadingFiles: 'Dateien werden geladen...',
failedToLoad: 'Dateien konnten nicht geladen werden',
toast: {
filesDeleted: '{{count}} Datei(en) gelöscht',
deleteFailed: 'Löschen fehlgeschlagen: {{error}}',
},
},
// Confirmations
confirm: {
delete: 'Möchten Sie dies wirklich löschen?',
unsavedChanges: 'Sie haben ungespeicherte Änderungen. Möchten Sie wirklich verlassen?',
clearQueue: 'Möchten Sie die Warteschlange wirklich leeren?',
},
// Login page
login: {
title: 'Bambuddy Anmeldung',
subtitle: 'Melden Sie sich bei Ihrem Konto an',
username: 'Benutzername',
usernamePlaceholder: 'Benutzername eingeben',
usernameOrEmail: 'Benutzername oder E-Mail',
usernameOrEmailPlaceholder: 'Benutzername oder @ E-Mail',
password: 'Passwort',
passwordPlaceholder: 'Passwort eingeben',
signIn: 'Anmelden',
signingIn: 'Anmeldung läuft...',
forgotPassword: 'Passwort vergessen?',
loginSuccess: 'Erfolgreich angemeldet',
loginFailed: 'Anmeldung fehlgeschlagen',
enterCredentials: 'Bitte Benutzername und Passwort eingeben',
forgotPasswordTitle: 'Passwort vergessen',
forgotPasswordMessage: 'Wenn Sie Ihr Passwort vergessen haben, wenden Sie sich bitte an Ihren Systemadministrator.',
forgotPasswordEmailMessage: 'Geben Sie Ihre E-Mail-Adresse ein und wir senden Ihnen ein neues Passwort.',
emailAddress: 'E-Mail-Adresse',
emailPlaceholder: 'ihre.email@beispiel.de',
cancel: 'Abbrechen',
sending: 'Wird gesendet...',
sendResetEmail: 'Zurücksetzungs-E-Mail senden',
howToReset: 'So setzen Sie Ihr Passwort zurück:',
resetStep1: 'Kontaktieren Sie Ihren Bambuddy-Administrator',
resetStep2: 'Bitten Sie ihn, Ihr Passwort in der Benutzerverwaltung zurückzusetzen',
resetStep3: 'Er kann ein neues temporäres Passwort für Sie festlegen',
resetStep4: 'Melden Sie sich mit dem neuen Passwort an und ändern Sie es in den Einstellungen',
gotIt: 'Verstanden',
},
// Setup page
setup: {
title: 'Bambuddy Einrichtung',
subtitle: 'Konfigurieren Sie die Authentifizierung für Ihre Bambuddy-Instanz',
enableAuth: 'Authentifizierung aktivieren',
adminAccount: 'Admin-Konto',
adminAccountDesc: 'Wenn bereits Admin-Benutzer existieren, wird die Authentifizierung mit den vorhandenen Admin-Konten aktiviert. Lassen Sie die Felder unten leer, um vorhandene Admins zu verwenden, oder geben Sie neue Anmeldedaten ein, um einen neuen Admin-Benutzer zu erstellen.',
adminUsername: 'Admin-Benutzername',
adminPassword: 'Admin-Passwort',
optionalIfAdminExists: '(optional, wenn Admin-Benutzer existieren)',
adminUsernamePlaceholder: 'Admin-Benutzernamen eingeben (optional)',
adminPasswordPlaceholder: 'Admin-Passwort eingeben (optional)',
confirmPassword: 'Passwort bestätigen',
confirmPasswordPlaceholder: 'Admin-Passwort bestätigen',
settingUp: 'Einrichtung läuft...',
completeSetup: 'Einrichtung abschließen',
toast: {
authEnabledAdminCreated: 'Authentifizierung aktiviert und Admin-Benutzer erstellt',
authEnabledExistingAdmins: 'Authentifizierung mit vorhandenen Admin-Benutzern aktiviert',
setupCompleted: 'Einrichtung abgeschlossen',
enterBothCredentials: 'Bitte geben Sie sowohl Admin-Benutzernamen als auch Passwort ein, oder lassen Sie beide leer, um vorhandene Admin-Benutzer zu verwenden',
passwordsDoNotMatch: 'Passwörter stimmen nicht überein',
passwordTooShort: 'Passwort muss mindestens 6 Zeichen lang sein',
},
},
// Password change
changePassword: {
title: 'Passwort ändern',
currentPassword: 'Aktuelles Passwort',
currentPasswordPlaceholder: 'Aktuelles Passwort eingeben',
newPassword: 'Neues Passwort',
newPasswordPlaceholder: 'Neues Passwort eingeben (min. 6 Zeichen)',
confirmPassword: 'Neues Passwort bestätigen',
confirmPasswordPlaceholder: 'Neues Passwort bestätigen',
passwordsDoNotMatch: 'Passwörter stimmen nicht überein',
passwordTooShort: 'Passwort muss mindestens 6 Zeichen lang sein',
changing: 'Wird geändert...',
success: 'Passwort erfolgreich geändert',
failed: 'Passwortänderung fehlgeschlagen',
},
// Plate detection alert
plateAlert: {
title: 'Druck pausiert!',
message: 'Objekte auf dem Druckbett erkannt. Der Druck wurde automatisch pausiert. Bitte räumen Sie das Druckbett und setzen Sie den Druck fort.',
understand: 'Verstanden',
},
// Camera page
camera: {
title: 'Kameraansicht',
invalidPrinterId: 'Ungültige Drucker-ID',
live: 'Live',
snapshot: 'Schnappschuss',
restartStream: 'Stream neu starten',
refreshSnapshot: 'Schnappschuss aktualisieren',
fullscreen: 'Vollbild',
exitFullscreen: 'Vollbild beenden',
connectingToCamera: 'Verbinde mit Kamera...',
capturingSnapshot: 'Schnappschuss wird aufgenommen...',
connectionLost: 'Verbindung verloren',
connectionFailed: 'Kameraverbindung fehlgeschlagen',
reconnecting: 'Neuverbindung in {{countdown}}s... (Versuch {{attempt}}/{{max}})',
reconnectNow: 'Jetzt verbinden',
cameraUnavailable: 'Kamera nicht verfügbar',
cameraUnavailableDesc: 'Stellen Sie sicher, dass der Drucker eingeschaltet und verbunden ist.',
noCamera: 'Keine Kamera verfügbar',
retry: 'Erneut versuchen',
cameraStream: 'Kamera-Stream',
zoomOut: 'Verkleinern',
zoomIn: 'Vergrößern',
resetZoom: 'Zoom zurücksetzen',
recording: 'Aufnahme',
startRecording: 'Aufnahme starten',
stopRecording: 'Aufnahme stoppen',
chamberLight: 'Kammerbeleuchtung umschalten',
},
// Groups management
groups: {
title: 'Gruppenverwaltung',
subtitle: 'Berechtigungsgruppen für Zugriffskontrolle verwalten',
backToSettings: 'Zurück zu Einstellungen',
createGroup: 'Gruppe erstellen',
noPermission: 'Sie haben keine Berechtigung, auf diese Seite zuzugreifen.',
system: 'System',
noDescription: 'Keine Beschreibung',
usersCount: '{{count}} Benutzer',
permissionsCount: '{{count}} Berechtigungen',
edit: 'Bearbeiten',
delete: 'Löschen',
toast: {
created: 'Gruppe erfolgreich erstellt',
updated: 'Gruppe erfolgreich aktualisiert',
deleted: 'Gruppe erfolgreich gelöscht',
enterGroupName: 'Bitte geben Sie einen Gruppennamen ein',
},
modal: {
editGroup: 'Gruppe bearbeiten',
createGroup: 'Gruppe erstellen',
cancel: 'Abbrechen',
saving: 'Speichern...',
creating: 'Erstellen...',
saveChanges: 'Änderungen speichern',
},
form: {
groupName: 'Gruppenname',
groupNamePlaceholder: 'Gruppennamen eingeben',
systemGroupWarning: 'Systemgruppennamen können nicht geändert werden',
description: 'Beschreibung',
descriptionPlaceholder: 'Beschreibung eingeben (optional)',
permissions: 'Berechtigungen ({{count}} ausgewählt)',
},
deleteModal: {
title: 'Gruppe löschen',
message: 'Sind Sie sicher, dass Sie diese Gruppe löschen möchten? Benutzer in dieser Gruppe verlieren diese Berechtigungen.',
confirm: 'Gruppe löschen',
},
editor: {
title: 'Gruppe bearbeiten',
createTitle: 'Gruppe erstellen',
search: 'Berechtigungen suchen...',
selectAll: 'Alle auswählen',
clearAll: 'Alle abwählen',
permissionsSelected: '{{count}} ausgewählt',
noResults: 'Keine Berechtigungen entsprechen Ihrer Suche',
},
},
// Users management
users: {
title: 'Benutzerverwaltung',
subtitle: 'Benutzer und deren Zugriff auf Ihre Bambuddy-Instanz verwalten',
backToSettings: 'Zurück zu Einstellungen',
createUser: 'Benutzer erstellen',
noPermission: 'Sie haben keine Berechtigung, auf diese Seite zuzugreifen.',
admin: 'Admin',
noGroups: 'Keine Gruppen',
active: 'Aktiv',
inactive: 'Inaktiv',
edit: 'Bearbeiten',
delete: 'Löschen',
system: 'System',
noGroupsAvailable: 'Keine Gruppen verfügbar',
table: {
username: 'Benutzername',
groups: 'Gruppen',
status: 'Status',
actions: 'Aktionen',
},
toast: {
created: 'Benutzer erfolgreich erstellt',
updated: 'Benutzer erfolgreich aktualisiert',
deleted: 'Benutzer erfolgreich gelöscht',
fillRequired: 'Bitte füllen Sie alle Pflichtfelder aus',
passwordsDoNotMatch: 'Passwörter stimmen nicht überein',
passwordTooShort: 'Passwort muss mindestens 6 Zeichen lang sein',
},
modal: {
createUser: 'Benutzer erstellen',
editUser: 'Benutzer bearbeiten',
cancel: 'Abbrechen',
creating: 'Erstellen...',
saving: 'Speichern...',
saveChanges: 'Änderungen speichern',
advancedAuthSubtitle: 'mit erweiterter Authentifizierung',
},
form: {
username: 'Benutzername',
usernamePlaceholder: 'Benutzernamen eingeben',
email: 'E-Mail',
emailPlaceholder: 'benutzer@beispiel.de',
password: 'Passwort',
passwordPlaceholder: 'Passwort eingeben',
confirmPassword: 'Passwort bestätigen',
confirmPasswordPlaceholder: 'Passwort bestätigen',
newPasswordPlaceholder: 'Neues Passwort eingeben',
confirmNewPasswordPlaceholder: 'Neues Passwort bestätigen',
leaveBlankToKeep: 'leer lassen, um das aktuelle zu behalten',
groups: 'Gruppen',
optional: 'optional',
autoGeneratedPassword: 'Ein sicheres Passwort wird automatisch generiert und per E-Mail an den Benutzer gesendet.',
passwordManagedByAdvancedAuth: 'Das Passwort wird durch erweiterte Authentifizierung verwaltet. Verwenden Sie "Passwort zurücksetzen", um ein neues Passwort per E-Mail an den Benutzer zu senden.',
resetPassword: 'Passwort zurücksetzen',
resettingPassword: 'Passwort wird zurückgesetzt...',
},
deleteModal: {
title: 'Benutzer löschen',
message: 'Sind Sie sicher, dass Sie diesen Benutzer löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.',
confirm: 'Benutzer löschen',
},
},
// Stream overlay
streamOverlay: {
title: 'Stream-Overlay',
invalidPrinterId: 'Ungültige Drucker-ID',
cameraStream: 'Kamera-Stream',
progress: 'Fortschritt',
eta: 'ETA',
printerIdle: 'Drucker ist inaktiv',
printerOffline: 'Drucker offline',
status: {
printing: 'Druckt',
paused: 'Pausiert',
finished: 'Fertig',
failed: 'Fehlgeschlagen',
idle: 'Inaktiv',
unknown: 'Unbekannt',
},
},
// Profiles
profiles: {
title: 'Profile',
subtitle: 'Verwalten Sie Ihre Slicer-Voreinstellungen und Druckvorschub-Kalibrierungen',
tabs: {
cloud: 'Cloud-Profile',
local: 'Lokale Profile',
kprofiles: 'K-Profile',
},
localProfiles: {
title: 'Lokale Profile',
subtitle: 'Slicer-Voreinstellungen aus OrcaSlicer importieren und verwalten',
import: 'Profile importieren',
importDesc: '.bbscfg-, .bbsflmt-, .orca_filament-, .zip- oder .json-Dateien hier ablegen',
importing: 'Importiere...',
search: 'Lokale Voreinstellungen durchsuchen...',
noPresets: 'Noch keine lokalen Voreinstellungen',
badge: 'Lokal',
edit: 'Bearbeiten',
delete: 'Löschen',
cancel: 'Abbrechen',
deleteConfirmTitle: 'Voreinstellung löschen',
deleteConfirm: 'Möchten Sie diese Voreinstellung wirklich löschen? Dies kann nicht rückgängig gemacht werden.',
source: 'Quelle',
inheritsFrom: 'Erbt von',
filamentType: 'Typ',
vendor: 'Hersteller',
compatiblePrinters: 'Drucker',
nozzleTemp: 'Düsentemperatur',
cost: 'Kosten',
density: 'Dichte',
pressureAdvance: 'Druckvorschub',
filament: 'Filament',
process: 'Prozess',
printer: 'Drucker',
toast: {
importSuccess: '{{count}} Voreinstellung(en) importiert',
importSkipped: '{{count}} Voreinstellung(en) übersprungen (Duplikate)',
importError: '{{count}} Fehler beim Import',
deleted: 'Voreinstellung gelöscht',
updated: 'Voreinstellung aktualisiert',
},
},
connectedAs: 'Verbunden als',
logout: 'Abmelden',
noLogoutPermission: 'Sie haben keine Berechtigung zum Abmelden',
failedToLoad: 'Profile konnten nicht geladen werden',
retry: 'Erneut versuchen',
time: {
justNow: 'Gerade eben',
minsAgo: 'vor {{count}}m',
hoursAgo: 'vor {{count}}h',
daysAgo: 'vor {{count}}d',
},
toast: {
loggedOut: 'Abgemeldet',
},
login: {
title: 'Mit Bambu Cloud verbinden',
subtitle: 'Synchronisieren Sie Ihre Slicer-Voreinstellungen geräteübergreifend',
email: 'E-Mail',
password: 'Passwort',
region: 'Region',
regionGlobal: 'Global',
regionChina: 'China',
verificationCode: 'Bestätigungscode',
totpCode: 'Authenticator-Code',
checkEmail: 'Prüfen Sie Ihre E-Mail ({{email}}) für einen 6-stelligen Code',
enterTotpHint: 'Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein',
accessToken: 'Zugriffstoken',
accessTokenHint: 'Fügen Sie Ihr Bambu Lab Zugriffstoken ein (aus Bambu Studio)',
back: 'Zurück',
loginButton: 'Anmelden',
verifyButton: 'Bestätigen',
setTokenButton: 'Token setzen',
useToken: 'Stattdessen Zugriffstoken verwenden',
useEmail: 'Stattdessen mit E-Mail anmelden',
toast: {
loggedIn: 'Erfolgreich angemeldet',
codeSent: 'Bestätigungscode an Ihre E-Mail gesendet',
enterTotp: 'Geben Sie den Code aus Ihrer Authenticator-App ein',
tokenSet: 'Token erfolgreich gesetzt',
},
},
presets: {
myPreset: 'Mein Profil (bearbeitbar)',
duplicate: 'Duplizieren',
editable: 'Bearbeitbar',
failedToLoadDetails: 'Profil-Details konnten nicht geladen werden',
deleteConfirm: 'Dieses Profil löschen?',
deleteWarning: '"{{name}}" wird dauerhaft aus Bambu Cloud gelöscht. Dies kann nicht rückgängig gemacht werden.',
noDuplicatePermission: 'Sie haben keine Berechtigung zum Duplizieren von Profilen',
noEditPermission: 'Sie haben keine Berechtigung zum Bearbeiten von Profilen',
noDeletePermission: 'Sie haben keine Berechtigung zum Löschen von Profilen',
types: {
filament: 'Filament-Profil',
printer: 'Drucker-Profil',
process: 'Prozess-Profil',
},
toast: {
deleted: 'Profil gelöscht',
created: 'Profil erstellt',
updated: 'Profil aktualisiert',
duplicated: 'Profil dupliziert',
fieldAdded: 'Feld "{{key}}" hinzugefügt',
exported: 'Profil exportiert',
},
baseLabel: 'Basis: {{name}}',
currentLabel: 'Aktuell: {{name}}',
newPreset: 'Neues Profil',
editPreset: 'Profil bearbeiten',
duplicatePreset: 'Profil duplizieren',
createNewPreset: 'Neues Profil erstellen',
customizeSettings: 'Passen Sie die Einstellungen für Ihr neues Profil an',
compareWithBase: 'Mit Basis-Profil vergleichen',
compare: 'Vergleichen',
// CreatePresetModal - Basic Info
basePreset: 'Basis-Profil',
selectBasePreset: 'Basis-Profil auswählen...',
presetName: 'Profilname',
myCustomPreset: 'Mein eigenes Profil',
inheritsFrom: 'Erbt von',
dropJsonToImport: 'JSON zum Importieren ablegen',
// CreatePresetModal - Tabs
tabs: {
common: 'Allgemein',
allFields: 'Alle Felder',
},
// CreatePresetModal - All Fields Tab
availableFields: 'Verfügbare Felder',
searchFieldsPlaceholder: 'Felder suchen...',
noMatchingFields: 'Keine passenden Felder',
allFieldsAdded: 'Alle Felder hinzugefügt',
addCustomField: 'Eigenes Feld hinzufügen',
yourOverrides: 'Ihre Überschreibungen',
noOverridesYet: 'Noch keine Überschreibungen',
clickFieldsToAdd: 'Klicken Sie links auf Felder, um sie hinzuzufügen',
saveAsTemplate: 'Als Vorlage speichern',
jsonTip: 'Tipp: Ziehen Sie eine .json-Datei auf dieses Fenster, um Einstellungen zu importieren',
},
cloudView: {
searchPlaceholder: 'Profile suchen...',
templates: 'Vorlagen',
refresh: 'Aktualisieren',
newPreset: 'Neues Profil',
clearFilters: 'Filter zurücksetzen',
// Compare mode
compareMode: 'Vergleichsmodus',
selectAnotherPreset: 'Wählen Sie ein weiteres {{type}}-Profil',
clickTwoPresets: 'Klicken Sie auf zwei Profile des gleichen Typs zum Vergleichen',
selectFirst: '1. Erstes auswählen',
selectSecond: '2. Zweites auswählen',
compareNow: 'Jetzt vergleichen',
// Status row
lastSynced: 'Zuletzt synchronisiert:',
showingCount: '{{showing}} von {{total}} Profilen',
noPresetsFound: 'Keine Profile gefunden',
// Column headers
columns: {
filament: 'Filament',
process: 'Prozess',
printer: 'Drucker',
},
noFilamentPresets: 'Keine Filament-Profile',
noProcessPresets: 'Keine Prozess-Profile',
noPrinterPresets: 'Keine Drucker-Profile',
// Filters
filters: {
type: 'Typ',
owner: 'Besitzer',
printer: 'Drucker',
nozzle: 'Düse',
filament: 'Filament',
layer: 'Schicht',
all: 'Alle',
myPresets: 'Meine Profile',
builtIn: 'Voreingestellt',
process: 'Prozess',
},
// Permissions
noTemplatesPermission: 'Sie haben keine Berechtigung, Vorlagen zu verwalten',
noRefreshPermission: 'Sie haben keine Berechtigung, Profile zu aktualisieren',
noCreatePermission: 'Sie haben keine Berechtigung, Profile zu erstellen',
},
templates: {
title: 'Schnellvorlagen',
noTemplates: 'Noch keine Vorlagen',
createFirst: 'Erstellen Sie Vorlagen aus dem Preset-Editor',
typeFilter: 'Typ:',
deleteTitle: 'Vorlage löschen',
deleteWarning: 'Diese Aktion kann nicht rückgängig gemacht werden',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen?',
namePlaceholder: 'Vorlagenname',
descriptionPlaceholder: 'Beschreibung',
settingsJson: 'Einstellungen (JSON)',
fieldsCount: '{{count}} Felder',
shownInModals: 'In Dialogen angezeigt',
hiddenInModals: 'In Dialogen ausgeblendet',
apply: 'Anwenden',
toast: {
deleted: 'Vorlage gelöscht',
updated: 'Vorlage aktualisiert',
created: 'Vorlage erstellt',
applied: 'Vorlage angewendet',
},
},
},
// Support/Debug
support: {
debugLoggingActive: 'Debug-Protokollierung ist aktiv',
manageLogs: 'Verwalten',
collectItem7: 'Drucker-Verbindungsstatus und Firmware-Versionen',
collectItem8: 'Integrationsstatus (Spoolman, MQTT, HA)',
collectItem9: 'Netzwerkschnittstellen (nur Subnetze)',
collectItem10: 'Python-Paketversionen',
collectItem11: 'Datenbankzustandsprüfungen',
collectItem12: 'Docker-Umgebungsdetails',
},
// File manager
fileManager: {
title: 'Dateimanager',
subtitle: 'Organisieren und verwalten Sie Ihre Druckdateien',
uploadFiles: 'Dateien hochladen',
newFolder: 'Neuer Ordner',
folderName: 'Ordnername',
folderNamePlaceholder: 'z.B. Funktionsteile',
renameFile: 'Datei umbenennen',
renameFolder: 'Ordner umbenennen',
moveFiles: '{{count}} Datei(en) verschieben',
rootNoFolder: 'Stammverzeichnis (Kein Ordner)',
current: 'aktuell',
linkFolder: 'Ordner verknüpfen',
linkFolderDescription: '"{{name}}" mit einem Projekt oder Archiv verknüpfen für schnellen Zugriff.',
project: 'Projekt',
archive: 'Archiv',
noProjectsFound: 'Keine Projekte gefunden',
noArchivesFound: 'Keine Archive gefunden',
unlink: 'Verknüpfung aufheben',
link: 'Verknüpfen',
dragDropFiles: 'Dateien hierher ziehen',
dropFilesHere: 'Dateien hier ablegen',
orClickToBrowse: 'oder klicken zum Durchsuchen',
allFileTypesSupported: 'Alle Dateitypen werden unterstützt. ZIP-Dateien werden extrahiert.',
zipFilesDetected: 'ZIP-Dateien erkannt',
zipExtractOptions: 'ZIP-Dateien werden extrahiert. Wählen Sie, wie die Ordnerstruktur behandelt werden soll:',
preserveZipStructure: 'Ordnerstruktur aus ZIP beibehalten',
createFolderFromZip: 'Ordner aus ZIP-Dateiname erstellen',
stlThumbnailGeneration: 'STL-Vorschaubildgenerierung',
zipMayContainStl: 'ZIP-Dateien können STL-Dateien enthalten. Vorschaubilder können während der Extraktion generiert werden.',
thumbnailsCanBeGenerated: 'Vorschaubilder können für STL-Dateien generiert werden. Große Modelle benötigen möglicherweise mehr Zeit.',
generateThumbnailsForStl: 'Vorschaubilder für STL-Dateien generieren',
threemfDetected: '3MF-Dateien erkannt',
threemfExtractionInfo: 'Druckermodell, Material, Farbe und Druckeinstellungen werden automatisch aus 3MF-Dateien extrahiert.',
willBeExtracted: 'Wird extrahiert',
filesExtracted: '{{count}} Dateien extrahiert',
uploadComplete: 'Upload abgeschlossen: {{succeeded}} erfolgreich',
uploadFailed: 'Hochladen fehlgeschlagen',
zipFilesFailed: '{{count}} Dateien fehlgeschlagen',
uploading: 'Hochladen...',
changeLink: 'Verknüpfung ändern...',
linkTo: 'Verknüpfen mit...',
linkToProjectOrArchive: 'Mit Projekt oder Archiv verknüpfen',
addToQueue: 'Zur Warteschlange',
schedulePrint: 'Planen',
generateThumbnail: 'Vorschaubild generieren',
generateThumbnails: 'Vorschaubilder generieren',
generateThumbnailsForMissing: 'Vorschaubilder für STL-Dateien ohne Vorschau generieren',
gridView: 'Rasteransicht',
listView: 'Listenansicht',
lowDiskSpaceWarning: 'Warnung: Wenig Speicherplatz',
lowDiskSpaceDetails: 'Nur {{free}} frei von {{total}} gesamt. Schwellenwert ist auf {{threshold}} GB eingestellt.',
files: 'Dateien',
folders: 'Ordner',
size: 'Größe',
free: 'Frei',
allFiles: 'Alle Dateien',
wrap: 'Umbrechen',
enableTextWrapping: 'Textumbruch aktivieren',
disableTextWrapping: 'Textumbruch deaktivieren',
dragToResizeTooltip: 'Ziehen zum Ändern der Größe, Doppelklick zum Zurücksetzen',
searchFiles: 'Dateien suchen...',
allTypes: 'Alle Typen',
prints: 'Drucke',
ascending: 'Aufsteigend',
descending: 'Absteigend',
resultsCount: '{{showing}} von {{total}} Dateien',
selectAll: 'Alle auswählen',
deselectAll: 'Auswahl aufheben',
selected: '{{count}} ausgewählt',
adding: 'Hinzufügen...',
loadingFiles: 'Dateien werden geladen...',
folderIsEmpty: 'Ordner ist leer',
noFilesYet: 'Noch keine Dateien',
folderEmptyDescription: 'Laden Sie Dateien hoch oder verschieben Sie Dateien in diesen Ordner.',
noFilesDescription: 'Laden Sie Dateien hoch, um Ihre Druckdateien zu organisieren.',
noMatchingFiles: 'Keine passenden Dateien',
noMatchingFilesDescription: 'Keine Dateien entsprechen Ihren aktuellen Such- oder Filterkriterien.',
clearFilters: 'Filter zurücksetzen',
printedCount: '{{count}}x gedruckt',
uploadedBy: 'Hochgeladen von',
deleteFolder: 'Ordner löschen',
deleteFile: 'Datei löschen',
deleteFilesCount: '{{count}} Dateien löschen',
deleteFolderConfirm: 'Möchten Sie diesen Ordner wirklich löschen? Alle Dateien darin werden ebenfalls gelöscht.',
deleteFileConfirm: 'Möchten Sie diese Datei wirklich löschen?',
deleteFilesConfirm: 'Möchten Sie {{count}} ausgewählte Dateien wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.',
deleting: 'Wird gelöscht...',
noPermissionRenameFolder: 'Sie haben keine Berechtigung, Ordner umzubenennen',
noPermissionLinkFolder: 'Sie haben keine Berechtigung, Ordner zu verknüpfen',
noPermissionDeleteFolder: 'Sie haben keine Berechtigung, Ordner zu löschen',
noPermissionPrint: 'Sie haben keine Berechtigung zum Drucken',
noPermissionAddToQueue: 'Sie haben keine Berechtigung, zur Warteschlange hinzuzufügen',
noPermissionDownload: 'Sie haben keine Berechtigung, Dateien herunterzuladen',
noPermissionRenameFile: 'Sie haben keine Berechtigung, diese Datei umzubenennen',
noPermissionGenerateThumbnail: 'Sie haben keine Berechtigung, Vorschaubilder zu generieren',
noPermissionDeleteFile: 'Sie haben keine Berechtigung, diese Datei zu löschen',
noPermissionCreateFolder: 'Sie haben keine Berechtigung, Ordner zu erstellen',
noPermissionUpload: 'Sie haben keine Berechtigung, Dateien hochzuladen',
noPermissionMoveFiles: 'Sie haben keine Berechtigung, Dateien zu verschieben',
noPermissionDeleteFiles: 'Sie haben keine Berechtigung, Dateien zu löschen',
toast: {
folderCreated: 'Ordner erstellt',
folderDeleted: 'Ordner gelöscht',
fileDeleted: 'Datei gelöscht',
filesDeleted: '{{count}} Dateien gelöscht',
filesMoved: 'Dateien verschoben',
folderLinked: 'Ordner verknüpft',
folderUnlinked: 'Ordnerverknüpfung aufgehoben',
addedToQueue: '{{count}} Datei(en) zur Warteschlange hinzugefügt',
addedToQueuePartial: '{{added}} Datei(en) hinzugefügt, {{failed}} fehlgeschlagen',
failedToAddToQueue: 'Fehler beim Hinzufügen: {{error}}',
fileRenamed: 'Datei umbenannt',
folderRenamed: 'Ordner umbenannt',
thumbnailsGenerated: '{{count}} Vorschaubild(er) generiert',
thumbnailsGeneratedPartial: '{{succeeded}} Vorschaubild(er) generiert, {{failed}} fehlgeschlagen',
noStlMissingThumbnails: 'Keine STL-Dateien ohne Vorschaubild',
failedToGenerateThumbnails: 'Fehler beim Generieren der Vorschaubilder: {{error}}',
thumbnailGenerated: 'Vorschaubild generiert',
failedToGenerateThumbnail: 'Fehler beim Generieren des Vorschaubildes: {{error}}',
},
},
// Projects
projects: {
title: 'Projekte',
subtitle: 'Organisieren und verfolgen Sie Ihre 3D-Druckprojekte',
newProject: 'Neues Projekt',
editProject: 'Projekt bearbeiten',
deleteProject: 'Projekt löschen',
projectName: 'Projektname',
description: 'Beschreibung',
noProjects: 'Noch keine Projekte',
noProjectsFiltered: 'Keine {{status}} Projekte',
noProjectsFilteredHelp: 'Sie haben keine {{status}} Projekte. Projekte werden hier angezeigt, wenn sich ihr Status ändert.',
createFirst: 'Erstellen Sie Ihr erstes Projekt, um verwandte Drucke zu organisieren, den Fortschritt zu verfolgen und Ihre Builds zu verwalten.',
createFirstButton: 'Erstes Projekt erstellen',
create: 'Erstellen',
files: 'Dateien',
prints: 'Drucke',
plates: 'Platten',
parts: 'Teile',
lastModified: 'Zuletzt geändert',
deleteConfirm: 'Möchten Sie dieses Projekt wirklich löschen? Archive und Warteschlangenelemente werden getrennt, aber nicht gelöscht.',
addFiles: 'Dateien hinzufügen',
removeFile: 'Datei entfernen',
viewDetails: 'Details anzeigen',
// Modal fields
namePlaceholder: 'z.B. Voron 2.4 Build',
descriptionPlaceholder: 'Optionale Beschreibung...',
color: 'Farbe',
targetPlates: 'Ziel-Platten',
targetPlatesPlaceholder: 'z.B. 25',
targetPlatesHelp: 'Anzahl der Druckaufträge',
targetParts: 'Ziel-Teile',
targetPartsPlaceholder: 'z.B. 150',
targetPartsHelp: 'Benötigte Objekte insgesamt',
tagsLabel: 'Tags (kommagetrennt)',
tagsPlaceholder: 'z.B. voron, funktional, geschenk',
dueDate: 'Fälligkeitsdatum',
priority: 'Priorität',
priorityLow: 'Niedrig',
priorityNormal: 'Normal',
priorityHigh: 'Hoch',
priorityUrgent: 'Dringend',
// Status
statusActive: 'Aktiv',
statusCompleted: 'Abgeschlossen',
statusArchived: 'Archiviert',
done: 'Fertig',
completed: 'abgeschlossen',
failed: 'fehlgeschlagen',
inQueue: 'in Warteschlange',
noPrintsYet: 'Noch keine Drucke',
// Footer stats
printJobs: 'Druckaufträge (Platten)',
partsPrinted: 'Gedruckte Teile',
failedParts: 'Fehlgeschlagene Teile',
// Actions
import: 'Importieren',
export: 'Exportieren',
importProject: 'Projekt importieren',
exportAll: 'Alle Projekte exportieren',
loading: 'Projekte werden geladen...',
// Permissions
noEditPermission: 'Sie haben keine Berechtigung, Projekte zu bearbeiten',
noDeletePermission: 'Sie haben keine Berechtigung, Projekte zu löschen',
noCreatePermission: 'Sie haben keine Berechtigung, Projekte zu erstellen',
noImportPermission: 'Sie haben keine Berechtigung, Projekte zu importieren',
noExportPermission: 'Sie haben keine Berechtigung, Projekte zu exportieren',
// Toast
toast: {
created: 'Projekt erstellt',
updated: 'Projekt aktualisiert',
deleted: 'Projekt gelöscht',
imported: 'Projekt importiert',
multipleImported: '{{count}} Projekte importiert',
importFailed: 'Import fehlgeschlagen',
exported: 'Projekte exportiert (nur Metadaten)',
},
},
// Project detail page
projectDetail: {
notFound: 'Projekt nicht gefunden',
backToProjects: 'Zurück zu Projekten',
export: 'Exportieren',
exportProject: 'Projekt exportieren',
noExportPermission: 'Sie haben keine Berechtigung, Projekte zu exportieren',
noEditPermission: 'Sie haben keine Berechtigung, Projekte zu bearbeiten',
partOf: 'Teil von:',
priorityLabel: 'Priorität:',
noPrints: 'Noch keine Drucke in diesem Projekt',
status: {
active: 'Aktiv',
completed: 'Abgeschlossen',
archived: 'Archiviert',
},
priority: {
low: 'Niedrig',
normal: 'Normal',
high: 'Hoch',
urgent: 'Dringend',
},
dueDate: {
overdue: 'Überfällig',
today: 'Heute fällig',
daysLeft: '{{count}} Tage übrig',
},
progress: {
platesProgress: 'Platten-Fortschritt',
partsProgress: 'Teile-Fortschritt',
printJobs: 'Druckaufträge',
parts: 'Teile',
percentComplete: '{{percent}}% abgeschlossen',
remaining: '{{count}} verbleibend',
},
stats: {
printJobs: 'Druckaufträge',
total: 'gesamt',
failed: '{{count}} fehlgeschlagen',
partsPrinted: '{{count}} Teile gedruckt',
printTime: 'Druckzeit',
filamentUsed: 'Filament verbraucht',
},
cost: {
title: 'Kostenverfolgung',
filamentCost: 'Filamentkosten',
energy: 'Energie',
budget: 'Budget',
remaining: 'Verbleibend',
},
subProjects: {
title: 'Unterprojekte ({{count}})',
},
notes: {
title: 'Notizen',
noEditPermission: 'Sie haben keine Berechtigung, Notizen zu bearbeiten',
placeholder: 'Notizen zu diesem Projekt hinzufügen...',
empty: 'Noch keine Notizen. Klicken Sie auf Bearbeiten, um Notizen hinzuzufügen.',
},
files: {
title: 'Dateien',
linkFolders: 'Ordner aus dem Dateimanager verknüpfen',
forQuickAccess: 'für schnellen Zugriff auf dieses Projekt.',
fileCount: '{{count}} Datei(en)',
empty: 'Keine Ordner verknüpft. Gehen Sie zum Dateimanager und verknüpfen Sie einen Ordner mit diesem Projekt.',
},
bom: {
title: 'Stückliste',
acquired: '{{completed}}/{{total}} beschafft',
showAll: 'Alle anzeigen',
hideDone: 'Erledigte ausblenden',
addPart: 'Teil hinzufügen',
noAddPermission: 'Sie haben keine Berechtigung, Teile hinzuzufügen',
partNamePlaceholder: 'Teilename (z.B. M3x8 Schrauben)',
partName: 'Teilename',
qty: 'Menge',
price: 'Preis ({{currency}})',
sourcingUrlPlaceholder: 'Bezugsquelle-URL (optional)',
remarksPlaceholder: 'Bemerkungen (optional)',
deletePart: 'Teil löschen',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen?',
noUpdatePermission: 'Sie haben keine Berechtigung, Teile zu aktualisieren',
noEditPermission: 'Sie haben keine Berechtigung, Teile zu bearbeiten',
noDeletePermission: 'Sie haben keine Berechtigung, Teile zu löschen',
totalCost: 'Gesamtkosten:',
empty: 'Keine Teile in der Stückliste. Fügen Sie Hardware, Elektronik oder andere Komponenten hinzu, um zu verfolgen, was beschafft werden muss.',
},
timeline: {
title: 'Aktivitätsverlauf',
empty: 'Noch keine Aktivität.',
},
template: {
saveAsTemplate: 'Als Vorlage speichern',
noCreatePermission: 'Sie haben keine Berechtigung, Vorlagen zu erstellen',
},
queue: {
title: 'Warteschlange',
viewAll: 'Alle anzeigen',
printing: '{{count}} druckend',
queued: '{{count}} in Warteschlange',
},
prints: {
title: 'Drucke ({{count}})',
},
toast: {
projectUpdated: 'Projekt aktualisiert',
partAdded: 'Teil hinzugefügt',
partRemoved: 'Teil entfernt',
exportFailed: 'Export fehlgeschlagen',
projectExported: 'Projekt exportiert',
templateCreated: 'Vorlage erstellt',
},
},
// System info
system: {
title: 'Systeminformationen',
version: 'Version',
uptime: 'Laufzeit',
cpuUsage: 'CPU-Auslastung',
memoryUsage: 'Speicherauslastung',
diskUsage: 'Festplattenauslastung',
networkInfo: 'Netzwerkinformationen',
logs: 'Protokolle',
debugMode: 'Debug-Modus',
enableDebug: 'Debug-Protokollierung aktivieren',
disableDebug: 'Debug-Protokollierung deaktivieren',
downloadLogs: 'Protokolle herunterladen',
clearLogs: 'Protokolle löschen',
dockerInfo: 'Docker-Info',
containerName: 'Container-Name',
imageName: 'Image-Name',
platform: 'Plattform',
architecture: 'Architektur',
},
// Library (K Profiles)
library: {
title: 'Filament-Bibliothek',
addFilament: 'Filament hinzufügen',
editFilament: 'Filament bearbeiten',
deleteFilament: 'Filament löschen',
vendor: 'Hersteller',
material: 'Material',
color: 'Farbe',
kFactor: 'K-Faktor',
temperature: 'Temperatur',
noFilaments: 'Keine Filamente in der Bibliothek',
deleteConfirm: 'Möchten Sie dieses Filament wirklich löschen?',
importFromPrinter: 'Vom Drucker importieren',
exportToFile: 'In Datei exportieren',
},
// Spoolman
spoolman: {
title: 'Spoolman-Integration',
enabled: 'Spoolman aktiviert',
url: 'Spoolman URL',
connected: 'Verbunden',
disconnected: 'Nicht verbunden',
testConnection: 'Verbindung testen',
sync: 'Synchronisieren',
syncing: 'Synchronisiert...',
lastSync: 'Letzte Synchronisierung',
linkToSpoolman: 'Mit Spoolman verknüpfen',
openInSpoolman: 'In Spoolman öffnen',
unlinkSpool: 'Spule trennen',
selectSpool: 'Spule auswählen',
noUnlinkedSpools: 'Keine nicht verknüpften Spulen verfügbar',
linkSuccess: 'Spule erfolgreich mit Spoolman verknüpft',
linkFailed: 'Verknüpfung mit Spoolman fehlgeschlagen',
spoolId: 'Spulen-ID',
fillSourceLabel: '(Spoolman)',
weight: 'Gewicht',
remaining: 'Verbleibend',
disableWeightSync: 'AMS-Gewichtsschätzung deaktivieren',
disableWeightSyncDesc: 'Verbleibende Kapazität nicht aus AMS-Schätzungen aktualisieren. Verwenden Sie dies, wenn Sie die Verbrauchserfassung von Spoolman gegenüber den prozentualen AMS-Schätzungen bevorzugen. Neue Spulen verwenden weiterhin die AMS-Schätzung als Anfangsgewicht.',
reportPartialUsage: 'Teilverbrauch bei fehlgeschlagenen Drucken melden',
reportPartialUsageDesc: 'Wenn ein Druck fehlschlägt oder abgebrochen wird, den geschätzten Filamentverbrauch bis zu diesem Zeitpunkt basierend auf dem Schichtfortschritt melden.',
},
// Inventar
inventory: {
title: 'Spulen-Inventar',
addSpool: 'Spule hinzufügen',
editSpool: 'Spule bearbeiten',
material: 'Material',
selectMaterial: 'Material auswählen...',
subtype: 'Untertyp',
brand: 'Marke',
searchBrand: 'Marke suchen...',
useCustomBrand: '"{{brand}}" verwenden',
useCustomMaterial: 'Benutzerdefiniertes Material verwenden: {{material}}',
colorName: 'Farbname',
colorNamePlaceholder: 'Jade White, Fire Red...',
color: 'Farbe',
hexColor: 'Hex-Farbe',
pickColor: 'Benutzerdefinierte Farbe wählen',
labelWeight: 'Nenngewicht',
coreWeight: 'Leergewicht der Spule',
searchSpoolWeight: 'Spulengewicht suchen...',
weightUsed: 'Verbraucht',
currentWeight: 'Restgewicht',
measuredWeight: 'Gemessenes Gewicht',
costPerKg: 'Kosten pro kg',
measuredWeightError: 'Das gemessene Gewicht muss zwischen {{min}}g und {{max}}g liegen.',
slicerFilament: 'Slicer-Filament',
slicerFilamentName: 'Slicer-Preset-Name',
slicerPreset: 'Slicer-Preset',
searchPresets: 'Filament-Presets suchen...',
selectedPreset: 'Ausgewählt',
noPresetsFound: 'Keine Presets gefunden',
tempOverrides: 'Temperatur-Überschreibungen',
note: 'Notiz',
notePlaceholder: 'Zusätzliche Notizen zu dieser Spule...',
archive: 'Archivieren',
restore: 'Wiederherstellen',
noSpools: 'Noch keine Spulen. Fügen Sie Ihre erste Spule hinzu.',
noManualSpools: 'Keine manuell hinzugefügten Spulen verfügbar. Fügen Sie zuerst eine Spule zum Inventar hinzu.',
kProfiles: 'K-Profile',
addKProfile: 'K-Profil hinzufügen',
assignSpool: 'Spule zuweisen',
unassignSpool: 'Zuweisung aufheben',
assignSuccess: 'Spule zugewiesen und AMS-Slot konfiguriert',
assignFailed: 'Spulenzuweisung fehlgeschlagen',
selectSpool: 'Wählen Sie eine Spule für diesen Slot',
assigned: 'Zugewiesen',
assigning: 'Wird zugewiesen...',
searchSpools: 'Spulen suchen...',
allMaterials: 'Alle Materialien',
filterByBrand: 'Nach Marke filtern...',
showArchived: 'Archivierte anzeigen',
quickAdd: 'Schnellerfassung (Lager)',
quantity: 'Menge',
stock: 'Lager',
configured: 'Konfiguriert',
spoolsCreated: '{{count}} Spulen erstellt',
spoolCreated: 'Spule erstellt',
spoolUpdated: 'Spule aktualisiert',
spoolDeleted: 'Spule gelöscht',
spoolArchived: 'Spule archiviert',
spoolRestored: 'Spule wiederhergestellt',
deleteConfirm: 'Möchten Sie diese Spule wirklich löschen? Dies kann nicht rückgängig gemacht werden.',
archiveConfirm: 'Möchten Sie diese Spule wirklich archivieren?',
advancedSettings: 'Erweiterte Einstellungen',
filamentInfoTab: 'Filament-Info',
paProfileTab: 'PA-Profil',
filamentInfo: 'Filament',
additional: 'Zusätzlich',
loadingPresets: 'Cloud-Presets werden geladen...',
cloudConnected: 'Cloud verbunden',
cloudNotConnected: 'Cloud nicht verbunden (Standardwerte)',
recentColors: 'Zuletzt',
searchColors: 'Farben suchen...',
searchResults: 'Suchergebnisse',
allColors: 'Alle Farben',
commonColors: 'Häufige Farben',
showLess: 'Weniger',
showAll: 'Alle',
noColorsFound: 'Keine Farben gefunden',
noResults: 'Keine Ergebnisse',
selectMaterialFirst: 'Bitte zuerst ein Material im Filament-Info Tab auswählen.',
noPrintersConfigured: 'Keine Drucker konfiguriert. Fügen Sie Drucker hinzu.',
matchingFilter: 'Filter',
anyBrand: 'Jede Marke',
anyVariant: 'Jede Variante',
autoSelect: 'Auto-Auswahl',
matches: 'Treffer',
match: 'Treffer',
noMatches: 'Keine Treffer',
connected: 'Verbunden',
offline: 'Offline',
printerOffline: 'Drucker ist offline. Verbinden Sie ihn, um Kalibrierungsprofile anzuzeigen.',
noKProfilesMatch: 'Keine K-Profile stimmen mit dem gewählten Filament überein.',
leftNozzle: 'Linke Düse',
rightNozzle: 'Rechte Düse',
profilesSelected: 'Kalibrierungsprofil(e) ausgewählt',
// Stats & enhanced table
totalInventory: 'Gesamtbestand',
totalConsumed: 'Gesamtverbrauch',
byMaterial: 'Nach Material',
inPrinter: 'Im Drucker',
lowStock: 'Niedriger Bestand',
sinceTracking: 'Seit Beginn der Erfassung',
loadedInAms: 'Im AMS/Ext geladen',
remaining: 'Verbleibend',
weightCheck: 'Gewichtskontrolle',
lastWeighed: 'Zuletzt gewogen',
neverWeighed: 'Nie gewogen',
search: 'Spulen suchen...',
showing: 'Zeige',
to: 'bis',
of: 'von',
show: 'Zeige',
spools: 'Spulen',
spool: 'Spule',
page: 'Seite',
noSpoolsMatch: 'Keine Ergebnisse',
noSpoolsMatchDesc: 'Versuchen Sie, Ihre Suche oder Filter anzupassen.',
active: 'Aktiv',
archived: 'Archiviert',
all: 'Alle',
used: 'Verwendet',
new: 'Neu',
clearFilters: 'Filter löschen',
table: 'Tabelle',
cards: 'Karten',
net: 'Netto',
// Grouping
groupSimilar: 'Gruppieren',
groupedSpools: '{{count}} identische Spulen',
groupedRows: 'Zeilen',
// Column config
columns: 'Spalten',
configureColumns: 'Spalten konfigurieren',
configureColumnsDesc: 'Ziehen zum Neuordnen oder Pfeile verwenden. Sichtbarkeit mit dem Augensymbol umschalten.',
visible: 'sichtbar',
reset: 'Zurücksetzen',
cancel: 'Abbrechen',
applyChanges: 'Änderungen anwenden',
moveUp: 'Nach oben',
moveDown: 'Nach unten',
hideColumn: 'Spalte ausblenden',
showColumn: 'Spalte einblenden',
// Tag-Verknüpfung
linkToSpool: 'Mit Spule verknüpfen',
tagLinked: 'Tag mit Spule verknüpft',
tagLinkFailed: 'Tag-Verknüpfung fehlgeschlagen',
tagAlreadyLinked: 'Tag bereits mit anderer Spule verknüpft',
unknownTag: 'Unbekannter RFID-Tag erkannt',
// Verbrauchshistorie
usageHistory: 'Verbrauchshistorie',
noUsageHistory: 'Noch kein Verbrauch erfasst',
printName: 'Druckname',
weightConsumed: 'Verbrauchtes Gewicht',
clearHistory: 'Löschen',
historyCleared: 'Verbrauchshistorie gelöscht',
fillSourceLabel: '(Inv)',
lowStockThresholdError: 'Der Schwellenwert muss zwischen 0.1 und 99.9 liegen',
},
// Timelapse
timelapse: {
title: 'Zeitraffer',
create: 'Zeitraffer erstellen',
download: 'Herunterladen',
delete: 'Löschen',
preview: 'Vorschau',
frameRate: 'Bildrate',
quality: 'Qualität',
processing: 'Wird verarbeitet...',
noTimelapses: 'Keine Zeitraffer verfügbar',
},
// AMS
ams: {
title: 'AMS',
slot: 'Slot',
empty: 'Leer',
emptySlot: 'Leerer Slot',
unknown: 'Unbekannt',
humidity: 'Luftfeuchtigkeit',
temperature: 'Temperatur',
filamentType: 'Filamenttyp',
filamentColor: 'Farbe',
remaining: 'Verbleibend',
history: 'AMS-Verlauf',
noHistory: 'Kein Verlauf verfügbar',
configureSlot: 'Slot konfigurieren',
externalSpool: 'Externe Spule',
profile: 'Profil',
kFactor: 'K-Faktor',
fill: 'Füllstand',
configure: 'Konfigurieren',
used: 'verwendet',
remainingUnit: 'verbleibend',
},
// Print modal
printModal: {
title: 'Druck starten',
selectPrinter: 'Drucker auswählen',
selectPlate: 'Platte auswählen',
filamentMapping: 'Filamentzuordnung',
totalCost: 'Gesamtkosten:',
slotRemainingShort: ' - {{grams}}g übrig',
printSettings: 'Druckeinstellungen',
bedLeveling: 'Bett-Nivellierung',
flowCalibration: 'Fluss-Kalibrierung',
vibrationCalibration: 'Vibrations-Kalibrierung',
layerInspection: 'Erste-Schicht-Prüfung',
timelapse: 'Zeitraffer',
startPrint: 'Druck starten',
addToQueue: 'Zur Warteschlange hinzufügen',
cancel: 'Abbrechen',
noPrintersAvailable: 'Keine Drucker verfügbar',
printerBusy: 'Drucker ist beschäftigt',
printerOffline: 'Drucker ist offline',
sameTypeDifferentColor: 'Gleicher Typ, andere Farbe',
filamentTypeNotLoaded: 'Filamenttyp nicht geladen',
openCalendar: 'Kalender öffnen',
leftNozzle: 'L',
rightNozzle: 'R',
leftNozzleTooltip: 'Linke Düse',
rightNozzleTooltip: 'Rechte Düse',
filamentOverride: 'Filament-Überschreibung',
filamentOverrideHint: 'Filamente für modellbasierte Zuweisung optional überschreiben. Der Planer wird gegen die ausgewählten Filamente statt der ursprünglichen 3MF-Werte abgleichen.',
originalFilament: 'Original',
overrideWith: 'Ersetzen mit',
resetToOriginal: 'Auf Original zurücksetzen',
},
// Backup
backup: {
title: 'Sichern & Wiederherstellen',
createBackup: 'Sicherung erstellen',
restoreBackup: 'Sicherung wiederherstellen',
restoreDescription: 'Alle Daten aus einer Sicherungsdatei ersetzen',
downloadBackup: 'Sicherung herunterladen',
uploadBackup: 'Sicherung hochladen',
lastBackup: 'Letzte Sicherung',
autoBackup: 'Automatische Sicherung',
backupNow: 'Jetzt sichern',
restoreWarning: 'Warnung: Das Wiederherstellen einer Sicherung überschreibt alle aktuellen Daten.',
includeArchives: 'Archive einschließen',
includeSettings: 'Einstellungen einschließen',
includeProfiles: 'Profile einschließen',
backupSuccess: 'Sicherung erfolgreich erstellt',
restoreSuccess: 'Sicherung erfolgreich wiederhergestellt',
backupFailed: 'Sicherung fehlgeschlagen',
restoreFailed: 'Wiederherstellung fehlgeschlagen',
restoreNote: 'Virtueller Drucker wird während der Wiederherstellung gestoppt',
// GitHub Backup
githubBackup: 'GitHub Backup',
enabled: 'Aktiviert',
cloudLoginRequired: 'Bambu Cloud Login erforderlich. Melden Sie sich unter Profile → Cloud-Profile an, um GitHub-Backup zu aktivieren.',
githubDescription: 'Synchronisieren Sie Ihre Profile automatisch mit einem privaten GitHub-Repository für Backup und Versionsverlauf.',
repositoryUrl: 'Repository-URL',
personalAccessToken: 'Persönlicher Zugriffstoken',
tokenSaved: '(gespeichert)',
enterNewToken: 'Neuen Token eingeben zum Aktualisieren',
tokenHint: 'Feingranularer Token mit Lese-/Schreibberechtigung für Inhalte',
branch: 'Branch',
manualOnly: 'Nur manuell',
hourly: 'Stündlich',
daily: 'Täglich',
weekly: 'Wöchentlich',
includeInBackup: 'In Sicherung einschließen',
kProfiles: 'K-Profile',
kProfilesDescription: 'Druckvorschub-Kalibrierung von verbundenen Druckern',
noPrintersConnected: 'Keine Drucker verbunden',
printersConnected: '{{connected}}/{{total}} verbunden',
cloudProfiles: 'Cloud-Profile',
cloudProfilesDescription: 'Filament-, Drucker- und Prozessprofile aus der Bambu Cloud',
appSettings: 'App-Einstellungen',
appSettingsDescription: 'Bambuddy-Konfiguration (komplette Datenbank)',
lastBackupAt: 'Letzte Sicherung:',
noBackupsYet: 'Noch keine Sicherungen',
next: 'Nächste:',
startingBackup: 'Sicherung wird gestartet...',
test: 'Test',
enableBackup: 'Sicherung aktivieren',
testConnection: 'Verbindung testen',
enterRepoUrl: 'Repository-URL eingeben',
enterRepoAndToken: 'Repository-URL und Zugriffstoken eingeben',
repoRequired: 'Repository-URL ist erforderlich',
tokenRequired: 'Zugriffstoken ist erforderlich',
githubBackupEnabled: 'GitHub-Backup aktiviert',
tokenUpdated: 'Token aktualisiert',
settingsSaved: 'Einstellungen gespeichert',
failedToSave: 'Speichern fehlgeschlagen: {{message}}',
backupCompleteFiles: 'Sicherung abgeschlossen - {{count}} Dateien aktualisiert',
backupSkippedNoChanges: 'Sicherung übersprungen - keine Änderungen',
backupFailed2: 'Sicherung fehlgeschlagen: {{message}}',
clearedLogs: '{{count}} Protokolle gelöscht',
failedToClearLogs: 'Protokolle löschen fehlgeschlagen: {{message}}',
// History
history: 'Verlauf',
clear: 'Löschen',
date: 'Datum',
status: 'Status',
commit: 'Commit',
// Local Backup
localBackup: 'Lokale Sicherung',
localBackupDescription: 'Erstellen Sie eine vollständige Sicherung Ihrer Bambuddy-Daten einschließlich Datenbank, Archive, Uploads und aller Dateien.',
downloadBackupLabel: 'Sicherung herunterladen',
completeBackupZip: 'Vollständige Sicherung: Datenbank + alle Dateien (ZIP)',
download: 'Herunterladen',
preparingBackup: 'Sicherung wird vorbereitet...',
creatingArchive: 'Sicherungsarchiv wird erstellt... Dies kann bei großen Archiven eine Weile dauern.',
downloadingFile: 'Sicherungsdatei wird heruntergeladen...',
backupDownloaded: 'Sicherung erfolgreich heruntergeladen',
failedToCreateBackup: 'Sicherung erstellen fehlgeschlagen: {{message}}',
restore: 'Wiederherstellen',
restoreReplacesAll: 'Wiederherstellung ersetzt alle Daten.',
restoreReplacesAllDetail: 'Ihre aktuelle Datenbank und Dateien werden vollständig ersetzt. Nach der Wiederherstellung ist ein Neustart erforderlich.',
restoreConfirmTitle: 'Sicherung wiederherstellen',
restoreConfirmMessage: 'Sind Sie sicher, dass Sie von "{{filename}}" wiederherstellen möchten? Dies ersetzt Ihre aktuelle Datenbank und alle Dateien vollständig. Die Anwendung muss nach der Wiederherstellung neu gestartet werden.',
restoreConfirmButton: 'Sicherung wiederherstellen',
uploadingFile: 'Sicherungsdatei wird hochgeladen...',
backupRestoredRestart: 'Sicherung wiederhergestellt. Bitte starten Sie Bambuddy neu.',
failedToRestore: 'Sicherung wiederherstellen fehlgeschlagen. Bitte überprüfen Sie das Dateiformat.',
reloadNow: 'Jetzt neu laden',
creatingBackup: 'Sicherung erstellen',
restoringBackup: 'Sicherung wiederherstellen',
preparing: 'Vorbereiten...',
processing: 'Verarbeiten...',
doNotClosePage: 'Bitte schließen Sie diese Seite nicht und navigieren Sie nicht weg. Dieser Vorgang kann bei großen Sicherungen mehrere Minuten dauern.',
// RestoreModal
restoring: 'Wiederherstellen...',
restoreComplete: 'Wiederherstellung abgeschlossen',
restoreFailed2: 'Wiederherstellung fehlgeschlagen',
importSettings: 'Einstellungen aus einer Sicherungsdatei importieren',
pleaseWaitRestoring: 'Bitte warten Sie, während Ihre Daten wiederhergestellt werden',
selectBackupFile: 'Klicken Sie, um eine Sicherungsdatei auszuwählen (.json oder .zip)',
duplicateHandling: 'So funktioniert die Duplikatbehandlung:',
matchPrinters: 'Drucker',
matchPrintersBy: 'abgeglichen nach Seriennummer',
matchSmartPlugs: 'Smart Plugs',
matchSmartPlugsBy: 'abgeglichen nach IP-Adresse',
matchNotificationProviders: 'Benachrichtigungsanbieter',
matchNotificationProvidersBy: 'abgeglichen nach Name',
matchFilaments: 'Filamente',
matchFilamentsBy: 'abgeglichen nach Name + Typ + Marke',
matchArchives: 'Archive',
matchArchivesBy: 'abgeglichen nach Inhaltshash (immer übersprungen)',
matchPendingUploads: 'Ausstehende Uploads',
matchPendingUploadsBy: 'abgeglichen nach Dateiname',
matchSettingsTemplates: 'Einstellungen & Vorlagen',
matchSettingsTemplatesBy: 'immer überschrieben',
replaceExisting: 'Vorhandene Daten ersetzen',
keepExisting: 'Vorhandene Daten behalten',
overwriteDescription: 'Bereits vorhandene Elemente mit Sicherungsdaten überschreiben',
keepDescription: 'Nur Elemente wiederherstellen, die noch nicht vorhanden sind',
overwriteCaution: 'Achtung:',
overwriteWarning: 'Das Überschreiben ersetzt Ihre aktuellen Konfigurationen durch Daten aus der Sicherung. Drucker-Zugangscodes werden aus Sicherheitsgründen nie überschrieben.',
cancel: 'Abbrechen',
processingBackup: 'Sicherungsdatei wird verarbeitet...',
itemsRestored: 'Wiederhergestellt',
itemsSkipped: 'Übersprungen',
restored: 'Wiederhergestellt',
skippedAlreadyExist: 'Übersprungen (bereits vorhanden)',
filesCategory: 'Dateien (3MF, Thumbnails, etc.)',
andMore: '...und {{count}} weitere',
newApiKeysGenerated: 'Neue API-Schlüssel generiert',
keysShownOnce: 'Diese Schlüssel werden nur einmal angezeigt. Kopieren Sie sie jetzt!',
copy: 'Kopieren',
noDataFound: 'In der Sicherungsdatei wurden keine Daten zur Wiederherstellung gefunden.',
close: 'Schließen',
// Category labels
categories: {
settings: 'Einstellungen',
notification_providers: 'Benachrichtigungsanbieter',
notification_templates: 'Benachrichtigungsvorlagen',
smart_plugs: 'Smart Plugs',
printers: 'Drucker',
filaments: 'Filamente',
maintenance_types: 'Wartungstypen',
archives: 'Archive',
projects: 'Projekte',
pending_uploads: 'Ausstehende Uploads',
external_links: 'Externe Links',
api_keys: 'API-Schlüssel',
},
},
// Tags
tags: {
title: 'Tags',
addTag: 'Tag hinzufügen',
editTag: 'Tag bearbeiten',
deleteTag: 'Tag löschen',
tagName: 'Tag-Name',
tagColor: 'Tag-Farbe',
noTags: 'Keine Tags',
deleteConfirm: 'Möchten Sie diesen Tag wirklich löschen?',
manageTags: 'Tags verwalten',
},
// Upload modal (archives)
uploadModal: {
title: '3MF-Dateien hochladen',
dragDrop: '3MF-Dateien hierher ziehen',
or: 'oder',
browseFiles: 'Dateien durchsuchen',
extractionInfo: 'Das Druckermodell wird automatisch aus den 3MF-Datei-Metadaten extrahiert.',
uploaded: 'hochgeladen',
failed: 'fehlgeschlagen',
uploading: 'Wird hochgeladen...',
upload: 'Hochladen',
uploadFailed: 'Hochladen fehlgeschlagen',
},
// Edit archive modal
editArchive: {
title: 'Archiv bearbeiten',
name: 'Name',
namePlaceholder: 'Druckname',
printer: 'Drucker',
noPrinter: 'Kein Drucker',
project: 'Projekt',
noProject: 'Kein Projekt',
itemsPrinted: 'Gedruckte Teile',
itemsPrintedHelp: 'Anzahl der in diesem Druckauftrag produzierten Teile',
notes: 'Notizen',
notesPlaceholder: 'Notizen zu diesem Druck hinzufügen...',
externalLink: 'Externer Link',
externalLinkPlaceholder: 'https://printables.com/model/...',
externalLinkHelp: 'Link zu Printables, Thingiverse oder anderer Quelle',
tags: 'Tags',
tagsPlaceholder: 'Tags hinzufügen...',
addMoreTags: 'Weitere Tags hinzufügen...',
matchingTags: 'Übereinstimmend mit "{{query}}"',
existingTags: 'Vorhandene Tags',
clickToAdd: '(zum Hinzufügen klicken)',
status: 'Status',
failureReason: 'Fehlergrund',
selectReason: 'Grund auswählen...',
photos: 'Fotos des Druckergebnisses',
photosHelp: 'Klicken Sie auf + um Fotos Ihres Druckergebnisses hinzuzufügen',
printResult: 'Druckergebnis',
saving: 'Wird gespeichert...',
// Failure reasons
failureReasons: {
adhesionFailure: 'Haftungsfehler',
spaghettiDetached: 'Spaghetti / Abgelöst',
layerShift: 'Schichtversatz',
cloggedNozzle: 'Verstopfte Düse',
filamentRunout: 'Filament aufgebraucht',
warping: 'Verformung',
stringing: 'Fadenziehen',
underExtrusion: 'Unterextrusion',
powerFailure: 'Stromausfall',
userCancelled: 'Vom Benutzer abgebrochen',
other: 'Sonstiges',
},
// Archive statuses
statuses: {
completed: 'Abgeschlossen',
failed: 'Fehlgeschlagen',
aborted: 'Abgebrochen',
printing: 'Druckt',
},
},
// K-Profiles
kProfiles: {
title: 'K-Profile',
noPrintersConfigured: 'Keine Drucker konfiguriert',
addPrinterInSettings: 'Fügen Sie einen Drucker in den Einstellungen hinzu, um K-Profile zu verwalten',
noActivePrinters: 'Keine aktiven Drucker',
enablePrinterConnection: 'Aktivieren Sie eine Druckerverbindung, um K-Profile anzuzeigen',
loadingProfiles: 'Lade K-Profile...',
printerOffline: 'Drucker offline',
printerOfflineDesc: 'Der ausgewählte Drucker ist nicht verbunden. Schalten Sie ihn ein, um K-Profile anzuzeigen.',
noMatchingProfiles: 'Keine passenden Profile',
noMatchingProfilesDesc: 'Keine Profile entsprechen Ihren Suchkriterien',
noKProfiles: 'Keine K-Profile',
noKProfilesDesc: 'Keine Druckvorschub-Profile für {{diameter}}mm Düse gefunden',
createFirstProfile: 'Erstes Profil erstellen',
// Controls
printer: 'Drucker',
nozzle: 'Düse',
refresh: 'Aktualisieren',
addProfile: 'Profil hinzufügen',
export: 'Exportieren',
import: 'Importieren',
select: 'Auswählen',
selectAll: 'Alle auswählen',
delete: 'Löschen',
// Filters
searchPlaceholder: 'Nach Name oder Filament suchen...',
allExtruders: 'Alle Extruder',
leftOnly: 'Nur links',
rightOnly: 'Nur rechts',
allFlow: 'Alle Flusstypen',
hfOnly: 'Nur HF',
sOnly: 'Nur S',
sortName: 'Sortieren: Name',
sortKValue: 'Sortieren: K-Wert',
sortFilament: 'Sortieren: Filament',
// Dual extruder labels
leftExtruder: 'Linker Extruder',
rightExtruder: 'Rechter Extruder',
// Modal
modal: {
addTitle: 'K-Profil hinzufügen',
editTitle: 'K-Profil bearbeiten',
profileName: 'Profilname',
profileNamePlaceholder: 'Mein PLA-Profil',
kValue: 'K-Wert',
kValuePlaceholder: '0,020',
kValueHelp: 'Typischer Bereich: 0,01 - 0,06 für PLA, 0,02 - 0,10 für PETG',
filament: 'Filament',
selectFilament: 'Filament auswählen...',
noFilamentsHelp: 'Keine Filamente gefunden. Erstellen Sie zuerst ein K-Profil in Bambu Studio.',
flowType: 'Flusstyp',
highFlow: 'High Flow',
standard: 'Standard',
nozzleSize: 'Düsengröße',
extruder: 'Extruder',
extruders: 'Extruder',
left: 'Links',
right: 'Rechts',
notes: 'Notizen (lokal gespeichert)',
notesPlaceholder: 'Notizen zu diesem Profil hinzufügen...',
notesHelp: 'Notizen werden in Bambuddy gespeichert, nicht auf dem Drucker',
syncing: 'Synchronisiert mit Drucker...',
savingExtruder: 'Speichern auf Extruder {{current}}/{{total}}...',
pleaseWait: 'Bitte warten',
},
// Delete confirmation
deleteConfirm: {
title: 'Profil löschen',
cannotUndo: 'Dies kann nicht rückgängig gemacht werden',
message: 'Möchten Sie "{{name}}" wirklich vom Drucker löschen?',
},
// Bulk delete
bulkDelete: {
title: 'Profile löschen',
cannotUndo: 'Dies kann nicht rückgängig gemacht werden',
message: 'Möchten Sie wirklich {{count}} ausgewählte Profile vom Drucker löschen?',
},
// Toast
toast: {
profileSaved: 'K-Profil gespeichert',
profilesSaved: 'K-Profil auf {{count}} Extrudern gespeichert',
selectAtLeastOneExtruder: 'Bitte wählen Sie mindestens einen Extruder aus',
profileDeleted: 'K-Profil gelöscht',
profilesDeleted: '{{count}} Profile gelöscht',
exportedProfiles: '{{count}} Profile exportiert',
importedProfiles: '{{count}} von {{total}} Profilen importiert',
noProfilesToExport: 'Keine Profile zum Exportieren',
invalidFileFormat: 'Ungültiges Dateiformat',
failedToParseImport: 'Import-Datei konnte nicht gelesen werden',
failedToSaveBatch: 'K-Profile konnten nicht gespeichert werden',
noteSaved: 'Notiz gespeichert',
failedToSaveNote: 'Notiz konnte nicht gespeichert werden',
},
// Permissions
permission: {
noRead: 'Sie haben keine Berechtigung, Profile zu aktualisieren',
noCreate: 'Sie haben keine Berechtigung, Profile hinzuzufügen',
noUpdate: 'Sie haben keine Berechtigung, K-Profile zu aktualisieren',
noDelete: 'Sie haben keine Berechtigung, K-Profile zu löschen',
noExport: 'Sie haben keine Berechtigung, Profile zu exportieren',
noImport: 'Sie haben keine Berechtigung, Profile zu importieren',
},
},
// Virtual Printer
virtualPrinter: {
title: 'Virtueller Drucker',
running: 'Läuft',
stopped: 'Gestoppt',
description: {
default: 'Aktiviere einen virtuellen Drucker, der in Bambu Studio und OrcaSlicer erscheint. Dateien, die an diesen Drucker gesendet werden, werden direkt archiviert ohne zu drucken.',
proxy: 'Aktiviere einen Proxy, der Slicer-Datenverkehr an einen echten Drucker weiterleitet, um Ferndruck über jedes Netzwerk zu ermöglichen.',
},
enable: {
title: 'Virtuellen Drucker aktivieren',
visibleInSlicer: 'Sichtbar als "Bambuddy" in der Slicer-Erkennung',
proxyingTo: 'Proxy zu {{name}}',
notActive: 'Nicht aktiv',
},
model: {
title: 'Druckermodell',
description: 'Wähle welches Druckermodell emuliert werden soll.',
restartWarning: 'Das Ändern des Modells startet den virtuellen Drucker neu',
},
accessCode: {
title: 'Zugangscode',
isSet: 'Zugangscode ist gesetzt',
notSet: 'Kein Zugangscode gesetzt - erforderlich zum Aktivieren',
placeholder: '8-Zeichen-Code eingeben',
placeholderChange: 'Neuen Code eingeben zum Ändern',
hint: 'Muss genau 8 Zeichen lang sein. Wird von Slicern zur Authentifizierung verwendet.',
charCount: '({{count}}/8)',
},
targetPrinter: {
title: 'Zieldrucker',
configured: 'Proxy-Ziel konfiguriert',
notConfigured: 'Kein Zieldrucker ausgewählt - erforderlich für Proxy-Modus',
placeholder: 'Drucker auswählen...',
hint: 'Wähle den Drucker aus, an den der Slicer-Datenverkehr weitergeleitet werden soll. Der Drucker muss im LAN-Modus sein.',
noPrinters: 'Keine Drucker konfiguriert. Füge zuerst einen Drucker hinzu, um den Proxy-Modus zu verwenden.',
},
remoteInterface: {
title: 'Netzwerkschnittstelle überschreiben',
configured: 'Schnittstellenüberschreibung aktiv',
optional: 'Optional - verwenden wenn die automatisch erkannte IP falsch ist (z.B. mehrere NICs, Docker, VPN)',
placeholder: 'Automatisch erkennen (Standard)...',
hint: 'Überschreibt die per SSDP beworbene und im TLS-Zertifikat verwendete IP-Adresse. Nützlich wenn Bambuddy mehrere Netzwerkschnittstellen hat.',
},
mode: {
title: 'Modus',
archive: 'Archivieren',
archiveDesc: 'Dateien sofort archivieren',
review: 'Überprüfen',
reviewDesc: 'Vor dem Archivieren überprüfen',
queue: 'Warteschlange',
queueDesc: 'Archivieren und zur Warteschlange hinzufügen',
proxy: 'Proxy',
proxyDesc: 'An echten Drucker weiterleiten',
},
setupRequired: {
title: 'Einrichtung erforderlich',
description: 'Die virtuelle Druckerfunktion erfordert zusätzliche Systemkonfiguration, bevor sie funktioniert. Dies beinhaltet Portweiterleitung, Firewall-Regeln und plattformspezifische Einstellungen.',
readGuide: 'Lese die Einrichtungsanleitung vor dem Aktivieren',
},
howItWorks: {
title: 'So funktioniert es',
step1: 'Im selben LAN erscheinen virtuelle Drucker automatisch in deinem Slicer (Bambu Studio / OrcaSlicer). Aus anderen Netzwerken füge sie manuell per IP-Adresse und Zugangscode hinzu.',
step2: 'Im Archiv-, Überprüfungs- und Warteschlangen-Modus verwende die "Senden"-Funktion im Slicer, um 3MF-Dateien an Bambuddy zu senden. Der Slicer zeigt "Druck erfolgreich" — die Datei wird gespeichert, nicht gedruckt.',
step3: 'Im Proxy-Modus leitet der virtuelle Drucker den gesamten Datenverkehr an einen echten Drucker weiter — Drucke starten sofort wie bei einer direkten Verbindung.',
},
status: {
title: 'Status-Details',
printerName: 'Druckername',
model: 'Modell',
serialNumber: 'Seriennummer',
mode: 'Modus',
pendingFiles: 'Ausstehende Dateien',
targetPrinter: 'Zieldrucker',
ftpPort: 'FTP-Port',
mqttPort: 'MQTT-Port',
ftpConnections: 'FTP-Verbindungen',
mqttConnections: 'MQTT-Verbindungen',
},
toast: {
updated: 'Virtuelle Druckereinstellungen aktualisiert',
failedToUpdate: 'Einstellungen konnten nicht aktualisiert werden',
accessCodeRequired: 'Bitte zuerst einen Zugangscode setzen',
targetPrinterRequired: 'Bitte zuerst einen Zieldrucker auswählen',
bindIpRequired: 'Bitte zuerst eine Bind-IP setzen',
accessCodeEmpty: 'Zugangscode darf nicht leer sein',
accessCodeLength: 'Zugangscode muss genau 8 Zeichen lang sein',
created: 'Virtueller Drucker erstellt',
failedToCreate: 'Virtueller Drucker konnte nicht erstellt werden',
deleted: 'Virtueller Drucker gelöscht',
failedToDelete: 'Virtueller Drucker konnte nicht gelöscht werden',
},
list: {
title: 'Virtuelle Drucker',
add: 'Hinzufügen',
addFirst: 'Virtuellen Drucker hinzufügen',
empty: 'Keine virtuellen Drucker konfiguriert. Fügen Sie einen hinzu, um zu beginnen.',
},
bindIp: {
title: 'Bind-Interface',
placeholder: 'Interface auswählen...',
hint: 'Netzwerkinterface, an das dieser virtuelle Drucker gebunden wird. Muss pro Drucker eindeutig sein.',
},
proxy: {
accessCodeHint: 'Im Proxy-Modus den Zugangscode des Zieldruckers im Slicer verwenden. Die Verbindung wird transparent zum echten Drucker weitergeleitet.',
},
addDialog: {
title: 'Virtuellen Drucker hinzufügen',
name: 'Name',
hint: 'Sie können Zugangscode, Zieldrucker und andere Einstellungen nach dem Erstellen konfigurieren.',
create: 'Erstellen',
},
deleteConfirm: {
title: 'Virtuellen Drucker löschen',
message: 'Möchten Sie "{{name}}" wirklich löschen? Dies stoppt alle Dienste für diesen Drucker.',
},
},
// Model Viewer
modelViewer: {
openInSlicer: 'Im Slicer öffnen',
tabs: {
model: '3D-Modell',
gcode: 'G-Code Vorschau',
},
notAvailable: 'nicht verfügbar',
notSliced: 'nicht geslicet',
plates: 'Platten',
allPlates: 'Alle Platten',
plateNumber: 'Platte {{number}}',
plateCount: '{{count}} Platte',
plateCount_other: '{{count}} Platten',
objectCount: '{{count}} Objekt',
objectCount_other: '{{count}} Objekte',
filamentCount: '{{count}} Filament',
filamentCount_other: '{{count}} Filamente',
eta: 'ETA {{minutes}} Min',
noPreview: 'Keine Vorschau für diese Datei verfügbar',
pagination: {
pageOf: 'Seite {{current}} von {{total}}',
prev: 'Zurück',
next: 'Weiter',
},
errors: {
failedToLoad: 'Datei konnte nicht geladen werden',
noMeshes: 'Keine Meshes in 3MF-Datei gefunden',
unsupportedFormat: 'Nicht unterstütztes Dateiformat',
},
},
// Maintenance type descriptions (built-in)
maintenanceDescriptions: {
lubricateCarbonRods: 'Schmiermittel auf Karbonstäbe für sanfte Bewegung auftragen',
lubricateRails: 'Schmiermittel auf Linearschienen für sanfte Bewegung auftragen',
cleanNozzle: 'Hotend und Düse reinigen, um Verstopfungen zu verhindern',
checkBelts: 'Riemenspannung für präzise Drucke überprüfen',
cleanBuildPlate: 'Druckplatte für bessere Haftung reinigen',
checkExtruder: 'Extruderzahnräder auf Verschleiß prüfen',
checkCooling: 'Sicherstellen, dass Lüfter ordnungsgemäß funktionieren',
generalInspection: 'Allgemeine Druckerinspektion',
cleanCarbonRods: 'Karbonstäbe reinigen, um Reibung zu reduzieren',
lubricateSteelRods: 'Schmiermittel auf Stahlstangen für sanfte Bewegung auftragen',
cleanSteelRods: 'Stahlstangen reinigen, um Reibung zu reduzieren',
cleanLinearRails: 'Linearschienen abwischen, um Staub und Schmutz zu entfernen',
checkPtfeTube: 'PTFE-Schlauch auf Verschleiß oder Beschädigung prüfen',
replaceHepaFilter: 'HEPA-Filter für Luftqualität ersetzen',
replaceCarbonFilter: 'Aktivkohlefilter ersetzen',
lubricateLeftNozzleRail: 'Linke Düsenschiene schmieren (H2-Serie)',
},
// Smart Plugs
smartPlugs: {
offline: 'Offline',
admin: 'Admin',
openPlugAdminPage: 'Plug-Admin-Seite öffnen',
deleteSmartPlug: 'Smart Plug löschen',
turnOnSmartPlug: 'Smart Plug einschalten',
turnOffSmartPlug: 'Smart Plug ausschalten',
turnOn: 'Einschalten',
turnOff: 'Ausschalten',
addSmartPlug: {
scanningNetwork: 'Netzwerk wird durchsucht...',
chooseEntity: 'Entität auswählen...',
connectionFailed: 'Verbindung fehlgeschlagen',
searchEntities: 'Entitäten suchen...',
searchPowerSensors: 'Leistungssensoren suchen...',
searchEnergySensors: 'Energiesensoren suchen...',
placeholders: {
plugName: 'Wohnzimmer Steckdose',
mqttStateOnValue: 'ON, true, 1',
mqttSameAsPower: 'Gleich wie Leistungs-Topic oder anders',
},
},
// SmartPlugCard
linkedTo: 'Verbunden mit:',
monitorOnly: 'Nur Überwachung',
alerts: 'Alarme',
scheduleOn: 'Ein {{time}}',
scheduleOff: 'Aus {{time}}',
on: 'Ein',
off: 'Aus',
power: 'Leistung',
kwhToday: 'kWh Heute',
settings: 'Einstellungen',
automationSettings: 'Automatisierungseinstellungen',
showInSwitchbar: 'In Schaltleiste anzeigen',
quickAccessSidebar: 'Schnellzugriff über Seitenleiste',
enabled: 'Aktiviert',
enableAutomation: 'Automatisierung für diesen Stecker aktivieren',
autoOn: 'Auto Ein',
autoOnDescription: 'Einschalten wenn Druck startet',
autoOff: 'Auto Aus',
autoOffDescription: 'Ausschalten wenn Druck abgeschlossen (einmalig)',
turnOffDelayMode: 'Ausschaltverzögerungsmodus',
time: 'Zeit',
temp: 'Temp',
delayMinutes: 'Verzögerung (Minuten)',
tempThreshold: 'Temperaturschwelle (°C)',
tempThresholdDescription: 'Schaltet aus wenn die Düse unter diese Temperatur abkühlt',
edit: 'Bearbeiten',
deleteConfirm: 'Möchten Sie "{{name}}" wirklich löschen? Dies kann nicht rückgängig gemacht werden.',
turnOnConfirm: 'Möchten Sie "{{name}}" wirklich einschalten?',
turnOffConfirm: 'Möchten Sie "{{name}}" wirklich ausschalten? Dies unterbricht die Stromversorgung des angeschlossenen Geräts.',
failedToTurn: '{{name}}" konnte nicht {{action}} werden',
unknown: 'Unbekannt',
// AddSmartPlugModal
addTitle: 'Smart Plug hinzufügen',
editTitle: 'Smart Plug bearbeiten',
stopScanning: 'Suche beenden',
discoverTasmota: 'Tasmota Geräte suchen',
foundDevices: '{{count}} Gerät(e) gefunden - zum Auswählen klicken:',
noDevicesFound: 'Keine Tasmota Geräte in Ihrem Netzwerk gefunden',
haNotConfigured: 'Home Assistant ist nicht konfiguriert. Einrichtung unter',
haSettingsPath: 'Einstellungen → Netzwerk → Home Assistant',
selectEntity: 'Entität auswählen *',
ipAddress: 'IP-Adresse *',
nameLabel: 'Name *',
username: 'Benutzername',
password: 'Passwort',
authHint: 'Leer lassen, wenn Ihr Tasmota-Gerät keine Authentifizierung benötigt',
linkToPrinter: 'Mit Drucker verbinden',
noPrinter: 'Kein Drucker (nur manuelle Steuerung)',
linkingDescription: 'Verknüpfung ermöglicht automatisches Ein-/Ausschalten bei Druckstart/-ende',
powerAlerts: 'Leistungsalarme',
alertAbove: 'Alarm wenn über (W)',
alertBelow: 'Alarm wenn unter (W)',
alertDescription: 'Benachrichtigung wenn der Stromverbrauch diese Schwellenwerte überschreitet. Leer lassen um diese Richtung zu deaktivieren.',
dailySchedule: 'Tagesplan',
turnOnAt: 'Einschalten um',
turnOffAt: 'Ausschalten um',
scheduleDescription: 'Den Stecker automatisch täglich zu diesen Zeiten ein-/ausschalten. Leer lassen um diese Aktion zu überspringen.',
showOnPrinterCard: 'Auf Druckerkarte anzeigen',
displayOnPrinterCard: 'Schaltfläche auf Druckerkarte anzeigen',
connectedResult: 'Verbunden!',
deviceLabel: 'Gerät: {{name}} - ',
stateLabel: 'Status: {{state}}',
test: 'Test',
delete: 'Löschen',
save: 'Speichern',
add: 'Hinzufügen',
cancel: 'Abbrechen',
failedToStartScan: 'Suche konnte nicht gestartet werden',
nameRequired: 'Name ist erforderlich',
entityRequired: 'Entität ist für Home Assistant Stecker erforderlich',
mqttTopicRequired: 'Mindestens ein MQTT-Topic muss für Leistung, Energie oder Statusüberwachung konfiguriert sein',
loadingEntities: 'Entitäten werden geladen...',
loading: 'Laden...',
failedToLoadEntities: 'Entitäten konnten nicht geladen werden: {{error}}',
noEntitiesMatching: 'Keine Entitäten gefunden die "{{search}}" entsprechen',
noEntitiesAvailable: 'Keine Entitäten verfügbar',
searchingEntities: 'Alle Entitäten durchsuchen ({{count}} gefunden)',
showingEntities: 'Zeige switch, light, input_boolean ({{count}} verfügbar)',
energyMonitoringOptional: 'Energieüberwachung (Optional)',
energyMonitoringHint: 'Sensoren suchen und auswählen, die Leistungs-/Energiedaten liefern.',
powerSensorW: 'Leistungssensor (W)',
energyTodayKwh: 'Energie Heute (kWh)',
totalEnergyKwh: 'Gesamtenergie (kWh)',
noMatchingSensors: 'Keine passenden Sensoren',
none: 'Keine',
mqttNotConfigured: 'MQTT-Broker nicht konfiguriert. Broker-Adresse einstellen unter',
mqttSettingsPath: 'Einstellungen → Netzwerk → MQTT-Veröffentlichung',
mqttNotConfiguredSuffix: '(Sie müssen die Veröffentlichung nicht aktivieren, nur die Broker-Details ausfüllen).',
mqttMonitorOnlyDescription: 'MQTT-Stecker empfangen Leistungs-/Energiedaten über MQTT-Abonnement. Ein-/Ausschalten ist nicht verfügbar - verwenden Sie Ihren MQTT-Broker oder Ihr Home-Automation-System.',
powerMonitoring: 'Leistungsüberwachung',
energyMonitoring: 'Energieüberwachung',
stateMonitoring: 'Statusüberwachung',
optional: 'optional',
topic: 'Topic',
jsonPath: 'JSON-Pfad',
multiplier: 'Multiplikator',
onValue: 'EIN-Wert',
mqttPowerHint: 'JSON-Pfad extrahiert Wert aus JSON-Payload (z.B. "power_l1"). Leer lassen wenn Topic rohe numerische Werte sendet.\nMultiplikator 0.001 für mW→W, 1000 für kW→W verwenden.',
mqttEnergyHint: 'JSON-Pfad extrahiert Wert aus JSON-Payload. Leer lassen für rohe Werte.\nMultiplikator 0.001 für Wh→kWh, 1000 für MWh→kWh verwenden.',
mqttStateHint: 'JSON-Pfad extrahiert Wert aus JSON-Payload. Leer lassen für rohe Werte.\nEIN-Wert: der genaue String der "EIN" bedeutet. Leer lassen für Auto-Erkennung (ON, true, 1).',
noSwitchesInSwitchbar: 'Keine Schalter in der Schaltleiste',
enableSwitchbarHint: '"In Schaltleiste anzeigen" unter Einstellungen > Smart Plugs aktivieren',
},
// Notifications
notifications: {
// Provider types
providerTypes: {
callmebot: 'CallMeBot/WhatsApp',
ntfy: 'ntfy',
pushover: 'Pushover',
telegram: 'Telegram',
email: 'E-Mail',
discord: 'Discord',
webhook: 'Webhook',
},
// Provider descriptions
providerDescriptions: {
email: 'SMTP-E-Mail-Benachrichtigungen',
telegram: 'Benachrichtigungen über Telegram-Bot',
discord: 'An Discord-Kanal per Webhook senden',
ntfy: 'Kostenlose, selbst-hostbare Push-Benachrichtigungen',
pushover: 'Einfache, zuverlässige Push-Benachrichtigungen',
callmebot: 'Kostenlose WhatsApp-Benachrichtigungen über CallMeBot',
webhook: 'Generischer HTTP-POST an beliebige URL',
},
// NotificationProviderCard
lastSuccess: 'Zuletzt: {{date}}',
error: 'Fehler',
printer: 'Drucker:',
allPrinters: 'Alle Drucker',
sendTestNotification: 'Testbenachrichtigung senden',
eventSettings: 'Ereigniseinstellungen',
enabled: 'Aktiviert',
sendFromProvider: 'Benachrichtigungen von diesem Anbieter senden',
// Event categories
printEvents: 'Druckereignisse',
printerStatus: 'Druckerstatus',
amsAlarms: 'AMS-Alarme',
amsHtAlarms: 'AMS-HT-Alarme',
printQueue: 'Druckwarteschlange',
// Event tags (badges)
start: 'Start',
plateCheck: 'Plattenkontrolle',
complete: 'Abgeschlossen',
failed: 'Fehlgeschlagen',
stopped: 'Gestoppt',
progress: 'Fortschritt',
offline: 'Offline',
lowFilament: 'Filament niedrig',
maintenance: 'Wartung',
amsHumidity: 'AMS-Feuchtigkeit',
amsTemp: 'AMS-Temperatur',
amsHtHumidity: 'AMS-HT-Feuchtigkeit',
amsHtTemp: 'AMS-HT-Temperatur',
bedCooled: 'Bett abgekühlt',
quiet: 'Ruhe',
digest: 'Zusammenfassung {{time}}',
// Event labels (expanded settings)
printStarted: 'Druck gestartet',
plateNotEmpty: 'Platte nicht leer',
plateNotEmptyDescription: 'Objekte vor dem Druck erkannt',
printCompleted: 'Druck abgeschlossen',
bedCooledLabel: 'Bett abgekühlt',
bedCooledDescription: 'Bett nach dem Druck unter Schwellenwert abgekühlt',
printFailed: 'Druck fehlgeschlagen',
printStopped: 'Druck gestoppt',
progressMilestones: 'Fortschrittsmeilensteine',
progressMilestonesDescription: 'Benachrichtigung bei 25%, 50%, 75%',
printerOffline: 'Drucker offline',
printerError: 'Druckerfehler',
lowFilamentLabel: 'Filament niedrig',
maintenanceDue: 'Wartung fällig',
maintenanceDueDescription: 'Benachrichtigen, wenn Wartung erforderlich ist',
amsHumidityHigh: 'AMS-Feuchtigkeit hoch',
amsHumidityHighDescription: 'Normale AMS-Feuchtigkeit überschreitet Schwellenwert',
amsTemperatureHigh: 'AMS-Temperatur hoch',
amsTemperatureHighDescription: 'Normale AMS-Temperatur überschreitet Schwellenwert',
amsHtHumidityHigh: 'AMS-HT-Feuchtigkeit hoch',
amsHtHumidityHighDescription: 'AMS-HT-Feuchtigkeit überschreitet Schwellenwert',
amsHtTemperatureHigh: 'AMS-HT-Temperatur hoch',
amsHtTemperatureHighDescription: 'AMS-HT-Temperatur überschreitet Schwellenwert',
// Queue events
jobAdded: 'Auftrag hinzugefügt',
jobAddedDescription: 'Auftrag zur Warteschlange hinzugefügt',
jobAssigned: 'Auftrag zugewiesen',
jobAssignedDescription: 'Modellbasierter Auftrag einem Drucker zugewiesen',
jobStarted: 'Auftrag gestartet',
jobStartedDescription: 'Warteschlangenauftrag hat Druck begonnen',
jobWaiting: 'Auftrag wartet',
jobWaitingDescription: 'Auftrag wartet auf Filament',
jobSkipped: 'Auftrag übersprungen',
jobSkippedDescription: 'Auftrag übersprungen (vorheriger fehlgeschlagen)',
jobFailed: 'Auftrag fehlgeschlagen',
jobFailedDescription: 'Auftrag konnte nicht gestartet werden',
queueComplete: 'Warteschlange abgeschlossen',
queueCompleteDescription: 'Alle Warteschlangenaufträge beendet',
// Quiet hours
quietHours: 'Ruhezeiten',
noNotificationsDuring: 'Keine Benachrichtigungen während dieser Zeiten',
editProviderToChangeQuietHours: 'Anbieter bearbeiten, um Ruhezeiten zu ändern',
// Daily digest
dailyDigest: 'Tägliche Zusammenfassung',
batchNotifications: 'Benachrichtigungen zu einer täglichen Zusammenfassung bündeln',
sendAt: 'Senden um {{time}}',
editProviderToChangeDigestTime: 'Anbieter bearbeiten, um Zusammenfassungszeit zu ändern',
// Actions
edit: 'Bearbeiten',
deleteProvider: 'Benachrichtigungsanbieter löschen',
deleteConfirm: 'Sind Sie sicher, dass Sie "{{name}}" löschen möchten? Dies kann nicht rückgängig gemacht werden.',
delete: 'Löschen',
// AddNotificationModal
addTitle: 'Benachrichtigungsanbieter hinzufügen',
editTitle: 'Benachrichtigungsanbieter bearbeiten',
nameLabel: 'Name *',
namePlaceholder: 'Meine Benachrichtigungen',
providerTypeLabel: 'Anbietertyp *',
configuration: 'Konfiguration',
testConfiguration: 'Konfiguration testen',
printerFilter: 'Druckerfilter',
onlyFromPrinter: 'Nur Benachrichtigungen für Ereignisse von diesem Drucker senden',
quietHoursDnd: 'Ruhezeiten (Nicht stören)',
quietStart: 'Start',
quietEnd: 'Ende',
dailyDigestLabel: 'Tägliche Zusammenfassung',
sendDigestAt: 'Zusammenfassung senden um',
digestCollected: 'Ereignisse werden gesammelt und als einzelne Zusammenfassung zu dieser Zeit gesendet',
notificationEvents: 'Benachrichtigungsereignisse',
progressPercent: '(25%, 50%, 75%)',
bedCooledAfterPrint: '(nach Druckabschluss)',
cancel: 'Abbrechen',
save: 'Speichern',
add: 'Hinzufügen',
nameRequired: 'Name ist erforderlich',
fieldRequired: '{{field}} ist erforderlich',
// Config field labels
phoneNumber: 'Telefonnummer',
apiKey: 'API-Schlüssel',
serverUrl: 'Server-URL',
topic: 'Thema',
authToken: 'Auth-Token',
userKey: 'Benutzerschlüssel',
appToken: 'App-Token',
priority: 'Priorität',
botToken: 'Bot-Token',
chatId: 'Chat-ID',
smtpServer: 'SMTP-Server',
smtpPort: 'SMTP-Port',
security: 'Sicherheit',
authentication: 'Authentifizierung',
username: 'Benutzername',
password: 'Passwort',
fromEmail: 'Absender-E-Mail',
toEmail: 'Empfänger-E-Mail',
webhookUrl: 'Webhook-URL',
payloadFormat: 'Payload-Format',
authorization: 'Autorisierung',
titleFieldName: 'Titel-Feldname',
messageFieldName: 'Nachrichten-Feldname',
// NotificationTemplateEditor
editTemplate: 'Vorlage bearbeiten: {{name}}',
titleLabel: 'Titel',
bodyLabel: 'Inhalt',
titlePlaceholder: 'Benachrichtigungstitel...',
bodyPlaceholder: 'Benachrichtigungsinhalt...',
availableVariables: 'Verfügbare Variablen',
clickToInsert: 'Klicken, um an Cursorposition im Inhalt einzufügen',
livePreview: 'Live-Vorschau',
hide: 'Ausblenden',
show: 'Anzeigen',
loadingPreview: 'Vorschau wird geladen...',
enterTemplateContent: 'Vorlageninhalt eingeben, um Vorschau zu sehen',
titlePreview: 'Titel:',
bodyPreview: 'Inhalt:',
resetToDefault: 'Auf Standard zurücksetzen',
titleRequired: 'Titel ist erforderlich',
bodyRequired: 'Inhalt ist erforderlich',
// NotificationLogViewer
notificationLog: 'Benachrichtigungsprotokoll',
showFailedOnly: 'Nur fehlgeschlagene',
last24Hours: 'Letzte 24 Stunden',
last7Days: 'Letzte 7 Tage',
last30Days: 'Letzte 30 Tage',
last90Days: 'Letzte 90 Tage',
justNow: 'Gerade eben',
noFailedNotifications: 'Keine fehlgeschlagenen Benachrichtigungen',
noNotificationsLogged: 'Keine Benachrichtigungen protokolliert',
unknownProvider: 'Unbekannter Anbieter',
logTitle: 'Titel',
logMessage: 'Nachricht',
logError: 'Fehler',
logProvider: 'Anbieter: {{type}}',
logTime: 'Zeit: {{time}}',
refresh: 'Aktualisieren',
clearOld: 'Alte löschen',
statsSummary: 'Letzte {{days}} Tage:',
statsNotifications: 'Benachrichtigungen',
statsSent: '{{count}} gesendet',
statsFailed: '{{count}} fehlgeschlagen',
// Event type labels (for log viewer)
eventTypes: {
print_start: 'Druck gestartet',
print_complete: 'Druck abgeschlossen',
print_failed: 'Druck fehlgeschlagen',
print_stopped: 'Druck gestoppt',
print_progress: 'Fortschritt',
printer_offline: 'Drucker offline',
printer_error: 'Druckerfehler',
filament_low: 'Filament niedrig',
maintenance_due: 'Wartung fällig',
test: 'Test',
},
},
// Rich Text Editor
richTextEditor: {
bold: 'Fett',
italic: 'Kursiv',
underline: 'Unterstrichen',
bulletList: 'Aufzählungsliste',
numberedList: 'Nummerierte Liste',
alignLeft: 'Linksbündig',
alignCenter: 'Zentriert',
alignRight: 'Rechtsbündig',
addLink: 'Link hinzufügen',
removeLink: 'Link entfernen',
},
// External Links
externalLinks: {
noLinksConfigured: 'Keine externen Links konfiguriert',
deleteLink: 'Link löschen',
removeCustomIcon: 'Benutzerdefiniertes Symbol entfernen',
openInNewTab: 'In neuem Tab öffnen',
placeholders: {
linkName: 'Mein Link',
},
},
// Keyboard Shortcuts Modal
keyboardShortcuts: {
title: 'Tastaturkürzel',
navigation: 'Navigation',
archivesSection: 'Archive',
kProfilesSection: 'K-Profile',
generalSection: 'Allgemein',
shortcuts: {
goToPrinters: 'Zu Drucker gehen',
goToArchives: 'Zu Archiv gehen',
goToQueue: 'Zur Warteschlange gehen',
goToStats: 'Zu Statistiken gehen',
goToProfiles: 'Zu Cloud-Profilen gehen',
goToSettings: 'Zu Einstellungen gehen',
focusSearch: 'Suche fokussieren',
openUploadModal: 'Upload-Modal öffnen',
clearSelection: 'Auswahl löschen / Eingabe aufheben',
contextMenu: 'Kontextmenü auf Karten',
refreshProfiles: 'Profile aktualisieren',
newProfile: 'Neues Profil',
exitSelectionMode: 'Auswahlmodus beenden',
showHelp: 'Diese Hilfe anzeigen',
},
footer: 'Drücken Sie Esc oder klicken Sie außerhalb, um zu schließen',
},
// Notification Log
notificationLog: {
title: 'Benachrichtigungsprotokoll',
events: {
printStarted: 'Druck gestartet',
printComplete: 'Druck abgeschlossen',
printFailed: 'Druck fehlgeschlagen',
printStopped: 'Druck gestoppt',
progress: 'Fortschritt',
printerOffline: 'Drucker offline',
printerError: 'Druckerfehler',
lowFilament: 'Wenig Filament',
maintenanceDue: 'Wartung fällig',
test: 'Test',
},
timeAgo: {
justNow: 'Gerade eben',
minutesAgo: 'vor {{minutes}}m',
hoursAgo: 'vor {{hours}}h',
},
},
// Restore/Backup Modal
restoreBackup: {
title: 'Backup wiederherstellen',
restoring: 'Wird wiederhergestellt...',
restoreComplete: 'Wiederherstellung abgeschlossen',
restoreFailed: 'Wiederherstellung fehlgeschlagen',
importSettings: 'Einstellungen aus Backup-Datei importieren',
pleaseWait: 'Bitte warten Sie, während Ihre Daten wiederhergestellt werden',
clickToSelect: 'Klicken Sie, um Backup-Datei auszuwählen (.json oder .zip)',
howDuplicateHandling: 'So funktioniert die Duplikatbehandlung:',
categories: {
printers: 'Drucker',
smartPlugs: 'Smart Plugs',
notificationProviders: 'Benachrichtigungsanbieter',
filaments: 'Filamente',
archives: 'Archive',
pendingUploads: 'Ausstehende Uploads',
settingsTemplates: 'Einstellungen & Vorlagen',
},
matchingInfo: {
printers: 'abgeglichen nach Seriennummer',
smartPlugs: 'abgeglichen nach IP-Adresse',
notificationProviders: 'abgeglichen nach Name',
filaments: 'abgeglichen nach Name + Typ + Marke',
archives: 'abgeglichen nach Inhalts-Hash',
pendingUploads: 'abgeglichen nach Dateiname',
settingsTemplates: 'immer überschrieben',
},
replaceExisting: 'Vorhandene Daten ersetzen',
keepExisting: 'Vorhandene Daten behalten',
replaceDescription: 'Bereits vorhandene Elemente mit Backup-Daten überschreiben',
keepDescription: 'Nur Elemente wiederherstellen, die noch nicht existieren',
caution: 'Vorsicht:',
cautionText: 'Das Überschreiben ersetzt Ihre aktuellen Konfigurationen durch Backup-Daten. Drucker-Zugangscodes werden aus Sicherheitsgründen niemals überschrieben.',
itemsRestored: 'Wiederhergestellte Elemente',
itemsSkipped: 'Übersprungene Elemente',
restored: 'Wiederhergestellt',
skipped: 'Übersprungen (existieren bereits)',
filesLabel: 'Dateien (3MF, Thumbnails, etc.)',
newApiKeysGenerated: 'Neue API-Schlüssel generiert',
newApiKeysWarning: 'Diese Schlüssel werden nur einmal angezeigt. Kopieren Sie sie jetzt!',
processingBackup: 'Backup-Datei wird verarbeitet...',
noDataFound: 'In der Backup-Datei wurden keine wiederherzustellenden Daten gefunden.',
failedToRestore: 'Backup konnte nicht wiederhergestellt werden. Bitte überprüfen Sie das Dateiformat.',
},
// Backup Export Modal
backupExport: {
title: 'Backup exportieren',
selectData: 'Zu exportierende Daten auswählen',
selectAll: 'Alle auswählen',
selectNone: 'Keine auswählen',
categoryDescriptions: {
settings: 'Sprache, Theme, Update-Einstellungen',
notifications: 'ntfy, Pushover, Discord, usw.',
templates: 'Benutzerdefinierte Nachrichtenvorlagen',
smartPlugs: 'Tasmota-Plug-Konfigurationen',
externalLinks: 'Seitenleiste Links zu externen Diensten',
printers: 'Druckerinformationen (Zugangscodes ausgeschlossen)',
plateDetection: 'Leere Platten-Referenzbilder',
filaments: 'Filamenttypen und -kosten',
maintenance: 'Benutzerdefinierte Wartungspläne',
archives: 'Alle Druckdaten + Dateien (3MF, Thumbnails, Fotos)',
projects: 'Projekte, BOM-Elemente und Anhänge',
pendingUploads: 'Virtueller Drucker-Uploads zur Überprüfung',
apiKeys: 'Webhook-API-Schlüssel (neue Schlüssel bei Import generiert)',
},
requiresPrinters: 'Drucker müssen ausgewählt sein',
zipFileWarning: 'ZIP-Datei wird erstellt.',
zipFileDescription: 'Enthält alle 3MF-Dateien, Thumbnails, Zeitraffer und Fotos. Dies kann eine Weile dauern und zu einer großen Datei führen.',
includeAccessCodes: 'Zugangscodes einschließen',
includeAccessCodesDescription: 'Für die Übertragung auf eine andere Maschine',
includeAccessCodesWarning: 'Zugangscodes werden im Klartext eingeschlossen. Bewahren Sie diese Backup-Datei sicher auf!',
categoriesSelected: '{{selectedCount}} Kategorien ausgewählt',
},
// Pending Uploads Panel
pendingUploads: {
placeholders: {
notes: 'Notizen zu diesem Druck hinzufügen...',
},
discardUpload: 'Upload verwerfen',
archiveAllUploads: 'Alle Uploads archivieren',
discardAllUploads: 'Alle Uploads verwerfen',
archive: 'Archivieren',
timeAgo: {
justNow: 'Gerade eben',
minutesAgo: 'vor {{minutes}}m',
hoursAgo: 'vor {{hours}}h',
daysAgo: 'vor {{days}}d',
},
},
// API Browser
apiBrowser: {
placeholders: {
requestBody: 'JSON-Anforderungstext...',
searchEndpoints: 'Endpunkte suchen...',
},
},
// Configure AMS Slot Modal
configureAmsSlot: {
title: 'AMS-Slot konfigurieren',
slotConfigured: 'Slot konfiguriert!',
configuringSlot: 'Slot wird konfiguriert:',
slotLabel: '{{ams}} Slot {{slot}}',
searchPresets: 'Voreinstellungen suchen...',
colorPlaceholder: 'Farbname oder Hex (z.B. braun, FF8800)',
clearCustomColor: 'Benutzerdefinierte Farbe löschen',
noCloudPresets: 'Keine Cloud-Voreinstellungen. Melden Sie sich bei Bambu Cloud an, um zu synchronisieren.',
noPresetsAvailable: 'Keine Voreinstellungen verfügbar. Melden Sie sich bei Bambu Cloud an oder importieren Sie lokale Profile.',
noMatchingPresets: 'Keine passenden Voreinstellungen gefunden.',
custom: 'Benutzerdefiniert',
builtin: 'Integriert',
settingsSentToPrinter: 'Einstellungen an Drucker gesendet',
filamentProfile: 'Filamentprofil',
kProfileLabel: 'K-Profil (Pressure Advance)',
filteringFor: 'Filtern nach: {{material}}',
noKProfile: 'Kein K-Profil (Standard 0.020 verwenden)',
noMatchingKProfiles: 'Keine passenden K-Profile gefunden. Standard K=0.020 wird verwendet.',
selectFilamentFirst: 'Zuerst ein Filamentprofil auswählen',
kFromCalibration: 'K={{value}} aus Druckerkalibrierung',
customColorLabel: 'Benutzerdefinierte Farbe (optional)',
presetColors: '{{name}} Farben:',
showLessColors: 'Weniger Farben anzeigen',
showMoreColors: 'Mehr Farben anzeigen',
clear: 'Löschen',
hexLabel: 'Hex: #{{hex}}',
resetting: 'Wird zurückgesetzt...',
resetSlot: 'Slot zurücksetzen',
cancel: 'Abbrechen',
configuring: 'Wird konfiguriert...',
configureSlot: 'Slot konfigurieren',
},
// GitHub Backup Settings
githubBackup: {
title: 'GitHub-Backup',
history: 'Verlauf',
downloadBackup: 'Backup herunterladen',
restoreBackup: 'Backup wiederherstellen',
noBackupsYet: 'Noch keine Backups',
},
// Email Settings
emailSettings: {
placeholders: {
fromName: 'BamBuddy',
},
},
// Tag Management Modal
tagManagement: {
searchTags: 'Tags suchen...',
renameTag: 'Tag umbenennen',
deleteTag: 'Tag löschen',
},
// Notification Template Editor
notificationTemplates: {
placeholders: {
title: 'Benachrichtigungstitel...',
body: 'Benachrichtigungstext...',
},
},
// Batch Tag Modal
batchTag: {
placeholders: {
newTag: 'Neuen Tag eingeben...',
},
},
// Photo Gallery Modal
photoGallery: {
deletePhoto: 'Foto löschen',
},
// Filament Hover Card
filamentHoverCard: {
copySpoolUuid: 'Spulen-UUID kopieren',
},
// K Profiles View
kProfilesView: {
hasNote: 'Hat Notiz',
copyProfile: 'Profil kopieren',
},
// Layout/Navigation
layout: {
openMenu: 'Menü öffnen',
noPermissionSystemInfo: 'Sie haben keine Berechtigung zum Anzeigen von Systeminformationen',
},
// Dashboard
dashboard: {
dragToReorder: 'Ziehen zum Neuordnen',
hideWidget: 'Widget ausblenden',
},
// Notification Provider Card
notificationProviderCard: {
deleteNotificationProvider: 'Benachrichtigungsanbieter löschen',
},
// File Manager Modal
fileManagerModal: {
closeFileManager: 'Dateimanager schließen',
sortFiles: 'Dateien sortieren',
goToParentFolder: 'Zum übergeordneten Ordner gehen',
threeView: '3D-Ansicht',
},
// Embedded Camera Viewer
embeddedCameraViewer: {
refreshStream: 'Stream aktualisieren',
close: 'Schließen',
zoomOut: 'Verkleinern',
resetZoom: 'Zoom zurücksetzen',
zoomIn: 'Vergrößern',
dragToResize: 'Ziehen zum Größe ändern',
},
// Timelapse Viewer
timelapseViewer: {
skipBack5s: '5s zurückspringen',
skipForward5s: '5s vorspringen',
},
// Notification Providers
notificationProviders: {
descriptions: {
email: 'SMTP-E-Mail-Benachrichtigungen',
telegram: 'Benachrichtigungen über Telegram-Bot',
discord: 'An Discord-Kanal über Webhook senden',
ntfy: 'Kostenlose, selbst hostbare Push-Benachrichtigungen',
pushover: 'Einfache, zuverlässige Push-Benachrichtigungen',
callmebot: 'Kostenlose WhatsApp-Benachrichtigungen über CallMeBot',
webhook: 'Generischer HTTP POST zu beliebiger URL',
},
},
// Log Viewer
logViewer: {
searchPlaceholder: 'Nachricht oder Logger-Name suchen...',
noLogEntries: 'Keine Logeinträge gefunden',
},
// Switchbar Popover
switchbarPopover: {
noSwitchesInSwitchbar: 'Keine Schalter in Schalterleiste',
},
// Project Page Modal
projectPageModal: {
placeholders: {
title: 'Titel',
designer: 'Designer',
license: 'Lizenz',
description: 'Beschreibung eingeben...',
profileTitle: 'Profil-Titel',
profileDescription: 'Profilbeschreibung...',
},
},
// Spoolman Settings
spoolmanSettings: {},
// Time
time: {
unknown: '-',
waiting: 'Wartend',
justNow: 'Gerade eben',
now: 'Jetzt',
minsAgo: 'vor {{count}}m',
inMins: 'in {{count}}m',
hoursAgo: 'vor {{count}}h',
inHours: 'in {{count}}h',
daysAgo: 'vor {{count}}d',
inDays: 'in {{count}}d',
},
// SpoolBuddy Kiosk
spoolbuddy: {
nav: {
dashboard: 'Dashboard',
ams: 'AMS',
inventory: 'Inventar',
writeTag: 'Schreiben',
settings: 'Einstellungen',
},
status: {
nfcReady: 'NFC bereit',
nfcOff: 'NFC aus',
offline: 'Offline',
online: 'Online',
noPrinters: 'Keine Drucker',
deviceOffline: 'Gerät offline',
waitingConnection: 'Warte auf Geräteverbindung...',
systemReady: 'System bereit',
status: 'Status',
},
dashboard: {
readyToScan: 'Bereit zum Scannen',
idleMessage: 'Spule auf die Waage legen zum Identifizieren',
nfcHint: 'NFC-Tag wird automatisch gelesen',
device: 'Gerät',
syncWeight: 'Gewicht sync.',
weightSynced: 'Synchronisiert!',
unknownTag: 'Unbekannter Tag',
newTag: 'Neuer Tag erkannt',
onScale: 'auf der Waage',
linkSpool: 'Mit Spule verknüpfen',
linkTagTitle: 'Tag mit Spule verknüpfen',
linkTag: 'Tag verknüpfen',
selectSpool: 'Spule zum Verknüpfen auswählen:',
noUntagged: 'Keine Spulen ohne Tags gefunden',
tagDetected: 'Tag erkannt',
noTag: 'Kein Tag',
tagId: 'Tag',
grossWeight: 'Bruttogewicht',
spoolSize: 'Spulengröße',
close: 'Schließen',
currentSpool: 'Aktuelle Spule',
},
modal: {
spoolDetected: 'Spule erkannt',
assignToAms: 'AMS zuweisen',
syncWeight: 'Gewicht sync.',
weightSynced: 'Synchronisiert!',
syncing: 'Synchronisiere...',
newTagDetected: 'Neuer Tag erkannt',
addToInventory: 'Zum Inventar hinzufügen',
assignToAmsTitle: 'AMS zuweisen',
selectSlot: 'Slot auswählen',
assign: 'Zuweisen',
assigning: 'Zuweisen...',
assignSuccess: 'Zugewiesen!',
assignError: 'Fehler beim Zuweisen. Bitte erneut versuchen.',
noPrinterSelected: 'Drucker auswählen...',
noAmsDetected: 'Kein AMS an diesem Drucker erkannt',
slot: 'Slot',
},
weight: {
noReading: 'Kein Messwert',
stable: 'Stabil',
measuring: 'Messen...',
tare: 'Tarieren',
calibrate: 'Kalibrieren',
},
spool: {
remaining: 'Verbleibend',
material: 'Material',
brand: 'Marke',
color: 'Farbe',
coreWeight: 'Kern',
labelWeight: 'Etikett',
scaleWeight: 'Waage',
netWeight: 'Netto',
lastUsed: 'Zuletzt verwendet',
},
ams: {
noData: 'Kein AMS erkannt',
connectAms: 'AMS anschließen um Filament-Slots zu sehen',
noPrinter: 'Kein Drucker ausgewählt',
selectPrinter: 'Drucker in der oberen Leiste auswählen',
printerDisconnected: 'Drucker getrennt',
humidity: 'Feuchtigkeit',
level: 'Stufe',
active: 'Aktiv',
slot: 'Slot',
empty: 'Leer',
},
inventory: {
search: 'Spulen suchen...',
empty: 'Keine Spulen im Inventar',
noResults: 'Keine passenden Spulen',
spools: 'Spulen',
addSpool: 'Spule hinzufügen',
},
settings: {
// Tabs
tabDevice: 'Gerät',
tabDisplay: 'Anzeige',
tabScale: 'Waage',
tabUpdates: 'Updates',
// Device tab
nfcReader: 'NFC-Leser',
type: 'Typ',
connection: 'Verbindung',
notConnected: 'N/A',
deviceInfo: 'Geräteinfo',
hostname: 'Host',
uptime: 'Betriebszeit',
// Display tab
brightness: 'Helligkeit',
saved: 'Gespeichert',
noBacklight: 'Keine DSI-Hintergrundbeleuchtung erkannt. Helligkeitssteuerung erfordert ein DSI-Display.',
screenBlank: 'Bildschirm-Abschaltzeit',
screenBlankDesc: 'Bildschirm schaltet sich nach Inaktivität ab. Zum Aufwecken berühren.',
displayNote: 'Helligkeit wird als Software-Filter angewendet.',
// Scale tab
scaleCalibration: 'Waagen-Kalibrierung',
currentWeight: 'Aktuelles Gewicht',
tareOffset: 'Tara',
calFactor: 'Faktor',
knownWeight: 'Bekanntes Gewicht',
calStep1: 'Alle Gegenstände von der Waage entfernen und Nullpunkt setzen.',
calStep2: 'Bekanntes Gewicht auf die Waage legen.',
setZero: 'Nullpunkt setzen',
calibrateNow: 'Kalibrieren',
calibrated: 'Kalibriert',
tareSet: 'Tara-Befehl gesendet. Warte auf Gerät...',
tareFailed: 'Tara-Befehl fehlgeschlagen',
zeroSet: 'Nullpunkt gesetzt. Bekanntes Gewicht auf die Waage legen.',
calibrationDone: 'Kalibrierung abgeschlossen!',
calibrationFailed: 'Kalibrierung fehlgeschlagen',
lastCalibrated: 'Zuletzt kalibriert',
stable: 'Stabil',
settling: 'Stabilisierung...',
firmware: 'Firmware',
scale: 'Waage',
noDevice: 'Kein SpoolBuddy-Gerät gefunden',
// Updates tab
daemonVersion: 'Daemon-Version',
currentVersion: 'Aktuell',
versionPending: 'Warte auf Daemon...',
checking: 'Prüfe...',
checkUpdates: 'Nach Updates suchen',
updateAvailable: 'Update verfügbar',
updateInstructions: 'Update per SSH: SpoolBuddy-Installationsskript ausführen.',
upToDate: 'Aktuell',
includeBeta: 'Beta-Versionen einschließen',
},
writeTag: {
tabExisting: 'Vorhandene Spule',
tabNew: 'Neue Spule',
tabReplace: 'Tag ersetzen',
searchPlaceholder: 'Suche nach Material, Farbe, Marke...',
noUntaggedSpools: 'Keine Spulen ohne Tags',
noTaggedSpools: 'Keine Spulen mit Tags',
selectSpool: 'Spule auswählen, dann einen NTAG auf den Leser legen',
placeTag: 'NTAG auf den Leser legen',
tagReady: 'Tag erkannt — bereit zum Schreiben',
writeTag: 'Tag beschreiben',
replaceTag: 'Tag ersetzen',
writing: 'Tag wird beschrieben...',
waiting: 'Warte auf SpoolBuddy...',
writeSuccess: 'Tag erfolgreich beschrieben!',
writeFailed: 'Schreiben fehlgeschlagen',
queueFailed: 'Schreibbefehl konnte nicht eingereiht werden',
tryAgain: 'Erneut versuchen',
cancel: 'Abbrechen',
replaceWarning: 'Alter Tag wird getrennt. Neuer Tag ersetzt ihn.',
deviceOffline: 'SpoolBuddy ist offline',
material: 'Material',
colorName: 'Farbname',
color: 'Farbe',
brand: 'Marke',
weight: 'Gewicht (g)',
createSpool: 'Spule erstellen',
creating: 'Wird erstellt...',
spoolCreated: 'Spule erstellt! Bereit zum Schreiben.',
createFailed: 'Spule konnte nicht erstellt werden',
},
},
bugReport: {
title: 'Fehler melden',
description: 'Beschreibung',
descriptionPlaceholder: 'Was ist schiefgelaufen? Bitte beschreiben Sie das Problem...',
email: 'E-Mail (optional)',
emailPlaceholder: 'ihre@email.de',
emailPrivacy: 'Falls angegeben, wird Ihre E-Mail in einem eingeklappten Abschnitt des GitHub-Issues aufgeführt, damit der Betreuer sich melden kann.',
screenshot: 'Screenshot',
uploadOrPaste: 'Bild hochladen, einfügen oder ziehen',
dataCollectedSummary: 'Welche Daten werden im Bericht gesendet?',
dataIncluded: 'Enthalten:',
dataIncludedList: 'App-Version, Betriebssystem, Architektur, Python-Version, Datenbankstatistiken (nur Anzahl), Druckermodelle, Düsenanzahl, Firmware-Versionen, Verbindungsstatus, Integrationsstatus (Spoolman, MQTT, HA), nicht-sensible Einstellungen, Netzwerkschnittstellenanzahl, Docker-Details, Abhängigkeitsversionen.',
dataNeverIncluded: 'Nie enthalten:',
dataNeverIncludedList: 'Druckernamen, Seriennummern, Zugangscodes, Passwörter, IP-Adressen, E-Mail-Adressen, API-Schlüssel, Tokens, Webhook-URLs, Hostnamen oder Benutzernamen.',
submit: 'Absenden',
collectingLogs: 'Diagnoseprotokolle werden gesammelt...',
collectingLogsHint: 'Debug-Protokollierung aktiviert, Drucker werden nach aktuellen Daten abgefragt.',
submitting: 'Fehlerbericht wird gesendet...',
submitSuccess: 'Fehlerbericht erfolgreich gesendet!',
submitFailed: 'Fehlerbericht konnte nicht gesendet werden',
thankYou: 'Vielen Dank!',
submitted: 'Ihr Fehlerbericht wurde eingereicht.',
viewIssue: 'Issue ansehen',
unexpectedError: 'Ein unerwarteter Fehler ist aufgetreten',
countdownSeconds: '{{seconds}}s',
},
};