en.ts 95 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603
  1. export default {
  2. // Navigation
  3. nav: {
  4. printers: 'Printers',
  5. archives: 'Archives',
  6. queue: 'Queue',
  7. stats: 'Statistics',
  8. profiles: 'Profiles',
  9. maintenance: 'Maintenance',
  10. projects: 'Projects',
  11. files: 'File Manager',
  12. settings: 'Settings',
  13. system: 'System',
  14. collapseSidebar: 'Collapse sidebar',
  15. expandSidebar: 'Expand sidebar',
  16. update: 'Update',
  17. updateAvailable: 'Update available: v{{version}}',
  18. updateAvailableBanner: 'Version {{version}} is available!',
  19. viewUpdate: 'View update',
  20. viewOnGithub: 'View on GitHub',
  21. keyboardShortcuts: 'Keyboard shortcuts (?)',
  22. switchToLight: 'Switch to light mode',
  23. switchToDark: 'Switch to dark mode',
  24. smartSwitches: 'Smart Switches',
  25. logout: 'Logout',
  26. },
  27. // Common
  28. common: {
  29. save: 'Save',
  30. saving: 'Saving...',
  31. cancel: 'Cancel',
  32. delete: 'Delete',
  33. edit: 'Edit',
  34. add: 'Add',
  35. close: 'Close',
  36. confirm: 'Confirm',
  37. loading: 'Loading...',
  38. error: 'Error',
  39. success: 'Success',
  40. warning: 'Warning',
  41. enabled: 'Enabled',
  42. disabled: 'Disabled',
  43. yes: 'Yes',
  44. no: 'No',
  45. on: 'On',
  46. off: 'Off',
  47. all: 'All',
  48. none: 'None',
  49. search: 'Search',
  50. filter: 'Filter',
  51. sort: 'Sort',
  52. refresh: 'Refresh',
  53. download: 'Download',
  54. upload: 'Upload',
  55. actions: 'Actions',
  56. status: 'Status',
  57. name: 'Name',
  58. description: 'Description',
  59. date: 'Date',
  60. time: 'Time',
  61. hours: 'hours',
  62. minutes: 'minutes',
  63. seconds: 'seconds',
  64. days: 'days',
  65. enable: 'Enable',
  66. disable: 'Disable',
  67. permissions: 'Permissions',
  68. noPrinters: 'No printers configured',
  69. noData: 'No data available',
  70. linkNotFound: 'Link not found',
  71. required: 'Required',
  72. optional: 'Optional',
  73. dismiss: 'Dismiss',
  74. apply: 'Apply',
  75. reset: 'Reset',
  76. clear: 'Clear',
  77. selectAll: 'Select All',
  78. deselectAll: 'Deselect All',
  79. noChange: '— No change —',
  80. unchanged: 'Unchanged',
  81. unassigned: 'Unassigned',
  82. unknown: 'Unknown',
  83. unknownError: 'Unknown error',
  84. today: 'Today',
  85. asap: 'ASAP',
  86. overdue: 'Overdue',
  87. now: 'Now',
  88. collapse: 'Collapse',
  89. expand: 'Expand',
  90. viewArchive: 'View archive',
  91. viewInFileManager: 'View in File Manager',
  92. addedBy: 'Added by {{username}}',
  93. prints: 'prints',
  94. more: '+{{count}} more',
  95. ascending: 'Ascending',
  96. descending: 'Descending',
  97. printer: 'Printer',
  98. remove: 'Remove',
  99. type: 'Type',
  100. print: 'Print',
  101. rename: 'Rename',
  102. move: 'Move',
  103. create: 'Create',
  104. duplicate: 'Duplicate',
  105. left: 'Left',
  106. right: 'Right',
  107. },
  108. // Printers page
  109. printers: {
  110. title: 'Printers',
  111. addPrinter: 'Add Printer',
  112. editPrinter: 'Edit Printer',
  113. deletePrinter: 'Delete Printer',
  114. printerName: 'Printer Name',
  115. serialNumber: 'Serial Number',
  116. ipAddress: 'IP Address / Hostname',
  117. accessCode: 'Access Code',
  118. model: 'Model',
  119. nozzleCount: 'Nozzle Count',
  120. autoArchive: 'Auto Archive',
  121. status: {
  122. idle: 'Idle',
  123. printing: 'Printing',
  124. paused: 'Paused',
  125. offline: 'Offline',
  126. error: 'Error',
  127. finished: 'Finished',
  128. unknown: 'Unknown',
  129. },
  130. temperatures: {
  131. nozzle: 'Nozzle',
  132. bed: 'Bed',
  133. chamber: 'Chamber',
  134. },
  135. progress: '{{percent}}% complete',
  136. timeRemaining: '{{time}} remaining',
  137. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  138. maintenanceOk: 'Maintenance OK',
  139. maintenanceWarning: '{{count}} warning',
  140. maintenanceWarning_plural: '{{count}} warnings',
  141. maintenanceDue: '{{count}} due',
  142. maintenanceDue_plural: '{{count}} due',
  143. // Sort options
  144. sort: {
  145. name: 'Name',
  146. status: 'Status',
  147. model: 'Model',
  148. location: 'Location',
  149. ascending: 'Sort ascending',
  150. descending: 'Sort descending',
  151. },
  152. // Card size
  153. cardSize: {
  154. small: 'Small cards',
  155. medium: 'Medium cards',
  156. large: 'Large cards',
  157. extraLarge: 'Extra large cards',
  158. },
  159. // Controls
  160. hideOffline: 'Hide offline',
  161. powerOn: 'Power On',
  162. offlinePrintersWithPlugs: 'Offline printers with smart plugs',
  163. noPrintersConfigured: 'No printers configured yet',
  164. // Printer card
  165. readyToPrint: 'Ready to print',
  166. external: 'External',
  167. deleteArchives: 'Delete print archives',
  168. noLabel: 'No label',
  169. printPreview: 'Print preview',
  170. width: 'Width',
  171. height: 'Height',
  172. noObjectsFound: 'No objects found',
  173. objectsLoadedOnPrintStart: 'Objects are loaded when a print starts',
  174. willBeSkipped: 'Will be skipped',
  175. name: 'Name',
  176. serialCannotBeChanged: 'Serial number cannot be changed',
  177. locationHelp: 'Used to group printers and filter queue jobs',
  178. // WiFi signal strength
  179. wifiSignal: {
  180. veryWeak: 'Very weak',
  181. weak: 'Weak',
  182. fair: 'Fair',
  183. good: 'Good',
  184. excellent: 'Excellent',
  185. },
  186. // Maintenance
  187. maintenanceUpToDate: 'All maintenance up to date - Click to view',
  188. // Chamber light
  189. chamberLightOn: 'Turn on chamber light',
  190. chamberLightOff: 'Turn off chamber light',
  191. // Files
  192. browseFiles: 'Browse printer files',
  193. // Smart plug
  194. autoOffAfterPrint: 'Auto power-off after print',
  195. autoOffExecuted: 'Auto-off was executed - turn printer on to reset',
  196. // HMS errors
  197. hmsErrors: 'HMS Errors',
  198. viewHmsErrors: 'View {{count}} HMS error(s)',
  199. // Actions
  200. resume: 'Resume',
  201. pause: 'Pause',
  202. stop: 'Stop',
  203. camera: 'Camera',
  204. skipObject: 'Skip Object',
  205. reconnect: 'Reconnect',
  206. mqttDebug: 'MQTT Debug',
  207. activeNozzle: 'Active: {{nozzle}} nozzle',
  208. // Firmware
  209. firmwareUpdate: 'Firmware Update',
  210. firmwareInstructions: 'On the printer\'s touchscreen, go to',
  211. firmwareNav: 'Navigate to',
  212. settings: 'Settings',
  213. firmware: 'Firmware',
  214. // Discovery
  215. discoverPrinters: 'Discover Printers',
  216. searching: 'Searching...',
  217. manualEntry: 'Manual Entry',
  218. addFromCloud: 'Add from Cloud',
  219. // Toast messages
  220. toast: {
  221. printerDeleted: 'Printer deleted',
  222. printerAdded: 'Printer added',
  223. printerUpdated: 'Printer updated',
  224. failedToDelete: 'Failed to delete printer',
  225. failedToAdd: 'Failed to add printer',
  226. failedToUpdate: 'Failed to update printer',
  227. commandSent: 'Command sent',
  228. failedToSendCommand: 'Failed to send command',
  229. turnedOn: '{{name}} turned on',
  230. failedToPowerOn: 'Failed to power on {{name}}',
  231. scriptTriggered: 'Script triggered',
  232. printStopped: 'Print stopped',
  233. printPaused: 'Print paused',
  234. printResumed: 'Print resumed',
  235. referenceDeleted: 'Reference deleted',
  236. detectionAreaSaved: 'Detection area saved',
  237. failedToRunScript: 'Failed to run script',
  238. failedToStopPrint: 'Failed to stop print',
  239. failedToPausePrint: 'Failed to pause print',
  240. failedToResumePrint: 'Failed to resume print',
  241. failedToControlChamberLight: 'Failed to control chamber light',
  242. failedToUpdateSetting: 'Failed to update setting',
  243. failedToSkipObjects: 'Failed to skip objects',
  244. failedToRereadRfid: 'Failed to re-read RFID',
  245. failedToCheckPlate: 'Failed to check plate',
  246. failedToUpdateLabel: 'Failed to update label',
  247. failedToDeleteReference: 'Failed to delete reference',
  248. failedToSaveDetectionArea: 'Failed to save detection area',
  249. plateCheckEnabled: 'Plate check enabled',
  250. plateCheckDisabled: 'Plate check disabled',
  251. calibrationSaved: 'Calibration saved!',
  252. calibrationFailed: 'Calibration failed',
  253. rfidRereadInitiated: 'RFID re-read initiated',
  254. },
  255. // Connection status
  256. connection: {
  257. connected: 'Connected',
  258. offline: 'Offline',
  259. },
  260. // Queue info
  261. queue: {
  262. inQueue: '{{count}} print in queue',
  263. inQueue_plural: '{{count}} prints in queue',
  264. },
  265. // Controls section
  266. controls: 'Controls',
  267. // RFID
  268. rfid: {
  269. reread: 'Re-read RFID',
  270. },
  271. // Permissions
  272. permission: {
  273. noAdd: 'You do not have permission to add printers',
  274. noEdit: 'You do not have permission to edit printers',
  275. noDelete: 'You do not have permission to delete printers',
  276. noControl: 'You do not have permission to control printers',
  277. noFiles: 'You do not have permission to access printer files',
  278. noAmsRfid: 'You do not have permission to re-read AMS RFID',
  279. noSmartPlugControl: 'You do not have permission to control smart plugs',
  280. },
  281. // Add/Edit modal
  282. modal: {
  283. addTitle: 'Add Printer',
  284. editTitle: 'Edit Printer',
  285. myPrinter: 'My Printer',
  286. selectModel: 'Select model...',
  287. locationGroup: 'Location / Group (optional)',
  288. locationPlaceholder: 'e.g., Workshop, Office, Basement',
  289. autoArchiveLabel: 'Auto-archive completed prints',
  290. fromPrinterSettings: 'From printer settings',
  291. modelOptional: 'Model (optional)',
  292. saveChanges: 'Save Changes',
  293. },
  294. // Skip objects
  295. skipObjects: {
  296. tooltip: 'Skip objects',
  297. onlyWhilePrinting: 'Skip objects (only while printing)',
  298. requiresMultiple: 'Skip objects (requires 2+ objects)',
  299. title: 'Skip Objects',
  300. matchIdsInfo: 'Match IDs with your printer display',
  301. printerShowsIds: 'The printer screen shows object IDs on the build plate',
  302. skipSelected: 'Skip Selected',
  303. skipping: 'Skipping...',
  304. noObjectsSelected: 'No objects selected',
  305. selectObjectsToSkip: 'Select objects you want to skip from the current print',
  306. skipped: 'skipped',
  307. objectsSkipped: 'Objects skipped',
  308. activeCount: '{{count}} active',
  309. waitForLayer: 'Wait for layer 2+ to skip objects (currently layer {{layer}})',
  310. skip: 'Skip',
  311. },
  312. // Confirm modals
  313. confirm: {
  314. deleteTitle: 'Delete Printer',
  315. deleteMessage: 'Are you sure you want to delete "{{name}}"? This will remove all connection settings.',
  316. deleteArchivesNote: 'All print history for this printer will be permanently deleted.',
  317. keepArchivesNote: 'Print history will be kept but no longer associated with this printer.',
  318. stopTitle: 'Stop Print',
  319. stopMessage: 'Are you sure you want to stop the current print on "{{name}}"? This will cancel the print job.',
  320. stopButton: 'Stop Print',
  321. pauseTitle: 'Pause Print',
  322. pauseMessage: 'Are you sure you want to pause the current print on "{{name}}"?',
  323. pauseButton: 'Pause Print',
  324. resumeTitle: 'Resume Print',
  325. resumeMessage: 'Are you sure you want to resume the print on "{{name}}"?',
  326. resumeButton: 'Resume Print',
  327. powerOnTitle: 'Power On Printer',
  328. powerOnMessage: 'Are you sure you want to turn ON the power for "{{name}}"?',
  329. powerOnButton: 'Power On',
  330. powerOffTitle: 'Power Off Printer',
  331. powerOffMessage: 'Are you sure you want to turn OFF the power for "{{name}}"?',
  332. 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.',
  333. powerOffButton: 'Power Off',
  334. },
  335. // Discovery
  336. discovery: {
  337. title: 'Discover Printers',
  338. searching: 'Searching...',
  339. scanning: 'Scanning...',
  340. scanProgress: 'Scanning... {{scanned}}/{{total}}',
  341. foundPrinters: 'Found {{count}} printer(s)',
  342. noPrintersFound: 'No printers found',
  343. noPrintersFoundSubnet: 'No printers found in the specified subnet.',
  344. noPrintersFoundNetwork: 'No printers found on the network.',
  345. allConfigured: 'All discovered printers are already configured.',
  346. alreadyAdded: 'Already added',
  347. select: 'Select',
  348. manualEntry: 'Manual Entry',
  349. addFromCloud: 'Add from Cloud',
  350. subnetToScan: 'Subnet to scan',
  351. dockerNote: 'Docker detected. Enter your printer\'s subnet in CIDR notation. Requires network_mode: host in docker-compose.yml.',
  352. scanSubnet: 'Scan Subnet for Printers',
  353. discoverNetwork: 'Discover Printers on Network',
  354. scanningSubnet: 'Scanning subnet for Bambu printers...',
  355. scanningNetwork: 'Scanning network...',
  356. serialRequired: 'Serial required',
  357. unknown: 'Unknown',
  358. failedToStart: 'Failed to start discovery',
  359. },
  360. // Filaments section
  361. filaments: 'Filaments',
  362. // Camera
  363. openCameraOverlay: 'Open camera overlay',
  364. openCameraWindow: 'Open camera in new window',
  365. // Firmware
  366. firmwareUpdateAvailable: 'Firmware update available: {{current}} → {{latest}}',
  367. firmwareUpdateButton: 'Update',
  368. // Plate detection
  369. plateDetection: {
  370. noPermission: 'You do not have permission to update printers',
  371. enabledClick: 'Plate check enabled - Click to disable',
  372. disabledClick: 'Plate check disabled - Click to enable',
  373. manageCalibration: 'Manage plate detection calibration',
  374. calibrationRequired: 'Calibration Required',
  375. calibrationInstructions: 'Please ensure the build plate is <strong>completely empty</strong>, then click Calibrate.',
  376. calibrationDescription: 'Calibration captures a reference image of the empty plate. Future checks will compare against this reference to detect objects.',
  377. calibrationTip: '<strong>Tip:</strong> You can store up to 5 calibrations for different plates. The system automatically uses the best match when checking.',
  378. plateEmpty: 'Plate appears empty',
  379. objectsDetected: 'Objects detected on plate',
  380. confidence: 'Confidence',
  381. difference: 'Difference',
  382. analysisPreview: 'Analysis preview:',
  383. analysisLegend: 'Green box = detection area, Red overlay = differences from calibration',
  384. savedReferences: 'Saved References ({{count}}/{{max}})',
  385. deleteReference: 'Delete reference',
  386. labelPlaceholder: 'Label...',
  387. clickToEdit: '{{label}} - Click to edit',
  388. clickToAddLabel: 'Click to add label',
  389. },
  390. // Fans
  391. fans: {
  392. partCooling: 'Part Cooling Fan',
  393. auxiliary: 'Auxiliary Fan',
  394. chamber: 'Chamber Fan',
  395. },
  396. // HMS errors
  397. clickToViewHmsErrors: 'Click to view HMS errors',
  398. estimatedCompletion: 'Estimated completion time',
  399. slotOptions: 'Slot options',
  400. // Firmware modal
  401. firmwareModal: {
  402. title: 'Firmware Update',
  403. currentVersion: 'Current:',
  404. latestVersion: 'Latest:',
  405. releaseNotes: 'Release Notes',
  406. checkingPrereqs: 'Checking prerequisites...',
  407. sdCardReady: 'SD card ready. Click below to upload firmware.',
  408. uploadedSuccess: 'Firmware uploaded to SD card!',
  409. applyInstructions: 'To apply the update on your printer:',
  410. step1: 'On the printer\'s touchscreen, go to <strong>Settings</strong>',
  411. step2: 'Navigate to <strong>Firmware</strong>',
  412. step3: 'Select <strong>Update from SD card</strong>',
  413. step4: 'The update will take 10-20 minutes',
  414. done: 'Done',
  415. starting: 'Starting...',
  416. uploadFirmware: 'Upload Firmware',
  417. uploadedToast: 'Firmware uploaded! Trigger update from printer screen.',
  418. },
  419. accessCodePlaceholder: 'Leave empty to keep current',
  420. // ROI editor
  421. roi: {
  422. title: 'Detection Area (ROI)',
  423. xStart: 'X Start',
  424. yStart: 'Y Start',
  425. width: 'Width',
  426. height: 'Height',
  427. instruction: 'Adjust the detection area to focus on the build plate. The green box in the preview shows the current area.',
  428. },
  429. },
  430. // Archives page
  431. archives: {
  432. title: 'Print Archives',
  433. searchPlaceholder: 'Search archives...',
  434. filterByPrinter: 'Filter by printer',
  435. filterByStatus: 'Filter by status',
  436. sortBy: 'Sort by',
  437. sortNewest: 'Newest first',
  438. sortOldest: 'Oldest first',
  439. sortName: 'Name',
  440. sortDuration: 'Duration',
  441. sortLargest: 'Largest first',
  442. sortSmallest: 'Smallest first',
  443. sortSize: 'Size',
  444. noArchives: 'No archives found',
  445. noArchivesSearch: 'No archives match your search',
  446. noArchivesYet: 'No archives yet',
  447. loadingArchives: 'Loading archives...',
  448. releaseToUpload: 'Release to upload',
  449. showAll: 'Show all',
  450. showFavoritesOnly: 'Show favorites only',
  451. gridView: 'Grid view',
  452. listView: 'List view',
  453. calendarView: 'Calendar view',
  454. manageTags: 'Manage Tags',
  455. showFailedPrints: 'Show failed prints',
  456. hideFailedPrints: 'Hide failed prints',
  457. printTime: 'Print Time',
  458. filamentUsed: 'Filament Used',
  459. cost: 'Cost',
  460. reprint: 'Reprint',
  461. preview: 'Preview',
  462. deleteArchive: 'Delete Archive',
  463. deleteConfirm: 'Are you sure you want to delete this archive?',
  464. favorite: 'Favorite',
  465. unfavorite: 'Remove from favorites',
  466. viewDetails: 'View Details',
  467. status: {
  468. completed: 'Completed',
  469. failed: 'Failed',
  470. stopped: 'Stopped',
  471. },
  472. toast: {
  473. source3mfAttached: 'Source 3MF attached: {{filename}}',
  474. failedUploadSource3mf: 'Failed to upload source 3MF',
  475. source3mfRemoved: 'Source 3MF removed',
  476. failedRemoveSource3mf: 'Failed to remove source 3MF',
  477. f3dAttached: 'F3D attached: {{filename}}',
  478. failedUploadF3d: 'Failed to upload F3D',
  479. f3dRemoved: 'F3D removed',
  480. failedRemoveF3d: 'Failed to remove F3D',
  481. timelapseAttached: 'Timelapse attached: {{filename}}',
  482. timelapseAlreadyAttached: 'Timelapse already attached',
  483. noMatchingTimelapse: 'No matching timelapse found',
  484. failedScanTimelapse: 'Failed to scan for timelapse',
  485. failedAttachTimelapse: 'Failed to attach timelapse',
  486. archiveDeleted: 'Archive deleted',
  487. failedDeleteArchive: 'Failed to delete archive',
  488. addedToFavorites: 'Added to favorites',
  489. removedFromFavorites: 'Removed from favorites',
  490. projectUpdated: 'Project updated',
  491. failedUpdateProject: 'Failed to update project',
  492. linkCopied: 'Link copied to clipboard',
  493. failedCopyLink: 'Failed to copy link',
  494. photoDeleted: 'Photo deleted',
  495. failedDeletePhoto: 'Failed to delete photo',
  496. failedDeleteArchives: 'Failed to delete archives',
  497. failedUpdateFavorites: 'Failed to update favorites',
  498. exportDownloaded: 'Export downloaded',
  499. exportFailed: 'Export failed',
  500. },
  501. menu: {
  502. print: 'Print',
  503. schedule: 'Schedule',
  504. openInBambuStudio: 'Open in Bambu Studio',
  505. slice: 'Slice',
  506. externalLink: 'External Link',
  507. viewOnMakerWorld: 'View on MakerWorld',
  508. preview3d: '3D Preview',
  509. viewTimelapse: 'View Timelapse',
  510. scanForTimelapse: 'Scan for Timelapse',
  511. downloadSource3mf: 'Download Source 3MF',
  512. uploadSource3mf: 'Upload Source 3MF',
  513. replaceSource3mf: 'Replace Source 3MF',
  514. removeSource3mf: 'Remove Source 3MF',
  515. uploadF3d: 'Upload F3D',
  516. replaceF3d: 'Replace F3D',
  517. downloadF3d: 'Download F3D',
  518. removeF3d: 'Remove F3D',
  519. download: 'Download',
  520. copyDownloadLink: 'Copy Download Link',
  521. qrCode: 'QR Code',
  522. viewPhotos: 'View Photos',
  523. viewPhotosCount: 'View Photos ({{count}})',
  524. projectPage: 'Project Page',
  525. addToFavorites: 'Add to Favorites',
  526. removeFromFavorites: 'Remove from Favorites',
  527. edit: 'Edit',
  528. goToProject: 'Go to Project: {{name}}',
  529. addToProject: 'Add to Project',
  530. removeFromProject: 'Remove from Project',
  531. loading: 'Loading...',
  532. noProjectsAvailable: 'No projects available',
  533. select: 'Select',
  534. deselect: 'Deselect',
  535. delete: 'Delete',
  536. },
  537. permission: {
  538. noReprint: 'You do not have permission to reprint this archive',
  539. noAddToQueue: 'You do not have permission to add to queue',
  540. noUpdateArchives: 'You do not have permission to update archives',
  541. noUploadFiles: 'You do not have permission to upload files',
  542. noDownload: 'You do not have permission to download archives',
  543. noCopyLink: 'You do not have permission to copy download links',
  544. noDelete: 'You do not have permission to delete this archive',
  545. noCreate: 'You do not have permission to create archives',
  546. },
  547. card: {
  548. previousPlate: 'Previous plate',
  549. nextPlate: 'Next plate',
  550. plateNumber: 'Plate {{index}}',
  551. moreOptions: 'Right-click for more options',
  552. addToFavorites: 'Add to favorites',
  553. removeFromFavorites: 'Remove from favorites',
  554. cancelled: 'cancelled',
  555. failed: 'failed',
  556. duplicate: 'duplicate',
  557. duplicateTitle: 'This model has been printed before',
  558. openSource3mf: 'Open source 3MF in Bambu Studio (right-click for more options)',
  559. downloadF3d: 'Download Fusion 360 design file',
  560. viewTimelapse: 'View timelapse',
  561. viewPhoto: 'View 1 photo',
  562. viewPhotos: 'View {{count}} photos',
  563. openFolder: 'Open folder: {{name}}',
  564. slicedFile: 'Sliced file - ready to print',
  565. sourceFile: 'Source file only - no AMS mapping available',
  566. gcode: 'GCODE',
  567. source: 'SOURCE',
  568. project: 'Project: {{name}}',
  569. estimated: 'Estimated: {{time}}',
  570. actual: 'Actual: {{time}}',
  571. accuracy: 'Accuracy: {{percent}}%',
  572. filament: '{{weight}}g',
  573. layer: '{{count}} layer',
  574. layers: '{{count}} layers',
  575. object: '{{count}} object',
  576. objects: '{{count}} objects',
  577. slicedFor: 'Sliced for {{model}}',
  578. uploadedBy: 'Uploaded By',
  579. noPermissionReprint: 'You do not have permission to reprint',
  580. noPermissionEdit: 'You do not have permission to edit archives',
  581. noPermissionDelete: 'You do not have permission to delete archives',
  582. reprint: 'Reprint',
  583. schedulePrint: 'Schedule Print',
  584. schedule: 'Schedule',
  585. openInBambuStudio: 'Open in Bambu Studio',
  586. openInBambuStudioToSlice: 'Open in Bambu Studio to slice',
  587. slice: 'Slice',
  588. externalLink: 'External Link',
  589. makerWorld: 'MakerWorld: {{designer}}',
  590. viewProject: 'View project',
  591. noExternalLink: 'No external link',
  592. preview3d: '3D Preview',
  593. download: 'Download',
  594. edit: 'Edit',
  595. delete: 'Delete',
  596. },
  597. modal: {
  598. deleteArchive: 'Delete Archive',
  599. deleteConfirm: 'Are you sure you want to delete "{{name}}"? This action cannot be undone.',
  600. deleteButton: 'Delete',
  601. removeSource3mf: 'Remove Source 3MF',
  602. removeSource3mfConfirm: 'Are you sure you want to remove the source 3MF file from "{{name}}"? This will delete the original slicer project file.',
  603. removeButton: 'Remove',
  604. removeF3d: 'Remove F3D',
  605. removeF3dConfirm: 'Are you sure you want to remove the Fusion 360 design file from "{{name}}"?',
  606. timelapse: '{{name}} - Timelapse',
  607. selectTimelapse: 'Select Timelapse',
  608. selectTimelapseDesc: 'No auto-match found. Select the timelapse for this print:',
  609. deleteArchives: 'Delete Archives',
  610. deleteArchivesConfirm: 'Are you sure you want to delete {{count}} archive(s)? This action cannot be undone.',
  611. deleteCount: 'Delete {{count}}',
  612. },
  613. page: {
  614. title: 'Archives',
  615. printsCount: '{{filtered}} of {{total}} prints',
  616. dropFilesHere: 'Drop .3mf files here',
  617. releaseToUpload: 'Release to upload',
  618. only3mfSupported: 'Only .3mf files are supported',
  619. close: 'Close',
  620. selected: '{{count}} selected',
  621. selectAll: 'Select All',
  622. tags: 'Tags',
  623. project: 'Project',
  624. favorite: 'Favorite',
  625. delete: 'Delete',
  626. toggledFavorites: 'Toggled favorites for {{count}} archive(s)',
  627. failedUpdateFavorites: 'Failed to update favorites',
  628. archivesDeleted: '{{count}} archive(s) deleted',
  629. failedDeleteArchives: 'Failed to delete archives',
  630. photoDeleted: 'Photo deleted',
  631. failedDeletePhoto: 'Failed to delete photo',
  632. },
  633. list: {
  634. name: 'Name',
  635. printer: 'Printer',
  636. date: 'Date',
  637. size: 'Size',
  638. actions: 'Actions',
  639. hasTimelapse: 'Has timelapse',
  640. },
  641. },
  642. // Queue page
  643. queue: {
  644. title: 'Print Queue',
  645. subtitle: 'Schedule and manage your print jobs',
  646. addToQueue: 'Add to Queue',
  647. // Print modal
  648. print: 'Print',
  649. reprint: 'Re-print',
  650. schedulePrint: 'Schedule Print',
  651. editQueueItem: 'Edit Queue Item',
  652. printToPrinters: 'Print to {{count}} Printers',
  653. queueToPrinters: 'Queue to {{count}} Printers',
  654. sending: 'Sending...',
  655. sendingProgress: 'Sending {{current}}/{{total}}...',
  656. adding: 'Adding...',
  657. addingProgress: 'Adding {{current}}/{{total}}...',
  658. savingProgress: 'Saving {{current}}/{{total}}...',
  659. clearQueue: 'Clear Queue',
  660. clearHistory: 'Clear History',
  661. emptyQueue: 'Queue is empty',
  662. position: 'Position',
  663. scheduledTime: 'Scheduled Time',
  664. moveUp: 'Move Up',
  665. moveDown: 'Move Down',
  666. startNow: 'Start Now',
  667. printingInProgress: 'Printing in progress...',
  668. viewArchive: 'View archive',
  669. viewInFileManager: 'View in File Manager',
  670. itemCount: '{{count}} item',
  671. itemCount_plural: '{{count}} items',
  672. dragToReorder: 'Drag to reorder (ASAP only)',
  673. reorderHint: 'Position only affects ASAP items. Scheduled items run at their set time.',
  674. addedBy: 'Added by {{name}}',
  675. // Sections
  676. sections: {
  677. currentlyPrinting: 'Currently Printing',
  678. queued: 'Queued',
  679. history: 'History',
  680. },
  681. // Status
  682. status: {
  683. pending: 'Pending',
  684. waiting: 'Waiting',
  685. printing: 'Printing',
  686. paused: 'Paused',
  687. completed: 'Completed',
  688. failed: 'Failed',
  689. skipped: 'Skipped',
  690. cancelled: 'Cancelled',
  691. },
  692. // Summary cards
  693. summary: {
  694. printing: 'Printing',
  695. queued: 'Queued',
  696. totalTime: 'Total Queue Time',
  697. history: 'History',
  698. },
  699. // Filters
  700. filter: {
  701. allPrinters: 'All Printers',
  702. unassigned: 'Unassigned',
  703. allStatus: 'All Status',
  704. allLocations: 'All Locations',
  705. any: 'Any',
  706. },
  707. // Sort
  708. sort: {
  709. byPosition: 'Sort by Position',
  710. byName: 'Sort by Name',
  711. byPrinter: 'Sort by Printer',
  712. bySchedule: 'Sort by Schedule',
  713. byDate: 'Sort by Date',
  714. ascendingOldest: 'Ascending (oldest first)',
  715. descendingNewest: 'Descending (newest first)',
  716. },
  717. // Badges
  718. badges: {
  719. staged: 'Staged',
  720. requiresPrevious: 'Requires previous success',
  721. autoPowerOff: 'Auto power off',
  722. },
  723. // Empty state
  724. empty: {
  725. title: 'No prints scheduled',
  726. description: 'Schedule a print from the Archives page using the "Schedule" option in the context menu, or drag and drop files to get started.',
  727. },
  728. // Time
  729. time: {
  730. asap: 'ASAP',
  731. overdue: 'Overdue',
  732. now: 'Now',
  733. lessThanMinute: 'In less than a minute',
  734. inMinutes: 'In {{count}} min',
  735. inHours: 'In {{count}} hours',
  736. },
  737. // Actions
  738. actions: {
  739. stopPrint: 'Stop Print',
  740. startPrint: 'Start Print',
  741. requeue: 'Re-queue',
  742. },
  743. // Bulk edit
  744. bulkEdit: {
  745. title: 'Edit {{count}} Item',
  746. title_plural: 'Edit {{count}} Items',
  747. description: 'Only changed settings will be applied to selected items.',
  748. printer: 'Printer',
  749. noChange: '— No change —',
  750. queueOptions: 'Queue Options',
  751. staged: 'Staged (manual start)',
  752. autoPowerOff: 'Auto power off after print',
  753. requirePrevious: 'Require previous success',
  754. printOptions: 'Print Options',
  755. bedLevelling: 'Bed levelling',
  756. flowCalibration: 'Flow calibration',
  757. vibrationCalibration: 'Vibration calibration',
  758. layerInspection: 'First layer inspection',
  759. timelapse: 'Timelapse',
  760. useAms: 'Use AMS',
  761. applyChanges: 'Apply Changes',
  762. selectAll: 'Select All',
  763. deselectAll: 'Deselect All',
  764. selected: '{{count}} selected',
  765. editSelected: 'Edit Selected',
  766. cancelSelected: 'Cancel Selected',
  767. },
  768. // Confirmations
  769. confirm: {
  770. cancelTitle: 'Cancel Scheduled Print',
  771. cancelMessage: 'Are you sure you want to cancel "{{name}}"?',
  772. stopTitle: 'Stop Print',
  773. stopMessage: 'Are you sure you want to stop the current print "{{name}}"? This will cancel the print job on the printer.',
  774. removeTitle: 'Remove from History',
  775. removeMessage: 'Are you sure you want to remove "{{name}}" from the queue history?',
  776. clearHistoryTitle: 'Clear History',
  777. clearHistoryMessage: 'Are you sure you want to remove all {{count}} item(s) from the history?',
  778. cancelButton: 'Cancel Print',
  779. stopButton: 'Stop Print',
  780. thisPrint: 'this print',
  781. thisItem: 'this item',
  782. },
  783. // Toast messages
  784. toast: {
  785. cancelled: 'Queue item cancelled',
  786. cancelFailed: 'Failed to cancel item',
  787. removed: 'Queue item removed',
  788. removeFailed: 'Failed to remove item',
  789. stopped: 'Print stopped',
  790. stopFailed: 'Failed to stop print',
  791. released: 'Print released to queue',
  792. startFailed: 'Failed to start print',
  793. reorderFailed: 'Failed to reorder queue',
  794. historyCleared: 'Cleared {{count}} history item(s)',
  795. clearHistoryFailed: 'Failed to clear history',
  796. updateFailed: 'Failed to update items',
  797. bulkCancelled: 'Cancelled {{count}} item(s)',
  798. bulkCancelFailed: 'Failed to cancel items',
  799. },
  800. // Permissions
  801. permissions: {
  802. noStopPrint: 'You do not have permission to stop prints',
  803. noStartPrint: 'You do not have permission to start prints',
  804. noEdit: 'You do not have permission to edit this queue item',
  805. noCancel: 'You do not have permission to cancel this queue item',
  806. noRequeue: 'You do not have permission to re-queue items',
  807. noRemove: 'You do not have permission to remove this queue item',
  808. noClearHistory: 'You do not have permission to clear all history',
  809. noEditItems: 'You do not have permission to edit queue items',
  810. noCancelItems: 'You do not have permission to cancel queue items',
  811. },
  812. },
  813. // Statistics page
  814. stats: {
  815. title: 'Dashboard',
  816. subtitle: 'Drag widgets to rearrange. Click the eye icon to hide.',
  817. overview: 'Overview',
  818. totalPrints: 'Total Prints',
  819. successRate: 'Success Rate',
  820. totalPrintTime: 'Total Print Time',
  821. printTime: 'Print Time',
  822. totalFilament: 'Total Filament Used',
  823. filamentUsed: 'Filament Used',
  824. filamentCost: 'Filament Cost',
  825. totalCost: 'Total Cost',
  826. energyUsed: 'Energy Used',
  827. energyCost: 'Energy Cost',
  828. averagePrintTime: 'Average Print Time',
  829. printsPerDay: 'Prints per Day',
  830. byPrinter: 'By Printer',
  831. printsByPrinter: 'Prints by Printer',
  832. byMaterial: 'By Material',
  833. byMonth: 'By Month',
  834. last7Days: 'Last 7 Days',
  835. last30Days: 'Last 30 Days',
  836. last90Days: 'Last 90 Days',
  837. allTime: 'All Time',
  838. // Widgets
  839. quickStats: 'Quick Stats',
  840. printActivity: 'Print Activity',
  841. filamentTypes: 'Filament Types',
  842. filamentTrends: 'Filament Trends',
  843. failureAnalysis: 'Failure Analysis',
  844. timeAccuracy: 'Time Accuracy',
  845. successful: 'Successful:',
  846. failed: 'Failed:',
  847. perfectEstimate: '100% = perfect estimate',
  848. noTimeAccuracyData: 'No time accuracy data yet',
  849. noFilamentData: 'No filament data available',
  850. noPrinterData: 'No printer data available',
  851. noPrintData: 'No print data available',
  852. noPrintDataLast30Days: 'No print data in the last 30 days',
  853. failureReasons: 'Failure Reasons',
  854. topFailureReasons: 'Top Failure Reasons',
  855. failedPrintsCount: '{{failed}} / {{total}} prints failed',
  856. lastWeekRate: 'Last week: {{rate}}%',
  857. // Actions
  858. resetLayout: 'Reset Layout',
  859. recalculateCosts: 'Recalculate Costs',
  860. recalculateCostsHint: 'Recalculate all archive costs using current filament prices',
  861. exportStats: 'Export Stats',
  862. exportAsCsv: 'Export as CSV',
  863. exportAsExcel: 'Export as Excel',
  864. hiddenCount: '{{count}} Hidden',
  865. // Toast
  866. exportDownloaded: 'Export downloaded',
  867. exportFailed: 'Export failed',
  868. layoutReset: 'Layout reset',
  869. recalculatedCosts: 'Recalculated costs for {{count}} archives',
  870. recalculateFailed: 'Failed to recalculate costs',
  871. // Loading
  872. loadingStats: 'Loading statistics...',
  873. // Permissions
  874. noPermissionResetLayout: 'You do not have permission to reset layout',
  875. noPermissionRecalculate: 'You do not have permission to recalculate costs',
  876. },
  877. // Maintenance page
  878. maintenance: {
  879. title: 'Maintenance',
  880. overview: 'Overview',
  881. allOk: 'All maintenance up to date',
  882. dueCount: '{{count}} item due',
  883. dueCount_plural: '{{count}} items due',
  884. warningCount: '{{count}} warning',
  885. warningCount_plural: '{{count}} warnings',
  886. totalPrintTime: 'Total Print Time',
  887. nextMaintenance: 'Next Maintenance',
  888. nothingDue: 'Nothing due',
  889. tasks: 'Tasks',
  890. lastPerformed: 'Last performed',
  891. interval: 'Interval',
  892. hoursRemaining: '{{hours}}h remaining',
  893. hoursOverdue: '{{hours}}h overdue',
  894. markDone: 'Mark as Done',
  895. performMaintenance: 'Perform Maintenance',
  896. history: 'History',
  897. noHistory: 'No maintenance history',
  898. editPrintHours: 'Edit Print Hours',
  899. currentHours: 'Current Hours',
  900. // Tabs
  901. statusTab: 'Status',
  902. settingsTab: 'Settings',
  903. // Status
  904. overdueCount: '{{count}} overdue',
  905. dueSoonCount: '{{count}} due soon',
  906. dueSoon: 'Due soon',
  907. allGood: 'All good',
  908. overdueBy: 'Overdue by {{duration}}',
  909. dueIn: 'Due in {{duration}}',
  910. timeLeft: '{{duration}} left',
  911. // Duration formats
  912. day: '1 day',
  913. days: '{{count}} days',
  914. week: '1 week',
  915. weeks: '{{count}} weeks',
  916. month: '1 month',
  917. months: '{{count}} months',
  918. year: '1 year',
  919. // Settings
  920. maintenanceTypes: 'Maintenance Types',
  921. maintenanceTypesDescription: 'System types and your custom maintenance tasks',
  922. addCustomType: 'Add Custom Type',
  923. intervalType: 'Interval Type',
  924. intervalValue: 'Interval ({{type}})',
  925. icon: 'Icon',
  926. documentationLink: 'Documentation Link (optional)',
  927. assignToPrinters: 'Assign to Printers',
  928. selectAtLeastOnePrinter: 'Select at least one printer',
  929. addType: 'Add Type',
  930. custom: 'Custom',
  931. printHours: 'Print Hours',
  932. calendarDays: 'Calendar Days',
  933. exampleName: 'e.g., Replace HEPA Filter',
  934. viewDocumentation: 'View documentation',
  935. timeBasedInterval: 'Time-based interval',
  936. // Interval overrides
  937. intervalOverrides: 'Interval Overrides',
  938. intervalOverridesDescription: 'Customize intervals for specific printers',
  939. // Printer assignment
  940. assignedToPrinters: 'Assigned to printers:',
  941. noPrintersAssigned: 'No printers assigned',
  942. addPrinterShort: 'Add:',
  943. printersAssignedClick: '{{count}} printer(s) assigned - click to manage',
  944. removeFromPrinter: 'Remove from this printer',
  945. // Types
  946. types: {
  947. lubricateRails: 'Lubricate Linear Rails',
  948. cleanNozzle: 'Clean Nozzle/Hotend',
  949. checkBelts: 'Check Belt Tension',
  950. cleanBuildPlate: 'Clean Build Plate',
  951. checkExtruder: 'Check Extruder Gears',
  952. checkCooling: 'Check Cooling Fans',
  953. generalInspection: 'General Inspection',
  954. cleanCarbonRods: 'Clean Carbon Rods',
  955. checkPtfeTube: 'Check PTFE Tube',
  956. replaceHepaFilter: 'Replace HEPA Filter',
  957. replaceCarbonFilter: 'Replace Carbon Filter',
  958. lubricateLeftNozzleRail: 'Lubricate Left Nozzle Rail',
  959. },
  960. // Toast
  961. maintenanceComplete: 'Maintenance marked as complete',
  962. typeUpdated: 'Maintenance type updated',
  963. typeDeleted: 'Maintenance type deleted',
  964. printHoursUpdated: 'Print hours updated',
  965. printerAssigned: 'Printer assigned',
  966. printerRemoved: 'Printer removed',
  967. // Confirmation
  968. deleteTypeConfirm: 'Delete "{{name}}"?',
  969. // Permissions
  970. noPermissionUpdate: 'You do not have permission to update maintenance items',
  971. noPermissionPerform: 'You do not have permission to perform maintenance',
  972. noPermissionEditTypes: 'You do not have permission to edit maintenance types',
  973. noPermissionDeleteTypes: 'You do not have permission to delete maintenance types',
  974. noPermissionEditHours: 'You do not have permission to edit print hours',
  975. noPermissionRemovePrinter: 'You do not have permission to remove printer assignments',
  976. noPermissionAssignPrinter: 'You do not have permission to assign printers',
  977. noPermissionEditIntervals: 'You do not have permission to edit intervals',
  978. // Configure link
  979. configureSettings: 'Configure maintenance types and intervals',
  980. },
  981. // Settings page
  982. settings: {
  983. title: 'Settings',
  984. general: 'General',
  985. // Tab names
  986. tabs: {
  987. general: 'General',
  988. smartPlugs: 'Smart Plugs',
  989. notifications: 'Notifications',
  990. filament: 'Filament',
  991. network: 'Network',
  992. apiKeys: 'API Keys',
  993. virtualPrinter: 'Virtual Printer',
  994. users: 'Users',
  995. backup: 'Backup',
  996. },
  997. appearance: 'Appearance',
  998. notifications: 'Notifications',
  999. smartPlugs: 'Smart Plugs',
  1000. spoolman: 'Spoolman',
  1001. updates: 'Updates',
  1002. language: 'Language',
  1003. languageDescription: 'Select your preferred language',
  1004. theme: 'Theme',
  1005. themeLight: 'Light',
  1006. themeDark: 'Dark',
  1007. themeSystem: 'System',
  1008. defaultView: 'Default View',
  1009. defaultViewDescription: 'Page to show when opening the app',
  1010. checkForUpdates: 'Check for Updates',
  1011. autoUpdate: 'Auto Update',
  1012. currentVersion: 'Current Version',
  1013. latestVersion: 'Latest Version',
  1014. upToDate: 'You are up to date',
  1015. updateAvailable: 'Update available',
  1016. // Notifications
  1017. notificationLanguage: 'Notification Language',
  1018. notificationLanguageDescription: 'Language for push notifications',
  1019. notificationProviders: 'Notification Providers',
  1020. addProvider: 'Add Provider',
  1021. editProvider: 'Edit Provider',
  1022. providerType: 'Provider Type',
  1023. testNotification: 'Test Notification',
  1024. testSuccess: 'Test notification sent successfully',
  1025. testFailed: 'Failed to send test notification',
  1026. quietHours: 'Quiet Hours',
  1027. quietHoursDescription: 'Do not disturb during these hours',
  1028. quietHoursStart: 'Start',
  1029. quietHoursEnd: 'End',
  1030. events: {
  1031. title: 'Notification Events',
  1032. printStart: 'Print Started',
  1033. printComplete: 'Print Completed',
  1034. printFailed: 'Print Failed',
  1035. printStopped: 'Print Stopped',
  1036. printProgress: 'Progress Milestones',
  1037. printProgressDescription: 'Notify at 25%, 50%, 75%',
  1038. printerOffline: 'Printer Offline',
  1039. printerError: 'Printer Error',
  1040. filamentLow: 'Low Filament',
  1041. maintenanceDue: 'Maintenance Due',
  1042. maintenanceDueDescription: 'Notify when maintenance is needed',
  1043. },
  1044. // Smart Plugs
  1045. smartPlug: {
  1046. title: 'Smart Plugs',
  1047. add: 'Add Smart Plug',
  1048. edit: 'Edit Smart Plug',
  1049. name: 'Name',
  1050. ipAddress: 'IP Address',
  1051. linkedPrinter: 'Linked Printer',
  1052. autoOn: 'Auto Power On',
  1053. autoOnDescription: 'Turn on when print starts',
  1054. autoOff: 'Auto Power Off',
  1055. autoOffDescription: 'Turn off after print completes',
  1056. offDelay: 'Off Delay',
  1057. offDelayMinutes: 'Minutes after print',
  1058. offDelayTemp: 'When nozzle below temperature',
  1059. currentState: 'Current State',
  1060. turnOn: 'Turn On',
  1061. turnOff: 'Turn Off',
  1062. },
  1063. // Spoolman
  1064. spoolmanEnabled: 'Enable Spoolman Integration',
  1065. spoolmanUrl: 'Spoolman URL',
  1066. spoolmanConnected: 'Connected',
  1067. spoolmanDisconnected: 'Disconnected',
  1068. // Default printer
  1069. noDefaultPrinter: 'No default (ask each time)',
  1070. // Sidebar
  1071. sidebarOrder: 'Sidebar order',
  1072. // Camera
  1073. saveThumbnails: 'Save thumbnails',
  1074. captureFinishPhoto: 'Capture finish photo',
  1075. noPrintersConfigured: 'No printers configured',
  1076. // Archive settings
  1077. archiveMode: {
  1078. always: 'Always create archive entry',
  1079. never: 'Never create archive entry',
  1080. ask: 'Ask each time',
  1081. },
  1082. // Updates
  1083. checkForUpdatesLabel: 'Check for updates',
  1084. checkPrinterFirmware: 'Check printer firmware',
  1085. // Queue
  1086. enableRetry: 'Enable retry',
  1087. // Home Assistant
  1088. homeAssistantDescription: 'Control smart plugs via Home Assistant',
  1089. environmentManagedLabel: '(Environment Managed)',
  1090. autoEnabledViaEnv: 'Automatically enabled via environment variables',
  1091. urlFromEnvReadOnly: 'Value set by HA_URL environment variable (read-only)',
  1092. tokenFromEnvReadOnly: 'Value set by HA_TOKEN environment variable (read-only)',
  1093. // MQTT
  1094. mqttConnectedTo: 'Connected to',
  1095. // Prometheus
  1096. prometheusDescription: 'Expose printer data in Prometheus format',
  1097. // Smart plugs empty state
  1098. noSmartPlugsTitle: 'No smart plugs configured',
  1099. noSmartPlugsDescription: 'Add a Tasmota-based smart plug to track energy usage and automate power control.',
  1100. // Notifications empty state
  1101. noProvidersTitle: 'No providers configured',
  1102. noProvidersDescription: 'Add a provider to receive alerts.',
  1103. noTemplatesAvailable: 'No templates available. Restart the backend to seed default templates.',
  1104. // API permissions
  1105. apiPermissionView: 'View printer status and queue',
  1106. apiPermissionEdit: 'Add and remove items from print queue',
  1107. // API keys
  1108. apiKeysEmptyTitle: 'No API keys',
  1109. apiKeysEmptyDescription: 'Create an API key to integrate with external services.',
  1110. // Users
  1111. noUsersFound: 'No users found',
  1112. noGroupsFound: 'No groups found',
  1113. noGroupsAvailable: 'No groups available',
  1114. passwordsDoNotMatch: 'Passwords do not match',
  1115. systemGroupWarning: 'System group names cannot be changed',
  1116. // Auth disabled
  1117. authDisabledTitle: 'Authentication is Disabled',
  1118. authDisabledFeature1: 'Require login to access the system',
  1119. authDisabledFeature2: 'Create multiple users with group-based permissions',
  1120. authDisabledFeature3: 'Control access with 50+ granular permissions',
  1121. // User deletion
  1122. userHasCreated: 'This user has created:',
  1123. userItemsQuestion: 'What would you like to do with these items?',
  1124. deleteUserConfirm: 'Are you sure you want to delete this user?',
  1125. actionCannotBeUndone: 'This action cannot be undone.',
  1126. // Smart plugs
  1127. addFirstSmartPlug: 'Add Your First Smart Plug',
  1128. // Notifications
  1129. providers: 'Providers',
  1130. log: 'Log',
  1131. testAll: 'Test All',
  1132. testResults: 'Test Results',
  1133. testPassedCount: '{{count}} passed',
  1134. testFailedCount: '{{count}} failed',
  1135. messageTemplates: 'Message Templates',
  1136. messageTemplatesDescription: 'Customize notification messages for each event.',
  1137. // API Keys section
  1138. apiKeys: 'API Keys',
  1139. apiKeysDescription: 'Create API keys for external integrations and webhooks.',
  1140. createKey: 'Create Key',
  1141. apiKeyCreated: 'API Key Created Successfully',
  1142. apiKeyCopyWarning: "Copy this key now - it won't be shown again!",
  1143. useInApiBrowser: 'Use in API Browser',
  1144. createNewApiKey: 'Create New API Key',
  1145. keyName: 'Key Name',
  1146. keyNamePlaceholder: 'e.g., Home Assistant, OctoPrint',
  1147. readStatus: 'Read Status',
  1148. readStatusDescription: 'View printer status and queue',
  1149. manageQueue: 'Manage Queue',
  1150. manageQueueDescription: 'Add and remove items from print queue',
  1151. controlPrinter: 'Control Printer',
  1152. controlPrinterDescription: 'Pause, resume, and stop prints',
  1153. unnamedKey: 'Unnamed Key',
  1154. lastUsed: 'Last used',
  1155. read: 'Read',
  1156. control: 'Control',
  1157. createFirstKey: 'Create Your First Key',
  1158. webhookEndpoints: 'Webhook Endpoints',
  1159. webhookApiKeyHint: 'Use your API key in the X-API-Key header.',
  1160. webhook: {
  1161. getAllStatus: 'Get all printer status',
  1162. getSpecificStatus: 'Get specific printer status',
  1163. addToQueue: 'Add to print queue',
  1164. pausePrint: 'Pause print',
  1165. resumePrint: 'Resume print',
  1166. stopPrint: 'Stop print',
  1167. },
  1168. apiBrowser: 'API Browser',
  1169. apiBrowserDescription: 'Explore and test all available API endpoints.',
  1170. apiKeyForTesting: 'API Key for Testing',
  1171. apiKeyPlaceholder: 'Paste your API key here to test authenticated endpoints...',
  1172. apiKeyHint: 'This key will be sent as X-API-Key header with requests.',
  1173. deleteApiKeyTitle: 'Delete API Key',
  1174. deleteApiKeyMessage: 'Are you sure you want to delete this API key? Any integrations using this key will stop working.',
  1175. deleteKey: 'Delete Key',
  1176. // Filament tab
  1177. amsDisplayThresholds: 'AMS Display Thresholds',
  1178. amsThresholdsDescription: 'Configure color thresholds for AMS humidity and temperature indicators.',
  1179. humidity: 'Humidity',
  1180. goodGreen: 'Good (green)',
  1181. fairOrange: 'Fair (orange)',
  1182. aboveFairBad: 'Above fair threshold shows as red (bad)',
  1183. temperature: 'Temperature',
  1184. goodBlue: 'Good (blue)',
  1185. aboveFairHot: 'Above fair threshold shows as red (hot)',
  1186. historyRetention: 'History Retention',
  1187. keepSensorHistory: 'Keep sensor history for',
  1188. historyRetentionDescription: 'Older humidity and temperature data will be automatically deleted',
  1189. printModal: 'Print Modal',
  1190. expandCustomMapping: 'Expand custom mapping by default',
  1191. expandCustomMappingDescription: 'When printing to multiple printers, show per-printer AMS mapping expanded',
  1192. // User management
  1193. authentication: 'Authentication',
  1194. authEnabledDescription: 'Your instance is secured with user authentication',
  1195. authDisabledDescription: 'Enable to require login and manage user access',
  1196. authDisabledMessage: 'Enable authentication to create user accounts, manage permissions, and secure your Bambuddy instance.',
  1197. enableAuthentication: 'Enable Authentication',
  1198. currentUser: 'Current User',
  1199. changePassword: 'Change Password',
  1200. admin: 'Admin',
  1201. users: 'Users',
  1202. addUser: 'Add User',
  1203. groups: 'Groups',
  1204. addGroup: 'Add Group',
  1205. system: 'System',
  1206. noDescription: 'No description',
  1207. userCount: '{{count}} users',
  1208. permissionCount: '{{count}} permissions',
  1209. createUser: 'Create User',
  1210. username: 'Username',
  1211. enterUsername: 'Enter username',
  1212. password: 'Password',
  1213. enterPassword: 'Enter password (min 6 characters)',
  1214. confirmPassword: 'Confirm Password',
  1215. confirmPasswordPlaceholder: 'Confirm password',
  1216. // Title tooltips
  1217. viewReleaseOnGitHub: 'View release on GitHub',
  1218. turnAllPlugsOn: 'Turn all plugs on',
  1219. turnAllPlugsOff: 'Turn all plugs off',
  1220. // Modal: Clear logs
  1221. clearNotificationLogs: 'Clear Notification Logs',
  1222. clearLogsMessage: 'This will permanently delete all notification logs older than 30 days. This action cannot be undone.',
  1223. clearLogs: 'Clear Logs',
  1224. // Modal: Reset UI
  1225. resetUiPreferences: 'Reset UI Preferences',
  1226. 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.',
  1227. resetPreferences: 'Reset Preferences',
  1228. // Modal: Delete group
  1229. deleteGroupTitle: 'Delete Group',
  1230. deleteGroupMessage: 'Are you sure you want to delete this group? Users in this group will lose these permissions.',
  1231. deleteGroup: 'Delete Group',
  1232. // Modal: Disable auth
  1233. disableAuthenticationTitle: 'Disable Authentication',
  1234. 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.',
  1235. disableAuthentication: 'Disable Authentication',
  1236. // Additional settings
  1237. configureBambuddy: 'Configure Bambuddy',
  1238. systemDefault: 'System Default',
  1239. archiveSettings: 'Archive Settings',
  1240. newWindow: 'New Window',
  1241. embeddedOverlay: 'Embedded Overlay',
  1242. externalCameras: 'External Cameras',
  1243. costTracking: 'Cost Tracking',
  1244. printsOnly: 'Prints Only',
  1245. totalConsumption: 'Total Consumption',
  1246. dataManagement: 'Data Management',
  1247. clearNotificationLogsDescription: 'Delete notification logs older than 30 days',
  1248. resetUiPreferencesDescription: 'Reset sidebar order, theme, view modes, and layout preferences. Printers, archives, and settings are not affected.',
  1249. enableHomeAssistant: 'Enable Home Assistant',
  1250. enableMqtt: 'Enable MQTT',
  1251. useTls: 'Use TLS',
  1252. enableMetricsEndpoint: 'Enable Metrics Endpoint',
  1253. availableMetrics: 'Available Metrics',
  1254. editUser: 'Edit User',
  1255. deleteUserTitle: 'Delete User',
  1256. groupName: 'Group Name',
  1257. // Placeholders
  1258. leaveEmptyForAnonymous: 'Leave empty for anonymous',
  1259. leaveEmptyForNoAuth: 'Leave empty for no authentication',
  1260. enterNewPassword: 'Enter new password',
  1261. confirmNewPassword: 'Confirm new password',
  1262. enterGroupName: 'Enter group name',
  1263. enterDescriptionOptional: 'Enter description (optional)',
  1264. enterCurrentPassword: 'Enter current password',
  1265. enterNewPasswordMin6: 'Enter new password (min 6 characters)',
  1266. toast: {
  1267. keyCopied: 'Key copied to clipboard',
  1268. copyFailed: 'Failed to copy key',
  1269. keyAddedToBrowser: 'Key added to API Browser',
  1270. clearLogsFailed: 'Failed to clear logs',
  1271. uiPreferencesReset: 'UI preferences reset. Refreshing...',
  1272. authDisabled: 'Authentication disabled successfully',
  1273. authDisableFailed: 'Failed to disable authentication',
  1274. apiKeyCreated: 'API key created',
  1275. apiKeyDeleted: 'API key deleted',
  1276. userCreated: 'User created successfully',
  1277. userUpdated: 'User updated successfully',
  1278. userDeleted: 'User deleted successfully',
  1279. groupCreated: 'Group created successfully',
  1280. groupUpdated: 'Group updated successfully',
  1281. groupDeleted: 'Group deleted successfully',
  1282. fillRequiredFields: 'Please fill in all required fields',
  1283. passwordsDoNotMatch: 'Passwords do not match',
  1284. passwordTooShort: 'Password must be at least 6 characters',
  1285. enterGroupName: 'Please enter a group name',
  1286. settingsSaved: 'Settings saved',
  1287. cameraSettingsSaved: 'Camera settings saved',
  1288. enterCameraUrl: 'Please enter a camera URL',
  1289. passwordChanged: 'Password changed successfully',
  1290. connectionFailed: 'Connection failed',
  1291. testFailed: 'Test failed',
  1292. cameraConnected: 'Camera connected{{resolution}}',
  1293. },
  1294. testConnection: 'Test Connection',
  1295. },
  1296. // Notifications (for push notifications)
  1297. notification: {
  1298. printStarted: {
  1299. title: 'Print Started',
  1300. body: '{{printer}}: {{filename}} has started printing',
  1301. },
  1302. printCompleted: {
  1303. title: 'Print Completed',
  1304. body: '{{printer}}: {{filename}} completed successfully',
  1305. },
  1306. printFailed: {
  1307. title: 'Print Failed',
  1308. body: '{{printer}}: {{filename}} has failed',
  1309. },
  1310. printStopped: {
  1311. title: 'Print Stopped',
  1312. body: '{{printer}}: {{filename}} was stopped',
  1313. },
  1314. printProgress: {
  1315. title: 'Print Progress',
  1316. body: '{{printer}}: {{filename}} is {{percent}}% complete',
  1317. },
  1318. printerOffline: {
  1319. title: 'Printer Offline',
  1320. body: '{{printer}} is offline',
  1321. },
  1322. printerError: {
  1323. title: 'Printer Error',
  1324. body: '{{printer}}: {{error}}',
  1325. },
  1326. filamentLow: {
  1327. title: 'Low Filament',
  1328. body: '{{printer}}: Filament is running low',
  1329. },
  1330. maintenanceDue: {
  1331. title: 'Maintenance Due',
  1332. body: '{{printer}}: {{items}} need attention',
  1333. },
  1334. },
  1335. // Errors
  1336. errors: {
  1337. generic: 'Something went wrong',
  1338. networkError: 'Network error. Please check your connection.',
  1339. notFound: 'Not found',
  1340. unauthorized: 'Unauthorized',
  1341. serverError: 'Server error',
  1342. validationError: 'Please check your input',
  1343. printerConnectionFailed: 'Failed to connect to printer',
  1344. saveFailed: 'Failed to save changes',
  1345. deleteFailed: 'Failed to delete',
  1346. loadFailed: 'Failed to load data',
  1347. },
  1348. // HMS Errors modal
  1349. hmsErrors: {
  1350. title: 'Errors - {{name}}',
  1351. noErrors: 'No errors',
  1352. viewOnWiki: 'View on Bambu Lab Wiki',
  1353. clearInstructions: 'Clear errors on the printer to dismiss them here.',
  1354. },
  1355. // MQTT Debug modal
  1356. mqttDebug: {
  1357. title: 'MQTT Debug Log',
  1358. searchPlaceholder: 'Search topic or payload...',
  1359. noMessages: 'No messages logged yet',
  1360. startLoggingHint: 'Click "Start Logging" to begin capturing MQTT messages',
  1361. noMessagesMatch: 'No messages match your filter',
  1362. adjustFilterHint: 'Try adjusting your search or filter criteria',
  1363. incoming: 'Incoming',
  1364. outgoing: 'Outgoing',
  1365. loggingStopped: 'Logging stopped',
  1366. loggingActive: 'Logging active - messages will auto-refresh',
  1367. startLogging: 'Start Logging',
  1368. stopLogging: 'Stop Logging',
  1369. clearLog: 'Clear Log',
  1370. topic: 'Topic',
  1371. timestamp: 'Timestamp',
  1372. direction: 'Direction',
  1373. all: 'All',
  1374. },
  1375. // Printer File Manager modal (printer internal storage)
  1376. printerFiles: {
  1377. title: 'File Manager',
  1378. storageUsed: 'Used:',
  1379. storageFree: 'Free:',
  1380. filterPlaceholder: 'Filter files...',
  1381. deleteButton: 'Delete',
  1382. deleteFiles: 'Delete {{count}} Files',
  1383. deleteFileConfirm: 'Delete "{{name}}"? This cannot be undone.',
  1384. deleteFilesConfirm: 'Delete {{count}} selected files? This cannot be undone.',
  1385. noFiles: 'No files on printer',
  1386. loadingFiles: 'Loading files...',
  1387. failedToLoad: 'Failed to load files',
  1388. toast: {
  1389. filesDeleted: 'Deleted {{count}} file(s)',
  1390. deleteFailed: 'Delete failed: {{error}}',
  1391. },
  1392. },
  1393. // Confirmations
  1394. confirm: {
  1395. delete: 'Are you sure you want to delete this?',
  1396. unsavedChanges: 'You have unsaved changes. Are you sure you want to leave?',
  1397. clearQueue: 'Are you sure you want to clear the queue?',
  1398. },
  1399. // Login page
  1400. login: {
  1401. title: 'Bambuddy Login',
  1402. subtitle: 'Sign in to your account',
  1403. username: 'Username',
  1404. usernamePlaceholder: 'Enter your username',
  1405. password: 'Password',
  1406. passwordPlaceholder: 'Enter your password',
  1407. signIn: 'Sign in',
  1408. signingIn: 'Logging in...',
  1409. forgotPassword: 'Forgot your password?',
  1410. loginSuccess: 'Logged in successfully',
  1411. loginFailed: 'Login failed',
  1412. enterCredentials: 'Please enter username and password',
  1413. forgotPasswordTitle: 'Forgot Password',
  1414. forgotPasswordMessage: "If you've forgotten your password, please contact your system administrator to reset it.",
  1415. howToReset: 'How to reset your password:',
  1416. resetStep1: 'Contact your Bambuddy administrator',
  1417. resetStep2: 'Ask them to reset your password in User Management',
  1418. resetStep3: 'They can set a new temporary password for you',
  1419. resetStep4: 'Log in with the new password and change it in Settings',
  1420. gotIt: 'Got it',
  1421. },
  1422. // Setup page
  1423. setup: {
  1424. title: 'Bambuddy Setup',
  1425. subtitle: 'Configure authentication for your Bambuddy instance',
  1426. enableAuth: 'Enable Authentication',
  1427. adminAccount: 'Admin Account',
  1428. 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.',
  1429. adminUsername: 'Admin Username',
  1430. adminPassword: 'Admin Password',
  1431. optionalIfAdminExists: '(optional if admin users exist)',
  1432. adminUsernamePlaceholder: 'Enter admin username (optional)',
  1433. adminPasswordPlaceholder: 'Enter admin password (optional)',
  1434. confirmPassword: 'Confirm Password',
  1435. confirmPasswordPlaceholder: 'Confirm admin password',
  1436. settingUp: 'Setting up...',
  1437. completeSetup: 'Complete Setup',
  1438. toast: {
  1439. authEnabledAdminCreated: 'Authentication enabled and admin user created',
  1440. authEnabledExistingAdmins: 'Authentication enabled using existing admin users',
  1441. setupCompleted: 'Setup completed',
  1442. enterBothCredentials: 'Please enter both admin username and password, or leave both empty to use existing admin users',
  1443. passwordsDoNotMatch: 'Passwords do not match',
  1444. passwordTooShort: 'Password must be at least 6 characters',
  1445. },
  1446. },
  1447. // Password change
  1448. changePassword: {
  1449. title: 'Change Password',
  1450. currentPassword: 'Current Password',
  1451. currentPasswordPlaceholder: 'Enter current password',
  1452. newPassword: 'New Password',
  1453. newPasswordPlaceholder: 'Enter new password (min 6 characters)',
  1454. confirmPassword: 'Confirm New Password',
  1455. confirmPasswordPlaceholder: 'Confirm new password',
  1456. passwordsDoNotMatch: 'Passwords do not match',
  1457. passwordTooShort: 'Password must be at least 6 characters',
  1458. changing: 'Changing...',
  1459. success: 'Password changed successfully',
  1460. failed: 'Failed to change password',
  1461. },
  1462. // Plate detection alert
  1463. plateAlert: {
  1464. title: 'Print Paused!',
  1465. message: 'Objects detected on build plate. The print has been automatically paused. Please clear the plate and resume the print.',
  1466. understand: 'I Understand',
  1467. },
  1468. // Camera page
  1469. camera: {
  1470. title: 'Camera View',
  1471. invalidPrinterId: 'Invalid printer ID',
  1472. live: 'Live',
  1473. snapshot: 'Snapshot',
  1474. restartStream: 'Restart stream',
  1475. refreshSnapshot: 'Refresh snapshot',
  1476. fullscreen: 'Fullscreen',
  1477. exitFullscreen: 'Exit fullscreen',
  1478. connectingToCamera: 'Connecting to camera...',
  1479. capturingSnapshot: 'Capturing snapshot...',
  1480. connectionLost: 'Connection lost',
  1481. connectionFailed: 'Camera connection failed',
  1482. reconnecting: 'Reconnecting in {{countdown}}s... (attempt {{attempt}}/{{max}})',
  1483. reconnectNow: 'Reconnect now',
  1484. cameraUnavailable: 'Camera unavailable',
  1485. cameraUnavailableDesc: 'Make sure the printer is powered on and connected.',
  1486. noCamera: 'No camera available',
  1487. retry: 'Retry',
  1488. cameraStream: 'Camera stream',
  1489. zoomOut: 'Zoom out',
  1490. zoomIn: 'Zoom in',
  1491. resetZoom: 'Reset zoom',
  1492. recording: 'Recording',
  1493. startRecording: 'Start Recording',
  1494. stopRecording: 'Stop Recording',
  1495. chamberLight: 'Toggle chamber light',
  1496. },
  1497. // Groups management
  1498. groups: {
  1499. title: 'Group Management',
  1500. subtitle: 'Manage permission groups for access control',
  1501. backToSettings: 'Back to Settings',
  1502. createGroup: 'Create Group',
  1503. noPermission: 'You do not have permission to access this page.',
  1504. system: 'System',
  1505. noDescription: 'No description',
  1506. usersCount: '{{count}} users',
  1507. permissionsCount: '{{count}} permissions',
  1508. edit: 'Edit',
  1509. delete: 'Delete',
  1510. toast: {
  1511. created: 'Group created successfully',
  1512. updated: 'Group updated successfully',
  1513. deleted: 'Group deleted successfully',
  1514. enterGroupName: 'Please enter a group name',
  1515. },
  1516. modal: {
  1517. editGroup: 'Edit Group',
  1518. createGroup: 'Create Group',
  1519. cancel: 'Cancel',
  1520. saving: 'Saving...',
  1521. creating: 'Creating...',
  1522. saveChanges: 'Save Changes',
  1523. },
  1524. form: {
  1525. groupName: 'Group Name',
  1526. groupNamePlaceholder: 'Enter group name',
  1527. systemGroupWarning: 'System group names cannot be changed',
  1528. description: 'Description',
  1529. descriptionPlaceholder: 'Enter description (optional)',
  1530. permissions: 'Permissions ({{count}} selected)',
  1531. },
  1532. deleteModal: {
  1533. title: 'Delete Group',
  1534. message: 'Are you sure you want to delete this group? Users in this group will lose these permissions.',
  1535. confirm: 'Delete Group',
  1536. },
  1537. },
  1538. // Users management
  1539. users: {
  1540. title: 'User Management',
  1541. subtitle: 'Manage users and their access to your Bambuddy instance',
  1542. backToSettings: 'Back to Settings',
  1543. createUser: 'Create User',
  1544. noPermission: 'You do not have permission to access this page.',
  1545. admin: 'Admin',
  1546. noGroups: 'No groups',
  1547. active: 'Active',
  1548. inactive: 'Inactive',
  1549. edit: 'Edit',
  1550. delete: 'Delete',
  1551. system: 'System',
  1552. noGroupsAvailable: 'No groups available',
  1553. table: {
  1554. username: 'Username',
  1555. groups: 'Groups',
  1556. status: 'Status',
  1557. actions: 'Actions',
  1558. },
  1559. toast: {
  1560. created: 'User created successfully',
  1561. updated: 'User updated successfully',
  1562. deleted: 'User deleted successfully',
  1563. fillRequired: 'Please fill in all required fields',
  1564. passwordsDoNotMatch: 'Passwords do not match',
  1565. passwordTooShort: 'Password must be at least 6 characters',
  1566. },
  1567. modal: {
  1568. createUser: 'Create User',
  1569. editUser: 'Edit User',
  1570. cancel: 'Cancel',
  1571. creating: 'Creating...',
  1572. saving: 'Saving...',
  1573. saveChanges: 'Save Changes',
  1574. },
  1575. form: {
  1576. username: 'Username',
  1577. usernamePlaceholder: 'Enter username',
  1578. password: 'Password',
  1579. passwordPlaceholder: 'Enter password',
  1580. confirmPassword: 'Confirm Password',
  1581. confirmPasswordPlaceholder: 'Confirm password',
  1582. newPasswordPlaceholder: 'Enter new password',
  1583. confirmNewPasswordPlaceholder: 'Confirm new password',
  1584. leaveBlankToKeep: 'leave blank to keep current',
  1585. groups: 'Groups',
  1586. },
  1587. deleteModal: {
  1588. title: 'Delete User',
  1589. message: 'Are you sure you want to delete this user? This action cannot be undone.',
  1590. confirm: 'Delete User',
  1591. },
  1592. },
  1593. // Stream overlay
  1594. streamOverlay: {
  1595. title: 'Stream Overlay',
  1596. invalidPrinterId: 'Invalid printer ID',
  1597. cameraStream: 'Camera stream',
  1598. progress: 'Progress',
  1599. eta: 'ETA',
  1600. tomorrow: 'Tomorrow',
  1601. printerIdle: 'Printer is idle',
  1602. printerOffline: 'Printer offline',
  1603. status: {
  1604. printing: 'Printing',
  1605. paused: 'Paused',
  1606. finished: 'Finished',
  1607. failed: 'Failed',
  1608. idle: 'Idle',
  1609. unknown: 'Unknown',
  1610. },
  1611. },
  1612. // Profiles
  1613. profiles: {
  1614. title: 'Profiles',
  1615. subtitle: 'Manage your slicer presets and pressure advance calibrations',
  1616. tabs: {
  1617. cloud: 'Cloud Profiles',
  1618. kprofiles: 'K-Profiles',
  1619. },
  1620. connectedAs: 'Connected as',
  1621. logout: 'Logout',
  1622. noLogoutPermission: 'You do not have permission to logout',
  1623. failedToLoad: 'Failed to load profiles',
  1624. retry: 'Retry',
  1625. time: {
  1626. justNow: 'Just now',
  1627. minsAgo: '{{count}}m ago',
  1628. hoursAgo: '{{count}}h ago',
  1629. daysAgo: '{{count}}d ago',
  1630. },
  1631. toast: {
  1632. loggedOut: 'Logged out',
  1633. },
  1634. login: {
  1635. title: 'Connect to Bambu Cloud',
  1636. subtitle: 'Sync your slicer presets across devices',
  1637. email: 'Email',
  1638. password: 'Password',
  1639. region: 'Region',
  1640. regionGlobal: 'Global',
  1641. regionChina: 'China',
  1642. verificationCode: 'Verification Code',
  1643. totpCode: 'Authenticator Code',
  1644. checkEmail: 'Check your email ({{email}}) for a 6-digit code',
  1645. enterTotpHint: 'Enter the 6-digit code from your authenticator app',
  1646. accessToken: 'Access Token',
  1647. accessTokenHint: 'Paste your Bambu Lab access token (from Bambu Studio)',
  1648. back: 'Back',
  1649. loginButton: 'Login',
  1650. verifyButton: 'Verify',
  1651. setTokenButton: 'Set Token',
  1652. useToken: 'Use access token instead',
  1653. useEmail: 'Login with email instead',
  1654. toast: {
  1655. loggedIn: 'Logged in successfully',
  1656. codeSent: 'Verification code sent to your email',
  1657. enterTotp: 'Enter code from your authenticator app',
  1658. tokenSet: 'Token set successfully',
  1659. },
  1660. },
  1661. presets: {
  1662. myPreset: 'My preset (editable)',
  1663. duplicate: 'Duplicate',
  1664. editable: 'Editable',
  1665. failedToLoadDetails: 'Failed to load preset details',
  1666. deleteConfirm: 'Delete this preset?',
  1667. deleteWarning: 'This will permanently delete "{{name}}" from Bambu Cloud. This cannot be undone.',
  1668. noDuplicatePermission: 'You do not have permission to duplicate presets',
  1669. noEditPermission: 'You do not have permission to edit presets',
  1670. noDeletePermission: 'You do not have permission to delete presets',
  1671. types: {
  1672. filament: 'Filament preset',
  1673. printer: 'Printer preset',
  1674. process: 'Process preset',
  1675. },
  1676. toast: {
  1677. deleted: 'Preset deleted',
  1678. created: 'Preset created',
  1679. updated: 'Preset updated',
  1680. duplicated: 'Preset duplicated',
  1681. fieldAdded: 'Field "{{key}}" added',
  1682. exported: 'Preset exported',
  1683. },
  1684. baseLabel: 'Base: {{name}}',
  1685. currentLabel: 'Current: {{name}}',
  1686. newPreset: 'New Preset',
  1687. editPreset: 'Edit Preset',
  1688. duplicatePreset: 'Duplicate Preset',
  1689. createNewPreset: 'Create New Preset',
  1690. customizeSettings: 'Customize settings for your new preset',
  1691. compareWithBase: 'Compare with base preset',
  1692. compare: 'Compare',
  1693. // CreatePresetModal - Basic Info
  1694. basePreset: 'Base Preset',
  1695. selectBasePreset: 'Select base preset...',
  1696. presetName: 'Preset Name',
  1697. myCustomPreset: 'My custom preset',
  1698. inheritsFrom: 'Inherits from',
  1699. dropJsonToImport: 'Drop JSON to import',
  1700. // CreatePresetModal - Tabs
  1701. tabs: {
  1702. common: 'Common',
  1703. allFields: 'All Fields',
  1704. },
  1705. // CreatePresetModal - All Fields Tab
  1706. availableFields: 'Available Fields',
  1707. searchFieldsPlaceholder: 'Search fields...',
  1708. noMatchingFields: 'No matching fields',
  1709. allFieldsAdded: 'All fields added',
  1710. addCustomField: 'Add custom field',
  1711. yourOverrides: 'Your Overrides',
  1712. noOverridesYet: 'No overrides yet',
  1713. clickFieldsToAdd: 'Click fields on the left to add them',
  1714. saveAsTemplate: 'Save as template',
  1715. jsonTip: 'Tip: Drag & drop a .json file anywhere on this modal to import settings',
  1716. },
  1717. cloudView: {
  1718. searchPlaceholder: 'Search presets...',
  1719. templates: 'Templates',
  1720. refresh: 'Refresh',
  1721. newPreset: 'New Preset',
  1722. clearFilters: 'Clear filters',
  1723. // Compare mode
  1724. compareMode: 'Compare Mode',
  1725. selectAnotherPreset: 'Select another {{type}} preset',
  1726. clickTwoPresets: 'Click two presets of the same type to compare',
  1727. selectFirst: '1. Select first',
  1728. selectSecond: '2. Select second',
  1729. compareNow: 'Compare Now',
  1730. // Status row
  1731. lastSynced: 'Last synced:',
  1732. showingCount: 'Showing {{showing}} of {{total}} presets',
  1733. noPresetsFound: 'No presets found',
  1734. // Column headers
  1735. columns: {
  1736. filament: 'Filament',
  1737. process: 'Process',
  1738. printer: 'Printer',
  1739. },
  1740. noFilamentPresets: 'No filament presets',
  1741. noProcessPresets: 'No process presets',
  1742. noPrinterPresets: 'No printer presets',
  1743. // Filters
  1744. filters: {
  1745. type: 'Type',
  1746. owner: 'Owner',
  1747. printer: 'Printer',
  1748. nozzle: 'Nozzle',
  1749. filament: 'Filament',
  1750. layer: 'Layer',
  1751. all: 'All',
  1752. myPresets: 'My Presets',
  1753. builtIn: 'Built-in',
  1754. process: 'Process',
  1755. },
  1756. // Permissions
  1757. noTemplatesPermission: 'You do not have permission to manage templates',
  1758. noRefreshPermission: 'You do not have permission to refresh profiles',
  1759. noCreatePermission: 'You do not have permission to create presets',
  1760. },
  1761. templates: {
  1762. title: 'Quick Templates',
  1763. noTemplates: 'No templates yet',
  1764. createFirst: 'Create templates from the preset editor',
  1765. typeFilter: 'Type:',
  1766. deleteTitle: 'Delete Template',
  1767. deleteWarning: 'This action cannot be undone',
  1768. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  1769. namePlaceholder: 'Template name',
  1770. descriptionPlaceholder: 'Description',
  1771. settingsJson: 'Settings (JSON)',
  1772. fieldsCount: '{{count}} fields',
  1773. shownInModals: 'Shown in modals',
  1774. hiddenInModals: 'Hidden in modals',
  1775. apply: 'Apply',
  1776. toast: {
  1777. deleted: 'Template deleted',
  1778. updated: 'Template updated',
  1779. created: 'Template created',
  1780. applied: 'Template applied',
  1781. },
  1782. },
  1783. },
  1784. // Support/Debug
  1785. support: {
  1786. debugLoggingActive: 'Debug logging is active',
  1787. manageLogs: 'Manage',
  1788. },
  1789. // File manager
  1790. fileManager: {
  1791. title: 'File Manager',
  1792. subtitle: 'Organize and manage your print files',
  1793. uploadFiles: 'Upload Files',
  1794. newFolder: 'New Folder',
  1795. folderName: 'Folder Name',
  1796. folderNamePlaceholder: 'e.g., Functional Parts',
  1797. renameFile: 'Rename File',
  1798. renameFolder: 'Rename Folder',
  1799. moveFiles: 'Move {{count}} File(s)',
  1800. rootNoFolder: 'Root (No Folder)',
  1801. current: 'current',
  1802. linkFolder: 'Link Folder',
  1803. linkFolderDescription: 'Link "{{name}}" to a project or archive for quick access.',
  1804. project: 'Project',
  1805. archive: 'Archive',
  1806. noProjectsFound: 'No projects found',
  1807. noArchivesFound: 'No archives found',
  1808. unlink: 'Unlink',
  1809. link: 'Link',
  1810. dragDropFiles: 'Drag & drop files here',
  1811. dropFilesHere: 'Drop files here',
  1812. orClickToBrowse: 'or click to browse',
  1813. allFileTypesSupported: 'All file types supported. ZIP files will be extracted.',
  1814. zipFilesDetected: 'ZIP files detected',
  1815. zipExtractOptions: 'ZIP files will be extracted. Choose how to handle folder structure:',
  1816. preserveZipStructure: 'Preserve folder structure from ZIP',
  1817. createFolderFromZip: 'Create folder from ZIP filename',
  1818. stlThumbnailGeneration: 'STL thumbnail generation',
  1819. zipMayContainStl: 'ZIP files may contain STL files. Thumbnails can be generated during extraction.',
  1820. thumbnailsCanBeGenerated: 'Thumbnails can be generated for STL files. Large models may take longer to process.',
  1821. generateThumbnailsForStl: 'Generate thumbnails for STL files',
  1822. threemfDetected: '3MF files detected',
  1823. threemfExtractionInfo: 'Printer model, material, color, and print settings will be automatically extracted from 3MF files.',
  1824. willBeExtracted: 'Will be extracted',
  1825. filesExtracted: '{{count}} files extracted',
  1826. uploadComplete: 'Upload complete: {{succeeded}} succeeded',
  1827. uploadFailed: '{{count}} failed',
  1828. uploading: 'Uploading...',
  1829. changeLink: 'Change Link...',
  1830. linkTo: 'Link to...',
  1831. linkToProjectOrArchive: 'Link to project or archive',
  1832. addToQueue: 'Add to Queue',
  1833. schedulePrint: 'Schedule',
  1834. generateThumbnail: 'Generate Thumbnail',
  1835. generateThumbnails: 'Generate Thumbnails',
  1836. generateThumbnailsForMissing: 'Generate thumbnails for STL files missing them',
  1837. gridView: 'Grid view',
  1838. listView: 'List view',
  1839. lowDiskSpaceWarning: 'Low disk space warning',
  1840. lowDiskSpaceDetails: 'Only {{free}} free of {{total}} total. Threshold is set to {{threshold}} GB in settings.',
  1841. files: 'Files',
  1842. folders: 'Folders',
  1843. size: 'Size',
  1844. free: 'Free',
  1845. allFiles: 'All Files',
  1846. wrap: 'Wrap',
  1847. enableTextWrapping: 'Enable text wrapping',
  1848. disableTextWrapping: 'Disable text wrapping',
  1849. dragToResizeTooltip: 'Drag to resize, double-click to reset',
  1850. searchFiles: 'Search files...',
  1851. allTypes: 'All types',
  1852. prints: 'Prints',
  1853. ascending: 'Ascending',
  1854. descending: 'Descending',
  1855. resultsCount: '{{showing}} of {{total}} files',
  1856. selectAll: 'Select All',
  1857. deselectAll: 'Deselect All',
  1858. selected: '{{count}} selected',
  1859. adding: 'Adding...',
  1860. loadingFiles: 'Loading files...',
  1861. folderIsEmpty: 'Folder is empty',
  1862. noFilesYet: 'No files yet',
  1863. folderEmptyDescription: 'Upload files or move files into this folder to get started.',
  1864. noFilesDescription: 'Upload files to start organizing your print-related files.',
  1865. noMatchingFiles: 'No matching files',
  1866. noMatchingFilesDescription: 'No files match your current search or filter criteria.',
  1867. clearFilters: 'Clear filters',
  1868. printedCount: 'Printed {{count}}x',
  1869. uploadedBy: 'Uploaded By',
  1870. deleteFolder: 'Delete Folder',
  1871. deleteFile: 'Delete File',
  1872. deleteFilesCount: 'Delete {{count}} Files',
  1873. deleteFolderConfirm: 'Are you sure you want to delete this folder? All files inside will also be deleted.',
  1874. deleteFileConfirm: 'Are you sure you want to delete this file?',
  1875. deleteFilesConfirm: 'Are you sure you want to delete {{count}} selected files? This action cannot be undone.',
  1876. deleting: 'Deleting...',
  1877. noPermissionRenameFolder: 'You do not have permission to rename folders',
  1878. noPermissionLinkFolder: 'You do not have permission to link folders',
  1879. noPermissionDeleteFolder: 'You do not have permission to delete folders',
  1880. noPermissionPrint: 'You do not have permission to print',
  1881. noPermissionAddToQueue: 'You do not have permission to add to queue',
  1882. noPermissionDownload: 'You do not have permission to download files',
  1883. noPermissionRenameFile: 'You do not have permission to rename this file',
  1884. noPermissionGenerateThumbnail: 'You do not have permission to generate thumbnails',
  1885. noPermissionDeleteFile: 'You do not have permission to delete this file',
  1886. noPermissionCreateFolder: 'You do not have permission to create folders',
  1887. noPermissionUpload: 'You do not have permission to upload files',
  1888. noPermissionMoveFiles: 'You do not have permission to move files',
  1889. noPermissionDeleteFiles: 'You do not have permission to delete files',
  1890. toast: {
  1891. folderCreated: 'Folder created',
  1892. folderDeleted: 'Folder deleted',
  1893. fileDeleted: 'File deleted',
  1894. filesDeleted: 'Deleted {{count}} files',
  1895. filesMoved: 'Files moved',
  1896. folderLinked: 'Folder linked',
  1897. folderUnlinked: 'Folder unlinked',
  1898. addedToQueue: 'Added {{count}} file(s) to queue',
  1899. addedToQueuePartial: 'Added {{added}} file(s), {{failed}} failed',
  1900. failedToAddToQueue: 'Failed to add files: {{error}}',
  1901. fileRenamed: 'File renamed',
  1902. folderRenamed: 'Folder renamed',
  1903. thumbnailsGenerated: 'Generated {{count}} thumbnail(s)',
  1904. thumbnailsGeneratedPartial: 'Generated {{succeeded}} thumbnail(s), {{failed}} failed',
  1905. noStlMissingThumbnails: 'No STL files missing thumbnails',
  1906. failedToGenerateThumbnails: 'Failed to generate thumbnails: {{error}}',
  1907. thumbnailGenerated: 'Thumbnail generated',
  1908. failedToGenerateThumbnail: 'Failed to generate thumbnail: {{error}}',
  1909. },
  1910. },
  1911. // Projects
  1912. projects: {
  1913. title: 'Projects',
  1914. subtitle: 'Organize and track your 3D printing projects',
  1915. newProject: 'New Project',
  1916. editProject: 'Edit Project',
  1917. deleteProject: 'Delete Project',
  1918. projectName: 'Project Name',
  1919. description: 'Description',
  1920. noProjects: 'No projects yet',
  1921. noProjectsFiltered: 'No {{status}} projects',
  1922. noProjectsFilteredHelp: "You don't have any {{status}} projects. Projects will appear here when their status changes.",
  1923. createFirst: 'Create your first project to start organizing related prints, tracking progress, and managing your builds.',
  1924. createFirstButton: 'Create Your First Project',
  1925. create: 'Create',
  1926. files: 'Files',
  1927. prints: 'Prints',
  1928. plates: 'plates',
  1929. parts: 'parts',
  1930. lastModified: 'Last Modified',
  1931. deleteConfirm: 'Are you sure you want to delete this project? Archives and queue items will be unlinked but not deleted.',
  1932. addFiles: 'Add Files',
  1933. removeFile: 'Remove File',
  1934. viewDetails: 'View Details',
  1935. // Modal fields
  1936. namePlaceholder: 'e.g., Voron 2.4 Build',
  1937. descriptionPlaceholder: 'Optional description...',
  1938. color: 'Color',
  1939. targetPlates: 'Target Plates',
  1940. targetPlatesPlaceholder: 'e.g., 25',
  1941. targetPlatesHelp: 'Number of print jobs',
  1942. targetParts: 'Target Parts',
  1943. targetPartsPlaceholder: 'e.g., 150',
  1944. targetPartsHelp: 'Total objects needed',
  1945. tagsLabel: 'Tags (comma-separated)',
  1946. tagsPlaceholder: 'e.g., voron, functional, gift',
  1947. dueDate: 'Due Date',
  1948. priority: 'Priority',
  1949. priorityLow: 'Low',
  1950. priorityNormal: 'Normal',
  1951. priorityHigh: 'High',
  1952. priorityUrgent: 'Urgent',
  1953. // Status
  1954. statusActive: 'Active',
  1955. statusCompleted: 'Completed',
  1956. statusArchived: 'Archived',
  1957. done: 'Done',
  1958. completed: 'completed',
  1959. failed: 'failed',
  1960. inQueue: 'in queue',
  1961. noPrintsYet: 'No prints yet',
  1962. // Footer stats
  1963. printJobs: 'Print jobs (plates)',
  1964. partsPrinted: 'Parts printed',
  1965. failedParts: 'Failed parts',
  1966. // Actions
  1967. import: 'Import',
  1968. export: 'Export',
  1969. importProject: 'Import project',
  1970. exportAll: 'Export all projects',
  1971. loading: 'Loading projects...',
  1972. // Permissions
  1973. noEditPermission: 'You do not have permission to edit projects',
  1974. noDeletePermission: 'You do not have permission to delete projects',
  1975. noCreatePermission: 'You do not have permission to create projects',
  1976. noImportPermission: 'You do not have permission to import projects',
  1977. noExportPermission: 'You do not have permission to export projects',
  1978. // Toast
  1979. toast: {
  1980. created: 'Project created',
  1981. updated: 'Project updated',
  1982. deleted: 'Project deleted',
  1983. imported: 'Project imported',
  1984. multipleImported: '{{count}} projects imported',
  1985. importFailed: 'Import failed',
  1986. exported: 'Projects exported (metadata only)',
  1987. },
  1988. },
  1989. // Project detail page
  1990. projectDetail: {
  1991. notFound: 'Project not found',
  1992. backToProjects: 'Back to Projects',
  1993. export: 'Export',
  1994. exportProject: 'Export project',
  1995. noExportPermission: 'You do not have permission to export projects',
  1996. noEditPermission: 'You do not have permission to edit projects',
  1997. partOf: 'Part of:',
  1998. priorityLabel: 'Priority:',
  1999. noPrints: 'No prints in this project yet',
  2000. status: {
  2001. active: 'Active',
  2002. completed: 'Completed',
  2003. archived: 'Archived',
  2004. },
  2005. priority: {
  2006. low: 'Low',
  2007. normal: 'Normal',
  2008. high: 'High',
  2009. urgent: 'Urgent',
  2010. },
  2011. dueDate: {
  2012. overdue: 'Overdue',
  2013. today: 'Due today',
  2014. daysLeft: '{{count}} days left',
  2015. },
  2016. progress: {
  2017. platesProgress: 'Plates Progress',
  2018. partsProgress: 'Parts Progress',
  2019. printJobs: 'print jobs',
  2020. parts: 'parts',
  2021. percentComplete: '{{percent}}% complete',
  2022. remaining: '{{count}} remaining',
  2023. },
  2024. stats: {
  2025. printJobs: 'Print Jobs',
  2026. total: 'total',
  2027. failed: '{{count}} failed',
  2028. partsPrinted: '{{count}} parts printed',
  2029. printTime: 'Print Time',
  2030. filamentUsed: 'Filament Used',
  2031. },
  2032. cost: {
  2033. title: 'Cost Tracking',
  2034. filamentCost: 'Filament Cost',
  2035. energy: 'Energy',
  2036. budget: 'Budget',
  2037. remaining: 'Remaining',
  2038. },
  2039. subProjects: {
  2040. title: 'Sub-projects ({{count}})',
  2041. },
  2042. notes: {
  2043. title: 'Notes',
  2044. noEditPermission: 'You do not have permission to edit notes',
  2045. placeholder: 'Add notes about this project...',
  2046. empty: 'No notes yet. Click Edit to add notes.',
  2047. },
  2048. files: {
  2049. title: 'Files',
  2050. linkFolders: 'Link folders from the File Manager',
  2051. forQuickAccess: 'to this project for quick access.',
  2052. fileCount: '{{count}} file(s)',
  2053. empty: 'No folders linked. Go to File Manager and link a folder to this project.',
  2054. },
  2055. bom: {
  2056. title: 'Bill of Materials',
  2057. acquired: '{{completed}}/{{total}} acquired',
  2058. showAll: 'Show all',
  2059. hideDone: 'Hide done',
  2060. addPart: 'Add Part',
  2061. noAddPermission: 'You do not have permission to add parts',
  2062. partNamePlaceholder: 'Part name (e.g., M3x8 screws)',
  2063. partName: 'Part name',
  2064. qty: 'Qty',
  2065. price: 'Price ({{currency}})',
  2066. sourcingUrlPlaceholder: 'Sourcing URL (optional)',
  2067. remarksPlaceholder: 'Remarks (optional)',
  2068. deletePart: 'Delete Part',
  2069. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  2070. noUpdatePermission: 'You do not have permission to update parts',
  2071. noEditPermission: 'You do not have permission to edit parts',
  2072. noDeletePermission: 'You do not have permission to delete parts',
  2073. totalCost: 'Total cost:',
  2074. empty: 'No parts in the bill of materials. Add hardware, electronics, or other components to track what needs to be sourced.',
  2075. },
  2076. timeline: {
  2077. title: 'Activity Timeline',
  2078. empty: 'No activity yet.',
  2079. },
  2080. template: {
  2081. saveAsTemplate: 'Save as Template',
  2082. noCreatePermission: 'You do not have permission to create templates',
  2083. },
  2084. queue: {
  2085. title: 'Queue',
  2086. viewAll: 'View all',
  2087. printing: '{{count}} printing',
  2088. queued: '{{count}} queued',
  2089. },
  2090. prints: {
  2091. title: 'Prints ({{count}})',
  2092. },
  2093. toast: {
  2094. projectUpdated: 'Project updated',
  2095. partAdded: 'Part added',
  2096. partRemoved: 'Part removed',
  2097. exportFailed: 'Export failed',
  2098. projectExported: 'Project exported',
  2099. templateCreated: 'Template created',
  2100. },
  2101. },
  2102. // System info
  2103. system: {
  2104. title: 'System Information',
  2105. version: 'Version',
  2106. uptime: 'Uptime',
  2107. cpuUsage: 'CPU Usage',
  2108. memoryUsage: 'Memory Usage',
  2109. diskUsage: 'Disk Usage',
  2110. networkInfo: 'Network Info',
  2111. logs: 'Logs',
  2112. debugMode: 'Debug Mode',
  2113. enableDebug: 'Enable Debug Logging',
  2114. disableDebug: 'Disable Debug Logging',
  2115. downloadLogs: 'Download Logs',
  2116. clearLogs: 'Clear Logs',
  2117. dockerInfo: 'Docker Info',
  2118. containerName: 'Container Name',
  2119. imageName: 'Image Name',
  2120. platform: 'Platform',
  2121. architecture: 'Architecture',
  2122. },
  2123. // Library (K Profiles)
  2124. library: {
  2125. title: 'Filament Library',
  2126. addFilament: 'Add Filament',
  2127. editFilament: 'Edit Filament',
  2128. deleteFilament: 'Delete Filament',
  2129. vendor: 'Vendor',
  2130. material: 'Material',
  2131. color: 'Color',
  2132. kFactor: 'K Factor',
  2133. temperature: 'Temperature',
  2134. noFilaments: 'No filaments in library',
  2135. deleteConfirm: 'Are you sure you want to delete this filament?',
  2136. importFromPrinter: 'Import from Printer',
  2137. exportToFile: 'Export to File',
  2138. },
  2139. // Spoolman
  2140. spoolman: {
  2141. title: 'Spoolman Integration',
  2142. enabled: 'Spoolman Enabled',
  2143. url: 'Spoolman URL',
  2144. connected: 'Connected',
  2145. disconnected: 'Not Connected',
  2146. testConnection: 'Test Connection',
  2147. sync: 'Sync',
  2148. syncing: 'Syncing...',
  2149. lastSync: 'Last Sync',
  2150. linkToSpoolman: 'Link to Spoolman',
  2151. openInSpoolman: 'Open in Spoolman',
  2152. unlinkSpool: 'Unlink Spool',
  2153. selectSpool: 'Select Spool',
  2154. noUnlinkedSpools: 'No unlinked spools available',
  2155. linkSuccess: 'Spool linked to Spoolman successfully',
  2156. linkFailed: 'Failed to link spool',
  2157. spoolId: 'Spool ID',
  2158. fillSourceLabel: '(Spoolman)',
  2159. weight: 'Weight',
  2160. remaining: 'Remaining',
  2161. disableWeightSync: 'Disable AMS Estimated Weight Sync',
  2162. 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.",
  2163. reportPartialUsage: 'Report Partial Usage for Failed Prints',
  2164. reportPartialUsageDesc: 'When a print fails or is cancelled, report the estimated filament used up to that point based on layer progress.',
  2165. },
  2166. // Timelapse
  2167. timelapse: {
  2168. title: 'Timelapse',
  2169. create: 'Create Timelapse',
  2170. download: 'Download',
  2171. delete: 'Delete',
  2172. preview: 'Preview',
  2173. frameRate: 'Frame Rate',
  2174. quality: 'Quality',
  2175. processing: 'Processing...',
  2176. noTimelapses: 'No timelapses available',
  2177. },
  2178. // AMS
  2179. ams: {
  2180. title: 'AMS',
  2181. slot: 'Slot',
  2182. empty: 'Empty',
  2183. emptySlot: 'Empty slot',
  2184. unknown: 'Unknown',
  2185. humidity: 'Humidity',
  2186. temperature: 'Temperature',
  2187. filamentType: 'Filament Type',
  2188. filamentColor: 'Color',
  2189. remaining: 'Remaining',
  2190. history: 'AMS History',
  2191. noHistory: 'No history available',
  2192. configureSlot: 'Configure Slot',
  2193. externalSpool: 'External Spool',
  2194. profile: 'Profile',
  2195. kFactor: 'K Factor',
  2196. fill: 'Fill',
  2197. configure: 'Configure',
  2198. },
  2199. // Print modal
  2200. printModal: {
  2201. title: 'Start Print',
  2202. selectPrinter: 'Select Printer',
  2203. selectPlate: 'Select Plate',
  2204. filamentMapping: 'Filament Mapping',
  2205. printSettings: 'Print Settings',
  2206. bedLeveling: 'Bed Leveling',
  2207. flowCalibration: 'Flow Calibration',
  2208. vibrationCalibration: 'Vibration Calibration',
  2209. layerInspection: 'First Layer Inspection',
  2210. timelapse: 'Timelapse',
  2211. startPrint: 'Start Print',
  2212. addToQueue: 'Add to Queue',
  2213. cancel: 'Cancel',
  2214. noPrintersAvailable: 'No printers available',
  2215. printerBusy: 'Printer is busy',
  2216. printerOffline: 'Printer is offline',
  2217. },
  2218. // Backup
  2219. backup: {
  2220. title: 'Backup & Restore',
  2221. createBackup: 'Create Backup',
  2222. restoreBackup: 'Restore Backup',
  2223. restoreDescription: 'Replace all data from a backup file',
  2224. downloadBackup: 'Download Backup',
  2225. uploadBackup: 'Upload Backup',
  2226. lastBackup: 'Last Backup',
  2227. autoBackup: 'Auto Backup',
  2228. backupNow: 'Backup Now',
  2229. restoreWarning: 'Warning: Restoring a backup will overwrite all current data.',
  2230. includeArchives: 'Include Archives',
  2231. includeSettings: 'Include Settings',
  2232. includeProfiles: 'Include Profiles',
  2233. backupSuccess: 'Backup created successfully',
  2234. restoreSuccess: 'Backup restored successfully',
  2235. backupFailed: 'Backup failed',
  2236. restoreFailed: 'Restore failed',
  2237. restoreNote: 'Virtual Printer will be stopped during restore',
  2238. },
  2239. // Tags
  2240. tags: {
  2241. title: 'Tags',
  2242. addTag: 'Add Tag',
  2243. editTag: 'Edit Tag',
  2244. deleteTag: 'Delete Tag',
  2245. tagName: 'Tag Name',
  2246. tagColor: 'Tag Color',
  2247. noTags: 'No tags',
  2248. deleteConfirm: 'Are you sure you want to delete this tag?',
  2249. manageTags: 'Manage Tags',
  2250. },
  2251. // Upload modal (archives)
  2252. uploadModal: {
  2253. title: 'Upload 3MF Files',
  2254. dragDrop: 'Drag & drop .3mf files here',
  2255. or: 'or',
  2256. browseFiles: 'Browse Files',
  2257. extractionInfo: 'The printer model will be automatically extracted from the 3MF file metadata.',
  2258. uploaded: 'uploaded',
  2259. failed: 'failed',
  2260. uploading: 'Uploading...',
  2261. upload: 'Upload',
  2262. uploadFailed: 'Upload failed',
  2263. },
  2264. // Edit archive modal
  2265. editArchive: {
  2266. title: 'Edit Archive',
  2267. name: 'Name',
  2268. namePlaceholder: 'Print name',
  2269. printer: 'Printer',
  2270. noPrinter: 'No printer',
  2271. project: 'Project',
  2272. noProject: 'No project',
  2273. itemsPrinted: 'Items Printed',
  2274. itemsPrintedHelp: 'Number of items produced in this print job',
  2275. notes: 'Notes',
  2276. notesPlaceholder: 'Add notes about this print...',
  2277. externalLink: 'External Link',
  2278. externalLinkPlaceholder: 'https://printables.com/model/...',
  2279. externalLinkHelp: 'Link to Printables, Thingiverse, or other source',
  2280. tags: 'Tags',
  2281. tagsPlaceholder: 'Add tags...',
  2282. addMoreTags: 'Add more tags...',
  2283. matchingTags: 'Matching "{{query}}"',
  2284. existingTags: 'Existing tags',
  2285. clickToAdd: '(click to add)',
  2286. status: 'Status',
  2287. failureReason: 'Failure Reason',
  2288. selectReason: 'Select reason...',
  2289. photos: 'Photos of Printed Result',
  2290. photosHelp: 'Click + to add photos of your printed result',
  2291. printResult: 'Print result',
  2292. saving: 'Saving...',
  2293. // Failure reasons
  2294. failureReasons: {
  2295. adhesionFailure: 'Adhesion failure',
  2296. spaghettiDetached: 'Spaghetti / Detached',
  2297. layerShift: 'Layer shift',
  2298. cloggedNozzle: 'Clogged nozzle',
  2299. filamentRunout: 'Filament runout',
  2300. warping: 'Warping',
  2301. stringing: 'Stringing',
  2302. underExtrusion: 'Under-extrusion',
  2303. powerFailure: 'Power failure',
  2304. userCancelled: 'User cancelled',
  2305. other: 'Other',
  2306. },
  2307. // Archive statuses
  2308. statuses: {
  2309. completed: 'Completed',
  2310. failed: 'Failed',
  2311. aborted: 'Cancelled',
  2312. printing: 'Printing',
  2313. },
  2314. },
  2315. // K-Profiles
  2316. kProfiles: {
  2317. title: 'K-Profiles',
  2318. noPrintersConfigured: 'No Printers Configured',
  2319. addPrinterInSettings: 'Add a printer in Settings to manage K-profiles',
  2320. noActivePrinters: 'No Active Printers',
  2321. enablePrinterConnection: 'Enable a printer connection to view its K-profiles',
  2322. loadingProfiles: 'Loading K-Profiles...',
  2323. printerOffline: 'Printer Offline',
  2324. printerOfflineDesc: 'The selected printer is not connected. Power it on to view K-profiles.',
  2325. noMatchingProfiles: 'No Matching Profiles',
  2326. noMatchingProfilesDesc: 'No profiles match your search criteria',
  2327. noKProfiles: 'No K-Profiles',
  2328. noKProfilesDesc: 'No pressure advance profiles found for {{diameter}}mm nozzle',
  2329. createFirstProfile: 'Create First Profile',
  2330. // Controls
  2331. printer: 'Printer',
  2332. nozzle: 'Nozzle',
  2333. refresh: 'Refresh',
  2334. addProfile: 'Add Profile',
  2335. export: 'Export',
  2336. import: 'Import',
  2337. select: 'Select',
  2338. selectAll: 'Select All',
  2339. delete: 'Delete',
  2340. // Filters
  2341. searchPlaceholder: 'Search by name or filament...',
  2342. allExtruders: 'All Extruders',
  2343. leftOnly: 'Left Only',
  2344. rightOnly: 'Right Only',
  2345. allFlow: 'All Flow',
  2346. hfOnly: 'HF Only',
  2347. sOnly: 'S Only',
  2348. sortName: 'Sort: Name',
  2349. sortKValue: 'Sort: K-Value',
  2350. sortFilament: 'Sort: Filament',
  2351. // Dual extruder labels
  2352. leftExtruder: 'Left Extruder',
  2353. rightExtruder: 'Right Extruder',
  2354. // Modal
  2355. modal: {
  2356. addTitle: 'Add K-Profile',
  2357. editTitle: 'Edit K-Profile',
  2358. profileName: 'Profile Name',
  2359. profileNamePlaceholder: 'My PLA Profile',
  2360. kValue: 'K-Value',
  2361. kValuePlaceholder: '0.020',
  2362. kValueHelp: 'Typical range: 0.01 - 0.06 for PLA, 0.02 - 0.10 for PETG',
  2363. filament: 'Filament',
  2364. selectFilament: 'Select filament...',
  2365. noFilamentsHelp: 'No filaments found. Create a K-profile in Bambu Studio first.',
  2366. flowType: 'Flow Type',
  2367. highFlow: 'High Flow',
  2368. standard: 'Standard',
  2369. nozzleSize: 'Nozzle Size',
  2370. extruder: 'Extruder',
  2371. extruders: 'Extruders',
  2372. left: 'Left',
  2373. right: 'Right',
  2374. notes: 'Notes (stored locally)',
  2375. notesPlaceholder: 'Add notes about this profile...',
  2376. notesHelp: 'Notes are saved in Bambuddy, not on the printer',
  2377. syncing: 'Syncing with printer...',
  2378. savingExtruder: 'Saving to extruder {{current}}/{{total}}...',
  2379. pleaseWait: 'Please wait',
  2380. },
  2381. // Delete confirmation
  2382. deleteConfirm: {
  2383. title: 'Delete Profile',
  2384. cannotUndo: 'This cannot be undone',
  2385. message: 'Are you sure you want to delete "{{name}}" from the printer?',
  2386. },
  2387. // Bulk delete
  2388. bulkDelete: {
  2389. title: 'Delete Profiles',
  2390. cannotUndo: 'This cannot be undone',
  2391. message: 'Are you sure you want to delete {{count}} selected profiles from the printer?',
  2392. },
  2393. // Toast
  2394. toast: {
  2395. profileSaved: 'K-profile saved',
  2396. profilesSaved: 'K-profile saved to {{count}} extruders',
  2397. selectAtLeastOneExtruder: 'Please select at least one extruder',
  2398. profileDeleted: 'K-profile deleted',
  2399. profilesDeleted: 'Deleted {{count}} profiles',
  2400. exportedProfiles: 'Exported {{count}} profiles',
  2401. importedProfiles: 'Imported {{count}} of {{total}} profiles',
  2402. noProfilesToExport: 'No profiles to export',
  2403. invalidFileFormat: 'Invalid file format',
  2404. failedToParseImport: 'Failed to parse import file',
  2405. failedToSaveBatch: 'Failed to save K-profiles',
  2406. noteSaved: 'Note saved',
  2407. failedToSaveNote: 'Failed to save note',
  2408. },
  2409. // Permissions
  2410. permission: {
  2411. noRead: 'You do not have permission to refresh profiles',
  2412. noCreate: 'You do not have permission to add profiles',
  2413. noUpdate: 'You do not have permission to update K-profiles',
  2414. noDelete: 'You do not have permission to delete K-profiles',
  2415. noExport: 'You do not have permission to export profiles',
  2416. noImport: 'You do not have permission to import profiles',
  2417. },
  2418. },
  2419. // Virtual Printer
  2420. virtualPrinter: {
  2421. title: 'Virtual Printer',
  2422. running: 'Running',
  2423. stopped: 'Stopped',
  2424. description: {
  2425. default: 'Enable a virtual printer that appears in Bambu Studio and OrcaSlicer. Files sent to this printer will be archived directly without printing.',
  2426. proxy: 'Enable a proxy that relays slicer traffic to a real printer, allowing remote printing over any network.',
  2427. },
  2428. enable: {
  2429. title: 'Enable Virtual Printer',
  2430. visibleInSlicer: 'Visible as "Bambuddy" in slicer discovery',
  2431. proxyingTo: 'Proxying to {{name}}',
  2432. notActive: 'Not active',
  2433. },
  2434. model: {
  2435. title: 'Printer Model',
  2436. description: 'Select which printer model to emulate.',
  2437. restartWarning: 'Changing the model will restart the virtual printer',
  2438. },
  2439. accessCode: {
  2440. title: 'Access Code',
  2441. isSet: 'Access code is set',
  2442. notSet: 'No access code set - required to enable',
  2443. placeholder: 'Enter 8-char code',
  2444. placeholderChange: 'Enter new code to change',
  2445. hint: 'Must be exactly 8 characters. Used by slicers to authenticate.',
  2446. charCount: '({{count}}/8)',
  2447. },
  2448. targetPrinter: {
  2449. title: 'Target Printer',
  2450. configured: 'Proxy target configured',
  2451. notConfigured: 'No target printer selected - required for proxy mode',
  2452. placeholder: 'Select a printer...',
  2453. hint: 'Select the printer to proxy slicer traffic to. The printer must be in LAN mode.',
  2454. noPrinters: 'No printers configured. Add a printer first to use proxy mode.',
  2455. },
  2456. remoteInterface: {
  2457. title: 'Slicer Network Interface',
  2458. configured: 'SSDP proxy enabled',
  2459. optional: 'Optional - for SSDP discovery across networks',
  2460. placeholder: 'Select interface for slicer network...',
  2461. hint: 'Select the network interface connected to the slicer. Enables automatic printer discovery in Bambu Studio.',
  2462. },
  2463. mode: {
  2464. title: 'Mode',
  2465. archive: 'Archive',
  2466. archiveDesc: 'Archive files immediately',
  2467. review: 'Review',
  2468. reviewDesc: 'Review before archiving',
  2469. queue: 'Queue',
  2470. queueDesc: 'Archive and add to queue',
  2471. proxy: 'Proxy',
  2472. proxyDesc: 'Relay to real printer',
  2473. },
  2474. setupRequired: {
  2475. title: 'Setup Required',
  2476. description: 'The virtual printer feature requires additional system configuration before it will work. This includes port forwarding, firewall rules, and platform-specific settings.',
  2477. readGuide: 'Read the setup guide before enabling',
  2478. },
  2479. howItWorks: {
  2480. title: 'How it works',
  2481. titleProxy: 'How it works (Proxy Mode)',
  2482. step1: 'Complete the setup guide for your platform',
  2483. step2: 'Enable the virtual printer and set an access code',
  2484. step3: 'In Bambu Studio or OrcaSlicer, go to "Add Printer"',
  2485. step4: 'The "Bambuddy" printer should appear in the discovery list',
  2486. step5: 'Connect using the access code you set',
  2487. step6: 'When you "print" to Bambuddy, the 3MF file is archived instead',
  2488. proxyStep1: 'Select the target printer (must be in LAN mode)',
  2489. proxyStep2: 'For cross-network: select the slicer network interface',
  2490. proxyStep3: 'Enable the proxy - printer appears in slicer discovery via SSDP',
  2491. proxyStep4: 'Connect using the printer\'s access code',
  2492. proxyStep5: 'Print as normal - traffic is relayed through Bambuddy',
  2493. proxyStep6: 'Camera streaming requires NAT/IP forwarding (see docs)',
  2494. },
  2495. status: {
  2496. title: 'Status Details',
  2497. printerName: 'Printer Name',
  2498. model: 'Model',
  2499. serialNumber: 'Serial Number',
  2500. mode: 'Mode',
  2501. pendingFiles: 'Pending Files',
  2502. targetPrinter: 'Target Printer',
  2503. ftpPort: 'FTP Port',
  2504. mqttPort: 'MQTT Port',
  2505. ftpConnections: 'FTP Connections',
  2506. mqttConnections: 'MQTT Connections',
  2507. },
  2508. toast: {
  2509. updated: 'Virtual printer settings updated',
  2510. failedToUpdate: 'Failed to update settings',
  2511. accessCodeRequired: 'Please set an access code first',
  2512. targetPrinterRequired: 'Please select a target printer first',
  2513. accessCodeEmpty: 'Access code cannot be empty',
  2514. accessCodeLength: 'Access code must be exactly 8 characters',
  2515. },
  2516. },
  2517. // Model Viewer
  2518. modelViewer: {
  2519. openInSlicer: 'Open in Slicer',
  2520. tabs: {
  2521. model: '3D Model',
  2522. gcode: 'G-code Preview',
  2523. },
  2524. notAvailable: 'not available',
  2525. notSliced: 'not sliced',
  2526. plates: 'Plates',
  2527. allPlates: 'All Plates',
  2528. plateNumber: 'Plate {{number}}',
  2529. plateCount: '{{count}} plate',
  2530. plateCount_other: '{{count}} plates',
  2531. objectCount: '{{count}} object',
  2532. objectCount_other: '{{count}} objects',
  2533. filamentCount: '{{count}} filament',
  2534. filamentCount_other: '{{count}} filaments',
  2535. eta: 'ETA {{minutes}} min',
  2536. noPreview: 'No preview available for this file',
  2537. pagination: {
  2538. pageOf: 'Page {{current}} of {{total}}',
  2539. prev: 'Prev',
  2540. next: 'Next',
  2541. },
  2542. errors: {
  2543. failedToLoad: 'Failed to load file',
  2544. noMeshes: 'No meshes found in 3MF file',
  2545. unsupportedFormat: 'Unsupported file format',
  2546. },
  2547. },
  2548. // Maintenance type descriptions (built-in)
  2549. maintenanceDescriptions: {
  2550. lubricateRails: 'Apply lubricant to linear rails for smooth motion',
  2551. cleanNozzle: 'Clean hotend and nozzle to prevent clogs',
  2552. checkBelts: 'Verify belt tension for accurate prints',
  2553. cleanBuildPlate: 'Clean build plate for better adhesion',
  2554. checkExtruder: 'Inspect extruder gears for wear',
  2555. checkCooling: 'Ensure cooling fans are working properly',
  2556. generalInspection: 'General printer inspection',
  2557. cleanCarbonRods: 'Clean carbon rods to reduce friction',
  2558. checkPtfeTube: 'Inspect PTFE tube for wear or damage',
  2559. replaceHepaFilter: 'Replace HEPA filter for air quality',
  2560. replaceCarbonFilter: 'Replace activated carbon filter',
  2561. lubricateLeftNozzleRail: 'Lubricate left nozzle rail (H2 series)',
  2562. },
  2563. };