en.ts 176 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641
  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. inventory: 'Filament',
  12. files: 'File Manager',
  13. notifications: 'Notifications',
  14. settings: 'Settings',
  15. system: 'System',
  16. collapseSidebar: 'Collapse sidebar',
  17. expandSidebar: 'Expand sidebar',
  18. update: 'Update',
  19. updateAvailable: 'Update available: v{{version}}',
  20. updateAvailableBanner: 'Version {{version}} is available!',
  21. viewUpdate: 'View update',
  22. viewOnGithub: 'View on GitHub',
  23. keyboardShortcuts: 'Keyboard shortcuts (?)',
  24. switchToLight: 'Switch to light mode',
  25. switchToDark: 'Switch to dark mode',
  26. smartSwitches: 'Smart Switches',
  27. logout: 'Logout',
  28. },
  29. // Common
  30. common: {
  31. save: 'Save',
  32. saving: 'Saving...',
  33. cancel: 'Cancel',
  34. delete: 'Delete',
  35. edit: 'Edit',
  36. add: 'Add',
  37. close: 'Close',
  38. confirm: 'Confirm',
  39. loading: 'Loading...',
  40. error: 'Error',
  41. success: 'Success',
  42. warning: 'Warning',
  43. enabled: 'Enabled',
  44. disabled: 'Disabled',
  45. yes: 'Yes',
  46. no: 'No',
  47. on: 'On',
  48. off: 'Off',
  49. all: 'All',
  50. none: 'None',
  51. search: 'Search',
  52. filter: 'Filter',
  53. sort: 'Sort',
  54. refresh: 'Refresh',
  55. download: 'Download',
  56. upload: 'Upload',
  57. uploading: 'Uploading...',
  58. uploadFailed: 'Upload failed',
  59. actions: 'Actions',
  60. status: 'Status',
  61. name: 'Name',
  62. description: 'Description',
  63. date: 'Date',
  64. time: 'Time',
  65. hours: 'hours',
  66. minutes: 'minutes',
  67. seconds: 'seconds',
  68. days: 'days',
  69. enable: 'Enable',
  70. disable: 'Disable',
  71. permissions: 'Permissions',
  72. noPrinters: 'No printers configured',
  73. noData: 'No data available',
  74. linkNotFound: 'Link not found',
  75. required: 'Required',
  76. optional: 'Optional',
  77. dismiss: 'Dismiss',
  78. apply: 'Apply',
  79. reset: 'Reset',
  80. export: 'Export',
  81. import: 'Import',
  82. clear: 'Clear',
  83. selectAll: 'Select All',
  84. deselectAll: 'Deselect All',
  85. noChange: '— No change —',
  86. unchanged: 'Unchanged',
  87. unassigned: 'Unassigned',
  88. unknown: 'Unknown',
  89. unknownError: 'Unknown error',
  90. today: 'Today',
  91. tomorrow: 'Tomorrow',
  92. asap: 'ASAP',
  93. overdue: 'Overdue',
  94. now: 'Now',
  95. collapse: 'Collapse',
  96. expand: 'Expand',
  97. viewArchive: 'View archive',
  98. viewInFileManager: 'View in File Manager',
  99. addedBy: 'Added by {{username}}',
  100. prints: 'prints',
  101. more: '+{{count}} more',
  102. ascending: 'Ascending',
  103. descending: 'Descending',
  104. printer: 'Printer',
  105. remove: 'Remove',
  106. type: 'Type',
  107. print: 'Print',
  108. rename: 'Rename',
  109. move: 'Move',
  110. create: 'Create',
  111. duplicate: 'Duplicate',
  112. left: 'Left',
  113. right: 'Right',
  114. },
  115. // Printers page
  116. printers: {
  117. title: 'Printers',
  118. addPrinter: 'Add Printer',
  119. editPrinter: 'Edit Printer',
  120. deletePrinter: 'Delete Printer',
  121. printerName: 'Printer Name',
  122. serialNumber: 'Serial Number',
  123. ipAddress: 'IP Address / Hostname',
  124. accessCode: 'Access Code',
  125. model: 'Model',
  126. nozzleCount: 'Nozzle Count',
  127. autoArchive: 'Auto Archive',
  128. status: {
  129. available: 'Available',
  130. idle: 'Idle',
  131. printing: 'Printing',
  132. paused: 'Paused',
  133. offline: 'Offline',
  134. problem: 'Problem',
  135. error: 'Error',
  136. finished: 'Finished',
  137. unknown: 'Unknown',
  138. },
  139. temperatures: {
  140. nozzle: 'Nozzle',
  141. bed: 'Bed',
  142. chamber: 'Chamber',
  143. },
  144. progress: '{{percent}}% complete',
  145. timeRemaining: '{{time}} remaining',
  146. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  147. maintenanceOk: 'Maintenance OK',
  148. maintenanceWarning: '{{count}} warning',
  149. maintenanceWarning_plural: '{{count}} warnings',
  150. maintenanceDue: '{{count}} due',
  151. maintenanceDue_plural: '{{count}} due',
  152. // Sort options
  153. sort: {
  154. name: 'Name',
  155. status: 'Status',
  156. model: 'Model',
  157. location: 'Location',
  158. ascending: 'Sort ascending',
  159. descending: 'Sort descending',
  160. },
  161. // Card size
  162. cardSize: {
  163. small: 'Small cards',
  164. medium: 'Medium cards',
  165. large: 'Large cards',
  166. extraLarge: 'Extra large cards',
  167. },
  168. // Controls
  169. hideOffline: 'Hide offline',
  170. nextAvailable: 'Next available',
  171. powerOn: 'Power On',
  172. offlinePrintersWithPlugs: 'Offline printers with smart plugs',
  173. noPrintersConfigured: 'No printers configured yet',
  174. // Printer card
  175. readyToPrint: 'Ready to print',
  176. external: 'External',
  177. extL: 'Ext-L',
  178. extR: 'Ext-R',
  179. deleteArchives: 'Delete print archives',
  180. noLabel: 'No label',
  181. printPreview: 'Print preview',
  182. width: 'Width',
  183. height: 'Height',
  184. noObjectsFound: 'No objects found',
  185. objectsLoadedOnPrintStart: 'Objects are loaded when a print starts',
  186. willBeSkipped: 'Will be skipped',
  187. name: 'Name',
  188. serialCannotBeChanged: 'Serial number cannot be changed',
  189. locationHelp: 'Used to group printers and filter queue jobs',
  190. // WiFi signal strength
  191. wifiSignal: {
  192. veryWeak: 'Very weak',
  193. weak: 'Weak',
  194. fair: 'Fair',
  195. good: 'Good',
  196. excellent: 'Excellent',
  197. },
  198. // Maintenance
  199. maintenanceUpToDate: 'All maintenance up to date - Click to view',
  200. // Chamber light
  201. chamberLightOn: 'Turn on chamber light',
  202. chamberLightOff: 'Turn off chamber light',
  203. // Files
  204. files: 'Files',
  205. browseFiles: 'Browse printer files',
  206. // Smart plug
  207. autoOffAfterPrint: 'Auto power-off after print',
  208. autoOffExecuted: 'Auto-off was executed - turn printer on to reset',
  209. // HMS errors
  210. hmsErrors: 'HMS Errors',
  211. viewHmsErrors: 'View {{count}} HMS error(s)',
  212. // Actions
  213. resume: 'Resume',
  214. pause: 'Pause',
  215. stop: 'Stop',
  216. camera: 'Camera',
  217. skipObject: 'Skip Object',
  218. reconnect: 'Reconnect',
  219. mqttDebug: 'MQTT Debug',
  220. printerInformation: 'Printer Information',
  221. copyToClipboard: 'Copy',
  222. copied: 'Copied!',
  223. state: 'State',
  224. wifiSignalLabel: 'WiFi Signal',
  225. developerMode: 'Developer Mode',
  226. enabled: 'Enabled',
  227. disabled: 'Disabled',
  228. addedOn: 'Added',
  229. sdCard: 'SD Card',
  230. inserted: 'Inserted',
  231. notInserted: 'Not inserted',
  232. totalPrintHours: 'Print Hours',
  233. activeNozzle: 'Active: {{nozzle}} nozzle',
  234. nozzleRack: 'Nozzle Rack',
  235. nozzleDocked: 'Docked',
  236. nozzleMounted: 'Mounted',
  237. nozzleActive: 'Active',
  238. nozzleIdle: 'Idle',
  239. nozzleDiameter: 'Diameter',
  240. nozzleType: 'Type',
  241. nozzleStatus: 'Status',
  242. nozzleFilament: 'Filament',
  243. nozzleWear: 'Wear',
  244. nozzleMaxTemp: 'Max Temp',
  245. nozzleSerial: 'Serial',
  246. nozzleHardenedSteel: 'Hardened Steel',
  247. nozzleStainlessSteel: 'Stainless Steel',
  248. nozzleTungstenCarbide: 'Tungsten Carbide',
  249. nozzleFlow: 'Flow',
  250. nozzleHighFlow: 'High Flow',
  251. nozzleStandardFlow: 'Standard',
  252. // Firmware
  253. firmwareUpdate: 'Firmware Update',
  254. firmwareInstructions: 'On the printer\'s touchscreen, go to',
  255. firmwareNav: 'Navigate to',
  256. settings: 'Settings',
  257. firmware: 'Firmware',
  258. // Discovery
  259. discoverPrinters: 'Discover Printers',
  260. searching: 'Searching...',
  261. manualEntry: 'Manual Entry',
  262. addFromCloud: 'Add from Cloud',
  263. // Toast messages
  264. toast: {
  265. printerDeleted: 'Printer deleted',
  266. missingSpoolAssignment: 'Print started on {{printer}}. Missing spool assignment for: {{slots}}',
  267. printerAdded: 'Printer added',
  268. printerUpdated: 'Printer updated',
  269. failedToDelete: 'Failed to delete printer',
  270. failedToAdd: 'Failed to add printer',
  271. failedToUpdate: 'Failed to update printer',
  272. commandSent: 'Command sent',
  273. failedToSendCommand: 'Failed to send command',
  274. turnedOn: '{{name}} turned on',
  275. failedToPowerOn: 'Failed to power on {{name}}',
  276. scriptTriggered: 'Script triggered',
  277. printStopped: 'Print stopped',
  278. printPaused: 'Print paused',
  279. printResumed: 'Print resumed',
  280. referenceDeleted: 'Reference deleted',
  281. detectionAreaSaved: 'Detection area saved',
  282. failedToRunScript: 'Failed to run script',
  283. failedToStopPrint: 'Failed to stop print',
  284. failedToPausePrint: 'Failed to pause print',
  285. failedToResumePrint: 'Failed to resume print',
  286. failedToControlChamberLight: 'Failed to control chamber light',
  287. failedToSetSpeed: 'Failed to set print speed',
  288. failedToUpdateSetting: 'Failed to update setting',
  289. failedToSkipObjects: 'Failed to skip objects',
  290. failedToRereadRfid: 'Failed to re-read RFID',
  291. failedToCheckPlate: 'Failed to check plate',
  292. failedToUpdateLabel: 'Failed to update label',
  293. failedToDeleteReference: 'Failed to delete reference',
  294. failedToSaveDetectionArea: 'Failed to save detection area',
  295. plateCheckEnabled: 'Plate check enabled',
  296. plateCheckDisabled: 'Plate check disabled',
  297. calibrationSaved: 'Calibration saved!',
  298. calibrationFailed: 'Calibration failed',
  299. rfidRereadInitiated: 'RFID re-read initiated',
  300. },
  301. // Connection status
  302. connection: {
  303. connected: 'Connected',
  304. offline: 'Offline',
  305. },
  306. // Queue info
  307. queue: {
  308. inQueue: '{{count}} print in queue',
  309. inQueue_plural: '{{count}} prints in queue',
  310. },
  311. // Controls section
  312. controls: 'Controls',
  313. // RFID
  314. rfid: {
  315. reread: 'Re-read RFID',
  316. },
  317. // Permissions
  318. permission: {
  319. noAdd: 'You do not have permission to add printers',
  320. noEdit: 'You do not have permission to edit printers',
  321. noDelete: 'You do not have permission to delete printers',
  322. noControl: 'You do not have permission to control printers',
  323. noFiles: 'You do not have permission to access printer files',
  324. noAmsRfid: 'You do not have permission to re-read AMS RFID',
  325. noSmartPlugControl: 'You do not have permission to control smart plugs',
  326. noCamera: 'You do not have permission to view cameras',
  327. },
  328. // Add/Edit modal
  329. modal: {
  330. addTitle: 'Add Printer',
  331. editTitle: 'Edit Printer',
  332. myPrinter: 'My Printer',
  333. selectModel: 'Select model...',
  334. locationGroup: 'Location / Group (optional)',
  335. locationPlaceholder: 'e.g., Workshop, Office, Basement',
  336. autoArchiveLabel: 'Auto-archive completed prints',
  337. fromPrinterSettings: 'From printer settings',
  338. modelOptional: 'Model (optional)',
  339. saveChanges: 'Save Changes',
  340. },
  341. // Skip objects
  342. skipObjects: {
  343. tooltip: 'Skip objects',
  344. onlyWhilePrinting: 'Skip objects (only while printing)',
  345. requiresMultiple: 'Skip objects (requires 2+ objects)',
  346. title: 'Skip Objects',
  347. matchIdsInfo: 'Match IDs with your printer display',
  348. printerShowsIds: 'The printer screen shows object IDs on the build plate',
  349. skipSelected: 'Skip Selected',
  350. skipping: 'Skipping...',
  351. noObjectsSelected: 'No objects selected',
  352. selectObjectsToSkip: 'Select objects you want to skip from the current print',
  353. skipped: 'skipped',
  354. objectsSkipped: 'Objects skipped',
  355. activeCount: '{{count}} active',
  356. waitForLayer: 'Wait for layer 2+ to skip objects (currently layer {{layer}})',
  357. skip: 'Skip',
  358. confirmTitle: 'Skip Object?',
  359. confirmMessage: 'Are you sure you want to skip "{{name}}"? This cannot be undone.',
  360. },
  361. // Confirm modals
  362. confirm: {
  363. deleteTitle: 'Delete Printer',
  364. deleteMessage: 'Are you sure you want to delete "{{name}}"? This will remove all connection settings.',
  365. deleteArchivesNote: 'All print history for this printer will be permanently deleted.',
  366. keepArchivesNote: 'Print history will be kept but no longer associated with this printer.',
  367. stopTitle: 'Stop Print',
  368. stopMessage: 'Are you sure you want to stop the current print on "{{name}}"? This will cancel the print job.',
  369. stopButton: 'Stop Print',
  370. pauseTitle: 'Pause Print',
  371. pauseMessage: 'Are you sure you want to pause the current print on "{{name}}"?',
  372. pauseButton: 'Pause Print',
  373. resumeTitle: 'Resume Print',
  374. resumeMessage: 'Are you sure you want to resume the print on "{{name}}"?',
  375. resumeButton: 'Resume Print',
  376. powerOnTitle: 'Power On Printer',
  377. powerOnMessage: 'Are you sure you want to turn ON the power for "{{name}}"?',
  378. powerOnButton: 'Power On',
  379. powerOffTitle: 'Power Off Printer',
  380. powerOffMessage: 'Are you sure you want to turn OFF the power for "{{name}}"?',
  381. 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.',
  382. powerOffButton: 'Power Off',
  383. },
  384. // Discovery
  385. discovery: {
  386. title: 'Discover Printers',
  387. searching: 'Searching...',
  388. scanning: 'Scanning...',
  389. scanProgress: 'Scanning... {{scanned}}/{{total}}',
  390. foundPrinters: 'Found {{count}} printer(s)',
  391. noPrintersFound: 'No printers found',
  392. noPrintersFoundSubnet: 'No printers found in the specified subnet.',
  393. noPrintersFoundNetwork: 'No printers found on the network.',
  394. allConfigured: 'All discovered printers are already configured.',
  395. alreadyAdded: 'Already added',
  396. select: 'Select',
  397. manualEntry: 'Manual Entry',
  398. addFromCloud: 'Add from Cloud',
  399. subnetToScan: 'Subnet to scan',
  400. dockerNote: 'Docker detected. Enter your printer\'s subnet in CIDR notation. Requires network_mode: host in docker-compose.yml.',
  401. scanSubnet: 'Scan Subnet for Printers',
  402. discoverNetwork: 'Discover Printers on Network',
  403. scanningSubnet: 'Scanning subnet for Bambu printers...',
  404. scanningNetwork: 'Scanning network...',
  405. serialRequired: 'Serial required',
  406. unknown: 'Unknown',
  407. failedToStart: 'Failed to start discovery',
  408. },
  409. // AMS Drying
  410. drying: {
  411. start: 'Start Drying',
  412. stop: 'Stop Drying',
  413. temperature: 'Temperature',
  414. duration: 'Duration',
  415. hours: 'hours',
  416. timeRemaining: '{{time}} left',
  417. active: 'Drying',
  418. notSupported: 'Drying not supported',
  419. powerRequired: 'Connect AMS power adapter to enable drying',
  420. startingDrying: 'Starting drying...',
  421. stoppingDrying: 'Stopping drying...',
  422. rotateTray: 'Rotate spool during drying',
  423. },
  424. // Filaments section
  425. filaments: 'Filaments',
  426. // Camera
  427. openCameraOverlay: 'Open camera overlay',
  428. openCameraWindow: 'Open camera in new window',
  429. // Firmware
  430. firmwareUpdateAvailable: 'Firmware update available: {{current}} → {{latest}}',
  431. firmwareUpToDate: 'Firmware {{version}} — Up to date',
  432. firmwareUpdateButton: 'Update',
  433. // Plate detection
  434. plateDetection: {
  435. noPermission: 'You do not have permission to update printers',
  436. enabledClick: 'Plate check enabled - Click to disable',
  437. disabledClick: 'Plate check disabled - Click to enable',
  438. manageCalibration: 'Manage plate detection calibration',
  439. calibrationRequired: 'Calibration Required',
  440. calibrationInstructions: 'Please ensure the build plate is <strong>completely empty</strong>, then click Calibrate.',
  441. calibrationDescription: 'Calibration captures a reference image of the empty plate. Future checks will compare against this reference to detect objects.',
  442. calibrationTip: '<strong>Tip:</strong> You can store up to 5 calibrations for different plates. The system automatically uses the best match when checking.',
  443. plateEmpty: 'Plate appears empty',
  444. objectsDetected: 'Objects detected on plate',
  445. confidence: 'Confidence',
  446. difference: 'Difference',
  447. analysisPreview: 'Analysis preview:',
  448. analysisLegend: 'Green box = detection area, Red overlay = differences from calibration',
  449. savedReferences: 'Saved References ({{count}}/{{max}})',
  450. deleteReference: 'Delete reference',
  451. labelPlaceholder: 'Label...',
  452. clickToEdit: '{{label}} - Click to edit',
  453. clickToAddLabel: 'Click to add label',
  454. },
  455. // Speed
  456. speed: {
  457. title: 'Print Speed',
  458. silent: 'Silent (50%)',
  459. standard: 'Standard (100%)',
  460. sport: 'Sport (124%)',
  461. ludicrous: 'Ludicrous (166%)',
  462. },
  463. // Fans
  464. fans: {
  465. partCooling: 'Part Cooling Fan',
  466. auxiliary: 'Auxiliary Fan',
  467. chamber: 'Chamber Fan',
  468. },
  469. // HMS errors
  470. clickToViewHmsErrors: 'Click to view HMS errors',
  471. estimatedCompletion: 'Estimated completion time',
  472. slotOptions: 'Slot options',
  473. // AMS hover popup
  474. amsPopup: {
  475. friendlyName: 'AMS Name',
  476. friendlyNamePlaceholder: 'e.g. AMS Friendly Name',
  477. serialNumber: 'Serial Number',
  478. firmwareVersion: 'Firmware',
  479. save: 'Save',
  480. clear: 'Clear',
  481. noEditPermission: 'You do not have permission to rename AMS units',
  482. },
  483. // Firmware modal
  484. firmwareModal: {
  485. title: 'Firmware Update',
  486. titleUpToDate: 'Firmware Info',
  487. currentVersion: 'Current:',
  488. latestVersion: 'Latest:',
  489. releaseNotes: 'Release Notes',
  490. checkingPrereqs: 'Checking prerequisites...',
  491. sdCardReady: 'SD card ready. Click below to upload firmware.',
  492. uploadedSuccess: 'Firmware uploaded to SD card!',
  493. applyInstructions: 'To apply the update on your printer:',
  494. step1: 'On the printer\'s touchscreen, go to <strong>Settings</strong>',
  495. step2: 'Navigate to <strong>Firmware</strong>',
  496. step3: 'Select <strong>Update from SD card</strong>',
  497. step4: 'The update will take 10-20 minutes',
  498. done: 'Done',
  499. starting: 'Starting...',
  500. uploadFirmware: 'Upload Firmware',
  501. uploadFailed: 'Failed to start upload: {{error}}',
  502. uploadedToast: 'Firmware uploaded! Trigger update from printer screen.',
  503. },
  504. accessCodePlaceholder: 'Leave empty to keep current',
  505. // ROI editor
  506. roi: {
  507. title: 'Detection Area (ROI)',
  508. xStart: 'X Start',
  509. yStart: 'Y Start',
  510. width: 'Width',
  511. height: 'Height',
  512. instruction: 'Adjust the detection area to focus on the build plate. The green box in the preview shows the current area.',
  513. },
  514. developerModeWarning: 'Developer LAN mode is not enabled on: {{names}}. Some features may not work.',
  515. howToEnable: 'How to enable',
  516. incompatibleFile: 'This file was sliced for {{slicedFor}}, but this printer is a {{printerModel}}',
  517. dropNotPrintable: 'Only .gcode and .gcode.3mf files can be printed',
  518. dropToPrint: 'Drop to print',
  519. cannotPrint: 'Printer busy',
  520. },
  521. // Archives page
  522. archives: {
  523. title: 'Print Archives',
  524. searchPlaceholder: 'Search archives...',
  525. filterByPrinter: 'Filter by printer',
  526. filterByStatus: 'Filter by status',
  527. sortBy: 'Sort by',
  528. sortNewest: 'Newest first',
  529. sortOldest: 'Oldest first',
  530. sortName: 'Name',
  531. sortDuration: 'Duration',
  532. sortLargest: 'Largest first',
  533. sortSmallest: 'Smallest first',
  534. sortSize: 'Size',
  535. noArchives: 'No archives found',
  536. noArchivesSearch: 'No archives match your search',
  537. originalPrintNotVisible: 'Original print not visible - try clearing filters',
  538. noArchivesYet: 'No archives yet',
  539. prints: 'prints',
  540. pagination: {
  541. showing: 'Showing',
  542. to: 'to',
  543. of: 'of',
  544. show: 'Show',
  545. page: 'Page',
  546. all: 'All',
  547. },
  548. loadingArchives: 'Loading archives...',
  549. releaseToUpload: 'Release to upload',
  550. showAll: 'Show all',
  551. showFavoritesOnly: 'Show favorites only',
  552. gridView: 'Grid view',
  553. listView: 'List view',
  554. calendarView: 'Calendar view',
  555. logView: 'Print Log',
  556. manageTags: 'Manage Tags',
  557. showFailedPrints: 'Show failed prints',
  558. hideFailedPrints: 'Hide failed prints',
  559. hideDuplicates: 'Hide Duplicates',
  560. viewOriginalPrint: 'Click to view original print (#{{id}})',
  561. printTime: 'Print Time',
  562. filamentUsed: 'Filament Used',
  563. cost: 'Cost',
  564. reprint: 'Reprint',
  565. preview: 'Preview',
  566. deleteArchive: 'Delete Archive',
  567. deleteConfirm: 'Are you sure you want to delete this archive?',
  568. favorite: 'Favorite',
  569. unfavorite: 'Remove from favorites',
  570. viewDetails: 'View Details',
  571. status: {
  572. completed: 'Completed',
  573. failed: 'Failed',
  574. stopped: 'Stopped',
  575. },
  576. toast: {
  577. source3mfAttached: 'Source 3MF attached: {{filename}}',
  578. failedUploadSource3mf: 'Failed to upload source 3MF',
  579. source3mfRemoved: 'Source 3MF removed',
  580. failedRemoveSource3mf: 'Failed to remove source 3MF',
  581. f3dAttached: 'F3D attached: {{filename}}',
  582. failedUploadF3d: 'Failed to upload F3D',
  583. f3dRemoved: 'F3D removed',
  584. failedRemoveF3d: 'Failed to remove F3D',
  585. timelapseAttached: 'Timelapse attached: {{filename}}',
  586. timelapseAlreadyAttached: 'Timelapse already attached',
  587. noMatchingTimelapse: 'No matching timelapse found',
  588. failedScanTimelapse: 'Failed to scan for timelapse',
  589. failedAttachTimelapse: 'Failed to attach timelapse',
  590. timelapseRemoved: 'Timelapse removed',
  591. failedRemoveTimelapse: 'Failed to remove timelapse',
  592. timelapseUploaded: 'Timelapse uploaded: {{filename}}',
  593. failedUploadTimelapse: 'Failed to upload timelapse',
  594. archiveDeleted: 'Archive deleted',
  595. failedDeleteArchive: 'Failed to delete archive',
  596. addedToFavorites: 'Added to favorites',
  597. removedFromFavorites: 'Removed from favorites',
  598. projectUpdated: 'Project updated',
  599. failedUpdateProject: 'Failed to update project',
  600. linkCopied: 'Link copied to clipboard',
  601. failedCopyLink: 'Failed to copy link',
  602. photoDeleted: 'Photo deleted',
  603. failedDeletePhoto: 'Failed to delete photo',
  604. failedDeleteArchives: 'Failed to delete archives',
  605. failedUpdateFavorites: 'Failed to update favorites',
  606. exportDownloaded: 'Export downloaded',
  607. exportFailed: 'Export failed',
  608. },
  609. menu: {
  610. print: 'Print',
  611. schedule: 'Schedule',
  612. openInBambuStudio: 'Open in Slicer',
  613. slice: 'Slice',
  614. externalLink: 'External Link',
  615. viewOnMakerWorld: 'View on MakerWorld',
  616. preview3d: '3D Preview',
  617. viewTimelapse: 'View Timelapse',
  618. scanForTimelapse: 'Scan for Timelapse',
  619. uploadTimelapse: 'Upload Timelapse',
  620. removeTimelapse: 'Remove Timelapse',
  621. downloadSource3mf: 'Download Source 3MF',
  622. uploadSource3mf: 'Upload Source 3MF',
  623. replaceSource3mf: 'Replace Source 3MF',
  624. removeSource3mf: 'Remove Source 3MF',
  625. uploadF3d: 'Upload F3D',
  626. replaceF3d: 'Replace F3D',
  627. downloadF3d: 'Download F3D',
  628. removeF3d: 'Remove F3D',
  629. download: 'Download',
  630. copyDownloadLink: 'Copy Download Link',
  631. qrCode: 'QR Code',
  632. viewPhotos: 'View Photos',
  633. viewPhotosCount: 'View Photos ({{count}})',
  634. projectPage: 'Project Page',
  635. addToFavorites: 'Add to Favorites',
  636. removeFromFavorites: 'Remove from Favorites',
  637. edit: 'Edit',
  638. goToProject: 'Go to Project: {{name}}',
  639. addToProject: 'Add to Project',
  640. removeFromProject: 'Remove from Project',
  641. loading: 'Loading...',
  642. noProjectsAvailable: 'No projects available',
  643. select: 'Select',
  644. deselect: 'Deselect',
  645. delete: 'Delete',
  646. },
  647. permission: {
  648. noReprint: 'You do not have permission to reprint this archive',
  649. noAddToQueue: 'You do not have permission to add to queue',
  650. noUpdateArchives: 'You do not have permission to update archives',
  651. noUploadFiles: 'You do not have permission to upload files',
  652. noDownload: 'You do not have permission to download archives',
  653. noCopyLink: 'You do not have permission to copy download links',
  654. noDelete: 'You do not have permission to delete this archive',
  655. noCreate: 'You do not have permission to create archives',
  656. },
  657. card: {
  658. previousPlate: 'Previous plate',
  659. nextPlate: 'Next plate',
  660. plateNumber: 'Plate {{index}}',
  661. moreOptions: 'Right-click for more options',
  662. addToFavorites: 'Add to favorites',
  663. removeFromFavorites: 'Remove from favorites',
  664. cancelled: 'cancelled',
  665. failed: 'failed',
  666. duplicate: 'duplicate',
  667. duplicateTitle: 'This model has been printed before',
  668. openSource3mf: 'Open source 3MF in Bambu Studio (right-click for more options)',
  669. downloadF3d: 'Download Fusion 360 design file',
  670. viewTimelapse: 'View timelapse',
  671. viewPhoto: 'View 1 photo',
  672. viewPhotos: 'View {{count}} photos',
  673. openFolder: 'Open folder: {{name}}',
  674. slicedFile: 'Sliced file - ready to print',
  675. sourceFile: 'Source file only - no AMS mapping available',
  676. gcode: 'GCODE',
  677. source: 'SOURCE',
  678. project: 'Project: {{name}}',
  679. estimated: 'Estimated: {{time}}',
  680. actual: 'Actual: {{time}}',
  681. accuracy: 'Accuracy: {{percent}}%',
  682. filament: '{{weight}}g',
  683. layer: '{{count}} layer',
  684. layers: '{{count}} layers',
  685. object: '{{count}} object',
  686. objects: '{{count}} objects',
  687. slicedFor: 'Sliced for {{model}}',
  688. uploadedBy: 'Uploaded By',
  689. noPermissionReprint: 'You do not have permission to reprint',
  690. noFileForReprint: 'No 3MF file available — the file could not be downloaded from the printer when the print was recorded',
  691. noPermissionEdit: 'You do not have permission to edit archives',
  692. noPermissionDelete: 'You do not have permission to delete archives',
  693. reprint: 'Reprint',
  694. schedulePrint: 'Schedule Print',
  695. schedule: 'Schedule',
  696. openInBambuStudio: 'Open in Slicer',
  697. openInBambuStudioToSlice: 'Open in Slicer to slice',
  698. slice: 'Slice',
  699. externalLink: 'External Link',
  700. makerWorld: 'MakerWorld: {{designer}}',
  701. viewProject: 'View project',
  702. noExternalLink: 'No external link',
  703. preview3d: '3D Preview',
  704. download: 'Download',
  705. edit: 'Edit',
  706. delete: 'Delete',
  707. },
  708. modal: {
  709. deleteArchive: 'Delete Archive',
  710. deleteConfirm: 'Are you sure you want to delete "{{name}}"? This action cannot be undone.',
  711. deleteButton: 'Delete',
  712. removeSource3mf: 'Remove Source 3MF',
  713. removeSource3mfConfirm: 'Are you sure you want to remove the source 3MF file from "{{name}}"? This will delete the original slicer project file.',
  714. removeButton: 'Remove',
  715. removeF3d: 'Remove F3D',
  716. removeF3dConfirm: 'Are you sure you want to remove the Fusion 360 design file from "{{name}}"?',
  717. removeTimelapse: 'Remove Timelapse',
  718. removeTimelapseConfirm: 'Are you sure you want to remove the timelapse video from "{{name}}"?',
  719. timelapse: '{{name}} - Timelapse',
  720. selectTimelapse: 'Select Timelapse',
  721. selectTimelapseDesc: 'No auto-match found. Select the timelapse for this print:',
  722. deleteArchives: 'Delete Archives',
  723. deleteArchivesConfirm: 'Are you sure you want to delete {{count}} archive(s)? This action cannot be undone.',
  724. deleteCount: 'Delete {{count}}',
  725. },
  726. page: {
  727. title: 'Archives',
  728. printsCount: '{{filtered}} of {{total}} prints',
  729. dropFilesHere: 'Drop .3mf files here',
  730. releaseToUpload: 'Release to upload',
  731. only3mfSupported: 'Only .3mf files are supported',
  732. close: 'Close',
  733. selected: '{{count}} selected',
  734. selectAll: 'Select All',
  735. tags: 'Tags',
  736. project: 'Project',
  737. favorite: 'Favorite',
  738. delete: 'Delete',
  739. toggledFavorites: 'Toggled favorites for {{count}} archive(s)',
  740. failedUpdateFavorites: 'Failed to update favorites',
  741. archivesDeleted: '{{count}} archive(s) deleted',
  742. failedDeleteArchives: 'Failed to delete archives',
  743. photoDeleted: 'Photo deleted',
  744. failedDeletePhoto: 'Failed to delete photo',
  745. },
  746. list: {
  747. name: 'Name',
  748. printer: 'Printer',
  749. date: 'Date',
  750. size: 'Size',
  751. actions: 'Actions',
  752. hasTimelapse: 'Has timelapse',
  753. },
  754. log: {
  755. date: 'Date',
  756. printName: 'Print Name',
  757. printer: 'Printer',
  758. user: 'User',
  759. status: 'Status',
  760. duration: 'Duration',
  761. filament: 'Filament',
  762. allPrinters: 'All Printers',
  763. allUsers: 'All Users',
  764. allStatuses: 'All Statuses',
  765. cancelled: 'Cancelled',
  766. skipped: 'Skipped',
  767. dateFrom: 'From',
  768. dateTo: 'To',
  769. noEntries: 'No print log entries found',
  770. showing: 'Showing {{count}} of {{total}} entries',
  771. rowsPerPage: 'Rows',
  772. page: 'Page',
  773. prev: 'Prev',
  774. next: 'Next',
  775. clearLog: 'Clear Log',
  776. clearLogTitle: 'Clear Print Log',
  777. clearLogConfirm: 'All print log entries will be permanently deleted. Archives and queue items are not affected. This action cannot be undone. Are you sure?',
  778. clearLogButton: 'Clear All',
  779. cleared: '{{count}} log entries cleared',
  780. clearFailed: 'Failed to clear print log',
  781. },
  782. },
  783. // Queue page
  784. queue: {
  785. title: 'Print Queue',
  786. subtitle: 'Schedule and manage your print jobs',
  787. addToQueue: 'Add to Queue',
  788. // Print modal
  789. print: 'Print',
  790. reprint: 'Re-print',
  791. schedulePrint: 'Schedule Print',
  792. editQueueItem: 'Edit Queue Item',
  793. printToPrinters: 'Print to {{count}} Printers',
  794. queueToPrinters: 'Queue to {{count}} Printers',
  795. queueSelectedPlates: 'Queue {{count}} Plates',
  796. selectAllPlates: 'Select All {{count}} Plates',
  797. deselectAll: 'Deselect All',
  798. printQueued: 'Print queued',
  799. itemsQueued: '{{count}} items queued',
  800. sending: 'Sending...',
  801. sendingProgress: 'Sending {{current}}/{{total}}...',
  802. adding: 'Adding...',
  803. addingProgress: 'Adding {{current}}/{{total}}...',
  804. savingProgress: 'Saving {{current}}/{{total}}...',
  805. clearQueue: 'Clear Queue',
  806. clearHistory: 'Clear History',
  807. emptyQueue: 'Queue is empty',
  808. position: 'Position',
  809. scheduledTime: 'Scheduled Time',
  810. moveUp: 'Move Up',
  811. moveDown: 'Move Down',
  812. startNow: 'Start Now',
  813. printingInProgress: 'Printing in progress...',
  814. viewArchive: 'View archive',
  815. viewInFileManager: 'View in File Manager',
  816. itemCount: '{{count}} item',
  817. itemCount_plural: '{{count}} items',
  818. dragToReorder: 'Drag to reorder (ASAP only)',
  819. reorderHint: 'Position only affects ASAP items. Scheduled items run at their set time.',
  820. addedBy: 'Added by {{name}}',
  821. nextInQueue: 'Next in queue',
  822. clearPlate: 'Clear Plate & Start Next',
  823. clearPlateSuccess: 'Plate cleared — ready for next print',
  824. plateReady: 'Plate cleared — ready for next print',
  825. plateNumber: 'Plate {{index}}',
  826. // Sections
  827. sections: {
  828. currentlyPrinting: 'Currently Printing',
  829. queued: 'Queued',
  830. history: 'History',
  831. },
  832. // Status
  833. status: {
  834. pending: 'Pending',
  835. waiting: 'Waiting',
  836. printing: 'Printing',
  837. paused: 'Paused',
  838. completed: 'Completed',
  839. failed: 'Failed',
  840. skipped: 'Skipped',
  841. cancelled: 'Cancelled',
  842. },
  843. // Summary cards
  844. summary: {
  845. printing: 'Printing',
  846. queued: 'Queued',
  847. totalTime: 'Total Queue Time',
  848. totalWeight: 'Total Queue Weight',
  849. history: 'History',
  850. },
  851. // Filters
  852. filter: {
  853. allPrinters: 'All Printers',
  854. unassigned: 'Unassigned',
  855. allStatus: 'All Status',
  856. allLocations: 'All Locations',
  857. any: 'Any',
  858. },
  859. // Sort
  860. sort: {
  861. byPosition: 'Sort by Position',
  862. byName: 'Sort by Name',
  863. byPrinter: 'Sort by Printer',
  864. bySchedule: 'Sort by Schedule',
  865. byDate: 'Sort by Date',
  866. ascendingOldest: 'Ascending (oldest first)',
  867. descendingNewest: 'Descending (newest first)',
  868. },
  869. // Badges
  870. badges: {
  871. staged: 'Staged',
  872. requiresPrevious: 'Requires previous success',
  873. autoPowerOff: 'Auto power off',
  874. },
  875. // Empty state
  876. empty: {
  877. title: 'No prints scheduled',
  878. description: 'Schedule a print from the Archives page using the "Schedule" option in the context menu, or drag and drop files to get started.',
  879. },
  880. // Time
  881. time: {
  882. asap: 'ASAP',
  883. overdue: 'Overdue',
  884. now: 'Now',
  885. lessThanMinute: 'In less than a minute',
  886. inMinutes: 'In {{count}} min',
  887. inHours: 'In {{count}} hours',
  888. },
  889. // Actions
  890. actions: {
  891. stopPrint: 'Stop Print',
  892. startPrint: 'Start Print',
  893. requeue: 'Re-queue',
  894. },
  895. // Bulk edit
  896. bulkEdit: {
  897. title: 'Edit {{count}} Item',
  898. title_plural: 'Edit {{count}} Items',
  899. description: 'Only changed settings will be applied to selected items.',
  900. printer: 'Printer',
  901. noChange: '— No change —',
  902. queueOptions: 'Queue Options',
  903. staged: 'Staged (manual start)',
  904. autoPowerOff: 'Auto power off after print',
  905. requirePrevious: 'Require previous success',
  906. printOptions: 'Print Options',
  907. bedLevelling: 'Bed levelling',
  908. flowCalibration: 'Flow calibration',
  909. vibrationCalibration: 'Vibration calibration',
  910. layerInspection: 'First layer inspection',
  911. timelapse: 'Timelapse',
  912. useAms: 'Use AMS',
  913. applyChanges: 'Apply Changes',
  914. selectAll: 'Select All',
  915. deselectAll: 'Deselect All',
  916. selected: '{{count}} selected',
  917. editSelected: 'Edit Selected',
  918. cancelSelected: 'Cancel Selected',
  919. },
  920. // Confirmations
  921. confirm: {
  922. cancelTitle: 'Cancel Scheduled Print',
  923. cancelMessage: 'Are you sure you want to cancel "{{name}}"?',
  924. stopTitle: 'Stop Print',
  925. stopMessage: 'Are you sure you want to stop the current print "{{name}}"? This will cancel the print job on the printer.',
  926. removeTitle: 'Remove from History',
  927. removeMessage: 'Are you sure you want to remove "{{name}}" from the queue history?',
  928. clearHistoryTitle: 'Clear History',
  929. clearHistoryMessage: 'Are you sure you want to remove all {{count}} item(s) from the history?',
  930. cancelButton: 'Cancel Print',
  931. stopButton: 'Stop Print',
  932. thisPrint: 'this print',
  933. thisItem: 'this item',
  934. },
  935. // Toast messages
  936. toast: {
  937. cancelled: 'Queue item cancelled',
  938. cancelFailed: 'Failed to cancel item',
  939. removed: 'Queue item removed',
  940. removeFailed: 'Failed to remove item',
  941. stopped: 'Print stopped',
  942. stopFailed: 'Failed to stop print',
  943. released: 'Print released to queue',
  944. startFailed: 'Failed to start print',
  945. reorderFailed: 'Failed to reorder queue',
  946. historyCleared: 'Cleared {{count}} history item(s)',
  947. clearHistoryFailed: 'Failed to clear history',
  948. updateFailed: 'Failed to update items',
  949. bulkCancelled: 'Cancelled {{count}} item(s)',
  950. bulkCancelFailed: 'Failed to cancel items',
  951. },
  952. // Timeline view
  953. timeline: {
  954. listView: 'List',
  955. timelineView: 'Timeline',
  956. unassigned: 'Unassigned',
  957. noData: 'No scheduled prints for this day',
  958. allDoneBy: 'All prints estimated done by {{time}}',
  959. staged: 'Staged',
  960. filterAll: 'Show All',
  961. filterPrinting: 'Printing',
  962. filterQueued: 'Queued',
  963. time: {
  964. anyMoment: 'any moment',
  965. minutesLeft: '{{minutes}}m left',
  966. hoursLeft: '{{hours}}h left',
  967. hoursMinutesLeft: '{{hours}}h {{minutes}}m left',
  968. },
  969. day: {
  970. previous: 'Previous day',
  971. next: 'Next day',
  972. today: 'Today',
  973. },
  974. },
  975. // Permissions
  976. permissions: {
  977. noStopPrint: 'You do not have permission to stop prints',
  978. noStartPrint: 'You do not have permission to start prints',
  979. noEdit: 'You do not have permission to edit this queue item',
  980. noCancel: 'You do not have permission to cancel this queue item',
  981. noRequeue: 'You do not have permission to re-queue items',
  982. noRemove: 'You do not have permission to remove this queue item',
  983. noClearHistory: 'You do not have permission to clear all history',
  984. noEditItems: 'You do not have permission to edit queue items',
  985. noCancelItems: 'You do not have permission to cancel queue items',
  986. },
  987. },
  988. backgroundDispatch: {
  989. unknownFile: 'Unknown file',
  990. unknownPrinter: 'Unknown printer',
  991. startingPrints: 'Starting prints',
  992. progressSummary: '{{complete}}/{{total}} complete • Dispatched: {{dispatched}} • Processing: {{processing}}',
  993. expandDetails: 'Expand dispatch details',
  994. collapseDetails: 'Collapse dispatch details',
  995. dismissToast: 'Dismiss dispatch toast',
  996. cancelDispatchJob: 'Cancel dispatch job',
  997. cancel: 'Cancel',
  998. cancelling: 'Cancelling…',
  999. status: {
  1000. dispatched: 'Dispatched',
  1001. processing: 'Processing',
  1002. completed: 'Completed',
  1003. failed: 'Failed',
  1004. cancelled: 'Cancelled',
  1005. },
  1006. toast: {
  1007. cancellingUpload: 'Cancelling upload...',
  1008. cancelled: 'Dispatch cancelled',
  1009. cancelFailed: 'Failed to cancel dispatch',
  1010. completeWithFailures: 'Background dispatch complete: {{completed}} succeeded, {{failed}} failed',
  1011. completeSuccess: 'Background dispatch complete: {{completed}} succeeded',
  1012. printStartedRemaining: '{{completed}} print(s) started, {{remaining}} more sending...',
  1013. },
  1014. },
  1015. // Statistics page
  1016. stats: {
  1017. title: 'Dashboard',
  1018. subtitle: 'Drag widgets to rearrange. Click the eye icon to hide.',
  1019. overview: 'Overview',
  1020. totalPrints: 'Total Prints',
  1021. successRate: 'Success Rate',
  1022. totalPrintTime: 'Total Print Time',
  1023. printTime: 'Print Time',
  1024. totalFilament: 'Total Filament Used',
  1025. filamentUsed: 'Filament Used',
  1026. filamentCost: 'Filament Cost',
  1027. totalCost: 'Total Cost',
  1028. energyUsed: 'Energy Used',
  1029. energyCost: 'Energy Cost',
  1030. averagePrintTime: 'Average Print Time',
  1031. printsPerDay: 'Prints per Day',
  1032. byPrinter: 'By Printer',
  1033. printsByPrinter: 'Prints by Printer',
  1034. byMaterial: 'By Material',
  1035. byMonth: 'By Month',
  1036. last7Days: 'Last 7 Days',
  1037. last30Days: 'Last 30 Days',
  1038. last90Days: 'Last 90 Days',
  1039. allTime: 'All Time',
  1040. // Widgets
  1041. quickStats: 'Quick Stats',
  1042. printActivity: 'Print Activity',
  1043. filamentTypes: 'Filament Types',
  1044. filamentTrends: 'Filament Trends',
  1045. failureAnalysis: 'Failure Analysis',
  1046. timeAccuracy: 'Time Accuracy',
  1047. successful: 'Successful:',
  1048. failed: 'Failed:',
  1049. perfectEstimate: '100% = perfect estimate',
  1050. noTimeAccuracyData: 'No time accuracy data yet',
  1051. noFilamentData: 'No filament data available',
  1052. noPrinterData: 'No printer data available',
  1053. noPrintData: 'No print data available',
  1054. noPrintDataLast30Days: 'No print data in the last 30 days',
  1055. failureReasons: 'Failure Reasons',
  1056. topFailureReasons: 'Top Failure Reasons',
  1057. failedPrintsCount: '{{failed}} / {{total}} prints failed',
  1058. lastWeekRate: 'Last week: {{rate}}%',
  1059. // Actions
  1060. resetLayout: 'Reset Layout',
  1061. recalculateCosts: 'Recalculate Costs',
  1062. recalculateCostsHint: 'Recalculate all archive costs using current filament prices',
  1063. exportStats: 'Export Stats',
  1064. exportAsCsv: 'Export as CSV',
  1065. exportAsExcel: 'Export as Excel',
  1066. hiddenCount: '{{count}} Hidden',
  1067. // Toast
  1068. exportDownloaded: 'Export downloaded',
  1069. exportFailed: 'Export failed',
  1070. layoutReset: 'Layout reset',
  1071. recalculatedCosts: 'Recalculated costs for {{count}} archives',
  1072. recalculateFailed: 'Failed to recalculate costs',
  1073. // Loading
  1074. loadingStats: 'Loading statistics...',
  1075. // Permissions
  1076. noPermissionResetLayout: 'You do not have permission to reset layout',
  1077. noPermissionRecalculate: 'You do not have permission to recalculate costs',
  1078. noPrintDataInRange: 'No print data in selected range',
  1079. periodFilament: 'Period Filament',
  1080. periodCost: 'Period Cost',
  1081. avgPerPrint: 'Avg per Print',
  1082. usageOverTime: 'Usage Over Time',
  1083. filamentByWeight: 'Weight',
  1084. printDuration: 'Print Duration',
  1085. printerUtilization: 'Printer Utilization',
  1086. filamentSuccess: 'Success by Material',
  1087. printHabits: 'Print Habits',
  1088. printTimeOfDay: 'Print Time of Day',
  1089. colorDistribution: 'Color Distribution',
  1090. noColorData: 'No color data available',
  1091. records: 'Records',
  1092. longestPrint: 'Longest Print',
  1093. heaviestPrint: 'Heaviest Print',
  1094. mostExpensivePrint: 'Most Expensive',
  1095. busiestDay: 'Busiest Day',
  1096. successStreak: 'Success Streak',
  1097. streakPrint: 'consecutive print',
  1098. streakPrints: '{{count}} consecutive prints',
  1099. printerStats: 'Printer Stats',
  1100. hours: 'hours',
  1101. avgPrints: 'Avg. prints',
  1102. noArchiveData: 'No print data available',
  1103. filamentByTime: 'Time',
  1104. avgWeight: 'Avg. weight',
  1105. avgTime: 'Avg. time',
  1106. filamentByPrints: 'Prints',
  1107. timeframe: {
  1108. 'today': 'Today',
  1109. 'this-week': 'This Week',
  1110. 'this-month': 'This Month',
  1111. 'last-7': 'Last 7 Days',
  1112. 'last-30': 'Last 30 Days',
  1113. 'last-90': 'Last 90 Days',
  1114. 'this-year': 'This Year',
  1115. 'all-time': 'All Time',
  1116. 'custom': 'Custom Range',
  1117. from: 'From',
  1118. to: 'To',
  1119. },
  1120. // User filter
  1121. allUsers: 'All Users',
  1122. noUser: 'No User (System)',
  1123. filterByUser: 'Filter by User',
  1124. },
  1125. // Maintenance page
  1126. maintenance: {
  1127. title: 'Maintenance',
  1128. overview: 'Overview',
  1129. allOk: 'All maintenance up to date',
  1130. dueCount: '{{count}} item due',
  1131. dueCount_plural: '{{count}} items due',
  1132. warningCount: '{{count}} warning',
  1133. warningCount_plural: '{{count}} warnings',
  1134. totalPrintTime: 'Total Print Time',
  1135. nextMaintenance: 'Next Maintenance',
  1136. nothingDue: 'Nothing due',
  1137. tasks: 'Tasks',
  1138. lastPerformed: 'Last performed',
  1139. interval: 'Interval',
  1140. hoursRemaining: '{{hours}}h remaining',
  1141. hoursOverdue: '{{hours}}h overdue',
  1142. markDone: 'Mark as Done',
  1143. performMaintenance: 'Perform Maintenance',
  1144. history: 'History',
  1145. noHistory: 'No maintenance history',
  1146. editPrintHours: 'Edit Print Hours',
  1147. currentHours: 'Current Hours',
  1148. // Tabs
  1149. statusTab: 'Status',
  1150. settingsTab: 'Settings',
  1151. // Status
  1152. overdueCount: '{{count}} overdue',
  1153. dueSoonCount: '{{count}} due soon',
  1154. dueSoon: 'Due soon',
  1155. allGood: 'All good',
  1156. overdueBy: 'Overdue by {{duration}}',
  1157. dueIn: 'Due in {{duration}}',
  1158. timeLeft: '{{duration}} left',
  1159. // Duration formats
  1160. day: '1 day',
  1161. days: '{{count}} days',
  1162. week: '1 week',
  1163. weeks: '{{count}} weeks',
  1164. month: '1 month',
  1165. months: '{{count}} months',
  1166. year: '1 year',
  1167. // Settings
  1168. maintenanceTypes: 'Maintenance Types',
  1169. maintenanceTypesDescription: 'System types and your custom maintenance tasks',
  1170. addCustomType: 'Add Custom Type',
  1171. restoreDefaults: 'Restore Default Tasks',
  1172. intervalType: 'Interval Type',
  1173. intervalValue: 'Interval ({{type}})',
  1174. icon: 'Icon',
  1175. documentationLink: 'Documentation Link (optional)',
  1176. assignToPrinters: 'Assign to Printers',
  1177. selectAtLeastOnePrinter: 'Select at least one printer',
  1178. addType: 'Add Type',
  1179. custom: 'Custom',
  1180. printHours: 'Print Hours',
  1181. calendarDays: 'Calendar Days',
  1182. exampleName: 'e.g., Replace HEPA Filter',
  1183. viewDocumentation: 'View documentation',
  1184. timeBasedInterval: 'Time-based interval',
  1185. // Interval overrides
  1186. intervalOverrides: 'Interval Overrides',
  1187. intervalOverridesDescription: 'Customize intervals for specific printers',
  1188. // Printer assignment
  1189. assignedToPrinters: 'Assigned to printers:',
  1190. noPrintersAssigned: 'No printers assigned',
  1191. addPrinterShort: 'Add:',
  1192. printersAssignedClick: '{{count}} printer(s) assigned - click to manage',
  1193. removeFromPrinter: 'Remove from this printer',
  1194. // Types
  1195. types: {
  1196. lubricateCarbonRods: 'Lubricate Carbon Rods',
  1197. lubricateRails: 'Lubricate Linear Rails',
  1198. cleanNozzle: 'Clean Nozzle/Hotend',
  1199. checkBelts: 'Check Belt Tension',
  1200. cleanBuildPlate: 'Clean Build Plate',
  1201. checkExtruder: 'Check Extruder Gears',
  1202. checkCooling: 'Check Cooling Fans',
  1203. generalInspection: 'General Inspection',
  1204. cleanCarbonRods: 'Clean Carbon Rods',
  1205. lubricateSteelRods: 'Lubricate Steel Rods',
  1206. cleanSteelRods: 'Clean Steel Rods',
  1207. cleanLinearRails: 'Clean Linear Rails',
  1208. checkPtfeTube: 'Check PTFE Tube',
  1209. replaceHepaFilter: 'Replace HEPA Filter',
  1210. replaceCarbonFilter: 'Replace Carbon Filter',
  1211. lubricateLeftNozzleRail: 'Lubricate Left Nozzle Rail',
  1212. },
  1213. // Toast
  1214. maintenanceComplete: 'Maintenance marked as complete',
  1215. typeUpdated: 'Maintenance type updated',
  1216. typeDeleted: 'Maintenance type deleted',
  1217. defaultsRestored: 'Restored {{count}} default task(s)',
  1218. printHoursUpdated: 'Print hours updated',
  1219. printerAssigned: 'Printer assigned',
  1220. printerRemoved: 'Printer removed',
  1221. // Confirmation
  1222. deleteTypeConfirm: 'Delete "{{name}}"?',
  1223. deleteSystemTypeTitle: 'Delete default maintenance task?',
  1224. deleteSystemTypeMessage: 'Are you sure you want to delete the default maintenance task "{{name}}"?',
  1225. // Permissions
  1226. noPermissionUpdate: 'You do not have permission to update maintenance items',
  1227. noPermissionPerform: 'You do not have permission to perform maintenance',
  1228. noPermissionEditTypes: 'You do not have permission to edit maintenance types',
  1229. noPermissionDeleteTypes: 'You do not have permission to delete maintenance types',
  1230. noPermissionEditHours: 'You do not have permission to edit print hours',
  1231. noPermissionRemovePrinter: 'You do not have permission to remove printer assignments',
  1232. noPermissionAssignPrinter: 'You do not have permission to assign printers',
  1233. noPermissionEditIntervals: 'You do not have permission to edit intervals',
  1234. // Configure link
  1235. configureSettings: 'Configure maintenance types and intervals',
  1236. },
  1237. // Settings page
  1238. settings: {
  1239. title: 'Settings',
  1240. general: 'General',
  1241. // Tab names
  1242. tabs: {
  1243. general: 'General',
  1244. smartPlugs: 'Smart Plugs',
  1245. notifications: 'Notifications',
  1246. queue: 'Workflow',
  1247. filament: 'Filament',
  1248. network: 'Network',
  1249. apiKeys: 'API Keys',
  1250. virtualPrinter: 'Virtual Printer',
  1251. users: 'Authentication',
  1252. backup: 'Backup',
  1253. emailAuth: 'Email Authentication',
  1254. },
  1255. // Email settings
  1256. email: {
  1257. smtpSettings: 'SMTP Configuration',
  1258. smtpHost: 'SMTP Server',
  1259. smtpPort: 'SMTP Port',
  1260. security: 'Security',
  1261. authentication: 'Authentication',
  1262. username: 'Username',
  1263. password: 'Password',
  1264. fromEmail: 'From Email',
  1265. fromName: 'From Name',
  1266. testConnection: 'Test SMTP Connection',
  1267. testRecipient: 'Test Recipient Email',
  1268. sendTest: 'Send Test Email',
  1269. sending: 'Sending...',
  1270. save: 'Save Settings',
  1271. saving: 'Saving...',
  1272. advancedAuth: 'Advanced Authentication',
  1273. advancedAuthEnabled: 'Advanced Authentication is enabled',
  1274. advancedAuthEnabledDesc: 'Email-based user management features are active. New users will receive auto-generated passwords via email, and users can reset their passwords through the forgot password feature.',
  1275. advancedAuthDisabled: 'Advanced Authentication is disabled',
  1276. advancedAuthDisabledDesc: 'Enable advanced authentication to activate email-based features for user management.',
  1277. enable: 'Enable',
  1278. disable: 'Disable',
  1279. feature1: 'Passwords are auto-generated and emailed to new users',
  1280. feature2: 'Users can login with username or email',
  1281. feature3: 'Forgot password feature is available',
  1282. feature4: 'Admins can reset user passwords via email',
  1283. // Error messages
  1284. errors: {
  1285. requiredFields: 'Please fill in all required fields',
  1286. usernameRequired: 'Username is required when authentication is enabled',
  1287. enterTestEmail: 'Please enter a test email address',
  1288. smtpServerAndEmail: 'Please fill in SMTP Server and From Email before testing',
  1289. usernamePasswordRequired: 'Username and Password are required when authentication is enabled',
  1290. configureSmtpFirst: 'Please configure and test SMTP settings first',
  1291. enableAuthFirst: 'Please enable authentication first to use email-based features.',
  1292. },
  1293. // Success messages
  1294. success: {
  1295. settingsSaved: 'SMTP settings saved successfully',
  1296. },
  1297. // Security options
  1298. securityOptions: {
  1299. starttls: 'STARTTLS (Port 587)',
  1300. ssl: 'SSL/TLS (Port 465)',
  1301. none: 'None (Port 25)',
  1302. },
  1303. // Authentication options
  1304. authOptions: {
  1305. enabled: 'Enabled',
  1306. disabled: 'Disabled',
  1307. },
  1308. },
  1309. appearance: 'Appearance',
  1310. notifications: 'Notifications',
  1311. smartPlugs: 'Smart Plugs',
  1312. spoolman: 'Spoolman',
  1313. updates: 'Updates',
  1314. language: 'Language',
  1315. languageDescription: 'Select your preferred language',
  1316. theme: 'Theme',
  1317. themeLight: 'Light',
  1318. themeDark: 'Dark',
  1319. themeSystem: 'System',
  1320. defaultView: 'Default View',
  1321. defaultViewDescription: 'Page to show when opening the app',
  1322. checkForUpdates: 'Check for Updates',
  1323. autoUpdate: 'Auto Update',
  1324. currentVersion: 'Current Version',
  1325. latestVersion: 'Latest Version',
  1326. upToDate: 'You are up to date',
  1327. updateAvailable: 'Update available',
  1328. // Notifications
  1329. notificationLanguage: 'Notification Language',
  1330. notificationLanguageDescription: 'Language for push notifications',
  1331. bedCooledThreshold: 'Bed Cooled Threshold',
  1332. bedCooledThresholdDescription: 'Temperature below which the bed is considered cooled after a print',
  1333. userNotificationsEnabled: 'User Notifications',
  1334. userNotificationsEnabledDescription: 'Enable the user notifications menu and email notifications for print job events. Requires Advanced Authentication.',
  1335. userNotificationsDisabledHint: 'Enable Advanced Authentication to use user notifications.',
  1336. notificationProviders: 'Notification Providers',
  1337. addProvider: 'Add Provider',
  1338. editProvider: 'Edit Provider',
  1339. providerType: 'Provider Type',
  1340. testNotification: 'Test Notification',
  1341. testSuccess: 'Test notification sent successfully',
  1342. testFailed: 'Failed to send test notification',
  1343. quietHours: 'Quiet Hours',
  1344. quietHoursDescription: 'Do not disturb during these hours',
  1345. quietHoursStart: 'Start',
  1346. quietHoursEnd: 'End',
  1347. events: {
  1348. title: 'Notification Events',
  1349. printStart: 'Print Started',
  1350. printComplete: 'Print Completed',
  1351. printFailed: 'Print Failed',
  1352. printStopped: 'Print Stopped',
  1353. printProgress: 'Progress Milestones',
  1354. printProgressDescription: 'Notify at 25%, 50%, 75%',
  1355. printerOffline: 'Printer Offline',
  1356. printerError: 'Printer Error',
  1357. filamentLow: 'Low Filament',
  1358. maintenanceDue: 'Maintenance Due',
  1359. maintenanceDueDescription: 'Notify when maintenance is needed',
  1360. },
  1361. // Smart Plugs
  1362. smartPlug: {
  1363. title: 'Smart Plugs',
  1364. add: 'Add Smart Plug',
  1365. edit: 'Edit Smart Plug',
  1366. name: 'Name',
  1367. ipAddress: 'IP Address',
  1368. linkedPrinter: 'Linked Printer',
  1369. autoOn: 'Auto Power On',
  1370. autoOnDescription: 'Turn on when print starts',
  1371. autoOff: 'Auto Power Off',
  1372. autoOffDescription: 'Turn off after print completes',
  1373. offDelay: 'Off Delay',
  1374. offDelayMinutes: 'Minutes after print',
  1375. offDelayTemp: 'When nozzle below temperature',
  1376. currentState: 'Current State',
  1377. turnOn: 'Turn On',
  1378. turnOff: 'Turn Off',
  1379. },
  1380. // Filament Tracking Mode
  1381. filamentTracking: 'Filament Tracking',
  1382. filamentTrackingDesc: 'Choose how to track your filament spools. You can use the built-in inventory or connect an external Spoolman server.',
  1383. filamentChecks: 'Filament checks',
  1384. disableFilamentWarnings: 'Disable filament warnings',
  1385. disableFilamentWarningsDesc: 'Don\'t show warnings about insufficient filament when printing or queueing',
  1386. trackingModeBuiltIn: 'Built-in Inventory',
  1387. trackingModeBuiltInDesc: 'RFID auto-matching and usage tracking included',
  1388. trackingModeSpoolmanDesc: 'External filament management server',
  1389. builtInFeatureRfid: 'Automatically detects Bambu Lab RFID spools in AMS',
  1390. builtInFeatureUsage: 'Tracks filament consumption per print',
  1391. builtInFeatureCatalog: 'Manage spools, colors, and K-factor profiles',
  1392. builtInFeatureThirdParty: 'Third-party spools can be assigned to inventory spools',
  1393. amsSyncButton: 'Sync Weights from AMS',
  1394. amsSyncTitle: 'Sync Spool Weights from AMS',
  1395. amsSyncMessage: 'This will overwrite all inventory spool weights with the current AMS remain% values from connected printers. Use this to recover from corrupted weight data. Printers must be online.',
  1396. amsSyncing: 'Syncing...',
  1397. amsSyncSuccess: '{{synced}} spool(s) synced, {{skipped}} skipped',
  1398. amsSyncError: 'Failed to sync weights from AMS',
  1399. // Spoolman settings
  1400. spoolmanUrl: 'Spoolman URL',
  1401. spoolmanUrlHint: 'URL of your Spoolman server (e.g., http://localhost:7912)',
  1402. spoolmanConnected: 'Connected',
  1403. spoolmanDisconnected: 'Disconnected',
  1404. status: 'Status',
  1405. connect: 'Connect',
  1406. disconnect: 'Disconnect',
  1407. howSyncWorks: 'How Sync Works',
  1408. syncInfoRfidOnly: 'Only official Bambu Lab spools with RFID are synced',
  1409. syncInfoAutoCreate: 'New spools are auto-created in Spoolman on first sync',
  1410. syncInfoThirdPartySkipped: 'Non-Bambu Lab spools (third-party, refilled) are skipped',
  1411. linkingExistingSpools: 'Linking Existing Spools',
  1412. linkingExistingSpoolsDesc: 'To link existing Spoolman spools to your AMS, hover over an AMS slot and click "Link to Spoolman".',
  1413. syncMode: 'Sync Mode',
  1414. syncModeAuto: 'Automatic',
  1415. syncModeManual: 'Manual Only',
  1416. syncModeAutoDesc: 'AMS data syncs automatically when changes are detected',
  1417. syncModeManualDesc: 'Only sync when manually triggered',
  1418. syncAmsData: 'Sync AMS Data',
  1419. syncAmsDataDesc: 'Manually sync printer AMS data to Spoolman',
  1420. allPrinters: 'All Printers',
  1421. // Default printer
  1422. noDefaultPrinter: 'No default (ask each time)',
  1423. // Sidebar
  1424. sidebarOrder: 'Sidebar order',
  1425. // Camera
  1426. saveThumbnails: 'Save thumbnails',
  1427. captureFinishPhoto: 'Capture finish photo',
  1428. noPrintersConfigured: 'No printers configured',
  1429. // Archive settings
  1430. archiveMode: {
  1431. always: 'Always create archive entry',
  1432. never: 'Never create archive entry',
  1433. ask: 'Ask each time',
  1434. },
  1435. // Updates
  1436. checkForUpdatesLabel: 'Check for updates',
  1437. checkPrinterFirmware: 'Check printer firmware',
  1438. includeBetaUpdates: 'Include beta versions',
  1439. includeBetaUpdatesDesc: 'Notify about beta and prerelease versions when checking for updates',
  1440. // Queue
  1441. enableRetry: 'Enable retry',
  1442. // Home Assistant
  1443. homeAssistantDescription: 'Control smart plugs via Home Assistant',
  1444. environmentManagedLabel: '(Environment Managed)',
  1445. autoEnabledViaEnv: 'Automatically enabled via environment variables',
  1446. urlFromEnvReadOnly: 'Value set by HA_URL environment variable (read-only)',
  1447. tokenFromEnvReadOnly: 'Value set by HA_TOKEN environment variable (read-only)',
  1448. // MQTT
  1449. mqttConnectedTo: 'Connected to',
  1450. // Prometheus
  1451. prometheusDescription: 'Expose printer data in Prometheus format',
  1452. // Smart plugs empty state
  1453. noSmartPlugsTitle: 'No smart plugs configured',
  1454. noSmartPlugsDescription: 'Add a Tasmota-based smart plug to track energy usage and automate power control.',
  1455. // Notifications empty state
  1456. noProvidersTitle: 'No providers configured',
  1457. noProvidersDescription: 'Add a provider to receive alerts.',
  1458. noTemplatesAvailable: 'No templates available. Restart the backend to seed default templates.',
  1459. // API permissions
  1460. apiPermissionView: 'View printer status and queue',
  1461. apiPermissionEdit: 'Add and remove items from print queue',
  1462. // API keys
  1463. apiKeysEmptyTitle: 'No API keys',
  1464. apiKeysEmptyDescription: 'Create an API key to integrate with external services.',
  1465. // Users
  1466. noUsersFound: 'No users found',
  1467. noGroupsFound: 'No groups found',
  1468. noGroupsAvailable: 'No groups available',
  1469. passwordsDoNotMatch: 'Passwords do not match',
  1470. systemGroupWarning: 'System group names cannot be changed',
  1471. // Auth disabled
  1472. authDisabledTitle: 'Authentication is Disabled',
  1473. authDisabledFeature1: 'Require login to access the system',
  1474. authDisabledFeature2: 'Create multiple users with group-based permissions',
  1475. authDisabledFeature3: 'Control access with 50+ granular permissions',
  1476. // User deletion
  1477. userHasCreated: 'This user has created:',
  1478. userItemsQuestion: 'What would you like to do with these items?',
  1479. deleteUserConfirm: 'Are you sure you want to delete this user?',
  1480. actionCannotBeUndone: 'This action cannot be undone.',
  1481. // Smart plugs
  1482. addFirstSmartPlug: 'Add Your First Smart Plug',
  1483. // Notifications
  1484. providers: 'Providers',
  1485. log: 'Log',
  1486. testAll: 'Test All',
  1487. testResults: 'Test Results',
  1488. testPassedCount: '{{count}} passed',
  1489. testFailedCount: '{{count}} failed',
  1490. messageTemplates: 'Message Templates',
  1491. messageTemplatesDescription: 'Customize notification messages for each event.',
  1492. // API Keys section
  1493. apiKeys: 'API Keys',
  1494. apiKeysDescription: 'Create API keys for external integrations and webhooks.',
  1495. createKey: 'Create Key',
  1496. apiKeyCreated: 'API Key Created Successfully',
  1497. apiKeyCopyWarning: "Copy this key now - it won't be shown again!",
  1498. useInApiBrowser: 'Use in API Browser',
  1499. createNewApiKey: 'Create New API Key',
  1500. keyName: 'Key Name',
  1501. keyNamePlaceholder: 'e.g., Home Assistant, OctoPrint',
  1502. readStatus: 'Read Status',
  1503. readStatusDescription: 'View printer status and queue',
  1504. manageQueue: 'Manage Queue',
  1505. manageQueueDescription: 'Add and remove items from print queue',
  1506. controlPrinter: 'Control Printer',
  1507. controlPrinterDescription: 'Pause, resume, and stop prints',
  1508. unnamedKey: 'Unnamed Key',
  1509. lastUsed: 'Last used',
  1510. read: 'Read',
  1511. control: 'Control',
  1512. createFirstKey: 'Create Your First Key',
  1513. webhookEndpoints: 'Webhook Endpoints',
  1514. webhookApiKeyHint: 'Use your API key in the X-API-Key header.',
  1515. webhook: {
  1516. getAllStatus: 'Get all printer status',
  1517. getSpecificStatus: 'Get specific printer status',
  1518. addToQueue: 'Add to print queue',
  1519. pausePrint: 'Pause print',
  1520. resumePrint: 'Resume print',
  1521. stopPrint: 'Stop print',
  1522. },
  1523. apiBrowser: 'API Browser',
  1524. apiBrowserDescription: 'Explore and test all available API endpoints.',
  1525. apiKeyForTesting: 'API Key for Testing',
  1526. apiKeyPlaceholder: 'Paste your API key here to test authenticated endpoints...',
  1527. apiKeyHint: 'This key will be sent as X-API-Key header with requests.',
  1528. deleteApiKeyTitle: 'Delete API Key',
  1529. deleteApiKeyMessage: 'Are you sure you want to delete this API key? Any integrations using this key will stop working.',
  1530. deleteKey: 'Delete Key',
  1531. // Filament tab
  1532. amsDisplayThresholds: 'AMS Display Thresholds',
  1533. amsThresholdsDescription: 'Configure color thresholds for AMS humidity and temperature indicators.',
  1534. humidity: 'Humidity',
  1535. goodGreen: 'Good (green)',
  1536. fairOrange: 'Fair (orange)',
  1537. aboveFairBad: 'Above fair threshold shows as red (bad)',
  1538. fairAlsoDryingThreshold: 'This threshold is also used to trigger auto-drying when enabled',
  1539. temperature: 'Temperature',
  1540. goodBlue: 'Good (blue)',
  1541. aboveFairHot: 'Above fair threshold shows as red (hot)',
  1542. historyRetention: 'History Retention',
  1543. keepSensorHistory: 'Keep sensor history for',
  1544. historyRetentionDescription: 'Older humidity and temperature data will be automatically deleted',
  1545. staggeredStart: 'Staggered Start',
  1546. staggeredStartDescription: 'Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.',
  1547. plateClear: 'Plate-Clear Confirmation',
  1548. requirePlateClear: 'Require plate-clear confirmation',
  1549. requirePlateClearDescription: 'When enabled, the scheduler waits for per-printer plate-clear confirmation before starting queued prints on printers with finished jobs. Disable for farm workflows where plates are verified physically.',
  1550. staggerGroupSize: 'Group size',
  1551. staggerGroupSizeHelp: 'Printers to start simultaneously per group',
  1552. staggerInterval: 'Interval (minutes)',
  1553. staggerIntervalHelp: 'Delay between each group starting',
  1554. queueDrying: 'Queue Auto-Drying',
  1555. queueDryingDescription: 'Automatically dry AMS filament when printer is idle between queued prints. Uses humidity threshold above to trigger drying.',
  1556. queueDryingEnabled: 'Enable auto-drying',
  1557. queueDryingEnabledDescription: 'Start AMS drying automatically when printer is idle and humidity is above threshold',
  1558. queueDryingBlock: 'Wait for drying to complete',
  1559. queueDryingBlockDescription: 'Block the print queue until drying finishes. When off, prints take priority over drying.',
  1560. ambientDryingEnabled: 'Ambient drying',
  1561. ambientDryingEnabledDescription: 'Automatically dry filament on idle printers when humidity exceeds threshold, even without queued prints.',
  1562. dryingPresets: 'Drying Presets',
  1563. dryingPresetsDescription: 'Temperature and duration per filament type. AMS 2 Pro uses lower temps, AMS-HT supports higher temps.',
  1564. dryingFilament: 'Filament',
  1565. printModal: 'Print Modal',
  1566. expandCustomMapping: 'Expand custom mapping by default',
  1567. expandCustomMappingDescription: 'When printing to multiple printers, show per-printer AMS mapping expanded',
  1568. // User management
  1569. authentication: 'Authentication',
  1570. authEnabledDescription: 'Your instance is secured with user authentication',
  1571. authDisabledDescription: 'Enable to require login and manage user access',
  1572. authDisabledMessage: 'Enable authentication to create user accounts, manage permissions, and secure your Bambuddy instance.',
  1573. enableAuthentication: 'Enable Authentication',
  1574. currentUser: 'Current User',
  1575. changePassword: 'Change Password',
  1576. admin: 'Admin',
  1577. users: 'Users',
  1578. addUser: 'Add User',
  1579. groups: 'Groups',
  1580. addGroup: 'Add Group',
  1581. system: 'System',
  1582. noDescription: 'No description',
  1583. userCount: '{{count}} users',
  1584. permissionCount: '{{count}} permissions',
  1585. createUser: 'Create User',
  1586. username: 'Username',
  1587. enterUsername: 'Enter username',
  1588. password: 'Password',
  1589. enterPassword: 'Enter password (min 6 characters)',
  1590. confirmPassword: 'Confirm Password',
  1591. confirmPasswordPlaceholder: 'Confirm password',
  1592. // Title tooltips
  1593. viewReleaseOnGitHub: 'View release on GitHub',
  1594. turnAllPlugsOn: 'Turn all plugs on',
  1595. turnAllPlugsOff: 'Turn all plugs off',
  1596. // Modal: Clear logs
  1597. clearNotificationLogs: 'Clear Notification Logs',
  1598. clearLogsMessage: 'This will permanently delete all notification logs older than 30 days. This action cannot be undone.',
  1599. clearLogs: 'Clear Logs',
  1600. // Modal: Reset UI
  1601. resetUiPreferences: 'Reset UI Preferences',
  1602. 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.',
  1603. resetPreferences: 'Reset Preferences',
  1604. // Modal: Delete group
  1605. deleteGroupTitle: 'Delete Group',
  1606. deleteGroupMessage: 'Are you sure you want to delete this group? Users in this group will lose these permissions.',
  1607. deleteGroup: 'Delete Group',
  1608. // Modal: Disable auth
  1609. disableAuthenticationTitle: 'Disable Authentication',
  1610. 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.',
  1611. disableAuthentication: 'Disable Authentication',
  1612. // Additional settings
  1613. configureBambuddy: 'Configure Bambuddy',
  1614. systemDefault: 'System Default',
  1615. archiveSettings: 'Archive Settings',
  1616. newWindow: 'New Window',
  1617. embeddedOverlay: 'Embedded Overlay',
  1618. preferredSlicer: 'Preferred Slicer',
  1619. preferredSlicerDescription: 'Choose which slicer application to open files with',
  1620. externalCameras: 'External Cameras',
  1621. costTracking: 'Cost Tracking',
  1622. printsOnly: 'Prints Only',
  1623. totalConsumption: 'Total Consumption',
  1624. dataManagement: 'Data Management',
  1625. storageUsage: 'Storage Usage',
  1626. storageUsageDescription: 'Breakdown of data usage by category',
  1627. storageUsageTotal: 'Total',
  1628. storageUsageErrors: 'Errors',
  1629. storageUsageOtherBreakdown: 'Other (includes static assets, scripts, and configuration files)',
  1630. storageUsageSystem: 'System',
  1631. storageUsageData: 'Data',
  1632. storageUsageUnavailable: 'Storage usage information unavailable',
  1633. clearNotificationLogsDescription: 'Delete notification logs older than 30 days',
  1634. resetUiPreferencesDescription: 'Reset sidebar order, theme, view modes, and layout preferences. Printers, archives, and settings are not affected.',
  1635. enableHomeAssistant: 'Enable Home Assistant',
  1636. enableMqtt: 'Enable MQTT',
  1637. useTls: 'Use TLS',
  1638. enableMetricsEndpoint: 'Enable Metrics Endpoint',
  1639. availableMetrics: 'Available Metrics',
  1640. editUser: 'Edit User',
  1641. deleteUserTitle: 'Delete User',
  1642. groupName: 'Group Name',
  1643. // Placeholders
  1644. leaveEmptyForAnonymous: 'Leave empty for anonymous',
  1645. leaveEmptyForNoAuth: 'Leave empty for no authentication',
  1646. enterNewPassword: 'Enter new password',
  1647. confirmNewPassword: 'Confirm new password',
  1648. enterGroupName: 'Enter group name',
  1649. enterDescriptionOptional: 'Enter description (optional)',
  1650. enterCurrentPassword: 'Enter current password',
  1651. enterNewPasswordMin6: 'Enter new password (min 6 characters)',
  1652. toast: {
  1653. keyCopied: 'Key copied to clipboard',
  1654. copyFailed: 'Failed to copy key',
  1655. keyAddedToBrowser: 'Key added to API Browser',
  1656. clearLogsFailed: 'Failed to clear logs',
  1657. uiPreferencesReset: 'UI preferences reset. Refreshing...',
  1658. authDisabled: 'Authentication disabled successfully',
  1659. authDisableFailed: 'Failed to disable authentication',
  1660. apiKeyCreated: 'API key created',
  1661. apiKeyDeleted: 'API key deleted',
  1662. userCreated: 'User created successfully',
  1663. userUpdated: 'User updated successfully',
  1664. userDeleted: 'User deleted successfully',
  1665. groupCreated: 'Group created successfully',
  1666. groupUpdated: 'Group updated successfully',
  1667. groupDeleted: 'Group deleted successfully',
  1668. fillRequiredFields: 'Please fill in all required fields',
  1669. passwordsDoNotMatch: 'Passwords do not match',
  1670. passwordTooShort: 'Password must be at least 6 characters',
  1671. enterGroupName: 'Please enter a group name',
  1672. settingsSaved: 'Settings saved',
  1673. cameraSettingsSaved: 'Camera settings saved',
  1674. enterCameraUrl: 'Please enter a camera URL',
  1675. passwordChanged: 'Password changed successfully',
  1676. connectionFailed: 'Connection failed',
  1677. testFailed: 'Test failed',
  1678. cameraConnected: 'Camera connected{{resolution}}',
  1679. },
  1680. testConnection: 'Test Connection',
  1681. catalog: {
  1682. spoolCatalog: 'Spool Catalog',
  1683. spoolCatalogDescription: 'Empty spool weights by brand/type. Used for automatic weight lookup when adding spools.',
  1684. searchCatalog: 'Search catalog...',
  1685. addNewEntry: 'Add New Entry',
  1686. namePlaceholder: 'Name (e.g., Bambu Lab - Plastic)',
  1687. weight: 'Weight',
  1688. type: 'Type',
  1689. default: 'Default',
  1690. custom: 'Custom',
  1691. noMatch: 'No entries match your search',
  1692. empty: 'No entries in catalog',
  1693. deleteEntry: 'Delete Entry',
  1694. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  1695. resetCatalog: 'Reset Catalog',
  1696. resetConfirm: 'Reset catalog to defaults? This will remove all custom entries.',
  1697. loadFailed: 'Failed to load spool catalog',
  1698. nameWeightRequired: 'Name and weight are required',
  1699. entryAdded: 'Entry added',
  1700. addFailed: 'Failed to add entry',
  1701. entryUpdated: 'Entry updated',
  1702. updateFailed: 'Failed to update entry',
  1703. entryDeleted: 'Entry deleted',
  1704. deleteFailed: 'Failed to delete entry',
  1705. resetSuccess: 'Catalog reset to defaults',
  1706. resetFailed: 'Failed to reset catalog',
  1707. exported: 'Exported {{count}} entries',
  1708. imported: 'Imported {{added}} entries ({{skipped}} skipped)',
  1709. importFailed: 'Failed to import: invalid JSON format',
  1710. exportTooltip: 'Export catalog to JSON',
  1711. importTooltip: 'Import catalog from JSON',
  1712. resetTooltip: 'Reset to defaults',
  1713. selectedCount: '{{count}} selected',
  1714. deleteSelected: 'Delete Selected',
  1715. bulkDeleteConfirm: 'Are you sure you want to delete {{count}} entries?',
  1716. bulkDeleted: 'Deleted {{count}} entries',
  1717. bulkDeleteFailed: 'Failed to delete entries',
  1718. },
  1719. colorCatalog: {
  1720. title: 'Color Catalog',
  1721. description: 'Filament colors by manufacturer/material. Used for automatic color lookup when adding spools.',
  1722. searchColors: 'Search colors...',
  1723. allManufacturers: 'All manufacturers',
  1724. addNewColor: 'Add New Color',
  1725. manufacturer: 'Manufacturer',
  1726. colorName: 'Color Name',
  1727. hex: 'Hex',
  1728. materialOptional: 'Material (optional)',
  1729. showing: 'Showing {{filtered}} of {{total}} colors',
  1730. noMatch: 'No colors match your search',
  1731. empty: 'No colors in catalog',
  1732. deleteColor: 'Delete Color',
  1733. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  1734. resetCatalog: 'Reset Color Catalog',
  1735. resetConfirm: 'Reset catalog to defaults? This will remove all custom colors.',
  1736. sync: 'Sync',
  1737. starting: 'Starting...',
  1738. syncTooltip: 'Sync from FilamentColors.xyz (2000+ colors, may take a minute)',
  1739. loadFailed: 'Failed to load color catalog',
  1740. fieldsRequired: 'Manufacturer, color name, and hex color are required',
  1741. colorAdded: 'Color added',
  1742. addFailed: 'Failed to add color',
  1743. colorUpdated: 'Color updated',
  1744. updateFailed: 'Failed to update color',
  1745. colorDeleted: 'Color deleted',
  1746. deleteFailed: 'Failed to delete color',
  1747. resetSuccess: 'Color catalog reset to defaults',
  1748. resetFailed: 'Failed to reset catalog',
  1749. syncUpToDate: 'Already up to date ({{count}} colors checked)',
  1750. syncComplete: 'Added {{added}} new colors ({{skipped}} already existed)',
  1751. syncError: 'Sync error',
  1752. syncFailed: 'Failed to sync from FilamentColors.xyz',
  1753. exported: 'Exported {{count}} colors',
  1754. imported: 'Imported {{added}} colors ({{skipped}} skipped)',
  1755. importFailed: 'Failed to import: invalid JSON format',
  1756. selectedCount: '{{count}} selected',
  1757. deleteSelected: 'Delete Selected',
  1758. bulkDeleteConfirm: 'Are you sure you want to delete {{count}} colors?',
  1759. bulkDeleted: 'Deleted {{count}} colors',
  1760. bulkDeleteFailed: 'Failed to delete colors',
  1761. },
  1762. // General tab
  1763. dateFormat: 'Date Format',
  1764. dateFormatUs: 'US (MM/DD/YYYY)',
  1765. dateFormatEu: 'EU (DD/MM/YYYY)',
  1766. dateFormatIso: 'ISO (YYYY-MM-DD)',
  1767. timeFormat: 'Time Format',
  1768. timeFormat12: '12-hour (3:30 PM)',
  1769. timeFormat24: '24-hour (15:30)',
  1770. defaultPrinter: 'Default Printer',
  1771. defaultPrinterDescription: 'Pre-select this printer for uploads, reprints, and other operations.',
  1772. slicerBambuStudio: 'Bambu Studio',
  1773. slicerOrcaSlicer: 'OrcaSlicer',
  1774. sidebarOrderDescription: 'Drag items in the sidebar to reorder. Reset to default order here.',
  1775. setDefault: 'Set Default',
  1776. sidebarOrderSetDefaultHint: 'Set default applies the current menu order to users who haven\'t customized theirs.',
  1777. sidebarDefaultSet: 'Default menu order has been set.',
  1778. sidebarDefaultCleared: 'Default menu order cleared.',
  1779. sidebarDefaultFailed: 'Failed to set default menu order.',
  1780. reset: 'Reset',
  1781. // Appearance
  1782. darkMode: 'Dark Mode',
  1783. lightMode: 'Light Mode',
  1784. active: '(active)',
  1785. background: 'Background',
  1786. accent: 'Accent',
  1787. style: 'Style',
  1788. bgNeutral: 'Neutral',
  1789. bgWarm: 'Warm',
  1790. bgCool: 'Cool',
  1791. bgOled: 'OLED Black',
  1792. bgSlate: 'Slate Blue',
  1793. bgForest: 'Forest Green',
  1794. accentGreen: 'Green',
  1795. accentTeal: 'Teal',
  1796. accentBlue: 'Blue',
  1797. accentOrange: 'Orange',
  1798. accentPurple: 'Purple',
  1799. accentRed: 'Red',
  1800. styleClassic: 'Classic',
  1801. styleGlow: 'Glow',
  1802. styleVibrant: 'Vibrant',
  1803. themeToggleHint: 'Toggle between dark and light mode using the sun/moon icon in the sidebar.',
  1804. // Archive
  1805. autoArchivePrints: 'Auto-archive prints',
  1806. autoArchiveDescription: 'Automatically save 3MF files when prints complete',
  1807. saveThumbnailsDescription: 'Extract and save preview images from 3MF files',
  1808. captureFinishPhotoDescription: 'Take a photo from printer camera when print completes',
  1809. ffmpegNotInstalled: 'ffmpeg not installed',
  1810. ffmpegRequired: 'Camera capture requires ffmpeg. Install it via <brew>brew install ffmpeg</brew> (macOS) or <apt>apt install ffmpeg</apt> (Linux).',
  1811. // Camera
  1812. camera: 'Camera',
  1813. cameraViewMode: 'Camera View Mode',
  1814. cameraOverlayDescription: 'Camera opens in a resizable overlay on the main screen',
  1815. cameraWindowDescription: 'Camera opens in a separate browser window',
  1816. externalCamerasDescription: 'Configure external cameras to replace the built-in printer camera. Supports MJPEG streams, RTSP, HTTP snapshots, and USB cameras (V4L2). When enabled, the external camera is used for live view and finish photos.',
  1817. cameraPlaceholderUsb: 'Device path (/dev/video0)',
  1818. cameraPlaceholderUrl: 'Camera URL (rtsp://... or http://...)',
  1819. cameraTypeMjpeg: 'MJPEG Stream',
  1820. cameraTypeRtsp: 'RTSP Stream',
  1821. cameraTypeSnapshot: 'HTTP Snapshot',
  1822. cameraTypeUsb: 'USB Camera (V4L2)',
  1823. cameraRotation: 'Rotation',
  1824. test: 'Test',
  1825. connected: 'Connected',
  1826. disconnected: 'Disconnected',
  1827. // Cost tracking
  1828. currency: 'Currency',
  1829. defaultFilamentCost: 'Default filament cost (per kg)',
  1830. electricityCost: 'Electricity cost per kWh',
  1831. energyDisplayMode: 'Energy display mode',
  1832. energyModePrintDescription: 'Dashboard shows sum of energy used during prints',
  1833. energyModeTotalDescription: 'Dashboard shows lifetime energy from smart plugs',
  1834. // File Manager
  1835. fileManager: 'File Manager',
  1836. createArchiveEntry: 'Create Archive Entry When Printing',
  1837. createArchiveEntryDescription: 'When printing from File Manager, optionally create an archive entry',
  1838. lowDiskSpaceWarning: 'Low Disk Space Warning',
  1839. lowDiskSpaceDescription: 'Show warning when free disk space falls below this threshold',
  1840. // Updates
  1841. printerFirmware: 'Printer Firmware',
  1842. checkFirmwareDescription: 'Check for printer firmware updates from Bambu Lab',
  1843. bambuddySoftware: 'Bambuddy Software',
  1844. autoCheckDescription: 'Automatically check for new versions on startup',
  1845. checkNow: 'Check now',
  1846. updateAvailableVersion: 'Update available: v{{version}}',
  1847. releaseNotes: 'Release Notes',
  1848. updateViaDocker: 'Update via Docker Compose:',
  1849. installUpdate: 'Install Update',
  1850. latestVersionRunning: "You're running the latest version",
  1851. failedToCheckUpdates: 'Failed to check for updates: {{error}}',
  1852. // Data Management
  1853. backupRestore: 'Backup & Restore',
  1854. backupRestoreDescription: 'Export/import settings and configure GitHub backup',
  1855. goToBackup: 'Go to Backup',
  1856. // Network tab
  1857. externalUrl: 'External URL',
  1858. externalUrlDescription: 'The external URL where Bambuddy is accessible. Used for notification images and external integrations.',
  1859. bambuddyUrl: 'Bambuddy URL',
  1860. externalUrlHint: 'Include protocol and port (e.g., http://192.168.1.100:8000)',
  1861. ftpRetry: 'FTP Retry',
  1862. ftpRetryDescription: 'Retry FTP operations when printer WiFi is unreliable. Applies to 3MF downloads, print uploads, timelapse downloads, and firmware updates.',
  1863. autoRetryDescription: 'Automatically retry failed FTP operations',
  1864. retryAttempts: 'Retry attempts',
  1865. retryDelay: 'Retry delay',
  1866. connectionTimeout: 'Connection timeout',
  1867. time_one: '{{count}} time',
  1868. time_other: '{{count}} times',
  1869. second_one: '{{count}} second',
  1870. second_other: '{{count}} seconds',
  1871. nSeconds: '{{count}} seconds',
  1872. increaseForWeakWifi: 'Increase for printers with weak WiFi',
  1873. // Home Assistant
  1874. homeAssistant: 'Home Assistant',
  1875. homeAssistantFullDescription: 'Connect to Home Assistant to control smart plugs via HA\'s REST API. Supports switch, light, input_boolean, and script entities.',
  1876. homeAssistantUrl: 'Home Assistant URL',
  1877. longLivedAccessToken: 'Long-Lived Access Token',
  1878. haTokenHint: 'Create a token in HA: Profile → Long-Lived Access Tokens → Create Token',
  1879. connectionSuccessful: 'Connection Successful',
  1880. connectionFailed: 'Connection Failed',
  1881. haConnectionSuccess: 'Successfully connected to Home Assistant.',
  1882. haConnectionFailed: 'Failed to connect to Home Assistant.',
  1883. // MQTT
  1884. mqttPublishing: 'MQTT Publishing',
  1885. mqttDescription: 'Publish BamBuddy events to an external MQTT broker for integration with Node-RED, Home Assistant, and other automation systems.',
  1886. mqttEnableDescription: 'Publish events to external MQTT broker',
  1887. brokerHostname: 'Broker hostname',
  1888. port: 'Port',
  1889. usernameOptional: 'Username (optional)',
  1890. passwordOptional: 'Password (optional)',
  1891. topicPrefix: 'Topic prefix',
  1892. topicPrefixHint: 'Topics will be: {{prefix}}/printers/<serial>/status, etc.',
  1893. // Prometheus
  1894. prometheusMetrics: 'Prometheus Metrics',
  1895. prometheusEndpointDescription: 'Expose printer metrics at <code>/api/v1/metrics</code> for Prometheus/Grafana monitoring.',
  1896. bearerTokenOptional: 'Bearer Token (optional)',
  1897. bearerTokenHint: 'If set, requests must include <code>Authorization: Bearer <token></code>',
  1898. metricsConnectionStatus: 'Connection status',
  1899. metricsPrinterState: 'Printer state (idle/printing/etc)',
  1900. metricsPrintProgress: 'Print progress 0-100%',
  1901. metricsBedTemp: 'Bed temperature',
  1902. metricsNozzleTemp: 'Nozzle temperature',
  1903. metricsPrintsTotal: 'Total prints by result',
  1904. metricsMore: '...and more (layers, fans, queue, filament usage)',
  1905. // Smart Plugs
  1906. smartPlugsDescription: 'Connect smart plugs (Tasmota or Home Assistant) to automate power control and track energy usage for your printers.',
  1907. allOn: 'All On',
  1908. allOff: 'All Off',
  1909. addSmartPlug: 'Add Smart Plug',
  1910. energySummary: 'Energy Summary',
  1911. currentPower: 'Current Power',
  1912. plugsOnline: '{{reachable}}/{{total}} plugs online',
  1913. today: 'Today',
  1914. yesterday: 'Yesterday',
  1915. total: 'Total',
  1916. enablePlugsForSummary: 'Enable plugs to see energy summary',
  1917. addNotificationProvider: 'Add',
  1918. // Users
  1919. systemBadge: '(System)',
  1920. creating: 'Creating...',
  1921. changing: 'Changing...',
  1922. deleteUserAndItems: 'Delete user AND their items',
  1923. deleteUserKeepItems: 'Delete user, keep items (become ownerless)',
  1924. ok: 'OK',
  1925. },
  1926. // Notifications (for push notifications)
  1927. notification: {
  1928. printStarted: {
  1929. title: 'Print Started',
  1930. body: '{{printer}}: {{filename}} has started printing',
  1931. },
  1932. printCompleted: {
  1933. title: 'Print Completed',
  1934. body: '{{printer}}: {{filename}} completed successfully',
  1935. },
  1936. printFailed: {
  1937. title: 'Print Failed',
  1938. body: '{{printer}}: {{filename}} has failed',
  1939. },
  1940. printStopped: {
  1941. title: 'Print Stopped',
  1942. body: '{{printer}}: {{filename}} was stopped',
  1943. },
  1944. printProgress: {
  1945. title: 'Print Progress',
  1946. body: '{{printer}}: {{filename}} is {{percent}}% complete',
  1947. },
  1948. printerOffline: {
  1949. title: 'Printer Offline',
  1950. body: '{{printer}} is offline',
  1951. },
  1952. printerError: {
  1953. title: 'Printer Error',
  1954. body: '{{printer}}: {{error}}',
  1955. },
  1956. filamentLow: {
  1957. title: 'Low Filament',
  1958. body: '{{printer}}: Filament is running low',
  1959. },
  1960. maintenanceDue: {
  1961. title: 'Maintenance Due',
  1962. body: '{{printer}}: {{items}} need attention',
  1963. },
  1964. },
  1965. // Errors
  1966. errors: {
  1967. generic: 'Something went wrong',
  1968. networkError: 'Network error. Please check your connection.',
  1969. notFound: 'Not found',
  1970. unauthorized: 'Unauthorized',
  1971. serverError: 'Server error',
  1972. validationError: 'Please check your input',
  1973. printerConnectionFailed: 'Failed to connect to printer',
  1974. saveFailed: 'Failed to save changes',
  1975. deleteFailed: 'Failed to delete',
  1976. loadFailed: 'Failed to load data',
  1977. },
  1978. // HMS Errors modal
  1979. hmsErrors: {
  1980. title: 'Errors - {{name}}',
  1981. noErrors: 'No errors',
  1982. viewOnWiki: 'View on Bambu Lab Wiki',
  1983. clearInstructions: 'Clear errors on the printer to dismiss them here.',
  1984. clearErrors: 'Clear Errors',
  1985. clearSuccess: 'HMS errors cleared',
  1986. clearFailed: 'Failed to clear HMS errors',
  1987. },
  1988. // MQTT Debug modal
  1989. mqttDebug: {
  1990. title: 'MQTT Debug Log',
  1991. searchPlaceholder: 'Search topic or payload...',
  1992. noMessages: 'No messages logged yet',
  1993. startLoggingHint: 'Click "Start Logging" to begin capturing MQTT messages',
  1994. noMessagesMatch: 'No messages match your filter',
  1995. adjustFilterHint: 'Try adjusting your search or filter criteria',
  1996. incoming: 'Incoming',
  1997. outgoing: 'Outgoing',
  1998. loggingStopped: 'Logging stopped',
  1999. loggingActive: 'Logging active - messages will auto-refresh',
  2000. startLogging: 'Start Logging',
  2001. stopLogging: 'Stop Logging',
  2002. clearLog: 'Clear Log',
  2003. topic: 'Topic',
  2004. timestamp: 'Timestamp',
  2005. direction: 'Direction',
  2006. all: 'All',
  2007. },
  2008. // Printer File Manager modal (printer internal storage)
  2009. printerFiles: {
  2010. title: 'File Manager',
  2011. storageUsed: 'Used:',
  2012. storageFree: 'Free:',
  2013. filterPlaceholder: 'Filter files...',
  2014. deleteButton: 'Delete',
  2015. deleteFiles: 'Delete {{count}} Files',
  2016. deleteFileConfirm: 'Delete "{{name}}"? This cannot be undone.',
  2017. deleteFilesConfirm: 'Delete {{count}} selected files? This cannot be undone.',
  2018. noFiles: 'No files on printer',
  2019. loadingFiles: 'Loading files...',
  2020. failedToLoad: 'Failed to load files',
  2021. toast: {
  2022. filesDeleted: 'Deleted {{count}} file(s)',
  2023. deleteFailed: 'Delete failed: {{error}}',
  2024. },
  2025. },
  2026. // Confirmations
  2027. confirm: {
  2028. delete: 'Are you sure you want to delete this?',
  2029. unsavedChanges: 'You have unsaved changes. Are you sure you want to leave?',
  2030. clearQueue: 'Are you sure you want to clear the queue?',
  2031. },
  2032. // Login page
  2033. login: {
  2034. title: 'Bambuddy Login',
  2035. subtitle: 'Sign in to your account',
  2036. username: 'Username',
  2037. usernamePlaceholder: 'Enter your username',
  2038. usernameOrEmail: 'Username or Email',
  2039. usernameOrEmailPlaceholder: 'Username or @ Email',
  2040. password: 'Password',
  2041. passwordPlaceholder: 'Enter your password',
  2042. signIn: 'Sign in',
  2043. signingIn: 'Logging in...',
  2044. forgotPassword: 'Forgot your password?',
  2045. loginSuccess: 'Logged in successfully',
  2046. loginFailed: 'Login failed',
  2047. enterCredentials: 'Please enter username and password',
  2048. forgotPasswordTitle: 'Forgot Password',
  2049. forgotPasswordMessage: "If you've forgotten your password, please contact your system administrator to reset it.",
  2050. forgotPasswordEmailMessage: "Enter your email address and we'll send you a new password.",
  2051. emailAddress: 'Email Address',
  2052. emailPlaceholder: 'your.email@example.com',
  2053. cancel: 'Cancel',
  2054. sending: 'Sending...',
  2055. sendResetEmail: 'Send Reset Email',
  2056. howToReset: 'How to reset your password:',
  2057. resetStep1: 'Contact your Bambuddy administrator',
  2058. resetStep2: 'Ask them to reset your password in User Management',
  2059. resetStep3: 'They can set a new temporary password for you',
  2060. resetStep4: 'Log in with the new password and change it in Settings',
  2061. gotIt: 'Got it',
  2062. },
  2063. // Setup page
  2064. setup: {
  2065. title: 'Bambuddy Setup',
  2066. subtitle: 'Configure authentication for your Bambuddy instance',
  2067. enableAuth: 'Enable Authentication',
  2068. adminAccount: 'Admin Account',
  2069. 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.',
  2070. adminUsername: 'Admin Username',
  2071. adminPassword: 'Admin Password',
  2072. optionalIfAdminExists: '(optional if admin users exist)',
  2073. adminUsernamePlaceholder: 'Enter admin username (optional)',
  2074. adminPasswordPlaceholder: 'Enter admin password (optional)',
  2075. confirmPassword: 'Confirm Password',
  2076. confirmPasswordPlaceholder: 'Confirm admin password',
  2077. settingUp: 'Setting up...',
  2078. completeSetup: 'Complete Setup',
  2079. toast: {
  2080. authEnabledAdminCreated: 'Authentication enabled and admin user created',
  2081. authEnabledExistingAdmins: 'Authentication enabled using existing admin users',
  2082. setupCompleted: 'Setup completed',
  2083. enterBothCredentials: 'Please enter both admin username and password, or leave both empty to use existing admin users',
  2084. passwordsDoNotMatch: 'Passwords do not match',
  2085. passwordTooShort: 'Password must be at least 6 characters',
  2086. },
  2087. },
  2088. // Password change
  2089. changePassword: {
  2090. title: 'Change Password',
  2091. currentPassword: 'Current Password',
  2092. currentPasswordPlaceholder: 'Enter current password',
  2093. newPassword: 'New Password',
  2094. newPasswordPlaceholder: 'Enter new password (min 6 characters)',
  2095. confirmPassword: 'Confirm New Password',
  2096. confirmPasswordPlaceholder: 'Confirm new password',
  2097. passwordsDoNotMatch: 'Passwords do not match',
  2098. passwordTooShort: 'Password must be at least 6 characters',
  2099. changing: 'Changing...',
  2100. success: 'Password changed successfully',
  2101. failed: 'Failed to change password',
  2102. },
  2103. // Plate detection alert
  2104. plateAlert: {
  2105. title: 'Print Paused!',
  2106. message: 'Objects detected on build plate. The print has been automatically paused. Please clear the plate and resume the print.',
  2107. understand: 'I Understand',
  2108. },
  2109. // Camera page
  2110. camera: {
  2111. title: 'Camera View',
  2112. invalidPrinterId: 'Invalid printer ID',
  2113. live: 'Live',
  2114. snapshot: 'Snapshot',
  2115. restartStream: 'Restart stream',
  2116. refreshSnapshot: 'Refresh snapshot',
  2117. fullscreen: 'Fullscreen',
  2118. exitFullscreen: 'Exit fullscreen',
  2119. connectingToCamera: 'Connecting to camera...',
  2120. capturingSnapshot: 'Capturing snapshot...',
  2121. connectionLost: 'Connection lost',
  2122. connectionFailed: 'Camera connection failed',
  2123. reconnecting: 'Reconnecting in {{countdown}}s... (attempt {{attempt}}/{{max}})',
  2124. reconnectNow: 'Reconnect now',
  2125. cameraUnavailable: 'Camera unavailable',
  2126. cameraUnavailableDesc: 'Make sure the printer is powered on and connected.',
  2127. noCamera: 'No camera available',
  2128. retry: 'Retry',
  2129. cameraStream: 'Camera stream',
  2130. zoomOut: 'Zoom out',
  2131. zoomIn: 'Zoom in',
  2132. resetZoom: 'Reset zoom',
  2133. recording: 'Recording',
  2134. startRecording: 'Start Recording',
  2135. stopRecording: 'Stop Recording',
  2136. chamberLight: 'Toggle chamber light',
  2137. },
  2138. // Groups management
  2139. groups: {
  2140. title: 'Group Management',
  2141. subtitle: 'Manage permission groups for access control',
  2142. backToSettings: 'Back to Settings',
  2143. createGroup: 'Create Group',
  2144. noPermission: 'You do not have permission to access this page.',
  2145. system: 'System',
  2146. noDescription: 'No description',
  2147. usersCount: '{{count}} users',
  2148. permissionsCount: '{{count}} permissions',
  2149. edit: 'Edit',
  2150. delete: 'Delete',
  2151. toast: {
  2152. created: 'Group created successfully',
  2153. updated: 'Group updated successfully',
  2154. deleted: 'Group deleted successfully',
  2155. enterGroupName: 'Please enter a group name',
  2156. },
  2157. modal: {
  2158. editGroup: 'Edit Group',
  2159. createGroup: 'Create Group',
  2160. cancel: 'Cancel',
  2161. saving: 'Saving...',
  2162. creating: 'Creating...',
  2163. saveChanges: 'Save Changes',
  2164. },
  2165. form: {
  2166. groupName: 'Group Name',
  2167. groupNamePlaceholder: 'Enter group name',
  2168. systemGroupWarning: 'System group names cannot be changed',
  2169. description: 'Description',
  2170. descriptionPlaceholder: 'Enter description (optional)',
  2171. permissions: 'Permissions ({{count}} selected)',
  2172. },
  2173. deleteModal: {
  2174. title: 'Delete Group',
  2175. message: 'Are you sure you want to delete this group? Users in this group will lose these permissions.',
  2176. confirm: 'Delete Group',
  2177. },
  2178. editor: {
  2179. title: 'Edit Group',
  2180. createTitle: 'Create Group',
  2181. search: 'Search permissions...',
  2182. selectAll: 'Select All',
  2183. clearAll: 'Clear All',
  2184. permissionsSelected: '{{count}} selected',
  2185. noResults: 'No permissions match your search',
  2186. },
  2187. },
  2188. // Users management
  2189. users: {
  2190. title: 'User Management',
  2191. subtitle: 'Manage users and their access to your Bambuddy instance',
  2192. backToSettings: 'Back to Settings',
  2193. createUser: 'Create User',
  2194. noPermission: 'You do not have permission to access this page.',
  2195. admin: 'Admin',
  2196. noGroups: 'No groups',
  2197. active: 'Active',
  2198. inactive: 'Inactive',
  2199. edit: 'Edit',
  2200. delete: 'Delete',
  2201. system: 'System',
  2202. noGroupsAvailable: 'No groups available',
  2203. table: {
  2204. username: 'Username',
  2205. groups: 'Groups',
  2206. status: 'Status',
  2207. actions: 'Actions',
  2208. },
  2209. toast: {
  2210. created: 'User created successfully',
  2211. updated: 'User updated successfully',
  2212. deleted: 'User deleted successfully',
  2213. fillRequired: 'Please fill in all required fields',
  2214. passwordsDoNotMatch: 'Passwords do not match',
  2215. passwordTooShort: 'Password must be at least 6 characters',
  2216. },
  2217. modal: {
  2218. createUser: 'Create User',
  2219. editUser: 'Edit User',
  2220. cancel: 'Cancel',
  2221. creating: 'Creating...',
  2222. saving: 'Saving...',
  2223. saveChanges: 'Save Changes',
  2224. advancedAuthSubtitle: 'with Advanced Authentication',
  2225. },
  2226. form: {
  2227. username: 'Username',
  2228. usernamePlaceholder: 'Enter username',
  2229. email: 'Email',
  2230. emailPlaceholder: 'user@example.com',
  2231. password: 'Password',
  2232. passwordPlaceholder: 'Enter password',
  2233. confirmPassword: 'Confirm Password',
  2234. confirmPasswordPlaceholder: 'Confirm password',
  2235. newPasswordPlaceholder: 'Enter new password',
  2236. confirmNewPasswordPlaceholder: 'Confirm new password',
  2237. leaveBlankToKeep: 'leave blank to keep current',
  2238. groups: 'Groups',
  2239. optional: 'optional',
  2240. autoGeneratedPassword: 'A secure password will be automatically generated and emailed to the user.',
  2241. passwordManagedByAdvancedAuth: 'Password is managed by Advanced Authentication. Use "Reset Password" to send a new password to the user via email.',
  2242. resetPassword: 'Reset Password',
  2243. resettingPassword: 'Resetting Password...',
  2244. },
  2245. deleteModal: {
  2246. title: 'Delete User',
  2247. message: 'Are you sure you want to delete this user? This action cannot be undone.',
  2248. confirm: 'Delete User',
  2249. },
  2250. },
  2251. // Stream overlay
  2252. streamOverlay: {
  2253. title: 'Stream Overlay',
  2254. invalidPrinterId: 'Invalid printer ID',
  2255. cameraStream: 'Camera stream',
  2256. progress: 'Progress',
  2257. eta: 'ETA',
  2258. printerIdle: 'Printer is idle',
  2259. printerOffline: 'Printer offline',
  2260. status: {
  2261. printing: 'Printing',
  2262. paused: 'Paused',
  2263. finished: 'Finished',
  2264. failed: 'Failed',
  2265. idle: 'Idle',
  2266. unknown: 'Unknown',
  2267. },
  2268. },
  2269. // Profiles
  2270. profiles: {
  2271. title: 'Profiles',
  2272. subtitle: 'Manage your slicer presets and pressure advance calibrations',
  2273. tabs: {
  2274. cloud: 'Cloud Profiles',
  2275. local: 'Local Profiles',
  2276. kprofiles: 'K-Profiles',
  2277. },
  2278. localProfiles: {
  2279. title: 'Local Profiles',
  2280. subtitle: 'Import and manage slicer presets from OrcaSlicer',
  2281. import: 'Import Profiles',
  2282. importDesc: 'Drop .bbscfg, .bbsflmt, .orca_filament, .zip, or .json files here',
  2283. importing: 'Importing...',
  2284. search: 'Search local presets...',
  2285. noPresets: 'No local presets yet',
  2286. badge: 'Local',
  2287. edit: 'Edit',
  2288. delete: 'Delete',
  2289. cancel: 'Cancel',
  2290. deleteConfirmTitle: 'Delete Preset',
  2291. deleteConfirm: 'Are you sure you want to delete this preset? This cannot be undone.',
  2292. source: 'Source',
  2293. inheritsFrom: 'Inherits',
  2294. filamentType: 'Type',
  2295. vendor: 'Vendor',
  2296. compatiblePrinters: 'Printers',
  2297. nozzleTemp: 'Nozzle Temp',
  2298. cost: 'Cost',
  2299. density: 'Density',
  2300. pressureAdvance: 'Pressure Advance',
  2301. filament: 'Filament',
  2302. process: 'Process',
  2303. printer: 'Printer',
  2304. toast: {
  2305. importSuccess: '{{count}} preset(s) imported',
  2306. importSkipped: '{{count}} preset(s) skipped (duplicates)',
  2307. importError: '{{count}} error(s) during import',
  2308. deleted: 'Preset deleted',
  2309. updated: 'Preset updated',
  2310. },
  2311. },
  2312. connectedAs: 'Connected as',
  2313. logout: 'Logout',
  2314. noLogoutPermission: 'You do not have permission to logout',
  2315. failedToLoad: 'Failed to load profiles',
  2316. retry: 'Retry',
  2317. time: {
  2318. justNow: 'Just now',
  2319. minsAgo: '{{count}}m ago',
  2320. hoursAgo: '{{count}}h ago',
  2321. daysAgo: '{{count}}d ago',
  2322. },
  2323. toast: {
  2324. loggedOut: 'Logged out',
  2325. },
  2326. login: {
  2327. title: 'Connect to Bambu Cloud',
  2328. subtitle: 'Sync your slicer presets across devices',
  2329. email: 'Email',
  2330. password: 'Password',
  2331. region: 'Region',
  2332. regionGlobal: 'Global',
  2333. regionChina: 'China',
  2334. verificationCode: 'Verification Code',
  2335. totpCode: 'Authenticator Code',
  2336. checkEmail: 'Check your email ({{email}}) for a 6-digit code',
  2337. enterTotpHint: 'Enter the 6-digit code from your authenticator app',
  2338. accessToken: 'Access Token',
  2339. accessTokenHint: 'Paste your Bambu Lab access token (from Bambu Studio)',
  2340. back: 'Back',
  2341. loginButton: 'Login',
  2342. verifyButton: 'Verify',
  2343. setTokenButton: 'Set Token',
  2344. useToken: 'Use access token instead',
  2345. useEmail: 'Login with email instead',
  2346. toast: {
  2347. loggedIn: 'Logged in successfully',
  2348. codeSent: 'Verification code sent to your email',
  2349. enterTotp: 'Enter code from your authenticator app',
  2350. tokenSet: 'Token set successfully',
  2351. },
  2352. },
  2353. presets: {
  2354. myPreset: 'My preset (editable)',
  2355. duplicate: 'Duplicate',
  2356. editable: 'Editable',
  2357. failedToLoadDetails: 'Failed to load preset details',
  2358. deleteConfirm: 'Delete this preset?',
  2359. deleteWarning: 'This will permanently delete "{{name}}" from Bambu Cloud. This cannot be undone.',
  2360. noDuplicatePermission: 'You do not have permission to duplicate presets',
  2361. noEditPermission: 'You do not have permission to edit presets',
  2362. noDeletePermission: 'You do not have permission to delete presets',
  2363. types: {
  2364. filament: 'Filament preset',
  2365. printer: 'Printer preset',
  2366. process: 'Process preset',
  2367. },
  2368. toast: {
  2369. deleted: 'Preset deleted',
  2370. created: 'Preset created',
  2371. updated: 'Preset updated',
  2372. duplicated: 'Preset duplicated',
  2373. fieldAdded: 'Field "{{key}}" added',
  2374. exported: 'Preset exported',
  2375. },
  2376. baseLabel: 'Base: {{name}}',
  2377. currentLabel: 'Current: {{name}}',
  2378. newPreset: 'New Preset',
  2379. editPreset: 'Edit Preset',
  2380. duplicatePreset: 'Duplicate Preset',
  2381. createNewPreset: 'Create New Preset',
  2382. customizeSettings: 'Customize settings for your new preset',
  2383. compareWithBase: 'Compare with base preset',
  2384. compare: 'Compare',
  2385. // CreatePresetModal - Basic Info
  2386. basePreset: 'Base Preset',
  2387. selectBasePreset: 'Select base preset...',
  2388. presetName: 'Preset Name',
  2389. myCustomPreset: 'My custom preset',
  2390. inheritsFrom: 'Inherits from',
  2391. dropJsonToImport: 'Drop JSON to import',
  2392. // CreatePresetModal - Tabs
  2393. tabs: {
  2394. common: 'Common',
  2395. allFields: 'All Fields',
  2396. },
  2397. // CreatePresetModal - All Fields Tab
  2398. availableFields: 'Available Fields',
  2399. searchFieldsPlaceholder: 'Search fields...',
  2400. noMatchingFields: 'No matching fields',
  2401. allFieldsAdded: 'All fields added',
  2402. addCustomField: 'Add custom field',
  2403. yourOverrides: 'Your Overrides',
  2404. noOverridesYet: 'No overrides yet',
  2405. clickFieldsToAdd: 'Click fields on the left to add them',
  2406. saveAsTemplate: 'Save as template',
  2407. jsonTip: 'Tip: Drag & drop a .json file anywhere on this modal to import settings',
  2408. },
  2409. cloudView: {
  2410. searchPlaceholder: 'Search presets...',
  2411. templates: 'Templates',
  2412. refresh: 'Refresh',
  2413. newPreset: 'New Preset',
  2414. clearFilters: 'Clear filters',
  2415. // Compare mode
  2416. compareMode: 'Compare Mode',
  2417. selectAnotherPreset: 'Select another {{type}} preset',
  2418. clickTwoPresets: 'Click two presets of the same type to compare',
  2419. selectFirst: '1. Select first',
  2420. selectSecond: '2. Select second',
  2421. compareNow: 'Compare Now',
  2422. // Status row
  2423. lastSynced: 'Last synced:',
  2424. showingCount: 'Showing {{showing}} of {{total}} presets',
  2425. noPresetsFound: 'No presets found',
  2426. // Column headers
  2427. columns: {
  2428. filament: 'Filament',
  2429. process: 'Process',
  2430. printer: 'Printer',
  2431. },
  2432. noFilamentPresets: 'No filament presets',
  2433. noProcessPresets: 'No process presets',
  2434. noPrinterPresets: 'No printer presets',
  2435. // Filters
  2436. filters: {
  2437. type: 'Type',
  2438. owner: 'Owner',
  2439. printer: 'Printer',
  2440. nozzle: 'Nozzle',
  2441. filament: 'Filament',
  2442. layer: 'Layer',
  2443. all: 'All',
  2444. myPresets: 'My Presets',
  2445. builtIn: 'Built-in',
  2446. process: 'Process',
  2447. },
  2448. // Permissions
  2449. noTemplatesPermission: 'You do not have permission to manage templates',
  2450. noRefreshPermission: 'You do not have permission to refresh profiles',
  2451. noCreatePermission: 'You do not have permission to create presets',
  2452. },
  2453. templates: {
  2454. title: 'Quick Templates',
  2455. noTemplates: 'No templates yet',
  2456. createFirst: 'Create templates from the preset editor',
  2457. typeFilter: 'Type:',
  2458. deleteTitle: 'Delete Template',
  2459. deleteWarning: 'This action cannot be undone',
  2460. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  2461. namePlaceholder: 'Template name',
  2462. descriptionPlaceholder: 'Description',
  2463. settingsJson: 'Settings (JSON)',
  2464. fieldsCount: '{{count}} fields',
  2465. shownInModals: 'Shown in modals',
  2466. hiddenInModals: 'Hidden in modals',
  2467. apply: 'Apply',
  2468. toast: {
  2469. deleted: 'Template deleted',
  2470. updated: 'Template updated',
  2471. created: 'Template created',
  2472. applied: 'Template applied',
  2473. },
  2474. },
  2475. },
  2476. // Support/Debug
  2477. support: {
  2478. debugLoggingActive: 'Debug logging is active',
  2479. manageLogs: 'Manage',
  2480. collectItem7: 'Printer connectivity and firmware versions',
  2481. collectItem8: 'Integration status (Spoolman, MQTT, HA)',
  2482. collectItem9: 'Network interfaces (subnets only)',
  2483. collectItem10: 'Python package versions',
  2484. collectItem11: 'Database health checks',
  2485. collectItem12: 'Docker environment details',
  2486. },
  2487. // File manager
  2488. fileManager: {
  2489. title: 'File Manager',
  2490. subtitle: 'Organize and manage your print files',
  2491. uploadFiles: 'Upload Files',
  2492. newFolder: 'New Folder',
  2493. folderName: 'Folder Name',
  2494. folderNamePlaceholder: 'e.g., Functional Parts',
  2495. renameFile: 'Rename File',
  2496. renameFolder: 'Rename Folder',
  2497. moveFiles: 'Move {{count}} File(s)',
  2498. rootNoFolder: 'Root (No Folder)',
  2499. current: 'current',
  2500. linkFolder: 'Link Folder',
  2501. linkFolderDescription: 'Link "{{name}}" to a project or archive for quick access.',
  2502. project: 'Project',
  2503. archive: 'Archive',
  2504. noProjectsFound: 'No projects found',
  2505. noArchivesFound: 'No archives found',
  2506. unlink: 'Unlink',
  2507. link: 'Link',
  2508. dragDropFiles: 'Drag & drop files here',
  2509. dropFilesHere: 'Drop files here',
  2510. orClickToBrowse: 'or click to browse',
  2511. allFileTypesSupported: 'All file types supported. ZIP files will be extracted.',
  2512. zipFilesDetected: 'ZIP files detected',
  2513. zipExtractOptions: 'ZIP files will be extracted. Choose how to handle folder structure:',
  2514. preserveZipStructure: 'Preserve folder structure from ZIP',
  2515. createFolderFromZip: 'Create folder from ZIP filename',
  2516. stlThumbnailGeneration: 'STL thumbnail generation',
  2517. zipMayContainStl: 'ZIP files may contain STL files. Thumbnails can be generated during extraction.',
  2518. thumbnailsCanBeGenerated: 'Thumbnails can be generated for STL files. Large models may take longer to process.',
  2519. generateThumbnailsForStl: 'Generate thumbnails for STL files',
  2520. threemfDetected: '3MF files detected',
  2521. threemfExtractionInfo: 'Printer model, material, color, and print settings will be automatically extracted from 3MF files.',
  2522. willBeExtracted: 'Will be extracted',
  2523. filesExtracted: '{{count}} files extracted',
  2524. uploadComplete: 'Upload complete: {{succeeded}} succeeded',
  2525. uploadFailed: 'Upload failed',
  2526. zipFilesFailed: '{{count}} files failed',
  2527. uploading: 'Uploading...',
  2528. changeLink: 'Change Link...',
  2529. linkTo: 'Link to...',
  2530. linkToProjectOrArchive: 'Link to project or archive',
  2531. addToQueue: 'Add to Queue',
  2532. schedulePrint: 'Schedule',
  2533. generateThumbnail: 'Generate Thumbnail',
  2534. generateThumbnails: 'Generate Thumbnails',
  2535. generateThumbnailsForMissing: 'Generate thumbnails for STL files missing them',
  2536. gridView: 'Grid view',
  2537. listView: 'List view',
  2538. lowDiskSpaceWarning: 'Low disk space warning',
  2539. lowDiskSpaceDetails: 'Only {{free}} free of {{total}} total. Threshold is set to {{threshold}} GB in settings.',
  2540. files: 'Files',
  2541. folders: 'Folders',
  2542. size: 'Size',
  2543. free: 'Free',
  2544. allFiles: 'All Files',
  2545. wrap: 'Wrap',
  2546. enableTextWrapping: 'Enable text wrapping',
  2547. disableTextWrapping: 'Disable text wrapping',
  2548. dragToResizeTooltip: 'Drag to resize, double-click to reset',
  2549. searchFiles: 'Search files...',
  2550. allTypes: 'All types',
  2551. prints: 'Prints',
  2552. ascending: 'Ascending',
  2553. descending: 'Descending',
  2554. resultsCount: '{{showing}} of {{total}} files',
  2555. selectAll: 'Select All',
  2556. deselectAll: 'Deselect All',
  2557. selected: '{{count}} selected',
  2558. adding: 'Adding...',
  2559. loadingFiles: 'Loading files...',
  2560. folderIsEmpty: 'Folder is empty',
  2561. noFilesYet: 'No files yet',
  2562. folderEmptyDescription: 'Upload files or move files into this folder to get started.',
  2563. noFilesDescription: 'Upload files to start organizing your print-related files.',
  2564. noMatchingFiles: 'No matching files',
  2565. noMatchingFilesDescription: 'No files match your current search or filter criteria.',
  2566. clearFilters: 'Clear filters',
  2567. printedCount: 'Printed {{count}}x',
  2568. uploadedBy: 'Uploaded By',
  2569. deleteFolder: 'Delete Folder',
  2570. deleteFile: 'Delete File',
  2571. deleteFilesCount: 'Delete {{count}} Files',
  2572. deleteFolderConfirm: 'Are you sure you want to delete this folder? All files inside will also be deleted.',
  2573. deleteFileConfirm: 'Are you sure you want to delete this file?',
  2574. deleteFilesConfirm: 'Are you sure you want to delete {{count}} selected files? This action cannot be undone.',
  2575. deleting: 'Deleting...',
  2576. noPermissionRenameFolder: 'You do not have permission to rename folders',
  2577. noPermissionLinkFolder: 'You do not have permission to link folders',
  2578. noPermissionDeleteFolder: 'You do not have permission to delete folders',
  2579. noPermissionPrint: 'You do not have permission to print',
  2580. noPermissionAddToQueue: 'You do not have permission to add to queue',
  2581. noPermissionDownload: 'You do not have permission to download files',
  2582. noPermissionRenameFile: 'You do not have permission to rename this file',
  2583. noPermissionGenerateThumbnail: 'You do not have permission to generate thumbnails',
  2584. noPermissionDeleteFile: 'You do not have permission to delete this file',
  2585. noPermissionCreateFolder: 'You do not have permission to create folders',
  2586. noPermissionUpload: 'You do not have permission to upload files',
  2587. noPermissionMoveFiles: 'You do not have permission to move files',
  2588. noPermissionDeleteFiles: 'You do not have permission to delete files',
  2589. // External folder
  2590. linkExternal: 'Link External',
  2591. linkExternalFolder: 'Link External Folder',
  2592. linkExternalFolderDescription: 'Mount a host directory (NAS, USB, network share) into the File Manager. Files are not copied — they are accessed directly from the original path.',
  2593. externalFolderNamePlaceholder: 'e.g., NAS Prints',
  2594. externalPath: 'Host Path',
  2595. externalPathHelp: 'Absolute path to the directory on the Docker host. Must be bind-mounted into the container.',
  2596. readOnly: 'Read Only',
  2597. readOnlyHelp: 'prevents uploads and deletions',
  2598. showHiddenFiles: 'Show hidden files (dotfiles)',
  2599. externalFolder: 'External Folder',
  2600. scanFolder: 'Scan',
  2601. toast: {
  2602. folderCreated: 'Folder created',
  2603. folderDeleted: 'Folder deleted',
  2604. fileDeleted: 'File deleted',
  2605. filesDeleted: 'Deleted {{count}} files',
  2606. filesMoved: 'Files moved',
  2607. folderLinked: 'Folder linked',
  2608. folderUnlinked: 'Folder unlinked',
  2609. externalFolderLinked: 'External folder linked and scanned',
  2610. folderScanned: 'Scan complete: {{added}} added, {{removed}} removed',
  2611. addedToQueue: 'Added {{count}} file(s) to queue',
  2612. addedToQueuePartial: 'Added {{added}} file(s), {{failed}} failed',
  2613. failedToAddToQueue: 'Failed to add files: {{error}}',
  2614. fileRenamed: 'File renamed',
  2615. folderRenamed: 'Folder renamed',
  2616. thumbnailsGenerated: 'Generated {{count}} thumbnail(s)',
  2617. thumbnailsGeneratedPartial: 'Generated {{succeeded}} thumbnail(s), {{failed}} failed',
  2618. noStlMissingThumbnails: 'No STL files missing thumbnails',
  2619. failedToGenerateThumbnails: 'Failed to generate thumbnails: {{error}}',
  2620. thumbnailGenerated: 'Thumbnail generated',
  2621. failedToGenerateThumbnail: 'Failed to generate thumbnail: {{error}}',
  2622. },
  2623. },
  2624. // Projects
  2625. projects: {
  2626. title: 'Projects',
  2627. subtitle: 'Organize and track your 3D printing projects',
  2628. newProject: 'New Project',
  2629. editProject: 'Edit Project',
  2630. deleteProject: 'Delete Project',
  2631. projectName: 'Project Name',
  2632. description: 'Description',
  2633. noProjects: 'No projects yet',
  2634. noProjectsFiltered: 'No {{status}} projects',
  2635. noProjectsFilteredHelp: "You don't have any {{status}} projects. Projects will appear here when their status changes.",
  2636. createFirst: 'Create your first project to start organizing related prints, tracking progress, and managing your builds.',
  2637. createFirstButton: 'Create Your First Project',
  2638. create: 'Create',
  2639. files: 'Files',
  2640. prints: 'Prints',
  2641. plates: 'plates',
  2642. parts: 'parts',
  2643. lastModified: 'Last Modified',
  2644. deleteConfirm: 'Are you sure you want to delete this project? Archives and queue items will be unlinked but not deleted.',
  2645. addFiles: 'Add Files',
  2646. removeFile: 'Remove File',
  2647. viewDetails: 'View Details',
  2648. // Modal fields
  2649. namePlaceholder: 'e.g., Voron 2.4 Build',
  2650. descriptionPlaceholder: 'Optional description...',
  2651. color: 'Color',
  2652. targetPlates: 'Target Plates',
  2653. targetPlatesPlaceholder: 'e.g., 25',
  2654. targetPlatesHelp: 'Number of print jobs',
  2655. targetParts: 'Target Parts',
  2656. targetPartsPlaceholder: 'e.g., 150',
  2657. targetPartsHelp: 'Total objects needed',
  2658. tagsLabel: 'Tags (comma-separated)',
  2659. tagsPlaceholder: 'e.g., voron, functional, gift',
  2660. dueDate: 'Due Date',
  2661. priority: 'Priority',
  2662. priorityLow: 'Low',
  2663. priorityNormal: 'Normal',
  2664. priorityHigh: 'High',
  2665. priorityUrgent: 'Urgent',
  2666. // Status
  2667. statusActive: 'Active',
  2668. statusCompleted: 'Completed',
  2669. statusArchived: 'Archived',
  2670. done: 'Done',
  2671. completed: 'completed',
  2672. failed: 'failed',
  2673. inQueue: 'in queue',
  2674. noPrintsYet: 'No prints yet',
  2675. // Footer stats
  2676. printJobs: 'Print jobs (plates)',
  2677. partsPrinted: 'Parts printed',
  2678. failedParts: 'Failed parts',
  2679. // Actions
  2680. import: 'Import',
  2681. export: 'Export',
  2682. importProject: 'Import project',
  2683. exportAll: 'Export all projects',
  2684. loading: 'Loading projects...',
  2685. // Permissions
  2686. noEditPermission: 'You do not have permission to edit projects',
  2687. noDeletePermission: 'You do not have permission to delete projects',
  2688. noCreatePermission: 'You do not have permission to create projects',
  2689. noImportPermission: 'You do not have permission to import projects',
  2690. noExportPermission: 'You do not have permission to export projects',
  2691. // Toast
  2692. toast: {
  2693. created: 'Project created',
  2694. updated: 'Project updated',
  2695. deleted: 'Project deleted',
  2696. imported: 'Project imported',
  2697. multipleImported: '{{count}} projects imported',
  2698. importFailed: 'Import failed',
  2699. exported: 'Projects exported (metadata only)',
  2700. },
  2701. },
  2702. // Project detail page
  2703. projectDetail: {
  2704. notFound: 'Project not found',
  2705. backToProjects: 'Back to Projects',
  2706. export: 'Export',
  2707. exportProject: 'Export project',
  2708. noExportPermission: 'You do not have permission to export projects',
  2709. noEditPermission: 'You do not have permission to edit projects',
  2710. partOf: 'Part of:',
  2711. priorityLabel: 'Priority:',
  2712. noPrints: 'No prints in this project yet',
  2713. status: {
  2714. active: 'Active',
  2715. completed: 'Completed',
  2716. archived: 'Archived',
  2717. },
  2718. priority: {
  2719. low: 'Low',
  2720. normal: 'Normal',
  2721. high: 'High',
  2722. urgent: 'Urgent',
  2723. },
  2724. dueDate: {
  2725. overdue: 'Overdue',
  2726. today: 'Due today',
  2727. daysLeft: '{{count}} days left',
  2728. },
  2729. progress: {
  2730. platesProgress: 'Plates Progress',
  2731. partsProgress: 'Parts Progress',
  2732. printJobs: 'print jobs',
  2733. parts: 'parts',
  2734. percentComplete: '{{percent}}% complete',
  2735. remaining: '{{count}} remaining',
  2736. },
  2737. stats: {
  2738. printJobs: 'Print Jobs',
  2739. total: 'total',
  2740. failed: '{{count}} failed',
  2741. partsPrinted: '{{count}} parts printed',
  2742. printTime: 'Print Time',
  2743. filamentUsed: 'Filament Used',
  2744. },
  2745. cost: {
  2746. title: 'Cost Tracking',
  2747. filamentCost: 'Filament Cost',
  2748. energy: 'Energy',
  2749. totalCost: 'Total Cost',
  2750. total: 'Total',
  2751. includesBom: 'incl. BOM',
  2752. budget: 'Budget',
  2753. remaining: 'Remaining',
  2754. },
  2755. subProjects: {
  2756. title: 'Sub-projects ({{count}})',
  2757. },
  2758. notes: {
  2759. title: 'Notes',
  2760. noEditPermission: 'You do not have permission to edit notes',
  2761. placeholder: 'Add notes about this project...',
  2762. empty: 'No notes yet. Click Edit to add notes.',
  2763. },
  2764. files: {
  2765. title: 'Files',
  2766. linkFolders: 'Link folders from the File Manager',
  2767. forQuickAccess: 'to this project for quick access.',
  2768. fileCount: '{{count}} file(s)',
  2769. empty: 'No folders linked. Go to File Manager and link a folder to this project.',
  2770. },
  2771. bom: {
  2772. title: 'Bill of Materials',
  2773. acquired: '{{completed}}/{{total}} acquired',
  2774. showAll: 'Show all',
  2775. hideDone: 'Hide done',
  2776. addPart: 'Add Part',
  2777. noAddPermission: 'You do not have permission to add parts',
  2778. partNamePlaceholder: 'Part name (e.g., M3x8 screws)',
  2779. partName: 'Part name',
  2780. qty: 'Qty',
  2781. price: 'Price ({{currency}})',
  2782. sourcingUrlPlaceholder: 'Sourcing URL (optional)',
  2783. remarksPlaceholder: 'Remarks (optional)',
  2784. deletePart: 'Delete Part',
  2785. deleteConfirm: 'Are you sure you want to delete "{{name}}"?',
  2786. noUpdatePermission: 'You do not have permission to update parts',
  2787. noEditPermission: 'You do not have permission to edit parts',
  2788. noDeletePermission: 'You do not have permission to delete parts',
  2789. totalCost: 'Total cost:',
  2790. empty: 'No parts in the bill of materials. Add hardware, electronics, or other components to track what needs to be sourced.',
  2791. },
  2792. timeline: {
  2793. title: 'Activity Timeline',
  2794. empty: 'No activity yet.',
  2795. },
  2796. template: {
  2797. saveAsTemplate: 'Save as Template',
  2798. noCreatePermission: 'You do not have permission to create templates',
  2799. },
  2800. queue: {
  2801. title: 'Queue',
  2802. viewAll: 'View all',
  2803. printing: '{{count}} printing',
  2804. queued: '{{count}} queued',
  2805. },
  2806. prints: {
  2807. title: 'Prints ({{count}})',
  2808. },
  2809. toast: {
  2810. projectUpdated: 'Project updated',
  2811. partAdded: 'Part added',
  2812. partRemoved: 'Part removed',
  2813. exportFailed: 'Export failed',
  2814. projectExported: 'Project exported',
  2815. templateCreated: 'Template created',
  2816. },
  2817. },
  2818. // System info
  2819. system: {
  2820. title: 'System Information',
  2821. version: 'Version',
  2822. uptime: 'Uptime',
  2823. cpuUsage: 'CPU Usage',
  2824. memoryUsage: 'Memory Usage',
  2825. diskUsage: 'Disk Usage',
  2826. networkInfo: 'Network Info',
  2827. logs: 'Logs',
  2828. debugMode: 'Debug Mode',
  2829. enableDebug: 'Enable Debug Logging',
  2830. disableDebug: 'Disable Debug Logging',
  2831. downloadLogs: 'Download Logs',
  2832. clearLogs: 'Clear Logs',
  2833. dockerInfo: 'Docker Info',
  2834. containerName: 'Container Name',
  2835. imageName: 'Image Name',
  2836. platform: 'Platform',
  2837. architecture: 'Architecture',
  2838. },
  2839. // Library (K Profiles)
  2840. library: {
  2841. title: 'Filament Library',
  2842. addFilament: 'Add Filament',
  2843. editFilament: 'Edit Filament',
  2844. deleteFilament: 'Delete Filament',
  2845. vendor: 'Vendor',
  2846. material: 'Material',
  2847. color: 'Color',
  2848. kFactor: 'K Factor',
  2849. temperature: 'Temperature',
  2850. noFilaments: 'No filaments in library',
  2851. deleteConfirm: 'Are you sure you want to delete this filament?',
  2852. importFromPrinter: 'Import from Printer',
  2853. exportToFile: 'Export to File',
  2854. },
  2855. // Spoolman
  2856. spoolman: {
  2857. title: 'Spoolman Integration',
  2858. enabled: 'Spoolman Enabled',
  2859. url: 'Spoolman URL',
  2860. connected: 'Connected',
  2861. disconnected: 'Not Connected',
  2862. testConnection: 'Test Connection',
  2863. sync: 'Sync',
  2864. syncing: 'Syncing...',
  2865. lastSync: 'Last Sync',
  2866. linkToSpoolman: 'Link to Spoolman',
  2867. openInSpoolman: 'Open in Spoolman',
  2868. unlinkSpool: 'Unlink Spool',
  2869. unlinkConfirmTitle: 'Unlink Spool?',
  2870. unlinkConfirmMessage: 'This will disconnect the spool from Spoolman. The spool data in Spoolman will remain unchanged.',
  2871. selectSpool: 'Select Spool',
  2872. noUnlinkedSpools: 'No unlinked spools available',
  2873. linkSuccess: 'Spool linked to Spoolman successfully',
  2874. linkFailed: 'Failed to link spool',
  2875. unlinkSuccess: 'Spool unlinked from Spoolman successfully',
  2876. unlinkFailed: 'Failed to unlink spool',
  2877. spoolId: 'Spool ID',
  2878. fillSourceLabel: '(Spoolman)',
  2879. weight: 'Weight',
  2880. remaining: 'Remaining',
  2881. disableWeightSync: 'Disable AMS Estimated Weight Sync',
  2882. 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.",
  2883. reportPartialUsage: 'Report Partial Usage for Failed Prints',
  2884. reportPartialUsageDesc: 'When a print fails or is cancelled, report the estimated filament used up to that point based on layer progress.',
  2885. },
  2886. // Inventory
  2887. inventory: {
  2888. title: 'Spool Inventory',
  2889. addSpool: 'Add Spool',
  2890. editSpool: 'Edit Spool',
  2891. material: 'Material',
  2892. selectMaterial: 'Select material...',
  2893. subtype: 'Subtype',
  2894. brand: 'Brand',
  2895. searchBrand: 'Search brand...',
  2896. useCustomBrand: 'Use "{{brand}}"',
  2897. useCustomMaterial: 'Use custom material: {{material}}',
  2898. colorName: 'Color Name',
  2899. colorNamePlaceholder: 'Jade White, Fire Red...',
  2900. color: 'Color',
  2901. hexColor: 'Hex Color',
  2902. pickColor: 'Pick custom color',
  2903. labelWeight: 'Label Weight',
  2904. coreWeight: 'Empty Spool Weight',
  2905. searchSpoolWeight: 'Search spool weight...',
  2906. weightUsed: 'Used',
  2907. currentWeight: 'Remaining Weight',
  2908. measuredWeight: 'Measured Weight',
  2909. spoolName: 'Spool',
  2910. costPerKg: 'Cost per kg',
  2911. measuredWeightError: 'Measured weight must be between {{min}}g and {{max}}g.',
  2912. slicerFilament: 'Slicer Filament',
  2913. slicerFilamentName: 'Slicer Preset Name',
  2914. slicerPreset: 'Slicer Preset',
  2915. searchPresets: 'Search filament presets...',
  2916. selectedPreset: 'Selected',
  2917. noPresetsFound: 'No presets found',
  2918. tempOverrides: 'Temperature Overrides',
  2919. note: 'Note',
  2920. notePlaceholder: 'Any additional notes about this spool...',
  2921. archive: 'Archive',
  2922. restore: 'Restore',
  2923. noSpools: 'No spools yet. Add your first spool to get started.',
  2924. noManualSpools: 'No manually added spools available. Add a spool to your inventory first.',
  2925. kProfiles: 'K-Profiles',
  2926. addKProfile: 'Add K-Profile',
  2927. assignSpool: 'Assign Spool',
  2928. unassignSpool: 'Unassign',
  2929. assignSuccess: 'Spool assigned and AMS slot configured',
  2930. assignFailed: 'Failed to assign spool',
  2931. selectSpool: 'Select a spool to assign to this slot',
  2932. assigned: 'Assigned',
  2933. assigning: 'Assigning...',
  2934. searchSpools: 'Search spools...',
  2935. allMaterials: 'All Materials',
  2936. filterByBrand: 'Filter by brand...',
  2937. showArchived: 'Show archived',
  2938. quickAdd: 'Quick Add (Stock)',
  2939. quantity: 'Quantity',
  2940. stock: 'Stock',
  2941. configured: 'Configured',
  2942. spoolsCreated: '{{count}} spools created',
  2943. spoolCreated: 'Spool created',
  2944. spoolUpdated: 'Spool updated',
  2945. spoolDeleted: 'Spool deleted',
  2946. spoolArchived: 'Spool archived',
  2947. spoolRestored: 'Spool restored',
  2948. deleteConfirm: 'Are you sure you want to delete this spool? This cannot be undone.',
  2949. archiveConfirm: 'Are you sure you want to archive this spool?',
  2950. advancedSettings: 'Advanced Settings',
  2951. // Tabs
  2952. filamentInfoTab: 'Filament Info',
  2953. paProfileTab: 'PA Profile',
  2954. filamentInfo: 'Filament',
  2955. additional: 'Additional',
  2956. // Cloud
  2957. loadingPresets: 'Loading cloud presets...',
  2958. cloudConnected: 'Cloud connected',
  2959. cloudNotConnected: 'Cloud not connected (using defaults)',
  2960. // Colors
  2961. recentColors: 'Recent',
  2962. searchColors: 'Search colors...',
  2963. searchResults: 'Search results',
  2964. allColors: 'All colors',
  2965. commonColors: 'Common colors',
  2966. showLess: 'Show less',
  2967. showAll: 'Show all',
  2968. noColorsFound: 'No colors match your search',
  2969. noResults: 'No matches found',
  2970. // PA Profiles
  2971. selectMaterialFirst: 'Please select a material first in the Filament Info tab.',
  2972. noPrintersConfigured: 'No printers configured. Add printers to use PA profiles.',
  2973. matchingFilter: 'Matching',
  2974. anyBrand: 'Any brand',
  2975. anyVariant: 'Any variant',
  2976. autoSelect: 'Auto-select',
  2977. matches: 'matches',
  2978. match: 'match',
  2979. noMatches: 'No matches',
  2980. connected: 'Connected',
  2981. offline: 'Offline',
  2982. printerOffline: 'Printer is offline. Connect to view calibration profiles.',
  2983. noKProfilesMatch: 'No K-profiles match the selected filament.',
  2984. leftNozzle: 'Left Nozzle',
  2985. rightNozzle: 'Right Nozzle',
  2986. profilesSelected: 'calibration profile(s) selected',
  2987. // Stats & enhanced table
  2988. totalInventory: 'Total Inventory',
  2989. totalConsumed: 'Total Consumed',
  2990. byMaterial: 'By Material',
  2991. inPrinter: 'In Printer',
  2992. lowStock: 'Low Stock',
  2993. sinceTracking: 'Since tracking started',
  2994. loadedInAms: 'Loaded in AMS/Ext',
  2995. remaining: 'Remaining',
  2996. weightCheck: 'Weight Check',
  2997. lastWeighed: 'Last weighed',
  2998. neverWeighed: 'Never weighed',
  2999. search: 'Search spools...',
  3000. showing: 'Showing',
  3001. to: 'to',
  3002. of: 'of',
  3003. show: 'Show',
  3004. spools: 'spools',
  3005. spool: 'spool',
  3006. page: 'Page',
  3007. noSpoolsMatch: 'No results found',
  3008. noSpoolsMatchDesc: 'Try adjusting your search or filters to find what you\'re looking for.',
  3009. active: 'Active',
  3010. archived: 'Archived',
  3011. all: 'All',
  3012. used: 'Used',
  3013. new: 'New',
  3014. clearFilters: 'Clear filters',
  3015. table: 'Table',
  3016. cards: 'Cards',
  3017. net: 'Net',
  3018. // Grouping
  3019. groupSimilar: 'Group',
  3020. groupedSpools: '{{count}} identical spools',
  3021. groupedRows: 'rows',
  3022. // Column config
  3023. columns: 'Columns',
  3024. configureColumns: 'Configure Columns',
  3025. configureColumnsDesc: 'Drag to reorder columns or use arrows. Toggle visibility with the eye icon.',
  3026. visible: 'visible',
  3027. reset: 'Reset',
  3028. cancel: 'Cancel',
  3029. applyChanges: 'Apply Changes',
  3030. moveUp: 'Move up',
  3031. moveDown: 'Move down',
  3032. hideColumn: 'Hide column',
  3033. showColumn: 'Show column',
  3034. // Tag linking
  3035. linkToSpool: 'Link to Spool',
  3036. tagLinked: 'Tag linked to spool',
  3037. tagLinkFailed: 'Failed to link tag',
  3038. tagAlreadyLinked: 'Tag already linked to another spool',
  3039. unknownTag: 'Unknown RFID tag detected',
  3040. // Usage history
  3041. usageHistory: 'Usage History',
  3042. noUsageHistory: 'No usage recorded yet',
  3043. printName: 'Print Name',
  3044. weightConsumed: 'Weight Consumed',
  3045. clearHistory: 'Clear',
  3046. historyCleared: 'Usage history cleared',
  3047. fillSourceLabel: '(Inv)',
  3048. lowStockThresholdError: 'Threshold must be between 0.1 and 99.9',
  3049. assignMismatchTitle: 'Material mismatch',
  3050. assignMismatchMessage: 'The selected spool material "{{spoolMaterial}}" does not match the tray material "{{trayMaterial}}" for {{location}}. Assign anyway?',
  3051. assignMismatchConfirm: 'Assign Anyway',
  3052. assignPartialMismatchMessage: 'The spool material "{{spoolMaterial}}" is similar to but not exactly matching "{{trayMaterial}}" in {{location}}. Do you want to proceed?',
  3053. assignProfileMismatchMessage: 'The spool profile "{{spoolProfile}}" does not match the tray profile "{{trayProfile}}" in {{location}}. Do you want to proceed?',
  3054. },
  3055. // Timelapse
  3056. timelapse: {
  3057. title: 'Timelapse',
  3058. create: 'Create Timelapse',
  3059. download: 'Download',
  3060. delete: 'Delete',
  3061. preview: 'Preview',
  3062. frameRate: 'Frame Rate',
  3063. quality: 'Quality',
  3064. processing: 'Processing...',
  3065. noTimelapses: 'No timelapses available',
  3066. },
  3067. // AMS
  3068. ams: {
  3069. title: 'AMS',
  3070. slot: 'Slot',
  3071. empty: 'Empty',
  3072. emptySlot: 'Empty slot',
  3073. unknown: 'Unknown',
  3074. humidity: 'Humidity',
  3075. temperature: 'Temperature',
  3076. filamentType: 'Filament Type',
  3077. filamentColor: 'Color',
  3078. remaining: 'Remaining',
  3079. history: 'AMS History',
  3080. noHistory: 'No history available',
  3081. configureSlot: 'Configure Slot',
  3082. externalSpool: 'External Spool',
  3083. profile: 'Profile',
  3084. kFactor: 'K Factor',
  3085. fill: 'Fill',
  3086. configure: 'Configure',
  3087. used: 'used',
  3088. remainingUnit: 'remaining',
  3089. },
  3090. // Print modal
  3091. printModal: {
  3092. title: 'Start Print',
  3093. selectPrinter: 'Select Printer',
  3094. selectPlate: 'Select Plate',
  3095. filamentMapping: 'Filament Mapping',
  3096. totalCost: 'Total cost:',
  3097. slotRemainingShort: ' - {{grams}}g left',
  3098. printSettings: 'Print Settings',
  3099. bedLeveling: 'Bed Leveling',
  3100. flowCalibration: 'Flow Calibration',
  3101. vibrationCalibration: 'Vibration Calibration',
  3102. layerInspection: 'First Layer Inspection',
  3103. timelapse: 'Timelapse',
  3104. startPrint: 'Start Print',
  3105. addToQueue: 'Add to Queue',
  3106. cancel: 'Cancel',
  3107. noPrintersAvailable: 'No printers available',
  3108. printerBusy: 'Printer is busy',
  3109. printerOffline: 'Printer is offline',
  3110. sameTypeDifferentColor: 'Same type, different color',
  3111. filamentTypeNotLoaded: 'Filament type not loaded',
  3112. openCalendar: 'Open calendar',
  3113. leftNozzle: 'L',
  3114. rightNozzle: 'R',
  3115. leftNozzleTooltip: 'Left nozzle',
  3116. rightNozzleTooltip: 'Right nozzle',
  3117. filamentOverride: 'Filament Override',
  3118. filamentOverrideHint: 'Optionally override filaments for model-based assignment. The scheduler will match against your selected filaments instead of the original 3MF values.',
  3119. originalFilament: 'Original',
  3120. overrideWith: 'Override with',
  3121. resetToOriginal: 'Reset to original',
  3122. insufficientFilamentTitle: 'Not enough filament',
  3123. insufficientFilamentMessage: 'Some assigned spools have less filament remaining than this print needs:',
  3124. insufficientFilamentLine: '{{printer}} - {{slot}}: needs {{required}}g, remaining {{remaining}}g',
  3125. printAnyway: 'Print anyway',
  3126. forceColorMatch: 'Force color match',
  3127. staggerPrinterStarts: 'Stagger printer starts',
  3128. staggerGroupSize: 'Group size',
  3129. staggerInterval: 'Interval (min)',
  3130. staggerPreview: '{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min',
  3131. staggerLastGroup: 'last group: {{count}}',
  3132. staggerTotal: 'total: {{minutes}} min',
  3133. staggerToPrinters: 'Stagger to {{count}} printers',
  3134. },
  3135. // Backup
  3136. backup: {
  3137. title: 'Backup & Restore',
  3138. createBackup: 'Create Backup',
  3139. restoreBackup: 'Restore Backup',
  3140. restoreDescription: 'Replace all data from a backup file',
  3141. downloadBackup: 'Download Backup',
  3142. uploadBackup: 'Upload Backup',
  3143. lastBackup: 'Last Backup',
  3144. autoBackup: 'Auto Backup',
  3145. backupNow: 'Backup Now',
  3146. restoreWarning: 'Warning: Restoring a backup will overwrite all current data.',
  3147. includeArchives: 'Include Archives',
  3148. includeSettings: 'Include Settings',
  3149. includeProfiles: 'Include Profiles',
  3150. backupSuccess: 'Backup created successfully',
  3151. restoreSuccess: 'Backup restored successfully',
  3152. backupFailed: 'Backup failed',
  3153. restoreFailed: 'Restore failed',
  3154. restoreNote: 'Virtual Printer will be stopped during restore',
  3155. // GitHub Backup
  3156. githubBackup: 'GitHub Backup',
  3157. enabled: 'Enabled',
  3158. cloudLoginRequired: 'Bambu Cloud login required. Sign in under Profiles → Cloud Profiles to enable GitHub backup.',
  3159. cloudLoginRequiredShort: 'Cloud login required',
  3160. githubDescription: 'Automatically sync your profiles to a private GitHub repository for backup and version history.',
  3161. repositoryUrl: 'Repository URL',
  3162. personalAccessToken: 'Personal Access Token',
  3163. tokenSaved: '(saved)',
  3164. enterNewToken: 'Enter new token to update',
  3165. tokenHint: 'Fine-grained token with Contents read/write permission',
  3166. branch: 'Branch',
  3167. manualOnly: 'Manual only',
  3168. hourly: 'Hourly',
  3169. daily: 'Daily',
  3170. weekly: 'Weekly',
  3171. includeInBackup: 'Include in backup',
  3172. kProfiles: 'K-Profiles',
  3173. kProfilesDescription: 'Pressure advance calibration from connected printers',
  3174. noPrintersConnected: 'No printers connected',
  3175. printersConnected: '{{connected}}/{{total}} connected',
  3176. cloudProfiles: 'Cloud Profiles',
  3177. cloudProfilesDescription: 'Filament, printer, and process presets from Bambu Cloud',
  3178. appSettings: 'App Settings',
  3179. appSettingsDescription: 'Bambuddy configuration (complete database)',
  3180. lastBackupAt: 'Last backup:',
  3181. noBackupsYet: 'No backups yet',
  3182. next: 'Next:',
  3183. startingBackup: 'Starting backup...',
  3184. test: 'Test',
  3185. enableBackup: 'Enable Backup',
  3186. testConnection: 'Test Connection',
  3187. enterRepoUrl: 'Enter repository URL',
  3188. enterRepoAndToken: 'Enter repository URL and access token',
  3189. repoRequired: 'Repository URL is required',
  3190. tokenRequired: 'Access token is required',
  3191. githubBackupEnabled: 'GitHub backup enabled',
  3192. tokenUpdated: 'Token updated',
  3193. settingsSaved: 'Settings saved',
  3194. failedToSave: 'Failed to save: {{message}}',
  3195. backupCompleteFiles: 'Backup complete - {{count}} files updated',
  3196. backupSkippedNoChanges: 'Backup skipped - no changes',
  3197. backupFailed2: 'Backup failed: {{message}}',
  3198. clearedLogs: 'Cleared {{count}} logs',
  3199. failedToClearLogs: 'Failed to clear logs: {{message}}',
  3200. // History
  3201. history: 'History',
  3202. clear: 'Clear',
  3203. date: 'Date',
  3204. status: 'Status',
  3205. commit: 'Commit',
  3206. // Local Backup
  3207. localBackup: 'Local Backup',
  3208. localBackupDescription: 'Create a complete backup of your Bambuddy data including the database, archives, uploads, and all files.',
  3209. downloadBackupLabel: 'Download Backup',
  3210. completeBackupZip: 'Complete backup: database + all files (ZIP)',
  3211. download: 'Download',
  3212. preparingBackup: 'Preparing backup...',
  3213. creatingArchive: 'Creating backup archive... This may take a while for large archives.',
  3214. downloadingFile: 'Downloading backup file...',
  3215. backupDownloaded: 'Backup downloaded successfully',
  3216. failedToCreateBackup: 'Failed to create backup: {{message}}',
  3217. restore: 'Restore',
  3218. restoreReplacesAll: 'Restore replaces all data.',
  3219. restoreReplacesAllDetail: 'Your current database and files will be completely replaced. A restart is required after restore.',
  3220. restoreConfirmTitle: 'Restore Backup',
  3221. restoreConfirmMessage: 'Are you sure you want to restore from "{{filename}}"? This will completely replace your current database and all files. The application will need to be restarted after restore.',
  3222. restoreConfirmButton: 'Restore Backup',
  3223. uploadingFile: 'Uploading backup file...',
  3224. backupRestoredRestart: 'Backup restored. Please restart Bambuddy.',
  3225. failedToRestore: 'Failed to restore backup. Please check the file format.',
  3226. reloadNow: 'Reload Now',
  3227. creatingBackup: 'Creating Backup',
  3228. restoringBackup: 'Restoring Backup',
  3229. preparing: 'Preparing...',
  3230. processing: 'Processing...',
  3231. doNotClosePage: 'Please do not close this page or navigate away. This operation may take several minutes for large backups.',
  3232. // RestoreModal
  3233. restoring: 'Restoring...',
  3234. restoreComplete: 'Restore Complete',
  3235. restoreFailed2: 'Restore Failed',
  3236. importSettings: 'Import settings from a backup file',
  3237. pleaseWaitRestoring: 'Please wait while your data is being restored',
  3238. selectBackupFile: 'Click to select backup file (.json or .zip)',
  3239. duplicateHandling: 'How duplicate handling works:',
  3240. matchPrinters: 'Printers',
  3241. matchPrintersBy: 'matched by serial number',
  3242. matchSmartPlugs: 'Smart Plugs',
  3243. matchSmartPlugsBy: 'matched by IP address',
  3244. matchNotificationProviders: 'Notification Providers',
  3245. matchNotificationProvidersBy: 'matched by name',
  3246. matchFilaments: 'Filaments',
  3247. matchFilamentsBy: 'matched by name + type + brand',
  3248. matchArchives: 'Archives',
  3249. matchArchivesBy: 'matched by content hash (always skipped)',
  3250. matchPendingUploads: 'Pending Uploads',
  3251. matchPendingUploadsBy: 'matched by filename',
  3252. matchSettingsTemplates: 'Settings & Templates',
  3253. matchSettingsTemplatesBy: 'always overwritten',
  3254. replaceExisting: 'Replace existing data',
  3255. keepExisting: 'Keep existing data',
  3256. overwriteDescription: 'Overwrite items that already exist with backup data',
  3257. keepDescription: "Only restore items that don't already exist",
  3258. overwriteCaution: 'Caution:',
  3259. overwriteWarning: 'Overwriting will replace your current configurations with data from the backup. Printer access codes are never overwritten for security.',
  3260. cancel: 'Cancel',
  3261. processingBackup: 'Processing backup file...',
  3262. itemsRestored: 'Items Restored',
  3263. itemsSkipped: 'Items Skipped',
  3264. restored: 'Restored',
  3265. skippedAlreadyExist: 'Skipped (already exist)',
  3266. filesCategory: 'Files (3MF, thumbnails, etc.)',
  3267. andMore: '...and {{count}} more',
  3268. newApiKeysGenerated: 'New API Keys Generated',
  3269. keysShownOnce: 'These keys are only shown once. Copy them now!',
  3270. copy: 'Copy',
  3271. noDataFound: 'No data was found to restore in the backup file.',
  3272. close: 'Close',
  3273. // Category labels
  3274. categories: {
  3275. settings: 'Settings',
  3276. notification_providers: 'Notification Providers',
  3277. notification_templates: 'Notification Templates',
  3278. smart_plugs: 'Smart Plugs',
  3279. printers: 'Printers',
  3280. filaments: 'Filaments',
  3281. maintenance_types: 'Maintenance Types',
  3282. archives: 'Archives',
  3283. projects: 'Projects',
  3284. pending_uploads: 'Pending Uploads',
  3285. external_links: 'External Links',
  3286. api_keys: 'API Keys',
  3287. },
  3288. },
  3289. // Tags
  3290. tags: {
  3291. title: 'Tags',
  3292. addTag: 'Add Tag',
  3293. editTag: 'Edit Tag',
  3294. deleteTag: 'Delete Tag',
  3295. tagName: 'Tag Name',
  3296. tagColor: 'Tag Color',
  3297. noTags: 'No tags',
  3298. deleteConfirm: 'Are you sure you want to delete this tag?',
  3299. manageTags: 'Manage Tags',
  3300. },
  3301. // Upload modal (archives)
  3302. uploadModal: {
  3303. title: 'Upload 3MF Files',
  3304. dragDrop: 'Drag & drop .3mf files here',
  3305. or: 'or',
  3306. browseFiles: 'Browse Files',
  3307. extractionInfo: 'The printer model will be automatically extracted from the 3MF file metadata.',
  3308. uploaded: 'uploaded',
  3309. failed: 'failed',
  3310. uploading: 'Uploading...',
  3311. upload: 'Upload',
  3312. uploadFailed: 'Upload failed',
  3313. },
  3314. // Edit archive modal
  3315. // Edit Archive Modal
  3316. editArchive: {
  3317. title: 'Edit Archive',
  3318. name: 'Name',
  3319. namePlaceholder: 'Print name',
  3320. printer: 'Printer',
  3321. noPrinter: 'No printer',
  3322. project: 'Project',
  3323. noProject: 'No project',
  3324. itemsPrinted: 'Items Printed',
  3325. itemsPrintedHelp: 'Number of items produced in this print job',
  3326. notes: 'Notes',
  3327. notesPlaceholder: 'Add notes about this print...',
  3328. externalLink: 'External Link',
  3329. externalLinkPlaceholder: 'https://printables.com/model/...',
  3330. externalLinkHelp: 'Link to Printables, Thingiverse, or other source',
  3331. tags: 'Tags',
  3332. tagsPlaceholder: 'Add tags...',
  3333. addMoreTags: 'Add more tags...',
  3334. matchingTags: 'Matching "{{query}}"',
  3335. existingTags: 'Existing tags',
  3336. clickToAdd: '(click to add)',
  3337. status: 'Status',
  3338. failureReason: 'Failure Reason',
  3339. selectReason: 'Select reason...',
  3340. photos: 'Photos of Printed Result',
  3341. photosHelp: 'Click + to add photos of your printed result',
  3342. printResult: 'Print result',
  3343. saving: 'Saving...',
  3344. // Failure reasons
  3345. failureReasons: {
  3346. adhesionFailure: 'Adhesion failure',
  3347. spaghettiDetached: 'Spaghetti / Detached',
  3348. layerShift: 'Layer shift',
  3349. cloggedNozzle: 'Clogged nozzle',
  3350. filamentRunout: 'Filament runout',
  3351. warping: 'Warping',
  3352. stringing: 'Stringing',
  3353. underExtrusion: 'Under-extrusion',
  3354. powerFailure: 'Power failure',
  3355. userCancelled: 'User cancelled',
  3356. other: 'Other',
  3357. },
  3358. // Archive statuses
  3359. statuses: {
  3360. completed: 'Completed',
  3361. failed: 'Failed',
  3362. aborted: 'Cancelled',
  3363. printing: 'Printing',
  3364. },
  3365. },
  3366. // K-Profiles
  3367. kProfiles: {
  3368. title: 'K-Profiles',
  3369. noPrintersConfigured: 'No Printers Configured',
  3370. addPrinterInSettings: 'Add a printer in Settings to manage K-profiles',
  3371. noActivePrinters: 'No Active Printers',
  3372. enablePrinterConnection: 'Enable a printer connection to view its K-profiles',
  3373. loadingProfiles: 'Loading K-Profiles...',
  3374. printerOffline: 'Printer Offline',
  3375. printerOfflineDesc: 'The selected printer is not connected. Power it on to view K-profiles.',
  3376. noMatchingProfiles: 'No Matching Profiles',
  3377. noMatchingProfilesDesc: 'No profiles match your search criteria',
  3378. noKProfiles: 'No K-Profiles',
  3379. noKProfilesDesc: 'No pressure advance profiles found for {{diameter}}mm nozzle',
  3380. createFirstProfile: 'Create First Profile',
  3381. // Controls
  3382. printer: 'Printer',
  3383. nozzle: 'Nozzle',
  3384. refresh: 'Refresh',
  3385. addProfile: 'Add Profile',
  3386. export: 'Export',
  3387. import: 'Import',
  3388. select: 'Select',
  3389. selectAll: 'Select All',
  3390. delete: 'Delete',
  3391. // Filters
  3392. searchPlaceholder: 'Search by name or filament...',
  3393. allExtruders: 'All Extruders',
  3394. leftOnly: 'Left Only',
  3395. rightOnly: 'Right Only',
  3396. allFlow: 'All Flow',
  3397. hfOnly: 'HF Only',
  3398. sOnly: 'S Only',
  3399. sortName: 'Sort: Name',
  3400. sortKValue: 'Sort: K-Value',
  3401. sortFilament: 'Sort: Filament',
  3402. // Dual extruder labels
  3403. leftExtruder: 'Left Extruder',
  3404. rightExtruder: 'Right Extruder',
  3405. // Modal
  3406. modal: {
  3407. addTitle: 'Add K-Profile',
  3408. editTitle: 'Edit K-Profile',
  3409. profileName: 'Profile Name',
  3410. profileNamePlaceholder: 'My PLA Profile',
  3411. kValue: 'K-Value',
  3412. kValuePlaceholder: '0.020',
  3413. kValueHelp: 'Typical range: 0.01 - 0.06 for PLA, 0.02 - 0.10 for PETG',
  3414. filament: 'Filament',
  3415. selectFilament: 'Select filament...',
  3416. noFilamentsHelp: 'No filaments found. Create a K-profile in Bambu Studio first.',
  3417. flowType: 'Flow Type',
  3418. highFlow: 'High Flow',
  3419. standard: 'Standard',
  3420. nozzleSize: 'Nozzle Size',
  3421. extruder: 'Extruder',
  3422. extruders: 'Extruders',
  3423. left: 'Left',
  3424. right: 'Right',
  3425. notes: 'Notes (stored locally)',
  3426. notesPlaceholder: 'Add notes about this profile...',
  3427. notesHelp: 'Notes are saved in Bambuddy, not on the printer',
  3428. syncing: 'Syncing with printer...',
  3429. savingExtruder: 'Saving to extruder {{current}}/{{total}}...',
  3430. pleaseWait: 'Please wait',
  3431. },
  3432. // Delete confirmation
  3433. deleteConfirm: {
  3434. title: 'Delete Profile',
  3435. cannotUndo: 'This cannot be undone',
  3436. message: 'Are you sure you want to delete "{{name}}" from the printer?',
  3437. },
  3438. // Bulk delete
  3439. bulkDelete: {
  3440. title: 'Delete Profiles',
  3441. cannotUndo: 'This cannot be undone',
  3442. message: 'Are you sure you want to delete {{count}} selected profiles from the printer?',
  3443. },
  3444. // Toast
  3445. toast: {
  3446. profileSaved: 'K-profile saved',
  3447. profilesSaved: 'K-profile saved to {{count}} extruders',
  3448. selectAtLeastOneExtruder: 'Please select at least one extruder',
  3449. profileDeleted: 'K-profile deleted',
  3450. profilesDeleted: 'Deleted {{count}} profiles',
  3451. exportedProfiles: 'Exported {{count}} profiles',
  3452. importedProfiles: 'Imported {{count}} of {{total}} profiles',
  3453. noProfilesToExport: 'No profiles to export',
  3454. invalidFileFormat: 'Invalid file format',
  3455. failedToParseImport: 'Failed to parse import file',
  3456. failedToSaveBatch: 'Failed to save K-profiles',
  3457. noteSaved: 'Note saved',
  3458. failedToSaveNote: 'Failed to save note',
  3459. },
  3460. // Permissions
  3461. permission: {
  3462. noRead: 'You do not have permission to refresh profiles',
  3463. noCreate: 'You do not have permission to add profiles',
  3464. noUpdate: 'You do not have permission to update K-profiles',
  3465. noDelete: 'You do not have permission to delete K-profiles',
  3466. noExport: 'You do not have permission to export profiles',
  3467. noImport: 'You do not have permission to import profiles',
  3468. },
  3469. },
  3470. // Virtual Printer
  3471. virtualPrinter: {
  3472. title: 'Virtual Printer',
  3473. running: 'Running',
  3474. stopped: 'Stopped',
  3475. description: {
  3476. default: 'Enable a virtual printer that appears in Bambu Studio and OrcaSlicer. Files sent to this printer will be archived directly without printing.',
  3477. proxy: 'Enable a proxy that relays slicer traffic to a real printer, allowing remote printing over any network.',
  3478. },
  3479. enable: {
  3480. title: 'Enable Virtual Printer',
  3481. visibleInSlicer: 'Visible as "Bambuddy" in slicer discovery',
  3482. proxyingTo: 'Proxying to {{name}}',
  3483. notActive: 'Not active',
  3484. },
  3485. model: {
  3486. title: 'Printer Model',
  3487. description: 'Select which printer model to emulate.',
  3488. restartWarning: 'Changing the model will restart the virtual printer',
  3489. },
  3490. accessCode: {
  3491. title: 'Access Code',
  3492. isSet: 'Access code is set',
  3493. notSet: 'No access code set - required to enable',
  3494. placeholder: 'Enter 8-char code',
  3495. placeholderChange: 'Enter new code to change',
  3496. hint: 'Must be exactly 8 characters. Used by slicers to authenticate.',
  3497. charCount: '({{count}}/8)',
  3498. },
  3499. targetPrinter: {
  3500. title: 'Target Printer',
  3501. configured: 'Proxy target configured',
  3502. notConfigured: 'No target printer selected - required for proxy mode',
  3503. placeholder: 'Select a printer...',
  3504. hint: 'Select the printer to proxy slicer traffic to. The printer must be in LAN mode.',
  3505. noPrinters: 'No printers configured. Add a printer first to use proxy mode.',
  3506. },
  3507. remoteInterface: {
  3508. title: 'Network Interface Override',
  3509. configured: 'Interface override active',
  3510. optional: 'Optional - use if auto-detected IP is wrong (e.g. multiple NICs, Docker, VPN)',
  3511. placeholder: 'Auto-detect (default)...',
  3512. hint: 'Override the IP address advertised via SSDP and used in the TLS certificate. Useful when Bambuddy has multiple network interfaces.',
  3513. },
  3514. mode: {
  3515. title: 'Mode',
  3516. archive: 'Archive',
  3517. archiveDesc: 'Archive files immediately',
  3518. review: 'Review',
  3519. reviewDesc: 'Review before archiving',
  3520. queue: 'Queue',
  3521. queueDesc: 'Archive and add to queue',
  3522. proxy: 'Proxy',
  3523. proxyDesc: 'Relay to real printer',
  3524. },
  3525. autoDispatch: {
  3526. title: 'Auto-dispatch',
  3527. description: 'Automatically start prints when added to queue. When off, prints wait for manual dispatch.',
  3528. },
  3529. setupRequired: {
  3530. title: 'Setup Required',
  3531. description: 'The virtual printer feature requires additional system configuration before it will work. This includes port forwarding, firewall rules, and platform-specific settings.',
  3532. readGuide: 'Read the setup guide before enabling',
  3533. },
  3534. howItWorks: {
  3535. title: 'How it works',
  3536. step1: 'On the same LAN, virtual printers appear in your slicer (Bambu Studio / OrcaSlicer) automatically via discovery. From other networks, add them manually by IP address and access code.',
  3537. step2: 'In Archive, Review, and Queue modes, use the "Send" button in your slicer to upload 3MF files to Bambuddy. The slicer will show "Print success" — the file is stored, not printed.',
  3538. step3: 'In Proxy mode, the virtual printer relays all traffic to a real printer — prints start immediately as if connected directly.',
  3539. },
  3540. status: {
  3541. title: 'Status Details',
  3542. printerName: 'Printer Name',
  3543. model: 'Model',
  3544. serialNumber: 'Serial Number',
  3545. mode: 'Mode',
  3546. pendingFiles: 'Pending Files',
  3547. targetPrinter: 'Target Printer',
  3548. ftpPort: 'FTP Port',
  3549. mqttPort: 'MQTT Port',
  3550. ftpConnections: 'FTP Connections',
  3551. mqttConnections: 'MQTT Connections',
  3552. },
  3553. toast: {
  3554. updated: 'Virtual printer settings updated',
  3555. failedToUpdate: 'Failed to update settings',
  3556. accessCodeRequired: 'Please set an access code first',
  3557. targetPrinterRequired: 'Please select a target printer first',
  3558. bindIpRequired: 'Please set a bind IP first',
  3559. accessCodeEmpty: 'Access code cannot be empty',
  3560. accessCodeLength: 'Access code must be exactly 8 characters',
  3561. created: 'Virtual printer created',
  3562. failedToCreate: 'Failed to create virtual printer',
  3563. deleted: 'Virtual printer deleted',
  3564. failedToDelete: 'Failed to delete virtual printer',
  3565. },
  3566. list: {
  3567. title: 'Virtual Printers',
  3568. add: 'Add',
  3569. addFirst: 'Add Virtual Printer',
  3570. empty: 'No virtual printers configured. Add one to get started.',
  3571. },
  3572. bindIp: {
  3573. title: 'Bind Interface',
  3574. placeholder: 'Select interface...',
  3575. hint: 'Network interface for this virtual printer to bind to. Must be unique per printer.',
  3576. },
  3577. proxy: {
  3578. accessCodeHint: 'In proxy mode, use your target printer\'s access code in the slicer. The connection is forwarded transparently to the real printer.',
  3579. },
  3580. addDialog: {
  3581. title: 'Add Virtual Printer',
  3582. name: 'Name',
  3583. hint: 'You can configure access code, target printer, and other settings after creating.',
  3584. create: 'Create',
  3585. },
  3586. deleteConfirm: {
  3587. title: 'Delete Virtual Printer',
  3588. message: 'Are you sure you want to delete "{{name}}"? This will stop all services for this printer.',
  3589. },
  3590. },
  3591. // Model Viewer
  3592. modelViewer: {
  3593. openInSlicer: 'Open in Slicer',
  3594. tabs: {
  3595. model: '3D Model',
  3596. gcode: 'G-code Preview',
  3597. },
  3598. notAvailable: 'not available',
  3599. notSliced: 'not sliced',
  3600. plates: 'Plates',
  3601. allPlates: 'All Plates',
  3602. plateNumber: 'Plate {{number}}',
  3603. plateCount: '{{count}} plate',
  3604. plateCount_other: '{{count}} plates',
  3605. objectCount: '{{count}} object',
  3606. objectCount_other: '{{count}} objects',
  3607. filamentCount: '{{count}} filament',
  3608. filamentCount_other: '{{count}} filaments',
  3609. eta: 'ETA {{minutes}} min',
  3610. noPreview: 'No preview available for this file',
  3611. pagination: {
  3612. pageOf: 'Page {{current}} of {{total}}',
  3613. prev: 'Prev',
  3614. next: 'Next',
  3615. },
  3616. errors: {
  3617. failedToLoad: 'Failed to load file',
  3618. noMeshes: 'No meshes found in 3MF file',
  3619. unsupportedFormat: 'Unsupported file format',
  3620. },
  3621. },
  3622. // Maintenance type descriptions (built-in)
  3623. maintenanceDescriptions: {
  3624. lubricateCarbonRods: 'Apply lubricant to carbon rods for smooth motion',
  3625. lubricateRails: 'Apply lubricant to linear rails for smooth motion',
  3626. cleanNozzle: 'Clean hotend and nozzle to prevent clogs',
  3627. checkBelts: 'Verify belt tension for accurate prints',
  3628. cleanBuildPlate: 'Clean build plate for better adhesion',
  3629. checkExtruder: 'Inspect extruder gears for wear',
  3630. checkCooling: 'Ensure cooling fans are working properly',
  3631. generalInspection: 'General printer inspection',
  3632. cleanCarbonRods: 'Clean carbon rods to reduce friction',
  3633. lubricateSteelRods: 'Apply lubricant to steel rods for smooth motion',
  3634. cleanSteelRods: 'Clean steel rods to reduce friction',
  3635. cleanLinearRails: 'Wipe linear rails to remove dust and debris',
  3636. checkPtfeTube: 'Inspect PTFE tube for wear or damage',
  3637. replaceHepaFilter: 'Replace HEPA filter for air quality',
  3638. replaceCarbonFilter: 'Replace activated carbon filter',
  3639. lubricateLeftNozzleRail: 'Lubricate left nozzle rail (H2 series)',
  3640. },
  3641. // Smart Plugs
  3642. smartPlugs: {
  3643. offline: 'Offline',
  3644. admin: 'Admin',
  3645. openPlugAdminPage: 'Open plug admin page',
  3646. deleteSmartPlug: 'Delete Smart Plug',
  3647. turnOnSmartPlug: 'Turn On Smart Plug',
  3648. turnOffSmartPlug: 'Turn Off Smart Plug',
  3649. turnOn: 'Turn On',
  3650. turnOff: 'Turn Off',
  3651. addSmartPlug: {
  3652. scanningNetwork: 'Scanning network...',
  3653. chooseEntity: 'Choose an entity...',
  3654. connectionFailed: 'Connection failed',
  3655. searchEntities: 'Search entities...',
  3656. searchPowerSensors: 'Search power sensors...',
  3657. searchEnergySensors: 'Search energy sensors...',
  3658. placeholders: {
  3659. plugName: 'Living Room Plug',
  3660. mqttStateOnValue: 'ON, true, 1',
  3661. mqttSameAsPower: 'Same as power topic, or different',
  3662. },
  3663. },
  3664. // SmartPlugCard
  3665. linkedTo: 'Linked to:',
  3666. monitorOnly: 'Monitor Only',
  3667. alerts: 'Alerts',
  3668. scheduleOn: 'On {{time}}',
  3669. scheduleOff: 'Off {{time}}',
  3670. on: 'On',
  3671. off: 'Off',
  3672. power: 'Power',
  3673. kwhToday: 'kWh Today',
  3674. settings: 'Settings',
  3675. automationSettings: 'Automation Settings',
  3676. showInSwitchbar: 'Show in Switchbar',
  3677. quickAccessSidebar: 'Quick access from sidebar',
  3678. enabled: 'Enabled',
  3679. enableAutomation: 'Enable automation for this plug',
  3680. autoOn: 'Auto On',
  3681. autoOnDescription: 'Turn on when print starts',
  3682. autoOff: 'Auto Off',
  3683. autoOffDescription: 'Turn off when print completes (one-shot)',
  3684. autoOffPersistent: 'Keep Enabled',
  3685. autoOffPersistentDescription: 'Stay enabled between prints instead of one-shot',
  3686. turnOffDelayMode: 'Turn Off Delay Mode',
  3687. time: 'Time',
  3688. temp: 'Temp',
  3689. delayMinutes: 'Delay (minutes)',
  3690. tempThreshold: 'Temperature threshold (°C)',
  3691. tempThresholdDescription: 'Turns off when nozzle cools below this temperature',
  3692. edit: 'Edit',
  3693. deleteConfirm: 'Are you sure you want to delete "{{name}}"? This cannot be undone.',
  3694. turnOnConfirm: 'Are you sure you want to turn on "{{name}}"?',
  3695. turnOffConfirm: 'Are you sure you want to turn off "{{name}}"? This will cut power to the connected device.',
  3696. failedToTurn: 'Failed to turn {{action}} "{{name}}"',
  3697. unknown: 'Unknown',
  3698. // AddSmartPlugModal
  3699. addTitle: 'Add Smart Plug',
  3700. editTitle: 'Edit Smart Plug',
  3701. stopScanning: 'Stop Scanning',
  3702. discoverTasmota: 'Discover Tasmota Devices',
  3703. foundDevices: 'Found {{count}} device(s) - click to select:',
  3704. noDevicesFound: 'No Tasmota devices found on your network',
  3705. haNotConfigured: 'Home Assistant is not configured. Set it up in',
  3706. haSettingsPath: 'Settings → Network → Home Assistant',
  3707. selectEntity: 'Select Entity *',
  3708. ipAddress: 'IP Address *',
  3709. nameLabel: 'Name *',
  3710. username: 'Username',
  3711. password: 'Password',
  3712. authHint: "Leave empty if your Tasmota device doesn't require authentication",
  3713. linkToPrinter: 'Link to Printer',
  3714. noPrinter: 'No printer (manual control only)',
  3715. linkingDescription: 'Linking enables automatic on/off when prints start/complete',
  3716. powerAlerts: 'Power Alerts',
  3717. alertAbove: 'Alert if above (W)',
  3718. alertBelow: 'Alert if below (W)',
  3719. alertDescription: 'Get notified when power consumption crosses these thresholds. Leave empty to disable that direction.',
  3720. dailySchedule: 'Daily Schedule',
  3721. turnOnAt: 'Turn On at',
  3722. turnOffAt: 'Turn Off at',
  3723. scheduleDescription: 'Automatically turn the plug on/off at these times daily. Leave empty to skip that action.',
  3724. showOnPrinterCard: 'Show on Printer Card',
  3725. displayOnPrinterCard: 'Display button on printer card',
  3726. connectedResult: 'Connected!',
  3727. deviceLabel: 'Device: {{name}} - ',
  3728. stateLabel: 'State: {{state}}',
  3729. test: 'Test',
  3730. delete: 'Delete',
  3731. save: 'Save',
  3732. add: 'Add',
  3733. cancel: 'Cancel',
  3734. failedToStartScan: 'Failed to start scan',
  3735. nameRequired: 'Name is required',
  3736. entityRequired: 'Entity is required for Home Assistant plugs',
  3737. mqttTopicRequired: 'At least one MQTT topic must be configured for power, energy, or state monitoring',
  3738. loadingEntities: 'Loading entities...',
  3739. loading: 'Loading...',
  3740. failedToLoadEntities: 'Failed to load entities: {{error}}',
  3741. noEntitiesMatching: 'No entities found matching "{{search}}"',
  3742. noEntitiesAvailable: 'No entities available',
  3743. searchingEntities: 'Searching all entities ({{count}} found)',
  3744. showingEntities: 'Showing switch, light, input_boolean ({{count}} available)',
  3745. energyMonitoringOptional: 'Energy Monitoring (Optional)',
  3746. energyMonitoringHint: 'Search and select sensors that provide power/energy data.',
  3747. powerSensorW: 'Power Sensor (W)',
  3748. energyTodayKwh: 'Energy Today (kWh)',
  3749. totalEnergyKwh: 'Total Energy (kWh)',
  3750. noMatchingSensors: 'No matching sensors',
  3751. none: 'None',
  3752. mqttNotConfigured: 'MQTT broker not configured. Set broker address in',
  3753. mqttSettingsPath: 'Settings → Network → MQTT Publishing',
  3754. mqttNotConfiguredSuffix: "(you don't need to enable publishing, just fill in the broker details).",
  3755. mqttMonitorOnlyDescription: 'MQTT plugs receive power/energy data via MQTT subscription. On/off control is not available - use your MQTT broker or home automation system.',
  3756. powerMonitoring: 'Power Monitoring',
  3757. energyMonitoring: 'Energy Monitoring',
  3758. stateMonitoring: 'State Monitoring',
  3759. optional: 'optional',
  3760. topic: 'Topic',
  3761. jsonPath: 'JSON Path',
  3762. multiplier: 'Multiplier',
  3763. onValue: 'ON Value',
  3764. mqttPowerHint: 'JSON path extracts value from JSON payload (e.g., "power_l1"). Leave empty if topic publishes raw numeric values.\nUse multiplier 0.001 for mW→W, 1000 for kW→W.',
  3765. mqttEnergyHint: 'JSON path extracts value from JSON payload. Leave empty for raw values.\nUse multiplier 0.001 for Wh→kWh, 1000 for MWh→kWh.',
  3766. mqttStateHint: 'JSON path extracts value from JSON payload. Leave empty for raw values.\nON value: the exact string that means "ON". Leave empty for auto-detect (ON, true, 1).',
  3767. noSwitchesInSwitchbar: 'No switches in switchbar',
  3768. enableSwitchbarHint: 'Enable "Show in Switchbar" in Settings > Smart Plugs',
  3769. },
  3770. // Notifications
  3771. notifications: {
  3772. // Provider types
  3773. providerTypes: {
  3774. callmebot: 'CallMeBot/WhatsApp',
  3775. ntfy: 'ntfy',
  3776. pushover: 'Pushover',
  3777. telegram: 'Telegram',
  3778. email: 'Email',
  3779. discord: 'Discord',
  3780. webhook: 'Webhook',
  3781. homeassistant: 'Home Assistant',
  3782. },
  3783. // Provider descriptions
  3784. providerDescriptions: {
  3785. email: 'SMTP email notifications',
  3786. telegram: 'Notifications via Telegram bot',
  3787. discord: 'Send to Discord channel via webhook',
  3788. ntfy: 'Free, self-hostable push notifications',
  3789. pushover: 'Simple, reliable push notifications',
  3790. callmebot: 'Free WhatsApp notifications via CallMeBot',
  3791. webhook: 'Generic HTTP POST to any URL',
  3792. homeassistant: 'Persistent notifications in Home Assistant dashboard',
  3793. },
  3794. // NotificationProviderCard
  3795. lastSuccess: 'Last: {{date}}',
  3796. error: 'Error',
  3797. printer: 'Printer:',
  3798. allPrinters: 'All printers',
  3799. sendTestNotification: 'Send Test Notification',
  3800. eventSettings: 'Event Settings',
  3801. enabled: 'Enabled',
  3802. sendFromProvider: 'Send notifications from this provider',
  3803. // Event categories
  3804. printEvents: 'Print Events',
  3805. printerStatus: 'Printer Status',
  3806. amsAlarms: 'AMS Alarms',
  3807. amsHtAlarms: 'AMS-HT Alarms',
  3808. printQueue: 'Print Queue',
  3809. // Event tags (badges)
  3810. start: 'Start',
  3811. plateCheck: 'Plate Check',
  3812. complete: 'Complete',
  3813. failed: 'Failed',
  3814. stopped: 'Stopped',
  3815. progress: 'Progress',
  3816. offline: 'Offline',
  3817. lowFilament: 'Low Filament',
  3818. maintenance: 'Maintenance',
  3819. amsHumidity: 'AMS Humidity',
  3820. amsTemp: 'AMS Temp',
  3821. amsHtHumidity: 'AMS-HT Humidity',
  3822. amsHtTemp: 'AMS-HT Temp',
  3823. bedCooled: 'Bed Cooled',
  3824. firstLayer: 'First Layer',
  3825. quiet: 'Quiet',
  3826. digest: 'Digest {{time}}',
  3827. // Event labels (expanded settings)
  3828. printStarted: 'Print Started',
  3829. plateNotEmpty: 'Plate Not Empty',
  3830. plateNotEmptyDescription: 'Objects detected before print',
  3831. printCompleted: 'Print Completed',
  3832. bedCooledLabel: 'Bed Cooled',
  3833. bedCooledDescription: 'Bed cooled below threshold after print',
  3834. firstLayerCompleteLabel: 'First Layer Complete',
  3835. firstLayerCompleteDescription: 'Notify with snapshot when first layer finishes',
  3836. missingSpoolAssignmentLabel: 'Missing Spool Assignment',
  3837. missingSpoolAssignmentDescription: 'Notify when print starts and required trays have no assigned spool',
  3838. printFailed: 'Print Failed',
  3839. printStopped: 'Print Stopped',
  3840. progressMilestones: 'Progress Milestones',
  3841. progressMilestonesDescription: 'Notify at 25%, 50%, 75%',
  3842. printerOffline: 'Printer Offline',
  3843. printerError: 'Printer Error',
  3844. lowFilamentLabel: 'Low Filament',
  3845. maintenanceDue: 'Maintenance Due',
  3846. maintenanceDueDescription: 'Notify when maintenance is needed',
  3847. amsHumidityHigh: 'AMS Humidity High',
  3848. amsHumidityHighDescription: 'Regular AMS humidity exceeds threshold',
  3849. amsTemperatureHigh: 'AMS Temperature High',
  3850. amsTemperatureHighDescription: 'Regular AMS temperature exceeds threshold',
  3851. amsHtHumidityHigh: 'AMS-HT Humidity High',
  3852. amsHtHumidityHighDescription: 'AMS-HT humidity exceeds threshold',
  3853. amsHtTemperatureHigh: 'AMS-HT Temperature High',
  3854. amsHtTemperatureHighDescription: 'AMS-HT temperature exceeds threshold',
  3855. // Queue events
  3856. jobAdded: 'Job Added',
  3857. jobAddedDescription: 'Job added to queue',
  3858. jobAssigned: 'Job Assigned',
  3859. jobAssignedDescription: 'Model-based job assigned to printer',
  3860. jobStarted: 'Job Started',
  3861. jobStartedDescription: 'Queue job started printing',
  3862. jobWaiting: 'Job Waiting',
  3863. jobWaitingDescription: 'Job waiting for filament or printer',
  3864. jobSkipped: 'Job Skipped',
  3865. jobSkippedDescription: 'Job skipped (previous failed)',
  3866. jobFailed: 'Job Failed',
  3867. jobFailedDescription: 'Job failed to start',
  3868. queueComplete: 'Queue Complete',
  3869. queueCompleteDescription: 'All queue jobs finished',
  3870. // Quiet hours
  3871. quietHours: 'Quiet Hours',
  3872. noNotificationsDuring: 'No notifications during these hours',
  3873. editProviderToChangeQuietHours: 'Edit provider to change quiet hours',
  3874. // Daily digest
  3875. dailyDigest: 'Daily Digest',
  3876. batchNotifications: 'Batch notifications into a single daily summary',
  3877. sendAt: 'Send at {{time}}',
  3878. editProviderToChangeDigestTime: 'Edit provider to change digest time',
  3879. // Actions
  3880. edit: 'Edit',
  3881. deleteProvider: 'Delete Notification Provider',
  3882. deleteConfirm: 'Are you sure you want to delete "{{name}}"? This cannot be undone.',
  3883. delete: 'Delete',
  3884. // AddNotificationModal
  3885. addTitle: 'Add Notification Provider',
  3886. editTitle: 'Edit Notification Provider',
  3887. nameLabel: 'Name *',
  3888. namePlaceholder: 'My Notifications',
  3889. providerTypeLabel: 'Provider Type *',
  3890. configuration: 'Configuration',
  3891. testConfiguration: 'Test Configuration',
  3892. printerFilter: 'Printer Filter',
  3893. onlyFromPrinter: 'Only send notifications for events from this printer',
  3894. quietHoursDnd: 'Quiet Hours (Do Not Disturb)',
  3895. quietStart: 'Start',
  3896. quietEnd: 'End',
  3897. dailyDigestLabel: 'Daily Digest',
  3898. sendDigestAt: 'Send digest at',
  3899. digestCollected: 'Events will be collected and sent as a single summary at this time',
  3900. notificationEvents: 'Notification Events',
  3901. progressPercent: '(25%, 50%, 75%)',
  3902. bedCooledAfterPrint: '(after print completes)',
  3903. cancel: 'Cancel',
  3904. save: 'Save',
  3905. add: 'Add',
  3906. nameRequired: 'Name is required',
  3907. fieldRequired: '{{field}} is required',
  3908. // Config field labels
  3909. phoneNumber: 'Phone Number',
  3910. apiKey: 'API Key',
  3911. serverUrl: 'Server URL',
  3912. topic: 'Topic',
  3913. authToken: 'Auth Token',
  3914. userKey: 'User Key',
  3915. appToken: 'App Token',
  3916. priority: 'Priority',
  3917. botToken: 'Bot Token',
  3918. chatId: 'Chat ID',
  3919. smtpServer: 'SMTP Server',
  3920. smtpPort: 'SMTP Port',
  3921. security: 'Security',
  3922. authentication: 'Authentication',
  3923. username: 'Username',
  3924. password: 'Password',
  3925. fromEmail: 'From Email',
  3926. toEmail: 'To Email',
  3927. webhookUrl: 'Webhook URL',
  3928. payloadFormat: 'Payload Format',
  3929. authorization: 'Authorization',
  3930. titleFieldName: 'Title Field Name',
  3931. messageFieldName: 'Message Field Name',
  3932. // NotificationTemplateEditor
  3933. editTemplate: 'Edit Template: {{name}}',
  3934. titleLabel: 'Title',
  3935. bodyLabel: 'Body',
  3936. titlePlaceholder: 'Notification title...',
  3937. bodyPlaceholder: 'Notification body...',
  3938. availableVariables: 'Available Variables',
  3939. clickToInsert: 'Click to insert at cursor position in body',
  3940. livePreview: 'Live Preview',
  3941. hide: 'Hide',
  3942. show: 'Show',
  3943. loadingPreview: 'Loading preview...',
  3944. enterTemplateContent: 'Enter template content to see preview',
  3945. titlePreview: 'Title:',
  3946. bodyPreview: 'Body:',
  3947. resetToDefault: 'Reset to Default',
  3948. titleRequired: 'Title is required',
  3949. bodyRequired: 'Body is required',
  3950. // NotificationLogViewer
  3951. notificationLog: 'Notification Log',
  3952. showFailedOnly: 'Failed only',
  3953. last24Hours: 'Last 24 hours',
  3954. last7Days: 'Last 7 days',
  3955. last30Days: 'Last 30 days',
  3956. last90Days: 'Last 90 days',
  3957. justNow: 'Just now',
  3958. noFailedNotifications: 'No failed notifications',
  3959. noNotificationsLogged: 'No notifications logged',
  3960. unknownProvider: 'Unknown Provider',
  3961. logTitle: 'Title',
  3962. logMessage: 'Message',
  3963. logError: 'Error',
  3964. logProvider: 'Provider: {{type}}',
  3965. logTime: 'Time: {{time}}',
  3966. refresh: 'Refresh',
  3967. clearOld: 'Clear Old',
  3968. statsSummary: 'Last {{days}} days:',
  3969. statsNotifications: 'notifications',
  3970. statsSent: '{{count}} sent',
  3971. statsFailed: '{{count}} failed',
  3972. // Event type labels (for log viewer)
  3973. eventTypes: {
  3974. print_start: 'Print Started',
  3975. print_complete: 'Print Complete',
  3976. print_failed: 'Print Failed',
  3977. print_stopped: 'Print Stopped',
  3978. print_progress: 'Progress',
  3979. printer_offline: 'Printer Offline',
  3980. printer_error: 'Printer Error',
  3981. filament_low: 'Low Filament',
  3982. maintenance_due: 'Maintenance Due',
  3983. test: 'Test',
  3984. },
  3985. // User email notification preferences
  3986. userEmail: {
  3987. title: 'Notifications',
  3988. emailNotifications: 'Email Notifications',
  3989. emailNotificationsDesc: 'Receive email notifications for your own print jobs. Emails are sent using the system SMTP settings configured in Advanced Authentication.',
  3990. sendingTo: 'Notifications will be sent to',
  3991. noEmailWarning: 'Your account does not have an email address. Contact an administrator to add one.',
  3992. printJobNotifications: 'Print Job Notifications',
  3993. printJobNotificationsDesc: 'Choose which events trigger email notifications for print jobs you submit.',
  3994. printJobStarts: 'Print Job Starts',
  3995. printJobStartsDesc: 'Get notified when your print job begins.',
  3996. printJobFinishes: 'Print Job Finishes',
  3997. printJobFinishesDesc: 'Get notified when your print job completes successfully.',
  3998. printErrors: 'Print Errors',
  3999. printErrorsDesc: 'Get notified when your print job fails or encounters an error.',
  4000. printJobStops: 'Print Job Stops',
  4001. printJobStopsDesc: 'Get notified when your print job is cancelled or stopped.',
  4002. saveSuccess: 'Notification preferences saved.',
  4003. saveError: 'Failed to save notification preferences.',
  4004. },
  4005. },
  4006. // Rich Text Editor
  4007. richTextEditor: {
  4008. bold: 'Bold',
  4009. italic: 'Italic',
  4010. underline: 'Underline',
  4011. bulletList: 'Bullet List',
  4012. numberedList: 'Numbered List',
  4013. alignLeft: 'Align Left',
  4014. alignCenter: 'Align Center',
  4015. alignRight: 'Align Right',
  4016. addLink: 'Add Link',
  4017. removeLink: 'Remove Link',
  4018. },
  4019. // External Links
  4020. externalLinks: {
  4021. noLinksConfigured: 'No external links configured',
  4022. deleteLink: 'Delete Link',
  4023. removeCustomIcon: 'Remove custom icon',
  4024. openInNewTab: 'Open in new tab',
  4025. placeholders: {
  4026. linkName: 'My Link',
  4027. },
  4028. },
  4029. // Keyboard Shortcuts Modal
  4030. keyboardShortcuts: {
  4031. title: 'Keyboard Shortcuts',
  4032. navigation: 'Navigation',
  4033. archivesSection: 'Archives',
  4034. kProfilesSection: 'K-Profiles',
  4035. generalSection: 'General',
  4036. shortcuts: {
  4037. goToPrinters: 'Go to Printers',
  4038. goToArchives: 'Go to Archives',
  4039. goToQueue: 'Go to Queue',
  4040. goToStats: 'Go to Statistics',
  4041. goToProfiles: 'Go to Cloud Profiles',
  4042. goToSettings: 'Go to Settings',
  4043. focusSearch: 'Focus search',
  4044. openUploadModal: 'Open upload modal',
  4045. clearSelection: 'Clear selection / blur input',
  4046. contextMenu: 'Context menu on cards',
  4047. refreshProfiles: 'Refresh profiles',
  4048. newProfile: 'New profile',
  4049. exitSelectionMode: 'Exit selection mode',
  4050. showHelp: 'Show this help',
  4051. },
  4052. footer: 'Press Esc or click outside to close',
  4053. },
  4054. // Notification Log
  4055. notificationLog: {
  4056. title: 'Notification Log',
  4057. events: {
  4058. printStarted: 'Print Started',
  4059. printComplete: 'Print Complete',
  4060. printFailed: 'Print Failed',
  4061. printStopped: 'Print Stopped',
  4062. progress: 'Progress',
  4063. printerOffline: 'Printer Offline',
  4064. printerError: 'Printer Error',
  4065. lowFilament: 'Low Filament',
  4066. maintenanceDue: 'Maintenance Due',
  4067. test: 'Test',
  4068. },
  4069. timeAgo: {
  4070. justNow: 'Just now',
  4071. minutesAgo: '{{minutes}}m ago',
  4072. hoursAgo: '{{hours}}h ago',
  4073. },
  4074. },
  4075. // Restore/Backup Modal
  4076. restoreBackup: {
  4077. title: 'Restore Backup',
  4078. restoring: 'Restoring...',
  4079. restoreComplete: 'Restore Complete',
  4080. restoreFailed: 'Restore Failed',
  4081. importSettings: 'Import settings from a backup file',
  4082. pleaseWait: 'Please wait while your data is being restored',
  4083. clickToSelect: 'Click to select backup file (.json or .zip)',
  4084. howDuplicateHandling: 'How duplicate handling works:',
  4085. categories: {
  4086. printers: 'Printers',
  4087. smartPlugs: 'Smart Plugs',
  4088. notificationProviders: 'Notification Providers',
  4089. filaments: 'Filaments',
  4090. archives: 'Archives',
  4091. pendingUploads: 'Pending Uploads',
  4092. settingsTemplates: 'Settings & Templates',
  4093. },
  4094. matchingInfo: {
  4095. printers: 'matched by serial number',
  4096. smartPlugs: 'matched by IP address',
  4097. notificationProviders: 'matched by name',
  4098. filaments: 'matched by name + type + brand',
  4099. archives: 'matched by content hash',
  4100. pendingUploads: 'matched by filename',
  4101. settingsTemplates: 'always overwritten',
  4102. },
  4103. replaceExisting: 'Replace existing data',
  4104. keepExisting: 'Keep existing data',
  4105. replaceDescription: 'Overwrite items that already exist with backup data',
  4106. keepDescription: 'Only restore items that don\'t already exist',
  4107. caution: 'Caution:',
  4108. cautionText: 'Overwriting will replace your current configurations with backup data. Printer access codes are never overwritten for security.',
  4109. itemsRestored: 'Items Restored',
  4110. itemsSkipped: 'Items Skipped',
  4111. restored: 'Restored',
  4112. skipped: 'Skipped (already exist)',
  4113. filesLabel: 'Files (3MF, thumbnails, etc.)',
  4114. newApiKeysGenerated: 'New API Keys Generated',
  4115. newApiKeysWarning: 'These keys are only shown once. Copy them now!',
  4116. processingBackup: 'Processing backup file...',
  4117. noDataFound: 'No data was found to restore in the backup file.',
  4118. failedToRestore: 'Failed to restore backup. Please check the file format.',
  4119. },
  4120. // Backup Export Modal
  4121. backupExport: {
  4122. title: 'Export Backup',
  4123. selectData: 'Select data to include',
  4124. selectAll: 'Select All',
  4125. selectNone: 'Select None',
  4126. categoryDescriptions: {
  4127. settings: 'Language, theme, update preferences',
  4128. notifications: 'ntfy, Pushover, Discord, etc.',
  4129. templates: 'Custom message templates',
  4130. smartPlugs: 'Tasmota plug configurations',
  4131. externalLinks: 'Sidebar links to external services',
  4132. printers: 'Printer info (access codes excluded)',
  4133. plateDetection: 'Empty plate reference images',
  4134. filaments: 'Filament types and costs',
  4135. maintenance: 'Custom maintenance schedules',
  4136. archives: 'All print data + files (3MF, thumbnails, photos)',
  4137. projects: 'Projects, BOM items, and attachments',
  4138. pendingUploads: 'Virtual printer uploads awaiting review',
  4139. apiKeys: 'Webhook API keys (new keys generated on import)',
  4140. },
  4141. requiresPrinters: 'Requires Printers to be selected',
  4142. zipFileWarning: 'ZIP file will be created.',
  4143. zipFileDescription: 'Includes all 3MF files, thumbnails, timelapses, and photos. This may take a while and result in a large file.',
  4144. includeAccessCodes: 'Include Access Codes',
  4145. includeAccessCodesDescription: 'For transferring to another machine',
  4146. includeAccessCodesWarning: 'Access codes will be included in plain text. Keep this backup file secure!',
  4147. categoriesSelected: '{{selectedCount}} categories selected',
  4148. },
  4149. // Pending Uploads Panel
  4150. pendingUploads: {
  4151. placeholders: {
  4152. notes: 'Add notes about this print...',
  4153. },
  4154. discardUpload: 'Discard Upload',
  4155. archiveAllUploads: 'Archive All Uploads',
  4156. discardAllUploads: 'Discard All Uploads',
  4157. archive: 'Archive',
  4158. timeAgo: {
  4159. justNow: 'Just now',
  4160. minutesAgo: '{{minutes}}m ago',
  4161. hoursAgo: '{{hours}}h ago',
  4162. daysAgo: '{{days}}d ago',
  4163. },
  4164. },
  4165. // API Browser
  4166. apiBrowser: {
  4167. placeholders: {
  4168. requestBody: 'JSON request body...',
  4169. searchEndpoints: 'Search endpoints...',
  4170. },
  4171. },
  4172. // Configure AMS Slot Modal
  4173. configureAmsSlot: {
  4174. title: 'Configure AMS Slot',
  4175. slotConfigured: 'Slot Configured!',
  4176. configuringSlot: 'Configuring slot:',
  4177. slotLabel: '{{ams}} Slot {{slot}}',
  4178. searchPresets: 'Search presets...',
  4179. colorPlaceholder: 'Color name or hex (e.g., brown, FF8800)',
  4180. clearCustomColor: 'Clear custom color',
  4181. noCloudPresets: 'No cloud presets. Login to Bambu Cloud to sync.',
  4182. noPresetsAvailable: 'No presets available. Login to Bambu Cloud or import local profiles.',
  4183. noMatchingPresets: 'No matching presets found.',
  4184. custom: 'Custom',
  4185. builtin: 'Built-in',
  4186. settingsSentToPrinter: 'Settings sent to printer',
  4187. filamentProfile: 'Filament Profile',
  4188. kProfileLabel: 'K Profile (Pressure Advance)',
  4189. filteringFor: 'Filtering for: {{material}}',
  4190. noKProfile: 'No K profile (use default 0.020)',
  4191. noMatchingKProfiles: 'No matching K profiles found. Default K=0.020 will be used.',
  4192. selectFilamentFirst: 'Select a filament profile first',
  4193. kFromCalibration: 'K={{value}} from printer calibration',
  4194. customColorLabel: 'Custom Color (optional)',
  4195. presetColors: '{{name}} colors:',
  4196. showLessColors: 'Show less colors',
  4197. showMoreColors: 'Show more colors',
  4198. clear: 'Clear',
  4199. hexLabel: 'Hex: #{{hex}}',
  4200. resetting: 'Resetting...',
  4201. resetSlot: 'Reset Slot',
  4202. cancel: 'Cancel',
  4203. configuring: 'Configuring...',
  4204. configureSlot: 'Configure Slot',
  4205. },
  4206. // GitHub Backup Settings
  4207. githubBackup: {
  4208. title: 'GitHub Backup',
  4209. history: 'History',
  4210. downloadBackup: 'Download Backup',
  4211. restoreBackup: 'Restore Backup',
  4212. noBackupsYet: 'No backups yet',
  4213. },
  4214. // Email Settings
  4215. emailSettings: {
  4216. placeholders: {
  4217. fromName: 'BamBuddy',
  4218. },
  4219. },
  4220. // Tag Management Modal
  4221. tagManagement: {
  4222. searchTags: 'Search tags...',
  4223. renameTag: 'Rename tag',
  4224. deleteTag: 'Delete tag',
  4225. },
  4226. // Notification Template Editor
  4227. notificationTemplates: {
  4228. placeholders: {
  4229. title: 'Notification title...',
  4230. body: 'Notification body...',
  4231. },
  4232. },
  4233. // Batch Tag Modal
  4234. batchTag: {
  4235. placeholders: {
  4236. newTag: 'Enter new tag...',
  4237. },
  4238. },
  4239. // Photo Gallery Modal
  4240. photoGallery: {
  4241. deletePhoto: 'Delete Photo',
  4242. },
  4243. // Filament Hover Card
  4244. filamentHoverCard: {
  4245. copySpoolUuid: 'Copy spool UUID',
  4246. },
  4247. // K Profiles View
  4248. kProfilesView: {
  4249. hasNote: 'Has note',
  4250. copyProfile: 'Copy profile',
  4251. },
  4252. // Layout/Navigation
  4253. layout: {
  4254. openMenu: 'Open menu',
  4255. noPermissionSystemInfo: 'You do not have permission to view system information',
  4256. },
  4257. // Dashboard
  4258. dashboard: {
  4259. dragToReorder: 'Drag to reorder',
  4260. hideWidget: 'Hide widget',
  4261. },
  4262. // Notification Provider Card
  4263. notificationProviderCard: {
  4264. deleteNotificationProvider: 'Delete Notification Provider',
  4265. },
  4266. // File Manager Modal
  4267. fileManagerModal: {
  4268. closeFileManager: 'Close file manager',
  4269. sortFiles: 'Sort files',
  4270. goToParentFolder: 'Go to parent folder',
  4271. threeView: '3D View',
  4272. },
  4273. // Embedded Camera Viewer
  4274. embeddedCameraViewer: {
  4275. refreshStream: 'Refresh stream',
  4276. close: 'Close',
  4277. zoomOut: 'Zoom out',
  4278. resetZoom: 'Reset zoom',
  4279. zoomIn: 'Zoom in',
  4280. dragToResize: 'Drag to resize',
  4281. },
  4282. // Timelapse Viewer
  4283. timelapseViewer: {
  4284. skipBack5s: 'Skip back 5s',
  4285. skipForward5s: 'Skip forward 5s',
  4286. },
  4287. // Notification Providers
  4288. notificationProviders: {
  4289. descriptions: {
  4290. email: 'SMTP email notifications',
  4291. telegram: 'Notifications via Telegram bot',
  4292. discord: 'Send to Discord channel via webhook',
  4293. ntfy: 'Free, self-hostable push notifications',
  4294. pushover: 'Simple, reliable push notifications',
  4295. callmebot: 'Free WhatsApp notifications via CallMeBot',
  4296. webhook: 'Generic HTTP POST to any URL',
  4297. },
  4298. },
  4299. // Log Viewer
  4300. logViewer: {
  4301. searchPlaceholder: 'Search message or logger name...',
  4302. noLogEntries: 'No log entries found',
  4303. },
  4304. // Switchbar Popover
  4305. switchbarPopover: {
  4306. noSwitchesInSwitchbar: 'No switches in switchbar',
  4307. },
  4308. // Project Page Modal
  4309. projectPageModal: {
  4310. placeholders: {
  4311. title: 'Title',
  4312. designer: 'Designer',
  4313. license: 'License',
  4314. description: 'Enter description...',
  4315. profileTitle: 'Profile Title',
  4316. profileDescription: 'Profile description...',
  4317. },
  4318. },
  4319. // Spoolman Settings
  4320. spoolmanSettings: {},
  4321. // Time
  4322. time: {
  4323. unknown: '-',
  4324. waiting: 'Waiting',
  4325. justNow: 'Just now',
  4326. now: 'Now',
  4327. minsAgo: '{{count}}m ago',
  4328. inMins: 'in {{count}}m',
  4329. hoursAgo: '{{count}}h ago',
  4330. inHours: 'in {{count}}h',
  4331. daysAgo: '{{count}}d ago',
  4332. inDays: 'in {{count}}d',
  4333. },
  4334. // SpoolBuddy Kiosk
  4335. spoolbuddy: {
  4336. nav: {
  4337. dashboard: 'Dashboard',
  4338. ams: 'AMS',
  4339. inventory: 'Inventory',
  4340. writeTag: 'Write',
  4341. settings: 'Settings',
  4342. },
  4343. status: {
  4344. nfcReady: 'NFC Ready',
  4345. nfcOff: 'NFC Off',
  4346. offline: 'Offline',
  4347. online: 'Online',
  4348. noPrinters: 'No printers',
  4349. deviceOffline: 'Device Offline',
  4350. waitingConnection: 'Waiting for device connection...',
  4351. systemReady: 'System Ready',
  4352. status: 'Status',
  4353. },
  4354. dashboard: {
  4355. readyToScan: 'Ready to scan',
  4356. idleMessage: 'Place a spool on the scale to identify it',
  4357. nfcHint: 'NFC tag will be read automatically',
  4358. device: 'Device',
  4359. syncWeight: 'Sync Weight',
  4360. weightSynced: 'Synced!',
  4361. unknownTag: 'Unknown Tag',
  4362. newTag: 'New Tag Detected',
  4363. onScale: 'on scale',
  4364. linkSpool: 'Link to Spool',
  4365. linkTagTitle: 'Link Tag to Spool',
  4366. linkTag: 'Link Tag',
  4367. selectSpool: 'Select a spool to link this tag to:',
  4368. noUntagged: 'No spools without tags found',
  4369. tagDetected: 'Tag detected',
  4370. noTag: 'No tag',
  4371. tagId: 'Tag',
  4372. grossWeight: 'Gross weight',
  4373. spoolSize: 'Spool size',
  4374. close: 'Close',
  4375. currentSpool: 'Current Spool',
  4376. },
  4377. modal: {
  4378. spoolDetected: 'Spool Detected',
  4379. assignToAms: 'Assign to AMS',
  4380. syncWeight: 'Sync Weight',
  4381. weightSynced: 'Synced!',
  4382. syncing: 'Syncing...',
  4383. newTagDetected: 'New Tag Detected',
  4384. addToInventory: 'Add to Inventory',
  4385. assignToAmsTitle: 'Assign to AMS',
  4386. selectSlot: 'Select a slot',
  4387. assign: 'Assign',
  4388. assigning: 'Assigning...',
  4389. assignSuccess: 'Assigned!',
  4390. assignError: 'Failed to assign spool. Please try again.',
  4391. noPrinterSelected: 'Select a printer...',
  4392. noAmsDetected: 'No AMS detected on this printer',
  4393. slot: 'Slot',
  4394. },
  4395. weight: {
  4396. noReading: 'No reading',
  4397. stable: 'Stable',
  4398. measuring: 'Measuring...',
  4399. tare: 'Tare',
  4400. calibrate: 'Calibrate',
  4401. },
  4402. spool: {
  4403. remaining: 'Remaining',
  4404. material: 'Material',
  4405. brand: 'Brand',
  4406. color: 'Color',
  4407. coreWeight: 'Core',
  4408. labelWeight: 'Label',
  4409. scaleWeight: 'Scale',
  4410. netWeight: 'Net',
  4411. lastUsed: 'Last used',
  4412. },
  4413. ams: {
  4414. noData: 'No AMS detected',
  4415. connectAms: 'Connect an AMS to see filament slots',
  4416. noPrinter: 'No printer selected',
  4417. selectPrinter: 'Select a printer from the top bar',
  4418. printerDisconnected: 'Printer disconnected',
  4419. humidity: 'Humidity',
  4420. level: 'Level',
  4421. active: 'Active',
  4422. slot: 'Slot',
  4423. empty: 'Empty',
  4424. },
  4425. inventory: {
  4426. search: 'Search spools...',
  4427. empty: 'No spools in inventory',
  4428. noResults: 'No matching spools',
  4429. spools: 'spools',
  4430. addSpool: 'Add Spool',
  4431. },
  4432. settings: {
  4433. // Tabs
  4434. tabDevice: 'Device',
  4435. tabDisplay: 'Display',
  4436. tabScale: 'Scale',
  4437. tabUpdates: 'Updates',
  4438. // Device tab
  4439. nfcReader: 'NFC Reader',
  4440. type: 'Type',
  4441. connection: 'Connection',
  4442. notConnected: 'N/A',
  4443. deviceInfo: 'Device Info',
  4444. hostname: 'Host',
  4445. uptime: 'Uptime',
  4446. systemConfig: 'Backend & Auth',
  4447. backendUrl: 'Bambuddy Backend URL',
  4448. apiToken: 'API Token',
  4449. apiTokenPlaceholder: 'Enter API token',
  4450. saveConfig: 'Save Config',
  4451. systemQueued: 'Config queued.',
  4452. nfcDiagnostic: 'NFC Diagnostic',
  4453. scaleDiagnostic: 'Scale Diagnostic',
  4454. readTagDiagnostic: 'Read Tag Diagnostic',
  4455. testNfc: 'Test reader',
  4456. testScale: 'Test accuracy',
  4457. testReadTag: 'Read tag',
  4458. systemFieldsRequired: 'Backend URL is required.',
  4459. // Display tab
  4460. brightness: 'Brightness',
  4461. saved: 'Saved',
  4462. noBacklight: 'No DSI backlight detected. Brightness control requires a DSI display.',
  4463. screenBlank: 'Screen Blank Timeout',
  4464. screenBlankDesc: 'Screen turns off after inactivity. Touch to wake.',
  4465. displayNote: 'Brightness is applied as a software filter.',
  4466. // Scale tab
  4467. scaleCalibration: 'Scale Calibration',
  4468. currentWeight: 'Current weight',
  4469. tareOffset: 'Tare',
  4470. calFactor: 'Factor',
  4471. knownWeight: 'Known weight',
  4472. calStep1: 'Remove all items from the scale and press Set Zero.',
  4473. calStep2: 'Place known weight on scale.',
  4474. setZero: 'Set Zero',
  4475. calibrateNow: 'Calibrate',
  4476. calibrated: 'Calibrated',
  4477. tareSet: 'Tare command sent. Waiting for device...',
  4478. tareFailed: 'Failed to send tare command',
  4479. zeroSet: 'Zero point set. Place known weight on scale.',
  4480. calibrationDone: 'Calibration complete!',
  4481. calibrationFailed: 'Calibration failed',
  4482. lastCalibrated: 'Last calibrated',
  4483. stable: 'Stable',
  4484. settling: 'Settling...',
  4485. firmware: 'Firmware',
  4486. scale: 'Scale',
  4487. noDevice: 'No SpoolBuddy device found',
  4488. // Updates tab
  4489. daemonVersion: 'Daemon Version',
  4490. currentVersion: 'Current',
  4491. versionPending: 'Waiting for daemon...',
  4492. checking: 'Checking...',
  4493. checkUpdates: 'Check for Updates',
  4494. updateAvailable: 'Update available',
  4495. updateInstructions: 'Update via SSH: run the SpoolBuddy install script to upgrade.',
  4496. upToDate: 'Up to date',
  4497. includeBeta: 'Include beta versions',
  4498. },
  4499. writeTag: {
  4500. tabExisting: 'Existing Spool',
  4501. tabNew: 'New Spool',
  4502. tabReplace: 'Replace Tag',
  4503. searchPlaceholder: 'Search by material, color, brand...',
  4504. noUntaggedSpools: 'No spools without tags',
  4505. noTaggedSpools: 'No spools with tags',
  4506. selectSpool: 'Select a spool, then place a blank NTAG on the reader',
  4507. placeTag: 'Place an NTAG on the reader',
  4508. tagReady: 'Tag detected — ready to write',
  4509. writeTag: 'Write Tag',
  4510. replaceTag: 'Replace Tag',
  4511. writing: 'Writing tag...',
  4512. waiting: 'Waiting for SpoolBuddy...',
  4513. writeSuccess: 'Tag written successfully!',
  4514. writeFailed: 'Write failed',
  4515. queueFailed: 'Failed to queue write command',
  4516. tryAgain: 'Try Again',
  4517. cancel: 'Cancel',
  4518. replaceWarning: 'Old tag will be unlinked. New tag will replace it.',
  4519. deviceOffline: 'SpoolBuddy is offline',
  4520. material: 'Material',
  4521. colorName: 'Color Name',
  4522. color: 'Color',
  4523. brand: 'Brand',
  4524. weight: 'Weight (g)',
  4525. createSpool: 'Create Spool',
  4526. creating: 'Creating...',
  4527. spoolCreated: 'Spool created! Ready to write.',
  4528. createFailed: 'Failed to create spool',
  4529. },
  4530. },
  4531. bugReport: {
  4532. title: 'Report a Bug',
  4533. description: 'Description',
  4534. descriptionPlaceholder: 'What went wrong? Please describe the issue...',
  4535. email: 'Email (optional)',
  4536. emailPlaceholder: 'your@email.com',
  4537. emailPrivacy: 'If provided, your email will be included in a collapsed section of the GitHub issue so the maintainer can follow up.',
  4538. screenshot: 'Screenshot',
  4539. uploadOrPaste: 'Upload, paste, or drag an image',
  4540. dataCollectedSummary: 'What data is included in the report?',
  4541. dataIncluded: 'Included:',
  4542. dataIncludedList: 'App version, OS, architecture, Python version, database stats (counts only), printer models, nozzle counts, firmware versions, connectivity status, integration status (Spoolman, MQTT, HA), non-sensitive settings, network interface count, Docker details, dependency versions.',
  4543. dataNeverIncluded: 'Never included:',
  4544. dataNeverIncludedList: 'Printer names, serial numbers, access codes, passwords, IP addresses, email addresses, API keys, tokens, webhook URLs, hostnames, or usernames.',
  4545. submit: 'Submit',
  4546. startLogging: 'Start Debug Logging',
  4547. stepEnableLogging: 'Debug logging enabled',
  4548. stepReproduce: 'Reproduce the issue now',
  4549. stepStopLogging: 'Stop & submit report',
  4550. stopAndSubmit: 'Stop & Submit',
  4551. maxDuration: 'Auto-stops after {{minutes}} min',
  4552. stoppingLogs: 'Collecting logs & submitting...',
  4553. submitting: 'Submitting bug report...',
  4554. submitSuccess: 'Bug report submitted successfully!',
  4555. submitFailed: 'Failed to submit bug report',
  4556. thankYou: 'Thank you!',
  4557. submitted: 'Your bug report has been submitted.',
  4558. viewIssue: 'View Issue',
  4559. unexpectedError: 'An unexpected error occurred',
  4560. },
  4561. };