| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603 |
- export default {
- // Navigation
- nav: {
- printers: 'Printers',
- archives: 'Archives',
- queue: 'Queue',
- stats: 'Statistics',
- profiles: 'Profiles',
- maintenance: 'Maintenance',
- projects: 'Projects',
- files: 'File Manager',
- settings: 'Settings',
- system: 'System',
- collapseSidebar: 'Collapse sidebar',
- expandSidebar: 'Expand sidebar',
- update: 'Update',
- updateAvailable: 'Update available: v{{version}}',
- updateAvailableBanner: 'Version {{version}} is available!',
- viewUpdate: 'View update',
- viewOnGithub: 'View on GitHub',
- keyboardShortcuts: 'Keyboard shortcuts (?)',
- switchToLight: 'Switch to light mode',
- switchToDark: 'Switch to dark mode',
- smartSwitches: 'Smart Switches',
- logout: 'Logout',
- },
- // Common
- common: {
- save: 'Save',
- saving: 'Saving...',
- cancel: 'Cancel',
- delete: 'Delete',
- edit: 'Edit',
- add: 'Add',
- close: 'Close',
- confirm: 'Confirm',
- loading: 'Loading...',
- error: 'Error',
- success: 'Success',
- warning: 'Warning',
- enabled: 'Enabled',
- disabled: 'Disabled',
- yes: 'Yes',
- no: 'No',
- on: 'On',
- off: 'Off',
- all: 'All',
- none: 'None',
- search: 'Search',
- filter: 'Filter',
- sort: 'Sort',
- refresh: 'Refresh',
- download: 'Download',
- upload: 'Upload',
- actions: 'Actions',
- status: 'Status',
- name: 'Name',
- description: 'Description',
- date: 'Date',
- time: 'Time',
- hours: 'hours',
- minutes: 'minutes',
- seconds: 'seconds',
- days: 'days',
- enable: 'Enable',
- disable: 'Disable',
- permissions: 'Permissions',
- noPrinters: 'No printers configured',
- noData: 'No data available',
- linkNotFound: 'Link not found',
- required: 'Required',
- optional: 'Optional',
- dismiss: 'Dismiss',
- apply: 'Apply',
- reset: 'Reset',
- clear: 'Clear',
- selectAll: 'Select All',
- deselectAll: 'Deselect All',
- noChange: '— No change —',
- unchanged: 'Unchanged',
- unassigned: 'Unassigned',
- unknown: 'Unknown',
- unknownError: 'Unknown error',
- today: 'Today',
- asap: 'ASAP',
- overdue: 'Overdue',
- now: 'Now',
- collapse: 'Collapse',
- expand: 'Expand',
- viewArchive: 'View archive',
- viewInFileManager: 'View in File Manager',
- addedBy: 'Added by {{username}}',
- prints: 'prints',
- more: '+{{count}} more',
- ascending: 'Ascending',
- descending: 'Descending',
- printer: 'Printer',
- remove: 'Remove',
- type: 'Type',
- print: 'Print',
- rename: 'Rename',
- move: 'Move',
- create: 'Create',
- duplicate: 'Duplicate',
- left: 'Left',
- right: 'Right',
- },
- // Printers page
- printers: {
- title: 'Printers',
- addPrinter: 'Add Printer',
- editPrinter: 'Edit Printer',
- deletePrinter: 'Delete Printer',
- printerName: 'Printer Name',
- serialNumber: 'Serial Number',
- ipAddress: 'IP Address / Hostname',
- accessCode: 'Access Code',
- model: 'Model',
- nozzleCount: 'Nozzle Count',
- autoArchive: 'Auto Archive',
- status: {
- idle: 'Idle',
- printing: 'Printing',
- paused: 'Paused',
- offline: 'Offline',
- error: 'Error',
- finished: 'Finished',
- unknown: 'Unknown',
- },
- temperatures: {
- nozzle: 'Nozzle',
- bed: 'Bed',
- chamber: 'Chamber',
- },
- progress: '{{percent}}% complete',
- timeRemaining: '{{time}} remaining',
- deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
- maintenanceOk: 'Maintenance OK',
- maintenanceWarning: '{{count}} warning',
- maintenanceWarning_plural: '{{count}} warnings',
- maintenanceDue: '{{count}} due',
- maintenanceDue_plural: '{{count}} due',
- // Sort options
- sort: {
- name: 'Name',
- status: 'Status',
- model: 'Model',
- location: 'Location',
- ascending: 'Sort ascending',
- descending: 'Sort descending',
- },
- // Card size
- cardSize: {
- small: 'Small cards',
- medium: 'Medium cards',
- large: 'Large cards',
- extraLarge: 'Extra large cards',
- },
- // Controls
- hideOffline: 'Hide offline',
- powerOn: 'Power On',
- offlinePrintersWithPlugs: 'Offline printers with smart plugs',
- noPrintersConfigured: 'No printers configured yet',
- // Printer card
- readyToPrint: 'Ready to print',
- external: 'External',
- deleteArchives: 'Delete print archives',
- noLabel: 'No label',
- printPreview: 'Print preview',
- width: 'Width',
- height: 'Height',
- noObjectsFound: 'No objects found',
- objectsLoadedOnPrintStart: 'Objects are loaded when a print starts',
- willBeSkipped: 'Will be skipped',
- name: 'Name',
- serialCannotBeChanged: 'Serial number cannot be changed',
- locationHelp: 'Used to group printers and filter queue jobs',
- // WiFi signal strength
- wifiSignal: {
- veryWeak: 'Very weak',
- weak: 'Weak',
- fair: 'Fair',
- good: 'Good',
- excellent: 'Excellent',
- },
- // Maintenance
- maintenanceUpToDate: 'All maintenance up to date - Click to view',
- // Chamber light
- chamberLightOn: 'Turn on chamber light',
- chamberLightOff: 'Turn off chamber light',
- // Files
- browseFiles: 'Browse printer files',
- // Smart plug
- autoOffAfterPrint: 'Auto power-off after print',
- autoOffExecuted: 'Auto-off was executed - turn printer on to reset',
- // HMS errors
- hmsErrors: 'HMS Errors',
- viewHmsErrors: 'View {{count}} HMS error(s)',
- // Actions
- resume: 'Resume',
- pause: 'Pause',
- stop: 'Stop',
- camera: 'Camera',
- skipObject: 'Skip Object',
- reconnect: 'Reconnect',
- mqttDebug: 'MQTT Debug',
- activeNozzle: 'Active: {{nozzle}} nozzle',
- // Firmware
- firmwareUpdate: 'Firmware Update',
- firmwareInstructions: 'On the printer\'s touchscreen, go to',
- firmwareNav: 'Navigate to',
- settings: 'Settings',
- firmware: 'Firmware',
- // Discovery
- discoverPrinters: 'Discover Printers',
- searching: 'Searching...',
- manualEntry: 'Manual Entry',
- addFromCloud: 'Add from Cloud',
- // Toast messages
- toast: {
- printerDeleted: 'Printer deleted',
- printerAdded: 'Printer added',
- printerUpdated: 'Printer updated',
- failedToDelete: 'Failed to delete printer',
- failedToAdd: 'Failed to add printer',
- failedToUpdate: 'Failed to update printer',
- commandSent: 'Command sent',
- failedToSendCommand: 'Failed to send command',
- turnedOn: '{{name}} turned on',
- failedToPowerOn: 'Failed to power on {{name}}',
- scriptTriggered: 'Script triggered',
- printStopped: 'Print stopped',
- printPaused: 'Print paused',
- printResumed: 'Print resumed',
- referenceDeleted: 'Reference deleted',
- detectionAreaSaved: 'Detection area saved',
- failedToRunScript: 'Failed to run script',
- failedToStopPrint: 'Failed to stop print',
- failedToPausePrint: 'Failed to pause print',
- failedToResumePrint: 'Failed to resume print',
- failedToControlChamberLight: 'Failed to control chamber light',
- failedToUpdateSetting: 'Failed to update setting',
- failedToSkipObjects: 'Failed to skip objects',
- failedToRereadRfid: 'Failed to re-read RFID',
- failedToCheckPlate: 'Failed to check plate',
- failedToUpdateLabel: 'Failed to update label',
- failedToDeleteReference: 'Failed to delete reference',
- failedToSaveDetectionArea: 'Failed to save detection area',
- plateCheckEnabled: 'Plate check enabled',
- plateCheckDisabled: 'Plate check disabled',
- calibrationSaved: 'Calibration saved!',
- calibrationFailed: 'Calibration failed',
- rfidRereadInitiated: 'RFID re-read initiated',
- },
- // Connection status
- connection: {
- connected: 'Connected',
- offline: 'Offline',
- },
- // Queue info
- queue: {
- inQueue: '{{count}} print in queue',
- inQueue_plural: '{{count}} prints in queue',
- },
- // Controls section
- controls: 'Controls',
- // RFID
- rfid: {
- reread: 'Re-read RFID',
- },
- // Permissions
- permission: {
- noAdd: 'You do not have permission to add printers',
- noEdit: 'You do not have permission to edit printers',
- noDelete: 'You do not have permission to delete printers',
- noControl: 'You do not have permission to control printers',
- noFiles: 'You do not have permission to access printer files',
- noAmsRfid: 'You do not have permission to re-read AMS RFID',
- noSmartPlugControl: 'You do not have permission to control smart plugs',
- },
- // Add/Edit modal
- modal: {
- addTitle: 'Add Printer',
- editTitle: 'Edit Printer',
- myPrinter: 'My Printer',
- selectModel: 'Select model...',
- locationGroup: 'Location / Group (optional)',
- locationPlaceholder: 'e.g., Workshop, Office, Basement',
- autoArchiveLabel: 'Auto-archive completed prints',
- fromPrinterSettings: 'From printer settings',
- modelOptional: 'Model (optional)',
- saveChanges: 'Save Changes',
- },
- // Skip objects
- skipObjects: {
- tooltip: 'Skip objects',
- onlyWhilePrinting: 'Skip objects (only while printing)',
- requiresMultiple: 'Skip objects (requires 2+ objects)',
- title: 'Skip Objects',
- matchIdsInfo: 'Match IDs with your printer display',
- printerShowsIds: 'The printer screen shows object IDs on the build plate',
- skipSelected: 'Skip Selected',
- skipping: 'Skipping...',
- noObjectsSelected: 'No objects selected',
- selectObjectsToSkip: 'Select objects you want to skip from the current print',
- skipped: 'skipped',
- objectsSkipped: 'Objects skipped',
- activeCount: '{{count}} active',
- waitForLayer: 'Wait for layer 2+ to skip objects (currently layer {{layer}})',
- skip: 'Skip',
- },
- // Confirm modals
- confirm: {
- deleteTitle: 'Delete Printer',
- deleteMessage: 'Are you sure you want to delete "{{name}}"? This will remove all connection settings.',
- deleteArchivesNote: 'All print history for this printer will be permanently deleted.',
- keepArchivesNote: 'Print history will be kept but no longer associated with this printer.',
- stopTitle: 'Stop Print',
- stopMessage: 'Are you sure you want to stop the current print on "{{name}}"? This will cancel the print job.',
- stopButton: 'Stop Print',
- pauseTitle: 'Pause Print',
- pauseMessage: 'Are you sure you want to pause the current print on "{{name}}"?',
- pauseButton: 'Pause Print',
- resumeTitle: 'Resume Print',
- resumeMessage: 'Are you sure you want to resume the print on "{{name}}"?',
- resumeButton: 'Resume Print',
- powerOnTitle: 'Power On Printer',
- powerOnMessage: 'Are you sure you want to turn ON the power for "{{name}}"?',
- powerOnButton: 'Power On',
- powerOffTitle: 'Power Off Printer',
- powerOffMessage: 'Are you sure you want to turn OFF the power for "{{name}}"?',
- powerOffWarning: 'WARNING: "{{name}}" is currently printing! Are you sure you want to turn OFF the power? This will interrupt the print and may damage the printer.',
- powerOffButton: 'Power Off',
- },
- // Discovery
- discovery: {
- title: 'Discover Printers',
- searching: 'Searching...',
- scanning: 'Scanning...',
- scanProgress: 'Scanning... {{scanned}}/{{total}}',
- foundPrinters: 'Found {{count}} printer(s)',
- noPrintersFound: 'No printers found',
- noPrintersFoundSubnet: 'No printers found in the specified subnet.',
- noPrintersFoundNetwork: 'No printers found on the network.',
- allConfigured: 'All discovered printers are already configured.',
- alreadyAdded: 'Already added',
- select: 'Select',
- manualEntry: 'Manual Entry',
- addFromCloud: 'Add from Cloud',
- subnetToScan: 'Subnet to scan',
- dockerNote: 'Docker detected. Enter your printer\'s subnet in CIDR notation. Requires network_mode: host in docker-compose.yml.',
- scanSubnet: 'Scan Subnet for Printers',
- discoverNetwork: 'Discover Printers on Network',
- scanningSubnet: 'Scanning subnet for Bambu printers...',
- scanningNetwork: 'Scanning network...',
- serialRequired: 'Serial required',
- unknown: 'Unknown',
- failedToStart: 'Failed to start discovery',
- },
- // Filaments section
- filaments: 'Filaments',
- // Camera
- openCameraOverlay: 'Open camera overlay',
- openCameraWindow: 'Open camera in new window',
- // Firmware
- firmwareUpdateAvailable: 'Firmware update available: {{current}} → {{latest}}',
- firmwareUpdateButton: 'Update',
- // Plate detection
- plateDetection: {
- noPermission: 'You do not have permission to update printers',
- enabledClick: 'Plate check enabled - Click to disable',
- disabledClick: 'Plate check disabled - Click to enable',
- manageCalibration: 'Manage plate detection calibration',
- calibrationRequired: 'Calibration Required',
- calibrationInstructions: 'Please ensure the build plate is <strong>completely empty</strong>, then click Calibrate.',
- calibrationDescription: 'Calibration captures a reference image of the empty plate. Future checks will compare against this reference to detect objects.',
- calibrationTip: '<strong>Tip:</strong> You can store up to 5 calibrations for different plates. The system automatically uses the best match when checking.',
- plateEmpty: 'Plate appears empty',
- objectsDetected: 'Objects detected on plate',
- confidence: 'Confidence',
- difference: 'Difference',
- analysisPreview: 'Analysis preview:',
- analysisLegend: 'Green box = detection area, Red overlay = differences from calibration',
- savedReferences: 'Saved References ({{count}}/{{max}})',
- deleteReference: 'Delete reference',
- labelPlaceholder: 'Label...',
- clickToEdit: '{{label}} - Click to edit',
- clickToAddLabel: 'Click to add label',
- },
- // Fans
- fans: {
- partCooling: 'Part Cooling Fan',
- auxiliary: 'Auxiliary Fan',
- chamber: 'Chamber Fan',
- },
- // HMS errors
- clickToViewHmsErrors: 'Click to view HMS errors',
- estimatedCompletion: 'Estimated completion time',
- slotOptions: 'Slot options',
- // Firmware modal
- firmwareModal: {
- title: 'Firmware Update',
- currentVersion: 'Current:',
- latestVersion: 'Latest:',
- releaseNotes: 'Release Notes',
- checkingPrereqs: 'Checking prerequisites...',
- sdCardReady: 'SD card ready. Click below to upload firmware.',
- uploadedSuccess: 'Firmware uploaded to SD card!',
- applyInstructions: 'To apply the update on your printer:',
- step1: 'On the printer\'s touchscreen, go to <strong>Settings</strong>',
- step2: 'Navigate to <strong>Firmware</strong>',
- step3: 'Select <strong>Update from SD card</strong>',
- step4: 'The update will take 10-20 minutes',
- done: 'Done',
- starting: 'Starting...',
- uploadFirmware: 'Upload Firmware',
- uploadedToast: 'Firmware uploaded! Trigger update from printer screen.',
- },
- accessCodePlaceholder: 'Leave empty to keep current',
- // ROI editor
- roi: {
- title: 'Detection Area (ROI)',
- xStart: 'X Start',
- yStart: 'Y Start',
- width: 'Width',
- height: 'Height',
- instruction: 'Adjust the detection area to focus on the build plate. The green box in the preview shows the current area.',
- },
- },
- // Archives page
- archives: {
- title: 'Print Archives',
- searchPlaceholder: 'Search archives...',
- filterByPrinter: 'Filter by printer',
- filterByStatus: 'Filter by status',
- sortBy: 'Sort by',
- sortNewest: 'Newest first',
- sortOldest: 'Oldest first',
- sortName: 'Name',
- sortDuration: 'Duration',
- sortLargest: 'Largest first',
- sortSmallest: 'Smallest first',
- sortSize: 'Size',
- noArchives: 'No archives found',
- noArchivesSearch: 'No archives match your search',
- noArchivesYet: 'No archives yet',
- loadingArchives: 'Loading archives...',
- releaseToUpload: 'Release to upload',
- showAll: 'Show all',
- showFavoritesOnly: 'Show favorites only',
- gridView: 'Grid view',
- listView: 'List view',
- calendarView: 'Calendar view',
- manageTags: 'Manage Tags',
- showFailedPrints: 'Show failed prints',
- hideFailedPrints: 'Hide failed prints',
- printTime: 'Print Time',
- filamentUsed: 'Filament Used',
- cost: 'Cost',
- reprint: 'Reprint',
- preview: 'Preview',
- deleteArchive: 'Delete Archive',
- deleteConfirm: 'Are you sure you want to delete this archive?',
- favorite: 'Favorite',
- unfavorite: 'Remove from favorites',
- viewDetails: 'View Details',
- status: {
- completed: 'Completed',
- failed: 'Failed',
- stopped: 'Stopped',
- },
- toast: {
- source3mfAttached: 'Source 3MF attached: {{filename}}',
- failedUploadSource3mf: 'Failed to upload source 3MF',
- source3mfRemoved: 'Source 3MF removed',
- failedRemoveSource3mf: 'Failed to remove source 3MF',
- f3dAttached: 'F3D attached: {{filename}}',
- failedUploadF3d: 'Failed to upload F3D',
- f3dRemoved: 'F3D removed',
- failedRemoveF3d: 'Failed to remove F3D',
- timelapseAttached: 'Timelapse attached: {{filename}}',
- timelapseAlreadyAttached: 'Timelapse already attached',
- noMatchingTimelapse: 'No matching timelapse found',
- failedScanTimelapse: 'Failed to scan for timelapse',
- failedAttachTimelapse: 'Failed to attach timelapse',
- archiveDeleted: 'Archive deleted',
- failedDeleteArchive: 'Failed to delete archive',
- addedToFavorites: 'Added to favorites',
- removedFromFavorites: 'Removed from favorites',
- projectUpdated: 'Project updated',
- failedUpdateProject: 'Failed to update project',
- linkCopied: 'Link copied to clipboard',
- failedCopyLink: 'Failed to copy link',
- photoDeleted: 'Photo deleted',
- failedDeletePhoto: 'Failed to delete photo',
- failedDeleteArchives: 'Failed to delete archives',
- failedUpdateFavorites: 'Failed to update favorites',
- exportDownloaded: 'Export downloaded',
- exportFailed: 'Export failed',
- },
- menu: {
- print: 'Print',
- schedule: 'Schedule',
- openInBambuStudio: 'Open in Bambu Studio',
- slice: 'Slice',
- externalLink: 'External Link',
- viewOnMakerWorld: 'View on MakerWorld',
- preview3d: '3D Preview',
- viewTimelapse: 'View Timelapse',
- scanForTimelapse: 'Scan for Timelapse',
- downloadSource3mf: 'Download Source 3MF',
- uploadSource3mf: 'Upload Source 3MF',
- replaceSource3mf: 'Replace Source 3MF',
- removeSource3mf: 'Remove Source 3MF',
- uploadF3d: 'Upload F3D',
- replaceF3d: 'Replace F3D',
- downloadF3d: 'Download F3D',
- removeF3d: 'Remove F3D',
- download: 'Download',
- copyDownloadLink: 'Copy Download Link',
- qrCode: 'QR Code',
- viewPhotos: 'View Photos',
- viewPhotosCount: 'View Photos ({{count}})',
- projectPage: 'Project Page',
- addToFavorites: 'Add to Favorites',
- removeFromFavorites: 'Remove from Favorites',
- edit: 'Edit',
- goToProject: 'Go to Project: {{name}}',
- addToProject: 'Add to Project',
- removeFromProject: 'Remove from Project',
- loading: 'Loading...',
- noProjectsAvailable: 'No projects available',
- select: 'Select',
- deselect: 'Deselect',
- delete: 'Delete',
- },
- permission: {
- noReprint: 'You do not have permission to reprint this archive',
- noAddToQueue: 'You do not have permission to add to queue',
- noUpdateArchives: 'You do not have permission to update archives',
- noUploadFiles: 'You do not have permission to upload files',
- noDownload: 'You do not have permission to download archives',
- noCopyLink: 'You do not have permission to copy download links',
- noDelete: 'You do not have permission to delete this archive',
- noCreate: 'You do not have permission to create archives',
- },
- card: {
- previousPlate: 'Previous plate',
- nextPlate: 'Next plate',
- plateNumber: 'Plate {{index}}',
- moreOptions: 'Right-click for more options',
- addToFavorites: 'Add to favorites',
- removeFromFavorites: 'Remove from favorites',
- cancelled: 'cancelled',
- failed: 'failed',
- duplicate: 'duplicate',
- duplicateTitle: 'This model has been printed before',
- openSource3mf: 'Open source 3MF in Bambu Studio (right-click for more options)',
- downloadF3d: 'Download Fusion 360 design file',
- viewTimelapse: 'View timelapse',
- viewPhoto: 'View 1 photo',
- viewPhotos: 'View {{count}} photos',
- openFolder: 'Open folder: {{name}}',
- slicedFile: 'Sliced file - ready to print',
- sourceFile: 'Source file only - no AMS mapping available',
- gcode: 'GCODE',
- source: 'SOURCE',
- project: 'Project: {{name}}',
- estimated: 'Estimated: {{time}}',
- actual: 'Actual: {{time}}',
- accuracy: 'Accuracy: {{percent}}%',
- filament: '{{weight}}g',
- layer: '{{count}} layer',
- layers: '{{count}} layers',
- object: '{{count}} object',
- objects: '{{count}} objects',
- slicedFor: 'Sliced for {{model}}',
- uploadedBy: 'Uploaded By',
- noPermissionReprint: 'You do not have permission to reprint',
- noPermissionEdit: 'You do not have permission to edit archives',
- noPermissionDelete: 'You do not have permission to delete archives',
- reprint: 'Reprint',
- schedulePrint: 'Schedule Print',
- schedule: 'Schedule',
- openInBambuStudio: 'Open in Bambu Studio',
- openInBambuStudioToSlice: 'Open in Bambu Studio to slice',
- slice: 'Slice',
- externalLink: 'External Link',
- makerWorld: 'MakerWorld: {{designer}}',
- viewProject: 'View project',
- noExternalLink: 'No external link',
- preview3d: '3D Preview',
- download: 'Download',
- edit: 'Edit',
- delete: 'Delete',
- },
- modal: {
- deleteArchive: 'Delete Archive',
- deleteConfirm: 'Are you sure you want to delete "{{name}}"? This action cannot be undone.',
- deleteButton: 'Delete',
- removeSource3mf: 'Remove Source 3MF',
- removeSource3mfConfirm: 'Are you sure you want to remove the source 3MF file from "{{name}}"? This will delete the original slicer project file.',
- removeButton: 'Remove',
- removeF3d: 'Remove F3D',
- removeF3dConfirm: 'Are you sure you want to remove the Fusion 360 design file from "{{name}}"?',
- timelapse: '{{name}} - Timelapse',
- selectTimelapse: 'Select Timelapse',
- selectTimelapseDesc: 'No auto-match found. Select the timelapse for this print:',
- deleteArchives: 'Delete Archives',
- deleteArchivesConfirm: 'Are you sure you want to delete {{count}} archive(s)? This action cannot be undone.',
- deleteCount: 'Delete {{count}}',
- },
- page: {
- title: 'Archives',
- printsCount: '{{filtered}} of {{total}} prints',
- dropFilesHere: 'Drop .3mf files here',
- releaseToUpload: 'Release to upload',
- only3mfSupported: 'Only .3mf files are supported',
- close: 'Close',
- selected: '{{count}} selected',
- selectAll: 'Select All',
- tags: 'Tags',
- project: 'Project',
- favorite: 'Favorite',
- delete: 'Delete',
- toggledFavorites: 'Toggled favorites for {{count}} archive(s)',
- failedUpdateFavorites: 'Failed to update favorites',
- archivesDeleted: '{{count}} archive(s) deleted',
- failedDeleteArchives: 'Failed to delete archives',
- photoDeleted: 'Photo deleted',
- failedDeletePhoto: 'Failed to delete photo',
- },
- list: {
- name: 'Name',
- printer: 'Printer',
- date: 'Date',
- size: 'Size',
- actions: 'Actions',
- hasTimelapse: 'Has timelapse',
- },
- },
- // Queue page
- queue: {
- title: 'Print Queue',
- subtitle: 'Schedule and manage your print jobs',
- addToQueue: 'Add to Queue',
- // Print modal
- print: 'Print',
- reprint: 'Re-print',
- schedulePrint: 'Schedule Print',
- editQueueItem: 'Edit Queue Item',
- printToPrinters: 'Print to {{count}} Printers',
- queueToPrinters: 'Queue to {{count}} Printers',
- sending: 'Sending...',
- sendingProgress: 'Sending {{current}}/{{total}}...',
- adding: 'Adding...',
- addingProgress: 'Adding {{current}}/{{total}}...',
- savingProgress: 'Saving {{current}}/{{total}}...',
- clearQueue: 'Clear Queue',
- clearHistory: 'Clear History',
- emptyQueue: 'Queue is empty',
- position: 'Position',
- scheduledTime: 'Scheduled Time',
- moveUp: 'Move Up',
- moveDown: 'Move Down',
- startNow: 'Start Now',
- printingInProgress: 'Printing in progress...',
- viewArchive: 'View archive',
- viewInFileManager: 'View in File Manager',
- itemCount: '{{count}} item',
- itemCount_plural: '{{count}} items',
- dragToReorder: 'Drag to reorder (ASAP only)',
- reorderHint: 'Position only affects ASAP items. Scheduled items run at their set time.',
- addedBy: 'Added by {{name}}',
- // Sections
- sections: {
- currentlyPrinting: 'Currently Printing',
- queued: 'Queued',
- history: 'History',
- },
- // Status
- status: {
- pending: 'Pending',
- waiting: 'Waiting',
- printing: 'Printing',
- paused: 'Paused',
- completed: 'Completed',
- failed: 'Failed',
- skipped: 'Skipped',
- cancelled: 'Cancelled',
- },
- // Summary cards
- summary: {
- printing: 'Printing',
- queued: 'Queued',
- totalTime: 'Total Queue Time',
- history: 'History',
- },
- // Filters
- filter: {
- allPrinters: 'All Printers',
- unassigned: 'Unassigned',
- allStatus: 'All Status',
- allLocations: 'All Locations',
- any: 'Any',
- },
- // Sort
- sort: {
- byPosition: 'Sort by Position',
- byName: 'Sort by Name',
- byPrinter: 'Sort by Printer',
- bySchedule: 'Sort by Schedule',
- byDate: 'Sort by Date',
- ascendingOldest: 'Ascending (oldest first)',
- descendingNewest: 'Descending (newest first)',
- },
- // Badges
- badges: {
- staged: 'Staged',
- requiresPrevious: 'Requires previous success',
- autoPowerOff: 'Auto power off',
- },
- // Empty state
- empty: {
- title: 'No prints scheduled',
- description: 'Schedule a print from the Archives page using the "Schedule" option in the context menu, or drag and drop files to get started.',
- },
- // Time
- time: {
- asap: 'ASAP',
- overdue: 'Overdue',
- now: 'Now',
- lessThanMinute: 'In less than a minute',
- inMinutes: 'In {{count}} min',
- inHours: 'In {{count}} hours',
- },
- // Actions
- actions: {
- stopPrint: 'Stop Print',
- startPrint: 'Start Print',
- requeue: 'Re-queue',
- },
- // Bulk edit
- bulkEdit: {
- title: 'Edit {{count}} Item',
- title_plural: 'Edit {{count}} Items',
- description: 'Only changed settings will be applied to selected items.',
- printer: 'Printer',
- noChange: '— No change —',
- queueOptions: 'Queue Options',
- staged: 'Staged (manual start)',
- autoPowerOff: 'Auto power off after print',
- requirePrevious: 'Require previous success',
- printOptions: 'Print Options',
- bedLevelling: 'Bed levelling',
- flowCalibration: 'Flow calibration',
- vibrationCalibration: 'Vibration calibration',
- layerInspection: 'First layer inspection',
- timelapse: 'Timelapse',
- useAms: 'Use AMS',
- applyChanges: 'Apply Changes',
- selectAll: 'Select All',
- deselectAll: 'Deselect All',
- selected: '{{count}} selected',
- editSelected: 'Edit Selected',
- cancelSelected: 'Cancel Selected',
- },
- // Confirmations
- confirm: {
- cancelTitle: 'Cancel Scheduled Print',
- cancelMessage: 'Are you sure you want to cancel "{{name}}"?',
- stopTitle: 'Stop Print',
- stopMessage: 'Are you sure you want to stop the current print "{{name}}"? This will cancel the print job on the printer.',
- removeTitle: 'Remove from History',
- removeMessage: 'Are you sure you want to remove "{{name}}" from the queue history?',
- clearHistoryTitle: 'Clear History',
- clearHistoryMessage: 'Are you sure you want to remove all {{count}} item(s) from the history?',
- cancelButton: 'Cancel Print',
- stopButton: 'Stop Print',
- thisPrint: 'this print',
- thisItem: 'this item',
- },
- // Toast messages
- toast: {
- cancelled: 'Queue item cancelled',
- cancelFailed: 'Failed to cancel item',
- removed: 'Queue item removed',
- removeFailed: 'Failed to remove item',
- stopped: 'Print stopped',
- stopFailed: 'Failed to stop print',
- released: 'Print released to queue',
- startFailed: 'Failed to start print',
- reorderFailed: 'Failed to reorder queue',
- historyCleared: 'Cleared {{count}} history item(s)',
- clearHistoryFailed: 'Failed to clear history',
- updateFailed: 'Failed to update items',
- bulkCancelled: 'Cancelled {{count}} item(s)',
- bulkCancelFailed: 'Failed to cancel items',
- },
- // Permissions
- permissions: {
- noStopPrint: 'You do not have permission to stop prints',
- noStartPrint: 'You do not have permission to start prints',
- noEdit: 'You do not have permission to edit this queue item',
- noCancel: 'You do not have permission to cancel this queue item',
- noRequeue: 'You do not have permission to re-queue items',
- noRemove: 'You do not have permission to remove this queue item',
- noClearHistory: 'You do not have permission to clear all history',
- noEditItems: 'You do not have permission to edit queue items',
- noCancelItems: 'You do not have permission to cancel queue items',
- },
- },
- // Statistics page
- stats: {
- title: 'Dashboard',
- subtitle: 'Drag widgets to rearrange. Click the eye icon to hide.',
- overview: 'Overview',
- totalPrints: 'Total Prints',
- successRate: 'Success Rate',
- totalPrintTime: 'Total Print Time',
- printTime: 'Print Time',
- totalFilament: 'Total Filament Used',
- filamentUsed: 'Filament Used',
- filamentCost: 'Filament Cost',
- totalCost: 'Total Cost',
- energyUsed: 'Energy Used',
- energyCost: 'Energy Cost',
- averagePrintTime: 'Average Print Time',
- printsPerDay: 'Prints per Day',
- byPrinter: 'By Printer',
- printsByPrinter: 'Prints by Printer',
- byMaterial: 'By Material',
- byMonth: 'By Month',
- last7Days: 'Last 7 Days',
- last30Days: 'Last 30 Days',
- last90Days: 'Last 90 Days',
- allTime: 'All Time',
- // Widgets
- quickStats: 'Quick Stats',
- printActivity: 'Print Activity',
- filamentTypes: 'Filament Types',
- filamentTrends: 'Filament Trends',
- failureAnalysis: 'Failure Analysis',
- timeAccuracy: 'Time Accuracy',
- successful: 'Successful:',
- failed: 'Failed:',
- perfectEstimate: '100% = perfect estimate',
- noTimeAccuracyData: 'No time accuracy data yet',
- noFilamentData: 'No filament data available',
- noPrinterData: 'No printer data available',
- noPrintData: 'No print data available',
- noPrintDataLast30Days: 'No print data in the last 30 days',
- failureReasons: 'Failure Reasons',
- topFailureReasons: 'Top Failure Reasons',
- failedPrintsCount: '{{failed}} / {{total}} prints failed',
- lastWeekRate: 'Last week: {{rate}}%',
- // Actions
- resetLayout: 'Reset Layout',
- recalculateCosts: 'Recalculate Costs',
- recalculateCostsHint: 'Recalculate all archive costs using current filament prices',
- exportStats: 'Export Stats',
- exportAsCsv: 'Export as CSV',
- exportAsExcel: 'Export as Excel',
- hiddenCount: '{{count}} Hidden',
- // Toast
- exportDownloaded: 'Export downloaded',
- exportFailed: 'Export failed',
- layoutReset: 'Layout reset',
- recalculatedCosts: 'Recalculated costs for {{count}} archives',
- recalculateFailed: 'Failed to recalculate costs',
- // Loading
- loadingStats: 'Loading statistics...',
- // Permissions
- noPermissionResetLayout: 'You do not have permission to reset layout',
- noPermissionRecalculate: 'You do not have permission to recalculate costs',
- },
- // Maintenance page
- maintenance: {
- title: 'Maintenance',
- overview: 'Overview',
- allOk: 'All maintenance up to date',
- dueCount: '{{count}} item due',
- dueCount_plural: '{{count}} items due',
- warningCount: '{{count}} warning',
- warningCount_plural: '{{count}} warnings',
- totalPrintTime: 'Total Print Time',
- nextMaintenance: 'Next Maintenance',
- nothingDue: 'Nothing due',
- tasks: 'Tasks',
- lastPerformed: 'Last performed',
- interval: 'Interval',
- hoursRemaining: '{{hours}}h remaining',
- hoursOverdue: '{{hours}}h overdue',
- markDone: 'Mark as Done',
- performMaintenance: 'Perform Maintenance',
- history: 'History',
- noHistory: 'No maintenance history',
- editPrintHours: 'Edit Print Hours',
- currentHours: 'Current Hours',
- // Tabs
- statusTab: 'Status',
- settingsTab: 'Settings',
- // Status
- overdueCount: '{{count}} overdue',
- dueSoonCount: '{{count}} due soon',
- dueSoon: 'Due soon',
- allGood: 'All good',
- overdueBy: 'Overdue by {{duration}}',
- dueIn: 'Due in {{duration}}',
- timeLeft: '{{duration}} left',
- // Duration formats
- day: '1 day',
- days: '{{count}} days',
- week: '1 week',
- weeks: '{{count}} weeks',
- month: '1 month',
- months: '{{count}} months',
- year: '1 year',
- // Settings
- maintenanceTypes: 'Maintenance Types',
- maintenanceTypesDescription: 'System types and your custom maintenance tasks',
- addCustomType: 'Add Custom Type',
- intervalType: 'Interval Type',
- intervalValue: 'Interval ({{type}})',
- icon: 'Icon',
- documentationLink: 'Documentation Link (optional)',
- assignToPrinters: 'Assign to Printers',
- selectAtLeastOnePrinter: 'Select at least one printer',
- addType: 'Add Type',
- custom: 'Custom',
- printHours: 'Print Hours',
- calendarDays: 'Calendar Days',
- exampleName: 'e.g., Replace HEPA Filter',
- viewDocumentation: 'View documentation',
- timeBasedInterval: 'Time-based interval',
- // Interval overrides
- intervalOverrides: 'Interval Overrides',
- intervalOverridesDescription: 'Customize intervals for specific printers',
- // Printer assignment
- assignedToPrinters: 'Assigned to printers:',
- noPrintersAssigned: 'No printers assigned',
- addPrinterShort: 'Add:',
- printersAssignedClick: '{{count}} printer(s) assigned - click to manage',
- removeFromPrinter: 'Remove from this printer',
- // Types
- types: {
- lubricateRails: 'Lubricate Linear Rails',
- cleanNozzle: 'Clean Nozzle/Hotend',
- checkBelts: 'Check Belt Tension',
- cleanBuildPlate: 'Clean Build Plate',
- checkExtruder: 'Check Extruder Gears',
- checkCooling: 'Check Cooling Fans',
- generalInspection: 'General Inspection',
- cleanCarbonRods: 'Clean Carbon Rods',
- checkPtfeTube: 'Check PTFE Tube',
- replaceHepaFilter: 'Replace HEPA Filter',
- replaceCarbonFilter: 'Replace Carbon Filter',
- lubricateLeftNozzleRail: 'Lubricate Left Nozzle Rail',
- },
- // Toast
- maintenanceComplete: 'Maintenance marked as complete',
- typeUpdated: 'Maintenance type updated',
- typeDeleted: 'Maintenance type deleted',
- printHoursUpdated: 'Print hours updated',
- printerAssigned: 'Printer assigned',
- printerRemoved: 'Printer removed',
- // Confirmation
- deleteTypeConfirm: 'Delete "{{name}}"?',
- // Permissions
- noPermissionUpdate: 'You do not have permission to update maintenance items',
- noPermissionPerform: 'You do not have permission to perform maintenance',
- noPermissionEditTypes: 'You do not have permission to edit maintenance types',
- noPermissionDeleteTypes: 'You do not have permission to delete maintenance types',
- noPermissionEditHours: 'You do not have permission to edit print hours',
- noPermissionRemovePrinter: 'You do not have permission to remove printer assignments',
- noPermissionAssignPrinter: 'You do not have permission to assign printers',
- noPermissionEditIntervals: 'You do not have permission to edit intervals',
- // Configure link
- configureSettings: 'Configure maintenance types and intervals',
- },
- // Settings page
- settings: {
- title: 'Settings',
- general: 'General',
- // Tab names
- tabs: {
- general: 'General',
- smartPlugs: 'Smart Plugs',
- notifications: 'Notifications',
- filament: 'Filament',
- network: 'Network',
- apiKeys: 'API Keys',
- virtualPrinter: 'Virtual Printer',
- users: 'Users',
- backup: 'Backup',
- },
- appearance: 'Appearance',
- notifications: 'Notifications',
- smartPlugs: 'Smart Plugs',
- spoolman: 'Spoolman',
- updates: 'Updates',
- language: 'Language',
- languageDescription: 'Select your preferred language',
- theme: 'Theme',
- themeLight: 'Light',
- themeDark: 'Dark',
- themeSystem: 'System',
- defaultView: 'Default View',
- defaultViewDescription: 'Page to show when opening the app',
- checkForUpdates: 'Check for Updates',
- autoUpdate: 'Auto Update',
- currentVersion: 'Current Version',
- latestVersion: 'Latest Version',
- upToDate: 'You are up to date',
- updateAvailable: 'Update available',
- // Notifications
- notificationLanguage: 'Notification Language',
- notificationLanguageDescription: 'Language for push notifications',
- notificationProviders: 'Notification Providers',
- addProvider: 'Add Provider',
- editProvider: 'Edit Provider',
- providerType: 'Provider Type',
- testNotification: 'Test Notification',
- testSuccess: 'Test notification sent successfully',
- testFailed: 'Failed to send test notification',
- quietHours: 'Quiet Hours',
- quietHoursDescription: 'Do not disturb during these hours',
- quietHoursStart: 'Start',
- quietHoursEnd: 'End',
- events: {
- title: 'Notification Events',
- printStart: 'Print Started',
- printComplete: 'Print Completed',
- printFailed: 'Print Failed',
- printStopped: 'Print Stopped',
- printProgress: 'Progress Milestones',
- printProgressDescription: 'Notify at 25%, 50%, 75%',
- printerOffline: 'Printer Offline',
- printerError: 'Printer Error',
- filamentLow: 'Low Filament',
- maintenanceDue: 'Maintenance Due',
- maintenanceDueDescription: 'Notify when maintenance is needed',
- },
- // Smart Plugs
- smartPlug: {
- title: 'Smart Plugs',
- add: 'Add Smart Plug',
- edit: 'Edit Smart Plug',
- name: 'Name',
- ipAddress: 'IP Address',
- linkedPrinter: 'Linked Printer',
- autoOn: 'Auto Power On',
- autoOnDescription: 'Turn on when print starts',
- autoOff: 'Auto Power Off',
- autoOffDescription: 'Turn off after print completes',
- offDelay: 'Off Delay',
- offDelayMinutes: 'Minutes after print',
- offDelayTemp: 'When nozzle below temperature',
- currentState: 'Current State',
- turnOn: 'Turn On',
- turnOff: 'Turn Off',
- },
- // Spoolman
- spoolmanEnabled: 'Enable Spoolman Integration',
- spoolmanUrl: 'Spoolman URL',
- spoolmanConnected: 'Connected',
- spoolmanDisconnected: 'Disconnected',
- // Default printer
- noDefaultPrinter: 'No default (ask each time)',
- // Sidebar
- sidebarOrder: 'Sidebar order',
- // Camera
- saveThumbnails: 'Save thumbnails',
- captureFinishPhoto: 'Capture finish photo',
- noPrintersConfigured: 'No printers configured',
- // Archive settings
- archiveMode: {
- always: 'Always create archive entry',
- never: 'Never create archive entry',
- ask: 'Ask each time',
- },
- // Updates
- checkForUpdatesLabel: 'Check for updates',
- checkPrinterFirmware: 'Check printer firmware',
- // Queue
- enableRetry: 'Enable retry',
- // Home Assistant
- homeAssistantDescription: 'Control smart plugs via Home Assistant',
- environmentManagedLabel: '(Environment Managed)',
- autoEnabledViaEnv: 'Automatically enabled via environment variables',
- urlFromEnvReadOnly: 'Value set by HA_URL environment variable (read-only)',
- tokenFromEnvReadOnly: 'Value set by HA_TOKEN environment variable (read-only)',
- // MQTT
- mqttConnectedTo: 'Connected to',
- // Prometheus
- prometheusDescription: 'Expose printer data in Prometheus format',
- // Smart plugs empty state
- noSmartPlugsTitle: 'No smart plugs configured',
- noSmartPlugsDescription: 'Add a Tasmota-based smart plug to track energy usage and automate power control.',
- // Notifications empty state
- noProvidersTitle: 'No providers configured',
- noProvidersDescription: 'Add a provider to receive alerts.',
- noTemplatesAvailable: 'No templates available. Restart the backend to seed default templates.',
- // API permissions
- apiPermissionView: 'View printer status and queue',
- apiPermissionEdit: 'Add and remove items from print queue',
- // API keys
- apiKeysEmptyTitle: 'No API keys',
- apiKeysEmptyDescription: 'Create an API key to integrate with external services.',
- // Users
- noUsersFound: 'No users found',
- noGroupsFound: 'No groups found',
- noGroupsAvailable: 'No groups available',
- passwordsDoNotMatch: 'Passwords do not match',
- systemGroupWarning: 'System group names cannot be changed',
- // Auth disabled
- authDisabledTitle: 'Authentication is Disabled',
- authDisabledFeature1: 'Require login to access the system',
- authDisabledFeature2: 'Create multiple users with group-based permissions',
- authDisabledFeature3: 'Control access with 50+ granular permissions',
- // User deletion
- userHasCreated: 'This user has created:',
- userItemsQuestion: 'What would you like to do with these items?',
- deleteUserConfirm: 'Are you sure you want to delete this user?',
- actionCannotBeUndone: 'This action cannot be undone.',
- // Smart plugs
- addFirstSmartPlug: 'Add Your First Smart Plug',
- // Notifications
- providers: 'Providers',
- log: 'Log',
- testAll: 'Test All',
- testResults: 'Test Results',
- testPassedCount: '{{count}} passed',
- testFailedCount: '{{count}} failed',
- messageTemplates: 'Message Templates',
- messageTemplatesDescription: 'Customize notification messages for each event.',
- // API Keys section
- apiKeys: 'API Keys',
- apiKeysDescription: 'Create API keys for external integrations and webhooks.',
- createKey: 'Create Key',
- apiKeyCreated: 'API Key Created Successfully',
- apiKeyCopyWarning: "Copy this key now - it won't be shown again!",
- useInApiBrowser: 'Use in API Browser',
- createNewApiKey: 'Create New API Key',
- keyName: 'Key Name',
- keyNamePlaceholder: 'e.g., Home Assistant, OctoPrint',
- readStatus: 'Read Status',
- readStatusDescription: 'View printer status and queue',
- manageQueue: 'Manage Queue',
- manageQueueDescription: 'Add and remove items from print queue',
- controlPrinter: 'Control Printer',
- controlPrinterDescription: 'Pause, resume, and stop prints',
- unnamedKey: 'Unnamed Key',
- lastUsed: 'Last used',
- read: 'Read',
- control: 'Control',
- createFirstKey: 'Create Your First Key',
- webhookEndpoints: 'Webhook Endpoints',
- webhookApiKeyHint: 'Use your API key in the X-API-Key header.',
- webhook: {
- getAllStatus: 'Get all printer status',
- getSpecificStatus: 'Get specific printer status',
- addToQueue: 'Add to print queue',
- pausePrint: 'Pause print',
- resumePrint: 'Resume print',
- stopPrint: 'Stop print',
- },
- apiBrowser: 'API Browser',
- apiBrowserDescription: 'Explore and test all available API endpoints.',
- apiKeyForTesting: 'API Key for Testing',
- apiKeyPlaceholder: 'Paste your API key here to test authenticated endpoints...',
- apiKeyHint: 'This key will be sent as X-API-Key header with requests.',
- deleteApiKeyTitle: 'Delete API Key',
- deleteApiKeyMessage: 'Are you sure you want to delete this API key? Any integrations using this key will stop working.',
- deleteKey: 'Delete Key',
- // Filament tab
- amsDisplayThresholds: 'AMS Display Thresholds',
- amsThresholdsDescription: 'Configure color thresholds for AMS humidity and temperature indicators.',
- humidity: 'Humidity',
- goodGreen: 'Good (green)',
- fairOrange: 'Fair (orange)',
- aboveFairBad: 'Above fair threshold shows as red (bad)',
- temperature: 'Temperature',
- goodBlue: 'Good (blue)',
- aboveFairHot: 'Above fair threshold shows as red (hot)',
- historyRetention: 'History Retention',
- keepSensorHistory: 'Keep sensor history for',
- historyRetentionDescription: 'Older humidity and temperature data will be automatically deleted',
- printModal: 'Print Modal',
- expandCustomMapping: 'Expand custom mapping by default',
- expandCustomMappingDescription: 'When printing to multiple printers, show per-printer AMS mapping expanded',
- // User management
- authentication: 'Authentication',
- authEnabledDescription: 'Your instance is secured with user authentication',
- authDisabledDescription: 'Enable to require login and manage user access',
- authDisabledMessage: 'Enable authentication to create user accounts, manage permissions, and secure your Bambuddy instance.',
- enableAuthentication: 'Enable Authentication',
- currentUser: 'Current User',
- changePassword: 'Change Password',
- admin: 'Admin',
- users: 'Users',
- addUser: 'Add User',
- groups: 'Groups',
- addGroup: 'Add Group',
- system: 'System',
- noDescription: 'No description',
- userCount: '{{count}} users',
- permissionCount: '{{count}} permissions',
- createUser: 'Create User',
- username: 'Username',
- enterUsername: 'Enter username',
- password: 'Password',
- enterPassword: 'Enter password (min 6 characters)',
- confirmPassword: 'Confirm Password',
- confirmPasswordPlaceholder: 'Confirm password',
- // Title tooltips
- viewReleaseOnGitHub: 'View release on GitHub',
- turnAllPlugsOn: 'Turn all plugs on',
- turnAllPlugsOff: 'Turn all plugs off',
- // Modal: Clear logs
- clearNotificationLogs: 'Clear Notification Logs',
- clearLogsMessage: 'This will permanently delete all notification logs older than 30 days. This action cannot be undone.',
- clearLogs: 'Clear Logs',
- // Modal: Reset UI
- resetUiPreferences: 'Reset UI Preferences',
- resetUiPreferencesMessage: 'This will reset all UI preferences to defaults: sidebar order, theme, dashboard layout, view modes, and sorting preferences. Your printers, archives, and server settings will NOT be affected. The page will reload after clearing.',
- resetPreferences: 'Reset Preferences',
- // Modal: Delete group
- deleteGroupTitle: 'Delete Group',
- deleteGroupMessage: 'Are you sure you want to delete this group? Users in this group will lose these permissions.',
- deleteGroup: 'Delete Group',
- // Modal: Disable auth
- disableAuthenticationTitle: 'Disable Authentication',
- disableAuthenticationMessage: 'Are you sure you want to disable authentication? This will make your Bambuddy instance accessible without login. All users will remain in the database but authentication will be disabled.',
- disableAuthentication: 'Disable Authentication',
- // Additional settings
- configureBambuddy: 'Configure Bambuddy',
- systemDefault: 'System Default',
- archiveSettings: 'Archive Settings',
- newWindow: 'New Window',
- embeddedOverlay: 'Embedded Overlay',
- externalCameras: 'External Cameras',
- costTracking: 'Cost Tracking',
- printsOnly: 'Prints Only',
- totalConsumption: 'Total Consumption',
- dataManagement: 'Data Management',
- clearNotificationLogsDescription: 'Delete notification logs older than 30 days',
- resetUiPreferencesDescription: 'Reset sidebar order, theme, view modes, and layout preferences. Printers, archives, and settings are not affected.',
- enableHomeAssistant: 'Enable Home Assistant',
- enableMqtt: 'Enable MQTT',
- useTls: 'Use TLS',
- enableMetricsEndpoint: 'Enable Metrics Endpoint',
- availableMetrics: 'Available Metrics',
- editUser: 'Edit User',
- deleteUserTitle: 'Delete User',
- groupName: 'Group Name',
- // Placeholders
- leaveEmptyForAnonymous: 'Leave empty for anonymous',
- leaveEmptyForNoAuth: 'Leave empty for no authentication',
- enterNewPassword: 'Enter new password',
- confirmNewPassword: 'Confirm new password',
- enterGroupName: 'Enter group name',
- enterDescriptionOptional: 'Enter description (optional)',
- enterCurrentPassword: 'Enter current password',
- enterNewPasswordMin6: 'Enter new password (min 6 characters)',
- toast: {
- keyCopied: 'Key copied to clipboard',
- copyFailed: 'Failed to copy key',
- keyAddedToBrowser: 'Key added to API Browser',
- clearLogsFailed: 'Failed to clear logs',
- uiPreferencesReset: 'UI preferences reset. Refreshing...',
- authDisabled: 'Authentication disabled successfully',
- authDisableFailed: 'Failed to disable authentication',
- apiKeyCreated: 'API key created',
- apiKeyDeleted: 'API key deleted',
- userCreated: 'User created successfully',
- userUpdated: 'User updated successfully',
- userDeleted: 'User deleted successfully',
- groupCreated: 'Group created successfully',
- groupUpdated: 'Group updated successfully',
- groupDeleted: 'Group deleted successfully',
- fillRequiredFields: 'Please fill in all required fields',
- passwordsDoNotMatch: 'Passwords do not match',
- passwordTooShort: 'Password must be at least 6 characters',
- enterGroupName: 'Please enter a group name',
- settingsSaved: 'Settings saved',
- cameraSettingsSaved: 'Camera settings saved',
- enterCameraUrl: 'Please enter a camera URL',
- passwordChanged: 'Password changed successfully',
- connectionFailed: 'Connection failed',
- testFailed: 'Test failed',
- cameraConnected: 'Camera connected{{resolution}}',
- },
- testConnection: 'Test Connection',
- },
- // Notifications (for push notifications)
- notification: {
- printStarted: {
- title: 'Print Started',
- body: '{{printer}}: {{filename}} has started printing',
- },
- printCompleted: {
- title: 'Print Completed',
- body: '{{printer}}: {{filename}} completed successfully',
- },
- printFailed: {
- title: 'Print Failed',
- body: '{{printer}}: {{filename}} has failed',
- },
- printStopped: {
- title: 'Print Stopped',
- body: '{{printer}}: {{filename}} was stopped',
- },
- printProgress: {
- title: 'Print Progress',
- body: '{{printer}}: {{filename}} is {{percent}}% complete',
- },
- printerOffline: {
- title: 'Printer Offline',
- body: '{{printer}} is offline',
- },
- printerError: {
- title: 'Printer Error',
- body: '{{printer}}: {{error}}',
- },
- filamentLow: {
- title: 'Low Filament',
- body: '{{printer}}: Filament is running low',
- },
- maintenanceDue: {
- title: 'Maintenance Due',
- body: '{{printer}}: {{items}} need attention',
- },
- },
- // Errors
- errors: {
- generic: 'Something went wrong',
- networkError: 'Network error. Please check your connection.',
- notFound: 'Not found',
- unauthorized: 'Unauthorized',
- serverError: 'Server error',
- validationError: 'Please check your input',
- printerConnectionFailed: 'Failed to connect to printer',
- saveFailed: 'Failed to save changes',
- deleteFailed: 'Failed to delete',
- loadFailed: 'Failed to load data',
- },
- // HMS Errors modal
- hmsErrors: {
- title: 'Errors - {{name}}',
- noErrors: 'No errors',
- viewOnWiki: 'View on Bambu Lab Wiki',
- clearInstructions: 'Clear errors on the printer to dismiss them here.',
- },
- // MQTT Debug modal
- mqttDebug: {
- title: 'MQTT Debug Log',
- searchPlaceholder: 'Search topic or payload...',
- noMessages: 'No messages logged yet',
- startLoggingHint: 'Click "Start Logging" to begin capturing MQTT messages',
- noMessagesMatch: 'No messages match your filter',
- adjustFilterHint: 'Try adjusting your search or filter criteria',
- incoming: 'Incoming',
- outgoing: 'Outgoing',
- loggingStopped: 'Logging stopped',
- loggingActive: 'Logging active - messages will auto-refresh',
- startLogging: 'Start Logging',
- stopLogging: 'Stop Logging',
- clearLog: 'Clear Log',
- topic: 'Topic',
- timestamp: 'Timestamp',
- direction: 'Direction',
- all: 'All',
- },
- // Printer File Manager modal (printer internal storage)
- printerFiles: {
- title: 'File Manager',
- storageUsed: 'Used:',
- storageFree: 'Free:',
- filterPlaceholder: 'Filter files...',
- deleteButton: 'Delete',
- deleteFiles: 'Delete {{count}} Files',
- deleteFileConfirm: 'Delete "{{name}}"? This cannot be undone.',
- deleteFilesConfirm: 'Delete {{count}} selected files? This cannot be undone.',
- noFiles: 'No files on printer',
- loadingFiles: 'Loading files...',
- failedToLoad: 'Failed to load files',
- toast: {
- filesDeleted: 'Deleted {{count}} file(s)',
- deleteFailed: 'Delete failed: {{error}}',
- },
- },
- // Confirmations
- confirm: {
- delete: 'Are you sure you want to delete this?',
- unsavedChanges: 'You have unsaved changes. Are you sure you want to leave?',
- clearQueue: 'Are you sure you want to clear the queue?',
- },
- // Login page
- login: {
- title: 'Bambuddy Login',
- subtitle: 'Sign in to your account',
- username: 'Username',
- usernamePlaceholder: 'Enter your username',
- password: 'Password',
- passwordPlaceholder: 'Enter your password',
- signIn: 'Sign in',
- signingIn: 'Logging in...',
- forgotPassword: 'Forgot your password?',
- loginSuccess: 'Logged in successfully',
- loginFailed: 'Login failed',
- enterCredentials: 'Please enter username and password',
- forgotPasswordTitle: 'Forgot Password',
- forgotPasswordMessage: "If you've forgotten your password, please contact your system administrator to reset it.",
- howToReset: 'How to reset your password:',
- resetStep1: 'Contact your Bambuddy administrator',
- resetStep2: 'Ask them to reset your password in User Management',
- resetStep3: 'They can set a new temporary password for you',
- resetStep4: 'Log in with the new password and change it in Settings',
- gotIt: 'Got it',
- },
- // Setup page
- setup: {
- title: 'Bambuddy Setup',
- subtitle: 'Configure authentication for your Bambuddy instance',
- enableAuth: 'Enable Authentication',
- adminAccount: 'Admin Account',
- adminAccountDesc: 'If admin users already exist, authentication will be enabled using the existing admin accounts. Leave the fields below empty to use existing admins, or enter new credentials to create a new admin user.',
- adminUsername: 'Admin Username',
- adminPassword: 'Admin Password',
- optionalIfAdminExists: '(optional if admin users exist)',
- adminUsernamePlaceholder: 'Enter admin username (optional)',
- adminPasswordPlaceholder: 'Enter admin password (optional)',
- confirmPassword: 'Confirm Password',
- confirmPasswordPlaceholder: 'Confirm admin password',
- settingUp: 'Setting up...',
- completeSetup: 'Complete Setup',
- toast: {
- authEnabledAdminCreated: 'Authentication enabled and admin user created',
- authEnabledExistingAdmins: 'Authentication enabled using existing admin users',
- setupCompleted: 'Setup completed',
- enterBothCredentials: 'Please enter both admin username and password, or leave both empty to use existing admin users',
- passwordsDoNotMatch: 'Passwords do not match',
- passwordTooShort: 'Password must be at least 6 characters',
- },
- },
- // Password change
- changePassword: {
- title: 'Change Password',
- currentPassword: 'Current Password',
- currentPasswordPlaceholder: 'Enter current password',
- newPassword: 'New Password',
- newPasswordPlaceholder: 'Enter new password (min 6 characters)',
- confirmPassword: 'Confirm New Password',
- confirmPasswordPlaceholder: 'Confirm new password',
- passwordsDoNotMatch: 'Passwords do not match',
- passwordTooShort: 'Password must be at least 6 characters',
- changing: 'Changing...',
- success: 'Password changed successfully',
- failed: 'Failed to change password',
- },
- // Plate detection alert
- plateAlert: {
- title: 'Print Paused!',
- message: 'Objects detected on build plate. The print has been automatically paused. Please clear the plate and resume the print.',
- understand: 'I Understand',
- },
- // Camera page
- camera: {
- title: 'Camera View',
- invalidPrinterId: 'Invalid printer ID',
- live: 'Live',
- snapshot: 'Snapshot',
- restartStream: 'Restart stream',
- refreshSnapshot: 'Refresh snapshot',
- fullscreen: 'Fullscreen',
- exitFullscreen: 'Exit fullscreen',
- connectingToCamera: 'Connecting to camera...',
- capturingSnapshot: 'Capturing snapshot...',
- connectionLost: 'Connection lost',
- connectionFailed: 'Camera connection failed',
- reconnecting: 'Reconnecting in {{countdown}}s... (attempt {{attempt}}/{{max}})',
- reconnectNow: 'Reconnect now',
- cameraUnavailable: 'Camera unavailable',
- cameraUnavailableDesc: 'Make sure the printer is powered on and connected.',
- noCamera: 'No camera available',
- retry: 'Retry',
- cameraStream: 'Camera stream',
- zoomOut: 'Zoom out',
- zoomIn: 'Zoom in',
- resetZoom: 'Reset zoom',
- recording: 'Recording',
- startRecording: 'Start Recording',
- stopRecording: 'Stop Recording',
- chamberLight: 'Toggle chamber light',
- },
- // Groups management
- groups: {
- title: 'Group Management',
- subtitle: 'Manage permission groups for access control',
- backToSettings: 'Back to Settings',
- createGroup: 'Create Group',
- noPermission: 'You do not have permission to access this page.',
- system: 'System',
- noDescription: 'No description',
- usersCount: '{{count}} users',
- permissionsCount: '{{count}} permissions',
- edit: 'Edit',
- delete: 'Delete',
- toast: {
- created: 'Group created successfully',
- updated: 'Group updated successfully',
- deleted: 'Group deleted successfully',
- enterGroupName: 'Please enter a group name',
- },
- modal: {
- editGroup: 'Edit Group',
- createGroup: 'Create Group',
- cancel: 'Cancel',
- saving: 'Saving...',
- creating: 'Creating...',
- saveChanges: 'Save Changes',
- },
- form: {
- groupName: 'Group Name',
- groupNamePlaceholder: 'Enter group name',
- systemGroupWarning: 'System group names cannot be changed',
- description: 'Description',
- descriptionPlaceholder: 'Enter description (optional)',
- permissions: 'Permissions ({{count}} selected)',
- },
- deleteModal: {
- title: 'Delete Group',
- message: 'Are you sure you want to delete this group? Users in this group will lose these permissions.',
- confirm: 'Delete Group',
- },
- },
- // Users management
- users: {
- title: 'User Management',
- subtitle: 'Manage users and their access to your Bambuddy instance',
- backToSettings: 'Back to Settings',
- createUser: 'Create User',
- noPermission: 'You do not have permission to access this page.',
- admin: 'Admin',
- noGroups: 'No groups',
- active: 'Active',
- inactive: 'Inactive',
- edit: 'Edit',
- delete: 'Delete',
- system: 'System',
- noGroupsAvailable: 'No groups available',
- table: {
- username: 'Username',
- groups: 'Groups',
- status: 'Status',
- actions: 'Actions',
- },
- toast: {
- created: 'User created successfully',
- updated: 'User updated successfully',
- deleted: 'User deleted successfully',
- fillRequired: 'Please fill in all required fields',
- passwordsDoNotMatch: 'Passwords do not match',
- passwordTooShort: 'Password must be at least 6 characters',
- },
- modal: {
- createUser: 'Create User',
- editUser: 'Edit User',
- cancel: 'Cancel',
- creating: 'Creating...',
- saving: 'Saving...',
- saveChanges: 'Save Changes',
- },
- form: {
- username: 'Username',
- usernamePlaceholder: 'Enter username',
- password: 'Password',
- passwordPlaceholder: 'Enter password',
- confirmPassword: 'Confirm Password',
- confirmPasswordPlaceholder: 'Confirm password',
- newPasswordPlaceholder: 'Enter new password',
- confirmNewPasswordPlaceholder: 'Confirm new password',
- leaveBlankToKeep: 'leave blank to keep current',
- groups: 'Groups',
- },
- deleteModal: {
- title: 'Delete User',
- message: 'Are you sure you want to delete this user? This action cannot be undone.',
- confirm: 'Delete User',
- },
- },
- // Stream overlay
- streamOverlay: {
- title: 'Stream Overlay',
- invalidPrinterId: 'Invalid printer ID',
- cameraStream: 'Camera stream',
- progress: 'Progress',
- eta: 'ETA',
- tomorrow: 'Tomorrow',
- printerIdle: 'Printer is idle',
- printerOffline: 'Printer offline',
- status: {
- printing: 'Printing',
- paused: 'Paused',
- finished: 'Finished',
- failed: 'Failed',
- idle: 'Idle',
- unknown: 'Unknown',
- },
- },
- // Profiles
- profiles: {
- title: 'Profiles',
- subtitle: 'Manage your slicer presets and pressure advance calibrations',
- tabs: {
- cloud: 'Cloud Profiles',
- kprofiles: 'K-Profiles',
- },
- connectedAs: 'Connected as',
- logout: 'Logout',
- noLogoutPermission: 'You do not have permission to logout',
- failedToLoad: 'Failed to load profiles',
- retry: 'Retry',
- time: {
- justNow: 'Just now',
- minsAgo: '{{count}}m ago',
- hoursAgo: '{{count}}h ago',
- daysAgo: '{{count}}d ago',
- },
- toast: {
- loggedOut: 'Logged out',
- },
- login: {
- title: 'Connect to Bambu Cloud',
- subtitle: 'Sync your slicer presets across devices',
- email: 'Email',
- password: 'Password',
- region: 'Region',
- regionGlobal: 'Global',
- regionChina: 'China',
- verificationCode: 'Verification Code',
- totpCode: 'Authenticator Code',
- checkEmail: 'Check your email ({{email}}) for a 6-digit code',
- enterTotpHint: 'Enter the 6-digit code from your authenticator app',
- accessToken: 'Access Token',
- accessTokenHint: 'Paste your Bambu Lab access token (from Bambu Studio)',
- back: 'Back',
- loginButton: 'Login',
- verifyButton: 'Verify',
- setTokenButton: 'Set Token',
- useToken: 'Use access token instead',
- useEmail: 'Login with email instead',
- toast: {
- loggedIn: 'Logged in successfully',
- codeSent: 'Verification code sent to your email',
- enterTotp: 'Enter code from your authenticator app',
- tokenSet: 'Token set successfully',
- },
- },
- presets: {
- myPreset: 'My preset (editable)',
- duplicate: 'Duplicate',
- editable: 'Editable',
- failedToLoadDetails: 'Failed to load preset details',
- deleteConfirm: 'Delete this preset?',
- deleteWarning: 'This will permanently delete "{{name}}" from Bambu Cloud. This cannot be undone.',
- noDuplicatePermission: 'You do not have permission to duplicate presets',
- noEditPermission: 'You do not have permission to edit presets',
- noDeletePermission: 'You do not have permission to delete presets',
- types: {
- filament: 'Filament preset',
- printer: 'Printer preset',
- process: 'Process preset',
- },
- toast: {
- deleted: 'Preset deleted',
- created: 'Preset created',
- updated: 'Preset updated',
- duplicated: 'Preset duplicated',
- fieldAdded: 'Field "{{key}}" added',
- exported: 'Preset exported',
- },
- baseLabel: 'Base: {{name}}',
- currentLabel: 'Current: {{name}}',
- newPreset: 'New Preset',
- editPreset: 'Edit Preset',
- duplicatePreset: 'Duplicate Preset',
- createNewPreset: 'Create New Preset',
- customizeSettings: 'Customize settings for your new preset',
- compareWithBase: 'Compare with base preset',
- compare: 'Compare',
- // CreatePresetModal - Basic Info
- basePreset: 'Base Preset',
- selectBasePreset: 'Select base preset...',
- presetName: 'Preset Name',
- myCustomPreset: 'My custom preset',
- inheritsFrom: 'Inherits from',
- dropJsonToImport: 'Drop JSON to import',
- // CreatePresetModal - Tabs
- tabs: {
- common: 'Common',
- allFields: 'All Fields',
- },
- // CreatePresetModal - All Fields Tab
- availableFields: 'Available Fields',
- searchFieldsPlaceholder: 'Search fields...',
- noMatchingFields: 'No matching fields',
- allFieldsAdded: 'All fields added',
- addCustomField: 'Add custom field',
- yourOverrides: 'Your Overrides',
- noOverridesYet: 'No overrides yet',
- clickFieldsToAdd: 'Click fields on the left to add them',
- saveAsTemplate: 'Save as template',
- jsonTip: 'Tip: Drag & drop a .json file anywhere on this modal to import settings',
- },
- cloudView: {
- searchPlaceholder: 'Search presets...',
- templates: 'Templates',
- refresh: 'Refresh',
- newPreset: 'New Preset',
- clearFilters: 'Clear filters',
- // Compare mode
- compareMode: 'Compare Mode',
- selectAnotherPreset: 'Select another {{type}} preset',
- clickTwoPresets: 'Click two presets of the same type to compare',
- selectFirst: '1. Select first',
- selectSecond: '2. Select second',
- compareNow: 'Compare Now',
- // Status row
- lastSynced: 'Last synced:',
- showingCount: 'Showing {{showing}} of {{total}} presets',
- noPresetsFound: 'No presets found',
- // Column headers
- columns: {
- filament: 'Filament',
- process: 'Process',
- printer: 'Printer',
- },
- noFilamentPresets: 'No filament presets',
- noProcessPresets: 'No process presets',
- noPrinterPresets: 'No printer presets',
- // Filters
- filters: {
- type: 'Type',
- owner: 'Owner',
- printer: 'Printer',
- nozzle: 'Nozzle',
- filament: 'Filament',
- layer: 'Layer',
- all: 'All',
- myPresets: 'My Presets',
- builtIn: 'Built-in',
- process: 'Process',
- },
- // Permissions
- noTemplatesPermission: 'You do not have permission to manage templates',
- noRefreshPermission: 'You do not have permission to refresh profiles',
- noCreatePermission: 'You do not have permission to create presets',
- },
- templates: {
- title: 'Quick Templates',
- noTemplates: 'No templates yet',
- createFirst: 'Create templates from the preset editor',
- typeFilter: 'Type:',
- deleteTitle: 'Delete Template',
- deleteWarning: 'This action cannot be undone',
- deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
- namePlaceholder: 'Template name',
- descriptionPlaceholder: 'Description',
- settingsJson: 'Settings (JSON)',
- fieldsCount: '{{count}} fields',
- shownInModals: 'Shown in modals',
- hiddenInModals: 'Hidden in modals',
- apply: 'Apply',
- toast: {
- deleted: 'Template deleted',
- updated: 'Template updated',
- created: 'Template created',
- applied: 'Template applied',
- },
- },
- },
- // Support/Debug
- support: {
- debugLoggingActive: 'Debug logging is active',
- manageLogs: 'Manage',
- },
- // File manager
- fileManager: {
- title: 'File Manager',
- subtitle: 'Organize and manage your print files',
- uploadFiles: 'Upload Files',
- newFolder: 'New Folder',
- folderName: 'Folder Name',
- folderNamePlaceholder: 'e.g., Functional Parts',
- renameFile: 'Rename File',
- renameFolder: 'Rename Folder',
- moveFiles: 'Move {{count}} File(s)',
- rootNoFolder: 'Root (No Folder)',
- current: 'current',
- linkFolder: 'Link Folder',
- linkFolderDescription: 'Link "{{name}}" to a project or archive for quick access.',
- project: 'Project',
- archive: 'Archive',
- noProjectsFound: 'No projects found',
- noArchivesFound: 'No archives found',
- unlink: 'Unlink',
- link: 'Link',
- dragDropFiles: 'Drag & drop files here',
- dropFilesHere: 'Drop files here',
- orClickToBrowse: 'or click to browse',
- allFileTypesSupported: 'All file types supported. ZIP files will be extracted.',
- zipFilesDetected: 'ZIP files detected',
- zipExtractOptions: 'ZIP files will be extracted. Choose how to handle folder structure:',
- preserveZipStructure: 'Preserve folder structure from ZIP',
- createFolderFromZip: 'Create folder from ZIP filename',
- stlThumbnailGeneration: 'STL thumbnail generation',
- zipMayContainStl: 'ZIP files may contain STL files. Thumbnails can be generated during extraction.',
- thumbnailsCanBeGenerated: 'Thumbnails can be generated for STL files. Large models may take longer to process.',
- generateThumbnailsForStl: 'Generate thumbnails for STL files',
- threemfDetected: '3MF files detected',
- threemfExtractionInfo: 'Printer model, material, color, and print settings will be automatically extracted from 3MF files.',
- willBeExtracted: 'Will be extracted',
- filesExtracted: '{{count}} files extracted',
- uploadComplete: 'Upload complete: {{succeeded}} succeeded',
- uploadFailed: '{{count}} failed',
- uploading: 'Uploading...',
- changeLink: 'Change Link...',
- linkTo: 'Link to...',
- linkToProjectOrArchive: 'Link to project or archive',
- addToQueue: 'Add to Queue',
- schedulePrint: 'Schedule',
- generateThumbnail: 'Generate Thumbnail',
- generateThumbnails: 'Generate Thumbnails',
- generateThumbnailsForMissing: 'Generate thumbnails for STL files missing them',
- gridView: 'Grid view',
- listView: 'List view',
- lowDiskSpaceWarning: 'Low disk space warning',
- lowDiskSpaceDetails: 'Only {{free}} free of {{total}} total. Threshold is set to {{threshold}} GB in settings.',
- files: 'Files',
- folders: 'Folders',
- size: 'Size',
- free: 'Free',
- allFiles: 'All Files',
- wrap: 'Wrap',
- enableTextWrapping: 'Enable text wrapping',
- disableTextWrapping: 'Disable text wrapping',
- dragToResizeTooltip: 'Drag to resize, double-click to reset',
- searchFiles: 'Search files...',
- allTypes: 'All types',
- prints: 'Prints',
- ascending: 'Ascending',
- descending: 'Descending',
- resultsCount: '{{showing}} of {{total}} files',
- selectAll: 'Select All',
- deselectAll: 'Deselect All',
- selected: '{{count}} selected',
- adding: 'Adding...',
- loadingFiles: 'Loading files...',
- folderIsEmpty: 'Folder is empty',
- noFilesYet: 'No files yet',
- folderEmptyDescription: 'Upload files or move files into this folder to get started.',
- noFilesDescription: 'Upload files to start organizing your print-related files.',
- noMatchingFiles: 'No matching files',
- noMatchingFilesDescription: 'No files match your current search or filter criteria.',
- clearFilters: 'Clear filters',
- printedCount: 'Printed {{count}}x',
- uploadedBy: 'Uploaded By',
- deleteFolder: 'Delete Folder',
- deleteFile: 'Delete File',
- deleteFilesCount: 'Delete {{count}} Files',
- deleteFolderConfirm: 'Are you sure you want to delete this folder? All files inside will also be deleted.',
- deleteFileConfirm: 'Are you sure you want to delete this file?',
- deleteFilesConfirm: 'Are you sure you want to delete {{count}} selected files? This action cannot be undone.',
- deleting: 'Deleting...',
- noPermissionRenameFolder: 'You do not have permission to rename folders',
- noPermissionLinkFolder: 'You do not have permission to link folders',
- noPermissionDeleteFolder: 'You do not have permission to delete folders',
- noPermissionPrint: 'You do not have permission to print',
- noPermissionAddToQueue: 'You do not have permission to add to queue',
- noPermissionDownload: 'You do not have permission to download files',
- noPermissionRenameFile: 'You do not have permission to rename this file',
- noPermissionGenerateThumbnail: 'You do not have permission to generate thumbnails',
- noPermissionDeleteFile: 'You do not have permission to delete this file',
- noPermissionCreateFolder: 'You do not have permission to create folders',
- noPermissionUpload: 'You do not have permission to upload files',
- noPermissionMoveFiles: 'You do not have permission to move files',
- noPermissionDeleteFiles: 'You do not have permission to delete files',
- toast: {
- folderCreated: 'Folder created',
- folderDeleted: 'Folder deleted',
- fileDeleted: 'File deleted',
- filesDeleted: 'Deleted {{count}} files',
- filesMoved: 'Files moved',
- folderLinked: 'Folder linked',
- folderUnlinked: 'Folder unlinked',
- addedToQueue: 'Added {{count}} file(s) to queue',
- addedToQueuePartial: 'Added {{added}} file(s), {{failed}} failed',
- failedToAddToQueue: 'Failed to add files: {{error}}',
- fileRenamed: 'File renamed',
- folderRenamed: 'Folder renamed',
- thumbnailsGenerated: 'Generated {{count}} thumbnail(s)',
- thumbnailsGeneratedPartial: 'Generated {{succeeded}} thumbnail(s), {{failed}} failed',
- noStlMissingThumbnails: 'No STL files missing thumbnails',
- failedToGenerateThumbnails: 'Failed to generate thumbnails: {{error}}',
- thumbnailGenerated: 'Thumbnail generated',
- failedToGenerateThumbnail: 'Failed to generate thumbnail: {{error}}',
- },
- },
- // Projects
- projects: {
- title: 'Projects',
- subtitle: 'Organize and track your 3D printing projects',
- newProject: 'New Project',
- editProject: 'Edit Project',
- deleteProject: 'Delete Project',
- projectName: 'Project Name',
- description: 'Description',
- noProjects: 'No projects yet',
- noProjectsFiltered: 'No {{status}} projects',
- noProjectsFilteredHelp: "You don't have any {{status}} projects. Projects will appear here when their status changes.",
- createFirst: 'Create your first project to start organizing related prints, tracking progress, and managing your builds.',
- createFirstButton: 'Create Your First Project',
- create: 'Create',
- files: 'Files',
- prints: 'Prints',
- plates: 'plates',
- parts: 'parts',
- lastModified: 'Last Modified',
- deleteConfirm: 'Are you sure you want to delete this project? Archives and queue items will be unlinked but not deleted.',
- addFiles: 'Add Files',
- removeFile: 'Remove File',
- viewDetails: 'View Details',
- // Modal fields
- namePlaceholder: 'e.g., Voron 2.4 Build',
- descriptionPlaceholder: 'Optional description...',
- color: 'Color',
- targetPlates: 'Target Plates',
- targetPlatesPlaceholder: 'e.g., 25',
- targetPlatesHelp: 'Number of print jobs',
- targetParts: 'Target Parts',
- targetPartsPlaceholder: 'e.g., 150',
- targetPartsHelp: 'Total objects needed',
- tagsLabel: 'Tags (comma-separated)',
- tagsPlaceholder: 'e.g., voron, functional, gift',
- dueDate: 'Due Date',
- priority: 'Priority',
- priorityLow: 'Low',
- priorityNormal: 'Normal',
- priorityHigh: 'High',
- priorityUrgent: 'Urgent',
- // Status
- statusActive: 'Active',
- statusCompleted: 'Completed',
- statusArchived: 'Archived',
- done: 'Done',
- completed: 'completed',
- failed: 'failed',
- inQueue: 'in queue',
- noPrintsYet: 'No prints yet',
- // Footer stats
- printJobs: 'Print jobs (plates)',
- partsPrinted: 'Parts printed',
- failedParts: 'Failed parts',
- // Actions
- import: 'Import',
- export: 'Export',
- importProject: 'Import project',
- exportAll: 'Export all projects',
- loading: 'Loading projects...',
- // Permissions
- noEditPermission: 'You do not have permission to edit projects',
- noDeletePermission: 'You do not have permission to delete projects',
- noCreatePermission: 'You do not have permission to create projects',
- noImportPermission: 'You do not have permission to import projects',
- noExportPermission: 'You do not have permission to export projects',
- // Toast
- toast: {
- created: 'Project created',
- updated: 'Project updated',
- deleted: 'Project deleted',
- imported: 'Project imported',
- multipleImported: '{{count}} projects imported',
- importFailed: 'Import failed',
- exported: 'Projects exported (metadata only)',
- },
- },
- // Project detail page
- projectDetail: {
- notFound: 'Project not found',
- backToProjects: 'Back to Projects',
- export: 'Export',
- exportProject: 'Export project',
- noExportPermission: 'You do not have permission to export projects',
- noEditPermission: 'You do not have permission to edit projects',
- partOf: 'Part of:',
- priorityLabel: 'Priority:',
- noPrints: 'No prints in this project yet',
- status: {
- active: 'Active',
- completed: 'Completed',
- archived: 'Archived',
- },
- priority: {
- low: 'Low',
- normal: 'Normal',
- high: 'High',
- urgent: 'Urgent',
- },
- dueDate: {
- overdue: 'Overdue',
- today: 'Due today',
- daysLeft: '{{count}} days left',
- },
- progress: {
- platesProgress: 'Plates Progress',
- partsProgress: 'Parts Progress',
- printJobs: 'print jobs',
- parts: 'parts',
- percentComplete: '{{percent}}% complete',
- remaining: '{{count}} remaining',
- },
- stats: {
- printJobs: 'Print Jobs',
- total: 'total',
- failed: '{{count}} failed',
- partsPrinted: '{{count}} parts printed',
- printTime: 'Print Time',
- filamentUsed: 'Filament Used',
- },
- cost: {
- title: 'Cost Tracking',
- filamentCost: 'Filament Cost',
- energy: 'Energy',
- budget: 'Budget',
- remaining: 'Remaining',
- },
- subProjects: {
- title: 'Sub-projects ({{count}})',
- },
- notes: {
- title: 'Notes',
- noEditPermission: 'You do not have permission to edit notes',
- placeholder: 'Add notes about this project...',
- empty: 'No notes yet. Click Edit to add notes.',
- },
- files: {
- title: 'Files',
- linkFolders: 'Link folders from the File Manager',
- forQuickAccess: 'to this project for quick access.',
- fileCount: '{{count}} file(s)',
- empty: 'No folders linked. Go to File Manager and link a folder to this project.',
- },
- bom: {
- title: 'Bill of Materials',
- acquired: '{{completed}}/{{total}} acquired',
- showAll: 'Show all',
- hideDone: 'Hide done',
- addPart: 'Add Part',
- noAddPermission: 'You do not have permission to add parts',
- partNamePlaceholder: 'Part name (e.g., M3x8 screws)',
- partName: 'Part name',
- qty: 'Qty',
- price: 'Price ({{currency}})',
- sourcingUrlPlaceholder: 'Sourcing URL (optional)',
- remarksPlaceholder: 'Remarks (optional)',
- deletePart: 'Delete Part',
- deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
- noUpdatePermission: 'You do not have permission to update parts',
- noEditPermission: 'You do not have permission to edit parts',
- noDeletePermission: 'You do not have permission to delete parts',
- totalCost: 'Total cost:',
- empty: 'No parts in the bill of materials. Add hardware, electronics, or other components to track what needs to be sourced.',
- },
- timeline: {
- title: 'Activity Timeline',
- empty: 'No activity yet.',
- },
- template: {
- saveAsTemplate: 'Save as Template',
- noCreatePermission: 'You do not have permission to create templates',
- },
- queue: {
- title: 'Queue',
- viewAll: 'View all',
- printing: '{{count}} printing',
- queued: '{{count}} queued',
- },
- prints: {
- title: 'Prints ({{count}})',
- },
- toast: {
- projectUpdated: 'Project updated',
- partAdded: 'Part added',
- partRemoved: 'Part removed',
- exportFailed: 'Export failed',
- projectExported: 'Project exported',
- templateCreated: 'Template created',
- },
- },
- // System info
- system: {
- title: 'System Information',
- version: 'Version',
- uptime: 'Uptime',
- cpuUsage: 'CPU Usage',
- memoryUsage: 'Memory Usage',
- diskUsage: 'Disk Usage',
- networkInfo: 'Network Info',
- logs: 'Logs',
- debugMode: 'Debug Mode',
- enableDebug: 'Enable Debug Logging',
- disableDebug: 'Disable Debug Logging',
- downloadLogs: 'Download Logs',
- clearLogs: 'Clear Logs',
- dockerInfo: 'Docker Info',
- containerName: 'Container Name',
- imageName: 'Image Name',
- platform: 'Platform',
- architecture: 'Architecture',
- },
- // Library (K Profiles)
- library: {
- title: 'Filament Library',
- addFilament: 'Add Filament',
- editFilament: 'Edit Filament',
- deleteFilament: 'Delete Filament',
- vendor: 'Vendor',
- material: 'Material',
- color: 'Color',
- kFactor: 'K Factor',
- temperature: 'Temperature',
- noFilaments: 'No filaments in library',
- deleteConfirm: 'Are you sure you want to delete this filament?',
- importFromPrinter: 'Import from Printer',
- exportToFile: 'Export to File',
- },
- // Spoolman
- spoolman: {
- title: 'Spoolman Integration',
- enabled: 'Spoolman Enabled',
- url: 'Spoolman URL',
- connected: 'Connected',
- disconnected: 'Not Connected',
- testConnection: 'Test Connection',
- sync: 'Sync',
- syncing: 'Syncing...',
- lastSync: 'Last Sync',
- linkToSpoolman: 'Link to Spoolman',
- openInSpoolman: 'Open in Spoolman',
- unlinkSpool: 'Unlink Spool',
- selectSpool: 'Select Spool',
- noUnlinkedSpools: 'No unlinked spools available',
- linkSuccess: 'Spool linked to Spoolman successfully',
- linkFailed: 'Failed to link spool',
- spoolId: 'Spool ID',
- fillSourceLabel: '(Spoolman)',
- weight: 'Weight',
- remaining: 'Remaining',
- disableWeightSync: 'Disable AMS Estimated Weight Sync',
- disableWeightSyncDesc: "Don't update remaining capacity from AMS estimates. Use this if you prefer Spoolman's usage tracking over AMS percentage-based estimates. New spools will still use the AMS estimate as their initial weight.",
- reportPartialUsage: 'Report Partial Usage for Failed Prints',
- reportPartialUsageDesc: 'When a print fails or is cancelled, report the estimated filament used up to that point based on layer progress.',
- },
- // Timelapse
- timelapse: {
- title: 'Timelapse',
- create: 'Create Timelapse',
- download: 'Download',
- delete: 'Delete',
- preview: 'Preview',
- frameRate: 'Frame Rate',
- quality: 'Quality',
- processing: 'Processing...',
- noTimelapses: 'No timelapses available',
- },
- // AMS
- ams: {
- title: 'AMS',
- slot: 'Slot',
- empty: 'Empty',
- emptySlot: 'Empty slot',
- unknown: 'Unknown',
- humidity: 'Humidity',
- temperature: 'Temperature',
- filamentType: 'Filament Type',
- filamentColor: 'Color',
- remaining: 'Remaining',
- history: 'AMS History',
- noHistory: 'No history available',
- configureSlot: 'Configure Slot',
- externalSpool: 'External Spool',
- profile: 'Profile',
- kFactor: 'K Factor',
- fill: 'Fill',
- configure: 'Configure',
- },
- // Print modal
- printModal: {
- title: 'Start Print',
- selectPrinter: 'Select Printer',
- selectPlate: 'Select Plate',
- filamentMapping: 'Filament Mapping',
- printSettings: 'Print Settings',
- bedLeveling: 'Bed Leveling',
- flowCalibration: 'Flow Calibration',
- vibrationCalibration: 'Vibration Calibration',
- layerInspection: 'First Layer Inspection',
- timelapse: 'Timelapse',
- startPrint: 'Start Print',
- addToQueue: 'Add to Queue',
- cancel: 'Cancel',
- noPrintersAvailable: 'No printers available',
- printerBusy: 'Printer is busy',
- printerOffline: 'Printer is offline',
- },
- // Backup
- backup: {
- title: 'Backup & Restore',
- createBackup: 'Create Backup',
- restoreBackup: 'Restore Backup',
- restoreDescription: 'Replace all data from a backup file',
- downloadBackup: 'Download Backup',
- uploadBackup: 'Upload Backup',
- lastBackup: 'Last Backup',
- autoBackup: 'Auto Backup',
- backupNow: 'Backup Now',
- restoreWarning: 'Warning: Restoring a backup will overwrite all current data.',
- includeArchives: 'Include Archives',
- includeSettings: 'Include Settings',
- includeProfiles: 'Include Profiles',
- backupSuccess: 'Backup created successfully',
- restoreSuccess: 'Backup restored successfully',
- backupFailed: 'Backup failed',
- restoreFailed: 'Restore failed',
- restoreNote: 'Virtual Printer will be stopped during restore',
- },
- // Tags
- tags: {
- title: 'Tags',
- addTag: 'Add Tag',
- editTag: 'Edit Tag',
- deleteTag: 'Delete Tag',
- tagName: 'Tag Name',
- tagColor: 'Tag Color',
- noTags: 'No tags',
- deleteConfirm: 'Are you sure you want to delete this tag?',
- manageTags: 'Manage Tags',
- },
- // Upload modal (archives)
- uploadModal: {
- title: 'Upload 3MF Files',
- dragDrop: 'Drag & drop .3mf files here',
- or: 'or',
- browseFiles: 'Browse Files',
- extractionInfo: 'The printer model will be automatically extracted from the 3MF file metadata.',
- uploaded: 'uploaded',
- failed: 'failed',
- uploading: 'Uploading...',
- upload: 'Upload',
- uploadFailed: 'Upload failed',
- },
- // Edit archive modal
- editArchive: {
- title: 'Edit Archive',
- name: 'Name',
- namePlaceholder: 'Print name',
- printer: 'Printer',
- noPrinter: 'No printer',
- project: 'Project',
- noProject: 'No project',
- itemsPrinted: 'Items Printed',
- itemsPrintedHelp: 'Number of items produced in this print job',
- notes: 'Notes',
- notesPlaceholder: 'Add notes about this print...',
- externalLink: 'External Link',
- externalLinkPlaceholder: 'https://printables.com/model/...',
- externalLinkHelp: 'Link to Printables, Thingiverse, or other source',
- tags: 'Tags',
- tagsPlaceholder: 'Add tags...',
- addMoreTags: 'Add more tags...',
- matchingTags: 'Matching "{{query}}"',
- existingTags: 'Existing tags',
- clickToAdd: '(click to add)',
- status: 'Status',
- failureReason: 'Failure Reason',
- selectReason: 'Select reason...',
- photos: 'Photos of Printed Result',
- photosHelp: 'Click + to add photos of your printed result',
- printResult: 'Print result',
- saving: 'Saving...',
- // Failure reasons
- failureReasons: {
- adhesionFailure: 'Adhesion failure',
- spaghettiDetached: 'Spaghetti / Detached',
- layerShift: 'Layer shift',
- cloggedNozzle: 'Clogged nozzle',
- filamentRunout: 'Filament runout',
- warping: 'Warping',
- stringing: 'Stringing',
- underExtrusion: 'Under-extrusion',
- powerFailure: 'Power failure',
- userCancelled: 'User cancelled',
- other: 'Other',
- },
- // Archive statuses
- statuses: {
- completed: 'Completed',
- failed: 'Failed',
- aborted: 'Cancelled',
- printing: 'Printing',
- },
- },
- // K-Profiles
- kProfiles: {
- title: 'K-Profiles',
- noPrintersConfigured: 'No Printers Configured',
- addPrinterInSettings: 'Add a printer in Settings to manage K-profiles',
- noActivePrinters: 'No Active Printers',
- enablePrinterConnection: 'Enable a printer connection to view its K-profiles',
- loadingProfiles: 'Loading K-Profiles...',
- printerOffline: 'Printer Offline',
- printerOfflineDesc: 'The selected printer is not connected. Power it on to view K-profiles.',
- noMatchingProfiles: 'No Matching Profiles',
- noMatchingProfilesDesc: 'No profiles match your search criteria',
- noKProfiles: 'No K-Profiles',
- noKProfilesDesc: 'No pressure advance profiles found for {{diameter}}mm nozzle',
- createFirstProfile: 'Create First Profile',
- // Controls
- printer: 'Printer',
- nozzle: 'Nozzle',
- refresh: 'Refresh',
- addProfile: 'Add Profile',
- export: 'Export',
- import: 'Import',
- select: 'Select',
- selectAll: 'Select All',
- delete: 'Delete',
- // Filters
- searchPlaceholder: 'Search by name or filament...',
- allExtruders: 'All Extruders',
- leftOnly: 'Left Only',
- rightOnly: 'Right Only',
- allFlow: 'All Flow',
- hfOnly: 'HF Only',
- sOnly: 'S Only',
- sortName: 'Sort: Name',
- sortKValue: 'Sort: K-Value',
- sortFilament: 'Sort: Filament',
- // Dual extruder labels
- leftExtruder: 'Left Extruder',
- rightExtruder: 'Right Extruder',
- // Modal
- modal: {
- addTitle: 'Add K-Profile',
- editTitle: 'Edit K-Profile',
- profileName: 'Profile Name',
- profileNamePlaceholder: 'My PLA Profile',
- kValue: 'K-Value',
- kValuePlaceholder: '0.020',
- kValueHelp: 'Typical range: 0.01 - 0.06 for PLA, 0.02 - 0.10 for PETG',
- filament: 'Filament',
- selectFilament: 'Select filament...',
- noFilamentsHelp: 'No filaments found. Create a K-profile in Bambu Studio first.',
- flowType: 'Flow Type',
- highFlow: 'High Flow',
- standard: 'Standard',
- nozzleSize: 'Nozzle Size',
- extruder: 'Extruder',
- extruders: 'Extruders',
- left: 'Left',
- right: 'Right',
- notes: 'Notes (stored locally)',
- notesPlaceholder: 'Add notes about this profile...',
- notesHelp: 'Notes are saved in Bambuddy, not on the printer',
- syncing: 'Syncing with printer...',
- savingExtruder: 'Saving to extruder {{current}}/{{total}}...',
- pleaseWait: 'Please wait',
- },
- // Delete confirmation
- deleteConfirm: {
- title: 'Delete Profile',
- cannotUndo: 'This cannot be undone',
- message: 'Are you sure you want to delete "{{name}}" from the printer?',
- },
- // Bulk delete
- bulkDelete: {
- title: 'Delete Profiles',
- cannotUndo: 'This cannot be undone',
- message: 'Are you sure you want to delete {{count}} selected profiles from the printer?',
- },
- // Toast
- toast: {
- profileSaved: 'K-profile saved',
- profilesSaved: 'K-profile saved to {{count}} extruders',
- selectAtLeastOneExtruder: 'Please select at least one extruder',
- profileDeleted: 'K-profile deleted',
- profilesDeleted: 'Deleted {{count}} profiles',
- exportedProfiles: 'Exported {{count}} profiles',
- importedProfiles: 'Imported {{count}} of {{total}} profiles',
- noProfilesToExport: 'No profiles to export',
- invalidFileFormat: 'Invalid file format',
- failedToParseImport: 'Failed to parse import file',
- failedToSaveBatch: 'Failed to save K-profiles',
- noteSaved: 'Note saved',
- failedToSaveNote: 'Failed to save note',
- },
- // Permissions
- permission: {
- noRead: 'You do not have permission to refresh profiles',
- noCreate: 'You do not have permission to add profiles',
- noUpdate: 'You do not have permission to update K-profiles',
- noDelete: 'You do not have permission to delete K-profiles',
- noExport: 'You do not have permission to export profiles',
- noImport: 'You do not have permission to import profiles',
- },
- },
- // Virtual Printer
- virtualPrinter: {
- title: 'Virtual Printer',
- running: 'Running',
- stopped: 'Stopped',
- description: {
- default: 'Enable a virtual printer that appears in Bambu Studio and OrcaSlicer. Files sent to this printer will be archived directly without printing.',
- proxy: 'Enable a proxy that relays slicer traffic to a real printer, allowing remote printing over any network.',
- },
- enable: {
- title: 'Enable Virtual Printer',
- visibleInSlicer: 'Visible as "Bambuddy" in slicer discovery',
- proxyingTo: 'Proxying to {{name}}',
- notActive: 'Not active',
- },
- model: {
- title: 'Printer Model',
- description: 'Select which printer model to emulate.',
- restartWarning: 'Changing the model will restart the virtual printer',
- },
- accessCode: {
- title: 'Access Code',
- isSet: 'Access code is set',
- notSet: 'No access code set - required to enable',
- placeholder: 'Enter 8-char code',
- placeholderChange: 'Enter new code to change',
- hint: 'Must be exactly 8 characters. Used by slicers to authenticate.',
- charCount: '({{count}}/8)',
- },
- targetPrinter: {
- title: 'Target Printer',
- configured: 'Proxy target configured',
- notConfigured: 'No target printer selected - required for proxy mode',
- placeholder: 'Select a printer...',
- hint: 'Select the printer to proxy slicer traffic to. The printer must be in LAN mode.',
- noPrinters: 'No printers configured. Add a printer first to use proxy mode.',
- },
- remoteInterface: {
- title: 'Slicer Network Interface',
- configured: 'SSDP proxy enabled',
- optional: 'Optional - for SSDP discovery across networks',
- placeholder: 'Select interface for slicer network...',
- hint: 'Select the network interface connected to the slicer. Enables automatic printer discovery in Bambu Studio.',
- },
- mode: {
- title: 'Mode',
- archive: 'Archive',
- archiveDesc: 'Archive files immediately',
- review: 'Review',
- reviewDesc: 'Review before archiving',
- queue: 'Queue',
- queueDesc: 'Archive and add to queue',
- proxy: 'Proxy',
- proxyDesc: 'Relay to real printer',
- },
- setupRequired: {
- title: 'Setup Required',
- description: 'The virtual printer feature requires additional system configuration before it will work. This includes port forwarding, firewall rules, and platform-specific settings.',
- readGuide: 'Read the setup guide before enabling',
- },
- howItWorks: {
- title: 'How it works',
- titleProxy: 'How it works (Proxy Mode)',
- step1: 'Complete the setup guide for your platform',
- step2: 'Enable the virtual printer and set an access code',
- step3: 'In Bambu Studio or OrcaSlicer, go to "Add Printer"',
- step4: 'The "Bambuddy" printer should appear in the discovery list',
- step5: 'Connect using the access code you set',
- step6: 'When you "print" to Bambuddy, the 3MF file is archived instead',
- proxyStep1: 'Select the target printer (must be in LAN mode)',
- proxyStep2: 'For cross-network: select the slicer network interface',
- proxyStep3: 'Enable the proxy - printer appears in slicer discovery via SSDP',
- proxyStep4: 'Connect using the printer\'s access code',
- proxyStep5: 'Print as normal - traffic is relayed through Bambuddy',
- proxyStep6: 'Camera streaming requires NAT/IP forwarding (see docs)',
- },
- status: {
- title: 'Status Details',
- printerName: 'Printer Name',
- model: 'Model',
- serialNumber: 'Serial Number',
- mode: 'Mode',
- pendingFiles: 'Pending Files',
- targetPrinter: 'Target Printer',
- ftpPort: 'FTP Port',
- mqttPort: 'MQTT Port',
- ftpConnections: 'FTP Connections',
- mqttConnections: 'MQTT Connections',
- },
- toast: {
- updated: 'Virtual printer settings updated',
- failedToUpdate: 'Failed to update settings',
- accessCodeRequired: 'Please set an access code first',
- targetPrinterRequired: 'Please select a target printer first',
- accessCodeEmpty: 'Access code cannot be empty',
- accessCodeLength: 'Access code must be exactly 8 characters',
- },
- },
- // Model Viewer
- modelViewer: {
- openInSlicer: 'Open in Slicer',
- tabs: {
- model: '3D Model',
- gcode: 'G-code Preview',
- },
- notAvailable: 'not available',
- notSliced: 'not sliced',
- plates: 'Plates',
- allPlates: 'All Plates',
- plateNumber: 'Plate {{number}}',
- plateCount: '{{count}} plate',
- plateCount_other: '{{count}} plates',
- objectCount: '{{count}} object',
- objectCount_other: '{{count}} objects',
- filamentCount: '{{count}} filament',
- filamentCount_other: '{{count}} filaments',
- eta: 'ETA {{minutes}} min',
- noPreview: 'No preview available for this file',
- pagination: {
- pageOf: 'Page {{current}} of {{total}}',
- prev: 'Prev',
- next: 'Next',
- },
- errors: {
- failedToLoad: 'Failed to load file',
- noMeshes: 'No meshes found in 3MF file',
- unsupportedFormat: 'Unsupported file format',
- },
- },
- // Maintenance type descriptions (built-in)
- maintenanceDescriptions: {
- lubricateRails: 'Apply lubricant to linear rails for smooth motion',
- cleanNozzle: 'Clean hotend and nozzle to prevent clogs',
- checkBelts: 'Verify belt tension for accurate prints',
- cleanBuildPlate: 'Clean build plate for better adhesion',
- checkExtruder: 'Inspect extruder gears for wear',
- checkCooling: 'Ensure cooling fans are working properly',
- generalInspection: 'General printer inspection',
- cleanCarbonRods: 'Clean carbon rods to reduce friction',
- checkPtfeTube: 'Inspect PTFE tube for wear or damage',
- replaceHepaFilter: 'Replace HEPA filter for air quality',
- replaceCarbonFilter: 'Replace activated carbon filter',
- lubricateLeftNozzleRail: 'Lubricate left nozzle rail (H2 series)',
- },
- };
|