| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653 |
- export default {
- // Navigation
- nav: {
- printers: 'Stampanti',
- archives: 'Archivi',
- queue: 'Coda di stampa',
- stats: 'Statistiche',
- profiles: 'Profili',
- maintenance: 'Manutenzione',
- projects: 'Progetti',
- inventory: 'Filamento',
- finance: 'Finanze',
- files: 'File',
- makerworld: 'MakerWorld',
- notifications: 'Notifiche',
- settings: 'Impostazioni',
- system: 'Sistema',
- collapseSidebar: 'Comprimi barra laterale',
- expandSidebar: 'Espandi barra laterale',
- update: 'Aggiorna',
- updateAvailable: 'Aggiornamento disponibile: v{{version}}',
- updateAvailableBanner: 'Versione {{version}} disponibile!',
- viewUpdate: 'Vedi aggiornamento',
- viewOnGithub: 'Vedi su GitHub',
- keyboardShortcuts: 'Scorciatoie da tastiera (?)',
- switchToLight: 'Passa a tema chiaro',
- switchToDark: 'Passa a tema scuro',
- switchToSystem: 'Passa a tema di sistema',
- smartSwitches: 'Interruttori Smart',
- logout: 'Esci',
- installApp: 'Installa app',
- installAppSuccess: 'Bambuddy è stato installato',
- },
- // Common
- common: {
- plusNMore: '+{{count}} altri',
- save: 'Salva',
- saving: 'Salvataggio...',
- cancel: 'Annulla',
- delete: 'Elimina',
- edit: 'Modifica',
- add: 'Aggiungi',
- close: 'Chiudi',
- confirm: 'Conferma',
- loading: 'Caricamento...',
- error: 'Errore',
- errorLoading: 'Errore di caricamento',
- retry: 'Riprova',
- success: 'Successo',
- warning: 'Avviso',
- enabled: 'Abilitato',
- disabled: 'Disabilitato',
- yes: 'Si',
- no: 'No',
- on: 'On',
- off: 'Spento',
- all: 'Tutti',
- none: 'Nessuno',
- search: 'Cerca',
- filter: 'Filtro',
- sort: 'Ordina',
- refresh: 'Aggiorna',
- download: 'Scarica',
- upload: 'Carica',
- uploading: 'Caricamento...',
- uploadFailed: 'Caricamento fallito',
- actions: 'Azioni',
- status: 'Stato',
- name: 'Nome',
- description: 'Descrizione',
- date: 'Data',
- time: 'Ora',
- hours: 'ore',
- minutes: 'minuti',
- seconds: 'secondi',
- days: 'giorni',
- enable: 'Abilita',
- disable: 'Disabilita',
- permissions: 'Permessi',
- noPrinters: 'Nessuna stampante configurata',
- noData: 'Nessun dato disponibile',
- linkNotFound: 'Link non trovato',
- required: 'Obbligatorio',
- optional: 'Opzionale',
- dismiss: 'Chiudi',
- apply: 'Applica',
- reset: 'Reimposta',
- export: 'Esporta',
- import: 'Importa',
- clear: 'Pulisci',
- selectAll: 'Seleziona tutto',
- deselectAll: 'Deseleziona tutto',
- noChange: '— Nessun cambio —',
- unchanged: 'Invariato',
- unassigned: 'Non assegnato',
- unknown: 'Sconosciuto',
- unknownError: 'Errore sconosciuto',
- today: 'Oggi',
- tomorrow: 'Domani',
- asap: 'ASAP',
- overdue: 'Scaduto',
- now: 'Ora',
- collapse: 'Comprimi',
- expand: 'Espandi',
- previous: 'Precedente',
- next: 'Successivo',
- viewArchive: 'Vedi archivio',
- viewInFileManager: 'Vedi nel Gestore file',
- addedBy: 'Aggiunto da {{username}}',
- prints: 'stampe',
- more: '+{{count}} altre',
- ascending: 'Crescente',
- descending: 'Decrescente',
- back: 'Indietro',
- copy: 'Copia',
- copied: 'Copiato!',
- printer: 'Stampante',
- remove: 'Rimuovi',
- type: 'Tipo',
- print: 'Stampa',
- rename: 'Rinomina',
- move: 'Sposta',
- create: 'Crea',
- duplicate: 'Duplica',
- left: 'Sinistra',
- right: 'Destra',
- user: 'Utente',
- run: 'Esegui',
- running: 'In esecuzione...',
- },
- finance: {
- allTypes: 'Tutti i tipi',
- allCostCenters: 'Tutti i centri di costo',
- title: 'Finanza',
- subtitle: 'Portafoglio, transazioni personali e centri di costo',
- noAccess: 'Non hai il permesso di visualizzare i dati finanziari.',
- personalView: 'Vista personale',
- adminView: 'Vista amministratore',
- createCostCenter: 'Crea centro di costo',
- adjustWallet: 'Regola portafoglio',
- addManualPrint: 'Aggiungi stampa manuale',
- manageMembers: 'Gestisci membri del centro di costo',
- currentBalance: 'Saldo personale',
- transactions: 'Transazioni',
- personalTransactions: 'Transazioni personali',
- costCenters: 'Centri di costo',
- availableForPrinting: 'Disponibile per l\'assegnazione stampa',
- costCenterName: 'Nome',
- budgetType: 'Tipo di budget',
- monthlyBudget: 'Budget mensile',
- totalBudget: 'Budget totale',
- noBudget: 'Nessun budget',
- create: 'Crea',
- selectUser: 'Seleziona utente',
- transactionType: 'Tipo',
- amount: 'Importo',
- noCostCenter: 'Nessun centro di costo',
- descriptionOptional: 'Descrizione (facoltativa)',
- applyAdjustment: 'Applica rettifica',
- memberCanPrint: 'Il membro può stampare',
- addMember: 'Aggiungi membro',
- canPrint: 'Può stampare',
- noMembers: 'Nessun membro assegnato.',
- editCostCenter: 'Modifica centro di costo',
- myCostCenters: 'I miei centri di costo',
- costCentersHint: 'Controlla i limiti di budget e mantieni i costi sotto controllo',
- noCostCenters: 'Nessun centro di costo trovato.',
- owner: 'Proprietario',
- balance: 'Saldo conto',
- unlimited: 'Illimitato',
- budgetPolicyHint: 'I saldi dei conti registrano i costi. La stampa è limitata solo dal budget del centro di costo selezionato; senza budget è illimitata.',
- budget: 'Budget',
- shared: 'Condiviso',
- cannotEditPrivateCostCenter: 'I centri di costo privati non possono essere modificati qui',
- recentTransactions: 'Transazioni recenti',
- transactionsHint: 'Filtra per tipo e centro di costo',
- first: 'Prima',
- prev: 'Precedente',
- next: 'Successiva',
- last: 'Ultima',
- pageNumberOf: 'Pagina {{page}} di {{total}}',
- noTransactions: 'Nessuna transazione disponibile.',
- noTransactionsForFilter: 'Nessuna transazione corrisponde ai filtri selezionati.',
- costCenter: 'Centro di costo',
- balanceAfter: 'Saldo successivo',
- userWithId: 'Utente #{{id}}',
- partial: 'Parziale',
- editTransaction: 'Modifica transazione',
- selectCostCenter: 'Seleziona centro di costo...',
- costCenterRequired: 'Si prega di selezionare un centro di costo',
- amountExample: 'es. 4,00',
- manualAdjustmentExample: 'es. Rettifica manuale',
- userRequired: 'Si prega di selezionare un utente',
- amountInvalid: 'L\'importo deve essere un numero valido',
- createdCostCenter: 'Centro di costo creato',
- createCostCenterFailed: 'Impossibile creare il centro di costo',
- transactionDeleted: 'Transazione eliminata',
- deleteTransactionFailed: 'Impossibile eliminare la transazione',
- transactionEdited: 'Transazione aggiornata e ledger ricalcolato',
- editTransactionFailed: 'Impossibile modificare la transazione',
- manualPrintCreated: 'Addebito stampa manuale aggiunto e ledger ricalcolato',
- manualPrintFailed: 'Impossibile creare la stampa manuale',
- memberSaved: 'Membro salvato',
- memberSaveFailed: 'Impossibile salvare il membro',
- memberRemoved: 'Membro rimosso',
- memberRemoveFailed: 'Impossibile rimuovere il membro',
- costCenterNameRequired: 'Il nome del centro di costo è obbligatorio',
- costCenterUpdated: 'Centro di costo aggiornato',
- costCenterUpdateFailed: 'Impossibile aggiornare il centro di costo',
- confirmDeleteCostCenter: 'Eliminare il centro di costo "{{name}}"?',
- costCenterDeleted: 'Centro di costo eliminato',
- costCenterDeleteFailed: 'Impossibile eliminare il centro di costo',
- deleteTransactionConfirm: 'Eliminare questa transazione? I saldi verranno ricalcolati automaticamente.',
- deposit: 'Deposito',
- withdraw: 'Prelievo',
- printCharge: 'Addebito stampa',
- deleteTransaction: 'Elimina transazione',
- },
- // Printers page
- printers: {
- addPreflight: {
- checking: 'Verifica della connessione...',
- warning: 'Alcuni controlli di connessione non sono riusciti. Questa stampante potrebbe risultare offline. Controlla le verifiche qui sotto, risolvi ciò che puoi oppure salva comunque.',
- back: 'Indietro',
- saveAnyway: 'Salva comunque',
- },
- title: 'Stampanti',
- addPrinter: 'Aggiungi Stampante',
- editPrinter: 'Modifica Stampante',
- deletePrinter: 'Elimina Stampante',
- printerName: 'Nome Stampante',
- serialNumber: 'Numero Seriale',
- ipAddress: 'Indirizzo IP',
- accessCode: 'Codice di Accesso',
- model: 'Modello',
- nozzleCount: 'Numero Ugelli',
- autoArchive: 'Auto Archiviazione',
- status: {
- available: 'Disponibile',
- idle: 'Inattiva',
- printing: 'In stampa',
- paused: 'In pausa',
- offline: 'Offline',
- problem: 'Problema',
- error: 'Errore',
- finished: 'Finita',
- unknown: 'Sconosciuto',
- },
- temperatures: {
- nozzle: 'Ugello',
- bed: 'Piatto',
- chamber: 'Camera',
- },
- heaterHistory: {
- title: 'Storico riscaldatori',
- openLabel: 'Visualizza storico riscaldatori',
- nozzle: 'Ugello',
- nozzle2: 'Ugello 2',
- bed: 'Piatto',
- chamber: 'Camera',
- error: 'Caricamento storico fallito',
- empty: 'Nessun dato registrato',
- },
- progress: '{{percent}}% completato',
- timeRemaining: '{{time}} rimanente',
- deleteConfirm: 'Sei sicuro di eliminare "{{name}}"?',
- maintenanceOk: 'Manutenzione OK',
- maintenanceWarning: '{{count}} avviso',
- maintenanceWarning_plural: '{{count}} avvisi',
- maintenanceDue: '{{count}} in scadenza',
- maintenanceDue_plural: '{{count}} in scadenza',
- // Sort options
- sort: {
- name: 'Nome',
- status: 'Stato',
- model: 'Modello',
- location: 'Posizione',
- eta: 'Tempo rimanente',
- ascending: 'Ordina crescente',
- descending: 'Ordina decrescente',
- },
- // Card size
- cardSize: {
- small: 'Schede piccole',
- medium: 'Schede medie',
- large: 'Schede grandi',
- extraLarge: 'Schede extra grandi',
- },
- pageView: {
- openCamWallPage: 'Apri il muro telecamere come pagina',
- cards: 'Schede',
- camWall: 'Muro telecamere',
- },
- camWall: {
- page: {
- tokenRejected:
- 'Questo link al muro telecamere non è più valido. Il token potrebbe essere scaduto o essere stato revocato.',
- loadFailed: 'Impossibile caricare le stampanti.',
- },
- noPrinters: 'Nessuna stampante da mostrare',
- noSignal: 'Nessun segnale',
- live: 'Live',
- snap: 'Foto',
- off: 'Spento',
- summary: '{{live}} live, {{snap}} foto, {{total}} totali',
- layer: 'Strato {{cur}}/{{total}}',
- timeLeft: '{{time}} rimanenti',
- statusMode: {
- off: 'Off',
- compact: 'Compatto',
- full: 'Completo',
- },
- settings: {
- title: 'Impostazioni muro telecamere',
- maxLive: 'Max stream live',
- maxLiveHint: 'Quante tessere trasmettono in live contemporaneamente. Le altre si aggiornano come foto.',
- snapshotInterval: 'Intervallo foto (secondi)',
- snapshotIntervalHint: 'Con quale frequenza le tessere non live scaricano una nuova foto.',
- statusOverlay: 'Overlay di stato',
- statusOverlayHint: 'Compatto: solo badge di stato. Completo: + avanzamento, strato, tempo residuo.',
- },
- },
- // Controls
- hideOffline: 'Nascondi offline',
- nextAvailable: 'Prossima disponibile',
- powerOn: 'Accendi',
- offlinePrintersWithPlugs: 'Stampanti offline con smart plug',
- noPrintersConfigured: 'Nessuna stampante configurata',
- search: 'Cerca stampanti...',
- noSearchResults: 'Nessuna stampante corrisponde alla tua ricerca o ai tuoi filtri',
- filter: {
- allStatuses: 'Tutti gli stati',
- allLocations: 'Tutti i luoghi',
- },
- toolbar: {
- filters: 'Filtri',
- view: 'Vista',
- actions: 'Azioni',
- },
- // Printer card
- readyToPrint: 'Pronta a stampare',
- external: 'Esterna',
- extL: 'Ext-L',
- extR: 'Ext-R',
- deleteArchives: 'Elimina archivi stampa',
- noLabel: 'Nessuna etichetta',
- printPreview: 'Anteprima stampa',
- width: 'Larghezza',
- height: 'Altezza',
- noObjectsFound: 'Nessun oggetto trovato',
- objectsLoadedOnPrintStart: 'Gli oggetti sono caricati quando inizia una stampa',
- willBeSkipped: 'Verra saltato',
- name: 'Nome',
- serialCannotBeChanged: 'Il numero seriale non può essere cambiato',
- locationHelp: 'Usato per raggruppare stampanti e filtrare i lavori in coda',
- // WiFi signal strength
- wifiSignal: {
- veryWeak: 'Molto debole',
- weak: 'Debole',
- fair: 'Discreto',
- good: 'Buono',
- excellent: 'Eccellente',
- },
- // Maintenance
- maintenanceUpToDate: 'Tutta la manutenzione aggiornata - Clicca per vedere',
- maintenance: {
- title: 'In manutenzione',
- subtitle: 'Questa stampante è in pausa — non connessa, non idonea per la coda, nessuna notifica inviata.',
- pillLabel: 'Manutenzione',
- exitButton: 'Esci dalla manutenzione',
- menuEnter: 'Entra in modalità manutenzione',
- menuExit: 'Esci dalla modalità manutenzione',
- toastEntered: '{{name}} è ora in modalità manutenzione',
- toastExited: '{{name}} è di nuovo online',
- confirmMidPrintTitle: 'Entrare in modalità manutenzione durante la stampa?',
- confirmMidPrintMessage: '{{name}} sta attualmente stampando. Entrare in modalità manutenzione disconnetterà MQTT e fermerà il tracciamento del progresso e le notifiche di completamento per questo lavoro. Continuare?',
- editFieldLabel: 'Modalità manutenzione',
- editFieldHelp: 'Quando attivata, questa stampante è in pausa da MQTT, dispatch della coda e notifiche — utile per riparazioni, installazioni Bambuddy parallele o sospensione temporanea.',
- },
- // Chamber light
- chamberLightOn: 'Accendi luce camera',
- chamberLightOff: 'Spegni luce camera',
- // Files
- files: 'File',
- browseFiles: 'Sfoglia file stampante',
- // Smart plug
- autoOffAfterPrint: 'Spegnimento automatico dopo stampa',
- autoOffExecuted: 'Spegnimento automatico eseguito - accendi la stampante per reimpostare',
- // HMS errors
- hmsErrors: 'Errori HMS',
- viewHmsErrors: 'Vedi {{count}} errore(i) HMS',
- // Actions
- resume: 'Riprendi',
- pause: 'Pausa',
- stop: 'Ferma',
- camera: 'Telecamera',
- skipObject: 'Salta Oggetto',
- reconnect: 'Riconnetti',
- forceRefresh: 'Forza aggiornamento',
- forceRefreshSuccess: 'Aggiornamento richiesto',
- mqttDebug: 'Debug MQTT',
- printerInformation: 'Informazioni stampante',
- copyToClipboard: 'Copia',
- copied: 'Copiato!',
- state: 'Stato',
- wifiSignalLabel: 'Segnale WiFi',
- developerMode: 'Modalità sviluppatore',
- enabled: 'Attivato',
- disabled: 'Disattivato',
- addedOn: 'Aggiunta il',
- sdCard: 'Scheda SD',
- inserted: 'Inserita',
- notInserted: 'Non inserita',
- totalPrintHours: 'Ore di stampa',
- activeNozzle: 'Attivo: ugello {{nozzle}}',
- amsSwitchInletTooltip: 'Filament Track Switch IN-{{inlet}} ({{side}}) — alimenta entrambi gli ugelli',
- nozzleRack: 'Rack Ugelli',
- nozzleDocked: 'Agganciato',
- nozzleMounted: 'Montato',
- nozzleActive: 'Attivo',
- nozzleIdle: 'Inattivo',
- nozzleDiameter: 'Diametro',
- nozzleType: 'Tipo',
- nozzleStatus: 'Stato',
- nozzleFilament: 'Filamento',
- nozzleWear: 'Usura',
- nozzleMaxTemp: 'Temp Max',
- nozzleSerial: 'Seriale',
- nozzleHardenedSteel: 'Acciaio Temprato',
- nozzleStainlessSteel: 'Acciaio Inox',
- nozzleTungstenCarbide: 'Carburo di Tungsteno',
- nozzleFlow: 'Flusso',
- nozzleHighFlow: 'Alto Flusso',
- nozzleStandardFlow: 'Standard',
- // Firmware
- firmwareUpdate: 'Aggiornamento Firmware',
- firmwareInstructions: 'Sul touchscreen della stampante, vai a',
- firmwareNav: 'Vai a',
- settings: 'Impostazioni',
- firmware: 'Firmware',
- // Discovery
- discoverPrinters: 'Trova Stampanti',
- searching: 'Ricerca...',
- manualEntry: 'Inserimento manuale',
- addFromCloud: 'Aggiungi da Cloud',
- // Toast messages
- toast: {
- printerDeleted: 'Stampante eliminata',
- missingSpoolAssignment: 'Stampa avviata su {{printer}}. Mancano assegnazioni bobina per: {{slots}}',
- killSwitchTriggered: 'L’interruttore di sicurezza della fatturazione ha arrestato una stampa non autorizzata su {{printer}}: {{filename}}',
- billingChargeFailed: 'La fatturazione di {{filename}} su {{printer}} non è riuscita. La prenotazione del budget è stata mantenuta; controlla i log del server.',
- assignmentVerified: 'Filamento caricato nello slot {{slot}} ({{printer}})',
- assignmentVerifiedNoKprofile: 'Slot {{slot}} su {{printer}} caricato, ma il profilo di calibrazione del flusso (profilo K) non è stato applicato',
- assignmentNotConfirmed: 'Impossibile confermare l\'assegnazione dello slot {{slot}} su {{printer}} — controlla lo slot AMS',
- printerAdded: 'Stampante aggiunta',
- printerUpdated: 'Stampante aggiornata',
- failedToDelete: 'Impossibile eliminare stampante',
- failedToAdd: 'Impossibile aggiungere stampante',
- connectionFailedNotAdded: 'Impossibile connettersi alla stampante. Verifica IP, numero di serie e codice di accesso e conferma che la modalità solo LAN sia attiva. La stampante non è stata aggiunta.',
- failedToUpdate: 'Impossibile aggiornare stampante',
- commandSent: 'Comando inviato',
- failedToSendCommand: 'Impossibile inviare comando',
- turnedOn: '{{name}} accesa',
- failedToPowerOn: 'Impossibile accendere {{name}}',
- scriptTriggered: 'Script avviato',
- printStopped: 'Stampa fermata',
- printPaused: 'Stampa in pausa',
- printResumed: 'Stampa ripresa',
- referenceDeleted: 'Riferimento eliminato',
- detectionAreaSaved: 'Area rilevamento salvata',
- failedToRunScript: 'Impossibile eseguire script',
- failedToStopPrint: 'Impossibile fermare stampa',
- failedToPausePrint: 'Impossibile mettere in pausa stampa',
- failedToResumePrint: 'Impossibile riprendere stampa',
- failedToControlChamberLight: 'Impossibile controllare luce camera',
- failedToSetSpeed: 'Impossibile impostare la velocità di stampa',
- failedToUpdateSetting: 'Impossibile aggiornare impostazione',
- failedToSkipObjects: 'Impossibile saltare oggetti',
- failedToRereadRfid: 'Impossibile rileggere RFID',
- failedToCheckPlate: 'Impossibile controllare piatto',
- failedToUpdateLabel: 'Impossibile aggiornare etichetta',
- failedToDeleteReference: 'Impossibile eliminare riferimento',
- failedToSaveDetectionArea: 'Impossibile salvare area rilevamento',
- plateCheckEnabled: 'Controllo piatto abilitato',
- plateCheckDisabled: 'Controllo piatto disabilitato',
- calibrationSaved: 'Calibrazione salvata!',
- calibrationFailed: 'Calibrazione non riuscita',
- rfidRereadInitiated: 'Rilettura RFID avviata',
- loadInitiated: 'Caricamento filamento…',
- unloadInitiated: 'Scaricamento filamento…',
- failedToLoad: 'Caricamento filamento fallito',
- failedToUnload: 'Scaricamento filamento fallito',
- },
- // Connection status
- connection: {
- connected: 'Connesso',
- offline: 'Offline',
- },
- plateStatus: {
- markCleared: 'Segna il piatto come liberato',
- cleared: 'Piatto libero',
- notCleared: 'Piatto non libero',
- inUse: 'Piatto in uso',
- },
- // Queue info
- queue: {
- inQueue: '{{count}} stampa in coda',
- inQueue_plural: '{{count}} stampe in coda',
- },
- // Controls section
- controls: 'Controlli',
- // RFID
- rfid: {
- reread: 'Rileggi RFID',
- },
- // AMS load/unload (#891)
- ams: {
- load: 'Carica',
- unload: 'Scarica',
- feedTitle: 'Caricare {{slot}} in quale ugello?',
- feedPrompt: 'Il Filament Track Switch può instradare questo slot verso entrambi gli hotend. Scegli quale alimentare.',
- feedLeft: 'Ugello sinistro',
- feedRight: 'Ugello destro',
- feedAlreadyLoaded: 'Già caricato',
- switchNotReady: 'Il Filament Track Switch non è ancora configurato. Assegna ogni AMS a un ingresso sulla stampante, poi riprova.',
- },
- bedJog: {
- limitWarning: 'I limiti di corsa non vengono applicati durante i movimenti manuali: un bug del firmware Bambu ignora i finecorsa software per i comandi remoti. Muovi con cautela per evitare collisioni.',
- title: 'Controlli jog',
- bed: 'Piano',
- step: 'Passo (mm)',
- up: 'Sposta piano su',
- down: 'Sposta piano giù',
- toolheadUp: 'Sposta testina su',
- toolheadDown: 'Sposta testina giù',
- disabledWhilePrinting: 'Disabilitato durante la stampa',
- notHomedTitle: 'Stampante non azzerata',
- notHomedMessage: 'La stampante non è stata azzerata dall\'ultima stampa. Esegui prima l\'azzeramento automatico per un posizionamento sicuro (parcheggia la testa di stampa, poi azzera X, Y e Z), oppure muovi comunque — i finecorsa software verranno ignorati.',
- homeZ: 'Azzeramento automatico',
- moveAnyway: 'Muovi comunque',
- homingStarted: 'Azzeramento automatico in corso…',
- },
- // Permissions
- permission: {
- noAdd: 'Non hai il permesso di aggiungere stampanti',
- noEdit: 'Non hai il permesso di modificare stampanti',
- noDelete: 'Non hai il permesso di eliminare stampanti',
- noControl: 'Non hai il permesso di controllare stampanti',
- noFiles: 'Non hai il permesso di accedere ai file stampante',
- noAmsRfid: 'Non hai il permesso di rileggere AMS RFID',
- noSmartPlugControl: 'Non hai il permesso di controllare smart plug',
- noCamera: 'Non hai il permesso di visualizzare le telecamere',
- },
- // Add/Edit modal
- modal: {
- addTitle: 'Aggiungi Stampante',
- editTitle: 'Modifica Stampante',
- myPrinter: 'La mia Stampante',
- selectModel: 'Seleziona modello...',
- locationGroup: 'Posizione / Gruppo (opzionale)',
- locationPlaceholder: 'es. Officina, Ufficio, Cantina',
- autoArchiveLabel: 'Archivia automaticamente stampe completate',
- fromPrinterSettings: 'Dalle impostazioni della stampante',
- modelOptional: 'Modello (opzionale)',
- saveChanges: 'Salva modifiche',
- },
- // Skip objects
- skipObjects: {
- tooltip: 'Salta oggetti',
- onlyWhilePrinting: 'Salta oggetti (solo durante la stampa)',
- requiresMultiple: 'Salta oggetti (richiede 2+ oggetti)',
- title: 'Salta Oggetti',
- matchIdsInfo: 'Abbina gli ID con il display della stampante',
- printerShowsIds: 'Lo schermo mostra gli ID oggetto sul piatto',
- skipSelected: 'Salta selezionati',
- skipping: 'Saltando...',
- noObjectsSelected: 'Nessun oggetto selezionato',
- selectObjectsToSkip: 'Seleziona gli oggetti da saltare nella stampa corrente',
- skipped: 'saltato',
- objectsSkipped: 'Oggetti saltati',
- activeCount: '{{count}} attivi',
- waitForLayer: 'Attendi il layer 2+ per saltare oggetti (attualmente layer {{layer}})',
- skip: 'Salta',
- confirmTitle: 'Saltare oggetto?',
- confirmMessage: 'Sei sicuro di voler saltare "{{name}}"? Questa azione non può essere annullata.',
- confirmAllMessage: 'Sono selezionati tutti gli oggetti rimanenti. Questo interromperà il processo di stampa. Continuare?',
- confirmMultipleMessage: 'Saltare {{count}} oggetti selezionati? Questa azione non può essere annullata.',
- },
- // Confirm modals
- confirm: {
- deleteTitle: 'Elimina Stampante',
- deleteMessage: 'Sei sicuro di eliminare "{{name}}"? Questo rimuoverà tutte le impostazioni di connessione.',
- deleteArchivesNote: 'Tutta la cronologia di stampa sarà eliminata definitivamente.',
- keepArchivesNote: 'La cronologia sarà mantenuta ma non più associata a questa stampante.',
- stopTitle: 'Ferma Stampa',
- stopMessage: 'Sei sicuro di fermare la stampa corrente su "{{name}}"? Questo annullerà il lavoro di stampa.',
- stopButton: 'Ferma Stampa',
- pauseTitle: 'Pausa Stampa',
- pauseMessage: 'Sei sicuro di mettere in pausa la stampa corrente su "{{name}}"?',
- pauseButton: 'Pausa Stampa',
- resumeTitle: 'Riprendi Stampa',
- resumeMessage: 'Sei sicuro di riprendere la stampa su "{{name}}"?',
- resumeButton: 'Riprendi Stampa',
- powerOnTitle: 'Accendi Stampante',
- powerOnMessage: 'Sei sicuro di accendere "{{name}}"?',
- powerOnButton: 'Accendi',
- powerOffTitle: 'Spegni Stampante',
- powerOffMessage: 'Sei sicuro di spegnere "{{name}}"?',
- powerOffWarning: 'AVVISO: "{{name}}" sta stampando! Sei sicuro di spegnere? Questo interromperà la stampa e potrebbe danneggiare la stampante.',
- powerOffButton: 'Spegni',
- haToggleTitle: 'Commuta "{{name}}"',
- haToggleMessage: 'Commutare l\'entità Home Assistant {{entity}}? Questo potrebbe spegnere l\'alimentazione se attualmente è accesa.',
- haToggleWarning: 'AVVISO: "{{name}}" sta stampando! La commutazione di {{entity}} potrebbe togliere l\'alimentazione e interrompere la stampa. Continuare?',
- haToggleButton: 'Commuta',
- },
- // Bulk actions
- bulk: {
- select: 'Seleziona',
- selectAll: 'Seleziona tutto',
- selectByLocation: 'Seleziona per posizione',
- selected: '{{count}} selezionato/i',
- actions: {
- stop: 'Ferma',
- pause: 'Pausa',
- resume: 'Riprendi',
- clearPlate: 'Svuota piano',
- clearHMS: 'Cancella notifiche',
- },
- confirm: {
- stopTitle: 'Ferma {{count}} stampe',
- stopMessage: 'Questo annullerà le stampe attive su {{count}} stampante/i. Questa azione non può essere annullata.',
- stopButton: 'Ferma tutte',
- pauseTitle: 'Pausa {{count}} stampe',
- pauseMessage: 'Questo metterà in pausa le stampe attive su {{count}} stampante/i.',
- pauseButton: 'Pausa tutte',
- clearPlateTitle: 'Svuota {{count}} piani di stampa',
- clearPlateMessage: 'Questo svuoterà il piano di stampa su {{count}} stampante/i e potrebbe avviare i lavori in coda.',
- clearPlateButton: 'Svuota tutti',
- },
- success: '{{action}} completato su {{count}} stampante/i',
- partial: '{{succeeded}} riuscito/i, {{failed}} fallito/i',
- noneApplicable: 'Nessuna stampante selezionata è nello stato corretto per questa azione',
- selectByState: 'Seleziona per stato',
- },
- // Discovery
- discovery: {
- title: 'Trova Stampanti',
- searching: 'Ricerca...',
- scanning: 'Scansione...',
- scanProgress: 'Scansione... {{scanned}}/{{total}}',
- foundPrinters: 'Trovate {{count}} stampante(i)',
- noPrintersFound: 'Nessuna stampante trovata',
- noPrintersFoundSubnet: 'Nessuna stampante trovata nella sottorete specificata.',
- noPrintersFoundNetwork: 'Nessuna stampante trovata sulla rete.',
- allConfigured: 'Tutte le stampanti trovate sono già configurate.',
- alreadyAdded: 'Già aggiunta',
- select: 'Seleziona',
- manualEntry: 'Inserimento manuale',
- addFromCloud: 'Aggiungi da Cloud',
- subnetToScan: 'Sottorete da scansionare',
- dockerNote: 'Docker rilevato. Inserisci la sottorete della stampante in notazione CIDR. Richiede network_mode: host in docker-compose.yml.',
- scanSubnet: 'Scansiona sottorete per stampanti',
- discoverNetwork: 'Trova stampanti in rete',
- scanningSubnet: 'Scansione sottorete per stampanti Bambu...',
- scanningNetwork: 'Scansione rete...',
- serialRequired: 'Seriale richiesto',
- unknown: 'Sconosciuto',
- failedToStart: 'Avvio ricerca non riuscito',
- customSubnetOption: 'Sottorete personalizzata...',
- customSubnetLabel: 'Sottorete personalizzata (CIDR)',
- customSubnetNote: 'Usa una sottorete personalizzata se la tua stampante è su una rete diversa da questo server. Le porte FTP (990) e MQTT (8883) devono essere raggiungibili attraverso il confine di routing.',
- },
- // AMS Drying
- drying: {
- start: 'Avvia essiccazione',
- stop: 'Ferma essiccazione',
- temperature: 'Temperatura',
- duration: 'Durata',
- hours: 'ore',
- timeRemaining: '{{time}} rimanente',
- active: 'Essiccazione',
- targetSummary: '{{filament}} @ {{temp}}°C',
- notSupported: 'Essiccazione non supportata',
- powerRequired: 'Collegare l\'alimentatore AMS per abilitare l\'asciugatura',
- cannotDryNow: 'L\'AMS non può avviare l\'asciugatura al momento',
- startingDrying: 'Avvio essiccazione...',
- toastCommandSent: 'Comando di essiccazione inviato',
- toastStopped: 'Essiccazione interrotta',
- toastNotStarted: 'La stampante ha accettato il comando, ma l\'AMS non ha avviato l\'essiccazione. Verifica che l\'alimentatore dell\'AMS sia collegato e che la stampante sia inattiva.',
- screenOnly: 'Su questa stampante l\'essiccazione dell\'AMS può essere comandata solo dallo schermo della stampante (limitazione di Bambu)',
- stoppingDrying: 'Arresto essiccazione...',
- rotateTray: 'Ruota la bobina durante l\'essiccazione',
- rotateUnavailableReason: 'Non disponibile — uno slot di questo AMS è caricato verso la testa di stampa. La bobina è bloccata dal tubo di alimentazione e non può ruotare. Ritrai prima il filamento.',
- startMode: 'Ora di avvio',
- modeNow: 'Ora',
- modeDelay: 'Dopo un ritardo',
- modeAtTime: 'A un orario',
- schedule: 'Pianifica',
- scheduledFor: 'Asciugatura pianificata per {{time}}',
- scheduledAsap: 'Asciugatura pianificata (in attesa della stampante)',
- cancelScheduled: 'Annulla asciugatura pianificata',
- scheduleFailed: 'Pianificazione dell\'asciugatura non riuscita',
- retractFilament: 'Ritrarre il filamento dall\'uscita dell\'AMS per avviare l\'asciugatura',
- waitingAmsNotFound: 'In attesa del rilevamento dell\'AMS',
- waitingOffline: 'In attesa che la stampante torni online',
- waitingPrinterBusy: 'In attesa che la stampante sia libera',
- waitingAlreadyDrying: 'In attesa che termini il ciclo di asciugatura in corso',
- waitingInterrupted: 'Interrotta, riprenderà quando la stampante sarà libera',
- scheduleFailedReason: 'Asciugatura pianificata non riuscita: {{reason}}',
- scheduleFailedUnknown: 'Errore sconosciuto',
- dismissFailed: 'Ignora',
- },
- amsBackup: {
- titleOn: 'AMS Filament Backup è ATTIVO. Clicca per disabilitare.',
- titleOff: 'AMS Filament Backup è DISATTIVATO. Clicca per abilitare.',
- titleUnknown: 'Stato di AMS Filament Backup non disponibile su questa stampante.',
- toastEnabled: 'AMS Filament Backup abilitato',
- toastDisabled: 'AMS Filament Backup disabilitato',
- modalTitle: 'AMS Filament Backup',
- modalHelp: "Quando lo slot attivo si esaurisce, la stampante passa agli slot con lo stesso preset e colore in quest'ordine.",
- modalNoSlots: 'Nessun filamento caricato.',
- modalNoPairs: 'Nessuna coppia di backup — nessuno slot condivide preset e colore.',
- extruderRightShort: 'D',
- extruderLeftShort: 'S',
- stateOn: 'Abilitato',
- stateOff: 'Disabilitato',
- stateUnknown: 'Non supportato su questa stampante',
- },
- activeJobSlot: {
- title: 'Questo slot è il filamento {{n}} nella stampa attiva',
- ariaLabel: 'Slot stampa attiva {{n}}',
- },
- expectedSlot: {
- title: 'La stampante è in attesa di filamento in questo slot',
- ariaLabel: 'Slot filamento previsto {{n}}',
- label: '{{ams}} · Slot {{slot}}',
- external: 'Bobina esterna',
- },
- // Filaments section
- filaments: 'Filamenti',
- externalSpool: {
- hide: 'Nascondi bobina esterna',
- show: 'Mostra bobina esterna',
- },
- // Camera
- openCameraOverlay: 'Apri overlay camera',
- openCameraWindow: 'Apri camera in nuova finestra',
- // Firmware
- firmwareUpdateAvailable: 'Aggiornamento firmware disponibile: {{current}} → {{latest}}',
- firmwareUpToDate: 'Firmware {{version}} — Aggiornato',
- firmwareUpdateButton: 'Aggiorna',
- // Plate detection
- plateDetection: {
- noPermission: 'Non hai il permesso di aggiornare le stampanti',
- enabledClick: 'Controllo piatto abilitato - Clicca per disabilitare',
- disabledClick: 'Controllo piatto disabilitato - Clicca per abilitare',
- manageCalibration: 'Gestisci calibrazione rilevamento piatto',
- calibrationRequired: 'Calibrazione richiesta',
- calibrationInstructions: 'Assicurati che il piatto sia <strong>completamente vuoto</strong>, poi clicca Calibra.',
- calibrationDescription: 'La calibrazione salva un\'immagine di riferimento del piatto vuoto. I controlli futuri confronteranno con questo riferimento per rilevare oggetti.',
- calibrationTip: '<strong>Suggerimento:</strong> Puoi salvare fino a 5 calibrazioni per piatti diversi. Il sistema usa automaticamente la migliore corrispondenza durante il controllo.',
- plateEmpty: 'Il piatto sembra vuoto',
- objectsDetected: 'Oggetti rilevati sul piatto',
- confidence: 'Confidenza',
- difference: 'Differenza',
- analysisPreview: 'Anteprima analisi:',
- analysisLegend: 'Riquadro verde = area rilevamento, overlay rosso = differenze dalla calibrazione',
- savedReferences: 'Riferimenti salvati ({{count}}/{{max}})',
- deleteReference: 'Elimina riferimento',
- labelPlaceholder: 'Etichetta...',
- clickToEdit: '{{label}} - Clicca per modificare',
- clickToAddLabel: 'Clicca per aggiungere etichetta',
- },
- // Speed
- speed: {
- title: 'Velocità di stampa',
- silent: 'Silenzioso (50%)',
- standard: 'Standard (100%)',
- sport: 'Sport (124%)',
- ludicrous: 'Ludicrous (166%)',
- },
- airduct: {
- title: 'Modalità condotto d\'aria',
- cooling: 'Raffreddamento',
- heating: 'Riscaldamento',
- },
- noSdCard: 'Nessuna SD',
- door: {
- open: 'Aperta',
- closed: 'Chiusa',
- },
- // Fans
- fans: {
- partCooling: 'Ventola raffreddamento parte',
- auxiliary: 'Ventola ausiliaria',
- leftAuxiliary: 'Ventola ausiliaria sinistra',
- exhaust: 'Estrazione',
- chamber: 'Ventola camera',
- },
- // HMS errors
- clickToViewHmsErrors: 'Clicca per vedere errori HMS',
- aiDetection: {
- safe: 'Sicuro',
- warning: 'Avviso',
- failure: 'Guasto',
- idle: 'Inattiva',
- error: 'Non controlla',
- unknown: 'Avvio',
- tooltipError: 'Il rilevamento guasti con IA non sta controllando questa stampa: {{reason}} - clicca per i dettagli',
- tooltipUnknown: 'Rilevamento guasti con IA: in attesa del primo risultato - clicca per i dettagli',
- errorHint: 'Questa stampa non viene controllata. Il rilevamento riprenderà automaticamente una volta risolto il problema indicato sotto.',
- tooltip: 'Rilevamento guasti con IA: {{status}} (punteggio {{score}}) - clicca per i dettagli',
- tooltipIdle: 'Rilevamento guasti con IA attivo - il monitoraggio inizia con la prossima stampa - clicca per i dettagli',
- modalTitle: 'Rilevamento guasti con IA - {{name}}',
- currentStatus: 'Stato',
- score: 'Punteggio',
- framesAnalyzed: 'Fotogrammi analizzati',
- idleHint: 'Al momento nessuna stampa è monitorata. Il monitoraggio inizia automaticamente con la prossima stampa.',
- lastError: 'Ultimo errore',
- openSettings: 'Apri impostazioni',
- },
- estimatedCompletion: 'Tempo completamento stimato',
- plateNumber: 'Piastra {{number}}',
- slotOptions: 'Opzioni slot',
- // AMS hover popup
- amsPopup: {
- friendlyName: 'Nome AMS',
- friendlyNamePlaceholder: 'es. Nome AMS amichevole',
- serialNumber: 'Numero di serie',
- firmwareVersion: 'Firmware',
- save: 'Salva',
- clear: 'Cancella',
- noEditPermission: 'Non hai il permesso di rinominare le unità AMS',
- },
- // Firmware modal
- firmwareModal: {
- title: 'Aggiornamento Firmware',
- titleUpToDate: 'Info Firmware',
- currentVersion: 'Corrente:',
- latestVersion: 'Ultima:',
- releaseNotes: 'Note di rilascio',
- checkingPrereqs: 'Controllo prerequisiti...',
- sdCardReady: 'SD pronta. Clicca sotto per caricare firmware.',
- uploadedSuccess: 'Firmware caricato su SD!',
- applyInstructions: 'Per applicare l\'aggiornamento sulla stampante:',
- step1: 'Sul touchscreen della stampante, vai a <strong>Impostazioni</strong>',
- step2: 'Vai a <strong>Firmware</strong>',
- step3: 'Seleziona <strong>Aggiorna da SD</strong>',
- step4: 'L\'aggiornamento richiede 10-20 minuti',
- done: 'Fatto',
- starting: 'Avvio...',
- uploadFirmware: 'Carica Firmware',
- uploadFailed: 'Avvio caricamento fallito: {{error}}',
- uploadedToast: 'Firmware caricato! Avvia aggiornamento dal display.',
- availableVersions: 'Versioni disponibili',
- usable: 'Utilizzabile',
- unavailable: 'Non disponibile',
- installed: 'Installato',
- newerBadge: 'più recente',
- olderBadge: 'più vecchio',
- currentBadge: 'attuale',
- },
- accessCodePlaceholder: 'Lascia vuoto per mantenere quello attuale',
- // ROI editor
- roi: {
- title: 'Area di rilevamento (ROI)',
- xStart: 'X Inizio',
- yStart: 'Y Inizio',
- width: 'Larghezza',
- height: 'Altezza',
- instruction: 'Regola l\'area di rilevamento per focalizzare il piatto. Il riquadro verde mostra l\'area corrente.',
- },
- developerModeWarning: 'La modalità sviluppatore LAN non è attivata su: {{names}}. Alcune funzionalità potrebbero non funzionare.',
- howToEnable: 'Come attivare',
- incompatibleFile: 'Questo file è stato preparato per {{slicedFor}}, ma questa stampante è una {{printerModel}}',
- dropNotPrintable: 'Solo i file .gcode e .gcode.3mf possono essere stampati',
- dropToPrint: 'Rilascia per stampare',
- dropToQueue: 'Rilascia per accodare',
- },
- // Archives page
- archives: {
- media: {
- title: 'Video della stampa',
- download: 'Scarica i video della stampa',
- searching: 'Ricerca dei video sulla stampante…',
- searchFailed: 'Impossibile cercare i video sulla stampante.',
- none: 'Non sono stati trovati timelapse o segmenti della videocamera IP per questa stampa.',
- attachedTimelapse: 'Timelapse allegato',
- printerFiles: 'File ancora presenti sulla stampante',
- downloadSelected: 'Scarica selezionati',
- printerMissing: 'La stampante non è più configurata',
- timelapseUnavailable: 'Impossibile leggere la cartella dei timelapse',
- ipcamUnavailable: 'Impossibile leggere la cartella della videocamera IP',
- },
- title: 'Archivi di stampa',
- no3mfBanner: {
- title: 'Alcune stampe recenti non sono state archiviate con la miniatura',
- body: 'Lo slicer non ha lasciato il file .gcode.3mf sulla scheda SD della stampante, quindi Bambuddy non ha potuto recuperare né la miniatura né i metadati dello slicer. Solitamente accade perché "Memorizza file inviati su archiviazione esterna" è disattivato nello slicer (scheda Dispositivo di Bambu Studio / OrcaSlicer).',
- docsLink: 'Vedi passo 4 dell\'installazione',
- docsLinkInternalStorage: 'Perché succede',
- titleInternalStorage: 'Alcune stampe recenti sono rimaste nella memoria interna della stampante',
- bodyInternalStorage: 'Bambu Studio ha messo il file elaborato nella memoria interna della stampante anziché sulla scheda, quindi Bambuddy non aveva nulla da leggere via FTP. Sulla serie H2, sulla P2S e sulla X2D il pulsante «Stampa» lo fa sempre: solo «Invia» offre una scelta, e anche quella è impostata su «Cache». Quelle stampe restano archiviate con nome e tempi, solo senza miniatura né metadati dello slicer. Per archivi completi, avvia la stampa da Bambuddy oppure elabora in OrcaSlicer, oppure in Bambu Studio usa «Invia» con «Esterna» e avvia la stampa dopo. Tutte richiedono una scheda o una chiavetta nella stampante.',
- titleNoExternalStorage: 'Alcune stampe recenti non sono state archiviate — nessuna memoria nella stampante',
- bodyNoExternalStorage: 'La stampante non rileva né scheda né chiavetta nel suo slot, quindi il file elaborato non aveva dove finire e Bambuddy nulla da leggere. Inseriscine una e la prossima stampa verrà archiviata per intero.',
- titleInternalHistory: 'Alcune stampe recenti sono partite da un file già presente sulla stampante',
- bodyInternalHistory: 'Quelle stampe sono uscite dalla libreria della stampante stessa: una ristampa dal suo schermo, un avvio da Handy o un file inviato prima e stampato dopo. Bambuddy legge i file di stampa via FTP, che serve solo la scheda o la chiavetta, mentre la stampante tiene quella libreria in un\'area che l\'FTP non raggiunge, quindi non c\'era alcun 3MF da leggere. Nessuna impostazione dello slicer cambia questo, perché per queste stampe non è stato inviato nulla. Restano archiviate con nome e tempi, e «Modifica archivio» consente di inserire a mano il filamento usato. Per un archivio completo, avvia la stampa da Bambuddy o dal tuo slicer.',
- titleFtpsCooloff: 'Alcune stampe recenti non sono state archiviate — la stampante ha rifiutato la connessione dei file',
- bodyFtpsCooloff: 'Bambuddy ha aperto la porta di trasferimento file della stampante (FTPS 990) e la stampante ha risposto con qualcosa che non è TLS, quindi non è stato possibile leggere nulla. Quelle stampe restano archiviate con nome e tempi, solo senza miniatura né metadati dello slicer. Non è un\'impostazione dello slicer né qualcosa che hai cambiato tu — gli stessi modelli e firmware funzionano normalmente su altre installazioni, e una stampante colpita di solito torna a funzionare da sola più tardi. Dopo un errore simile Bambuddy sospende i trasferimenti verso quella stampante per cinque minuti e ritorna a prendere il file al termine della pausa, così un episodio breve si risolve da sé; una scheda ancora vuota significa che il rifiuto è durato più del secondo tentativo. Non si sa ancora che cosa lo scateni. Se continua a capitare, attiva la registrazione di debug nella pagina Sistema e allega un pacchetto di supporto alla tua segnalazione.',
- titleFtpTransferFailed: 'Alcune stampe recenti non sono state archiviate: il trasferimento del file ha esaurito il tempo',
- bodyFtpTransferFailed: 'Il file elaborato era sulla scheda della stampante e la stampante lo ha effettivamente servito, ma il trasferimento non si è concluso nel tempo consentito. All\'avvio della stampa la stampante gestisce anche la telecamera, i messaggi di stato e il caricamento del lavoro, e un 3MF di grandi dimensioni non sempre riesce a passare. Quelle stampe restano archiviate con nome e tempi, solo senza miniatura né metadati dello slicer. Non è un\'impostazione dello slicer né qualcosa che hai cambiato. Bambuddy torna a prendere il file tre volte nei dieci minuti successivi, quindi la maggior parte dei casi si risolve da sola; una scheda ancora vuota significa che anche tutti quei tentativi hanno esaurito il tempo. Se continua a succedere, aumenta Timeout di connessione in Impostazioni > Rete > Nuovo tentativo FTP.',
- dismissLabel: 'Chiudi questo avviso',
- },
- searchPlaceholder: 'Cerca archivi...',
- filterByPrinter: 'Filtra per stampante',
- filterByStatus: 'Filtra per stato',
- sortBy: 'Ordina per',
- sortNewest: 'Più recenti',
- sortOldest: 'Meno recenti',
- sortName: 'Nome',
- sortDuration: 'Durata',
- sortLargest: 'Più grandi',
- sortSmallest: 'Più piccoli',
- sortSize: 'Dimensione',
- noArchives: 'Nessun archivio trovato',
- noArchivesSearch: 'Nessun archivio corrisponde alla ricerca',
- originalPrintNotVisible: 'Stampa originale non visibile - prova a rimuovere i filtri',
- noArchivesYet: 'Nessun archivio ancora',
- prints: 'stampe',
- pagination: {
- showing: 'Mostrando',
- to: 'a',
- of: 'di',
- show: 'Mostra',
- page: 'Pagina',
- all: 'Tutti',
- },
- loadingArchives: 'Caricamento archivi...',
- releaseToUpload: 'Rilascia per caricare',
- showAll: 'Mostra tutti',
- showFavoritesOnly: 'Solo preferiti',
- gridView: 'Vista griglia',
- listView: 'Vista elenco',
- calendarView: 'Vista calendario',
- logView: 'Registro stampe',
- manageTags: 'Gestisci tag',
- showFailedPrints: 'Mostra stampe fallite',
- hideFailedPrints: 'Nascondi stampe fallite',
- hideDuplicates: 'Nascondi duplicati',
- viewOriginalPrint: 'Fai clic per visualizzare la stampa originale (#{{id}})',
- printTime: 'Tempo di stampa',
- filamentUsed: 'Filamento usato',
- cost: 'Costo',
- preview: 'Anteprima',
- deleteArchive: 'Elimina archivio',
- deleteConfirm: 'Sei sicuro di eliminare questo archivio?',
- favorite: 'Preferito',
- unfavorite: 'Rimuovi dai preferiti',
- viewDetails: 'Vedi dettagli',
- status: {
- completed: 'Completato',
- failed: 'Fallito',
- stopped: 'Fermato',
- },
- toast: {
- source3mfAttached: 'Sorgente 3MF allegata: {{filename}}',
- failedUploadSource3mf: 'Caricamento sorgente 3MF non riuscito',
- source3mfRemoved: 'Sorgente 3MF rimossa',
- failedRemoveSource3mf: 'Rimozione sorgente 3MF non riuscita',
- f3dAttached: 'F3D allegato: {{filename}}',
- failedUploadF3d: 'Caricamento F3D non riuscito',
- f3dRemoved: 'F3D rimosso',
- failedRemoveF3d: 'Rimozione F3D non riuscita',
- timelapseAttached: 'Timelapse allegato: {{filename}}',
- timelapseAlreadyAttached: 'Timelapse già allegato',
- noMatchingTimelapse: 'Nessun timelapse corrispondente',
- failedScanTimelapse: 'Scansione timelapse non riuscita',
- failedAttachTimelapse: 'Allegato timelapse non riuscito',
- timelapseRemoved: 'Timelapse rimosso',
- failedRemoveTimelapse: 'Impossibile rimuovere il timelapse',
- timelapseUploaded: 'Timelapse caricato: {{filename}}',
- failedUploadTimelapse: 'Impossibile caricare il timelapse',
- archiveDeleted: 'Archivio eliminato',
- failedDeleteArchive: 'Eliminazione archivio non riuscita',
- addedToFavorites: 'Aggiunto ai preferiti',
- removedFromFavorites: 'Rimosso dai preferiti',
- projectUpdated: 'Progetto aggiornato',
- failedUpdateProject: 'Aggiornamento progetto non riuscito',
- linkCopied: 'Link copiato negli appunti',
- failedCopyLink: 'Copia link non riuscita',
- photoDeleted: 'Foto eliminata',
- failedDeletePhoto: 'Eliminazione foto non riuscita',
- failedDeleteArchives: 'Eliminazione archivi non riuscita',
- failedUpdateFavorites: 'Aggiornamento preferiti non riuscito',
- exportDownloaded: 'Export scaricato',
- exportFailed: 'Export non riuscito',
- },
- menu: {
- print: 'Stampa',
- openInBambuStudio: 'Apri nello slicer',
- slice: 'Slice',
- externalLink: 'Link esterno',
- viewOnMakerWorld: 'Vedi su MakerWorld',
- preview3d: 'Anteprima 3D',
- viewTimelapse: 'Vedi Timelapse',
- scanForTimelapse: 'Cerca Timelapse',
- uploadTimelapse: 'Carica timelapse',
- removeTimelapse: 'Rimuovi timelapse',
- downloadSource3mf: 'Scarica Sorgente 3MF',
- uploadSource3mf: 'Carica Sorgente 3MF',
- replaceSource3mf: 'Sostituisci Sorgente 3MF',
- removeSource3mf: 'Rimuovi Sorgente 3MF',
- uploadF3d: 'Carica F3D',
- replaceF3d: 'Sostituisci F3D',
- downloadF3d: 'Scarica F3D',
- removeF3d: 'Rimuovi F3D',
- download: 'Scarica',
- copyDownloadLink: 'Copia link download',
- qrCode: 'Codice QR',
- viewPhotos: 'Vedi foto',
- viewPhotosCount: 'Vedi foto ({{count}})',
- projectPage: 'Pagina progetto',
- addToFavorites: 'Aggiungi ai preferiti',
- removeFromFavorites: 'Rimuovi dai preferiti',
- edit: 'Modifica',
- printLog: 'Registro stampe',
- goToProject: 'Vai al progetto: {{name}}',
- addToProject: 'Aggiungi al progetto',
- removeFromProject: 'Rimuovi dal progetto',
- loading: 'Caricamento...',
- noProjectsAvailable: 'Nessun progetto disponibile',
- searchProjects: 'Cerca progetti…',
- select: 'Seleziona',
- deselect: 'Deseleziona',
- delete: 'Elimina',
- },
- permission: {
- noReprint: 'Non hai il permesso di ristampare questo archivio',
- noAddToQueue: 'Non hai il permesso di aggiungere alla coda',
- noUpdateArchives: 'Non hai il permesso di aggiornare archivi',
- noUploadFiles: 'Non hai il permesso di caricare file',
- noDownload: 'Non hai il permesso di scaricare archivi',
- noCopyLink: 'Non hai il permesso di copiare link download',
- noDelete: 'Non hai il permesso di eliminare questo archivio',
- noEdit: 'Non hai il permesso di modificare questa voce',
- noCreate: 'Non hai il permesso di creare archivi',
- },
- platePicker: {
- title: 'Seleziona la piastra da visualizzare',
- hint: 'Questo archivio contiene più piastre. Scegline una da aprire nel visualizzatore GCode.',
- plateLabel: 'Piastra {{index}}',
- objectCount: '{{count}} oggetto',
- objectCount_plural: '{{count}} oggetti',
- noGcode: 'Questo archivio non contiene G-code generato da visualizzare. Aprilo prima in Bambu Studio per sezionarlo.',
- },
- card: {
- previousPlate: 'Piatto precedente',
- nextPlate: 'Piatto successivo',
- plateNumber: 'Piatto {{index}}',
- moreOptions: 'Clic destro per altre opzioni',
- addToFavorites: 'Aggiungi ai preferiti',
- removeFromFavorites: 'Rimuovi dai preferiti',
- cancelled: 'annullato',
- failed: 'fallito',
- duplicate: 'duplicato',
- duplicateTitle: 'Questo modello è stato stampato prima',
- openSource3mf: 'Apri sorgente 3MF in Bambu Studio (clic destro per altre opzioni)',
- downloadF3d: 'Scarica file design Fusion 360',
- viewTimelapse: 'Vedi timelapse',
- viewPhoto: 'Vedi 1 foto',
- viewPhotos: 'Vedi {{count}} foto',
- openFolder: 'Apri cartella: {{name}}',
- slicedFile: 'File slice - pronto a stampare',
- sourceFile: 'Solo file sorgente - nessuna mappatura AMS disponibile',
- gcode: 'GCODE',
- source: 'SOURCE',
- project: 'Progetto: {{name}}',
- runsBadge: '{{count}} stampe',
- runsBadgeTitle: '{{count}} stampe in totale — {{successful}} riuscite, {{failed}} fallite. Fai clic per vedere il registro completo.',
- estimated: 'Stimato: {{time}}',
- actual: 'Reale: {{time}}',
- accuracy: 'Accuratezza: {{percent}}%',
- filament: '{{weight}} g',
- layer: '{{count}} strato',
- layers: '{{count}} strati',
- object: '{{count}} oggetto',
- objects: '{{count}} oggetti',
- slicedFor: 'Sliced per {{model}}',
- uploadedBy: 'Caricato da',
- noPermissionReprint: 'Non hai il permesso di ristampare',
- noFileForReprint: 'Nessun file 3MF disponibile — il file non è stato scaricato dalla stampante durante la registrazione',
- slicerAmsMapping: 'Mappatura AMS salvata ({{printer}})',
- slicerAmsMappingTooltip: 'La scelta dello slot AMS fatta dallo slicer è stata salvata per {{printer}}. I numeri di slot hanno senso solo su quella stampante, quindi una ristampa li riutilizza solo se torna su {{printer}}.',
- noPermissionEdit: 'Non hai il permesso di modificare archivi',
- noPermissionDelete: 'Non hai il permesso di eliminare archivi',
- openInBambuStudio: 'Apri nello slicer',
- openInBambuStudioToSlice: 'Apri nello slicer per slicing',
- slice: 'Slice',
- externalLink: 'Link esterno',
- makerWorld: 'MakerWorld – {{designer}}',
- viewProject: 'Vedi progetto',
- noExternalLink: 'Nessun link esterno',
- preview3d: 'Anteprima 3D',
- download: 'Scarica',
- edit: 'Modifica',
- delete: 'Elimina',
- },
- runLog: {
- title: 'Registro stampe',
- modalTitle: 'Registro stampe — {{name}}',
- modalTitleFallback: 'questo archivio',
- empty: 'Nessun evento di stampa ancora registrato per questo archivio.',
- col: {
- date: 'Data',
- status: 'Stato',
- duration: 'Durata',
- filament: 'Filamento',
- cost: 'Costo',
- },
- status: {
- completed: 'Completata',
- failed: 'Fallita',
- cancelled: 'Annullata',
- stopped: 'Interrotta',
- skipped: 'Saltata',
- printing: 'In stampa',
- },
- },
- modal: {
- deleteArchive: 'Elimina Archivio',
- deleteConfirm: 'Sei sicuro di eliminare "{{name}}"? Questa azione non può essere annullata.',
- deleteButton: 'Elimina',
- deletePurgeStats: 'Rimuovi anche questa stampa dalle Quick Stats (filamento, tempo, costo, energia)',
- deleteQueueItemsWarning: '{{count}} elemento/i in coda collegato/i a questo archivio verrà/verranno rimosso/i.',
- deleteBlockedByPrinting: 'Impossibile eliminare — {{count}} elemento/i in coda sono attualmente in stampa. Interrompi la stampa, poi riprova.',
- removeSource3mf: 'Rimuovi Sorgente 3MF',
- removeSource3mfConfirm: 'Sei sicuro di rimuovere il file sorgente 3MF da "{{name}}"? Questo eliminerà il progetto slicer originale.',
- removeButton: 'Rimuovi',
- removeF3d: 'Rimuovi F3D',
- removeF3dConfirm: 'Sei sicuro di rimuovere il file Fusion 360 da "{{name}}"?',
- removeTimelapse: 'Rimuovi timelapse',
- removeTimelapseConfirm: 'Sei sicuro di voler rimuovere il video timelapse da "{{name}}"?',
- timelapse: '{{name}} – Timelapse',
- selectTimelapse: 'Seleziona Timelapse',
- selectTimelapseDesc: 'Nessun abbinamento automatico trovato. Seleziona il timelapse per questa stampa:',
- deleteArchives: 'Elimina Archivi',
- deleteArchivesConfirm: 'Sei sicuro di eliminare {{count}} archivio(i)? Questa azione non può essere annullata.',
- deleteCount: 'Elimina {{count}}',
- },
- page: {
- title: 'Archivi',
- printsCount: '{{filtered}} di {{total}} stampe',
- dropFilesHere: 'Rilascia file .3mf qui',
- releaseToUpload: 'Rilascia per caricare',
- only3mfSupported: 'Solo file .3mf supportati',
- close: 'Chiudi',
- selected: '{{count}} selezionati',
- selectAll: 'Seleziona tutto',
- tags: 'Tag',
- project: 'Progetto',
- favorite: 'Preferito',
- delete: 'Elimina',
- toggledFavorites: 'Preferiti aggiornati per {{count}} archivio(i)',
- failedUpdateFavorites: 'Aggiornamento preferiti non riuscito',
- archivesDeleted: '{{count}} archivio(i) eliminati',
- failedDeleteArchives: 'Eliminazione archivi non riuscita',
- photoDeleted: 'Foto eliminata',
- failedDeletePhoto: 'Eliminazione foto non riuscita',
- },
- list: {
- name: 'Nome',
- printer: 'Stampante',
- date: 'Data',
- size: 'Dimensione',
- actions: 'Azioni',
- hasTimelapse: 'Ha timelapse',
- },
- log: {
- date: 'Data',
- printName: 'Nome stampa',
- printer: 'Stampante',
- user: 'Utente',
- status: 'Stato',
- duration: 'Durata',
- filament: 'Filamento',
- filamentUsed: 'Filamento usato',
- cost: 'Costo',
- energy: 'Energia',
- energyCost: 'Costo energia',
- completedAt: 'Completato',
- columns: 'Colonne',
- sortBy: 'Ordina per {{column}}',
- allPrinters: 'Tutte le stampanti',
- allUsers: 'Tutti gli utenti',
- allStatuses: 'Tutti gli stati',
- cancelled: 'Annullato',
- skipped: 'Saltato',
- dateFrom: 'Dal',
- dateTo: 'Al',
- noEntries: 'Nessuna voce di registro trovata',
- showing: '{{count}} di {{total}} voci',
- rowsPerPage: 'Righe',
- page: 'Pagina',
- prev: 'Prec.',
- next: 'Succ.',
- clearLog: 'Cancella registro',
- clearLogTitle: 'Cancella registro stampe',
- clearLogConfirm: 'Tutte le voci del registro di stampa verranno eliminate permanentemente. Gli archivi e gli elementi della coda non sono interessati. Questa azione non può essere annullata. Sei sicuro?',
- clearLogButton: 'Cancella tutto',
- cleared: '{{count}} voci di registro cancellate',
- clearFailed: 'Impossibile cancellare il registro stampe',
- deleteEntryTitle: 'Elimina voce del registro stampe',
- deleteEntryConfirm: 'Questa voce verrà rimossa dal registro e i suoi contributi di filamento, tempo e costo verranno scartati dalle statistiche rapide. L\'archivio corrispondente (se presente) non è interessato. Questa azione non può essere annullata.',
- entryDeleted: 'Voce del registro stampe eliminata',
- entryDeleteFailed: 'Impossibile eliminare la voce del registro stampe',
- editEntryTitle: 'Modifica voce del registro stampe',
- editEntryDescription: 'Classifica questa stampa. Il widget Analisi guasti raggruppa per questi valori, quindi gli aggiornamenti vengono riflessi immediatamente nelle statistiche.',
- entryUpdated: 'Voce del registro aggiornata',
- entryUpdateFailed: 'Impossibile aggiornare la voce del registro',
- statuses: {
- completed: 'Completata',
- failed: 'Fallita',
- stopped: 'Fermata',
- cancelled: 'Annullata',
- skipped: 'Saltata',
- },
- },
- },
- // Sticky upload-progress toast (#1625 follow-up)
- dispatchToast: {
- untitled: 'Lavoro di stampa',
- startingPrints: 'Avvio delle stampe',
- progressSummary: '{{complete}}/{{total}} completate • In corso: {{processing}}',
- expandDetails: 'Espandi i dettagli dell\'invio',
- collapseDetails: 'Comprimi i dettagli dell\'invio',
- awaitingPrinter: 'In attesa della stampante…',
- status: {
- processing: 'In corso',
- completed: 'Completata',
- failed: 'Fallita',
- },
- failed: {
- generic: 'Invio fallito',
- upload_failed: 'Caricamento sulla stampante fallito',
- start_command_failed: 'La stampante ha rifiutato il comando di avvio',
- },
- dismiss: 'Chiudi',
- },
- // Pipeline Runs dashboard (#1425 PR C).
- pipelineRuns: {
- title: 'Esecuzioni pipeline',
- loading: 'Caricamento…',
- empty: 'Nessuna esecuzione di pipeline ancora.',
- filter: {
- pipeline: 'Pipeline',
- status: 'Stato',
- target: 'Destinazione',
- all: 'Tutte',
- allPipelines: 'Tutte le pipeline',
- allStatus: 'Tutti gli stati',
- allTargets: 'Tutte le destinazioni',
- clear: 'Pulisci filtri',
- noMatches: 'Nessuna esecuzione corrisponde ai filtri attuali.',
- },
- totalCount_one: '{{n}} esecuzione',
- totalCount_other: '{{n}} esecuzioni',
- copies: '{{n}} copie',
- failedCount: '{{n}} fallite',
- copyN: 'Copia {{n}}',
- retryFailed: 'Riprova fallite',
- retryOf: 'ritentativo di #{{n}}',
- pagination: '{{start}}–{{end}} di {{total}}',
- toast: {
- cancelled: 'Esecuzione annullata',
- cancelFailed: 'Annullamento fallito',
- retryStarted: 'Ritentativo avviato',
- retryFailed: 'Ritentativo fallito',
- cleared: '{{n}} esecuzioni eliminate',
- clearFailed: 'Eliminazione fallita',
- },
- clearLog: 'Cancella cronologia',
- clearConfirmTitle: 'Cancellare la cronologia?',
- clearConfirmBody: 'Eliminare tutte le esecuzioni di pipeline completate, fallite, annullate e con fallimento parziale? Le esecuzioni in corso sono conservate. Questa operazione non può essere annullata.',
- clearConfirmAction: 'Cancella',
- jobStatus: {
- pending: 'in attesa',
- awaiting_printer: 'in attesa stampante',
- queued: 'in coda',
- printing: 'stampa',
- completed: 'completata',
- failed: 'fallita',
- cancelled: 'annullata',
- },
- cancelledByUser: 'Annullato dall\'utente',
- },
- // Queue page
- queue: {
- filamentShort: {
- rowBadge: 'Filamento insufficiente per la bobina assegnata',
- rowTooltip: 'Lo scheduler ha segnalato questo elemento. Premi Play per vedere il deficit per slot e decidere se stampare comunque.',
- confirmTitle: 'Filamento insufficiente',
- confirmIntro: 'La bobina assegnata non puo coprire almeno uno slot. Stampare comunque?',
- lineItem: 'Slot {{slot}}: servono {{required}} g, rimangono {{remaining}} g',
- unknown: 'sconosciuto',
- printAnyway: 'Stampa comunque',
- },
- slicerAmsMapping: {
- rowBadge: 'Slot AMS salvati per questa stampante',
- rowTooltip: 'Questo archivio conserva gli slot AMS esatti scelti dallo slicer, salvati per la stampante di questo elemento. Una ristampa su di essa può riutilizzare quelle bobine invece di rifare l\'abbinamento per tipo e colore.',
- },
- title: 'Coda di stampa',
- subtitle: 'Programma e gestisci i tuoi lavori di stampa',
- // Print modal
- editQueueItem: 'Modifica elemento coda',
- selectAllPlates: 'Seleziona tutte le {{count}} piastre',
- deselectAll: 'Deseleziona tutto',
- printQueued: 'Stampa in coda',
- printQueuedWillStartWhenIdle: 'Si avvierà quando la stampante sarà inattiva',
- itemsQueued: '{{count}} elementi in coda',
- sending: 'Invio...',
- sendingProgress: 'Invio {{current}}/{{total}}...',
- adding: 'Aggiunta...',
- addingProgress: 'Aggiunta {{current}}/{{total}}...',
- savingProgress: 'Salvataggio {{current}}/{{total}}...',
- clearQueue: 'Svuota coda',
- clearHistory: 'Svuota cronologia',
- emptyQueue: 'La coda è vuota',
- position: 'Posizione',
- scheduledTime: 'Ora programmata',
- moveUp: 'Sposta su',
- moveDown: 'Sposta giù',
- startNow: 'Avvia ora',
- printingInProgress: 'Stampa in corso...',
- viewArchive: 'Vedi archivio',
- viewInFileManager: 'Vedi nel Gestore file',
- itemCount: '{{count}} elemento',
- itemCount_plural: '{{count}} elementi',
- dragToReorder: 'Trascina per riordinare (solo ASAP)',
- reorderHint: 'La posizione influisce solo sugli elementi ASAP. Quelli programmati partono all\'orario.',
- sjf: {
- label: 'SJF',
- tooltip: 'Lavoro più breve prima — lo scheduler dà priorità alle stampe più brevi',
- },
- addedBy: 'Aggiunto da {{name}}',
- nextInQueue: 'Prossimo in coda',
- clearPlateSuccess: 'Piatto liberato — pronto per la prossima stampa',
- plateNumber: 'Piatto {{index}}',
- // Batch / quantity
- quantity: 'Quantità',
- quantityHint: 'Crea {{count}} elementi in coda',
- plateQuantityLabel: 'Stampe di {{plate}}',
- plateQuantityTotal_one: '{{count}} stampa in totale',
- plateQuantityTotal_other: '{{count}} stampe in totale',
- batchOrders: {
- title: 'Ordini in lotto',
- emptyTitle: 'Nessun ordine in lotto',
- emptyDescription: 'Metti in coda un file multi-piatto, o più copie di un piatto, e l\'ordine compare qui con il suo avanzamento.',
- filter: {
- active: 'Attivi',
- completed: 'Completati',
- cancelled: 'Annullati',
- all: 'Tutti',
- },
- status: {
- active: 'Attivo',
- completed: 'Completato',
- cancelled: 'Annullato',
- },
- noTargets: 'Solo raggruppamento',
- noTargetsHint: 'Creato prima delle quantità per piatto: tiene traccia delle stampe in coda anziché di un obiettivo.',
- dispatchRemaining: 'Accoda {{count}} rimanenti',
- dispatchPlate: 'Accoda le rimanenti',
- strandedPlate: 'Nessuna impostazione da copiare',
- strandedNotice: 'Impossibile accodare {{runs}} delle {{owed}} stampe ancora dovute: per quella piastra non resta alcuna stampa in coda o completata da cui copiare le impostazioni. Accoda la piastra una volta dal file oppure annulla la commessa.',
- dispatched: 'Stampe rimanenti accodate per {{name}}',
- plateProgress: '{{completed}} di {{target}} fatte',
- remaining: '{{count}} ancora dovute',
- failed: '{{count}} fallite',
- printing: '{{count}} in stampa',
- wholeFile: 'Intero file',
- due: 'Scadenza {{date}}',
- costSoFar: '{{amount}} finora',
- costRemaining: '({{amount}} da spendere)',
- },
- activeBatches: 'Lotti attivi',
- batchProgress: '{{completed}} di {{total}} completati',
- cancelBatch: 'Annulla rimanenti',
- batchCancelled: 'Elementi rimanenti del lotto annullati',
- cancelBatchConfirmTitle: 'Annulla lotto',
- cancelBatchConfirmMessage: 'Chiudere questa commessa? Le stampe ancora in coda vengono annullate e la commessa smette di richiedere ciò che non ha prodotto.',
- batch: {
- defaultName: 'Lotto',
- label: '{{count}} elemento',
- label_plural: '{{count}} elementi',
- pendingCount: '{{count}} in attesa',
- pendingCount_plural: '{{count}} in attesa',
- expand: 'Espandi lotto',
- collapse: 'Comprimi lotto',
- groupAsBatch: 'Raggruppa come lotto…',
- groupAsBatchDescription: 'Combina gli {{count}} elementi selezionati in un unico lotto comprimibile.',
- nameLabel: 'Nome lotto',
- namePlaceholder: 'es. Regali del venerdì',
- create: 'Crea lotto',
- ungroup: 'Separa',
- ungroupConfirmTitle: 'Separare il lotto?',
- ungroupConfirmMessage: 'Gli elementi resteranno in coda ma non saranno più raggruppati.',
- dragGroup: 'Trascina gruppo',
- },
- tabs: {
- batches: 'Lotti',
- queue: 'Coda',
- history: 'Cronologia',
- timeline: 'Linea temporale',
- pipelines: 'Pipeline',
- },
- layout: {
- flatList: 'Elenco',
- byPrinter: 'Per stampante',
- groupByPrinter: 'Raggruppa per stampante',
- },
- history: {
- emptyTitle: 'Nessuna cronologia',
- emptyDescription: 'Le stampe completate, annullate e fallite appariranno qui.',
- showMore: 'Mostra altri',
- showingCount: 'Visualizzati {{shown}} di {{total}}',
- },
- dragGhost: {
- multiCount: '{{count}} elementi',
- batch: '{{name}} ({{count}} copia)',
- batch_plural: '{{name}} ({{count}} copie)',
- },
- // Sections
- sections: {
- currentlyPrinting: 'In stampa',
- queued: 'In coda',
- history: 'Cronologia',
- },
- // Status
- status: {
- pending: 'In attesa',
- waiting: 'In attesa',
- printing: 'In stampa',
- paused: 'In pausa',
- completed: 'Completato',
- failed: 'Fallito',
- skipped: 'Saltato',
- cancelled: 'Annullato',
- },
- // Summary cards
- summary: {
- printing: 'In stampa',
- queued: 'In coda',
- totalTime: 'Tempo totale coda',
- totalWeight: 'Peso totale della coda',
- history: 'Cronologia',
- },
- // Filters
- filter: {
- allPrinters: 'Tutte le stampanti',
- unassigned: 'Non assegnato',
- allStatus: 'Tutti gli stati',
- allLocations: 'Tutte le posizioni',
- any: 'Qualsiasi',
- },
- // Sort
- sort: {
- byPosition: 'Ordina per posizione',
- byName: 'Ordina per nome',
- byPrinter: 'Ordina per stampante',
- bySchedule: 'Ordina per programma',
- byDate: 'Ordina per data',
- ascendingOldest: 'Crescente (più vecchi)',
- descendingNewest: 'Decrescente (più recenti)',
- },
- // Badges
- badges: {
- staged: 'In staging',
- requiresPrevious: 'Richiede successo precedente',
- autoPowerOff: 'Spegnimento automatico',
- gcodeInjection: 'G-code',
- },
- // Empty state
- empty: {
- title: 'Nessuna stampa programmata',
- description: 'Programma una stampa dalla pagina Archivi usando l\'opzione "Programma" nel menu contestuale, o trascina i file per iniziare.',
- },
- // Time
- time: {
- etaIfStartedNow: 'Orario di completamento se questo lavoro iniziasse ora',
- whenFree: 'Quando una stampante è libera',
- overdue: 'Scaduto',
- now: 'Ora',
- lessThanMinute: 'Tra meno di un minuto',
- inMinutes: 'Tra {{count}} min',
- inHours: 'Tra {{count}} ore',
- },
- // Actions
- actions: {
- startPrint: 'Avvia Stampa',
- stopPrint: 'Ferma Stampa',
- requeue: 'Rimetti in coda',
- },
- // Bulk edit
- bulkEdit: {
- title: 'Modifica {{count}} elemento',
- title_plural: 'Modifica {{count}} elementi',
- description: 'Solo le impostazioni modificate saranno applicate agli elementi selezionati.',
- printer: 'Stampante',
- noChange: '— Nessun cambio —',
- queueOptions: 'Opzioni coda',
- staged: 'In staging (avvio manuale)',
- autoPowerOff: 'Spegnimento automatico dopo stampa',
- requirePrevious: 'Richiede successo precedente',
- gcodeInjection: 'Inietta G-code',
- printOptions: 'Opzioni stampa',
- bedLevelling: 'Livellamento piatto',
- flowCalibration: 'Calibrazione flusso',
- vibrationCalibration: 'Calibrazione vibrazioni',
- layerInspection: 'Controllo primo layer',
- timelapse: 'Timelapse',
- useAms: 'Usa AMS',
- nozzleOffsetCali: 'Calibrazione offset ugelli',
- applyChanges: 'Applica modifiche',
- selectAll: 'Seleziona tutto',
- deselectAll: 'Deseleziona tutto',
- selected: '{{count}} selezionati',
- editSelected: 'Modifica selezionati',
- cancelSelected: 'Annulla selezionati',
- },
- // Confirmations
- confirm: {
- cancelTitle: 'Annulla stampa programmata',
- cancelMessage: 'Sei sicuro di annullare "{{name}}"?',
- stopTitle: 'Ferma Stampa',
- stopMessage: 'Sei sicuro di fermare la stampa corrente "{{name}}"? Questo annullerà il lavoro sulla stampante.',
- removeTitle: 'Rimuovi dalla cronologia',
- removeMessage: 'Sei sicuro di rimuovere "{{name}}" dalla cronologia coda?',
- clearHistoryTitle: 'Svuota cronologia',
- clearHistoryMessage: 'Sei sicuro di rimuovere {{count}} elemento(i) dalla cronologia?',
- cancelButton: 'Annulla Stampa',
- stopButton: 'Ferma Stampa',
- thisPrint: 'questa stampa',
- thisItem: 'questo elemento',
- },
- // Toast messages
- toast: {
- cancelled: 'Elemento coda annullato',
- cancelFailed: 'Annullamento non riuscito',
- removed: 'Elemento coda rimosso',
- keptForOrder: 'Annullato anziché rimosso: è l\'unica stampa da cui la commessa può riaccodare questa piastra',
- historyKeptForOrders: '{{kept}} conservate perché servono ancora alle commesse.',
- removeFailed: 'Rimozione non riuscita',
- stopped: 'Stampa fermata',
- stopFailed: 'Impossibile fermare stampa',
- released: 'Stampa rilasciata in coda',
- startFailed: 'Avvio stampa non riuscito',
- reorderFailed: 'Riordino coda non riuscito',
- historyCleared: 'Cancellati {{count}} elementi cronologia',
- clearHistoryFailed: 'Svuotamento cronologia non riuscito',
- updateFailed: 'Aggiornamento elementi non riuscito',
- bulkCancelled: 'Annullati {{count}} elementi',
- bulkCancelFailed: 'Annullamento elementi non riuscito',
- batchCreated: 'Lotto «{{name}}» creato',
- batchCreateFailed: 'Creazione lotto non riuscita',
- batchUngrouped: '{{count}} elemento/i separato/i',
- batchUngroupFailed: 'Separazione del lotto non riuscita',
- resumedAfterFailure: 'Coda ripresa — {{restored}} processo/i ripristinato/i come in attesa',
- resumeAfterFailureFailed: 'Ripresa della coda non riuscita',
- },
- resumeAfterFailure: {
- banner: '{{printer}} è bloccata da un errore di stampa precedente — {{count}} processo/i saltato/i',
- bannerHint: 'Risolvi il problema della stampante, poi riprendi per ripristinare i processi saltati e rimuovere il blocco.',
- button: 'Riprendi dopo errore',
- confirmTitle: 'Riprendere la coda dopo l\'errore?',
- confirmMessage: 'Ripristinare {{count}} processo/i saltato/i su {{printer}} come in attesa e rimuovere il blocco della stampa precedente. Assicurati che la stampante sia pronta prima di continuare.',
- },
- // Timeline view
- timeline: {
- listView: 'Lista',
- timelineView: 'Cronologia',
- unassigned: 'Non assegnato',
- noData: 'Nessuna stampa programmata per questo giorno',
- nothingCommitted: 'Nessuna pianificazione confermata in questa finestra. Elementi preparati, in attesa e ASAP su stampanti inattive non sono mostrati — imposta un orario pianificato o rilascia un elemento preparato per vederlo qui.',
- allDoneBy: 'Tutte le stampe completate entro le {{time}}',
- staged: 'In attesa',
- filterAll: 'Mostra tutto',
- filterPrinting: 'In stampa',
- filterQueued: 'In coda',
- time: {
- anyMoment: 'a momenti',
- minutesLeft: '{{minutes}}m rimanenti',
- hoursLeft: '{{hours}}h rimanenti',
- hoursMinutesLeft: '{{hours}}h {{minutes}}m rimanenti',
- },
- day: {
- previous: 'Giorno precedente',
- next: 'Giorno successivo',
- today: 'Oggi',
- },
- window: {
- back12h: 'Indietro di 12 ore',
- forward12h: 'Avanti di 12 ore',
- now: 'Adesso',
- },
- printerColumnHeader: 'Stampante',
- },
- // Permissions
- permissions: {
- noStopPrint: 'Non hai il permesso di fermare stampe',
- noStartPrint: 'Non hai il permesso di avviare stampe',
- noEdit: 'Non hai il permesso di modificare questo elemento coda',
- noCancel: 'Non hai il permesso di annullare questo elemento coda',
- noRequeue: 'Non hai il permesso di rimettere in coda elementi',
- noRemove: 'Non hai il permesso di rimuovere questo elemento coda',
- noClearHistory: 'Non hai il permesso di svuotare tutta la cronologia',
- noEditItems: 'Non hai il permesso di modificare elementi coda',
- noCancelItems: 'Non hai il permesso di annullare elementi coda',
- },
- },
- // Statistics page
- stats: {
- title: 'Statistiche',
- subtitle: 'Trascina i widget per riordinare. Clicca l\'icona occhio per nascondere.',
- overview: 'Panoramica',
- totalPrints: 'Stampe totali',
- successRate: 'Tasso di successo',
- totalPrintTime: 'Tempo totale di stampa',
- printTime: 'Tempo di stampa',
- totalFilament: 'Filamento totale usato',
- filamentUsed: 'Filamento usato',
- filamentCost: 'Costo filamento',
- totalCost: 'Costo totale',
- energyUsed: 'Energia usata',
- energyCost: 'Costo energia',
- energyWarmingUpTooltip: 'Il tracciamento energia sta ancora raccogliendo snapshot orari. I totali per intervallo diventeranno accurati quando esisterà almeno uno snapshot prima dell’intervallo selezionato. I primi valori potrebbero essere sottostimati.',
- averagePrintTime: 'Tempo medio di stampa',
- printsPerDay: 'Stampe al giorno',
- byPrinter: 'Per stampante',
- printsByPrinter: 'Stampe per stampante',
- byMaterial: 'Per materiale',
- byMonth: 'Per mese',
- last7Days: 'Ultimi 7 giorni',
- last30Days: 'Ultimi 30 giorni',
- last90Days: 'Ultimi 90 giorni',
- allTime: 'Sempre',
- // Widgets
- quickStats: 'Statistiche rapide',
- printActivity: 'Attivita di stampa',
- filamentTypes: 'Tipi di filamento',
- filamentTrends: 'Trend filamento',
- failureAnalysis: 'Analisi guasti',
- timeAccuracy: 'Accuratezza tempo',
- successful: 'Riuscite:',
- failed: 'Fallite:',
- cancelled: 'Annullate:',
- perfectEstimate: '100% = stima perfetta',
- noTimeAccuracyData: 'Nessun dato accuratezza tempo',
- noFilamentData: 'Nessun dato filamento',
- noPrinterData: 'Nessun dato stampante',
- noPrintData: 'Nessun dato stampa',
- noPrintDataLast30Days: 'Nessun dato stampa negli ultimi 30 giorni',
- failureReasons: 'Cause guasto',
- topFailureReasons: 'Cause principali',
- failedPrintsCount: '{{failed}} / {{total}} stampe fallite',
- lastWeekRate: 'Settimana scorsa: {{rate}}%',
- // Actions
- resetLayout: 'Reimposta layout',
- recalculateCosts: 'Ricalcola costi',
- recalculateCostsHint: 'Ricalcola tutti i costi archivi usando i prezzi filamento correnti',
- exportStats: 'Esporta statistiche',
- exportAsCsv: 'Esporta come CSV',
- exportAsExcel: 'Esporta come Excel',
- hiddenCount: '{{count}} Nascosti',
- // Toast
- exportDownloaded: 'Export scaricato',
- exportFailed: 'Export non riuscito',
- layoutReset: 'Layout reimpostato',
- recalculatedCosts: 'Costi ricalcolati per {{count}} archivi',
- recalculateFailed: 'Ricalcolo costi non riuscito',
- // Loading
- loadingStats: 'Caricamento statistiche...',
- // Permissions
- noPermissionResetLayout: 'Non hai il permesso di reimpostare il layout',
- noPermissionRecalculate: 'Non hai il permesso di ricalcolare i costi',
- noPrintDataInRange: 'Nessun dato nel periodo selezionato',
- periodFilament: 'Filamento utilizzato',
- periodCost: 'Costo',
- avgPerPrint: 'Media per stampa',
- usageOverTime: 'Utilizzo nel tempo',
- energyOverTime: 'Energia nel tempo',
- filamentByWeight: 'Peso',
- printDuration: 'Durata stampa',
- printerUtilization: 'Utilizzo stampante',
- filamentSuccess: 'Successo per materiale',
- printHabits: 'Abitudini di stampa',
- printTimeOfDay: 'Ora di stampa',
- colorDistribution: 'Distribuzione colori',
- noColorData: 'Nessun dato colore disponibile',
- records: 'Record',
- longestPrint: 'Stampa più lunga',
- heaviestPrint: 'Stampa più pesante',
- mostExpensivePrint: 'Più costosa',
- busiestDay: 'Giorno più attivo',
- successStreak: 'Serie di successi',
- streakPrint: 'stampa consecutiva',
- streakPrints: '{{count}} stampe consecutive',
- printerStats: 'Statistiche stampante',
- hours: 'ore',
- avgPrints: 'Media stampe',
- noArchiveData: 'Nessun dato di stampa disponibile',
- filamentByTime: 'Tempo',
- avgWeight: 'Media peso',
- avgTime: 'Media tempo',
- filamentByPrints: 'Stampe',
- timeframe: {
- today: 'Oggi',
- 'this-week': 'Questa settimana',
- 'this-month': 'Questo mese',
- 'last-7': 'Ultimi 7 giorni',
- 'last-30': 'Ultimi 30 giorni',
- 'last-90': 'Ultimi 90 giorni',
- 'this-year': 'Quest\'anno',
- 'all-time': 'Tutto',
- custom: 'Personalizzato',
- from: 'Da',
- to: 'A',
- },
- allUsers: 'Tutti gli utenti',
- noUser: 'Nessun utente (Sistema)',
- filterByUser: 'Filtra per utente',
- },
- // Maintenance page
- maintenance: {
- title: 'Manutenzione',
- overview: 'Panoramica',
- allOk: 'Tutta la manutenzione aggiornata',
- dueCount: '{{count}} elemento in scadenza',
- dueCount_plural: '{{count}} elementi in scadenza',
- warningCount: '{{count}} avviso',
- warningCount_plural: '{{count}} avvisi',
- totalPrintTime: 'Tempo totale di stampa',
- nextMaintenance: 'Prossima manutenzione',
- nothingDue: 'Niente in scadenza',
- tasks: 'Attivita',
- lastPerformed: 'Ultima esecuzione',
- interval: 'Intervallo',
- hoursRemaining: '{{hours}}h rimanenti',
- hoursOverdue: '{{hours}}h in ritardo',
- markDone: 'Segna come fatto',
- performMaintenance: 'Esegui manutenzione',
- history: 'Cronologia',
- noHistory: 'Nessuna cronologia manutenzione',
- editPrintHours: 'Modifica ore stampa',
- currentHours: 'Ore attuali',
- // Tabs
- statusTab: 'Stato',
- settingsTab: 'Impostazioni',
- // Status
- overdueCount: '{{count}} in ritardo',
- dueSoonCount: '{{count}} in scadenza',
- dueSoon: 'In scadenza',
- allGood: 'Tutto ok',
- overdueBy: 'In ritardo di {{duration}}',
- dueIn: 'Scade tra {{duration}}',
- timeLeft: '{{duration}} rimanenti',
- // Duration formats
- day: '1 giorno',
- days: '{{count}} giorni',
- week: '1 settimana',
- weeks: '{{count}} settimane',
- month: '1 mese',
- months: '{{count}} mesi',
- year: '1 anno',
- // Settings
- maintenanceTypes: 'Tipi di manutenzione',
- maintenanceTypesDescription: 'Tipi di sistema e tue attivita personalizzate',
- addCustomType: 'Aggiungi tipo personalizzato',
- restoreDefaults: 'Ripristina attivita predefinite',
- intervalType: 'Tipo intervallo',
- intervalValue: 'Intervallo ({{type}})',
- icon: 'Icona',
- documentationLink: 'Link documentazione (opzionale)',
- assignToPrinters: 'Assegna alle stampanti',
- selectAtLeastOnePrinter: 'Seleziona almeno una stampante',
- addType: 'Aggiungi tipo',
- custom: 'Personalizzato',
- printHours: 'Ore di stampa',
- calendarDays: 'Giorni calendario',
- exampleName: 'es. Sostituisci filtro HEPA',
- viewDocumentation: 'Vedi documentazione',
- timeBasedInterval: 'Intervallo basato sul tempo',
- // Interval overrides
- intervalOverrides: 'Override intervallo',
- intervalOverridesDescription: 'Personalizza intervalli per stampanti specifiche',
- // Printer assignment
- assignedToPrinters: 'Assegnato alle stampanti:',
- noPrintersAssigned: 'Nessuna stampante assegnata',
- addPrinterShort: 'Aggiungi:',
- printersAssignedClick: '{{count}} stampante(i) assegnata - clicca per gestire',
- removeFromPrinter: 'Rimuovi da questa stampante',
- // Types
- types: {
- lubricateCarbonRods: 'Lubrifica aste in carbonio',
- lubricateRails: 'Lubrifica guide lineari',
- cleanNozzle: 'Pulisci ugello/Hotend',
- checkBelts: 'Controlla tensione cinghie',
- cleanBuildPlate: 'Pulisci piatto',
- checkExtruder: 'Controlla ingranaggi estrusore',
- checkCooling: 'Controlla ventole raffreddamento',
- generalInspection: 'Ispezione generale',
- cleanCarbonRods: 'Pulisci aste in carbonio',
- lubricateSteelRods: 'Lubrifica aste in acciaio',
- cleanSteelRods: 'Pulisci aste in acciaio',
- cleanLinearRails: 'Pulisci guide lineari',
- checkPtfeTube: 'Controlla tubo PTFE',
- replaceHepaFilter: 'Sostituisci filtro HEPA',
- replaceCarbonFilter: 'Sostituisci filtro carbone',
- lubricateLeftNozzleRail: 'Lubrifica guida ugello sinistro',
- },
- // Toast
- maintenanceComplete: 'Manutenzione segnata come completata',
- typeUpdated: 'Tipo manutenzione aggiornato',
- typeDeleted: 'Tipo manutenzione eliminato',
- defaultsRestored: 'Ripristinate {{count}} attivita predefinite',
- printHoursUpdated: 'Ore di stampa aggiornate',
- printerAssigned: 'Stampante assegnata',
- printerRemoved: 'Stampante rimossa',
- // Confirmation
- deleteTypeConfirm: 'Eliminare "{{name}}"?',
- deleteSystemTypeTitle: 'Eliminare attività di manutenzione predefinita?',
- deleteSystemTypeMessage: 'Sei sicuro di voler eliminare l\'attività di manutenzione predefinita "{{name}}"?',
- // Permissions
- noPermissionUpdate: 'Non hai il permesso di aggiornare elementi manutenzione',
- noPermissionPerform: 'Non hai il permesso di eseguire manutenzione',
- noPermissionEditTypes: 'Non hai il permesso di modificare tipi manutenzione',
- noPermissionDeleteTypes: 'Non hai il permesso di eliminare tipi manutenzione',
- noPermissionEditHours: 'Non hai il permesso di modificare ore stampa',
- noPermissionRemovePrinter: 'Non hai il permesso di rimuovere assegnazioni stampanti',
- noPermissionAssignPrinter: 'Non hai il permesso di assegnare stampanti',
- noPermissionEditIntervals: 'Non hai il permesso di modificare intervalli',
- // Configure link
- configureSettings: 'Configura tipi e intervalli manutenzione',
- },
- // Settings page
- settings: {
- sliceEngine: 'Motore di slicing',
- sliceEngineSidecar: 'Sidecar del server',
- sliceEngineSidecarHint: 'Lo slicing viene eseguito sul server, nel container sidecar dello slicer.',
- sliceEngineBrowser: 'Nel browser',
- sliceEngineBrowserHint: 'Lo slicing viene eseguito su questo dispositivo, senza server.',
- title: 'Impostazioni',
- general: 'Generale',
- // Tab names
- tabs: {
- general: 'Generale',
- smartPlugs: 'Prese smart',
- sensors: 'Sensori',
- notifications: 'Notifiche',
- queue: 'Flusso',
- queueDispatch: 'Coda e Dispatch',
- queuePipelines: 'Pipeline',
- filament: 'Filamento',
- network: 'Rete',
- apiKeys: 'Chiavi API',
- virtualPrinter: 'Stampante virtuale',
- failureDetection: 'Rilevamento guasti',
- users: 'Utenti',
- backup: 'Backup',
- emailAuth: 'Autenticazione Email',
- ldap: 'LDAP',
- twoFa: 'Autenticazione 2FA',
- oidc: 'SSO / OIDC',
- security: 'Sicurezza',
- spoolbuddy: 'SpoolBuddy',
- },
- ldap: {
- title: 'Autenticazione LDAP',
- enabledDesc: "L'autenticazione LDAP è attiva",
- disabledDesc: "L'autenticazione LDAP è disattivata",
- disabledHint: 'Configura e salva le impostazioni LDAP qui sotto, poi attiva.',
- enabled: 'Autenticazione LDAP attivata',
- disabled: 'Autenticazione LDAP disattivata',
- feature1: 'Gli utenti possono accedere con le credenziali LDAP',
- feature2: "L'account amministratore locale rimane come fallback",
- feature3: 'I gruppi LDAP vengono mappati ai gruppi BamBuddy al login',
- serverConfig: 'Configurazione server LDAP',
- serverUrl: 'URL del server',
- serverUrlHint: 'Usa ldap:// per standard o ldaps:// per connessioni SSL',
- security: 'Sicurezza',
- securityHint: 'StartTLS aggiorna una connessione semplice a TLS. LDAPS usa TLS fin dall\'inizio.',
- bindDn: 'Bind DN (account di servizio)',
- bindPassword: 'Password Bind',
- searchBase: 'Base DN di ricerca',
- userFilter: 'Filtro di ricerca utente',
- userFilterHint: '{username} viene sostituito con il nome utente. Usa (uid={username}) per OpenLDAP.',
- advanced: 'Avanzate',
- autoProvision: 'Provisioning automatico utenti',
- autoProvisionHint: 'Crea automaticamente un account BamBuddy al primo accesso LDAP',
- defaultGroup: 'Gruppo predefinito',
- defaultGroupNone: '— Nessuno (nessun fallback) —',
- defaultGroupHint: 'Gruppo di fallback assegnato quando un utente LDAP si autentica ma non è presente in nessun gruppo LDAP mappato. Lascia vuoto per lasciare gli utenti non mappati senza autorizzazioni.',
- groupMapping: 'Mappatura gruppi (JSON)',
- groupMappingHint: 'Mappa i DN dei gruppi LDAP ai gruppi BamBuddy. Gruppi disponibili: ',
- testConnection: 'Test connessione',
- settingsSaved: 'Impostazioni LDAP salvate',
- errors: {
- serverRequired: "L'URL del server LDAP è obbligatorio",
- searchBaseRequired: 'Il Base DN di ricerca è obbligatorio',
- enableAuthFirst: "Attiva prima l'autenticazione",
- configureLdapFirst: 'Salva prima le impostazioni LDAP',
- },
- },
- // Email settings
- email: {
- smtpSettings: 'Configurazione SMTP',
- smtpHost: 'Server SMTP',
- smtpPort: 'Porta SMTP',
- security: 'Sicurezza',
- authentication: 'Autenticazione',
- username: 'Nome utente',
- password: 'Password',
- fromEmail: 'Email mittente',
- fromName: 'Nome mittente',
- testConnection: 'Testa connessione SMTP',
- testRecipient: 'Email destinatario test',
- sendTest: 'Invia email di test',
- sending: 'Invio...',
- save: 'Salva impostazioni',
- saving: 'Salvataggio...',
- advancedAuth: 'Autenticazione avanzata',
- advancedAuthEnabled: 'L\'autenticazione avanzata è abilitata',
- advancedAuthEnabledDesc: 'Le funzionalità di gestione utenti via email sono attive. I nuovi utenti riceveranno password generate automaticamente via email e potranno reimpostare la password tramite la funzione di recupero.',
- advancedAuthDisabled: 'L\'autenticazione avanzata è disabilitata',
- advancedAuthDisabledDesc: 'Abilita l\'autenticazione avanzata per attivare le funzionalità email per la gestione utenti.',
- enable: 'Abilita',
- disable: 'Disabilita',
- feature1: 'Le password vengono generate automaticamente e inviate via email ai nuovi utenti',
- feature2: 'Gli utenti possono accedere con nome utente o email',
- feature3: 'La funzione di recupero password è disponibile',
- feature4: 'Gli amministratori possono reimpostare le password utente via email',
- // Error messages
- errors: {
- requiredFields: 'Compilare tutti i campi obbligatori',
- usernameRequired: 'Il nome utente è obbligatorio quando l\'autenticazione è abilitata',
- enterTestEmail: 'Inserire un indirizzo email di test',
- smtpServerAndEmail: 'Compilare Server SMTP e Email mittente prima di testare',
- usernamePasswordRequired: 'Nome utente e password sono obbligatori quando l\'autenticazione è abilitata',
- configureSmtpFirst: 'Configurare e testare le impostazioni SMTP prima',
- enableAuthFirst: 'Per utilizzare le funzionalità basate sulla posta elettronica, è necessario prima abilitare l\'autenticazione.',
- },
- // Success messages
- success: {
- settingsSaved: 'Impostazioni SMTP salvate con successo',
- },
- // Security options
- securityOptions: {
- starttls: 'STARTTLS (Porta 587)',
- ssl: 'SSL/TLS (Porta 465)',
- none: 'Nessuna (Porta 25)',
- },
- // Authentication options
- authOptions: {
- enabled: 'Abilitata',
- disabled: 'Disabilitata',
- },
- },
- appearance: 'Aspetto',
- notifications: 'Notifiche',
- smartPlugs: 'Prese smart',
- spoolman: 'Spoolman',
- updates: 'Aggiornamenti',
- language: 'Lingua',
- languageDescription: 'Seleziona la lingua preferita',
- theme: 'Tema',
- themeLight: 'Chiaro',
- themeDark: 'Scuro',
- themeSystem: 'Sistema',
- defaultView: 'Vista predefinita',
- defaultViewDescription: 'Pagina da mostrare all\'apertura dell\'app',
- checkForUpdates: 'Controlla aggiornamenti',
- autoUpdate: 'Aggiornamento automatico',
- currentVersion: 'Versione attuale',
- latestVersion: 'Ultima versione',
- upToDate: 'Sei aggiornato',
- updateAvailable: 'Aggiornamento disponibile',
- // Notifications
- notificationLanguage: 'Lingua notifiche',
- notificationLanguageDescription: 'Lingua per notifiche push',
- bedCooledThreshold: 'Soglia raffreddamento piatto',
- bedCooledThresholdDescription: 'Temperatura sotto la quale il piatto è considerato raffreddato dopo una stampa',
- userNotificationsEnabled: 'Notifiche utente',
- userNotificationsEnabledDescription: "Abilita il menu notifiche utente e le notifiche e-mail per gli eventi di stampa. Richiede l'autenticazione avanzata.",
- userNotificationsDisabledHint: "Abilita l'autenticazione avanzata per usare le notifiche utente.",
- notificationProviders: 'Provider notifiche',
- addProvider: 'Aggiungi provider',
- editProvider: 'Modifica provider',
- providerType: 'Tipo provider',
- testNotification: 'Notifica di test',
- testSuccess: 'Notifica di test inviata',
- testFailed: 'Invio notifica di test fallito',
- quietHours: 'Ore silenziose',
- quietHoursDescription: 'Non disturbare in queste ore',
- quietHoursStart: 'Inizio',
- quietHoursEnd: 'Fine',
- events: {
- title: 'Eventi notifica',
- printStart: 'Stampa avviata',
- printComplete: 'Stampa completata',
- printFailed: 'Stampa fallita',
- printStopped: 'Stampa interrotta',
- printProgress: 'Avanzamento',
- printProgressDescription: 'Notifica al 25%, 50%, 75%',
- printerOffline: 'Stampante offline',
- printerError: 'Errore stampante',
- filamentLow: 'Filamento in esaurimento',
- maintenanceDue: 'Manutenzione dovuta',
- maintenanceDueDescription: 'Notifica quando serve manutenzione',
- },
- // Smart Plugs
- smartPlug: {
- title: 'Prese smart',
- add: 'Aggiungi presa smart',
- edit: 'Modifica presa smart',
- name: 'Nome',
- ipAddress: 'Indirizzo IP',
- linkedPrinter: 'Stampante collegata',
- autoOn: 'Accensione automatica',
- autoOnDescription: 'Accendi all\'avvio stampa',
- autoOff: 'Spegnimento automatico',
- autoOffDescription: 'Spegni dopo il completamento',
- offDelay: 'Ritardo spegnimento',
- offDelayMinutes: 'Minuti dopo la stampa',
- offDelayTemp: 'Quando ugello sotto temperatura',
- currentState: 'Stato attuale',
- turnOn: 'Accendi',
- turnOff: 'Spegni',
- },
- // Filament Tracking Mode
- filamentTracking: 'Tracciamento filamento',
- filamentTrackingDesc: 'Scegli come tracciare le bobine di filamento. Puoi usare l\'inventario integrato o collegare un server Spoolman esterno.',
- autoAddUnknownRfid: 'Aggiungi automaticamente bobine RFID sconosciute',
- autoAddUnknownRfidDesc: 'Crea automaticamente una voce di inventario quando viene rilevata una bobina con tag RFID sconosciuto. Disabilita se registri manualmente le nuove bobine in anticipo per evitare duplicati.',
- filamentChecks: 'Controlli filamento',
- disableFilamentWarnings: 'Disabilita avvisi filamento',
- disableFilamentWarningsDesc: 'Non mostrare avvisi per filamento insufficiente durante la stampa o l\'accodamento',
- preferLowestFilament: 'Preferisci il filamento con meno residuo',
- preferLowestFilamentDesc: 'Quando più bobine corrispondono, usa quella con meno filamento rimanente',
- preferLowestFilamentBackupNote: 'Ha effetto solo se AMS Filament Backup è abilitato sulla stampante — altrimenti la stampante non può passare a una seconda bobina quando quella scelta finisce.',
- trackingModeBuiltIn: 'Inventario integrato',
- trackingModeBuiltInDesc: 'Riconoscimento RFID automatico e tracciamento dell\'uso inclusi',
- trackingModeSpoolmanDesc: 'Server esterno per la gestione del filamento',
- builtInFeatureRfid: 'Rileva automaticamente le bobine Bambu Lab RFID nell\'AMS',
- builtInFeatureUsage: 'Traccia il consumo di filamento per stampa',
- builtInFeatureCatalog: 'Gestisci bobine, colori e profili K-factor',
- builtInFeatureThirdParty: 'Le bobine di terze parti possono essere assegnate alle bobine dell\'inventario',
- amsSyncButton: 'Sincronizza pesi dall\'AMS',
- amsSyncTitle: 'Sincronizza pesi bobine dall\'AMS',
- amsSyncMessage: 'Questo sovrascriverà tutti i pesi delle bobine dell\'inventario con i valori attuali di percentuale rimanente dell\'AMS dalle stampanti connesse. Usa questa funzione per recuperare dati di peso corrotti. Le stampanti devono essere online.',
- amsSyncing: 'Sincronizzazione...',
- amsSyncSuccess: '{{synced}} bobina/e sincronizzata/e, {{skipped}} saltata/e',
- amsSyncError: 'Impossibile sincronizzare i pesi dall\'AMS',
- spoolmanAmsSyncButton: 'Sincronizza i pesi Spoolman dall\'AMS',
- spoolmanAmsSyncTitle: 'Sincronizza i pesi delle bobine Spoolman dall\'AMS',
- spoolmanAmsSyncMessage: 'Questo aggiornerà i pesi di tutte le bobine Spoolman in base ai valori di riempimento AMS correnti delle stampanti connesse. Le stampanti devono essere online.',
- spoolmanAmsSyncing: 'Sincronizzazione...',
- spoolmanAmsSyncSuccess: '{{synced}} bobina/e sincronizzata/e, {{skipped}} saltata/e',
- spoolmanAmsSyncError: 'Impossibile sincronizzare i pesi Spoolman dall\'AMS',
- spoolmanAmsSyncErrorUnreachable: 'Sincronizzazione fallita (Spoolman non raggiungibile)',
- spoolmanAmsSyncErrorNotConfigured: 'Sincronizzazione fallita (Spoolman non configurato)',
- spoolmanNotConfigured: 'Spoolman non configurato',
- // Spoolman filament catalog section in spool catalog settings
- spoolmanFilamentCatalogTitle: 'Catalogo filamenti Spoolman',
- spoolmanFilamentCatalogDesc: 'Nomi dei filamenti e pesi tara dalla tua istanza Spoolman. Nome e peso bobina sono modificabili qui; tutte le altre proprietà sono gestite direttamente in Spoolman.',
- // Spoolman settings
- spoolmanUrl: 'URL Spoolman',
- spoolmanUrlHint: 'URL del server Spoolman (es. http://localhost:7912)',
- spoolmanConnected: 'Connesso',
- spoolmanDisconnected: 'Disconnesso',
- status: 'Stato',
- connect: 'Connetti',
- disconnect: 'Disconnetti',
- howSyncWorks: 'Come funziona la sincronizzazione',
- syncInfoRfidOnly: 'Solo le bobine ufficiali Bambu Lab con RFID vengono sincronizzate',
- syncInfoAutoCreate: 'Le nuove bobine vengono create automaticamente in Spoolman alla prima sincronizzazione',
- syncInfoThirdPartySkipped: 'Le bobine non Bambu Lab (terze parti, ricaricate) vengono saltate',
- linkingExistingSpools: 'Collegamento bobine esistenti',
- linkingExistingSpoolsDesc: 'Per collegare le bobine Spoolman esistenti all\'AMS, passa il mouse su uno slot AMS e clicca "Collega a Spoolman".',
- syncMode: 'Modalità sincronizzazione',
- syncModeAuto: 'Automatica',
- syncModeManual: 'Solo manuale',
- syncModeAutoDesc: 'I dati AMS si sincronizzano automaticamente quando vengono rilevate modifiche',
- syncModeManualDesc: 'Sincronizzazione solo quando attivata manualmente',
- syncAmsData: 'Sincronizza dati AMS',
- syncAmsDataDesc: 'Sincronizza manualmente i dati AMS della stampante su Spoolman',
- allPrinters: 'Tutte le stampanti',
- // Default printer
- noDefaultPrinter: 'Nessuna predefinita (chiedi ogni volta)',
- // Sidebar
- sidebarOrder: 'Ordine barra laterale',
- // Camera
- saveThumbnails: 'Salva miniature',
- captureFinishPhoto: 'Acquisisci foto finale',
- noPrintersConfigured: 'Nessuna stampante configurata',
- // Archive settings
- archiveMode: {
- always: 'Crea sempre voce archivio',
- never: 'Non creare mai voce archivio',
- ask: 'Chiedi ogni volta',
- },
- // Updates
- checkForUpdatesLabel: 'Controlla aggiornamenti',
- checkPrinterFirmware: 'Controlla firmware stampante',
- includeBetaUpdates: 'Includi versioni beta',
- includeBetaUpdatesDesc: 'Notifica versioni beta e prerelease durante il controllo aggiornamenti',
- localLogin: {
- disable: 'Disabilita l\'accesso locale con nome utente/password',
- disableHint: 'Quando attivato, solo i provider SSO possono accedere. LDAP non è interessato. Imposta BAMBUDDY_LOCAL_LOGIN=true sul server per mantenere un percorso di ripristino.',
- },
- // Queue
- enableRetry: 'Abilita retry',
- // Home Assistant
- homeAssistantDescription: 'Controlla prese smart tramite Home Assistant',
- environmentManagedLabel: '(Gestito dall\'ambiente)',
- autoEnabledViaEnv: 'Abilitato automaticamente tramite variabili d\'ambiente',
- urlFromEnvReadOnly: 'Valore impostato dalla variabile d\'ambiente HA_URL (sola lettura)',
- tokenFromEnvReadOnly: 'Valore impostato dalla variabile d\'ambiente HA_TOKEN (sola lettura)',
- // MQTT
- mqttConnectedTo: 'Connesso a',
- // Prometheus
- prometheusDescription: 'Esponi dati stampante in formato Prometheus',
- // Smart plugs empty state
- noSmartPlugsTitle: 'Nessuna presa smart configurata',
- noSmartPlugsDescription: 'Aggiungi una presa smart Tasmota per monitorare energia e automatizzare il controllo.',
- // Notifications empty state
- noProvidersTitle: 'Nessun provider configurato',
- noProvidersDescription: 'Aggiungi un provider per ricevere avvisi.',
- noTemplatesAvailable: 'Nessun template disponibile. Riavvia il backend per generare i template predefiniti.',
- // API permissions
- apiPermissionView: 'Visualizza stato stampante e coda',
- apiPermissionEdit: 'Aggiungi e rimuovi elementi dalla coda di stampa',
- // API keys
- apiKeysEmptyTitle: 'Nessuna chiave API',
- apiKeysEmptyDescription: 'Crea una chiave API per integrare servizi esterni.',
- // Users
- noUsersFound: 'Nessun utente trovato',
- noGroupsFound: 'Nessun gruppo trovato',
- noGroupsAvailable: 'Nessun gruppo disponibile',
- passwordsDoNotMatch: 'Le password non coincidono',
- systemGroupWarning: 'I nomi dei gruppi di sistema non possono essere modificati',
- // Auth disabled
- authDisabledTitle: 'Autenticazione disabilitata',
- authDisabledFeature1: 'Richiedi accesso per usare il sistema',
- authDisabledFeature2: 'Crea più utenti con permessi basati sui gruppi',
- authDisabledFeature3: 'Controlla accesso con 50+ permessi granulari',
- // User deletion
- userHasCreated: 'Questo utente ha creato:',
- userItemsQuestion: 'Cosa vuoi fare con questi elementi?',
- deleteUserConfirm: 'Sei sicuro di voler eliminare questo utente?',
- actionCannotBeUndone: 'Questa azione non può essere annullata.',
- // Smart plugs
- addFirstSmartPlug: 'Aggiungi la tua prima presa smart',
- // Notifications
- providers: 'Provider',
- log: 'Registro',
- testAll: 'Testa tutto',
- testResults: 'Risultati test',
- testPassedCount: '{{count}} riusciti',
- testFailedCount: '{{count}} falliti',
- messageTemplates: 'Template messaggi',
- messageTemplatesDescription: 'Personalizza i messaggi per ogni evento.',
- // API Keys section
- apiKeys: 'Chiavi API',
- apiKeysDescription: 'Crea chiavi API per integrazioni esterne e webhook.',
- createKey: 'Crea chiave',
- apiKeyCreated: 'Chiave API creata con successo',
- apiKeyCopyWarning: 'Copia questa chiave ora - non verra mostrata di nuovo!',
- useInApiBrowser: 'Usa nel Browser API',
- apiKeyQrButton: 'Codice QR',
- apiKeyQrTitle: 'Scansiona per configurare',
- apiKeyQrCaption: 'Scansiona con la tua app mobile per aggiungere questo server e la chiave API.',
- apiKeyQrWarning: 'Contiene la tua chiave API segreta: non condividerla né farne screenshot dove altri possono vederla.',
- createNewApiKey: 'Crea nuova chiave API',
- keyName: 'Nome chiave',
- keyNamePlaceholder: 'es., Home Assistant, OctoPrint',
- readStatus: 'Leggi stato',
- readStatusDescription: 'Visualizza stato stampante, coda, libreria, archivi e pipeline dello slicer',
- manageQueue: 'Gestisci coda',
- manageQueueDescription: 'Aggiungi e rimuovi elementi dalla coda di stampa. Insieme a "Gestisci libreria", esegui pipeline dello slicer',
- controlPrinter: 'Controlla stampante',
- controlPrinterDescription: 'Metti in pausa, riprendi e ferma stampe',
- manageLibrary: 'Gestisci libreria',
- manageLibraryDescription: 'Carica, rinomina, elimina ed esegui lo slicing dei file della libreria; importa modelli da MakerWorld. Insieme a "Gestisci coda", esegui pipeline dello slicer',
- manageInventory: 'Gestisci inventario',
- manageInventoryDescription: 'Crea, aggiorna ed elimina bobine e voci di inventario. Necessario per i chioschi SpoolBuddy (scansione NFC, letture della bilancia, comandi di sistema del chiosco).',
- manageMaintenance: 'Gestisci manutenzione',
- manageMaintenanceDescription: 'Registra le manutenzioni completate, azzera i contatori, modifica gli intervalli e gestisci il catalogo dei tipi di manutenzione. Adatto alle automazioni Home Assistant che registrano "ho pulito l\'ugello" senza concedere un controllo più ampio della stampante.',
- manageArchives: 'Gestisci archivi',
- manageArchivesDescription: 'Modifica ed elimina gli archivi di stampa, inclusa la rimozione delle vecchie stampe e del loro contributo alle statistiche. Adatto alle automazioni che sfoltiscono la cronologia di stampa.',
- manageProjects: 'Gestisci progetti',
- manageProjectsDescription: 'Crea, aggiorna ed elimina progetti e aggiungi archivi ad essi. Adatto alle automazioni che organizzano le stampe in progetti.',
- maintenanceBadge: 'Manutenzione',
- archivesBadge: 'Archivi',
- projectsBadge: 'Progetti',
- libraryBadge: 'Libreria',
- inventoryBadge: 'Inventario',
- cloudAccess: 'Consenti accesso cloud',
- cloudAccessDescription: 'Legge i preset e i filamenti Bambu Cloud per tuo conto. Richiede l\'accesso a Bambu Cloud.',
- cloudBadge: 'Cloud',
- updateEnergyCost: 'Aggiorna prezzo elettricità',
- updateEnergyCostDescription: 'Consenti a questa chiave di inviare in POST un nuovo prezzo elettricità per kWh a /settings/electricity-price. Utile per automazioni Home Assistant a tariffa dinamica (Tibber, Octopus, ecc.). Questo è l\'unico campo di impostazioni scrivibile via API key.',
- energyCostBadge: 'Energia',
- legacyKey: 'Legacy',
- legacyKeyTooltip: 'Creato prima della proprietà per utente; ricreare per accesso cloud',
- unnamedKey: 'Chiave senza nome',
- lastUsed: 'Ultimo uso',
- read: 'Lettura',
- control: 'Controllo',
- createFirstKey: 'Crea la tua prima chiave',
- webhookEndpoints: 'Endpoint webhook',
- webhookApiKeyHint: 'Usa la tua chiave API nell\'header X-API-Key.',
- webhook: {
- getAllStatus: 'Ottieni stato di tutte le stampanti',
- getSpecificStatus: 'Ottieni stato di una stampante',
- addToQueue: 'Aggiungi alla coda di stampa',
- pausePrint: 'Metti in pausa stampa',
- resumePrint: 'Riprendi stampa',
- stopPrint: 'Ferma stampa',
- },
- apiBrowser: 'Browser API',
- apiBrowserDescription: 'Esplora e testa tutti gli endpoint API disponibili.',
- apiKeyForTesting: 'Chiave API per test',
- apiKeyPlaceholder: 'Incolla qui la tua chiave API per testare gli endpoint autenticati...',
- apiKeyHint: 'Questa chiave verra inviata come header X-API-Key.',
- deleteApiKeyTitle: 'Elimina chiave API',
- deleteApiKeyMessage: 'Sei sicuro di voler eliminare questa chiave API? Le integrazioni che la usano non funzioneranno più.',
- deleteKey: 'Elimina chiave',
- // Filament tab
- amsDisplayThresholds: 'Soglie visualizzazione AMS',
- amsThresholdsDescription: 'Configura soglie colore per umidità e temperatura AMS.',
- humidity: 'Umidità',
- goodGreen: 'Buono (verde)',
- fairOrange: 'Discreto (arancione)',
- aboveFairBad: 'Sopra soglia discreta mostra rosso (scarso)',
- fairAlsoDryingThreshold: 'Questa soglia viene usata anche per attivare l\'asciugatura automatica',
- fairBelowDryingFloor: 'L\'asciugatura automatica non può raggiungere questo valore: un AMS segna {{floor}}% o più mentre riscalda, quindi ogni ciclo finirebbe e ripartirebbe subito. Portalo sopra il {{floor}}% se usi l\'asciugatura automatica.',
- temperature: 'Temperatura',
- goodBlue: 'Buono (blu)',
- aboveFairHot: 'Sopra soglia discreta mostra rosso (caldo)',
- tempAlarmThreshold: 'Allarme sopra',
- tempAlarmSeparateFromBand: 'Solo la soglia di allarme invia notifiche: Buono e Discreto colorano solo la visualizzazione. Lascia vuoto per allarmare alla soglia discreta, come prima.',
- tempAlarmMustBePositive: 'Una soglia pari o inferiore a 0 viene ignorata: l\'allarme usa la soglia discreta.',
- historyRetention: 'Conservazione cronologia',
- keepSensorHistory: 'Mantieni cronologia sensori per',
- historyRetentionDescription: 'I dati più vecchi saranno eliminati automaticamente',
- defaultPrintOptions: 'Opzioni di stampa predefinite',
- defaultPrintOptionsDescription: 'Imposta i valori predefiniti per le opzioni di stampa. Possono essere modificati nella finestra di stampa.',
- defaultBedLevelling: 'Livellamento piatto',
- defaultBedLevellingDesc: 'Livellamento automatico del piatto prima della stampa',
- defaultFlowCali: 'Calibrazione flusso',
- defaultFlowCaliDesc: 'Calibra il flusso di estrusione',
- defaultVibrationCali: 'Calibrazione vibrazioni',
- defaultVibrationCaliDesc: 'Riduce gli artefatti di ringing',
- defaultLayerInspect: 'Ispezione primo strato',
- defaultLayerInspectDesc: 'Ispezione IA del primo strato',
- defaultTimelapse: 'Timelapse',
- defaultTimelapseDesc: 'Registra un video timelapse',
- defaultNozzleOffsetCali: 'Calibrazione offset ugelli',
- defaultNozzleOffsetCaliDesc: 'Calibra gli offset tra gli ugelli',
- tempFanPresetsTitle: 'Preset di temperatura e ventola',
- tempFanPresetsDescription: 'Personalizza i valori di selezione rapida mostrati nei popover di temperatura e velocità ventola della scheda stampante. Il pulsante Off è sempre visibile.',
- tempFanPresetsNozzle: 'Temperatura ugello',
- tempFanPresetsBed: 'Temperatura piano',
- tempFanPresetsChamber: 'Temperatura camera',
- tempFanPresetsFan: 'Velocità ventola',
- tempFanPresetsReset: 'Ripristina valori predefiniti',
- concurrentUploadsTitle: 'Caricamenti simultanei',
- concurrentUploadsDescription: "Quante stampanti possono ricevere file dalla coda contemporaneamente. Le stampanti ricevono i file lentamente (una stampa grande può richiedere diversi minuti) e ognuna aspetta il proprio turno: su un parco macchine ampio, aumentare questo valore evita che l'ultima stampante di un lotto debba attendere la fine di tutti i trasferimenti precedenti. Riducilo se la rete o l'host Bambuddy fatica con i trasferimenti paralleli.",
- concurrentUploadsLabel: 'Stampanti servite contemporaneamente',
- concurrentUploadsHelp: '1 invia a una stampante alla volta (il comportamento precedente). Il valore predefinito è 4.',
- staggeredStart: 'Avvio scaglionato',
- staggeredStartDescription: 'Dimensione gruppo e intervallo predefiniti per scaglionare avvii di batch multi-stampante. Sovrascrivibili per batch nella finestra di stampa.',
- preheatTitle: 'Preriscaldo & Heat Soak',
- preheatDescription: 'Riscalda il piano (e la camera, se supportata) e mantiene la temperatura prima dell\'avvio di ogni stampa in coda. Utile per filamenti tecnici (PA, ABS) su stampanti senza riscaldatore attivo della camera — il piano scalda la camera per irraggiamento mentre il timer di soak scorre. La temperatura target del piano viene letta dal file di stampa; il comportamento della camera dipende dal modello di stampante.',
- preheatEnabled: 'Abilita preriscaldo & soak',
- preheatEnabledDesc: 'Se disattivato, le stampe in coda partono subito. Ogni elemento può sovrascrivere per singola stampa.',
- preheatFilamentTargetsLabel: 'Target camera per filamento (°C)',
- preheatFilamentTargetsHint: 'Bambuddy sceglie il target più alto tra gli slot AMS caricati. Una stampa i cui slot derivano tutti 0 — PLA, PETG, TPU, PVA — salta del tutto il preriscaldamento e parte subito.',
- preheatFilamentTargetsReset: 'Ripristina valori predefiniti',
- preheatFilamentTargetsDefaultRow: 'Altro / non mappato',
- preheatMaxWait: 'Attesa max (secondi)',
- preheatMaxWaitHelp: 'Limite della fase di riscaldamento camera prima del passaggio al soak.',
- preheatSoak: 'Soak (secondi)',
- preheatSoakHelp: 'Tenuta dopo il raggiungimento del target o lo scadere dell\'attesa max.',
- preheatHardwareTitle: 'Comportamento per stampante:',
- preheatHardwareDetail: 'H2C/H2D/H2D Pro/H2S/X2D/X1E riscaldano attivamente la camera con M141. X1C/P2S leggono la temperatura ma scaldano la camera solo per irraggiamento dal piano. P1S/P1P/A1/A1 Mini non hanno sensore di camera — vale solo il timer di soak.',
- preheatPerItemDesc: 'Riscalda il piano e la camera prima dell\'avvio di questa stampa. Per impostazione predefinita usa l\'interruttore globale in Impostazioni → Workflow.',
- preheatOverride_inherit: 'Eredita',
- preheatOverride_on: 'Attivo',
- preheatOverride_off: 'Spento',
- calibrationMode_off: 'Spento',
- calibrationMode_on: 'Attivo',
- calibrationMode_auto: 'Auto',
- preheatTargetOverride: 'Sovrascrivi target camera (°C, vuoto = per filamento)',
- preheatTargetOverrideHelp: '0 riscalda il piano ed esegue il mantenimento senza camera. Se lasciato vuoto, una stampa che non richiede la camera salta del tutto il preriscaldamento.',
- plateClear: 'Conferma piatto libero',
- requirePlateClear: 'Richiedi conferma piatto libero',
- requirePlateClearDescription: 'Quando questa opzione è abilitata, lo scheduler attende una conferma per stampante che il piatto sia libero prima di avviare le stampe in coda su stampanti con lavori completati. Disabilitandola vengono nascosti anche il badge di stato del piatto e il pulsante "Segna il piatto come liberato" sulle schede stampante.',
- keepBedWarm: 'Mantieni il piano caldo tra le stampe',
- keepBedWarmDesc: 'In attesa della conferma di piatto liberato, mantiene il piano alla temperatura di mantenimento indicata sotto così la camera resta calda — o alla temperatura del piano della stampa successiva se è più alta. Si applica solo quando la stampa successiva richiede il riscaldamento della camera (ASA, ABS, PA, PC, ecc.). Richiede la conferma di piatto liberato abilitata.',
- keepWarmBedTemp: 'Temperatura del piano in mantenimento (°C)',
- keepWarmBedTempHelp: 'Usato quando il piano serve a riscaldare la camera: durante il mantenimento in caldo e nel preriscaldamento se il file di stampa non contiene una temperatura del piano. Una temperatura più alta indicata dal file ha sempre la precedenza.',
- keepWarmMaxMinutes: 'Interrompi il mantenimento in caldo dopo (minuti)',
- keepWarmMaxMinutesHelp: 'Se il piatto non viene liberato entro questo tempo, i riscaldatori vengono spenti invece di restare accesi indefinitamente.',
- gcodeInjection: 'Iniezione G-code',
- gcodeInjectionDescription: 'Configura G-code personalizzato da iniettare all\'inizio e/o alla fine delle stampe per sistemi di stampa automatica come Farmloop, SwapMod, AutoClear e Printflow 3D. Gli snippet sono configurati per modello di stampante e applicati quando "Inietta G-code" è abilitato su un elemento della coda.',
- gcodeInjectionNoPrinters: 'Nessuna stampante trovata. Aggiungi stampanti per configurare gli snippet G-code.',
- gcodeStartLabel: 'G-code iniziale',
- gcodeEndLabel: 'G-code finale',
- gcodeStartPlaceholder: 'G-code inserito prima dell\'inizio della stampa...',
- gcodeEndPlaceholder: 'G-code aggiunto dopo la fine della stampa...',
- staggerGroupSize: 'Dimensione gruppo',
- staggerGroupSizeHelp: 'Stampanti da avviare simultaneamente per gruppo',
- staggerInterval: 'Intervallo (minuti)',
- staggerIntervalHelp: 'Ritardo tra l\'avvio di ogni gruppo',
- queueDrying: 'Asciugatura automatica',
- queueDryingDescription: 'Asciugare automaticamente il filamento AMS quando la stampante è inattiva tra le stampe in coda. Usa la soglia di umidità sopra.',
- queueDryingEnabled: 'Abilita asciugatura automatica',
- queueDryingEnabledDescription: 'Avvia l\'asciugatura AMS automaticamente quando la stampante è inattiva e l\'umidità supera la soglia',
- queueDryingBlock: 'Attendi completamento asciugatura',
- queueDryingBlockDescription: 'Blocca la coda di stampa fino al completamento dell\'asciugatura. Se disattivato, le stampe hanno priorità.',
- ambientDryingEnabled: 'Asciugatura ambientale',
- ambientDryingEnabledDescription: 'Asciuga automaticamente il filamento sulle stampanti inattive quando l\'umidità supera la soglia, anche senza stampe in coda.',
- printDryingEnabled: 'Asciugatura durante la stampa',
- printDryingEnabledDescription: 'Consente all\'asciugatura automatica di continuare durante una stampa su hardware supportato (H2D, H2C, H2S, P2S, H2D Pro, X2D, X1C, A2L con firmware recente). La temperatura di asciugatura viene automaticamente limitata a 5°C sotto il preset di riposo per proteggere le bobine.',
- dryingPresets: 'Preset di asciugatura',
- dryingPresetsDescription: 'Temperatura e durata per tipo di filamento. AMS 2 Pro usa temperature più basse, AMS-HT supporta temperature più alte.',
- dryingFilament: 'Filamento',
- humidityThresholds: 'Soglie di umidità',
- humidityThresholdsDescription: 'Soglia di umidità per tipo di filamento per asciugatura automatica e allarmi. Carichi misti in un AMS usano la soglia più bassa.',
- humidityThresholdCol: 'Soglia',
- humidityThresholdDefault: 'Predefinito (tipi sconosciuti)',
- printModal: 'Modale stampa',
- expandCustomMapping: 'Espandi mapping personalizzato di default',
- expandCustomMappingDescription: 'Quando stampi su più stampanti, mostra mapping AMS per stampante espanso',
- // User management
- authentication: 'Autenticazione',
- authEnabledDescription: 'La tua istanza è protetta con autenticazione',
- authDisabledDescription: 'Abilita per richiedere accesso e gestire utenti',
- authDisabledMessage: 'Abilita autenticazione per creare account, gestire permessi e proteggere la tua istanza Bambuddy.',
- enableAuthentication: 'Abilita autenticazione',
- currentUser: 'Utente corrente',
- changePassword: 'Cambia password',
- admin: 'Amministratore',
- users: 'Utenti',
- addUser: 'Aggiungi utente',
- groups: 'Gruppi',
- addGroup: 'Aggiungi gruppo',
- system: 'Sistema',
- noDescription: 'Nessuna descrizione',
- userCount: '{{count}} utenti',
- permissionCount: '{{count}} permessi',
- createUser: 'Crea utente',
- username: 'Nome utente',
- enterUsername: 'Inserisci nome utente',
- password: 'Password',
- enterPassword: 'Inserisci password',
- passwordRequirements: 'Almeno 8 caratteri, con una maiuscola, una minuscola, una cifra e un carattere speciale.',
- confirmPassword: 'Conferma password',
- confirmPasswordPlaceholder: 'Conferma password',
- // Title tooltips
- viewReleaseOnGitHub: 'Vedi release su GitHub',
- turnAllPlugsOn: 'Accendi tutte le prese',
- turnAllPlugsOff: 'Spegni tutte le prese',
- // Modal: Clear logs
- clearNotificationLogs: 'Cancella log notifiche',
- clearLogsMessage: 'Questo eliminerà definitivamente tutti i log notifiche più vecchi di 30 giorni. Questa azione non può essere annullata.',
- clearLogs: 'Cancella log',
- // Modal: Reset UI
- resetUiPreferences: 'Reimposta preferenze UI',
- resetUiPreferencesMessage: 'Questo reimposterà le preferenze UI ai valori predefiniti: ordine barra laterale, tema, layout dashboard, modalità vista e preferenze ordinamento. Stampanti, archivi e impostazioni server NON saranno modificati. La pagina si ricaricherà dopo la cancellazione.',
- resetPreferences: 'Reimposta preferenze',
- // Modal: Delete group
- deleteGroupTitle: 'Elimina gruppo',
- deleteGroupMessage: 'Sei sicuro di voler eliminare questo gruppo? Gli utenti in questo gruppo perderanno questi permessi.',
- deleteGroup: 'Elimina gruppo',
- // Modal: Disable auth
- disableAuthenticationTitle: 'Disabilita autenticazione',
- disableAuthenticationMessage: 'Sei sicuro di voler disabilitare l\'autenticazione? Questo renderà la tua istanza Bambuddy accessibile senza login. Tutti gli utenti resteranno nel database ma l\'autenticazione sarà disabilitata.',
- disableAuthentication: 'Disabilita autenticazione',
- // Additional settings
- configureBambuddy: 'Configura Bambuddy',
- systemDefault: 'Predefinito di sistema',
- archiveSettings: 'Impostazioni archivio',
- newWindow: 'Nuova finestra',
- embeddedOverlay: 'Overlay incorporato',
- preferredSlicer: 'Slicer preferito',
- preferredSlicerDescription: 'Slicer utilizzato per lo slicing in-app tramite il sidecar API',
- openInSlicerLabel: 'Apri nello slicer',
- openInSlicerInherit: 'Come slicer API',
- openInSlicerDescription: "Slicer desktop utilizzato dal pulsante 'Apri nello slicer'. Lascia su 'Come slicer API' per ereditare, o scegli uno slicer diverso per l'uso locale.",
- orcaslicerKnownIssuesWarning: 'OrcaSlicer 2.3.2 / 2.4.0-dev hanno bug CLI noti che bloccano lo slicing di molti 3MF creati da Bambu — vedi le issue upstream #12426 (segfault su file multi-estrusore dipinti) e #13386 (rifiuto della validazione rigorosa dei range di parametri). Bambu Studio è raccomandato finché non arrivano le correzioni upstream.',
- useSlicerApi: 'Usa Slicer API',
- useSlicerApiDescription: 'Se attivo, le azioni "Slice" aprono il modale slicer integrato e chiamano il sidecar slicer-API. Se disattivo (predefinito), inoltrano al slicer desktop tramite schema URI.',
- slicerCard: 'Slicer',
- orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
- bambuStudioApiUrl: 'Bambu Studio sidecar URL',
- slicerStallTimeout: 'Timeout di inattivita dello slicer (minuti)',
- slicerStallTimeoutDescription: 'Interrompe uno slice dopo questo tempo senza progressi dal sidecar. I modelli pesanti che continuano a segnalare progressi non vengono mai interrotti, per quanto tempo richiedano. I sidecar che non segnalano progressi usano questo valore come limite di tempo totale.',
- slicerApiUrlDescription: 'URL del container sidecar slicer-API. Lascia vuoto per usare le variabili d\'ambiente SLICER_API_URL / BAMBU_STUDIO_API_URL.',
- externalCameras: 'Camere esterne',
- costTracking: 'Tracciamento costi',
- printsOnly: 'Solo stampe',
- totalConsumption: 'Consumo totale',
- dataManagement: 'Gestione dati',
- storageUsage: 'Memoria utilizzata',
- storageUsageDescription: 'Ripartizione della memoria per categoria',
- storageUsageTotal: 'Totale',
- storageUsageErrors: 'Errori',
- storageUsageOtherBreakdown: 'Altro (include risorse statiche, script e file di configurazione)',
- storageUsageSystem: 'Sistema',
- storageUsageData: 'Dati',
- storageUsageUnavailable: 'Informazioni sull\'utilizzo della memoria non disponibili',
- clearNotificationLogsDescription: 'Elimina log notifiche più vecchi di 30 giorni',
- resetUiPreferencesDescription: 'Reimposta ordine barra laterale, tema, modalità vista e preferenze layout. Stampanti, archivi e impostazioni non vengono modificati.',
- enableHomeAssistant: 'Abilita Home Assistant',
- enableMqtt: 'Abilita MQTT',
- useTls: 'Usa TLS',
- enableMetricsEndpoint: 'Abilita endpoint metriche',
- availableMetrics: 'Metriche disponibili',
- billingEnabled: 'Abilita fatturazione',
- billingEnabledDescription: 'Addebita agli utenti le stampe e abilita le funzioni finanziarie',
- printerKillSwitch: 'Arresto automatico della stampa',
- printerKillSwitchDescription: 'Interrompi immediatamente le stampe non autorizzate',
- financeBudgetReset: 'Azzeramento mensile del budget finanziario',
- financeBudgetResetDay: 'Giorno di azzeramento',
- financeBudgetResetDayHelp: "Per i mesi brevi, l'azzeramento utilizza l'ultimo giorno del mese.",
- financeBudgetResetTimezone: 'Fuso orario di azzeramento',
- financeBudgetResetTimezoneHelp: "L'inizio della finestra di bilancio viene calcolato in questo fuso orario.",
- rebuildLedger: 'Ricostruisci il ledger del portafoglio',
- rebuildLedgerStarted: 'Ricostruzione del ledger avviata',
- rebuildLedgerConfirmTitle: 'Ricostruire il ledger del portafoglio?',
- rebuildLedgerConfirmMessage:
- 'Questo ricostruirà il ledger del portafoglio per riparare i valori di saldo storici. Eseguire solo se sai cosa stai facendo.',
- rebuildLedgerInProgress: 'Avvio della ricostruzione...',
- editUser: 'Modifica utente',
- deleteUserTitle: 'Elimina utente',
- groupName: 'Nome gruppo',
- // Placeholders
- leaveEmptyForAnonymous: 'Lascia vuoto per anonimo',
- leaveEmptyForNoAuth: 'Lascia vuoto per nessuna autenticazione',
- enterNewPassword: 'Inserisci nuova password',
- confirmNewPassword: 'Conferma nuova password',
- enterGroupName: 'Inserisci nome gruppo',
- enterDescriptionOptional: 'Inserisci descrizione (opzionale)',
- enterCurrentPassword: 'Inserisci password attuale',
- enterNewPasswordMin6: 'Inserisci nuova password (min 6 caratteri)',
- toast: {
- keyCopied: 'Chiave copiata negli appunti',
- copyFailed: 'Copia chiave fallita',
- keyAddedToBrowser: 'Chiave aggiunta al Browser API',
- clearLogsFailed: 'Eliminazione log fallita',
- uiPreferencesReset: 'Preferenze UI reimpostate. Aggiornamento...',
- authDisabled: 'Autenticazione disabilitata con successo',
- authDisableFailed: 'Disabilitazione autenticazione fallita',
- apiKeyCreated: 'Chiave API creata',
- apiKeyDeleted: 'Chiave API eliminata',
- userCreated: 'Utente creato con successo',
- userUpdated: 'Utente aggiornato con successo',
- userDeleted: 'Utente eliminato con successo',
- groupCreated: 'Gruppo creato con successo',
- groupUpdated: 'Gruppo aggiornato con successo',
- groupDeleted: 'Gruppo eliminato con successo',
- fillRequiredFields: 'Compila tutti i campi obbligatori',
- passwordsDoNotMatch: 'Le password non coincidono',
- passwordTooShort: 'La password deve essere di almeno 8 caratteri',
- passwordNeedsUppercase: 'La password deve contenere almeno una lettera maiuscola',
- passwordNeedsLowercase: 'La password deve contenere almeno una lettera minuscola',
- passwordNeedsDigit: 'La password deve contenere almeno una cifra',
- passwordNeedsSpecial: 'La password deve contenere almeno un carattere speciale',
- enterGroupName: 'Inserisci un nome gruppo',
- settingsSaved: 'Impostazioni salvate',
- noPermissionUpdate: 'Non hai il permesso di modificare le impostazioni',
- cameraSettingsSaved: 'Impostazioni camera salvate',
- enterCameraUrl: 'Inserisci un URL camera',
- passwordChanged: 'Password cambiata con successo',
- connectionFailed: 'Connessione fallita',
- testFailed: 'Test fallito',
- cameraConnected: 'Camera connessa{{resolution}}',
- cameraConnectedCoalesced: 'Camera connessa{{resolution}} (condivisa con un\'acquisizione già in corso)',
- },
- testConnection: 'Testa connessione',
- catalog: {
- spoolCatalog: 'Catalogo bobine',
- spoolCatalogDescription: 'Pesi delle bobine vuote per marca/tipo. Utilizzato per la ricerca automatica del peso quando si aggiungono bobine.',
- searchCatalog: 'Cerca nel catalogo...',
- addNewEntry: 'Aggiungi nuova voce',
- namePlaceholder: 'Nome (es. Bambu Lab - Plastica)',
- weight: 'Peso',
- type: 'Tipo',
- default: 'Predefinito',
- custom: 'Personalizzato',
- noMatch: 'Nessuna voce corrisponde alla ricerca',
- empty: 'Nessuna voce nel catalogo',
- deleteEntry: 'Elimina voce',
- deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?',
- resetCatalog: 'Ripristina catalogo',
- resetConfirm: 'Ripristinare il catalogo ai valori predefiniti? Tutte le voci personalizzate verranno rimosse.',
- loadFailed: 'Impossibile caricare il catalogo bobine',
- nameWeightRequired: 'Nome e peso sono obbligatori',
- entryAdded: 'Voce aggiunta',
- addFailed: 'Impossibile aggiungere la voce',
- entryUpdated: 'Voce aggiornata',
- updateFailed: 'Impossibile aggiornare la voce',
- entryDeleted: 'Voce eliminata',
- deleteFailed: 'Impossibile eliminare la voce',
- resetSuccess: 'Catalogo ripristinato ai valori predefiniti',
- resetFailed: 'Impossibile ripristinare il catalogo',
- exported: '{{count}} voci esportate',
- imported: '{{added}} voci importate ({{skipped}} saltate)',
- importFailed: 'Impossibile importare: formato JSON non valido',
- exportTooltip: 'Esporta catalogo in JSON',
- importTooltip: 'Importa catalogo da JSON',
- resetTooltip: 'Ripristina valori predefiniti',
- selectedCount: '{{count}} selezionati',
- deleteSelected: 'Elimina selezionati',
- bulkDeleteConfirm: 'Eliminare {{count}} voci?',
- bulkDeleted: '{{count}} voci eliminate',
- bulkDeleteFailed: 'Impossibile eliminare le voci',
- material: 'Materiale',
- spoolWeight: 'Peso bobina',
- color: 'Colore',
- updateSpoolWeight: 'Aggiorna peso bobina',
- filamentUpdated: 'Filamento aggiornato',
- filamentUpdateFailed: 'Aggiornamento filamento non riuscito',
- filamentUpdateInvalid: 'Dati filamento non validi',
- keepExistingSpoolWeight: 'Mantieni vecchio peso per le bobine esistenti',
- keepExistingSpoolWeightDesc: 'Le bobine già create con questo tipo di filamento mantengono il vecchio peso tara. Le nuove bobine usano il valore aggiornato.',
- applyToAllSpools: 'Applica a tutte le bobine',
- applyToAllSpoolsDesc: 'Tutti i calcoli del peso per questo tipo di filamento usano immediatamente il nuovo peso tara.',
- },
- colorCatalog: {
- title: 'Catalogo colori',
- description: 'Colori del filamento per produttore/materiale. Utilizzato per la ricerca automatica del colore quando si aggiungono bobine.',
- searchColors: 'Cerca colori...',
- allManufacturers: 'Tutti i produttori',
- addNewColor: 'Aggiungi nuovo colore',
- manufacturer: 'Produttore',
- colorName: 'Nome colore',
- hex: 'Hex',
- materialOptional: 'Materiale (opzionale)',
- showing: 'Visualizzazione di {{filtered}} su {{total}} colori',
- noMatch: 'Nessun colore corrisponde alla ricerca',
- empty: 'Nessun colore nel catalogo',
- deleteColor: 'Elimina colore',
- deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?',
- resetCatalog: 'Ripristina catalogo colori',
- resetConfirm: 'Ripristinare il catalogo ai valori predefiniti? Tutti i colori personalizzati verranno rimossi.',
- sync: 'Sincronizza',
- starting: 'Avvio...',
- syncTooltip: 'Sincronizza da FilamentColors.xyz (2000+ colori, potrebbe richiedere un minuto)',
- loadFailed: 'Impossibile caricare il catalogo colori',
- fieldsRequired: 'Produttore, nome colore e colore hex sono obbligatori',
- colorAdded: 'Colore aggiunto',
- addFailed: 'Impossibile aggiungere il colore',
- colorUpdated: 'Colore aggiornato',
- updateFailed: 'Impossibile aggiornare il colore',
- colorDeleted: 'Colore eliminato',
- deleteFailed: 'Impossibile eliminare il colore',
- resetSuccess: 'Catalogo colori ripristinato ai valori predefiniti',
- resetFailed: 'Impossibile ripristinare il catalogo',
- syncUpToDate: 'Già aggiornato ({{count}} colori verificati)',
- syncComplete: '{{added}} nuovi colori aggiunti ({{skipped}} già esistenti)',
- syncError: 'Errore di sincronizzazione',
- syncFailed: 'Impossibile sincronizzare da FilamentColors.xyz',
- exported: '{{count}} colori esportati',
- imported: '{{added}} colori importati ({{skipped}} saltati)',
- importFailed: 'Impossibile importare: formato JSON non valido',
- selectedCount: '{{count}} selezionati',
- deleteSelected: 'Elimina selezionati',
- bulkDeleteConfirm: 'Eliminare {{count}} colori?',
- bulkDeleted: '{{count}} colori eliminati',
- bulkDeleteFailed: 'Impossibile eliminare i colori',
- },
- dateFormat: 'Formato data',
- dateFormatUs: 'US (MM/GG/AAAA)',
- dateFormatEu: 'EU (GG/MM/AAAA)',
- dateFormatIso: 'ISO (AAAA-MM-GG)',
- timeFormat: 'Formato ora',
- timeFormat12: '12 ore (3:30 PM)',
- timeFormat24: '24 ore (15:30)',
- defaultPrinter: 'Stampante predefinita',
- defaultPrinterDescription: 'Preseleziona questa stampante per upload, ristampe e altre operazioni.',
- slicerBambuStudio: 'Bambu Studio',
- slicerOrcaSlicer: 'OrcaSlicer',
- sidebarOrderDescription: 'Usa il layout della barra laterale per riordinare gli elementi, ripristinare la visibilità e gestire i link personalizzati.',
- setDefault: 'Imposta predefinito',
- sidebarOrderSetDefaultHint: 'Imposta predefinito applica l\'ordine attuale del menu agli utenti che non hanno ancora personalizzato il proprio.',
- sidebarDefaultSet: 'L\'ordine predefinito del menu è stato impostato.',
- sidebarDefaultCleared: 'Ordine predefinito del menu cancellato.',
- sidebarDefaultFailed: 'Impossibile impostare l\'ordine predefinito del menu.',
- reset: 'Ripristina',
- darkMode: 'Modalità scura',
- lightMode: 'Modalità chiara',
- active: '(attivo)',
- background: 'Sfondo',
- accent: 'Accento',
- style: 'Stile',
- bgNeutral: 'Neutro',
- bgWarm: 'Caldo',
- bgCool: 'Freddo',
- bgOled: 'OLED Nero',
- bgSlate: 'Blu ardesia',
- bgForest: 'Verde foresta',
- accentGreen: 'Verde',
- accentTeal: 'Verde acqua',
- accentBlue: 'Blu',
- accentOrange: 'Arancione',
- accentPurple: 'Viola',
- accentRed: 'Rosso',
- styleClassic: 'Classico',
- styleGlow: 'Luminoso',
- styleVibrant: 'Vibrante',
- themeToggleHint: 'Passa tra modalità scura, chiara e sistema con l\'icona nella barra laterale.',
- progressInTitle: 'Avanzamento nella scheda',
- progressInTitleDescription: 'Mostra la percentuale della stampa attiva e un anello di avanzamento nella scheda del browser.',
- autoArchivePrints: 'Archiviazione automatica stampe',
- autoArchiveDescription: 'Salva automaticamente i file 3MF al completamento delle stampe',
- saveThumbnailsDescription: 'Estrai e salva le immagini di anteprima dai file 3MF',
- captureFinishPhotoDescription: 'Scatta una foto dalla fotocamera della stampante al completamento della stampa. Bambuddy registra un breve timelapse durante la stampa in modo che la foto possa essere ricavata dal momento precedente all\'abbassamento del piatto; il file del timelapse viene mantenuto se hai abilitato il timelapse per questa stampa, altrimenti viene eliminato automaticamente dopo l\'acquisizione della foto.',
- finishPhotoRestorePlate: 'Solleva il piatto per la foto finale',
- finishPhotoRestorePlateDescription: 'La stampante abbassa il piatto di circa 100 mm al termine di una stampa, lasciando l\'oggetto finito sotto l\'inquadratura della fotocamera. Bambuddy lo risolleva fino a poco sopra l\'ultimo strato stampato, scatta la foto e poi lo riabbassa. Ignorato se l\'altezza di stampa è sconosciuta o se un altro lavoro è in coda.',
- ffmpegNotInstalled: 'ffmpeg non installato',
- ffmpegRequired: 'L\'acquisizione dalla fotocamera richiede ffmpeg. Installalo tramite <brew>brew install ffmpeg</brew> (macOS) o <apt>apt install ffmpeg</apt> (Linux).',
- camera: 'Fotocamera',
- cameraViewMode: 'Modalità visualizzazione fotocamera',
- cameraOverlayDescription: 'La fotocamera si apre in un overlay ridimensionabile sulla schermata principale',
- cameraWindowDescription: 'La fotocamera si apre in una finestra separata del browser',
- externalCamerasDescription: 'Configura fotocamere esterne per sostituire la fotocamera integrata della stampante. Supporta stream MJPEG, RTSP, snapshot HTTP e fotocamere USB (V4L2). Quando abilitata, la fotocamera esterna viene usata per la vista in diretta e le foto di completamento.',
- cameraPlaceholderUsb: 'Percorso dispositivo (/dev/video0)',
- cameraPlaceholderUrl: 'URL fotocamera (rtsp://... o http://...)',
- cameraTypeMjpeg: 'Stream MJPEG',
- cameraTypeRtsp: 'Stream RTSP',
- cameraTypeSnapshot: 'Snapshot HTTP',
- cameraTypeUsb: 'Fotocamera USB (V4L2)',
- cameraSnapshotUrl: 'URL istantanea (facoltativo)',
- cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer',
- cameraSnapshotUrlHelp: 'URL singolo frame usato per miniature di notifica, foto di fine, frame del layer timelapse e rilevamento del piano. Timelapse e rilevamento del piano richiedono ciascuno il proprio toggle per stampante — questo URL è solo la sorgente immagine che usano quando attivi. Lascia vuoto per acquisire dallo stream live sopra. Utile per go2rtc (/api/frame.jpeg) e telecamere IP con endpoint snapshot dedicato.',
- cameraRotation: 'Rotazione',
- test: 'Test',
- connected: 'Connesso',
- disconnected: 'Disconnesso',
- currency: 'Valuta',
- defaultFilamentCost: 'Costo filamento predefinito (per kg)',
- electricityCost: 'Costo elettricità per kWh',
- energyDisplayMode: 'Modalità visualizzazione energia',
- energyModePrintDescription: 'La dashboard mostra la somma dell\'energia usata durante le stampe',
- energyModeTotalDescription: 'La dashboard mostra l\'energia totale dalle prese smart',
- fileManager: 'Gestore file',
- createArchiveEntry: 'Crea voce archivio durante la stampa',
- createArchiveEntryDescription: 'Quando si stampa dal gestore file, crea opzionalmente una voce di archivio',
- lowDiskSpaceWarning: 'Avviso spazio disco insufficiente',
- lowDiskSpaceDescription: 'Mostra avviso quando lo spazio disco scende sotto questa soglia',
- printerFirmware: 'Firmware stampante',
- checkFirmwareDescription: 'Controlla aggiornamenti firmware da Bambu Lab',
- bambuddySoftware: 'Software Bambuddy',
- autoCheckDescription: 'Controlla automaticamente nuove versioni all\'avvio',
- checkNow: 'Controlla ora',
- updateAvailableVersion: 'Aggiornamento disponibile: v{{version}}',
- releaseNotes: 'Note di rilascio',
- updateViaDocker: 'Aggiorna tramite Docker Compose:',
- composeDirectory: 'Cartella Compose',
- composeDirectoryHint: 'Cartella che contiene il tuo docker-compose.yml. Lascia vuoto per omettere il cd.',
- copyUpdateCommand: 'Copia comando di aggiornamento',
- updateViaHomeAssistant: 'Gli aggiornamenti sono gestiti dal Supervisor di Home Assistant. Apri Impostazioni → Add-on → Bambuddy in Home Assistant per installare la nuova versione.',
- updateViaWindowsInstaller: 'Le installazioni Windows si aggiornano rieseguendo l\'installer. Scarica la nuova versione qui sotto — i tuoi dati, le impostazioni e le stampanti vengono mantenuti.',
- downloadWindowsInstaller: 'Scarica installer per v{{version}}',
- installUpdate: 'Installa aggiornamento',
- latestVersionRunning: 'Stai usando l\'ultima versione',
- failedToCheckUpdates: 'Controllo aggiornamenti fallito: {{error}}',
- backupRestore: 'Backup e ripristino',
- backupRestoreDescription: 'Esporta/importa impostazioni e configura backup GitHub',
- goToBackup: 'Vai al backup',
- externalUrl: 'URL esterno',
- externalUrlDescription: 'L\'URL esterno dove Bambuddy è accessibile. Usato per immagini di notifica e integrazioni esterne.',
- bambuddyUrl: 'URL Bambuddy',
- externalUrlHint: 'Includi protocollo e porta (es. http://192.168.1.100:8000)',
- ftpRetry: 'Riprova FTP',
- ftpRetryDescription: 'Riprova le operazioni FTP quando il WiFi della stampante è instabile. Si applica a download 3MF, upload stampe, download timelapse e aggiornamenti firmware.',
- autoRetryDescription: 'Riprova automaticamente le operazioni FTP fallite',
- retryAttempts: 'Tentativi di ripetizione',
- retryDelay: 'Ritardo ripetizione',
- connectionTimeout: 'Timeout connessione',
- time_one: '{{count}} volta',
- time_other: '{{count}} volte',
- second_one: '{{count}} secondo',
- second_other: '{{count}} secondi',
- nSeconds: '{{count}} secondi',
- increaseForWeakWifi: 'Aumenta per stampanti con WiFi debole',
- homeAssistant: 'Home Assistant',
- homeAssistantFullDescription: 'Connetti a Home Assistant per controllare le prese smart tramite l\'API REST HA. Supporta entità switch, light, input_boolean e script.',
- homeAssistantUrl: 'URL Home Assistant',
- longLivedAccessToken: 'Token di accesso a lunga durata',
- haTokenHint: 'Crea un token in HA: Profilo → Token di accesso a lunga durata → Crea token',
- connectionSuccessful: 'Connessione riuscita',
- connectionFailed: 'Connessione fallita',
- haConnectionSuccess: 'Connesso con successo a Home Assistant.',
- haConnectionFailed: 'Connessione a Home Assistant fallita.',
- mqttPublishing: 'Pubblicazione MQTT',
- mqttDescription: 'Pubblica eventi BamBuddy su un broker MQTT esterno per l\'integrazione con Node-RED, Home Assistant e altri sistemi di automazione.',
- mqttEnableDescription: 'Pubblica eventi su broker MQTT esterno',
- brokerHostname: 'Hostname broker',
- port: 'Porta',
- usernameOptional: 'Nome utente (opzionale)',
- passwordOptional: 'Password (opzionale)',
- topicPrefix: 'Prefisso topic',
- topicPrefixHint: 'I topic saranno: {{prefix}}/printers/<serial>/status, ecc.',
- prometheusMetrics: 'Metriche Prometheus',
- prometheusEndpointDescription: 'Esponi metriche stampante su <code>/api/v1/metrics</code> per monitoraggio Prometheus/Grafana.',
- bearerTokenOptional: 'Token Bearer (opzionale)',
- bearerTokenHint: 'Se impostato, le richieste devono includere <code>Authorization: Bearer <token></code>',
- metricsConnectionStatus: 'Stato connessione',
- metricsPrinterState: 'Stato stampante (idle/printing/ecc)',
- metricsPrintProgress: 'Progresso stampa 0-100%',
- metricsBedTemp: 'Temperatura piatto',
- metricsNozzleTemp: 'Temperatura ugello',
- metricsPrintsTotal: 'Stampe totali per risultato',
- metricsMore: '...e altro (strati, ventole, coda, consumo filamento)',
- smartPlugsDescription: 'Connetti prese smart (Tasmota o Home Assistant) per automatizzare il controllo dell\'alimentazione e monitorare il consumo energetico delle stampanti.',
- allOn: 'Tutte accese',
- allOff: 'Tutte spente',
- addSmartPlug: 'Aggiungi presa smart',
- energySummary: 'Riepilogo energia',
- currentPower: 'Potenza attuale',
- plugsOnline: '{{reachable}}/{{total}} prese online',
- today: 'Oggi',
- yesterday: 'Ieri',
- total: 'Totale',
- enablePlugsForSummary: 'Abilita le prese per vedere il riepilogo energia',
- addNotificationProvider: 'Aggiungi',
- systemBadge: '(Sistema)',
- creating: 'Creazione...',
- changing: 'Modifica...',
- deleteUserAndItems: 'Elimina utente E i suoi elementi',
- deleteUserKeepItems: 'Elimina utente, mantieni elementi (diventeranno senza proprietario)',
- ok: 'OK',
- // 2FA settings
- twoFa: {
- totpTitle: 'App Authenticator (TOTP)',
- totpDesc: 'Usa un\'app come Google Authenticator, Aegis o Authy.',
- emailOtpTitle: 'OTP via e-mail',
- emailOtpDesc: 'Invia un codice monouso a {{email}} al momento del login.',
- emailOtpNoEmail: 'Aggiungi un indirizzo e-mail al tuo account per abilitare questo metodo.',
- addEmailFirst: 'Il tuo account non ha un indirizzo e-mail. Chiedi a un amministratore di aggiungerne uno.',
- setupTotp: 'Configura app Authenticator',
- setupAuthApp: 'Configura app Authenticator',
- setupInstructions: 'Scansiona il codice QR con la tua app authenticator, poi conferma con un codice.',
- manualEntry: 'Impossibile scansionare? Inserisci questo segreto manualmente:',
- scannedContinue: 'Codice scansionato — continua',
- enterCodeToConfirm: 'Inserisci il codice a 6 cifre dalla tua app authenticator per confermare.',
- activate: 'Attiva',
- disableTotp: 'Disabilita Authenticator',
- disableConfirmHint: 'Inserisci un codice TOTP valido o un codice di backup per disabilitare l\'authenticator.',
- totpDisabled: 'App Authenticator disabilitata.',
- emailOtpEnabled: 'OTP via e-mail abilitato.',
- emailOtpDisabled: 'OTP via e-mail disabilitato.',
- smtpRequired: 'Configura e testa prima le impostazioni SMTP.',
- invalidCode: 'Codice non valido. Riprova.',
- enableEmailOtp: 'Abilita OTP via e-mail',
- disableEmailOtp: 'Disabilita OTP via e-mail',
- emailSetupEnterCode: 'È stato inviato un codice di verifica al tuo indirizzo e-mail. Inseriscilo qui sotto per confermare che possiedi questa casella di posta.',
- verifyAndEnable: 'Verifica e abilita',
- emailDisablePasswordHint: 'Inserisci la password del tuo account per confermare la disabilitazione dell\'OTP via e-mail.',
- passwordPlaceholder: 'Inserisci la tua password',
- backupCodesTitle: 'Salva i tuoi codici di backup',
- backupCodesWarning: 'Conserva questi codici in un posto sicuro. Ogni codice può essere usato una sola volta.',
- backupCodesRemaining: '{{count}} codici di backup rimanenti',
- savedCodes: 'Codici salvati',
- regenBackup: 'Rigenera codici di backup',
- regenBackupHint: 'Inserisci il tuo codice TOTP corrente per generare 10 nuovi codici di backup.',
- newBackupCodes: 'Nuovi codici di backup',
- linkedAccounts: 'Account SSO collegati',
- linkedAccountsDesc: 'Questi provider di identità esterni sono collegati al tuo account.',
- oidcUnlinked: 'Account scollegato.',
- },
- // Session Policy (#1706)
- sessionPolicy: {
- title: 'Criterio di sessione',
- description: 'Durata massima della sessione per i nuovi accessi utente. I token già emessi mantengono la scadenza originale.',
- preset24h: '24 ore',
- preset7d: '7 giorni',
- preset30d: '30 giorni',
- customHoursLabel: 'Durata personalizzata della sessione in ore',
- hoursSuffix: 'ore',
- warning: 'Le sessioni più lunghe riducono la protezione di disconnessione automatica. Consigliato solo per installazioni mono-utente attendibili.',
- },
- // OIDC provider settings
- oidc: {
- title: 'Provider SSO / OIDC',
- desc: 'Configura provider OpenID Connect per il single sign-on.',
- addProvider: 'Aggiungi provider',
- newProvider: 'Nuovo provider',
- empty: 'Nessun provider OIDC configurato.',
- created: 'Provider creato.',
- updated: 'Provider aggiornato.',
- deleted: 'Provider eliminato.',
- refreshIcon: 'Aggiorna icona',
- removeIcon: 'Rimuovi icona',
- iconRefreshed: 'Icona aggiornata.',
- iconRemoved: 'Icona rimossa.',
- iconFetchFailed: 'Impossibile recuperare l\'icona dall\'URL del provider.',
- deleteTitle: 'Elimina provider',
- deleteMessage: 'Eliminare "{{name}}"? Tutti gli account collegati verranno disconnessi.',
- form: {
- name: 'Nome visualizzato',
- issuerUrl: 'URL emittente',
- clientId: 'ID client',
- clientSecret: 'Client secret',
- scopes: 'Scope',
- iconUrl: 'URL icona (opzionale)',
- enabled: 'Abilitato',
- autoCreate: 'Crea utenti automaticamente',
- autoCreateDesc: 'Crea automaticamente un account locale al primo accesso.',
- autoLink: 'Collega automaticamente gli account esistenti',
- autoLinkDesc: 'Collega gli account locali esistenti tramite email al primo accesso.',
- secretHint: 'lascia vuoto per mantenere',
- secretPlaceholder: 'nuovo segreto',
- emailClaim: 'Claim email',
- emailClaimDesc: "Claim JWT usato come identità email. Usare 'preferred_username' o 'upn' per Azure Entra ID (che non invia email_verified). Usare solo nomi di claim affidabili.",
- emailClaimPlaceholder: 'e-mail',
- emailClaimCustomClaimAutoLinkWarning: 'I claim personalizzati sono sicuri per il collegamento automatico solo se il valore è gestito dal tenant (es. Azure Entra ID upn / preferred_username). Non abilitare il collegamento automatico se il tuo IdP consente agli utenti di auto-assegnare questo claim.',
- requireEmailVerified: 'Richiedi verifica email',
- requireEmailVerifiedDesc: "Accetta il claim email solo se il provider lo contrassegna come verificato.",
- requireEmailVerifiedWarning: 'Attenzione: l\'email sarà accettata senza verifica. Usare solo con provider affidabili.',
- requireEmailVerifiedAutoLink: 'Disabilitare prima il collegamento automatico per modificare questa impostazione.',
- defaultGroup: 'Gruppo predefinito',
- defaultGroupDesc: 'Gruppo assegnato agli utenti creati automaticamente. Ritorno a Viewers se non impostato.',
- defaultGroupViewersFallback: 'Viewers (predefinito)',
- autologin: 'Accesso automatico',
- autologinDesc: 'Reindirizza i visitatori non autenticati direttamente a questo provider. Solo un provider può avere questo flag.',
- },
- },
- // TODO: translate encryption keys
- encryption: {
- title: 'Stato crittografia MFA',
- enabledFromEnv: 'Crittografia a riposo abilitata (chiave dalla variabile d\'ambiente MFA_ENCRYPTION_KEY)',
- enabledFromFile: 'Crittografia a riposo abilitata (chiave caricata dalla directory dei dati)',
- enabledGenerated: 'Crittografia a riposo abilitata con chiave auto-generata',
- notConfigured: 'Crittografia a riposo non configurata',
- notConfiguredDesc: 'I segreti TOTP e i client_secrets OIDC sono memorizzati in chiaro. Imposta MFA_ENCRYPTION_KEY o riavvia Bambuddy con una directory dati scrivibile per generarne uno automaticamente.',
- allEncrypted: 'Tutti i segreti MFA sono crittografati a riposo.',
- legacyRowsLabel: 'Righe legacy in chiaro',
- encryptedRowsLabel: 'Righe crittografate',
- legacyRowsWarning: 'Rilevate {{count}} righe legacy in chiaro. Salva di nuovo il provider OIDC o re-iscrivi l\'app authenticator dell\'utente per migrare allo storage crittografato.',
- backupHint: 'La chiave generata automaticamente è memorizzata in DATA_DIR/.mfa_encryption_key ed è inclusa nei backup locali ZIP. Mantieni sicuri i tuoi backup o imposta MFA_ENCRYPTION_KEY esplicitamente.',
- decryptionBrokenTitle: 'Chiave di crittografia mancante',
- decryptionBrokenError: '{{count}} record crittografati non possono essere decifrati perché la chiave di crittografia non è più disponibile. Ripristina il precedente MFA_ENCRYPTION_KEY o DATA_DIR/.mfa_encryption_key per recuperare.',
- migrationErrorWarning: "{{count}} riga/righe legacy non sono state ricifrate all'avvio. Controlla i log del server e riavvia Bambuddy per riprovare.",
- },
- spoolbuddy: {
- infoTitle: 'Dispositivi SpoolBuddy',
- infoBody: 'I kiosk SpoolBuddy si registrano automaticamente tramite heartbeat. Annulla la registrazione qui se un dispositivo non è più in uso o se un duplicato obsoleto è rimasto dopo un crash del daemon.',
- duplicatesTitle: '{{count}} dispositivi registrati',
- duplicatesBody: 'Solo il primo dispositivo registrato viene utilizzato dall\'interfaccia kiosk. Se uno di questi è un duplicato obsoleto da un crash, annulla la sua registrazione — un dispositivo online si ri-registrerà al prossimo heartbeat.',
- empty: 'Nessun dispositivo SpoolBuddy registrato.',
- online: 'Online',
- offline: 'Offline',
- unregister: 'Annulla registrazione',
- unregisterSuccess: 'Dispositivo deregistrato',
- unregisterError: 'Deregistrazione non riuscita',
- confirmTitle: 'Annullare la registrazione del dispositivo SpoolBuddy?',
- confirmBody: 'Questo rimuoverà "{{hostname}}" ({{deviceId}}) dal database. Se il dispositivo è online, si ri-registrerà al prossimo heartbeat.',
- ipAddress: 'Indirizzo IP',
- firmware: 'Firmware',
- lastSeen: 'Ultimo rilevamento',
- daemonUptime: 'Uptime del daemon',
- systemUptime: 'Uptime sistema',
- never: 'mai',
- nfc: 'NFC',
- scale: 'Bilancia',
- cpuTemp: 'Temp. CPU',
- cpuLoad: 'Carico CPU',
- memory: 'Memoria',
- disk: 'Disco',
- update: 'Aggiorna',
- updateConfirmTitle: 'Aggiornare il daemon Spoolbuddy?',
- updateConfirmBody: 'Avviare un aggiornamento software su "{{hostname}}"? Il daemon si riavvierà al termine dell\'aggiornamento.',
- restartBrowser: 'Riavvia browser',
- restartBrowserConfirmTitle: 'Riavviare il browser del kiosk?',
- restartBrowserConfirmBody: 'Riavviare il browser del kiosk su "{{hostname}}"? Il display si oscurerà brevemente.',
- restartDaemon: 'Riavvia daemon',
- restartDaemonConfirmTitle: 'Riavviare il daemon Spoolbuddy?',
- restartDaemonConfirmBody: 'Riavviare il daemon Spoolbuddy su "{{hostname}}"? Il dispositivo sarà offline per alcuni secondi.',
- reboot: 'Riavvia',
- rebootConfirmTitle: 'Riavviare il dispositivo?',
- rebootConfirmBody: 'Riavviare "{{hostname}}"? Il dispositivo sarà offline per circa un minuto.',
- shutdown: 'Spegni',
- shutdownConfirmTitle: 'Spegnere il dispositivo?',
- shutdownConfirmBody: 'Spegnere "{{hostname}}"? Sarà necessario un accesso fisico per riaccenderlo.',
- commandConfirm: 'Conferma',
- commandQueued: 'Comando in coda',
- commandError: 'Invio comando non riuscito',
- },
- pipelineLimits: {
- title: 'Limiti pipeline dello slicer',
- maxCopiesLabel: 'Copie massime per esecuzione',
- maxCopiesDesc: 'Limite superiore alle copie che gli operatori possono richiedere durante l\'esecuzione di una pipeline. Il limite massimo lato server è 1000.',
- },
- // Slicer Pipelines (#1425): list/edit/delete preset bundles users saved
- // from the Slice dialog. Lives in Settings → Workflow → Pipelines sub-tab.
- pipelines: {
- title: 'Pipeline dello Slicer',
- subtitle: 'Bundle di preset riutilizzabili (stampante + processo + filamenti + tipo di piatto). Salvane uno dal dialogo Slice e applicalo con un clic al file successivo.',
- loading: 'Caricamento pipeline…',
- loadError: 'Impossibile caricare le pipeline.',
- confirmDelete: 'Eliminare questa pipeline? L\'operazione non può essere annullata.',
- staleWarning: 'Uno o più preset referenziati non esistono più. Risalva questa pipeline dal dialogo Slice per ripararla.',
- empty: {
- title: 'Nessuna pipeline ancora.',
- howto: 'Apri il dialogo Slice per un file, scegli stampante / processo / filamenti / piatto, poi clicca "Salva come pipeline". Le tue pipeline salvate appariranno qui.',
- },
- field: {
- name: 'Nome pipeline',
- description: 'Descrizione',
- targetPrinter: 'Stampante di destinazione',
- noTarget: '— Nessuna destinazione —',
- targetKind: 'Tipo destinazione',
- targetKindSpecific: 'Stampante specifica',
- targetKindClass: 'Classe stampante',
- targetModelClass: 'Modello stampante',
- fanoutStrategy: 'Strategia di distribuzione',
- fanout: {
- max_parallel: 'Max parallelo — distribuisci su qualsiasi stampante libera corrispondente',
- round_robin: 'Round robin — alterna tra stampanti idonee',
- fill_one_first: 'Riempi una prima — assegna tutte le copie a una stampante',
- },
- fanoutShort: {
- max_parallel: 'parallelo',
- round_robin: 'round robin',
- fill_one_first: 'prima una',
- },
- },
- action: {
- save: 'Salva',
- cancel: 'Annulla',
- rename: 'Rinomina',
- delete: 'Elimina',
- },
- slot: {
- printer: 'Stampante',
- process: 'Processo',
- filament: 'Filamento',
- filamentN: 'Filamento {{n}}',
- filamentAll: 'Tutti i {{n}} slot',
- bed: 'Piatto',
- },
- group: {
- profiles: 'Profili',
- filaments: 'Filamenti',
- },
- searchPlaceholder: 'Cerca pipeline…',
- filterTargetType: 'Filtra per tipo di destinazione',
- filterTarget: 'Filtra per destinazione',
- filter: {
- all: 'Tutte le destinazioni',
- noTarget: 'Nessuna destinazione',
- count: '{{shown}} / {{total}}',
- noMatches: 'Nessuna pipeline corrisponde ai filtri attuali.',
- },
- toast: {
- saved: 'Pipeline salvata',
- saveFailed: 'Salvataggio non riuscito',
- deleted: 'Pipeline eliminata',
- deleteFailed: 'Eliminazione non riuscita',
- },
- noTargetHint: 'Imposta una stampante di destinazione per eseguire',
- noTargetWarning: 'Imposta una stampante di destinazione prima di eseguire questa pipeline.',
- runs: {
- lastRun: 'Ultima esecuzione',
- status: {
- queued: 'in coda',
- slicing: 'slicing',
- dispatching: 'invio',
- in_progress: 'stampa',
- completed: 'completata',
- failed: 'fallita',
- partial_failure: 'fallimento parziale',
- cancelled: 'annullata',
- },
- },
- },
- },
- // Notifications (for push notifications)
- notification: {
- printStarted: {
- title: 'Stampa avviata',
- body: '{{printer}}: {{filename}} ha iniziato a stampare',
- },
- printCompleted: {
- title: 'Stampa completata',
- body: '{{printer}}: {{filename}} completata con successo',
- },
- printFailed: {
- title: 'Stampa fallita',
- body: '{{printer}}: {{filename}} fallita',
- },
- printStopped: {
- title: 'Stampa interrotta',
- body: '{{printer}}: {{filename}} interrotta',
- },
- printProgress: {
- title: 'Avanzamento stampa',
- body: '{{printer}}: {{filename}} al {{percent}}% completamento',
- },
- printerOffline: {
- title: 'Stampante offline',
- body: '{{printer}} e offline',
- },
- printerError: {
- title: 'Errore stampante',
- body: '{{printer}} – {{error}}',
- },
- filamentLow: {
- title: 'Filamento in esaurimento',
- body: '{{printer}}: Filamento in esaurimento',
- },
- maintenanceDue: {
- title: 'Manutenzione dovuta',
- body: '{{printer}}: {{items}} richiedono attenzione',
- },
- },
- // Errors
- errors: {
- generic: 'Qualcosa e andato storto',
- networkError: 'Errore di rete. Controlla la connessione.',
- notFound: 'Non trovato',
- unauthorized: 'Non autorizzato',
- serverError: 'Errore server',
- validationError: 'Controlla i dati inseriti',
- printerConnectionFailed: 'Connessione alla stampante fallita',
- saveFailed: 'Salvataggio modifiche fallito',
- deleteFailed: 'Eliminazione fallita',
- loadFailed: 'Caricamento dati fallito',
- },
- // HMS Errors modal
- hmsErrors: {
- title: 'Errori - {{name}}',
- noErrors: 'Nessun errore',
- viewOnWiki: 'Vedi su Bambu Lab Wiki',
- mqttVerifyFailedRemedy: 'Attiva la modalita sviluppatore sulla stampante, riavvia la stampante e avvia di nuovo il lavoro.',
- unknownCode: 'Codice HMS sconosciuto — consulta la wiki di Bambu Lab per i dettagli.',
- clearInstructions: 'Cancella gli errori sulla stampante per rimuoverli qui.',
- clearErrors: 'Cancella errori',
- clearSuccess: 'Errori HMS cancellati',
- clearFailed: 'Impossibile cancellare gli errori HMS',
- actionSuccess: 'Azione inviata alla stampante',
- actionFailed: 'Impossibile inviare l\'azione',
- runoutExpectedSlot: 'Il filamento in {{ranOut}} è esaurito. La stampante ora attende filamento compatibile in {{expected}}. Inserisci una bobina in {{expected}}, quindi seleziona Riprova.',
- runoutExpectedSlotOnly: 'La stampante attende filamento compatibile in {{expected}}. Inserisci lì una bobina, quindi seleziona Riprova.',
- runoutSlotUnknown: 'Il filamento è esaurito e la stampa è in pausa. Bambuddy non è riuscito a determinare quale slot la stampante attende ora — controlla lo schermo della stampante per lo slot richiesto.',
- actions: {
- RESUME_PRINTING: 'Riprendi stampa',
- RESUME_PRINTING_DEFECTS: 'Riprendi (difetti accettabili)',
- RESUME_PRINTING_PROBELM_SOLVED: 'Riprendi (problema risolto)',
- STOP_PRINTING: 'Ferma stampa',
- CHECK_ASSISTANT: 'Apri assistente',
- FILAMENT_EXTRUDED: 'Filamento estruso, continua',
- RETRY_FILAMENT_EXTRUDED: 'Non ancora estruso, riprova',
- CONTINUE: 'Completato, continua',
- LOAD_VIRTUAL_TRAY: 'Carica filamento',
- OK_BUTTON: 'OK',
- FILAMENT_LOAD_RESUME: 'Filamento caricato, riprendi',
- JUMP_TO_LIVEVIEW: 'Visualizza in diretta',
- NO_REMINDER_NEXT_TIME: 'Non ricordare la prossima volta',
- REFRESH_NOZZLE: 'Ricontrolla',
- IGNORE_NO_REMINDER_NEXT_TIME: 'Ignora e non ricordare',
- IGNORE_RESUME: 'Ignora e riprendi',
- PROBLEM_SOLVED_RESUME: 'Problema risolto, riprendi',
- TURN_OFF_FIRE_ALARM: 'Capito, spegni allarme antincendio',
- RETRY_PROBLEM_SOLVED: 'Riprova (problema risolto)',
- CANCLE: 'Annulla',
- STOP_DRYING: 'Ferma essiccazione',
- PROCEED: 'Procedi',
- OK_JUMP_RACK: 'OK',
- ABORT: 'Annulla',
- DISABLE_PURIFICATION: 'Disattiva purificazione per questa stampa',
- DONT_REMIND_NEXT_TIME: 'Non ricordarmelo',
- DBL_CHECK_CANCEL: 'Annulla',
- DBL_CHECK_DONE: 'Fatto',
- DBL_CHECK_RETRY: 'Riprova',
- DBL_CHECK_RESUME: 'Riprendi',
- DBL_CHECK_OK: 'Conferma',
- REMOVE_CLOSE_BTN: 'Chiudi',
- },
- },
- // MQTT Debug modal
- mqttDebug: {
- title: 'Log debug MQTT',
- searchPlaceholder: 'Cerca topic o payload...',
- noMessages: 'Nessun messaggio registrato',
- startLoggingHint: 'Clicca "Avvia logging" per iniziare a catturare messaggi MQTT',
- noMessagesMatch: 'Nessun messaggio corrisponde al filtro',
- adjustFilterHint: 'Prova a modificare la ricerca o i filtri',
- incoming: 'In ingresso',
- outgoing: 'In uscita',
- loggingStopped: 'Logging fermato',
- loggingActive: 'Logging attivo - i messaggi si aggiornano automaticamente',
- startLogging: 'Avvia logging',
- stopLogging: 'Ferma logging',
- clearLog: 'Pulisci log',
- topic: 'Argomento',
- timestamp: 'Timestamp',
- direction: 'Direzione',
- all: 'Tutti',
- },
- // Printer File Manager modal (printer internal storage)
- printerFiles: {
- zipStarted_one: 'Download ZIP avviato per {{count}} file',
- zipStarted_other: 'Download ZIP avviato per {{count}} file',
- zipPartial: 'Download ZIP avviato con {{successful}} file su {{total}}; non è stato possibile recuperare gli altri',
- downloadFailed: 'Download non riuscito: {{error}}',
- unknownError: 'Errore sconosciuto',
- shiftSelectHint: 'Maiusc-clic per selezionare un intervallo',
- selectFile: 'Seleziona {{name}}',
- deselectFile: 'Deseleziona {{name}}',
- title: 'Gestore file',
- storageUsed: 'Usato:',
- storageFree: 'Libero:',
- filterPlaceholder: 'Filtra file...',
- deleteButton: 'Elimina',
- deleteFiles: 'Elimina {{count}} file',
- deleteFileConfirm: 'Eliminare "{{name}}"? Questa azione non può essere annullata.',
- deleteFilesConfirm: 'Eliminare {{count}} file selezionati? Questa azione non può essere annullata.',
- noFiles: 'Nessun file sulla stampante',
- printerUnavailable: 'Il servizio file della stampante non è disponibile. Riprova quando la stampante è raggiungibile.',
- loadingFiles: 'Caricamento file...',
- failedToLoad: 'Caricamento file fallito',
- toast: {
- filesDeleted: 'Eliminati {{count}} file',
- deleteFailed: 'Eliminazione fallita: {{error}}',
- },
- },
- // Confirmations
- confirm: {
- delete: 'Sei sicuro di voler eliminare questo?',
- unsavedChanges: 'Hai modifiche non salvate. Sei sicuro di voler uscire?',
- clearQueue: 'Sei sicuro di voler svuotare la coda?',
- },
- // Login page
- login: {
- title: 'Login Bambuddy',
- subtitle: 'Accedi al tuo account',
- username: 'Nome utente',
- usernamePlaceholder: 'Inserisci il nome utente',
- usernameOrEmail: 'Nome utente o email',
- usernameOrEmailPlaceholder: 'Nome utente o @ Email',
- password: 'Password',
- passwordPlaceholder: 'Inserisci la password',
- signIn: 'Accedi',
- signingIn: 'Accesso in corso...',
- rememberMe: 'Ricordami',
- forgotPassword: 'Hai dimenticato la password?',
- autologinFailed: 'Accesso SSO automatico fallito. Scegli un provider qui sotto per continuare.',
- localDisabledNotice: 'L\'accesso locale è disabilitato. Usa uno dei provider SSO qui sotto.',
- loginSuccess: 'Accesso riuscito',
- loginFailed: 'Accesso fallito',
- enterCredentials: 'Inserisci nome utente e password',
- enterEmail: 'Inserisci il tuo indirizzo e-mail',
- oidcLoginFailed: 'Accesso OIDC fallito',
- oidcErrors: {
- providerError: "Il provider di identità ha restituito un errore",
- missingParameters: 'Parametri obbligatori mancanti nel callback OIDC',
- invalidState: 'Lo stato OIDC non è valido o è già stato utilizzato',
- stateExpired: 'La sessione OIDC è scaduta — riprovare',
- providerNotFound: 'Provider OIDC non trovato',
- discoveryFailed: 'Impossibile recuperare il documento di discovery OIDC',
- invalidDiscovery: 'Il documento di discovery OIDC non è valido',
- networkError: "Errore di rete durante lo scambio di token OIDC",
- badResponse: "Risposta inattesa durante lo scambio di token OIDC",
- noIdToken: 'Il provider OIDC non ha restituito un ID token',
- validationFailed: 'La validazione del token OIDC non è riuscita',
- nonceMismatch: 'Il nonce OIDC non corrisponde — possibile attacco di replay',
- missingSubClaim: 'Il token OIDC è privo del claim sub',
- noLinkedAccount: 'Nessun account locale è collegato a questa identità OIDC',
- accountInactive: 'Il tuo account è inattivo',
- userResolutionFailed: 'Impossibile risolvere il tuo account',
- internalError: "Si è verificato un errore interno durante il login OIDC",
- tokenExchangeFailed: 'Lo scambio di token OIDC non è riuscito',
- },
- forgotPasswordTitle: 'Password dimenticata',
- forgotPasswordMessage: 'Se hai dimenticato la password, contatta il tuo amministratore di sistema per reimpostarla.',
- forgotPasswordEmailMessage: 'Inserisci il tuo indirizzo email e ti invieremo una nuova password.',
- emailAddress: 'Indirizzo email',
- emailPlaceholder: 'tua.email@esempio.com',
- cancel: 'Annulla',
- sending: 'Invio...',
- sendResetEmail: 'Invia email di reimpostazione',
- howToReset: 'Come reimpostare la password:',
- resetStep1: 'Contatta il tuo amministratore Bambuddy',
- resetStep2: 'Chiedi di reimpostare la password in Gestione utenti',
- resetStep3: 'Possono impostare una nuova password temporanea',
- resetStep4: 'Accedi con la nuova password e cambiala in Impostazioni',
- gotIt: 'Capito',
- twoFA: {
- title: 'Autenticazione a due fattori',
- subtitle: 'Il tuo account è protetto da 2FA. Inserisci il codice di verifica qui sotto.',
- methodAuthenticator: 'App di autenticazione',
- methodEmail: 'Codice via e-mail',
- methodBackup: 'Codice di recupero',
- instructionsTotp: "Apri la tua app di autenticazione e inserisci il codice a 6 cifre per Bambuddy.",
- instructionsEmail: "Un codice a 6 cifre è stato inviato al tuo indirizzo e-mail. È valido per 10 minuti.",
- instructionsEmailNotSent: 'Clicca il pulsante qui sotto per ricevere un codice di verifica via e-mail.',
- instructionsBackup: 'Inserisci uno dei tuoi codici di recupero a 8 caratteri. Ogni codice può essere utilizzato una sola volta.',
- sendCodeButton: 'Invia codice via e-mail',
- sendingCode: 'Invio in corso...',
- resendCode: 'Invia nuovamente il codice',
- codeLabel: 'Codice di verifica',
- backupCodeLabel: 'Codice di recupero',
- codePlaceholder: '000000',
- backupCodePlaceholder: 'XXXXXXXX',
- verifyButton: 'Verifica',
- verifyingButton: 'Verifica in corso...',
- backToLogin: '← Torna alla pagina di accesso',
- orContinueWith: 'oppure accedi con',
- signInWith: 'Accedi con {{provider}}',
- enterCode: 'Inserisci il codice di verifica',
- sendCodeFailed: 'Invio del codice di verifica non riuscito',
- invalidCode: 'Codice non valido. Riprova.',
- },
- resetPassword: {
- title: 'Imposta nuova password',
- subtitle: 'Inserisci e conferma la nuova password qui sotto.',
- newPassword: 'Nuova password',
- newPasswordPlaceholder: 'Almeno 8 caratteri',
- confirmPassword: 'Conferma password',
- confirmPasswordPlaceholder: 'Ripeti la nuova password',
- saving: 'Salvataggio…',
- submit: 'Imposta nuova password',
- backToLogin: 'Torna al login',
- passwordsDoNotMatch: 'Le password non coincidono',
- passwordTooShort: 'La password deve avere almeno 8 caratteri',
- resetFailed: 'Reimpostazione non riuscita. Il link potrebbe essere scaduto.',
- },
- },
- // Setup page
- setup: {
- title: 'Configurazione Bambuddy',
- subtitle: 'Configura autenticazione per la tua istanza Bambuddy',
- enableAuth: 'Abilita autenticazione',
- adminAccount: 'Account admin',
- adminAccountDesc: 'Se esistono già admin, l\'autenticazione verrà abilitata usando gli account esistenti. Lascia i campi sotto vuoti per usare gli admin esistenti, oppure inserisci nuove credenziali per creare un nuovo utente admin.',
- adminUsername: 'Nome utente admin',
- adminPassword: 'Password admin',
- optionalIfAdminExists: '(opzionale se esistono admin)',
- adminUsernamePlaceholder: 'Inserisci nome utente admin (opzionale)',
- adminPasswordPlaceholder: 'Inserisci password admin (opzionale)',
- confirmPassword: 'Conferma password',
- confirmPasswordPlaceholder: 'Conferma password admin',
- settingUp: 'Configurazione...',
- completeSetup: 'Completa configurazione',
- toast: {
- authEnabledAdminCreated: 'Autenticazione abilitata e utente admin creato',
- authEnabledExistingAdmins: 'Autenticazione abilitata usando admin esistenti',
- setupCompleted: 'Configurazione completata',
- enterBothCredentials: 'Inserisci nome utente e password admin, oppure lascia entrambi vuoti per usare admin esistenti',
- passwordsDoNotMatch: 'Le password non coincidono',
- passwordTooShort: 'La password deve essere di almeno 6 caratteri',
- },
- },
- // Password change
- changePassword: {
- title: 'Cambia password',
- currentPassword: 'Password attuale',
- currentPasswordPlaceholder: 'Inserisci password attuale',
- newPassword: 'Nuova password',
- newPasswordPlaceholder: 'Inserisci nuova password (min 6 caratteri)',
- confirmPassword: 'Conferma nuova password',
- confirmPasswordPlaceholder: 'Conferma nuova password',
- passwordsDoNotMatch: 'Le password non coincidono',
- passwordTooShort: 'La password deve essere di almeno 6 caratteri',
- changing: 'Modifica in corso...',
- success: 'Password cambiata con successo',
- failed: 'Modifica password fallita',
- },
- // Plate detection alert
- plateAlert: {
- title: 'Stampa in pausa!',
- message: 'Oggetti rilevati sul piatto. La stampa è stata messa automaticamente in pausa. Svuota il piatto e riprendi la stampa.',
- understand: 'Ho capito',
- },
- // Camera page
- camera: {
- title: 'Vista camera',
- invalidPrinterId: 'ID stampante non valido',
- live: 'Live',
- snapshot: 'Istantanea',
- restartStream: 'Riavvia stream',
- refreshSnapshot: 'Aggiorna snapshot',
- fullscreen: 'Schermo intero',
- exitFullscreen: 'Esci da schermo intero',
- connectingToCamera: 'Connessione alla camera...',
- capturingSnapshot: 'Acquisizione snapshot...',
- connectionLost: 'Connessione persa',
- connectionFailed: 'Connessione camera fallita',
- reconnecting: 'Riconnessione tra {{countdown}}s... (tentativo {{attempt}}/{{max}})',
- reconnectNow: 'Riconnetti ora',
- cameraUnavailable: 'Camera non disponibile',
- cameraUnavailableDesc: 'Assicurati che la stampante sia accesa e connessa.',
- noCamera: 'Nessuna camera disponibile',
- retry: 'Riprova',
- cameraStream: 'Stream camera',
- zoomOut: 'Zoom indietro',
- zoomIn: 'Zoom avanti',
- resetZoom: 'Reimposta zoom',
- recording: 'Registrazione',
- startRecording: 'Avvia registrazione',
- stopRecording: 'Ferma registrazione',
- chamberLight: 'Accendi/Spegni luce camera',
- unavailable: 'Telecamera non disponibile',
- diagnose: {
- button: 'Diagnostica',
- modalTitle: 'Diagnostica telecamera',
- running: 'Diagnostica in corso...',
- runFailed: 'Impossibile eseguire la diagnostica: {{error}}',
- retry: 'Riesegui',
- stage: {
- tcp_reachable: 'Raggiungibilità di rete',
- first_frame: 'Acquisizione frame',
- live_stream_active: 'Stream live attivo',
- },
- summary: {
- all_ok: 'La telecamera funziona. La diagnostica ha completato tutte le fasi con successo.',
- live_stream_active_healthy: 'La telecamera sta trasmettendo con frame recenti — nessun test necessario.',
- printer_unreachable: 'La stampante non è raggiungibile. Verifica l\'indirizzo IP, la connessione di rete e che la stampante sia accesa.',
- camera_port_closed: 'La stampante risponde ma la porta della telecamera è chiusa. Assicurati che la modalità LAN e la modalità sviluppatore siano attive nelle impostazioni della stampante.',
- no_frame: 'Connessione alla telecamera riuscita ma nessun frame ricevuto. Riprova o verifica che la telecamera sia abilitata nelle impostazioni della stampante.',
- unknown_failure: 'Diagnostica della telecamera fallita per motivo sconosciuto. Controlla il log di supporto per i dettagli.',
- },
- meta: {
- protocol: 'Protocollo',
- port: 'Porta',
- profile: 'Profilo',
- },
- },
- },
- // Groups management
- groups: {
- title: 'Gestione gruppi',
- subtitle: 'Gestisci gruppi permessi per controllo accesso',
- backToSettings: 'Torna a Impostazioni',
- createGroup: 'Crea gruppo',
- noPermission: 'Non hai il permesso di accedere a questa pagina.',
- system: 'Sistema',
- noDescription: 'Nessuna descrizione',
- usersCount: '{{count}} utenti',
- permissionsCount: '{{count}} permessi',
- edit: 'Modifica',
- delete: 'Elimina',
- toast: {
- created: 'Gruppo creato con successo',
- updated: 'Gruppo aggiornato con successo',
- deleted: 'Gruppo eliminato con successo',
- enterGroupName: 'Inserisci un nome gruppo',
- },
- modal: {
- editGroup: 'Modifica gruppo',
- createGroup: 'Crea gruppo',
- cancel: 'Annulla',
- saving: 'Salvataggio...',
- creating: 'Creazione...',
- saveChanges: 'Salva modifiche',
- },
- form: {
- groupName: 'Nome gruppo',
- groupNamePlaceholder: 'Inserisci nome gruppo',
- systemGroupWarning: 'I nomi dei gruppi di sistema non possono essere modificati',
- description: 'Descrizione',
- descriptionPlaceholder: 'Inserisci descrizione (opzionale)',
- permissions: 'Permessi ({{count}} selezionati)',
- },
- deleteModal: {
- title: 'Elimina gruppo',
- message: 'Sei sicuro di voler eliminare questo gruppo? Gli utenti in questo gruppo perderanno questi permessi.',
- confirm: 'Elimina gruppo',
- },
- editor: {
- title: 'Modifica gruppo',
- createTitle: 'Crea gruppo',
- search: 'Cerca permessi...',
- selectAll: 'Seleziona tutto',
- clearAll: 'Deseleziona tutto',
- permissionsSelected: '{{count}} selezionati',
- noResults: 'Nessun permesso corrisponde alla ricerca',
- websocketHint: "Necessario per gli aggiornamenti in tempo reale. Senza questo permesso, l'interfaccia ripiega sul polling periodico.",
- },
- },
- // Users management
- users: {
- title: 'Gestione utenti',
- subtitle: 'Gestisci utenti e accesso alla tua istanza Bambuddy',
- backToSettings: 'Torna a Impostazioni',
- createUser: 'Crea utente',
- noPermission: 'Non hai il permesso di accedere a questa pagina.',
- admin: 'Amministratore',
- noGroups: 'Nessun gruppo',
- active: 'Attivo',
- inactive: 'Inattivo',
- edit: 'Modifica',
- delete: 'Elimina',
- system: 'Sistema',
- noGroupsAvailable: 'Nessun gruppo disponibile',
- table: {
- username: 'Nome utente',
- groups: 'Gruppi',
- status: 'Stato',
- actions: 'Azioni',
- },
- toast: {
- created: 'Utente creato con successo',
- updated: 'Utente aggiornato con successo',
- deleted: 'Utente eliminato con successo',
- fillRequired: 'Compila tutti i campi obbligatori',
- passwordsDoNotMatch: 'Le password non coincidono',
- passwordTooShort: 'La password deve essere di almeno 6 caratteri',
- ldapProvisioned: 'Utente LDAP "{{username}}" provisionato',
- },
- modal: {
- createUser: 'Crea utente',
- editUser: 'Modifica utente',
- cancel: 'Annulla',
- creating: 'Creazione...',
- saving: 'Salvataggio...',
- saveChanges: 'Salva modifiche',
- advancedAuthSubtitle: 'con autenticazione avanzata',
- // Manual LDAP provisioning (#1298) — English fallbacks
- tabsAriaLabel: 'Origine utente',
- localTab: 'Locale',
- ldapTab: 'LDAP',
- ldapSearchLabel: 'Cerca nella directory',
- ldapSearchPlaceholder: 'Digita un nome utente, nome o e-mail...',
- ldapMinChars: 'Digita almeno 2 caratteri per cercare',
- ldapTypeToSearch: 'Inizia a digitare per cercare nella directory LDAP',
- ldapSearching: 'Ricerca nella directory...',
- ldapNoResults: 'Nessun utente corrispondente nella directory',
- ldapSearchError: 'Ricerca nella directory fallita. Verifica lo stato del server LDAP.',
- ldapAlreadyProvisioned: 'Già provisionato',
- ldapSelectedLabel: 'Selezionato',
- ldapProvision: 'Provisiona utente',
- ldapProvisioning: 'Provisioning...',
- ldapErrorProvision: 'Provisioning fallito. Verifica lo stato del server LDAP e riprova.',
- },
- form: {
- username: 'Nome utente',
- usernamePlaceholder: 'Inserisci nome utente',
- email: 'E-mail',
- emailPlaceholder: 'utente@esempio.com',
- password: 'Password',
- passwordPlaceholder: 'Inserisci password',
- confirmPassword: 'Conferma password',
- confirmPasswordPlaceholder: 'Conferma password',
- newPasswordPlaceholder: 'Inserisci nuova password',
- confirmNewPasswordPlaceholder: 'Conferma nuova password',
- leaveBlankToKeep: 'lascia vuoto per mantenere attuale',
- groups: 'Gruppi',
- optional: 'opzionale',
- autoGeneratedPassword: 'Una password sicura verrà generata automaticamente e inviata via email all\'utente.',
- passwordManagedByAdvancedAuth: 'La password è gestita dall\'autenticazione avanzata. Usa "Reimposta password" per inviare una nuova password all\'utente via email.',
- resetPassword: 'Reimposta password',
- resettingPassword: 'Reimpostazione password...',
- },
- deleteModal: {
- title: 'Elimina utente',
- message: 'Sei sicuro di voler eliminare questo utente? Questa azione non può essere annullata.',
- confirm: 'Elimina utente',
- },
- },
- // Stream overlay
- streamOverlay: {
- title: 'Overlay stream',
- invalidPrinterId: 'ID stampante non valido',
- cameraStream: 'Stream camera',
- progress: 'Avanzamento',
- eta: 'ETA',
- printerIdle: 'Stampante inattiva',
- printerOffline: 'Stampante offline',
- builder: {
- title: 'Overlay per streaming',
- description: 'Compone l\'URL di un overlay per streaming: una vista telecamera a schermo intero con i dati di stampa in tempo reale sovrapposti, per OBS, un display a parete o qualsiasi sorgente browser. Scegli i campi e copia l\'URL.',
- printer: 'Stampante',
- size: 'Dimensione del testo',
- sizeSmall: 'Piccola',
- sizeMedium: 'Media',
- sizeLarge: 'Grande',
- fps: 'Frequenza fotogrammi',
- fpsHint: 'Le telecamere A1 e P1 si fermano intorno a 5 fps, qualunque valore venga richiesto.',
- token: 'Token overlay (facoltativo)',
- tokenHint: 'Serve solo con il login attivo: OBS non ha una sessione propria. Creane uno sopra con ambito Overlay per streaming.',
- tokenWarning: 'Questo URL contiene un token: chi riesce a leggerlo può vedere lo streaming e il nome del file. Revoca il token per interrompere l\'accesso.',
- fields: 'Campi da mostrare',
- fieldPrinter: 'Nome stampante',
- fieldFilename: 'Nome file',
- fieldStatus: 'Stato',
- fieldProgress: 'Barra di avanzamento',
- fieldLayers: 'Numero di layer',
- fieldEta: 'Tempo rimanente e orario di fine',
- fieldCamera: 'Immagine telecamera',
- chamberHint: 'La temperatura della camera compare solo sui modelli con un vero sensore: P1 e A1 riportano un valore privo di significato, quindi viene omessa.',
- urlTitle: 'URL overlay',
- open: 'Apri',
- showPreview: 'Mostra anteprima',
- hidePreview: 'Nascondi anteprima',
- previewTitle: 'Anteprima overlay',
- },
- status: {
- printing: 'In stampa',
- paused: 'In pausa',
- finished: 'Completata',
- failed: 'Fallita',
- idle: 'Inattiva',
- unknown: 'Sconosciuto',
- },
- },
- // Profiles
- profiles: {
- title: 'Profili',
- subtitle: 'Gestisci preset slicer e calibrazioni pressure advance',
- tabs: {
- bambuCloud: 'Bambu Cloud',
- orcaCloud: 'Orca Cloud',
- local: 'Profili locali',
- kprofiles: 'Profili K',
- },
- orcaCloud: {
- connectedAs: 'Connesso come',
- connectedShort: 'Connesso a Orca Cloud',
- logout: 'Disconnetti',
- noLogoutPermission: 'Non hai il permesso di disconnetterti',
- noConnectPermission: 'Non hai il permesso di connetterti a Orca Cloud',
- retry: 'Riprova',
- connectButton: 'Connetti Orca Cloud',
- connect: {
- title: 'Connetti a Orca Cloud',
- description: 'Accedi al tuo account Orca Cloud per sincronizzare i profili dello slicer in Bambuddy.',
- },
- device: {
- title: 'Approva Bambuddy in Orca Cloud',
- instruction: 'Apri Orca Cloud e approva questo codice. Bambuddy si connette automaticamente non appena approvi.',
- codeLabel: 'Il tuo codice di associazione',
- openButton: 'Apri la pagina di approvazione di Orca Cloud',
- manualHint: 'Oppure vai su {{url}} e inserisci il codice qui sopra.',
- waiting: 'In attesa della tua approvazione…',
- cancel: 'Annulla',
- },
- profiles: {
- title: 'I tuoi profili Orca Cloud ({{count}})',
- refresh: 'Aggiorna',
- empty: 'Nessun profilo trovato nel tuo account Orca Cloud.',
- },
- toast: {
- disconnected: 'Disconnesso da Orca Cloud',
- },
- errors: {
- startFailed: 'Impossibile avviare l\'accesso a Orca Cloud.',
- denied: 'L\'associazione è stata rifiutata in Orca Cloud.',
- expired: 'Il codice di associazione è scaduto. Fai clic su Connetti per riprovare.',
- pollFailed: 'Connessione persa durante l\'attesa dell\'approvazione. Riprova.',
- },
- },
- localProfiles: {
- title: 'Profili locali',
- subtitle: 'Importa e gestisci preset slicer da OrcaSlicer',
- import: 'Importa profili',
- importDesc: 'Trascina file .bbscfg, .bbsflmt, .orca_filament, .zip o .json qui',
- importing: 'Importazione...',
- search: 'Cerca preset locali...',
- noPresets: 'Nessun preset locale ancora',
- noSearchResults: 'Nessun preset corrisponde alla ricerca',
- badge: 'Locale',
- edit: 'Modifica',
- delete: 'Elimina',
- cancel: 'Annulla',
- deleteConfirmTitle: 'Elimina preset',
- deleteConfirm: 'Sei sicuro di voler eliminare questo preset? Questa azione non può essere annullata.',
- source: 'Fonte',
- inheritsFrom: 'Eredita da',
- filamentType: 'Tipo',
- vendor: 'Produttore',
- compatiblePrinters: 'Stampanti',
- nozzleTemp: 'Temp. ugello',
- cost: 'Costo',
- density: 'Densità',
- pressureAdvance: 'Pressure Advance',
- filament: 'Filamento',
- process: 'Processo',
- printer: 'Stampante',
- toast: {
- importSuccess: '{{count}} preset importati',
- importSkipped: '{{count}} preset saltati (duplicati)',
- importError: '{{count}} errori durante l\'importazione',
- deleted: 'Preset eliminato',
- updated: 'Preset aggiornato',
- },
- },
- connectedAs: 'Connesso come',
- signInExpiredTitle: 'Accesso a Bambu Cloud scaduto',
- signInExpiredBody: 'Bambu Lab non accetta più il token salvato. Accedi di nuovo per ripristinare i profili cloud, le importazioni da MakerWorld e i controlli del firmware.',
- logout: 'Esci',
- noLogoutPermission: 'Non hai il permesso di disconnetterti',
- failedToLoad: 'Caricamento profili fallito',
- retry: 'Riprova',
- time: {
- justNow: 'Proprio ora',
- minsAgo: '{{count}}m fa',
- hoursAgo: '{{count}}h fa',
- daysAgo: '{{count}}g fa',
- },
- toast: {
- loggedOut: 'Disconnesso',
- },
- login: {
- title: 'Connetti a Bambu Cloud',
- subtitle: 'Sincronizza i preset del slicer tra dispositivi',
- email: 'E-mail',
- password: 'Password',
- region: 'Regione',
- regionGlobal: 'Globale',
- regionChina: 'Cina',
- verificationCode: 'Codice di verifica',
- totpCode: 'Codice autenticatore',
- checkEmail: 'Controlla la tua email ({{email}}) per un codice a 6 cifre',
- enterTotpHint: 'Inserisci il codice a 6 cifre dalla tua app autenticatore',
- accessToken: 'Token di accesso',
- accessTokenHint: 'Incolla il tuo access token Bambu Cloud. Gli account della regione Cina devono usare questa via (vincolati al numero di telefono — login via e-mail non disponibile). Il wiki spiega come recuperare il token dai cookie di MakerWorld.',
- back: 'Indietro',
- loginButton: 'Accedi',
- verifyButton: 'Verifica',
- setTokenButton: 'Imposta token',
- useToken: 'Usa access token invece',
- captchaTitle: 'Bambu Cloud richiede un CAPTCHA',
- captchaBody: 'Bambu sta richiedendo un CAPTCHA alla tua rete prima di accettare un accesso, e la verifica non può essere completata da Bambuddy. Email e password non sono il problema. Il blocco è legato al tuo indirizzo IP pubblico e di solito si risolve da solo entro qualche ora; riprovare di continuo lo prolunga. Per accedere subito, usa invece un token di accesso preso da una sessione del browser.',
- useEmail: 'Accedi con email invece',
- toast: {
- loggedIn: 'Accesso riuscito',
- codeSent: 'Codice di verifica inviato via email',
- enterTotp: 'Inserisci il codice dalla tua app autenticatore',
- tokenSet: 'Token impostato con successo',
- },
- },
- presets: {
- myPreset: 'Il mio preset (modificabile)',
- duplicate: 'Duplica',
- editable: 'Modificabile',
- failedToLoadDetails: 'Caricamento dettagli preset fallito',
- deleteConfirm: 'Eliminare questo preset?',
- deleteWarning: 'Questo eliminerà definitivamente "{{name}}" da Bambu Cloud. Questa azione non può essere annullata.',
- noDuplicatePermission: 'Non hai il permesso di duplicare preset',
- noEditPermission: 'Non hai il permesso di modificare preset',
- noDeletePermission: 'Non hai il permesso di eliminare preset',
- types: {
- filament: 'Preset filamento',
- printer: 'Preset stampante',
- process: 'Preset processo',
- },
- toast: {
- deleted: 'Preset eliminato',
- created: 'Preset creato',
- updated: 'Preset aggiornato',
- duplicated: 'Preset duplicato',
- fieldAdded: 'Campo "{{key}}" aggiunto',
- exported: 'Preset esportato',
- },
- baseLabel: 'Base: {{name}}',
- currentLabel: 'Corrente: {{name}}',
- newPreset: 'Nuovo preset',
- editPreset: 'Modifica preset',
- duplicatePreset: 'Duplica preset',
- createNewPreset: 'Crea nuovo preset',
- customizeSettings: 'Personalizza le impostazioni per il nuovo preset',
- compareWithBase: 'Confronta con base',
- compare: 'Confronta',
- // CreatePresetModal - Basic Info
- basePreset: 'Preset base',
- selectBasePreset: 'Seleziona preset base...',
- presetName: 'Nome preset',
- myCustomPreset: 'Il mio preset personalizzato',
- inheritsFrom: 'Deriva da',
- dropJsonToImport: 'Rilascia JSON per importare',
- // CreatePresetModal - Tabs
- tabs: {
- common: 'Comune',
- allFields: 'Tutti i campi',
- },
- // CreatePresetModal - All Fields Tab
- availableFields: 'Campi disponibili',
- searchFieldsPlaceholder: 'Cerca campi...',
- noMatchingFields: 'Nessun campo corrispondente',
- allFieldsAdded: 'Tutti i campi aggiunti',
- addCustomField: 'Aggiungi campo personalizzato',
- yourOverrides: 'Le tue override',
- noOverridesYet: 'Nessun override ancora',
- clickFieldsToAdd: 'Clicca i campi a sinistra per aggiungerli',
- saveAsTemplate: 'Salva come template',
- jsonTip: 'Suggerimento: trascina e rilascia un file .json ovunque in questa modale per importare impostazioni',
- },
- cloudView: {
- searchPlaceholder: 'Cerca preset...',
- templates: 'Template',
- refresh: 'Aggiorna',
- newPreset: 'Nuovo preset',
- clearFilters: 'Pulisci filtri',
- // Compare mode
- compareMode: 'Modalita confronto',
- selectAnotherPreset: 'Seleziona un altro preset {{type}}',
- clickTwoPresets: 'Clicca due preset dello stesso tipo per confrontare',
- selectFirst: '1. Seleziona il primo',
- selectSecond: '2. Seleziona il secondo',
- compareNow: 'Confronta ora',
- // Status row
- lastSynced: 'Ultima sincronizzazione:',
- showingCount: 'Mostrati {{showing}} di {{total}} preset',
- noPresetsFound: 'Nessun preset trovato',
- // Column headers
- columns: {
- filament: 'Filamento',
- process: 'Processo',
- printer: 'Stampante',
- },
- noFilamentPresets: 'Nessun preset filamento',
- noProcessPresets: 'Nessun preset processo',
- noPrinterPresets: 'Nessun preset stampante',
- // Filters
- filters: {
- type: 'Tipo',
- owner: 'Proprietario',
- printer: 'Stampante',
- nozzle: 'Ugello',
- filament: 'Filamento',
- layer: 'Layer',
- all: 'Tutti',
- myPresets: 'I miei preset',
- builtIn: 'Integrati',
- process: 'Processo',
- },
- // Permissions
- noTemplatesPermission: 'Non hai il permesso di gestire i template',
- noRefreshPermission: 'Non hai il permesso di aggiornare i profili',
- noCreatePermission: 'Non hai il permesso di creare preset',
- },
- templates: {
- title: 'Template rapidi',
- noTemplates: 'Nessun template ancora',
- createFirst: 'Crea template dall\'editor preset',
- typeFilter: 'Tipo:',
- deleteTitle: 'Elimina template',
- deleteWarning: 'Questa azione non può essere annullata',
- deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?',
- namePlaceholder: 'Nome template',
- descriptionPlaceholder: 'Descrizione',
- settingsJson: 'Impostazioni (JSON)',
- fieldsCount: '{{count}} campi',
- shownInModals: 'Mostrati nelle modali',
- hiddenInModals: 'Nascosti nelle modali',
- apply: 'Applica',
- toast: {
- deleted: 'Template eliminato',
- updated: 'Template aggiornato',
- created: 'Template creato',
- applied: 'Template applicato',
- },
- },
- },
- // Support/Debug
- support: {
- debugLoggingActive: 'Log debug attivo',
- manageLogs: 'Gestisci',
- collectItem7: 'Connettività stampante e versioni firmware',
- collectItem8: 'Stato integrazioni (Spoolman, MQTT, HA)',
- collectItem9: 'Interfacce di rete (solo subnet)',
- collectItem10: 'Versioni dei pacchetti Python',
- collectItem11: 'Controlli di integrità del database',
- collectItem12: 'Dettagli dell\'ambiente Docker',
- bundleGenerating: 'Generazione del pacchetto...',
- bundleStepConnection: 'Controlli di connettività delle stampanti in corso',
- bundleStepVirtualPrinters: 'Controlli di configurazione delle stampanti virtuali in corso',
- bundleStepLogScan: 'Analisi dei log recenti per problemi noti',
- bundleStepBuild: 'Creazione dello ZIP del pacchetto di supporto',
- },
- // File manager
- fileManager: {
- variants: {
- badge: '{{count}} versioni',
- groupAction: 'Raggruppa come versioni',
- groupTooltip: 'Segna questi file come lo stesso lavoro elaborato per stampanti diverse',
- grouped: '{{count}} file raggruppati come versioni',
- printAlternatives: 'Stampa ({{count}} alternative)',
- },
- title: 'Gestore file',
- subtitle: 'Organizza e gestisci i tuoi file di stampa',
- uploadFiles: 'Carica file',
- newFolder: 'Nuova cartella',
- folderName: 'Nome cartella',
- folderNamePlaceholder: 'es., Parti funzionali',
- renameFile: 'Rinomina file',
- renameFolder: 'Rinomina cartella',
- invalidFilenameChar: 'Il carattere "{{char}}" non è consentito nei nomi dei file di stampa. La scheda SD della stampante rifiuta: < > : " / \\ | ? *',
- moveFiles: 'Sposta {{count}} file',
- rootNoFolder: 'Root (nessuna cartella)',
- current: 'corrente',
- linkFolder: 'Collega cartella',
- linkFolderDescription: 'Collega "{{name}}" a un progetto o archivio per accesso rapido.',
- project: 'Progetto',
- archive: 'Archivio',
- noProjectsFound: 'Nessun progetto trovato',
- noArchivesFound: 'Nessun archivio trovato',
- unlink: 'Scollega',
- link: 'Collega',
- dragDropFiles: 'Trascina e rilascia file qui',
- dropFilesHere: 'Rilascia file qui',
- releaseToUpload: 'Rilascia per caricare',
- orClickToBrowse: 'oppure clicca per sfogliare',
- allFileTypesSupported: 'Tutti i tipi di file supportati. I file ZIP saranno estratti.',
- zipFilesDetected: 'File ZIP rilevati',
- zipExtractOptions: 'I file ZIP saranno estratti. Scegli come gestire la struttura cartelle:',
- preserveZipStructure: 'Mantieni struttura cartelle dal ZIP',
- createFolderFromZip: 'Crea cartella dal nome ZIP',
- stlThumbnailGeneration: 'Generazione miniature STL',
- zipMayContainStl: 'I file ZIP possono contenere STL. Le miniature possono essere generate durante l\'estrazione.',
- thumbnailsCanBeGenerated: 'Le miniature possono essere generate per file STL. I modelli grandi possono richiedere più tempo.',
- generateThumbnailsForStl: 'Genera miniature per file STL',
- threemfDetected: 'File 3MF rilevati',
- threemfExtractionInfo: 'Modello stampante, materiale, colore e impostazioni stampa saranno estratti automaticamente dai file 3MF.',
- willBeExtracted: 'Sara estratto',
- filesExtracted: '{{count}} file estratti',
- uploadComplete: 'Caricamento completato: {{succeeded}} riusciti',
- uploadFailed: 'Caricamento fallito',
- zipFilesFailed: '{{count}} file falliti',
- uploading: 'Caricamento...',
- changeLink: 'Cambia collegamento...',
- linkTo: 'Collega a...',
- linkToProjectOrArchive: 'Collega a progetto o archivio',
- generateThumbnail: 'Genera miniatura',
- generateThumbnails: 'Genera miniature',
- generateThumbnailsForMissing: 'Genera miniature per STL senza miniatura',
- gridView: 'Vista griglia',
- listView: 'Vista elenco',
- lowDiskSpaceWarning: 'Avviso spazio disco basso',
- lowDiskSpaceDetails: 'Solo {{free}} liberi su {{total}} totali. La soglia e {{threshold}} GB nelle impostazioni.',
- files: 'File',
- folders: 'Cartelle',
- size: 'Dimensione',
- free: 'Libero',
- allFiles: 'Tutti i file',
- allExternal: 'Esterni',
- externalIsEmpty: 'Nessun file esterno',
- externalEmptyDescription: 'I file delle tue cartelle esterne collegate appariranno qui.',
- wrap: 'A capo',
- enableTextWrapping: 'Abilita a capo testo',
- disableTextWrapping: 'Disabilita a capo testo',
- collapse: 'Comprimi',
- collapseFoldersByDefault: 'Comprimi le cartelle per impostazione predefinita',
- expandFoldersByDefault: 'Espandi le cartelle per impostazione predefinita',
- folderSort: 'Ordina cartelle',
- folderSortByName: 'Per nome',
- folderSortByActivity: 'Per attività recente',
- dragToResizeTooltip: 'Trascina per ridimensionare, doppio clic per reset',
- searchFiles: 'Cerca file...',
- searchSubfoldersHint: 'Sottocartelle incluse',
- readme: {
- truncated: 'Troncato',
- show: 'Mostra README',
- hide: 'Nascondi README',
- label: 'README',
- },
- tags: {
- title: 'Etichette',
- subtitle: 'Etichetta i file per filtri trasversali — giocattoli, sicuri per bambini, solo PETG, qualunque cosa serva.',
- manage: 'Etichette',
- manageTitle: 'Gestisci il catalogo delle etichette',
- add: 'Nuova etichetta',
- edit: 'Rinomina etichetta',
- name: 'Nome',
- fileCount: 'File',
- empty: 'Nessuna etichetta. Creane una per iniziare.',
- noMatches: 'Nessuna etichetta corrispondente.',
- createPlaceholder: 'es. giocattoli, sicuro-bimbi, petg',
- createButton: 'Crea',
- nameRequired: 'Il nome è obbligatorio.',
- searchPlaceholder: 'Filtra etichette...',
- created: 'Etichetta creata.',
- updated: 'Etichetta rinominata.',
- deleted: 'Etichetta rimossa.',
- saveFailed: 'Impossibile salvare l\'etichetta.',
- deleteFailed: 'Impossibile rimuovere l\'etichetta.',
- applyFailed: 'Impossibile applicare le etichette.',
- applyAdd: 'Aggiungi etichette',
- applyRemove: 'Rimuovi etichette',
- applyAddSuccess: 'Aggiunte {{count}} etichetta/e su {{files}} file.',
- applyRemoveSuccess: 'Rimosse {{count}} etichetta/e da {{files}} file.',
- actionAdd: 'Aggiungi ai file selezionati',
- actionRemove: 'Rimuovi dai file selezionati',
- tagAction: 'Etichetta',
- bulkTitle: 'Etichetta {{count}} file selezionato/i',
- bulkTooltip: 'Aggiungi o rimuovi etichette su ogni file selezionato.',
- noPermission: 'Non hai il permesso per etichettare i file.',
- filterLabel: 'Filtraggio per:',
- clearAll: 'Pulisci tutto',
- confirmDelete: 'Eliminare l\'etichetta "{{name}}"?',
- confirmDeleteMessage: 'Rimuove l\'etichetta dal catalogo. I file mantengono le altre etichette.',
- confirmDeleteInUseMessage: 'Questa etichetta è su {{count}} file. L\'eliminazione la rimuove da tutti; i file non vengono toccati.',
- editAria: 'Modifica {{name}}',
- deleteAria: 'Elimina {{name}}',
- },
- allTypes: 'Tutti i tipi',
- prints: 'Stampe',
- ascending: 'Crescente',
- descending: 'Decrescente',
- showModified: 'Mostra date di modifica',
- hideModified: 'Nascondi date di modifica',
- lastModified: 'Ultima modifica',
- lastActivity: 'Ultima attività',
- resultsCount: '{{showing}} di {{total}} file',
- selectAll: 'Seleziona tutto',
- deselectAll: 'Deseleziona tutto',
- selected: '{{count}} selezionati',
- adding: 'Aggiunta...',
- loadingFiles: 'Caricamento file...',
- folderIsEmpty: 'La cartella e vuota',
- noFilesYet: 'Nessun file ancora',
- folderEmptyDescription: 'Carica file o sposta file in questa cartella per iniziare.',
- noFilesDescription: 'Carica file per iniziare a organizzare i file di stampa.',
- noMatchingFiles: 'Nessun file corrispondente',
- noMatchingFilesDescription: 'Nessun file corrisponde ai criteri di ricerca o filtro.',
- clearFilters: 'Pulisci filtri',
- printedCount: 'Stampato {{count}}x',
- uploadedBy: 'Caricato da',
- deleteFolder: 'Elimina cartella',
- deleteFile: 'Elimina file',
- deleteFilesCount: 'Elimina {{count}} file',
- deleteFolderConfirm: 'Sei sicuro di voler eliminare questa cartella? Tutti i file dentro saranno eliminati.',
- deleteFileConfirm: 'Sei sicuro di voler eliminare questo file?',
- deleteFilesConfirm: 'Sei sicuro di voler eliminare {{count}} file selezionati? Questa azione non può essere annullata.',
- deleting: 'Eliminazione...',
- noPermissionRenameFolder: 'Non hai il permesso di rinominare cartelle',
- noPermissionLinkFolder: 'Non hai il permesso di collegare cartelle',
- noPermissionDeleteFolder: 'Non hai il permesso di eliminare cartelle',
- onlyEmptyFoldersDeletable: 'Puoi eliminare solo cartelle vuote',
- noPermissionPrint: 'Non hai il permesso di stampare',
- noPermissionSlice: 'Non hai il permesso di sezionare i file',
- noPermissionAddToQueue: 'Non hai il permesso di aggiungere alla coda',
- noPermissionDownload: 'Non hai il permesso di scaricare file',
- noPermissionPreview: 'Non hai il permesso di visualizzare l\'anteprima dei file',
- preview3d: 'Anteprima 3D',
- // Anteprime dei documenti in-app (#2976): file PDF e fogli di calcolo.
- preview: {
- open: 'Anteprima',
- error: 'Impossibile visualizzare l\'anteprima di questo file.',
- tooLarge: 'Il file è troppo grande per l\'anteprima ({{size}}).',
- page: 'Pagina {{current}} di {{total}}',
- prevPage: 'Pagina precedente',
- nextPage: 'Pagina successiva',
- zoomIn: 'Ingrandisci',
- zoomOut: 'Riduci',
- emptySheet: 'Questo foglio è vuoto',
- truncatedRows: 'Visualizzate le prime {{shown}} righe di {{total}}',
- truncatedCols: 'Visualizzate le prime {{shown}} colonne di {{total}}',
- },
- details: {
- title: 'Dettagli del file',
- size: 'Dimensione',
- type: 'Tipo',
- printName: 'Nome stampa',
- printTime: 'Tempo di stampa',
- filament: 'Filamento',
- slicedFor: 'Slicing per',
- source: 'Origine',
- created: 'Creato',
- modified: 'Modificato',
- notes: 'Note',
- notesPlaceholder: 'Impostazioni di stampa, consigli, cosa ha funzionato...',
- externalLink: 'Link esterno',
- externalLinkPlaceholder: 'https://printables.com/model/...',
- openLink: 'Apri link',
- photos: 'Foto',
- addPhoto: 'Aggiungi foto',
- noPhotos: 'Ancora nessuna foto',
- deletePhoto: 'Elimina foto',
- photoCount_one: '{{count}} foto',
- photoCount_other: '{{count}} foto',
- hasNotes: 'Contiene note',
- save: 'Salva',
- saved: 'Dettagli del file salvati',
- saveFailed: 'Impossibile salvare i dettagli del file',
- uploadFailed: 'Impossibile caricare la foto',
- deleteFailed: 'Impossibile eliminare la foto',
- },
- noPermissionRenameFile: 'Non hai il permesso di rinominare questo file',
- noPermissionGenerateThumbnail: 'Non hai il permesso di generare miniature',
- noPermissionDeleteFile: 'Non hai il permesso di eliminare questo file',
- noPermissionCreateFolder: 'Non hai il permesso di creare cartelle',
- noPermissionUpload: 'Non hai il permesso di caricare file',
- noPermissionMoveFiles: 'Non hai il permesso di spostare file',
- noPermissionDeleteFiles: 'Non hai il permesso di eliminare file',
- // External folder
- linkExternal: 'Collega esterno',
- linkExternalFolder: 'Collega cartella esterna',
- linkExternalFolderDescription: 'Monta una directory host (NAS, USB, condivisione di rete) nel File Manager. I file non vengono copiati — vengono letti direttamente dal percorso originale.',
- externalFolderNamePlaceholder: 'es. Stampe NAS',
- externalPath: 'Percorso host',
- externalPathHelp: 'Percorso assoluto della directory sull\'host Docker. Deve essere montato come bind nel container.',
- readOnly: 'Sola lettura',
- readOnlyHelp: 'impedisce caricamenti e cancellazioni',
- showHiddenFiles: 'Mostra file nascosti (file punto)',
- externalFolder: 'Cartella esterna',
- scanFolder: 'Scansiona',
- toast: {
- folderCreated: 'Cartella creata',
- openInSlicerFailed: 'Impossibile aprire nello slicer',
- folderDeleted: 'Cartella eliminata',
- fileDeleted: 'File eliminato',
- filesDeleted: 'Eliminati {{count}} file',
- filesMoved: 'File spostati',
- folderLinked: 'Cartella collegata',
- folderUnlinked: 'Cartella scollegata',
- externalFolderLinked: 'Cartella esterna collegata e scansionata',
- folderScanned: 'Scansione completata: {{added}} aggiunti, {{removed}} rimossi',
- addedToQueue: 'Aggiunti {{count}} file alla coda',
- addedToQueuePartial: 'Aggiunti {{added}} file, {{failed}} falliti',
- failedToAddToQueue: 'Aggiunta file fallita: {{error}}',
- fileRenamed: 'File rinominato',
- folderRenamed: 'Cartella rinominata',
- thumbnailsGenerated: 'Generate {{count}} miniature',
- thumbnailsGeneratedPartial: 'Generate {{succeeded}} miniature, {{failed}} fallite',
- noStlMissingThumbnails: 'Nessun file STL senza miniature',
- failedToGenerateThumbnails: 'Generazione miniature fallita: {{error}}',
- thumbnailGenerated: 'Miniatura generata',
- failedToGenerateThumbnail: 'Generazione miniatura fallita: {{error}}',
- },
- },
- // Projects
- projects: {
- parentLabel: 'Progetto principale',
- parentNone: 'Nessuno (progetto di primo livello)',
- parentHint: 'Annida questo progetto in un altro perché i suoi numeri confluiscano in un progetto principale',
- partOf: 'Parte di {{name}}',
- subProjectCount: '{{count}} sotto-progetti',
- subProjectsOf: 'Sotto-progetti di {{name}}',
- collapseSubProjects: 'Comprimi sotto-progetti',
- expandSubProjects: 'Espandi sotto-progetti',
- title: 'Progetti',
- subtitle: 'Organizza e traccia i tuoi progetti di stampa 3D',
- newProject: 'Nuovo progetto',
- editProject: 'Modifica progetto',
- deleteProject: 'Elimina progetto',
- projectName: 'Nome progetto',
- description: 'Descrizione',
- noProjects: 'Nessun progetto ancora',
- noProjectsFiltered: 'Nessun progetto {{status}}',
- noProjectsFilteredHelp: 'Non hai progetti {{status}}. I progetti appariranno qui quando il loro stato cambia.',
- createFirst: 'Crea il tuo primo progetto per organizzare stampe correlate, tracciare progressi e gestire i tuoi build.',
- createFirstButton: 'Crea il tuo primo progetto',
- create: 'Crea',
- files: 'File',
- prints: 'Stampe',
- plates: 'piatti',
- parts: 'parti',
- lastModified: 'Ultima modifica',
- deleteConfirm: 'Sei sicuro di voler eliminare questo progetto? Archivi e elementi in coda saranno scollegati ma non eliminati.',
- addFiles: 'Aggiungi file',
- removeFile: 'Rimuovi file',
- viewDetails: 'Vedi dettagli',
- // Modal fields
- namePlaceholder: 'es., Build Voron 2.4',
- descriptionPlaceholder: 'Descrizione opzionale...',
- urlLabel: 'URL',
- urlPlaceholder: 'https://makerworld.com/...',
- urlInvalid: "L'URL deve iniziare con http:// o https://",
- openExternalUrl: 'Apri URL del progetto',
- coverImageLabel: 'Immagine di copertina',
- coverImageAlt: 'Immagine di copertina del progetto',
- coverImageUpload: 'Carica',
- coverImageReplace: 'Sostituisci',
- coverImageRemove: 'Rimuovi',
- color: 'Colore',
- targetPlates: 'Piatti target',
- targetPlatesPlaceholder: 'es., 25',
- targetPlatesHelp: 'Numero di job di stampa',
- targetParts: 'Parti target',
- targetPartsPlaceholder: 'es., 150',
- targetPartsHelp: 'Totale oggetti necessari',
- targetSets: 'Copie per file',
- targetSetsPlaceholder: 'es. 10',
- targetSetsHelp: 'Quante volte stampare ogni file stampabile',
- tagsLabel: 'Tag (separati da virgola)',
- tagsPlaceholder: 'es., voron, funzionale, regalo',
- dueDate: 'Data scadenza',
- priority: 'Priorita',
- priorityLow: 'Bassa',
- priorityNormal: 'Normale',
- priorityHigh: 'Alta',
- priorityUrgent: 'Urgente',
- // Status
- statusActive: 'Attivo',
- statusCompleted: 'Completato',
- statusArchived: 'Archiviato',
- done: 'Fatto',
- completed: 'completato',
- failed: 'fallito',
- inQueue: 'in coda',
- noPrintsYet: 'Nessuna stampa ancora',
- // Footer stats
- printJobs: 'Job di stampa (piatti)',
- partsPrinted: 'Parti stampate',
- failedParts: 'Parti fallite',
- // Actions
- import: 'Importa',
- export: 'Esporta',
- importProject: 'Importa progetto',
- exportAll: 'Esporta tutti i progetti',
- loading: 'Caricamento progetti...',
- // Permissions
- noEditPermission: 'Non hai il permesso di modificare progetti',
- noDeletePermission: 'Non hai il permesso di eliminare progetti',
- noCreatePermission: 'Non hai il permesso di creare progetti',
- noImportPermission: 'Non hai il permesso di importare progetti',
- noExportPermission: 'Non hai il permesso di esportare progetti',
- // Toast
- toast: {
- created: 'Progetto creato',
- updated: 'Progetto aggiornato',
- deleted: 'Progetto eliminato',
- imported: 'Progetto importato',
- multipleImported: '{{count}} progetti importati',
- importFailed: 'Import fallito',
- exported: 'Progetti esportati (solo metadati)',
- },
- },
- // Project detail page
- projectDetail: {
- notFound: 'Progetto non trovato',
- backToProjects: 'Torna a Progetti',
- export: 'Esporta',
- exportProject: 'Esporta progetto',
- noExportPermission: 'Non hai il permesso di esportare progetti',
- noEditPermission: 'Non hai il permesso di modificare progetti',
- partOf: 'Parte di:',
- priorityLabel: 'Priorita:',
- noPrints: 'Nessuna stampa in questo progetto ancora',
- status: {
- active: 'Attivo',
- completed: 'Completato',
- archived: 'Archiviato',
- },
- priority: {
- low: 'Bassa',
- normal: 'Normale',
- high: 'Alta',
- urgent: 'Urgente',
- },
- dueDate: {
- overdue: 'Scaduto',
- today: 'Scade oggi',
- daysLeft: '{{count}} giorni rimanenti',
- },
- progress: {
- platesProgress: 'Avanzamento piatti',
- partsProgress: 'Avanzamento parti',
- setsProgress: 'Set completi',
- sets: 'set',
- setsHint: 'Un set è completo quando ogni file stampabile raggiunge questo numero',
- printJobs: 'job di stampa',
- parts: 'parti',
- percentComplete: '{{percent}}% completato',
- remaining: '{{count}} rimanenti',
- },
- stats: {
- printJobs: 'Job di stampa',
- total: 'totale',
- failed: '{{count}} falliti',
- partsPrinted: '{{count}} parti stampate',
- printTime: 'Tempo di stampa',
- filamentUsed: 'Filamento usato',
- },
- cost: {
- title: 'Tracciamento costi',
- filamentCost: 'Costo filamento',
- energy: 'Energia',
- totalCost: 'Costo totale',
- total: 'Totale',
- includesBom: 'incl. distinta materiali',
- budget: 'Budget',
- remaining: 'Rimanente',
- },
- subProjects: {
- title: 'Sotto-progetti ({{count}})',
- jobs: '{{count}} lavori',
- },
- rollup: {
- title: 'Inclusi {{count}} sotto-progetti',
- progress: 'Avanzamento complessivo',
- percentComplete: '{{percent}}% completato',
- },
- notes: {
- title: 'Note',
- noEditPermission: 'Non hai il permesso di modificare le note',
- placeholder: 'Aggiungi note su questo progetto...',
- empty: 'Nessuna nota ancora. Clicca Modifica per aggiungere note.',
- },
- files: {
- title: 'File',
- linkFolders: 'Collega cartelle dal Gestore file',
- forQuickAccess: 'a questo progetto per accesso rapido.',
- fileCount: '{{count}} file',
- empty: 'Nessuna cartella collegata. Vai a Gestore file e collega una cartella a questo progetto.',
- printedCount: 'Stampato {{count}} volte',
- progressTooltip: '{{done}} di {{target}} stampe completate',
- noFiles: 'Nessun file in questa cartella.',
- },
- bom: {
- title: 'Distinta materiali',
- acquired: '{{completed}}/{{total}} acquisiti',
- showAll: 'Mostra tutti',
- hideDone: 'Nascondi completati',
- addPart: 'Aggiungi parte',
- noAddPermission: 'Non hai il permesso di aggiungere parti',
- partNamePlaceholder: 'Nome parte (es., viti M3x8)',
- partName: 'Nome parte',
- qty: 'Qta',
- price: 'Prezzo ({{currency}})',
- sourcingUrlPlaceholder: 'URL fornitura (opzionale)',
- remarksPlaceholder: 'Note (opzionale)',
- deletePart: 'Elimina parte',
- deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"?',
- noUpdatePermission: 'Non hai il permesso di aggiornare parti',
- noEditPermission: 'Non hai il permesso di modificare parti',
- noDeletePermission: 'Non hai il permesso di eliminare parti',
- totalCost: 'Costo totale:',
- empty: 'Nessuna parte nella distinta materiali. Aggiungi hardware, elettronica o altri componenti da reperire.',
- },
- timeline: {
- title: 'Timeline attivita',
- empty: 'Nessuna attivita ancora.',
- },
- template: {
- saveAsTemplate: 'Salva come template',
- noCreatePermission: 'Non hai il permesso di creare template',
- },
- queue: {
- title: 'Coda',
- viewAll: 'Vedi tutto',
- printing: '{{count}} in stampa',
- queued: '{{count}} in coda',
- },
- prints: {
- title: 'Stampe ({{count}})',
- },
- toast: {
- projectUpdated: 'Progetto aggiornato',
- partAdded: 'Parte aggiunta',
- partRemoved: 'Parte rimossa',
- exportFailed: 'Export fallito',
- projectExported: 'Progetto esportato',
- templateCreated: 'Template creato',
- },
- },
- // System info
- system: {
- title: 'Informazioni sistema',
- version: 'Versione',
- uptime: 'Tempo attivo',
- cpuUsage: 'Uso CPU',
- memoryUsage: 'Uso memoria',
- diskUsage: 'Uso disco',
- networkInfo: 'Info rete',
- logs: 'Log',
- debugMode: 'Modalita debug',
- enableDebug: 'Abilita log debug',
- disableDebug: 'Disabilita log debug',
- downloadLogs: 'Scarica log',
- clearLogs: 'Cancella log',
- dockerInfo: 'Info Docker',
- containerName: 'Nome container',
- imageName: 'Nome immagine',
- platform: 'Piattaforma',
- architecture: 'Architettura',
- },
- // Sponsor surface (System page)
- sponsors: {
- sectionTitle: 'Indipendente e finanziato dalla community',
- tagline: 'Bambuddy è gratuito e resta tale perché qualcuno sceglie di sostenerlo. Niente VC, niente lock-in cloud.',
- viewSupporters: 'Vedi i sostenitori',
- toastPrints: 'Hai completato {{count}} stampe con Bambuddy. Bambuddy resta gratuito grazie a chi lo sostiene.',
- toastCost: 'Hai monitorato {{total}} di filamento con Bambuddy. Scopri chi mantiene il progetto indipendente.',
- toastArchives: '{{count}} stampe archiviate con Bambuddy. Scopri chi lo mantiene indipendente.',
- toastAnniversary: 'Un anno con Bambuddy! Scopri chi mantiene il progetto indipendente.',
- toastVersionUpdate: 'Aggiornato a v{{version}}. Bambuddy resta gratuito grazie a chi lo sostiene.',
- toastBusiness: 'Usi Bambuddy su {{count}} stampanti? Esiste un piano di supporto per i team: correzioni prioritarie, fatturazione e un contatto diretto con il manutentore.',
- businessCta: 'Bambuddy per le aziende',
- businessTitle: 'Bambuddy per le aziende',
- businessTagline: 'Stai gestendo {{count}} stampanti. Supporto prioritario, licenze commerciali e fatturazione sono disponibili per team e farm di stampa.',
- },
- // Library (K Profiles)
- library: {
- title: 'Libreria filamenti',
- addFilament: 'Aggiungi filamento',
- editFilament: 'Modifica filamento',
- deleteFilament: 'Elimina filamento',
- vendor: 'Produttore',
- material: 'Materiale',
- color: 'Colore',
- kFactor: 'Fattore K',
- temperature: 'Temperatura',
- noFilaments: 'Nessun filamento in libreria',
- deleteConfirm: 'Sei sicuro di voler eliminare questo filamento?',
- importFromPrinter: 'Importa da stampante',
- exportToFile: 'Esporta su file',
- runWithPipeline: {
- actionLabel: 'Esegui con pipeline',
- noPermission: 'Non hai il permesso di eseguire pipeline',
- modalTitle: 'Esegui con pipeline',
- confirmTitle: 'Conferma esecuzione',
- confirmIntro: 'Il pre-volo ha trovato problemi con questa esecuzione',
- sourceHint: 'Sorgente',
- pipelineHint: 'Pipeline',
- targetHint: 'Destinazione',
- pipelineListAria: 'Pipeline disponibili',
- runAnyway: 'Esegui comunque',
- loading: 'Caricamento…',
- empty: 'Nessuna pipeline salvata. Apri il dialogo Slice e fai clic su "Salva come pipeline" per crearne una.',
- noTarget: 'Nessuna stampante di destinazione',
- noTargetMessage: 'Questa pipeline non ha una stampante di destinazione. Aprila nelle Impostazioni per sceglierne una.',
- copies: 'Copie',
- copiesHint: 'max {{n}}',
- classTarget: 'Qualsiasi {{model}}',
- toast: {
- started: 'Esecuzione della pipeline avviata',
- failed: 'Impossibile avviare l\'esecuzione',
- },
- issue: {
- printerNotSet: 'Nessuna stampante di destinazione su questa pipeline.',
- printerNotFound: 'La stampante di destinazione non esiste più.',
- printerDisabled: 'La stampante di destinazione è disabilitata.',
- printerOffline: 'La stampante di destinazione è offline.',
- filamentType: 'Slot filamento {{slot}}: atteso {{expected}}, AMS ha {{actual}}',
- filamentColor: 'Slot filamento {{slot}}: colore differente (atteso {{expected}}, AMS ha {{actual}})',
- amsSlotMissing: 'Slot AMS {{slot}} non disponibile su questa stampante',
- filamentUnverified: 'Lo slot filamento {{slot}} proviene da un preset cloud / standard e non può essere verificato staticamente.',
- noClassMatches: 'Nessuna stampante in questa installazione corrisponde alla classe di modello target della pipeline ({{expected}}).',
- classNotSet: 'La destinazione della pipeline è una classe di stampante ma nessun modello è stato scelto.',
- },
- },
- },
- // Slice (slicer-API integration via SliceModal)
- slicerSettings: {
- presetValuesOutdatedSidecar: "Sono mostrati i valori predefiniti dello slicer: il tuo sidecar è più vecchio di questa funzione e non può fornire i valori di un profilo. Aggiorna l'immagine del sidecar per vederli. Tutto ciò che non modifichi continua a usare il profilo.",
- presetValuesNotConfigured: 'Sono mostrati i valori predefiniti dello slicer: nessun sidecar è configurato, quindi i valori di un profilo non sono leggibili. Tutto ciò che non modifichi continua a usare il profilo.',
- presetValuesSidecarUnavailable: 'Sono mostrati i valori predefiniti dello slicer: il sidecar non ha risposto, quindi i valori di un profilo non sono leggibili. Tutto ciò che non modifichi continua a usare il profilo.',
- presetValuesUnavailable: 'Sono mostrati i valori predefiniti dello slicer: quelli del profilo scelto non sono leggibili. Tutto ciò che non modifichi continua a usare il profilo.',
- filamentDefault: 'Predefinito',
- fromFile: 'dal file',
- fromFileHint: 'Il designer ha modificato questo parametro nel file di origine. Il valore è {{value}}.',
- fromFilePrinterCoupled: 'stampante del designer',
- fromFilePrinterCoupledHint: 'Tarato per la stampante per cui è stato progettato questo file: sulla tua può essere errato o fuori intervallo.',
- fromFileOverridesPreset: 'sovrascrive il profilo',
- fromFileOverridesPresetHint:
- 'Il file imposta {{value}} mentre il profilo scelto usa {{preset}}. Selezionalo solo se deve prevalere il file.',
- useFromFile: 'Usa il valore del file di origine per {{option}}',
- otherFromFile: 'Altre impostazioni da questo file',
- fromFileSummary: 'Il progettista ha modificato {{count}} impostazioni di processo in questo file. Vengono usate solo quelle che spunti.',
- fromFileUseAll: 'Usa le impostazioni del progettista',
- fromFileUseAllHint: 'Spunta le impostazioni che si trasferiscono ad altre stampanti. Quelle tarate sulla stampante del progettista, e quelle che definiscono il preset scelto, restano disattivate.',
- fromFileClear: 'Azzera {{count}}',
- loading: 'Caricamento impostazioni dello slicer…',
- mode: {
- simple: 'Semplice',
- advanced: 'Avanzato',
- expert: 'Esperto',
- },
- searchPlaceholder: 'Cerca impostazioni',
- resetAll: 'Ripristina {{count}}',
- resetOption: 'Ripristina il valore predefinito',
- noMatches: 'Nessuna impostazione corrisponde a questa ricerca.',
- },
- slice: {
- filamentSlotUnset: 'non impostato',
- processSettingsEmbedded: 'Non utilizzato finché «Usa le impostazioni integrate del file» è attivo: sono le impostazioni del file a guidare questo slice.',
- processSettingsInactive: 'Non attivo',
- presetsHidden: '{{count}} nascosti',
- showAllPresets: 'Mostra tutti',
- showFewerPresets: 'Mostra meno',
- processSettings: 'Impostazioni di processo',
- processSettingsHint: 'Regola il profilo scelto per questo slice. Tutto ciò che non tocchi resta come definito dal profilo.',
- processSettingsChanged: '{{count}} modificate',
- processSettingsUnchanged: 'Valori del profilo',
- title: 'Slicing modello',
- action: 'Slice',
- actionAll: 'Slicia tutti i {{count}} piatti',
- actionAllTitle: 'Slicia tutti i piatti in un unico output multi-piatto (un solo archivio). La selezione del filamento copre ogni slot definito dal progetto.',
- allPlatesToggle: 'Slicia tutti i {{count}} piatti',
- slicing: 'Slicing…',
- printer: 'Profilo stampante',
- process: 'Profilo processo',
- filament: 'Profilo filamento',
- filamentSlot: 'Filamento {{index}} ({{type}})',
- filamentColour: 'Colore del filamento',
- selectPreset: '— Seleziona un preset —',
- loadingPresets: 'Caricamento preset…',
- analyzingPlateFilaments: 'Analisi filamenti del piano…',
- analyzingPlateFilamentsHint: 'Slicing di anteprima per scoprire quali slot AMS usa questo piano. In cache dopo — la riapertura è istantanea.',
- previewToast: 'Analisi di {{name}} – {{elapsed}}',
- previewWithProgress: 'Analisi di {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}',
- notUsedByPlate: '— non usato da questo piano',
- noPresetsForSlot: 'Nessun preset disponibile',
- otherPrinters: 'Altre stampanti',
- presetsLoadFailed: 'Caricamento preset fallito. Apri Impostazioni → Profili per importarli prima.',
- refreshPresets: 'Aggiorna',
- refreshPresetsTitle: 'Aggiorna i preset — recupera gli elenchi più recenti dal cloud e dai bundle (da usare dopo aver eliminato un preset in Bambu Studio o Bambu Handy)',
- allPresetsRequired: 'Tutti i preset devono essere selezionati',
- useEmbedded: 'Usa le impostazioni integrate del file',
- useEmbeddedHint: 'Slicia come impostato dal designer (pareti, riempimento, filamento) invece dei profili sopra. Disponibile perché la tua stampante corrisponde a quella del file.',
- autoOrient: 'Orienta automaticamente gli oggetti',
- autoOrientHint: "Lo slicer ruota ogni oggetto sul lato che si stampa meglio prima di affettare. Sostituisce l'orientamento salvato nel file.",
- autoArrange: 'Disponi automaticamente sul piatto',
- autoArrangeHint: 'Lo slicer dispone gli oggetti in modo che non si sovrappongano più. Sostituisce la disposizione del file.',
- enqueuing: 'Invio lavoro di slicing…',
- queued: 'In coda…',
- failed: 'Slicing fallito. Controlla i log del sidecar.',
- startedToast: 'Slicing di {{name}} in background…',
- queuedToast: 'In coda: {{name}} – {{elapsed}}',
- runningToast: 'Slicing {{name}} – {{elapsed}}',
- runningWithProgress: '{{name}} – {{stage}} ({{percent}}%) – {{elapsed}}',
- runningWithProgressMultiPlate: 'Piatto {{plateIndex}} di {{plateCount}} • {{name}} – {{stage}} ({{percent}}%) – {{elapsed}}',
- completedToast: '{{name}} sezionato',
- externalWriteFallbackToast: 'Salvato nella libreria interna: impossibile scrivere nella cartella esterna',
- failedTitle: 'Slicing fallito',
- failedToast: 'Slicing di {{name}} fallito: {{detail}}',
- tier: {
- local: 'Importato',
- cloud: 'Bambu Cloud',
- orcaCloud: 'Orca Cloud',
- standard: 'Standard',
- },
- cloud: {
- notAuthenticated: 'Accedi a Bambu Cloud (Impostazioni → Profili → Bambu Cloud) per vedere i preset cloud.',
- expired: 'Sessione Bambu Cloud scaduta – accedi di nuovo per aggiornare i preset cloud.',
- unreachable: 'Bambu Cloud non è raggiungibile. I preset locali e standard funzionano ancora.',
- },
- orcaCloud: {
- notAuthenticated: 'Accedi a Orca Cloud (Profili → Orca Cloud) per vedere i tuoi preset Orca.',
- expired: 'Sessione Orca Cloud scaduta — accedi di nuovo per aggiornare i tuoi preset Orca.',
- unreachable: 'Orca Cloud non è raggiungibile in questo momento. Gli altri preset continuano a funzionare.',
- },
- bedType: {
- label: 'Piano di stampa',
- auto: 'Auto (usa preset di processo)',
- coolPlate: 'Cool Plate',
- coolPlateSuperTack: 'Cool Plate SuperTack',
- engineering: 'Engineering Plate',
- highTemp: 'High Temp Plate',
- texturedPEI: 'Textured PEI Plate',
- smoothPEI: 'Smooth PEI Plate',
- },
- // Slicer Pipelines (#1425) — apply a saved bundle or save the current pick.
- pipelines: {
- label: 'Pipeline',
- applyAria: 'Applica pipeline',
- applyPrompt: 'Applica pipeline…',
- empty: 'Nessuna pipeline salvata',
- saveButton: 'Salva come pipeline',
- saveTitle: 'Salva la selezione corrente di tutti e quattro gli slot come pipeline riutilizzabile',
- namePlaceholder: 'Nome pipeline',
- nameAria: 'Nome nuova pipeline',
- toast: {
- applied: '"{{name}}" applicata',
- saved: 'Pipeline salvata',
- saveFailed: 'Salvataggio non riuscito',
- },
- },
- },
- // Spoolman
- spoolman: {
- title: 'Integrazione Spoolman',
- enabled: 'Spoolman abilitato',
- url: 'URL Spoolman',
- connected: 'Connesso',
- disconnected: 'Non connesso',
- testConnection: 'Testa connessione',
- sync: 'Sincronizza',
- syncing: 'Sincronizzazione...',
- lastSync: 'Ultima sincronizzazione',
- linkToSpoolman: 'Collega a Spoolman',
- openInSpoolman: 'Apri in Spoolman',
- unlinkSpool: 'Scollega bobina',
- unlinkConfirmTitle: 'Rimuovere bobina?',
- unlinkConfirmMessage: 'Questo rimuoverà la bobina da questo slot. I dati della bobina stessa rimarranno invariati.',
- selectSpool: 'Seleziona bobina',
- noUnlinkedSpools: 'Nessuna bobina disponibile',
- linkSuccess: 'Bobina assegnata con successo',
- linkFailed: 'Impossibile assegnare la bobina',
- unlinkSuccess: 'Bobina rimossa con successo',
- unlinkFailed: 'Impossibile rimuovere la bobina',
- linkedSpool: 'Bobina assegnata',
- spoolId: 'ID bobina',
- fillSourceLabel: '(Spoolman)',
- weight: 'Peso',
- remaining: 'Rimanente',
- disableWeightSync: 'Disabilita sync peso stimato AMS',
- disableWeightSyncDesc: 'Non aggiornare la capacità rimanente dalle stime AMS. Usalo se preferisci il tracciamento di Spoolman rispetto alle stime AMS. Le nuove bobine useranno comunque la stima AMS come peso iniziale.',
- reportPartialUsage: 'Segnala uso parziale per stampe fallite',
- reportPartialUsageDesc: 'Quando una stampa fallisce o viene annullata, segnala il filamento stimato usato fino a quel punto in base all\'avanzamento layer.',
- },
- locations: {
- title: 'Ubicazioni di stoccaggio',
- subtitle: 'Gestisci scaffali, cassetti e altri posti fisici per le bobine',
- add: 'Aggiungi ubicazione',
- addShort: 'Aggiungi',
- edit: 'Modifica ubicazione',
- name: 'Nome',
- spools: 'Bobine',
- sensors: 'Sensori',
- empty: 'Nessuna ubicazione di stoccaggio. Crea il tuo primo scaffale o cassetto.',
- manage: 'Ubicazioni',
- createPlaceholder: 'es. Scaffale A, Cassetto 1',
- nameRequired: 'Il nome dell\'ubicazione è obbligatorio',
- created: 'Ubicazione creata',
- updated: 'Ubicazione aggiornata',
- deleted: 'Ubicazione eliminata',
- saveFailed: 'Impossibile salvare l\'ubicazione',
- deleteFailed: 'Impossibile eliminare l\'ubicazione',
- deleteBlocked: 'Rimuovi prima tutte le bobine da questa ubicazione',
- confirmDelete: 'Eliminare «{{name}}»?',
- confirmDeleteMessage: 'Questa ubicazione verrà rimossa dal catalogo. Sposta prima le bobine.',
- confirmDeleteMessageWithSensors: 'Questa ubicazione verrà rimossa dal catalogo. Sposta prima le bobine. Verranno eliminati anche i sensori collegati.',
- },
- // Inventory
- inventory: {
- title: 'Inventario Bobine',
- subtitle: 'Gestisci le tue bobine',
- addToInventory: 'Aggiungi all\'inventario',
- addToInventoryPending: 'Aggiunta in corso...',
- addToInventorySuccess: 'Bobina aggiunta all\'inventario',
- addToInventoryFailed: 'Aggiunta della bobina all\'inventario non riuscita',
- unknownSpoolTitle: 'Nuovo filamento rilevato',
- unknownSpoolMessage: 'È stata rilevata una bobina con tag RFID sconosciuto in {{location}}. Aggiungerla all\'inventario ora?',
- unknownSpoolSlot: 'Slot',
- bulk: {
- selectAllVisible: 'Seleziona tutto il visibile',
- selectRow: 'Seleziona riga',
- selectGroup: 'Seleziona gruppo',
- selectionCount: '{{count}} selezionate',
- edit: 'Modifica',
- printLabels: 'Stampa etichette',
- resetUsage: 'Reimposta utilizzo',
- restore: 'Ripristina',
- archive: 'Archivia',
- delete: 'Elimina',
- clearSelection: 'Cancella selezione',
- editTitle: 'Modifica bobine in blocco',
- editSubtitle: 'Si applica a {{count}} bobine selezionate. Vengono aggiornati solo i campi spuntati.',
- editHint: 'Digita in un campo per contrassegnarlo per l\'aggiornamento — vengono inviate solo le righe spuntate. Un campo vuoto lascia le bobine invariate (svuotare un campo si fa per singola bobina).',
- useCustom: 'Usa "{{value}}"',
- toggleField: 'Attiva l\'aggiornamento per questo campo',
- changeCount: '{{count}} campi verranno aggiornati.',
- applyPending: 'Applicazione in corso...',
- applyButton: 'Applica a {{count}} bobine',
- deleteTitle: 'Elimina bobine selezionate',
- archiveTitle: 'Archivia bobine selezionate',
- restoreTitle: 'Ripristina bobine selezionate',
- resetUsageTitle: 'Reimposta utilizzo delle bobine selezionate',
- deleteMessage: 'Eliminare definitivamente {{count}} bobine? L\'operazione non può essere annullata.',
- archiveMessage: 'Archiviare {{count}} bobine? Possono essere ripristinate in seguito.',
- restoreMessage: 'Ripristinare {{count}} bobine archiviate?',
- resetUsageMessage: 'Reimpostare il contatore "Totale consumato" su {{count}} bobine? Il peso rimanente viene preservato.',
- updateSuccess: '{{count}} bobine aggiornate',
- updateFailed: 'Aggiornamento in blocco fallito',
- updatePartial: '{{ok}} bobine aggiornate, {{failed}} fallite',
- updateAllFailed: 'Tutti i {{count}} aggiornamenti sono falliti — la selezione viene mantenuta per riprovare',
- deleteSuccess: '{{count}} bobine eliminate',
- deleteFailed: 'Eliminazione in blocco fallita',
- deletePartial: '{{ok}} bobine eliminate, {{failed}} fallite',
- deleteAllFailed: 'Tutte le {{count}} eliminazioni sono fallite — la selezione viene mantenuta per riprovare',
- archiveSuccess: '{{count}} bobine archiviate',
- archiveFailed: 'Archiviazione in blocco fallita',
- archivePartial: '{{ok}} bobine archiviate, {{failed}} fallite',
- archiveAllFailed: 'Tutte le {{count}} archiviazioni sono fallite — la selezione viene mantenuta per riprovare',
- restoreSuccess: '{{count}} bobine ripristinate',
- restoreFailed: 'Ripristino in blocco fallito',
- restorePartial: '{{ok}} bobine ripristinate, {{failed}} fallite',
- restoreAllFailed: 'Tutti i {{count}} ripristini sono falliti — la selezione viene mantenuta per riprovare',
- invalidHex: 'Inserisci 6 caratteri esadecimali (RRGGBB) o 8 (RRGGBBAA). Altrimenti il campo non verrà applicato.',
- },
- spoolmanMixedContentTitle: 'Spoolman non può essere caricato tramite HTTPS — contenuto misto bloccato dal browser',
- spoolmanMixedContentBody: 'Bambuddy viene servito tramite HTTPS (dietro il tuo reverse proxy), ma l\'URL di Spoolman è ancora HTTP. I browser bloccano il contenuto misto per motivi di sicurezza, quindi l\'interfaccia Spoolman incorporata non può essere visualizzata. Anche Spoolman deve essere raggiungibile via HTTPS.',
- spoolmanMixedContentFixReverseProxy: 'Metti Spoolman dietro lo stesso reverse proxy di Bambuddy (Traefik / Nginx / Caddy) in HTTPS, poi aggiorna l\'URL di Spoolman nelle Impostazioni con il nuovo indirizzo HTTPS.',
- spoolmanMixedContentFixOpenNewTab: 'Come alternativa, apri Spoolman in una nuova scheda via HTTP — le regole sul contenuto misto si applicano solo ai frame incorporati, una scheda autonoma funziona.',
- spoolmanOpenInNewTab: 'Apri Spoolman in una nuova scheda',
- labels: {
- title: 'Stampa etichette bobine',
- selectedCount: '{{count}} selezionato',
- pickSpools: 'Scegli per quali bobine stampare le etichette:',
- monochrome: 'Monocromatico (stampante in bianco e nero)',
- monochromeHint: 'Rimuove il campione di colore e allarga il testo',
- startingPosition: 'Posizione iniziale dell’etichetta',
- startingPositionRange: 'Solo modelli a foglio: L7160 supporta 1–21; 5160 supporta 1–30.',
- startingPositionInvalid: 'Inserisci un numero intero da 1 a {{capacity}}.',
- startingPositionFirst: 'La stampa inizia dalla posizione 1.',
- startingPositionSkipped: 'Le posizioni da 1 a {{lastPosition}} resteranno vuote sul primo foglio.',
- startingPositionRangeError: 'La posizione iniziale deve essere compresa tra 1 e {{capacity}} per questo foglio.',
- searchPlaceholder: 'Cerca per nome, marca o #ID',
- filterByMaterial: 'Materiale:',
- allMaterials: 'Tutto',
- selectVisible: 'Seleziona tutti visibili ({{count}})',
- deselectVisible: 'Deseleziona visibili',
- clearAll: 'Cancella tutto',
- noSpoolsToShow: 'Nessuna bobina da mostrare. Modifica il filtro e riprova.',
- noMatches: 'Nessuna bobina corrisponde alla ricerca o al filtro corrente.',
- printOne: 'Stampa etichetta per questa bobina',
- printLabels: 'Stampa etichette…',
- bulkTitle: 'Scegli le bobine da etichettare tra le {{count}} mostrate',
- noSpoolsTitle: 'Nessuna bobina da etichettare',
- error: 'Impossibile generare etichette: {{msg}}',
- sortBy: {
- label: 'Ordina:',
- id: 'Per ID',
- color: 'Per colore',
- },
- templates: {
- amsHolderSmall: {
- label: 'Supporto AMS — piccolo (74 × 33 mm)',
- hint: 'Un\'etichetta per pagina; corrisponde all\'etichetta stampabile del modello MakerWorld 752566 (Porta-etichette filamento AMS).',
- },
- amsHolderLarge: {
- label: 'Supporto AMS — grande (75 × 55 mm)',
- hint: 'Un\'etichetta per pagina; si adatta alla variante cartoncino del porta-etichette filamento AMS. Spazio sufficiente per campione colore, marca, materiale, ID e codice QR.',
- },
- box40x30: {
- label: 'Etichetta scatola (40 × 30 mm)',
- hint: 'Una etichetta per pagina; misura comune DK/Brother, ideale per etichette di sacchetti filamento e contenitori.',
- },
- box: {
- label: 'Box label (62 × 29 mm)',
- hint: 'Una etichetta per pagina; dimensionata per Brother PT/QL e piccole etichette Dymo.',
- },
- averyL7160: {
- label: 'Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)',
- hint: 'Foglio formato UE; 21 etichette per pagina A4.',
- },
- avery5160: {
- label: 'Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)',
- hint: 'Foglio formato US; 30 etichette per pagina Letter.',
- },
- },
- },
- csv: {
- importButton: 'Importa CSV',
- exportButton: 'Esporta CSV',
- modalTitle: 'Importa bobine da CSV',
- selectFile: 'Scegli un file CSV o trascinalo qui',
- dragHint: 'Intestazione: material (obbligatorio), brand, subtype, color_name, rgba, …',
- parsing: 'Lettura del file…',
- previewError: 'Impossibile leggere il file CSV',
- validCount: '{{count}} valide',
- errorCount: '{{count}} con errore',
- skippedCount: '{{count}} ignorate',
- colRow: 'Riga',
- colStatus: 'Stato',
- colColor: 'Colore',
- colorResolved: 'Colore compilato dal catalogo',
- colorCrossMaterial: 'Colore preso da un materiale diverso — nessuna corrispondenza esatta nel catalogo',
- duplicateExisting: 'Esiste già una bobina con questo materiale, marca e colore — verrà comunque importata come nuova bobina',
- spoolmanHint: 'In modalità Spoolman, usa l\'importazione/esportazione CSV integrata di Spoolman.',
- importValidRows: 'Importa {{count}} righe valide',
- noValidRows: 'Nessuna riga valida',
- importing: 'Importazione…',
- importSuccess: '{{count}} bobine importate',
- importError: 'Importazione non riuscita',
- exportError: 'Esportazione non riuscita',
- },
- addSpool: 'Aggiungi Bobina',
- editSpool: 'Modifica Bobina',
- copySpool: 'Copia Bobina',
- material: 'Materiale',
- selectMaterial: 'Seleziona materiale...',
- subtype: 'Sottotipo',
- brand: 'Marchio',
- searchBrand: 'Cerca marchio...',
- useCustomBrand: 'Usa "{{brand}}"',
- useCustomMaterial: 'Usa materiale personalizzato: {{material}}',
- suggestedOptions: 'Suggeriti',
- allOptions: 'Tutti',
- colorName: 'Nome Colore',
- colorNamePlaceholder: 'Bianco Giada, Rosso Fuoco...',
- color: 'Colore',
- hexColor: 'Colore Hex',
- pickColor: 'Scegli colore personalizzato',
- labelWeight: 'Peso da Etichetta',
- coreWeight: 'Peso Bobina Vuota',
- searchSpoolWeight: 'Cerca peso bobina...',
- weightUsed: 'Utilizzato',
- currentWeight: 'Peso Rimanente',
- measuredWeight: 'Peso Misurato',
- spoolName: 'Bobina',
- costPerKg: 'Costo per kg',
- storageLocation: 'Posizione di archiviazione',
- temperature: 'Temperatura',
- humidity: 'Umidità',
- battery: 'Batteria',
- storageLocationPlaceholder: 'es. Scaffale A, Cassetto 1',
- openInInventory: "Apri nell'inventario",
- measuredWeightError: 'Il peso misurato deve essere compreso tra {{min}}g e {{max}}g.',
- slicerFilament: 'Filamento Slicer',
- slicerFilamentName: 'Nome Preset Slicer',
- slicerPreset: 'Preset Slicer',
- searchPresets: 'Cerca preset filamento...',
- selectedPreset: 'Selezionato',
- noPresetsFound: 'Nessun preset trovato',
- tempOverrides: 'Override Temperatura',
- note: 'Nota',
- notePlaceholder: 'Eventuali note aggiuntive su questa bobina...',
- // Per-spool category + low-stock threshold override (#729)
- category: 'Categoria',
- categoryPlaceholder: 'es. Produzione, Prototipo, Cliente A',
- categoryNone: 'Senza categoria',
- storageLocationNone: 'Nessuna posizione impostata',
- lowStockThresholdOverride: 'Soglia scorte basse (questa bobina)',
- lowStockThresholdOverrideHelp: 'Lascia vuoto per usare la soglia globale ({{global}}%).',
- clearRfid: 'Cancella tag RFID',
- rfidCleared: 'Tag RFID cancellato',
- archive: 'Archivia',
- restore: 'Ripristina',
- noSpools: 'Ancora nessuna bobina. Aggiungi la tua prima bobina per iniziare.',
- noAvailableSpools: 'Nessuna bobina disponibile. Aggiungi una bobina al tuo inventario o rimuovine l\'assegnazione da un altro slot.',
- kProfiles: 'Profili K',
- addKProfile: 'Aggiungi K-Profile',
- assignSpool: 'Assegna Bobina',
- unassignSpool: 'Scollega',
- assignSuccess: 'Bobina assegnata e slot AMS configurato',
- assignPendingInsert: 'Assegnato. Lo slot verrà configurato all\'inserimento della bobina.',
- assignFailed: 'Assegnazione bobina fallita',
- selectSpool: 'Seleziona una bobina da assegnare a questo slot',
- assigned: 'Assegnato',
- assigning: 'Assegnazione...',
- searchSpools: 'Cerca bobine...',
- showAllSpools: 'Mostra tutte le bobine',
- spoolmanSpools: 'Bobine Spoolman',
- allMaterials: 'Tutti i Materiali',
- filterByBrand: 'Filtra per marchio...',
- showArchived: 'Mostra archiviate',
- quickAdd: 'Aggiunta rapida (Scorta)',
- quantity: 'Quantità',
- stock: 'Scorta',
- configured: 'Configurata',
- spoolsCreated: '{{count}} bobine create',
- spoolsPartiallyCreated: '{{created}} di {{total}} bobine create (alcune non riuscite)',
- spoolCreated: 'Bobina creata',
- spoolUpdated: 'Bobina aggiornata',
- spoolDeleted: 'Bobina eliminata',
- deepLinkSpoolNotFound: 'Bobina non trovata',
- deepLinkFetchFailed: 'Impossibile caricare la bobina — riprova',
- spoolArchived: 'Bobina archiviata',
- spoolRestored: 'Bobina ripristinata',
- kProfileSaveFailed: 'Impossibile salvare le impostazioni del profilo K',
- syncWeightSpoolNotFound: 'Bobina non trovata — potrebbe essere stata eliminata',
- syncWeightSpoolmanUnreachable: 'Spoolman non è raggiungibile — riprovare più tardi',
- syncWeightFailed: 'Sincronizzazione del peso non riuscita',
- spoolmanUnreachable: 'Spoolman non è raggiungibile — riprovare più tardi',
- deleteSpoolNotFound: 'Bobina non trovata — potrebbe essere già stata eliminata',
- deleteFailed: 'Impossibile eliminare la bobina',
- archiveSpoolNotFound: 'Bobina non trovata — potrebbe essere già stata eliminata',
- archiveFailed: 'Impossibile archiviare la bobina',
- restoreSpoolNotFound: 'Bobina non trovata — potrebbe essere già stata eliminata',
- restoreFailed: 'Impossibile ripristinare la bobina',
- saveFailed: 'Impossibile salvare le modifiche',
- tagClearFailed: 'Impossibile cancellare il tag',
- deleteConfirm: 'Sei sicuro di voler eliminare questa bobina? Questa azione non può essere annullata.',
- archiveConfirm: 'Sei sicuro di voler archiviare questa bobina?',
- advancedSettings: 'Impostazioni Avanzate',
- // Tabs
- filamentInfoTab: 'Info filamento',
- paProfileTab: 'Profilo PA',
- colorAndCostTab: 'Colore e costo',
- printersTab: 'Stampanti',
- filamentInfo: 'Filamento',
- additional: 'Aggiuntivo',
- // Cloud
- loadingPresets: 'Caricamento preset cloud...',
- cloudConnected: 'Cloud connesso',
- cloudNotConnected: 'Cloud non connesso (valori predefiniti)',
- // Colors
- recentColors: 'Recenti',
- searchColors: 'Cerca colori...',
- searchResults: 'Risultati della ricerca',
- allColors: 'Tutti i colori',
- commonColors: 'Colori comuni',
- showLess: 'Mostra meno',
- showAll: 'Mostra tutto',
- noColorsFound: 'Nessun colore corrisponde alla ricerca',
- noResults: 'Nessun risultato trovato',
- // Multi-color gradient + visual effect (#1154) — English fallback.
- extraColorsLabel: 'Colori extra',
- extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694',
- extraColorsHint: 'Incolla da 2 a 8 stop hex, separati da virgole. Visualizzato come sfumatura.',
- extraColorsInvalid: 'Hex non validi ignorati: {{tokens}}',
- colorEffectLabel: 'Effetto',
- colorEffect: {
- none: 'Nessuno',
- sparkle: 'Scintillante',
- wood: 'Legno',
- marble: 'Marmo',
- glow: 'Bagliore',
- matte: 'Opaco',
- silk: 'Silk',
- galaxy: 'Galassia',
- rainbow: 'Arcobaleno',
- metal: 'Metallo',
- translucent: 'Traslucido',
- gradient: 'Sfumatura',
- dualColor: 'Bicolore',
- triColor: 'Tricolore',
- multicolor: 'Multicolore',
- },
- // PA Profiles
- selectMaterialFirst: 'Selezionare prima un materiale nella scheda Info filamento.',
- noPrintersConfigured: 'Nessuna stampante configurata. Aggiungi stampanti per usare i profili PA.',
- matchingFilter: 'Corrispondenti',
- anyBrand: 'Qualsiasi marca',
- anyVariant: 'Qualsiasi variante',
- autoSelect: 'Selezione automatica',
- matches: 'corrispondenze',
- match: 'corrispondenza',
- noMatches: 'Nessuna corrispondenza',
- connected: 'Connessa',
- offline: 'Offline',
- printerOffline: 'La stampante è offline. Connetti per visualizzare i profili di calibrazione.',
- noKProfilesMatch: 'Nessun profilo K corrisponde al filamento selezionato.',
- leftNozzle: 'Ugello sinistro',
- rightNozzle: 'Ugello destro',
- profilesSelected: 'profili di calibrazione selezionati',
- // Printers tab: per-model filament preset + per-hotend K profile
- filamentPreset: 'Preset del filamento',
- presetUseSpoolDefault: 'Usa il preset della bobina',
- presetInherited: 'ereditato',
- presetOverride: 'personalizzato',
- presetNeedsModel: 'Questa stampante non ha ancora comunicato il proprio modello, quindi non può avere un preset dedicato.',
- autoMatchPresets: 'Abbina automaticamente',
- autoMatchPresetsHint: 'Trova la variante del preset della bobina che nomina ciascun modello',
- kProfilesPerPrinter: 'Profili K',
- kProfileNotSet: 'Non impostato',
- kProfileFlowMismatch: 'Questo profilo è stato misurato con un ugello {{profile}} ma è montato un ugello {{fitted}}, quindi non verrà applicato',
- nozzle: 'Ugello',
- unknownModel: 'Modello sconosciuto',
- onePrinter: '1 stampante',
- nPrinters: '{{n}} stampanti',
- filamentPresetsLoadFailed: 'Impossibile caricare i preset per modello di questa bobina',
- filamentPresetSaveFailed: 'Impossibile salvare i preset per modello',
- // Stats & enhanced table
- totalInventory: 'Inventario totale',
- totalConsumed: 'Totale consumato',
- byMaterial: 'Per materiale',
- inPrinter: 'In stampante',
- lowStock: 'Scorta bassa',
- sinceTracking: 'Dall\'inizio del tracciamento',
- resetConsumedCounter: 'Azzera contatore',
- resetConsumedCounterTooltip: 'Azzera il contatore di grammi consumati per questa bobina. Il peso rimanente non viene modificato.',
- resetConsumedCounterConfirm: 'Azzerare il contatore di grammi consumati di questa bobina? Le stampe future ripartiranno da zero. La bobina, il calcolo del peso rimanente e le impostazioni non vengono modificati.',
- resetAllConsumedCounters: 'Azzera tutti i contatori',
- resetAllConsumedCountersTooltip: 'Azzera il contatore di grammi consumati su ogni bobina. I pesi rimanenti non vengono modificati.',
- resetAllConsumedCountersConfirm: 'Azzerare il contatore di grammi consumati su tutte le {{count}} bobine (incluse quelle archiviate)? La statistica "Totale Consumato" verrà azzerata e le stampe future ripartiranno da zero. Bobine e pesi rimanenti restano invariati.',
- consumedCounterReset: 'Contatore azzerato',
- allConsumedCountersReset: 'Contatore azzerato per {{count}} bobina/e',
- resetConsumedCounterFailed: 'Impossibile azzerare il contatore',
- loadedInAms: 'Caricato in AMS/Est',
- remaining: 'Rimanente',
- weightCheck: 'Controllo Peso',
- lastWeighed: 'Ultima pesatura',
- neverWeighed: 'Mai pesato',
- search: 'Cerca bobine...',
- showing: 'Visualizzazione',
- to: 'a',
- of: 'di',
- show: 'Mostra',
- spools: 'bobine',
- spool: 'bobina',
- page: 'Pagina',
- noSpoolsMatch: 'Nessun risultato trovato',
- noSpoolsMatchDesc: 'Prova a modificare la ricerca o i filtri per trovare quello che cerchi.',
- active: 'Attive',
- archived: 'Archiviate',
- all: 'Tutte',
- used: 'Usato',
- new: 'Nuovo',
- clearFilters: 'Cancella filtri',
- table: 'Tabella',
- cards: 'Schede',
- net: 'Netto',
- // Grouping
- groupSimilar: 'Raggruppa',
- groupedSpools: '{{count}} bobine identiche',
- groupedRows: 'righe',
- // Column config
- columns: 'Colonne',
- configureColumns: 'Configura colonne',
- configureColumnsDesc: 'Trascina per riordinare le colonne o usa le frecce. Attiva/disattiva la visibilità con l\'icona dell\'occhio.',
- visible: 'visibili',
- reset: 'Ripristina',
- cancel: 'Annulla',
- applyChanges: 'Applica modifiche',
- moveUp: 'Sposta su',
- moveDown: 'Sposta giù',
- hideColumn: 'Nascondi colonna',
- showColumn: 'Mostra colonna',
- // Tag linking
- linkToSpool: 'Collega a bobina',
- tagLinked: 'Tag collegato alla bobina',
- tagLinkFailed: 'Impossibile collegare il tag',
- tagAlreadyLinked: 'Tag già collegato alla bobina #{{id}}',
- unknownTag: 'Tag RFID sconosciuto rilevato',
- // Usage history
- usageHistory: 'Cronologia utilizzo',
- noUsageHistory: 'Nessun utilizzo registrato',
- printName: 'Nome stampa',
- weightConsumed: 'Peso consumato',
- clearHistory: 'Cancella',
- historyCleared: 'Cronologia utilizzo cancellata',
- fillSourceLabel: '(Inv)',
- lowStockThresholdError: 'La soglia deve essere tra 0.1 e 99.9',
- assignMismatchTitle: 'Materiale non corrispondente',
- assignMismatchMessage: 'Il materiale della bobina selezionata "{{spoolMaterial}}" non corrisponde al materiale del vassoio "{{trayMaterial}}" per {{location}}. Assegnare comunque?',
- assignMismatchConfirm: 'Assegna comunque',
- assignPartialMismatchMessage: 'Il materiale della bobina "{{spoolMaterial}}" è simile ma non corrisponde esattamente a "{{trayMaterial}}" in {{location}}. Vuoi procedere?',
- assignProfileMismatchMessage: 'Il profilo della bobina "{{spoolProfile}}" non corrisponde al profilo del vassoio "{{trayProfile}}" in {{location}}. Vuoi procedere?',
- assignReconfigureNote: 'Lo slot AMS verrà riconfigurato per utilizzare il profilo della bobina.',
- // Spoolman filament catalog picker
- spoolmanFilamentCatalog: 'Catalogo filamenti Spoolman',
- pickFromSpoolmanCatalog: 'Scegli dal catalogo Spoolman…',
- spoolmanFilamentSelected: 'Filamento selezionato dal catalogo Spoolman',
- spoolmanFilamentUnlinked: 'Collegamento al catalogo filamenti rimosso',
- noSpoolmanFilaments: 'Nessun filamento trovato nel catalogo Spoolman',
- spoolmanFilamentColorSwatch: 'Colore del filamento',
- spoolWeightManagedBySpoolman: 'Il peso della bobina vuota è gestito per tipo di filamento in Spoolman',
- spoolmanCatalogLoadFailed: 'Impossibile caricare il catalogo Spoolman',
- },
- // Timelapse
- timelapse: {
- title: 'Timelapse',
- create: 'Crea timelapse',
- download: 'Scarica',
- delete: 'Elimina',
- preview: 'Anteprima',
- frameRate: 'Frame rate',
- quality: 'Qualità',
- processing: 'Elaborazione...',
- noTimelapses: 'Nessun timelapse disponibile',
- },
- // AMS
- ams: {
- title: 'AMS',
- slot: 'Slot',
- empty: 'Vuoto',
- emptySlot: 'Slot vuoto',
- slotEmpty: 'Vuoto',
- slotUnconfigured: '?',
- emptySlotReset: 'Nessuna bobina assegnata',
- unknown: 'Sconosciuto',
- humidity: 'Umidità',
- temperature: 'Temperatura',
- filamentType: 'Tipo filamento',
- filamentColor: 'Colore',
- remaining: 'Rimanente',
- history: 'Cronologia AMS',
- noHistory: 'Nessuna cronologia disponibile',
- configureSlot: 'Configura slot',
- externalSpool: 'Bobina esterna',
- profile: 'Profilo',
- kFactor: 'Fattore K',
- kFactorShort: 'K',
- fill: 'Livello',
- configure: 'Configura',
- used: 'utilizzato',
- remainingUnit: 'rimanente',
- },
- // Print modal
- printModal: {
- variants: {
- editNote: 'Queste alternative sono state definite al momento dell\'accodamento. Annulla e riaccoda per modificarle.',
- title: 'Alternative di stampante',
- help: 'Un lavoro, un posto in coda. La prima stampante compatibile che si libera stampa il suo file.',
- unknownModel: 'Modello sconosciuto',
- plateFor: 'Piatto per {{filename}}',
- moveUp: 'Sposta su',
- moveDown: 'Sposta giù',
- queued: 'In coda con {{count}} alternative',
- },
- selectPrinter: 'Seleziona stampante',
- selectPlate: 'Seleziona piatto',
- filamentMapping: 'Mappatura filamento',
- useArchiveMapping: 'Mappatura',
- useArchiveMappingTooltip: 'Seleziona ogni slot dalla mappatura AMS salvata con questo archivio (dallo slicer), invece di abbinare per tipo/colore.',
- clickToChangeSlot: 'Fai clic per modificare l\'assegnazione dello slot',
- reRead: 'Rileggi',
- plateN: 'Piatto {{n}}',
- plateFilamentsUnreadable: 'Non è stato possibile leggere i filamenti di un piatto selezionato, quindi non può essere assegnato. Deselezionalo per accodare gli altri.',
- totalCost: 'Costo totale:',
- slotRemainingShort: ' - {{grams}}g rim.',
- printSettings: 'Impostazioni stampa',
- bedLeveling: 'Livellamento piatto',
- flowCalibration: 'Calibrazione flusso',
- vibrationCalibration: 'Calibrazione vibrazioni',
- layerInspection: 'Ispezione primo layer',
- timelapse: 'Timelapse',
- cancel: 'Annulla',
- noPrintersAvailable: 'Nessuna stampante disponibile',
- printerBusy: 'Stampante occupata',
- printerOffline: 'Stampante offline',
- sameTypeDifferentColor: 'Stesso tipo, colore diverso',
- filamentTypeNotLoaded: 'Tipo di filamento non caricato',
- statusReady: 'Pronto',
- statusColorMismatch: 'Colore diverso',
- statusTypeNotFound: 'Tipo non trovato',
- requiredTooltip: 'Richiesto: {{name}} - {{color}}',
- manuallySelected: 'Selezionato manualmente',
- autoMatched: 'Abbinato automaticamente',
- selectSlot: 'Scegli slot',
- exactColorMatch: 'Corrispondenza esatta del colore',
- slotForFilament: 'Slot stampante per {{name}}',
- overrideForFilament: 'Sostituzione filamento per {{name}}',
- sameTypeDifferentColorDetail: 'Stesso tipo, colore diverso: richiede {{required}}, lo slot ha {{loaded}}',
- requiredTypeNotInPrinter: 'Tipo di filamento richiesto non trovato nella stampante.',
- whenToPrint: 'Quando stampare',
- asap: 'Subito',
- queue: 'Coda',
- schedule: 'Programma',
- dateTime: 'Data e ora',
- invalidDateTime: 'Inserisci data e ora valide',
- openCalendar: 'Apri calendario',
- requireManualStart: 'Richiedi avvio manuale',
- requirePreviousSuccess: 'Avvia solo se la stampa precedente è riuscita',
- autoOffAfter: 'Spegni la stampante al termine',
- helpAsap: 'La stampa verrà aggiunta in cima alla coda e partirà appena una stampante idonea è inattiva.',
- helpSchedule: 'La stampa partirà all\'ora programmata se la stampante è inattiva. Se è occupata, attenderà che diventi disponibile.',
- helpQueue: 'La stampa verrà aggiunta in fondo alla coda.',
- leftNozzle: 'L',
- rightNozzle: 'R',
- leftNozzleTooltip: 'Ugello sinistro',
- rightNozzleTooltip: 'Ugello destro',
- ftsSameInletHint: 'Tutti i filamenti di questa stampa sono sul Filament Track Switch IN-{{inlet}}. Il cambio tra filamenti sullo stesso ingresso è più lento: spostane uno su un AMS dell\'altro ingresso.',
- rackPosition: 'Posizione nel rack',
- rackPositionTooltip: 'Quale ugello del rack stampa questo filamento. Le posizioni sono numerate come sulla stampante.',
- rackEmptyPosition: 'Questa posizione del rack è vuota',
- rackWrongNozzle: 'Contiene un ugello {{has}}; questo filamento richiede {{needs}}',
- filamentOverride: 'Sostituzione filamento',
- filamentOverrideHint: 'Sostituisci opzionalmente i filamenti per l\'assegnazione basata sul modello. Lo scheduler abbinerà i filamenti selezionati invece dei valori 3MF originali.',
- originalFilament: 'Originale',
- overrideWith: 'Sostituisci con',
- resetToOriginal: 'Ripristina originale',
- insufficientFilamentTitle: 'Filamento insufficiente',
- waitingForAmsStatus: 'In attesa dello stato AMS di {{printer}}…',
- insufficientFilamentMessage: 'Alcune bobine assegnate hanno meno filamento rimanente di quanto necessario per questa stampa:',
- insufficientFilamentLine: '{{printer}} - {{slot}}: necessita di {{required}}g, rimanenti {{remaining}}g',
- insufficientFilamentLinePooled: '{{printer}} - {{slot}}: necessita di {{required}}g, {{remaining}}g disponibili tra le bobine corrispondenti (AMS Filament Backup)',
- printAnyway: 'Stampa comunque',
- forceColorMatch: 'Forza corrispondenza colore',
- staggerPrinterStarts: 'Scaglionare avvii',
- staggerGroupSize: 'Dimensione gruppo',
- staggerInterval: 'Intervallo (min)',
- staggerPreview: '{{printers}} stampanti → {{groups}} gruppi di {{size}}, avvio ogni {{interval}} min',
- staggerLastGroup: 'ultimo gruppo: {{count}}',
- staggerTotal: 'totale: {{minutes}} min',
- staggerToPrinters: 'Scagliona a {{count}} stampanti',
- gcodeInjection: 'Inietta G-code auto-stampa',
- insufficientBudget: 'Budget insufficiente',
- unlimitedNoBudget: 'Illimitato – non è impostato alcun limite di budget.',
- noPrintableCostCenters: 'Non è disponibile alcun centro di costo attivo per la stampa. Chiedi a un amministratore di concederti l’accesso alla stampa.',
- },
- // Backup
- backup: {
- includesEncryptionKey: 'I backup locali includono il file della chiave di crittografia MFA (DATA_DIR/.mfa_encryption_key), quindi un backup ZIP è autonomo. Tratta lo ZIP come sensibile — chiunque abbia il file può decifrare i client secret OIDC e i segreti TOTP contenuti.',
- title: 'Backup e ripristino',
- createBackup: 'Crea backup',
- restoreBackup: 'Ripristina backup',
- restoreDescription: 'Sostituisci tutti i dati da un file di backup',
- downloadBackup: 'Scarica backup',
- uploadBackup: 'Carica backup',
- lastBackup: 'Ultimo backup',
- autoBackup: 'Backup automatico',
- backupNow: 'Esegui backup ora',
- restoreWarning: 'Avviso: il ripristino sovrascriverà tutti i dati attuali.',
- includeArchives: 'Includi archivi',
- includeSettings: 'Includi impostazioni',
- includeProfiles: 'Includi profili',
- backupSuccess: 'Backup creato con successo',
- restoreSuccess: 'Backup ripristinato con successo',
- backupFailed: 'Backup fallito',
- restoreFailed: 'Ripristino fallito',
- restoreNote: 'La stampante virtuale verrà fermata durante il ripristino',
- // GitHub Backup
- githubBackup: 'Backup GitHub',
- enabled: 'Abilitato',
- cloudLoginRequired: 'Accesso Bambu Cloud richiesto. Accedi in Profili → Profili Cloud per abilitare il backup GitHub.',
- cloudLoginRequiredShort: 'Accesso Cloud richiesto',
- githubDescription: 'Sincronizza automaticamente i tuoi profili con un repository GitHub privato per backup e cronologia delle versioni.',
- repoIsPrivate: 'Il repository è privato — è sicuro effettuare il backup.',
- repoIsPublicWarning: 'Il repository è PUBBLICO. I backup di Bambuddy includono credenziali MQTT, token di Home Assistant, token di Prometheus, la tua e-mail Bambu Cloud e i codici di accesso alle stampanti tramite K-profile. Il salvataggio è bloccato finché non rendi privato il repository nelle impostazioni del tuo provider.',
- repoVisibilityUnknown: 'Impossibile determinare la visibilità del repository. Bambuddy rifiuta di eseguire backup su qualsiasi target non confermato come privato; il salvataggio sarà bloccato.',
- repositoryUrl: 'URL del repository',
- repoUrlPlaceholderGitHub: 'https://github.com/username/repo-name',
- repoUrlPlaceholderGitea: 'https://gitea.example.com/username/repo-name',
- repoUrlPlaceholderForgejo: 'https://forgejo.example.com/username/repo-name',
- repoUrlPlaceholderGitLab: 'https://gitlab.com/username/repo-name',
- allowInsecureHttp: 'Consenti HTTP non sicuro',
- allowInsecureHttpHint: 'Abilita per istanze self-hosted su reti private senza TLS',
- personalAccessToken: 'Token di accesso personale',
- tokenSaved: '(salvato)',
- enterNewToken: 'Inserisci un nuovo token per aggiornare',
- tokenHintGitHub: 'Token a grana fine con accesso in lettura e scrittura a Contents, oppure token classico con ambito repo.',
- tokenHintGitLab: 'Token con ambito api, oppure read_repository insieme a write_repository.',
- tokenHintGitea: 'Token con ambito write:repository.',
- tokenHintForgejo: 'Token con ambito write:repository. Basta un token limitato a questo solo repository.',
- branch: 'Branch',
- provider: 'Provider Git',
- providerGitHub: 'GitHub',
- providerGitLab: 'GitLab',
- providerGitea: 'Gitea',
- providerForgejo: 'Forgejo',
- manualOnly: 'Solo manuale',
- hourly: 'Ogni ora',
- daily: 'Giornaliero',
- weekly: 'Settimanale',
- includeInBackup: 'Includi nel backup',
- kProfiles: 'K-Profili',
- kProfilesDescription: 'Calibrazione dell\'avanzamento pressione dalle stampanti connesse',
- noPrintersConnected: 'Nessuna stampante connessa',
- printersConnected: '{{connected}}/{{total}} connesse',
- cloudProfiles: 'Profili Cloud',
- cloudProfilesDescription: 'Preset di filamento, stampante e processo da Bambu Cloud e Orca Cloud',
- cloudProfilesAccounts: 'Account collegati — Bambu Cloud: {{bambu}}, Orca Cloud: {{orca}}',
- appSettings: 'Impostazioni App',
- appSettingsDescription: 'Configurazione Bambuddy (database completo)',
- spoolInventory: 'Inventario bobine',
- spoolInventoryDescription: 'Bobine di filamento, cronologia utilizzo e tracciamento costi',
- printArchives: 'Archivi di stampa',
- printArchivesDescription: 'Metadati della cronologia di stampa (nessun file gcode/3MF)',
- lastBackupAt: 'Ultimo backup:',
- noBackupsYet: 'Nessun backup ancora',
- next: 'Prossimo:',
- startingBackup: 'Avvio del backup...',
- test: 'Test',
- enableBackup: 'Abilita backup',
- testConnection: 'Testa connessione',
- enterRepoUrl: 'Inserisci l\'URL del repository',
- enterRepoAndToken: 'Inserisci l\'URL del repository e il token di accesso',
- repoRequired: 'L\'URL del repository è obbligatorio',
- tokenRequired: 'Il token di accesso è obbligatorio',
- githubBackupEnabled: 'Backup GitHub abilitato',
- tokenUpdated: 'Token aggiornato',
- settingsSaved: 'Impostazioni salvate',
- failedToSave: 'Salvataggio fallito: {{message}}',
- backupCompleteFiles: 'Backup completato - {{count}} file aggiornati',
- backupSkippedNoChanges: 'Backup saltato - nessuna modifica',
- backupFailed2: 'Backup fallito: {{message}}',
- clearedLogs: '{{count}} log eliminati',
- failedToClearLogs: 'Eliminazione log fallita: {{message}}',
- // Restore from Git backup (#2656)
- restoreFromGit: {
- button: 'Ripristina da Git',
- title: 'Ripristina dal backup Git',
- subtitle: 'Scegli un commit e cosa ripristinare',
- commitLabel: 'Commit del backup',
- latestCommit: 'Ultimo backup (punta del branch)',
- categoriesLabel: 'Cosa ripristinare',
- inspecting: 'Lettura del contenuto del backup...',
- itemCount: '{{count}} nel backup',
- overwriteLabel: 'Sovrascrivi le voci esistenti',
- overwriteOn: 'Le voci esistenti verranno aggiornate dal backup.',
- overwriteOff: 'Vengono aggiunte solo le voci mancanti; quelle esistenti restano invariate.',
- selectedCount: '{{count}} selezionati',
- restoring: 'Ripristino in corso...',
- confirmTitle: 'Ripristinare dal backup?',
- confirmMessage: 'Le categorie selezionate verranno ripristinate da questo commit. Le voci mancanti vengono aggiunte, quelle esistenti restano invariate.',
- confirmMessageOverwrite: 'Le categorie selezionate verranno ripristinate da questo commit sovrascrivendo le voci già presenti in locale. Operazione non annullabile.',
- kprofilesOverwriteCaveat: "I profili K sono l'eccezione: scrivere uno slot sostituisce sempre la calibrazione sulla stampante.",
- tally: '{{restored}} ripristinati, {{skipped}} saltati, {{failed}} non riusciti',
- reloadHint: 'Ricarica Bambuddy per vedere i dati ripristinati in tutte le sezioni.',
- partialHint: 'Le categorie elencate sopra sono state completate e salvate. Quelle mancanti non sono state eseguite.',
- failed: 'Ripristino non riuscito.',
- loadFailed: 'Impossibile leggere il repository di backup.',
- details: {
- notPresent: 'Non presente in questo commit di backup',
- unreadableJson: 'JSON illeggibile: {{paths}}',
- settingsNoPayload: 'Nessuna impostazione nei dati',
- settingsCredentialsWillSkip: '{{count}} chiavi simili a credenziali verranno saltate',
- settingsCompanionWillSkip: '{{count}} chiavi simili a credenziali verranno saltate e {{companion}} interruttori che dipendono da esse resteranno disattivati',
- settingsCompanionOnlyWillSkip: '{{companion}} interruttori resteranno disattivati - le credenziali necessarie a ciascuno non possono essere ripristinate da un backup',
- spoolsUsageCount: 'inclusi {{count}} record di consumo',
- archivesMetadataOnly: 'Solo metadati - i file 3MF e le miniature non sono in un backup Git',
- kprofilesPrinterCount: 'su {{count}} stampanti',
- },
- notes: {
- noData: 'Nessun dato di questo tipo in questo backup',
- archivesPrinterMissing: 'Alcuni archivi facevano riferimento a stampanti non più esistenti - collegamento rimosso',
- archivesProjectMissing: 'Alcuni archivi facevano riferimento a progetti non più esistenti - collegamento rimosso',
- archivesOwnerCleared: 'Alcuni archivi facevano riferimento a utenti non più esistenti - proprietario rimosso, quindi sono visibili solo agli utenti con il permesso archives:read_all finché un amministratore non li riassegna',
- archivesOwnerUnmatched: 'Alcuni archivi indicano un proprietario che questa istanza non ha - il proprietario è stato rimosso anziché dedotto dall\'id utente del backup, quindi sono visibili solo agli utenti con il permesso archives:read_all finché un amministratore non li riassegna',
- archivesOwnerUnknown: 'Alcuni archivi sono stati ripristinati senza proprietario - questo backup non ne registra alcuno, quindi sono visibili solo agli utenti con il permesso archives:read_all finché un amministratore non li riassegna',
- archivesUndeleted: 'Gli archivi eliminati dopo il backup sono di nuovo visibili - la sovrascrittura era attiva',
- archivesMetadataOnly: 'Gli archivi ripristinati contengono solo metadati - i file 3MF e le miniature non sono in un backup Git',
- spoolUsageUnresolved: '{{count}} record di consumo saltati - la loro bobina non è nell\'elenco bobine di questo backup, quindi non c\'è nulla a cui collegarli.',
- spoolUsageUnlinked: '{{count}} record di consumo ripristinati senza il collegamento alla cronologia di stampa - seleziona Archivi di stampa insieme a Inventario bobine per mantenerlo.',
- spoolTagKept: '{{count}} tag bobina lasciati invariati - il backup avrebbe cancellato un tag nel frattempo scansionato, oppure lo avrebbe spostato su una seconda bobina.',
- settingsCredentialsSkipped: '{{count}} chiavi simili a credenziali saltate - reinserisci i segreti manualmente',
- settingsAuthSkipped: '{{count}} impostazioni di autenticazione saltate - modificale in Impostazioni > Autenticazione così i controlli di blocco restano attivi',
- settingsCompanionSkipped: '{{keys}} lasciati disattivati - la credenziale richiesta da ciascuno non può essere ripristinata da un backup e questa istanza non ne ha nessuna salvata, quindi attivarli lascerebbe l\'integrazione senza autenticazione',
- settingsMqttRelayFailed: 'Impostazioni MQTT ripristinate, ma il relay non è stato riconnesso - riavvia Bambuddy',
- kprofilesAlwaysOverwrite: 'I profili K sovrascrivono sempre lo slot corrispondente sulla stampante',
- kprofilesAckUnreliable: 'Una stampante che non risponde conta comunque come ripristinata - verifica i profili sulla stampante',
- kprofilesPrinterMissing: 'Nessuna stampante con numero di serie {{serial}} - saltato',
- kprofilesPrinterOffline: '{{printer}} ({{serial}}) non è connessa - saltato',
- kprofilesUnknownNozzle: 'Diametro ugello inatteso {{nozzle}} per {{serial}} - inviato così com\'è',
- kprofilesUnmatched: '{{count}} profili per {{nozzle}} non avevano corrispondenza su {{printer}} - aggiunti come nuovi profili',
- kprofilesSendFailed: 'Impossibile inviare i profili {{nozzle}} a {{printer}} ({{serial}})',
- kprofilesRefused: '{{printer}} ({{serial}}) ha rifiutato i profili {{nozzle}}: {{reason}}',
- kprofilesStepFailed: 'Non è stato possibile completare il passaggio dei profili K - {{reason}}. Quanto ripristinato prima resta salvato.',
- },
- },
- // History
- history: 'Cronologia',
- clear: 'Cancella',
- date: 'Data',
- status: 'Stato',
- trigger: 'Tipo',
- triggers: {
- manual: 'Backup (manuale)',
- scheduled: 'Backup (pianificato)',
- restore: 'Ripristino',
- },
- commit: 'Commit',
- // Local Backup
- localBackup: 'Backup locale',
- localBackupDescription: 'Crea un backup completo dei tuoi dati Bambuddy includendo database, archivi, upload e tutti i file.',
- downloadBackupLabel: 'Scarica backup',
- completeBackupZip: 'Backup completo: database + tutti i file (ZIP)',
- download: 'Scarica',
- preparingBackup: 'Preparazione del backup...',
- creatingArchive: 'Creazione dell\'archivio di backup... Potrebbe richiedere del tempo per archivi di grandi dimensioni.',
- downloadingFile: 'Download del file di backup...',
- backupDownloaded: 'Backup scaricato con successo',
- failedToCreateBackup: 'Creazione del backup fallita: {{message}}',
- restore: 'Ripristina',
- restoreReplacesAll: 'Il ripristino sostituisce tutti i dati.',
- restoreReplacesAllDetail: 'Il database e i file attuali verranno completamente sostituiti. È necessario un riavvio dopo il ripristino.',
- restoreConfirmTitle: 'Ripristina backup',
- restoreConfirmMessage: 'Sei sicuro di voler ripristinare da "{{filename}}"? Questo sostituirà completamente il tuo database e tutti i file. L\'applicazione dovrà essere riavviata dopo il ripristino.',
- restoreConfirmButton: 'Ripristina backup',
- uploadingFile: 'Caricamento del file di backup...',
- backupRestoredRestart: 'Backup ripristinato. Riavvia Bambuddy.',
- failedToRestore: 'Ripristino del backup fallito. Controlla il formato del file.',
- reloadNow: 'Ricarica ora',
- creatingBackup: 'Creazione del backup',
- restoringBackup: 'Ripristino del backup',
- preparing: 'Preparazione...',
- processing: 'Elaborazione...',
- doNotClosePage: 'Non chiudere questa pagina e non navigare altrove. Questa operazione potrebbe richiedere diversi minuti per backup di grandi dimensioni.',
- // RestoreModal
- restoring: 'Ripristino in corso...',
- restoreComplete: 'Ripristino completato',
- restoreFailed2: 'Ripristino fallito',
- importSettings: 'Importa impostazioni da un file di backup',
- pleaseWaitRestoring: 'Attendere durante il ripristino dei dati',
- selectBackupFile: 'Clicca per selezionare un file di backup (.json o .zip)',
- duplicateHandling: 'Come funziona la gestione dei duplicati:',
- matchPrinters: 'Stampanti',
- matchPrintersBy: 'corrispondenza per numero di serie',
- matchSmartPlugs: 'Smart Plug',
- matchSmartPlugsBy: 'corrispondenza per indirizzo IP',
- matchNotificationProviders: 'Provider di notifica',
- matchNotificationProvidersBy: 'corrispondenza per nome',
- matchFilaments: 'Filamenti',
- matchFilamentsBy: 'corrispondenza per nome + tipo + marca',
- matchArchives: 'Archivi',
- matchArchivesBy: 'corrispondenza per hash del contenuto (sempre saltato)',
- matchPendingUploads: 'Upload in sospeso',
- matchPendingUploadsBy: 'corrispondenza per nome file',
- matchSettingsTemplates: 'Impostazioni e modelli',
- matchSettingsTemplatesBy: 'sempre sovrascritti',
- replaceExisting: 'Sostituisci dati esistenti',
- keepExisting: 'Mantieni dati esistenti',
- overwriteDescription: 'Sovrascrivi gli elementi già esistenti con i dati del backup',
- keepDescription: 'Ripristina solo gli elementi che non esistono ancora',
- overwriteCaution: 'Attenzione:',
- overwriteWarning: 'La sovrascrittura sostituirà le configurazioni attuali con i dati del backup. I codici di accesso delle stampanti non vengono mai sovrascritti per sicurezza.',
- cancel: 'Annulla',
- processingBackup: 'Elaborazione del file di backup...',
- itemsRestored: 'Elementi ripristinati',
- itemsSkipped: 'Elementi saltati',
- restored: 'Ripristinati',
- skippedAlreadyExist: 'Saltati (già esistenti)',
- filesCategory: 'File (3MF, miniature, ecc.)',
- andMore: '...e altri {{count}}',
- newApiKeysGenerated: 'Nuove chiavi API generate',
- keysShownOnce: 'Queste chiavi vengono mostrate solo una volta. Copiale ora!',
- copy: 'Copia',
- noDataFound: 'Nessun dato da ripristinare trovato nel file di backup.',
- close: 'Chiudi',
- // Scheduled local backups (#884)
- scheduledBackup: 'Backup pianificati',
- scheduledBackupDescription: 'Crea automaticamente snapshot di backup secondo una pianificazione. La directory di output può essere montata su un NAS o storage esterno.',
- frequency: 'Frequenza',
- backupTime: 'Tempo',
- retention: 'Conservazione',
- retentionDescription: 'Numero di backup da conservare',
- outputPath: 'Percorso di output',
- outputPathPlaceholder: 'Predefinito: {{path}}',
- outputPathDescription: 'Lasciare vuoto per la posizione predefinita',
- runNow: 'Esegui ora',
- backupFiles: 'File di backup',
- noScheduledBackups: 'Nessun backup ancora',
- deleteBackup: 'Elimina',
- deleteBackupConfirm: 'Eliminare questo file di backup?',
- backupRunning: 'Backup in corso...',
- scheduledBackupComplete: 'Backup completato con successo',
- scheduledBackupFailed: 'Backup fallito',
- nextBackup: 'Prossimo backup',
- backupSize: 'Dimensione',
- localTimeHint: 'Ora locale ({{tz}})',
- defaultPathLabel: 'Predefinito:',
- // Backup output-path probe (#2544)
- pathCheck: {
- title: 'Bambuddy non riesce a scrivere in questa directory',
- howToFix: 'Come risolvere:',
- sandboxed: 'Il servizio Bambuddy non riesce a scrivere in {{path}}. La sua unit systemd usa ProtectSystem=strict, che rende ogni directory al di fuori di quelle di installazione, dati e log di sola lettura per il servizio - anche una in cui puoi scrivere dalla tua shell.',
- read_only: '{{path}} si trova su un filesystem di sola lettura.',
- permission_denied: 'Bambuddy non ha il permesso di scrivere in {{path}}. Controlla proprietario e permessi della directory.',
- no_space: 'Il filesystem che contiene {{path}} è pieno.',
- not_a_directory: '{{path}} esiste ma non è una directory.',
- missing: '{{path}} non esiste e non è stato possibile crearla.',
- error: 'Bambuddy non riesce a scrivere in {{path}}.',
- ephemeralTitle: 'Questi backup non sopravvivono alla ricreazione del container',
- container_ephemeral: '{{path}} si trova dentro il container Bambuddy, non sull\'host. I backup scritti lì vanno persi quando il container viene ricreato. Monta la directory dall\'host:',
- },
- // Category labels
- categories: {
- settings: 'Impostazioni',
- notification_providers: 'Provider di notifica',
- notification_templates: 'Modelli di notifica',
- smart_plugs: 'Smart Plug',
- printers: 'Stampanti',
- filaments: 'Filamenti',
- maintenance_types: 'Tipi di manutenzione',
- archives: 'Archivi',
- projects: 'Progetti',
- pending_uploads: 'Upload in sospeso',
- external_links: 'Link esterni',
- api_keys: 'Chiavi API',
- },
- },
- // Tags
- tags: {
- title: 'Tag',
- addTag: 'Aggiungi tag',
- editTag: 'Modifica tag',
- deleteTag: 'Elimina tag',
- tagName: 'Nome tag',
- tagColor: 'Colore tag',
- noTags: 'Nessun tag',
- deleteConfirm: 'Sei sicuro di voler eliminare questo tag?',
- manageTags: 'Gestisci tag',
- },
- // Upload modal (archives)
- uploadModal: {
- title: 'Carica file 3MF',
- dragDrop: 'Trascina e rilascia file .3mf qui',
- or: 'o',
- browseFiles: 'Sfoglia file',
- extractionInfo: 'Il modello stampante sarà estratto automaticamente dai metadati del file 3MF.',
- uploaded: 'caricati',
- failed: 'falliti',
- uploading: 'Caricamento...',
- upload: 'Carica',
- uploadFailed: 'Caricamento fallito',
- },
- // Edit archive modal
- // Edit Archive Modal
- editArchive: {
- title: 'Modifica archivio',
- name: 'Nome',
- namePlaceholder: 'Nome stampa',
- printer: 'Stampante',
- noPrinter: 'Nessuna stampante',
- project: 'Progetto',
- noProject: 'Nessun progetto',
- itemsPrinted: 'Elementi stampati',
- itemsPrintedHelp: 'Numero di elementi prodotti in questo job di stampa. Usa 0 se l\'intero piatto è rovinato.',
- filamentUsed: 'Filamento usato (g)',
- filamentUsedPlaceholder: 'es. 46.16',
- filamentUsedHelp: 'Inseriscilo a mano quando una stampa è stata archiviata senza il suo 3MF, così da farla rientrare comunque nei totali del filamento. La riscansione di un archivio che ha il suo 3MF rilegge il valore dal file.',
- notes: 'Note',
- notesPlaceholder: 'Aggiungi note su questa stampa...',
- externalLink: 'Link esterno',
- externalLinkPlaceholder: 'https://printables.com/model/...',
- externalLinkHelp: 'Link a Printables, Thingiverse o altra fonte',
- tags: 'Tag',
- tagsPlaceholder: 'Aggiungi tag...',
- addMoreTags: 'Aggiungi altri tag...',
- matchingTags: 'Tag corrispondenti "{{query}}"',
- existingTags: 'Tag esistenti',
- clickToAdd: '(clicca per aggiungere)',
- status: 'Stato',
- failureReason: 'Motivo fallimento',
- selectReason: 'Seleziona motivo...',
- photos: 'Foto del risultato stampato',
- photosHelp: 'Clicca + per aggiungere foto del risultato stampato',
- printResult: 'Risultato stampa',
- saving: 'Salvataggio...',
- // Failure reasons
- failureReasons: {
- adhesionFailure: 'Fallimento adesione',
- spaghettiDetached: 'Spaghetti / staccato',
- layerShift: 'Spostamento layer',
- cloggedNozzle: 'Ugello intasato',
- filamentRunout: 'Filamento esaurito',
- warping: 'Deformazione',
- stringing: 'Filamento',
- underExtrusion: 'Sotto-estrusione',
- powerFailure: 'Mancanza corrente',
- userCancelled: 'Annullato dall\'utente',
- noStatusUpdate: 'Nessun aggiornamento di stato ricevuto',
- other: 'Altro',
- },
- // Archive statuses
- statuses: {
- completed: 'Completato',
- failed: 'Fallito',
- aborted: 'Annullato',
- printing: 'In stampa',
- },
- },
- // K-Profiles
- kProfiles: {
- title: 'Profili K',
- noPrintersConfigured: 'Nessuna stampante configurata',
- addPrinterInSettings: 'Aggiungi una stampante in Impostazioni per gestire i K-profiles',
- noActivePrinters: 'Nessuna stampante attiva',
- enablePrinterConnection: 'Abilita una connessione stampante per vedere i K-profiles',
- loadingProfiles: 'Caricamento K-Profiles...',
- printerOffline: 'Stampante offline',
- printerOfflineDesc: 'La stampante selezionata non e connessa. Accendila per vedere i K-profiles.',
- noMatchingProfiles: 'Nessun profilo corrispondente',
- noMatchingProfilesDesc: 'Nessun profilo corrisponde ai criteri di ricerca',
- noKProfiles: 'Nessun K-Profile',
- noKProfilesDesc: 'Nessun profilo pressure advance per ugello da {{diameter}}mm',
- createFirstProfile: 'Crea primo profilo',
- // Controls
- printer: 'Stampante',
- nozzle: 'Ugello',
- refresh: 'Aggiorna',
- addProfile: 'Aggiungi profilo',
- export: 'Esporta',
- import: 'Importa',
- select: 'Seleziona',
- selectAll: 'Seleziona tutto',
- delete: 'Elimina',
- // Filters
- searchPlaceholder: 'Cerca per nome o filamento...',
- allExtruders: 'Tutti gli estrusori',
- leftOnly: 'Solo sinistro',
- rightOnly: 'Solo destro',
- allFlow: 'Tutto flow',
- hfOnly: 'Solo HF',
- sOnly: 'Solo S',
- sortName: 'Ordina: Nome',
- sortKValue: 'Ordina: K-Value',
- sortFilament: 'Ordina: Filamento',
- // Dual extruder labels
- leftExtruder: 'Estrusore sinistro',
- rightExtruder: 'Estrusore destro',
- // Modal
- modal: {
- addTitle: 'Aggiungi K-Profile',
- editTitle: 'Modifica K-Profile',
- profileName: 'Nome profilo',
- profileNamePlaceholder: 'Il mio profilo PLA',
- kValue: 'Valore K',
- kValuePlaceholder: '0.020',
- kValueHelp: 'Intervallo tipico: 0.01 - 0.06 per PLA, 0.02 - 0.10 per PETG',
- filament: 'Filamento',
- selectFilament: 'Seleziona filamento...',
- source: {
- local: 'Importato',
- orcaCloud: 'Orca Cloud',
- bambuCloud: 'Bambu Cloud',
- builtin: 'Integrato',
- },
- noFilamentsHelp: 'Nessun filamento disponibile. Accedi a Bambu Cloud o importa i preset da Profili → Profili locali.',
- searchFilaments: 'Cerca filamenti...',
- noFilamentMatches: 'Nessun filamento corrisponde alla ricerca',
- flowType: 'Tipo flow',
- highFlow: 'Alto flusso',
- standard: 'Standard',
- nozzleSize: 'Dimensione ugello',
- extruder: 'Estrusore',
- extruders: 'Estrusori',
- left: 'Sinistra',
- right: 'Destra',
- notes: 'Note (salvate localmente)',
- notesPlaceholder: 'Aggiungi note su questo profilo...',
- notesHelp: 'Le note sono salvate in Bambuddy, non sulla stampante',
- syncing: 'Sincronizzazione con stampante...',
- savingExtruder: 'Salvataggio su estrusore {{current}}/{{total}}...',
- pleaseWait: 'Attendere',
- },
- // Delete confirmation
- deleteConfirm: {
- title: 'Elimina profilo',
- cannotUndo: 'Questo non può essere annullato',
- message: 'Sei sicuro di voler eliminare "{{name}}" dalla stampante?',
- },
- // Bulk delete
- bulkDelete: {
- title: 'Elimina profili',
- cannotUndo: 'Questo non può essere annullato',
- message: 'Sei sicuro di voler eliminare {{count}} profili selezionati dalla stampante?',
- },
- // Toast
- toast: {
- profileSaved: 'K-profile salvato',
- profilesSaved: 'K-profile salvato su {{count}} estrusori',
- selectAtLeastOneExtruder: 'Seleziona almeno un estrusore',
- selectFilament: 'Seleziona prima un filamento',
- filamentNotResolvable: 'Nessun ID filamento Bambu per {{name}}: la stampante non può salvare un profilo',
- profileDeleted: 'K-profile eliminato',
- profilesDeleted: 'Eliminati {{count}} profili',
- exportedProfiles: 'Esportati {{count}} profili',
- importedProfiles: 'Importati {{count}} di {{total}} profili',
- noProfilesToExport: 'Nessun profilo da esportare',
- invalidFileFormat: 'Formato file non valido',
- failedToParseImport: 'Parsing file import fallito',
- failedToSaveBatch: 'Salvataggio K-profiles fallito',
- noteSaved: 'Nota salvata',
- failedToSaveNote: 'Salvataggio nota fallito',
- },
- // Permissions
- permission: {
- noRead: 'Non hai il permesso di aggiornare i profili',
- noCreate: 'Non hai il permesso di aggiungere profili',
- noUpdate: 'Non hai il permesso di aggiornare K-profiles',
- noDelete: 'Non hai il permesso di eliminare K-profiles',
- noExport: 'Non hai il permesso di esportare profili',
- noImport: 'Non hai il permesso di importare profili',
- },
- },
- // Virtual Printer
- virtualPrinter: {
- title: 'Stampante virtuale',
- running: 'In esecuzione',
- stopped: 'Ferma',
- description: {
- default: 'Abilita una stampante virtuale che appare in Bambu Studio e OrcaSlicer. I file inviati a questa stampante saranno archiviati senza stampare.',
- proxy: 'Abilita un proxy che inoltra il traffico slicer a una stampante reale, permettendo la stampa remota su qualsiasi rete.',
- },
- enable: {
- title: 'Abilita stampante virtuale',
- visibleInSlicer: 'Visibile come "Bambuddy" nella ricerca slicer',
- proxyingTo: 'In proxy verso {{name}}',
- notActive: 'Non attivo',
- },
- model: {
- title: 'Modello stampante',
- description: 'Seleziona il modello stampante da emulare.',
- restartWarning: 'Cambiare il modello riavviera la stampante virtuale',
- },
- accessCode: {
- title: 'Codice accesso',
- isSet: 'Codice accesso impostato',
- notSet: 'Nessun codice accesso impostato - richiesto per abilitare',
- placeholder: 'Inserisci codice 8 caratteri',
- placeholderChange: 'Inserisci nuovo codice per cambiare',
- hint: 'Deve essere esattamente 8 caratteri. Usato dagli slicer per autenticarsi.',
- charCount: '({{count}}/8)',
- inheritedFromTarget: 'Ereditato dalla stampante target',
- derivedFromTargetHint: 'Usa il codice di accesso della stampante target. Il bridge inoltra l\'autenticazione dello slicer alla stampante reale, quindi i codici devono corrispondere — modifica il codice nelle impostazioni della stampante per cambiarlo.',
- reveal: 'Mostra codice accesso',
- hide: 'Nascondi codice accesso',
- },
- targetPrinter: {
- title: 'Stampante target',
- configured: 'Target proxy configurato',
- notConfigured: 'Nessuna stampante target selezionata - richiesta per modalita proxy',
- placeholder: 'Seleziona una stampante...',
- hint: 'Seleziona la stampante a cui fare proxy. La stampante deve essere in modalita LAN.',
- noPrinters: 'Nessuna stampante configurata. Aggiungi una stampante per usare la modalita proxy.',
- },
- remoteInterface: {
- title: 'Sovrascrittura interfaccia di rete',
- configured: 'Sovrascrittura interfaccia attiva',
- optional: 'Opzionale - usare se l\'IP rilevato automaticamente e sbagliato (es. piu NIC, Docker, VPN)',
- placeholder: 'Rilevamento automatico (predefinito)...',
- hint: 'Sovrascrive l\'indirizzo IP pubblicizzato via SSDP e usato nel certificato TLS. Utile quando Bambuddy ha piu interfacce di rete.',
- },
- mode: {
- title: 'Modalita',
- archive: 'Archivio',
- archiveDesc: 'Archivia subito i file',
- review: 'Revisione',
- reviewDesc: 'Rivedi prima di archiviare',
- queue: 'Coda',
- queueDesc: 'Archivia e aggiungi alla coda',
- proxy: 'Proxy',
- proxyDesc: 'Inoltra a stampante reale',
- },
- autoDispatch: {
- title: 'Avvio automatico',
- description: 'Avvia automaticamente le stampe aggiunte alla coda. Se disattivato, le stampe attendono l\'avvio manuale.',
- },
- queueForceColorMatch: {
- title: 'Forza corrispondenza colori',
- description: 'Rifiuta di inviare a una stampante che non ha esattamente il tipo di filamento e il colore caricato. Disattivato per impostazione predefinita — senza questo, la coda usa solo la corrispondenza per modello e potrebbe scegliere una stampante con il colore sbagliato.',
- },
- saveAmsMapping: {
- title: 'Salva mappatura AMS',
- description: 'Salva nell\'archivio la scelta dello slot AMS effettuata dallo slicer stesso (dal comando MQTT project_file), in modo che una ristampa successiva riutilizzi la stessa bobina fisica invece di ricavarla di nuovo dal tipo/colore del file. Disattivato per impostazione predefinita.',
- },
- gcodeInjection: {
- title: 'Iniezione G-code',
- description: 'Applica gli snippet G-code configurati per modello nelle Impostazioni ai lavori di questo VP. Disattivato per impostazione predefinita.',
- },
- tailscaleDisabled: {
- title: 'Integrazione Tailscale',
- description: 'Abilita per contrassegnare questo VP come esposto tramite Tailscale. Mostra l\'indirizzo Tailscale dell\'host così sai quale IP incollare nello slicer. Il passo di importazione CA è invariato — questo toggle non ha effetto sui certificati.',
- },
- setupRequired: {
- title: 'Configurazione necessaria',
- description: 'La stampante virtuale richiede configurazioni di sistema aggiuntive prima di funzionare. Include port forwarding, regole firewall e impostazioni specifiche della piattaforma.',
- readGuide: 'Leggi la guida prima di abilitare',
- },
- howItWorks: {
- title: 'Come funziona',
- step1: 'Sulla stessa LAN, le stampanti virtuali appaiono automaticamente nel tuo slicer (Bambu Studio / OrcaSlicer). Da altre reti, aggiungile manualmente tramite indirizzo IP e codice di accesso.',
- step2: 'In modalità Archivio, Revisione e Coda, usa il pulsante "Invia" nel tuo slicer per caricare file 3MF su Bambuddy. Lo slicer mostrerà "Stampa riuscita" — il file viene salvato, non stampato.',
- step3: 'In modalità Proxy, la stampante virtuale inoltra tutto il traffico a una stampante reale — le stampe partono immediatamente come con una connessione diretta.',
- },
- status: {
- title: 'Dettagli stato',
- printerName: 'Nome stampante',
- model: 'Modello',
- serialNumber: 'Numero seriale',
- mode: 'Modalita',
- pendingFiles: 'File in sospeso',
- targetPrinter: 'Stampante target',
- ftpPort: 'Porta FTP',
- mqttPort: 'Porta MQTT',
- ftpConnections: 'Connessioni FTP',
- mqttConnections: 'Connessioni MQTT',
- },
- toast: {
- updated: 'Impostazioni stampante virtuale aggiornate',
- failedToUpdate: 'Aggiornamento impostazioni fallito',
- copyFailed: 'Copia non riuscita — seleziona il testo manualmente',
- accessCodeRequired: 'Imposta prima un codice accesso',
- targetPrinterRequired: 'Seleziona prima una stampante target',
- bindIpRequired: 'Impostare prima un indirizzo IP',
- accessCodeEmpty: 'Il codice accesso non può essere vuoto',
- accessCodeLength: 'Il codice accesso deve essere esattamente 8 caratteri',
- targetCodeChangedRebind: 'Il codice di accesso ora corrisponde alla nuova stampante target. Ri-aggiungi questo dispositivo nel tuo slicer per acquisire il nuovo codice.',
- created: 'Stampante virtuale creata',
- failedToCreate: 'Impossibile creare la stampante virtuale',
- deleted: 'Stampante virtuale eliminata',
- failedToDelete: 'Impossibile eliminare la stampante virtuale',
- },
- list: {
- title: 'Stampanti virtuali',
- add: 'Aggiungi',
- addFirst: 'Aggiungi stampante virtuale',
- empty: 'Nessuna stampante virtuale configurata. Aggiungine una per iniziare.',
- },
- bindIp: {
- title: 'Interfaccia di rete',
- placeholder: 'Seleziona interfaccia...',
- hint: 'Interfaccia di rete a cui questa stampante virtuale si collega. Deve essere unica per stampante.',
- },
- proxy: {
- accessCodeHint: 'In modalita proxy, usa il codice di accesso della stampante di destinazione nello slicer. La connessione viene inoltrata in modo trasparente alla stampante reale.',
- },
- addDialog: {
- title: 'Aggiungi stampante virtuale',
- name: 'Nome',
- hint: 'Potrai configurare il codice di accesso, la stampante di destinazione e altre impostazioni dopo la creazione.',
- create: 'Crea',
- },
- deleteConfirm: {
- title: 'Elimina stampante virtuale',
- message: 'Sei sicuro di voler eliminare "{{name}}"? Tutti i servizi di questa stampante verranno interrotti.',
- },
- archiveNameSource: {
- title: 'Origine nome archivio',
- description: 'Scegli come vengono nominati i nuovi archivi quando i file arrivano tramite la stampante virtuale. "Metadati" utilizza il titolo incorporato nello slicer dal 3MF (default). "Nome file" utilizza il nome che Bambu Studio ha inviato via FTP. Nota: Bambu Studio sovrascrive il nome digitato nella finestra "invia a stampante" con il campo Titolo del 3MF quando presente, quindi entrambe le modalità producono spesso la stessa stringa.',
- metadata: 'Metadati',
- filename: 'Nome file',
- },
- caCert: {
- title: 'Certificato dello slicer',
- description: 'Le stampanti virtuali usano un certificato TLS firmato dalla CA di Bambuddy. Importa questo certificato CA nell\'archivio attendibile del tuo slicer una sola volta affinché accetti la connessione — senza doverlo copiare dalla riga di comando.',
- copy: 'Copia',
- copied: 'Copiato',
- download: 'Scarica',
- fingerprint: 'SHA-256',
- },
- },
- // Model Viewer
- modelViewer: {
- openInSlicer: 'Apri nello slicer',
- openInSlicerWith: 'Apri in {{slicer}}',
- moreSlicerOptions: 'Altre opzioni dello slicer',
- openInSlicerFailed: 'Impossibile aprire nello slicer',
- tabs: {
- model: 'Modello 3D',
- },
- notAvailable: 'non disponibile',
- plates: 'Piatti',
- allPlates: 'Tutti i piatti',
- plateNumber: 'Piatto {{number}}',
- plateCount: '{{count}} piatto',
- plateCount_other: '{{count}} piatti',
- objectCount: '{{count}} oggetto',
- objectCount_other: '{{count}} oggetti',
- filamentCount: '{{count}} filamento',
- filamentCount_other: '{{count}} filamenti',
- eta: 'ETA {{minutes}} min',
- noPreview: 'Nessuna anteprima disponibile per questo file',
- pagination: {
- pageOf: 'Pagina {{current}} di {{total}}',
- prev: 'Prec',
- next: 'Succ',
- },
- errors: {
- failedToLoad: 'Caricamento file fallito',
- noMeshes: 'Nessuna mesh trovata nel file 3MF',
- unsupportedFormat: 'Formato file non supportato',
- },
- },
- // Maintenance type descriptions (built-in)
- maintenanceDescriptions: {
- lubricateCarbonRods: 'Applica lubrificante alle aste in carbonio per un movimento fluido',
- lubricateRails: 'Applica lubrificante alle guide lineari per un movimento fluido',
- cleanNozzle: 'Pulisci hotend e ugello per prevenire intasamenti',
- checkBelts: 'Verifica tensione cinghie per stampe accurate',
- cleanBuildPlate: 'Pulisci il piatto per migliorare l\'adesione',
- checkExtruder: 'Ispeziona ingranaggi estrusore per usura',
- checkCooling: 'Assicurati che le ventole di raffreddamento funzionino',
- generalInspection: 'Ispezione generale stampante',
- cleanCarbonRods: 'Pulisci le aste in carbonio per ridurre attrito',
- lubricateSteelRods: 'Applica lubrificante alle aste in acciaio per un movimento fluido',
- cleanSteelRods: 'Pulisci le aste in acciaio per ridurre attrito',
- cleanLinearRails: 'Pulisci le guide lineari per rimuovere polvere e detriti',
- checkPtfeTube: 'Ispeziona il tubo PTFE per usura o danni',
- replaceHepaFilter: 'Sostituisci filtro HEPA per qualità aria',
- replaceCarbonFilter: 'Sostituisci filtro a carbone attivo',
- lubricateLeftNozzleRail: 'Lubrifica guida ugello sinistro (serie H2)',
- },
- // Smart Plugs
- haSensors: {
- label: 'Sensori',
- unavailable: 'Non disponibile',
- blocksPrints: '{{entity}} — trattiene le stampe finché l\'allarme è attivo',
- states: {
- open: 'Aperto',
- closed: 'Chiuso',
- unlocked: 'Sbloccato',
- locked: 'Bloccato',
- detected: 'Rilevato',
- clear: 'Libero',
- wet: 'Bagnato',
- dry: 'Asciutto',
- problem: 'Problema',
- ok: 'OK',
- running: 'In funzione',
- stopped: 'Fermo',
- on: 'Acceso',
- off: 'Spento',
- },
- sectionTitle: 'Sensori Home Assistant (stampanti)',
- add: 'Aggiungi sensore',
- addTitle: 'Aggiungi sensore Home Assistant',
- editTitle: 'Modifica sensore Home Assistant',
- empty: 'Nessun sensore. Collega un contatto porta o un termometro da Home Assistant per mostrarlo sulla scheda stampante.',
- unknownPrinter: 'Stampante sconosciuta',
- badgeBlocks: 'Trattiene le stampe',
- badgeNotifies: 'Notifica',
- badgeHidden: 'Nascosto sulla scheda',
- printer: 'Stampante',
- entity: 'Entità',
- searchPlaceholder: 'Cerca entità...',
- noEntities: 'Nessuna entità corrispondente',
- name: 'Nome visualizzato',
- alertWhen: 'Allarme quando',
- alertNever: 'Mai — solo visualizzazione',
- alertAbove: 'Sopra',
- alertBelow: 'Sotto',
- alertHint: 'Lo stato di allarme evidenzia il sensore sulla scheda stampante e abilita le opzioni sottostanti.',
- showOnCard: 'Mostra sulla scheda stampante',
- notifyOnAlert: 'Invia una notifica quando scatta l\'allarme',
- blockPrint: 'Trattieni le stampe in coda finché l\'allarme è attivo',
- blockPrintHint: 'I lavori restano in coda e partono da soli quando il sensore rientra. Ignorato finché Home Assistant non è raggiungibile.',
- toast: {
- created: 'Sensore aggiunto',
- updated: 'Sensore salvato',
- deleted: 'Sensore rimosso',
- },
- error: {
- pickEntity: 'Scegli un\'entità Home Assistant',
- nameRequired: 'Inserisci un nome visualizzato',
- printerRequired: 'Scegli una stampante',
- alertRequired: 'Imposta prima una condizione di allarme',
- },
- },
- locationHaSensors: {
- sectionTitle: 'Sensori Home Assistant (posizioni di archiviazione)',
- sectionDescription:
- 'Collega sensori di temperatura, umidità o batteria di Home Assistant alle tue posizioni di archiviazione per mostrare le letture in tempo reale sulla scheda del filamento e nella tabella. È consentito un solo sensore per categoria per posizione.',
- add: 'Aggiungi sensore',
- addTitle: 'Aggiungi sensore Home Assistant',
- editTitle: 'Modifica sensore Home Assistant',
- empty: 'Nessun sensore. Collega un sensore di temperatura o umidità da Home Assistant per mostrarlo sulla scheda del filamento.',
- unknownLocation: 'Posizione sconosciuta',
- location: 'Posizione di archiviazione',
- showOnCard: 'Mostra sulla scheda del filamento',
- overwriteConfirm: {
- title: 'Sostituire il sensore esistente?',
- messageTemperature: '"{{location}}" ha già un sensore di temperatura collegato: {{name}}. Continuando verrà sostituito.',
- messageHumidity: '"{{location}}" ha già un sensore di umidità collegato: {{name}}. Continuando verrà sostituito.',
- messageBattery: '"{{location}}" ha già un sensore di batteria collegato: {{name}}. Continuando verrà sostituito.',
- },
- autoAdd: {
- confirmTitle: 'Aggiungere anche gli altri sensori?',
- confirmMessage: 'Bambuddy ha trovato anche altri sensori per questa posizione. Scegli quali aggiungere.',
- added: 'Aggiunto anche: {{names}}',
- noneFound: 'Nessun sensore di temperatura, umidità o batteria corrispondente trovato per questa posizione.',
- onlyThisOne: 'Solo questo',
- },
- options: {
- buttonLabel: 'Opzioni sensori',
- title: 'Opzioni sensori di posizione',
- description: 'Questi valori vengono usati quando un sensore di temperatura, umidità o batteria viene collegato automaticamente insieme al primo sensore di una posizione.',
- generalSettings: 'Impostazioni generali',
- pollInterval: 'Intervallo di aggiornamento (secondi)',
- pollIntervalHint: 'Con quale frequenza Bambuddy interroga Home Assistant e aggiorna i valori dei sensori a schermo. Minimo 60 secondi.',
- colorizeValues: 'Colora i valori dei sensori in base alle relative soglie di allarme',
- aboveColor: 'Colore sopra la soglia',
- belowColor: 'Colore sotto la soglia',
- optimalColor: 'Colore per il valore ottimale',
- colors: {
- red: 'Rosso',
- orange: 'Arancione',
- yellow: 'Giallo',
- green: 'Verde',
- blue: 'Blu',
- purple: 'Viola',
- pink: 'Rosa',
- },
- saved: 'Opzioni salvate',
- saveFailed: 'Impossibile salvare le opzioni',
- reset: 'Ripristina',
- resetConfirm: {
- title: 'Reimpostare tutti i sensori di posizione esistenti?',
- message:
- 'Questo sovrascrive le soglie di allarme, le notifiche e la visibilità sulla scheda di tutti i sensori di temperatura, umidità e batteria di posizione esistenti con i valori configurati sopra, e ripristina il nome di ciascun sensore al suo nome descrittivo di Home Assistant: i sensori della stampante non sono interessati. Questa azione non può essere annullata. A seconda del numero di sensori, questa operazione potrebbe richiedere un momento.',
- },
- resetDone: 'Applicato a {{count}} sensori di posizione',
- resetFailed: 'Impossibile reimpostare i sensori di posizione',
- },
- deleteAllConfirm: {
- title: 'Eliminare tutti i sensori?',
- message: 'Questo rimuove tutti i {{count}} sensori collegati a "{{location}}". Questa azione non può essere annullata.',
- },
- currentlyBound: 'Attualmente collegato: {{entity}}',
- error: {
- locationRequired: 'Scegli una posizione di archiviazione',
- },
- toast: {
- created: 'Sensore aggiunto',
- updated: 'Sensore salvato',
- deleted: 'Sensore rimosso',
- },
- },
- smartPlugs: {
- offline: 'Offline',
- admin: 'Amministrazione',
- openPlugAdminPage: 'Apri pagina amministrazione presa',
- deleteSmartPlug: 'Elimina presa smart',
- turnOnSmartPlug: 'Accendi presa smart',
- turnOffSmartPlug: 'Spegni presa smart',
- turnOn: 'Accendi',
- turnOff: 'Spegni',
- addSmartPlug: {
- scanningNetwork: 'Scansione rete...',
- chooseEntity: 'Scegli un\'entità...',
- connectionFailed: 'Connessione fallita',
- searchEntities: 'Cerca entità...',
- searchPowerSensors: 'Cerca sensori di potenza...',
- searchEnergySensors: 'Cerca sensori di energia...',
- placeholders: {
- plugName: 'Presa soggiorno',
- mqttStateOnValue: 'ON, true, 1',
- mqttSameAsPower: 'Stesso del topic potenza, o diverso',
- },
- },
- // SmartPlugCard
- linkedTo: 'Collegato a:',
- monitorOnly: 'Solo monitoraggio',
- alerts: 'Avvisi',
- scheduleOn: 'Alle {{time}}',
- scheduleOff: 'Spento {{time}}',
- on: 'On',
- off: 'Spento',
- power: 'Potenza',
- kwhToday: 'kWh Oggi',
- settings: 'Impostazioni',
- automationSettings: 'Impostazioni automazione',
- showInSwitchbar: 'Mostra nella barra interruttori',
- quickAccessSidebar: 'Accesso rapido dalla barra laterale',
- enabled: 'Abilitato',
- enableAutomation: 'Abilita automazione per questa presa',
- autoOn: 'Auto On',
- autoOnDescription: 'Accendi quando inizia la stampa',
- autoOff: 'Auto Off',
- autoOffDescription: 'Spegni quando la stampa è completata (una tantum)',
- autoOffPersistent: 'Mantieni attivo',
- autoOffPersistentDescription: 'Resta attivo tra le stampe invece di una tantum',
- controlsPrinterPower: 'Alimenta la stampante',
- controlsPrinterPowerDescription: 'Disattiva se questa presa alimenta solo un accessorio (ventola del filtro, luci). Altrimenti spegnerla segna la stampante come offline.',
- autoOffAfterDrying: 'Spegni dopo asciugatura',
- autoOffAfterDryingDescription: 'Spegni al termine dell\'asciugatura AMS',
- delayAfterDryingMinutes: 'Ritardo dopo asciugatura (minuti)',
- turnOffDelayMode: 'Modalità ritardo spegnimento',
- time: 'Tempo',
- temp: 'Temp.',
- delayMinutes: 'Ritardo (minuti)',
- tempThreshold: 'Soglia temperatura (°C)',
- tempThresholdDescription: 'Si spegne quando l\'ugello si raffredda sotto questa temperatura',
- edit: 'Modifica',
- deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"? Questa azione non può essere annullata.',
- turnOnConfirm: 'Sei sicuro di voler accendere "{{name}}"?',
- turnOffConfirm: 'Sei sicuro di voler spegnere "{{name}}"? Questo interromperà l\'alimentazione del dispositivo collegato.',
- failedToTurn: 'Impossibile {{action}} "{{name}}"',
- unknown: 'Sconosciuto',
- // AddSmartPlugModal
- addTitle: 'Aggiungi presa smart',
- editTitle: 'Modifica presa smart',
- stopScanning: 'Interrompi scansione',
- discoverTasmota: 'Scopri dispositivi Tasmota',
- foundDevices: '{{count}} dispositivo/i trovato/i - clicca per selezionare:',
- noDevicesFound: 'Nessun dispositivo Tasmota trovato nella rete',
- haNotConfigured: 'Home Assistant non è configurato. Configuralo in',
- haSettingsPath: 'Impostazioni → Rete → Home Assistant',
- selectEntity: 'Seleziona entità *',
- ipAddress: 'Indirizzo IP *',
- nameLabel: 'Nome *',
- username: 'Nome utente',
- password: 'Password',
- authHint: 'Lascia vuoto se il tuo dispositivo Tasmota non richiede autenticazione',
- linkToPrinter: 'Collega alla stampante',
- noPrinter: 'Nessuna stampante (solo controllo manuale)',
- linkingDescription: 'Il collegamento abilita accensione/spegnimento automatico all\'inizio/fine stampa',
- powerAlerts: 'Avvisi potenza',
- alertAbove: 'Avviso se sopra (W)',
- alertBelow: 'Avviso se sotto (W)',
- alertDescription: 'Ricevi notifiche quando il consumo supera queste soglie. Lascia vuoto per disabilitare quella direzione.',
- dailySchedule: 'Programma giornaliero',
- turnOnAt: 'Accendi alle',
- turnOffAt: 'Spegni alle',
- scheduleDescription: 'Accendi/spegni automaticamente la presa a questi orari ogni giorno. Lascia vuoto per saltare quell\'azione.',
- showOnPrinterCard: 'Mostra sulla scheda stampante',
- displayOnPrinterCard: 'Mostra pulsante sulla scheda stampante',
- connectedResult: 'Connesso!',
- deviceLabel: 'Dispositivo: {{name}} - ',
- stateLabel: 'Stato: {{state}}',
- test: 'Test',
- delete: 'Elimina',
- save: 'Salva',
- add: 'Aggiungi',
- cancel: 'Annulla',
- failedToStartScan: 'Impossibile avviare la scansione',
- nameRequired: 'Il nome è obbligatorio',
- entityRequired: 'L\'entità è obbligatoria per le prese Home Assistant',
- mqttTopicRequired: 'Almeno un topic MQTT deve essere configurato per potenza, energia o monitoraggio stato',
- loadingEntities: 'Caricamento entità...',
- loading: 'Caricamento...',
- failedToLoadEntities: 'Impossibile caricare le entità: {{error}}',
- noEntitiesMatching: 'Nessuna entità trovata corrispondente a "{{search}}"',
- noEntitiesAvailable: 'Nessuna entità disponibile',
- searchingEntities: 'Ricerca in tutte le entità ({{count}} trovate)',
- showingEntities: 'Mostrando switch, light, input_boolean ({{count}} disponibili)',
- energyMonitoringOptional: 'Monitoraggio energia (Opzionale)',
- energyMonitoringHint: 'Cerca e seleziona i sensori che forniscono dati di potenza/energia.',
- powerSensorW: 'Sensore potenza (W)',
- energyTodayKwh: 'Energia oggi (kWh)',
- totalEnergyKwh: 'Energia totale (kWh)',
- noMatchingSensors: 'Nessun sensore corrispondente',
- none: 'Nessuno',
- mqttNotConfigured: 'Broker MQTT non configurato. Imposta l\'indirizzo del broker in',
- mqttSettingsPath: 'Impostazioni → Rete → Pubblicazione MQTT',
- mqttNotConfiguredSuffix: '(non è necessario abilitare la pubblicazione, basta inserire i dettagli del broker).',
- mqttMonitorOnlyDescription: 'Le prese MQTT ricevono dati di potenza/energia tramite sottoscrizione MQTT. Il controllo on/off non è disponibile - usa il tuo broker MQTT o sistema domotico.',
- powerMonitoring: 'Monitoraggio potenza',
- energyMonitoring: 'Monitoraggio energia',
- stateMonitoring: 'Monitoraggio stato',
- optional: 'opzionale',
- topic: 'Argomento',
- jsonPath: 'Percorso JSON',
- multiplier: 'Moltiplicatore',
- onValue: 'Valore ON',
- mqttPowerHint: 'Il percorso JSON estrae il valore dal payload JSON (es. "power_l1"). Lascia vuoto se il topic pubblica valori numerici grezzi.\nUsa moltiplicatore 0.001 per mW→W, 1000 per kW→W.',
- mqttEnergyHint: 'Il percorso JSON estrae il valore dal payload JSON. Lascia vuoto per valori grezzi.\nUsa moltiplicatore 0.001 per Wh→kWh, 1000 per MWh→kWh.',
- mqttStateHint: 'Il percorso JSON estrae il valore dal payload JSON. Lascia vuoto per valori grezzi.\nValore ON: la stringa esatta che significa "ON". Lascia vuoto per rilevamento auto (ON, true, 1).',
- // REST smart plug
- restControl: 'Controllo',
- restOnUrl: 'URL accensione',
- restOffUrl: 'URL spegnimento',
- restOnBody: 'Corpo richiesta ON',
- restOffBody: 'Corpo richiesta OFF',
- restMethod: 'Metodo HTTP',
- restHeaders: 'Custom Headers (JSON)',
- restStatusUrl: 'URL stato',
- restStatusPath: 'Percorso JSON stato',
- restStatusOnValue: 'Valore ON',
- restPowerUrl: 'URL potenza',
- restPowerPath: 'Percorso JSON potenza',
- restPowerMultiplier: 'Moltiplicatore potenza',
- restEnergyUrl: 'URL energia',
- restEnergyPath: 'Percorso JSON energia (oggi)',
- restEnergyTotalPath: 'Percorso JSON energia (contatore totale)',
- restEnergyTotalMultiplier: 'Moltiplicatore contatore totale',
- restEnergyTotalPathHint: 'es. aenergy.total',
- restEnergyTotalHint:
- 'Molte prese — tutti gli Shelly fra queste — riportano solo un contatore cumulativo che non si azzera mai. Va qui, non nel campo sopra: letto come consumo di oggi non tornerebbe mai a zero a mezzanotte, e Ieri e Totale resterebbero vuoti. Bambuddy ricava Oggi e Ieri da questo valore, il che richiede uno o due giorni di letture. Uno Shelly riporta wattora, quindi usa un moltiplicatore di 0.001.',
- restEnergyMultiplier: 'Moltiplicatore energia',
- restUrlRequired: 'È richiesto almeno un URL (ON o OFF) per le prese REST',
- restHeadersHint: 'es. {"Authorization": "Bearer your-token"}',
- restBodyHint: 'es. ON, {"state": "on"}',
- restStatusHint: 'URL per recuperare lo stato attuale',
- restPathHint: 'es. state o data.power.status',
- restPowerUrlHint: 'URL separato per i dati di potenza (usa l\'URL di stato se vuoto)',
- restEnergyUrlHint: 'URL separato per i dati di energia (usa l\'URL di stato se vuoto)',
- restEnergyHint: 'Ogni valore può usare il proprio URL o ricadere sull\'URL di stato. Usa i moltiplicatori per la conversione delle unità (es. 0.001 per convertire Wh in kWh).',
- testConnection: 'Testa connessione',
- connectionSuccess: 'Connessione riuscita',
- noSwitchesInSwitchbar: 'Nessun interruttore nella barra',
- enableSwitchbarHint: 'Abilita "Mostra nella barra interruttori" in Impostazioni > Smart Plugs',
- },
- // Notifications
- notifications: {
- // Provider types
- providerTypes: {
- callmebot: 'CallMeBot/WhatsApp',
- ntfy: 'ntfy',
- pushover: 'Pushover',
- telegram: 'Telegram',
- email: 'E-mail',
- discord: 'Discord',
- webhook: 'Webhook',
- homeassistant: 'Home Assistant',
- bark: 'Bark',
- },
- // Provider descriptions
- providerDescriptions: {
- email: 'Notifiche email tramite SMTP',
- telegram: 'Notifiche tramite bot Telegram',
- discord: 'Invia a un canale Discord tramite webhook',
- ntfy: 'Notifiche push gratuite e self-hostabili',
- pushover: 'Notifiche push semplici e affidabili',
- callmebot: 'Notifiche WhatsApp gratuite tramite CallMeBot',
- webhook: 'POST HTTP generico verso qualsiasi URL',
- homeassistant: 'Notifiche persistenti nella dashboard di Home Assistant',
- bark: 'Notifiche push iOS tramite Bark (auto-ospitabile)',
- },
- // NotificationProviderCard
- lastSuccess: 'Ultimo: {{date}}',
- error: 'Errore',
- printer: 'Stampante:',
- allPrinters: 'Tutte le stampanti',
- sendTestNotification: 'Invia notifica di prova',
- eventSettings: 'Impostazioni eventi',
- enabled: 'Abilitato',
- sendFromProvider: 'Invia notifiche da questo provider',
- // Event categories
- printEvents: 'Eventi di stampa',
- printerStatus: 'Stato stampante',
- amsAlarms: 'Allarmi AMS',
- amsHtAlarms: 'Allarmi AMS-HT',
- printQueue: 'Coda di stampa',
- // Event tags (badges)
- start: 'Avvio',
- plateCheck: 'Controllo piatto',
- complete: 'Completato',
- failed: 'Fallito',
- stopped: 'Interrotto',
- progress: 'Avanzamento',
- offline: 'Offline',
- lowFilament: 'Filamento scarso',
- maintenance: 'Manutenzione',
- amsHumidity: 'Umidità AMS',
- amsTemp: 'Temp AMS',
- amsDryingSuspended: 'Asciugatura sospesa',
- amsHtHumidity: 'Umidità AMS-HT',
- amsHtTemp: 'Temp AMS-HT',
- bedCooled: 'Piatto raffreddato',
- firstLayer: 'Primo strato',
- quiet: 'Silenzioso',
- digest: 'Riepilogo {{time}}',
- // Event labels (expanded settings)
- printStarted: 'Stampa avviata',
- plateNotEmpty: 'Piatto non vuoto',
- plateNotEmptyDescription: 'Oggetti rilevati prima della stampa',
- plateClearRequired: 'Conferma piatto libero',
- plateClearRequiredDescription: 'Stampa finita, la coda attende conferma',
- plateClear: 'Piatto libero',
- printCompleted: 'Stampa completata',
- bedCooledLabel: 'Piatto raffreddato',
- bedCooledDescription: 'Piatto raffreddato sotto la soglia dopo la stampa',
- firstLayerCompleteLabel: 'Primo strato completato',
- firstLayerCompleteDescription: 'Notifica con foto al termine del primo strato',
- missingSpoolAssignmentLabel: 'Assegnazione bobina mancante',
- billingChargeFailedLabel: 'Errore di addebito',
- billingChargeFailedDescription: 'Notifica quando non è possibile registrare i costi di stampa',
- missingSpoolAssignmentDescription: 'Notifica quando una stampa parte e i vassoi richiesti non hanno una bobina assegnata',
- printFailed: 'Stampa fallita',
- printStopped: 'Stampa interrotta',
- progressMilestones: 'Traguardi di avanzamento',
- progressMilestonesDescription: 'Notifica al 25%, 50%, 75%',
- printerOffline: 'Stampante offline',
- printerError: 'Errore stampante',
- aiFailureDetection: 'Rilevamento guasti IA',
- aiFailureDetectionDescription: 'Notifica quando l\'IA di Obico rileva un possibile guasto di stampa',
- lowFilamentLabel: 'Filamento scarso',
- maintenanceDue: 'Manutenzione necessaria',
- maintenanceDueDescription: 'Notifica quando è necessaria la manutenzione',
- amsHumidityHigh: 'Umidità AMS elevata',
- amsHumidityHighDescription: 'L\'umidità dell\'AMS standard supera la soglia',
- amsTemperatureHigh: 'Temperatura AMS elevata',
- amsTemperatureHighDescription: 'La temperatura dell\'AMS standard supera la soglia',
- amsDryingSuspendedTitle: 'Asciugatura automatica sospesa',
- amsDryingSuspendedDescription: 'L\'asciugatura automatica ha rinunciato a un\'unità AMS perché l\'umidità non è mai scesa sotto la soglia',
- amsHtHumidityHigh: 'Umidità AMS-HT elevata',
- amsHtHumidityHighDescription: 'L\'umidità dell\'AMS-HT supera la soglia',
- amsHtTemperatureHigh: 'Temperatura AMS-HT elevata',
- amsHtTemperatureHighDescription: 'La temperatura dell\'AMS-HT supera la soglia',
- // Inventory stock alert events
- inventoryAlerts: 'Avvisi di inventario',
- stockReorderAlert: 'Avviso di riordino',
- stockReorderAlertDescription: 'Il SKU ha raggiunto il punto di riordino',
- stockBreakAlert: 'Avviso di esaurimento scorte',
- stockBreakAlertDescription: 'Le scorte si esauriranno prima dell\'arrivo del rifornimento',
- // Queue events
- jobAdded: 'Lavoro aggiunto',
- jobAddedDescription: 'Lavoro aggiunto alla coda',
- jobAssigned: 'Lavoro assegnato',
- jobAssignedDescription: 'Lavoro basato su modello assegnato alla stampante',
- jobStarted: 'Lavoro avviato',
- jobStartedDescription: 'Lavoro in coda avviato per la stampa',
- jobWaiting: 'Lavoro in attesa',
- jobWaitingDescription: 'Lavoro in attesa di filamento o stampante',
- jobSkipped: 'Lavoro saltato',
- jobSkippedDescription: 'Lavoro saltato (precedente fallito)',
- jobFailed: 'Lavoro fallito',
- jobFailedDescription: 'Avvio del lavoro fallito',
- queueComplete: 'Coda completata',
- queueCompleteDescription: 'Tutti i lavori in coda completati',
- // Quiet hours
- quietHours: 'Ore silenziose',
- noNotificationsDuring: 'Nessuna notifica durante queste ore',
- editProviderToChangeQuietHours: 'Modifica il provider per cambiare le ore silenziose',
- // Daily digest
- dailyDigest: 'Riepilogo giornaliero',
- batchNotifications: 'Raggruppa le notifiche in un unico riepilogo giornaliero',
- sendAt: 'Invia alle {{time}}',
- editProviderToChangeDigestTime: 'Modifica il provider per cambiare l\'orario del riepilogo',
- // Actions
- edit: 'Modifica',
- deleteProvider: 'Elimina provider di notifica',
- deleteConfirm: 'Sei sicuro di voler eliminare "{{name}}"? Questa azione non può essere annullata.',
- delete: 'Elimina',
- // AddNotificationModal
- addTitle: 'Aggiungi provider di notifica',
- editTitle: 'Modifica provider di notifica',
- nameLabel: 'Nome *',
- namePlaceholder: 'Le mie notifiche',
- providerTypeLabel: 'Tipo di provider *',
- configuration: 'Configurazione',
- testConfiguration: 'Testa configurazione',
- printerFilter: 'Filtro stampante',
- onlyFromPrinter: 'Invia notifiche solo per eventi da questa stampante',
- quietHoursDnd: 'Ore silenziose (Non disturbare)',
- quietStart: 'Inizio',
- quietEnd: 'Fine',
- dailyDigestLabel: 'Riepilogo giornaliero',
- sendDigestAt: 'Invia riepilogo alle',
- digestCollected: 'Gli eventi verranno raccolti e inviati come riepilogo unico a quest\'ora',
- notificationEvents: 'Eventi di notifica',
- progressPercent: '(25%, 50%, 75%)',
- bedCooledAfterPrint: '(dopo il completamento della stampa)',
- haSensorAlert: 'Avviso sensore stampante',
- haSensorAlertDescription: '(un sensore Home Assistant collegato richiede attenzione)',
- locationHaSensorAlert: 'Avviso sensore di posizione',
- locationHaSensorAlertDescription: '(un sensore Home Assistant collegato a una posizione di archiviazione richiede attenzione)',
- // Per-event ntfy priority (#990)
- eventPriority: {
- sectionTitle: 'Priorità ntfy',
- helpNtfy: 'Scegli una priorità per ogni evento abilitato. ntfy le usa per intensificare gli avvisi (suono, visibilità, comportamento push). I livelli non impostati qui usano l\'impostazione predefinita del server ntfy.',
- min: 'Min.',
- low: 'Bassa',
- default: 'Predefinita',
- high: 'Alta',
- urgent: 'Urgente',
- },
- cancel: 'Annulla',
- save: 'Salva',
- add: 'Aggiungi',
- nameRequired: 'Il nome è obbligatorio',
- fieldRequired: '{{field}} è obbligatorio',
- haDataInvalid: 'Il campo Data deve essere un oggetto JSON valido, ad es. {"priority": "high", "ttl": 0}',
- // Config field labels
- phoneNumber: 'Numero di telefono',
- apiKey: 'Chiave API',
- serverUrl: 'URL del server',
- topic: 'Argomento',
- authToken: 'Token di autenticazione',
- userKey: 'Chiave utente',
- appToken: 'Token applicazione',
- priority: 'Priorità',
- pushoverRetry: 'Ripetizione emergenza (s)',
- pushoverExpire: 'Scadenza emergenza (s)',
- botToken: 'Token del bot',
- chatId: 'ID chat',
- telegramThreadId: 'ID argomento forum',
- telegramThreadIdHelp: 'Opzionale. Invia in un singolo argomento di un gruppo forum: l\'ultimo numero nel link dell\'argomento (t.me/c/.../25). Lascia vuoto per l\'argomento Generale.',
- telegramThreadIdInvalid: 'L\'ID argomento forum deve essere un numero.',
- smtpServer: 'Server SMTP',
- smtpPort: 'Porta SMTP',
- security: 'Sicurezza',
- authentication: 'Autenticazione',
- username: 'Nome utente',
- password: 'Password',
- fromEmail: 'Email mittente',
- toEmail: 'Email destinatario',
- webhookUrl: 'URL webhook',
- payloadFormat: 'Formato payload',
- authorization: 'Autorizzazione',
- titleFieldName: 'Nome campo titolo',
- messageFieldName: 'Nome campo messaggio',
- // NotificationTemplateEditor
- editTemplate: 'Modifica modello: {{name}}',
- titleLabel: 'Titolo',
- bodyLabel: 'Corpo',
- titlePlaceholder: 'Titolo della notifica...',
- bodyPlaceholder: 'Corpo della notifica...',
- availableVariables: 'Variabili disponibili',
- clickToInsert: 'Clicca per inserire alla posizione del cursore nel corpo',
- livePreview: 'Anteprima live',
- hide: 'Nascondi',
- show: 'Mostra',
- loadingPreview: 'Caricamento anteprima...',
- enterTemplateContent: 'Inserisci il contenuto del modello per vedere l\'anteprima',
- titlePreview: 'Titolo:',
- bodyPreview: 'Corpo:',
- resetToDefault: 'Ripristina predefinito',
- titleRequired: 'Il titolo è obbligatorio',
- bodyRequired: 'Il corpo è obbligatorio',
- // NotificationLogViewer
- notificationLog: 'Registro notifiche',
- showFailedOnly: 'Solo fallite',
- last24Hours: 'Ultime 24 ore',
- last7Days: 'Ultimi 7 giorni',
- last30Days: 'Ultimi 30 giorni',
- last90Days: 'Ultimi 90 giorni',
- justNow: 'Proprio ora',
- noFailedNotifications: 'Nessuna notifica fallita',
- noNotificationsLogged: 'Nessuna notifica registrata',
- unknownProvider: 'Provider sconosciuto',
- logTitle: 'Titolo',
- logMessage: 'Messaggio',
- logError: 'Errore',
- logProvider: 'Provider: {{type}}',
- logTime: 'Ora: {{time}}',
- refresh: 'Aggiorna',
- clearOld: 'Cancella vecchie',
- statsSummary: 'Ultimi {{days}} giorni:',
- statsNotifications: 'notifiche',
- statsSent: '{{count}} inviate',
- statsFailed: '{{count}} fallite',
- // Event type labels (for log viewer)
- eventTypes: {
- print_start: 'Stampa avviata',
- print_complete: 'Stampa completata',
- print_failed: 'Stampa fallita',
- print_stopped: 'Stampa interrotta',
- print_progress: 'Avanzamento',
- printer_offline: 'Stampante offline',
- printer_error: 'Errore stampante',
- filament_low: 'Filamento scarso',
- maintenance_due: 'Manutenzione necessaria',
- test: 'Prova',
- },
- // User email notification preferences
- userEmail: {
- title: 'Notifiche',
- emailNotifications: 'Notifiche via e-mail',
- emailNotificationsDesc: "Ricevi notifiche via e-mail per i tuoi lavori di stampa. Le e-mail vengono inviate tramite le impostazioni SMTP configurate nell'autenticazione avanzata.",
- sendingTo: 'Le notifiche verranno inviate a',
- noEmailWarning: "Il tuo account non ha un indirizzo e-mail. Contatta un amministratore per aggiungerne uno.",
- printJobNotifications: 'Notifiche lavori di stampa',
- printJobNotificationsDesc: 'Scegli quali eventi attivano le notifiche e-mail per i lavori di stampa che invii.',
- printJobStarts: 'Inizio lavoro di stampa',
- printJobStartsDesc: 'Ricevi una notifica quando il tuo lavoro di stampa inizia.',
- printJobFinishes: 'Fine lavoro di stampa',
- printJobFinishesDesc: 'Ricevi una notifica quando il tuo lavoro di stampa si completa correttamente.',
- printErrors: 'Errori di stampa',
- printErrorsDesc: 'Ricevi una notifica quando il tuo lavoro di stampa fallisce o incontra un errore.',
- printJobStops: 'Lavoro di stampa interrotto',
- printJobStopsDesc: 'Ricevi una notifica quando il tuo lavoro di stampa viene annullato o interrotto.',
- saveSuccess: 'Preferenze di notifica salvate.',
- saveError: 'Impossibile salvare le preferenze di notifica.',
- },
- },
- // Rich Text Editor
- richTextEditor: {
- bold: 'Grassetto',
- italic: 'Corsivo',
- underline: 'Sottolineato',
- bulletList: 'Elenco puntato',
- numberedList: 'Elenco numerato',
- alignLeft: 'Allinea a sinistra',
- alignCenter: 'Allinea al centro',
- alignRight: 'Allinea a destra',
- addLink: 'Aggiungi link',
- removeLink: 'Rimuovi link',
- },
- // External Links
- externalLinks: {
- title: 'Link della barra laterale',
- sidebarLayout: 'Barra laterale',
- sidebarLayoutDescription: 'Mostra o nascondi le pagine integrate, aggiungi link esterni e trascina gli elementi per riordinare la navigazione laterale.',
- systemPages: 'Pagine Bambuddy',
- externalLinks: 'Link esterni',
- visibleInSidebar: 'Visibile nella barra laterale',
- hiddenFromSidebar: 'Nascosto nella barra laterale',
- requiredInSidebar: 'Obbligatorio nella barra laterale',
- hidePage: 'Nascondi pagina',
- showPage: 'Mostra pagina',
- settingsCannotBeHidden: 'Le impostazioni non possono essere nascoste',
- noLinksConfigured: 'Nessun link esterno configurato',
- deleteLink: 'Elimina link',
- removeCustomIcon: 'Rimuovi icona personalizzata',
- openInNewTab: 'Apri in nuova scheda',
- placeholders: {
- linkName: 'Il mio link',
- },
- },
- // Keyboard Shortcuts Modal
- keyboardShortcuts: {
- title: 'Scorciatoie da tastiera',
- navigation: 'Navigazione',
- archivesSection: 'Archivi',
- kProfilesSection: 'Profili K',
- generalSection: 'Generale',
- shortcuts: {
- goToPrinters: 'Vai a Stampanti',
- goToArchives: 'Vai ad Archivi',
- goToQueue: 'Vai a Coda',
- goToStats: 'Vai a Statistiche',
- goToProfiles: 'Vai a Profili cloud',
- goToSettings: 'Vai a Impostazioni',
- focusSearch: 'Vai alla ricerca',
- openUploadModal: 'Apri finestra di caricamento',
- clearSelection: 'Cancella selezione / deseleziona input',
- contextMenu: 'Menu contestuale sulle schede',
- refreshProfiles: 'Aggiorna profili',
- newProfile: 'Nuovo profilo',
- exitSelectionMode: 'Esci dalla modalità selezione',
- showHelp: 'Mostra questa guida',
- },
- footer: 'Premi Esc o clicca fuori per chiudere',
- },
- // Notification Log
- notificationLog: {
- title: 'Registro notifiche',
- events: {
- printStarted: 'Stampa avviata',
- printComplete: 'Stampa completata',
- printFailed: 'Stampa fallita',
- printStopped: 'Stampa interrotta',
- progress: 'Avanzamento',
- printerOffline: 'Stampante offline',
- printerError: 'Errore stampante',
- lowFilament: 'Filamento in esaurimento',
- maintenanceDue: 'Manutenzione in scadenza',
- test: 'Test',
- },
- timeAgo: {
- justNow: 'Adesso',
- minutesAgo: '{{minutes}} min fa',
- hoursAgo: '{{hours}} ore fa',
- },
- },
- // Restore/Backup Modal
- restoreBackup: {
- title: 'Ripristina backup',
- restoring: 'Ripristino...',
- restoreComplete: 'Ripristino completato',
- restoreFailed: 'Ripristino fallito',
- importSettings: 'Importa impostazioni da un file di backup',
- pleaseWait: 'Attendere il ripristino dei dati',
- clickToSelect: 'Clicca per selezionare il file di backup (.json o .zip)',
- howDuplicateHandling: 'Come funziona la gestione dei duplicati:',
- categories: {
- printers: 'Stampanti',
- smartPlugs: 'Prese smart',
- notificationProviders: 'Provider di notifica',
- filaments: 'Filamenti',
- archives: 'Archivi',
- pendingUploads: 'Caricamenti in sospeso',
- settingsTemplates: 'Impostazioni e modelli',
- },
- matchingInfo: {
- printers: 'abbinati per numero di serie',
- smartPlugs: 'abbinati per indirizzo IP',
- notificationProviders: 'abbinati per nome',
- filaments: 'abbinati per nome + tipo + marca',
- archives: 'abbinati per hash del contenuto',
- pendingUploads: 'abbinati per nome file',
- settingsTemplates: 'sempre sovrascritti',
- },
- replaceExisting: 'Sostituisci dati esistenti',
- keepExisting: 'Mantieni dati esistenti',
- replaceDescription: 'Sovrascrivi gli elementi già esistenti con i dati del backup',
- keepDescription: 'Ripristina solo gli elementi che non esistono già',
- caution: 'Attenzione:',
- cautionText: 'La sovrascrittura sostituirà le configurazioni attuali con i dati del backup. I codici di accesso delle stampanti non vengono mai sovrascritti per sicurezza.',
- itemsRestored: 'Elementi ripristinati',
- itemsSkipped: 'Elementi saltati',
- restored: 'Ripristinati',
- skipped: 'Saltati (già esistenti)',
- filesLabel: 'File (3MF, miniature, ecc.)',
- newApiKeysGenerated: 'Nuove chiavi API generate',
- newApiKeysWarning: 'Queste chiavi vengono mostrate una sola volta. Copiale adesso!',
- processingBackup: 'Elaborazione file di backup...',
- noDataFound: 'Nessun dato trovato da ripristinare nel file di backup.',
- failedToRestore: 'Impossibile ripristinare il backup. Verificare il formato del file.',
- },
- // Backup Export Modal
- backupExport: {
- title: 'Esporta backup',
- selectData: 'Seleziona i dati da includere',
- selectAll: 'Seleziona tutto',
- selectNone: 'Deseleziona tutto',
- categoryDescriptions: {
- settings: 'Lingua, tema, preferenze di aggiornamento',
- notifications: 'ntfy, Pushover, Discord, ecc.',
- templates: 'Modelli di messaggi personalizzati',
- smartPlugs: 'Configurazioni prese Tasmota',
- externalLinks: 'Link della barra laterale a servizi esterni',
- printers: 'Info stampanti (codici di accesso esclusi)',
- plateDetection: 'Immagini di riferimento piatto vuoto',
- filaments: 'Tipi di filamento e costi',
- maintenance: 'Programmi di manutenzione personalizzati',
- archives: 'Tutti i dati di stampa + file (3MF, miniature, foto)',
- projects: 'Progetti, elementi BOM e allegati',
- pendingUploads: 'Caricamenti della stampante virtuale in attesa di revisione',
- apiKeys: 'Chiavi API webhook (nuove chiavi generate all\'importazione)',
- },
- requiresPrinters: 'Richiede la selezione di Stampanti',
- zipFileWarning: 'Verrà creato un file ZIP.',
- zipFileDescription: 'Include tutti i file 3MF, miniature, timelapse e foto. Potrebbe richiedere tempo e produrre un file di grandi dimensioni.',
- includeAccessCodes: 'Includi codici di accesso',
- includeAccessCodesDescription: 'Per il trasferimento su un\'altra macchina',
- includeAccessCodesWarning: 'I codici di accesso saranno inclusi in testo semplice. Mantieni sicuro questo file di backup!',
- categoriesSelected: '{{selectedCount}} categorie selezionate',
- },
- // Pending Uploads Panel
- pendingUploads: {
- placeholders: {
- notes: 'Aggiungi note su questa stampa...',
- },
- discardUpload: 'Scarta caricamento',
- archiveAllUploads: 'Archivia tutti i caricamenti',
- discardAllUploads: 'Scarta tutti i caricamenti',
- archive: 'Archivia',
- timeAgo: {
- justNow: 'Adesso',
- minutesAgo: '{{minutes}} min fa',
- hoursAgo: '{{hours}} ore fa',
- daysAgo: '{{days}} giorni fa',
- },
- },
- // API Browser
- apiBrowser: {
- placeholders: {
- requestBody: 'Corpo della richiesta JSON...',
- searchEndpoints: 'Cerca endpoint...',
- },
- },
- // Configure AMS Slot Modal
- configureAmsSlot: {
- title: 'Configura Slot AMS',
- slotConfigured: 'Slot configurato!',
- configuringSlot: 'Configurazione slot:',
- slotLabel: '{{ams}} – Slot {{slot}}',
- searchPresets: 'Cerca preset...',
- colorPlaceholder: 'Nome colore o hex (es. marrone, FF8800)',
- clearCustomColor: 'Cancella colore personalizzato',
- noCloudPresets: 'Nessun preset cloud. Accedi a Bambu Cloud per sincronizzare.',
- noPresetsAvailable: 'Nessun preset disponibile. Accedi a Bambu Cloud o importa profili locali.',
- noMatchingPresets: 'Nessun preset corrispondente trovato.',
- custom: 'Personalizzato',
- builtin: 'Integrato',
- orcaCloud: 'Orca Cloud',
- bambuCloud: 'Bambu Cloud',
- settingsSentToPrinter: 'Impostazioni inviate alla stampante',
- filamentProfile: 'Profilo filamento',
- kProfileLabel: 'Profilo K (Pressure Advance)',
- filteringFor: 'Filtrando per: {{material}}',
- noKProfile: 'Nessun profilo K (usa predefinito 0.020)',
- noMatchingKProfiles: 'Nessun profilo K corrispondente. Verrà usato K=0.020 predefinito.',
- otherKProfiles: 'Altri profili K su questa stampante',
- selectFilamentFirst: 'Seleziona prima un profilo filamento',
- kFromCalibration: 'K={{value}} dalla calibrazione stampante',
- customColorLabel: 'Colore personalizzato (opzionale)',
- presetColors: 'Colori {{name}}:',
- showLessColors: 'Mostra meno colori',
- showMoreColors: 'Mostra più colori',
- clear: 'Cancella',
- hexLabel: 'Hex – #{{hex}}',
- resetting: 'Ripristino...',
- resetSlot: 'Ripristina slot',
- cancel: 'Annulla',
- configuring: 'Configurazione...',
- configureSlot: 'Configura slot',
- },
- // Git Backup Settings
- githubBackup: {
- title: 'Backup Git',
- history: 'Cronologia',
- downloadBackup: 'Scarica backup',
- restoreBackup: 'Ripristina backup',
- noBackupsYet: 'Nessun backup ancora',
- },
- // Email Settings
- emailSettings: {
- placeholders: {
- fromName: 'Bambuddy',
- },
- },
- // Tag Management Modal
- tagManagement: {
- searchTags: 'Cerca tag...',
- renameTag: 'Rinomina tag',
- deleteTag: 'Elimina tag',
- },
- // Notification Template Editor
- notificationTemplates: {
- placeholders: {
- title: 'Titolo notifica...',
- body: 'Corpo notifica...',
- },
- },
- // Batch Tag Modal
- batchTag: {
- placeholders: {
- newTag: 'Inserisci nuovo tag...',
- },
- },
- // Photo Gallery Modal
- photoGallery: {
- deletePhoto: 'Elimina foto',
- },
- // Filament Hover Card
- filamentHoverCard: {
- copySpoolUuid: 'Copia UUID bobina',
- },
- // K Profiles View
- kProfilesView: {
- hasNote: 'Ha una nota',
- copyProfile: 'Copia profilo',
- },
- // Layout/Navigation
- layout: {
- openMenu: 'Apri menu',
- noPermissionSystemInfo: 'Non hai il permesso di visualizzare le informazioni di sistema',
- },
- // Dashboard
- dashboard: {
- dragToReorder: 'Trascina per riordinare',
- hideWidget: 'Nascondi widget',
- },
- // Notification Provider Card
- notificationProviderCard: {
- deleteNotificationProvider: 'Elimina provider di notifica',
- },
- // File Manager Modal
- fileManagerModal: {
- closeFileManager: 'Chiudi gestore file',
- sortFiles: 'Ordina file',
- goToParentFolder: 'Vai alla cartella superiore',
- threeView: 'Vista 3D',
- },
- // Embedded Camera Viewer
- embeddedCameraViewer: {
- refreshStream: 'Aggiorna stream',
- close: 'Chiudi',
- zoomOut: 'Rimpicciolisci',
- resetZoom: 'Reimposta zoom',
- zoomIn: 'Ingrandisci',
- dragToResize: 'Trascina per ridimensionare',
- },
- // Timelapse Viewer
- timelapseViewer: {
- skipBack5s: 'Indietro 5s',
- skipForward5s: 'Avanti 5s',
- },
- // Notification Providers
- notificationProviders: {
- descriptions: {
- email: 'Notifiche email via SMTP',
- telegram: 'Notifiche tramite bot Telegram',
- discord: 'Invia a canale Discord tramite webhook',
- ntfy: 'Notifiche push gratuite e self-hostabili',
- pushover: 'Notifiche push semplici e affidabili',
- callmebot: 'Notifiche WhatsApp gratuite tramite CallMeBot',
- webhook: 'POST HTTP generico a qualsiasi URL',
- },
- },
- // Log Viewer
- logViewer: {
- searchPlaceholder: 'Cerca messaggio o nome logger...',
- noLogEntries: 'Nessuna voce di log trovata',
- },
- // Switchbar Popover
- switchbarPopover: {
- noSwitchesInSwitchbar: 'Nessun interruttore nella barra',
- },
- // Project Page Modal
- projectPageModal: {
- placeholders: {
- title: 'Titolo',
- designer: 'Designer',
- license: 'Licenza',
- description: 'Inserisci descrizione...',
- profileTitle: 'Titolo profilo',
- profileDescription: 'Descrizione profilo...',
- },
- },
- // Spoolman Settings
- spoolmanSettings: {},
- // Time
- time: {
- unknown: '-',
- waiting: 'In attesa',
- justNow: 'Proprio ora',
- now: 'Ora',
- minsAgo: '{{count}}m fa',
- inMins: 'tra {{count}}m',
- hoursAgo: '{{count}}h fa',
- inHours: 'tra {{count}}h',
- daysAgo: '{{count}}g fa',
- inDays: 'tra {{count}}g',
- },
- // SpoolBuddy Kiosk
- spoolbuddy: {
- nav: {
- dashboard: 'Dashboard',
- ams: 'AMS',
- inventory: 'Inventario',
- writeTag: 'Scrivi',
- settings: 'Impostazioni',
- },
- status: {
- nfcReady: 'NFC pronto',
- nfcOff: 'NFC spento',
- offline: 'Offline',
- online: 'Online',
- noPrinters: 'Nessuna stampante',
- deviceOffline: 'Dispositivo offline',
- waitingConnection: 'In attesa della connessione...',
- systemReady: 'Sistema pronto',
- status: 'Stato',
- },
- dashboard: {
- readyToScan: 'Pronto per la scansione',
- idleMessage: 'Posiziona una bobina sulla bilancia per identificarla',
- nfcHint: 'Il tag NFC verrà letto automaticamente',
- device: 'Dispositivo',
- syncWeight: 'Sincronizza peso',
- weightSynced: 'Sincronizzato!',
- unknownTag: 'Tag sconosciuto',
- newTag: 'Nuovo tag rilevato',
- onScale: 'sulla bilancia',
- linkSpool: 'Collega a bobina',
- linkTagTitle: 'Collega tag a bobina',
- linkTag: 'Collega tag',
- selectSpool: 'Seleziona una bobina da collegare a questo tag:',
- noUntagged: 'Nessuna bobina senza tag trovata',
- tagDetected: 'Tag rilevato',
- noTag: 'Nessun tag',
- tagId: 'Etichetta',
- grossWeight: 'Peso lordo',
- spoolSize: 'Dimensione bobina',
- close: 'Chiudi',
- currentSpool: 'Bobina attuale',
- plateReady: 'Piatto pronto: {{name}}',
- plateReadyLabel: 'Piatti da liberare',
- plateClearAction: 'Libera',
- plateClearedToast: 'Piatto contrassegnato come liberato',
- plateClearFailed: 'Impossibile contrassegnare il piatto come liberato',
- },
- modal: {
- spoolDetected: 'Bobina rilevata',
- assignToAms: 'Assegna all\'AMS',
- syncWeight: 'Sincronizza peso',
- weightSynced: 'Sincronizzato!',
- syncing: 'Sincronizzazione...',
- newTagDetected: 'Nuovo tag rilevato',
- addToInventory: 'Aggiungi all\'inventario',
- assignToAmsTitle: 'Assegna all\'AMS',
- selectSlot: 'Seleziona uno slot',
- assign: 'Assegna',
- assigning: 'Assegnazione...',
- assignSuccess: 'Assegnato!',
- assignPendingInsert: 'Assegnato. Lo slot verrà configurato all\'inserimento della bobina.',
- assignError: 'Impossibile assegnare la bobina. Riprovare.',
- noPrinterSelected: 'Seleziona una stampante...',
- noAmsDetected: 'Nessun AMS rilevato su questa stampante',
- slot: 'Slot',
- },
- weight: {
- noReading: 'Nessuna lettura',
- stable: 'Stabile',
- measuring: 'Misurazione...',
- tare: 'Tara',
- calibrate: 'Calibra',
- },
- spool: {
- remaining: 'Rimanente',
- material: 'Materiale',
- brand: 'Marca',
- color: 'Colore',
- coreWeight: 'Nucleo',
- labelWeight: 'Etichetta',
- scaleWeight: 'Bilancia',
- netWeight: 'Netto',
- lastUsed: 'Ultimo utilizzo',
- unknownColor: 'Colore sconosciuto',
- },
- ams: {
- noData: 'Nessun AMS rilevato',
- connectAms: 'Collega un AMS per vedere gli slot',
- noPrinter: 'Nessuna stampante selezionata',
- selectPrinter: 'Seleziona una stampante dalla barra superiore',
- printerDisconnected: 'Stampante disconnessa',
- humidity: 'Umidità',
- level: 'Livello',
- active: 'Attivo',
- slot: 'Slot',
- empty: 'Vuoto',
- },
- inventory: {
- search: 'Cerca bobine...',
- empty: 'Nessuna bobina nell\'inventario',
- noResults: 'Nessuna bobina corrispondente',
- spools: 'bobine',
- addSpool: 'Aggiungi bobina',
- },
- settings: {
- // Tabs
- tabDevice: 'Dispositivo',
- tabDisplay: 'Display',
- tabScale: 'Bilancia',
- tabUpdates: 'Aggiornamenti',
- // Device tab
- nfcReader: 'Lettore NFC',
- type: 'Tipo',
- connection: 'Connessione',
- notConnected: 'N/D',
- deviceInfo: 'Info dispositivo',
- hostname: 'Host',
- uptime: 'Tempo di attività',
- // Display tab
- brightness: 'Luminosità',
- saved: 'Salvato',
- noBacklight: 'Nessuna retroilluminazione DSI rilevata. Il controllo luminosità richiede un display DSI.',
- screenBlank: 'Timeout spegnimento schermo',
- screenBlankDesc: 'Lo schermo si spegne dopo inattività. Tocca per riattivare.',
- displayNote: 'La luminosità viene applicata come filtro software.',
- // Scale tab
- scaleCalibration: 'Calibrazione bilancia',
- currentWeight: 'Peso attuale',
- tareOffset: 'Tara',
- calFactor: 'Fattore',
- knownWeight: 'Peso noto',
- calStep1: 'Rimuovere tutto dalla bilancia e premere Imposta zero.',
- calStep2: 'Posizionare il peso noto sulla bilancia.',
- setZero: 'Imposta zero',
- calibrateNow: 'Calibra',
- calibrated: 'Calibrato',
- tareSet: 'Comando tara inviato. In attesa del dispositivo...',
- tareComplete: 'Tara completata!',
- tareTimedOut: 'Tempo scaduto per la tara — il demone SpoolBuddy è in esecuzione?',
- tareFailed: 'Invio comando tara fallito',
- zeroSet: 'Punto zero impostato. Posizionare il peso noto sulla bilancia.',
- calibrationDone: 'Calibrazione completata!',
- calibrationFailed: 'Calibrazione fallita',
- lastCalibrated: 'Ultima calibrazione',
- stable: 'Stabile',
- settling: 'Stabilizzazione...',
- firmware: 'Firmware',
- scale: 'Bilancia',
- noDevice: 'Nessun dispositivo SpoolBuddy trovato',
- // Updates tab
- daemonVersion: 'Versione daemon',
- currentVersion: 'Attuale',
- versionPending: 'In attesa del daemon...',
- checking: 'Verifica...',
- checkUpdates: 'Verifica aggiornamenti',
- updateAvailable: 'Aggiornamento disponibile',
- updateInstructions: 'Aggiorna via SSH: esegui lo script di installazione SpoolBuddy.',
- upToDate: 'Aggiornato',
- includeBeta: 'Includi versioni beta',
- systemConfig: 'Backend & autenticazione',
- backendUrl: 'URL backend Bambuddy',
- apiToken: 'Token API',
- apiTokenPlaceholder: 'Inserisci token API',
- saveConfig: 'Salva configurazione',
- systemQueued: 'Configurazione in coda.',
- systemFieldsRequired: 'L\'URL del backend è obbligatorio.',
- nfcDiagnostic: 'Diagnostica NFC',
- scaleDiagnostic: 'Diagnostica bilancia',
- readTagDiagnostic: 'Diagnostica lettura tag',
- testNfc: 'Test lettore',
- testScale: 'Test precisione',
- testReadTag: 'Leggi tag',
- },
- writeTag: {
- tabExisting: 'Bobina esistente',
- tabNew: 'Nuova bobina',
- tabReplace: 'Sostituisci tag',
- searchPlaceholder: 'Cerca per materiale, colore, marca...',
- noUntaggedSpools: 'Nessuna bobina senza tag',
- noTaggedSpools: 'Nessuna bobina con tag',
- selectSpool: 'Seleziona una bobina, poi posiziona un NTAG sul lettore',
- placeTag: 'Posiziona un NTAG sul lettore',
- tagReady: 'Tag rilevato — pronto per la scrittura',
- writeTag: 'Scrivi tag',
- replaceTag: 'Sostituisci tag',
- writing: 'Scrittura tag...',
- waiting: 'In attesa di SpoolBuddy...',
- writeSuccess: 'Tag scritto con successo!',
- writeFailed: 'Scrittura fallita',
- queueFailed: 'Impossibile accodare il comando di scrittura',
- tryAgain: 'Riprova',
- cancel: 'Annulla',
- replaceWarning: 'Il vecchio tag verrà scollegato. Il nuovo tag lo sostituirà.',
- deviceOffline: 'SpoolBuddy è offline',
- material: 'Materiale',
- colorName: 'Nome colore',
- color: 'Colore',
- brand: 'Marca',
- weight: 'Peso (g)',
- createSpool: 'Crea bobina',
- creating: 'Creazione...',
- spoolCreated: 'Bobina creata! Pronto per la scrittura.',
- createFailed: 'Impossibile creare la bobina',
- incompleteDataWarning: 'Tag scritto con dati Spoolman incompleti',
- },
- quickMenu: {
- printerPower: 'Alimentazione stampante',
- systemControls: 'Sistema',
- restartDaemon: 'Riavvia daemon',
- restartBrowser: 'Riavvia browser',
- reboot: 'Riavvia',
- shutdown: 'Spegni',
- swipeToClose: 'Scorri verso il basso per chiudere',
- confirmTitle: 'Conferma',
- confirmShutdown: 'Sei sicuro di voler spegnere lo SpoolBuddy? Avrai bisogno di accesso fisico per riaccenderlo.',
- confirmReboot: 'Sei sicuro di voler riavviare lo SpoolBuddy?',
- confirmRestartDaemon: 'Riavviare il daemon SpoolBuddy? NFC e bilancia saranno temporaneamente non disponibili.',
- confirmRestartBrowser: 'Riavviare il browser kiosk? Lo schermo diventerà brevemente nero.',
- confirm: 'Conferma',
- confirmPlugOn: 'Accendere {{name}}?',
- confirmPlugOff: 'Spegnere {{name}}?',
- turnOn: 'Accendi',
- turnOff: 'Spegni',
- },
- },
- diagnostic: {
- modalTitle: 'Diagnostica connessione — {{name}}',
- running: 'Diagnostica in corso...',
- runningElapsed: 'Diagnostica in corso... ({{elapsed}}s)',
- waitingForReportHint: 'In attesa che la stampante pubblichi un report di stato — può richiedere fino a {{max}} secondi.',
- runFailed: 'Impossibile eseguire la diagnostica: {{error}}',
- retry: 'Esegui di nuovo',
- runButton: 'Esegui diagnostica',
- sectionTitle: 'Diagnostica connessione',
- sectionDescription: 'Verifica perché una stampante non si connette o non stampa — raggiungibilità delle porte, modalità sviluppatore LAN, modalità di rete Docker e credenziali.',
- noPrinters: 'Nessuna stampante configurata.',
- overall: {
- ok: 'Nessun problema rilevato — la connessione della stampante sembra a posto.',
- warnings: 'La stampante dovrebbe funzionare, ma alcuni aspetti richiedono attenzione.',
- problems: 'Sono stati rilevati problemi che spiegano perché la stampante non si connette o non stampa.',
- },
- check: {
- port_mqtt: {
- title: 'Porta di controllo (MQTT 8883)',
- pass: 'Raggiungibile — la stampante accetta connessioni di controllo.',
- fail: 'La porta 8883 non è raggiungibile. La stampante è spenta, ha un altro indirizzo IP oppure un firewall la blocca. Verifica l\'IP della stampante e che nulla blocchi la porta 8883.',
- },
- port_ftps: {
- title: 'Porta trasferimento file (FTPS 990)',
- pass: 'Raggiungibile — l\'invio dei file di stampa funzionerà.',
- warn: 'La porta 990 non è raggiungibile. Il monitoraggio potrebbe ancora funzionare, ma l\'invio delle stampe alla stampante fallirà. Assicurati che la porta 990 non sia bloccata.',
- warn_no_tls: 'La porta 990 è aperta, ma il servizio file della stampante non completa l\'handshake TLS. I file di stampa, le anteprime e i timelapse non possono essere scaricati, quindi gli archivi restano vuoti. Riavvia la stampante — sbloccare la porta non serve.',
- },
- external_storage: {
- title: 'Memorizza file inviati su archiviazione esterna (passo 4 dell\'installazione)',
- pass: 'La stampante segnala che questa opzione è attiva — i file inviati saranno memorizzati sulla scheda SD e gli archivi avranno miniature e metadati dello slicer.',
- fail: 'La stampante segnala che questa opzione è disattivata. Abilita "Memorizza file inviati su archiviazione esterna" — nei firmware recenti (P2S 01.02 / Bambu Studio 2.6+) l\'interruttore si trova nelle Impostazioni di stampa della stampante; nelle versioni precedenti è nella scheda Dispositivo di Bambu Studio / OrcaSlicer. Senza questa opzione, ogni stampa archiviata è priva di miniatura e di metadati dello slicer.',
- skip: 'Non verificato — è necessaria una connessione MQTT attiva. Negli slicer più vecchi dove questa impostazione esiste solo nello slicer, la stampante non la segnala, quindi questo controllo passa anche se l\'opzione è disattivata — verifica manualmente il passo 4 dell\'installazione.',
- skip_unsupported_model: 'Questo modello ha uno slot SD ma nessun modo per attivare l\'opzione — il firmware attuale della serie P1 non mostra l\'interruttore in Bambu Studio e la stampante non ha uno schermo. Non c\'è nulla da correggere qui; alle stampe archiviate potrebbero mancare miniature e metadati dello slicer finché Bambu Lab non aggiungerà il supporto via firmware.',
- fail_no_media: 'L\'opzione è attiva, ma la stampante non rileva né scheda né chiavetta nel suo slot, quindi i file inviati non hanno dove andare. Inseriscine una e stampa di nuovo — fino ad allora ogni stampa archiviata sarà priva di miniatura e metadati dello slicer.',
- warn_internal_storage: 'L\'opzione è attiva ed è presente una memoria, ma l\'ultima stampa è comunque finita nella memoria interna della stampante, che Bambuddy non può leggere. Sulla serie H2, sulla P2S e sulla X2D il pulsante «Stampa» di Bambu Studio invia sempre lì, a prescindere da questa opzione. Le stampe vengono archiviate con nome e tempi, ma senza miniatura né metadati dello slicer. Per archivi completi, avvia le stampe da Bambuddy oppure elabora in OrcaSlicer, oppure in Bambu Studio usa «Invia» con «Esterna» e avvia la stampa dopo.',
- warn_internal_history: 'L\'opzione è attiva e la memoria è presente, ma l\'ultima stampa è partita da un file già presente sulla stampante: una ristampa dal suo schermo, un avvio da Handy o un file inviato prima. Quella libreria si trova nella memoria interna, che Bambuddy non può leggere, e nessuna impostazione lo cambia, perché per quella stampa non è stato inviato nulla. Resta archiviata con nome e tempi, ma senza miniatura né metadati dello slicer. Per archivi completi, avvia le stampe da Bambuddy o inviale dallo slicer.',
- },
- port_rtsps: {
- title: 'Porta fotocamera ({{protocol}} {{port}})',
- pass: 'Raggiungibile — lo streaming della fotocamera funzionerà.',
- warn: 'La porta {{port}} non è raggiungibile. La visualizzazione live della fotocamera non funzionerà. Questo non influisce sulla stampa.',
- },
- macos_local_network: {
- title: 'Autorizzazione « Rete locale » di macOS',
- pass: 'macOS consente a Bambuddy di raggiungere la rete locale.',
- warn_unsigned: 'Il Python che esegue Bambuddy non ha una firma del codice, quindi macOS non ha nulla a cui associare l’autorizzazione « Rete locale » e scarta in silenzio ogni connessione alla stampante, senza errori e senza richiesta. Esegui lo script di aggiornamento di Bambuddy (install/update_macos.sh), che lo firma, poi riavvia Bambuddy. Interprete: {{executable}}',
- warn_permission: 'Se la stampante è accesa e raggiungibile a questo indirizzo, apri Impostazioni di Sistema > Privacy e sicurezza > Rete locale e verifica che il Python di Bambuddy sia abilitato. In caso contrario macOS scarta le connessioni locali in silenzio, e un aggiornamento di Python può lasciare indietro la vecchia autorizzazione.',
- },
- network_mode: {
- title: 'Modalità di rete del container',
- genericRuntime: 'un container',
- pass: 'In esecuzione in {{runtime}} con rete host.',
- warn: 'Bambuddy è in esecuzione in {{runtime}} con rete bridge. Il rilevamento delle stampanti e la stampante virtuale richiedono la modalità di rete host — ricrea il container con rete host ("network_mode: host" in docker-compose, "--network=host" per Podman).',
- skip: 'Non in esecuzione in un container — non applicabile.',
- skip_unknown: 'Bambuddy è in esecuzione in {{runtime}}, ma non è stato possibile determinarne la modalità di rete. Se il rilevamento delle stampanti o la stampante virtuale non funzionano, ricrea il container con rete host.',
- skip_system_container: 'Bambuddy è in esecuzione in un container di sistema {{runtime}}, presente sulla LAN come una macchina virtuale — non applicabile.',
- },
- subnet: {
- title: 'Sottorete',
- pass: 'La stampante e Bambuddy sono nella stessa sottorete.',
- warn: 'La stampante ({{printer_ip}}) e Bambuddy ({{host_ip}}) sono in sottoreti diverse. Potrebbero non raggiungersi a meno che non sia configurato il routing tra le sottoreti.',
- skip: 'Impossibile determinare la sottorete — ignorato.',
- },
- mqtt_auth: {
- title: 'Credenziali stampante',
- pass: 'La stampante ha accettato la connessione.',
- fail: 'La stampante è raggiungibile ma Bambuddy non è connesso ad essa. Il codice di accesso o il numero di serie è molto probabilmente errato — il codice di accesso cambia ogni volta che la modalità Solo LAN o la modalità sviluppatore viene attivata/disattivata, quindi ricopialo dallo schermo della stampante. Una stampante in fase di riavvio, o che ha già raggiunto il limite di connessioni simultanee, appare allo stesso modo.',
- fail_auth_rejected: 'La stampante ha rifiutato le credenziali di Bambuddy. Il codice di accesso o il numero di serie è errato — il codice di accesso cambia ogni volta che la modalità Solo LAN o la modalità sviluppatore viene attivata/disattivata. Ricopialo dallo schermo della stampante e salvalo nelle impostazioni della stampante.',
- skip: 'Non verificato — impossibile raggiungere la stampante.',
- },
- developer_mode: {
- title: 'Modalità sviluppatore LAN',
- pass: 'La modalità sviluppatore è attivata.',
- fail: 'La modalità sviluppatore è DISATTIVATA sulla stampante. Attivala nelle impostazioni LAN della stampante — e conferma con OK. Senza di essa le stampe non verranno avviate.',
- skip: 'Impossibile verificare — richiede una connessione attiva alla stampante.',
- },
- printer_publishing: {
- title: 'La stampante pubblica lo stato',
- pass: 'La stampante sta pubblicando aggiornamenti di stato — AMS, filamenti e profili K saranno correttamente replicati nello slicer.',
- fail: 'Il broker MQTT ha accettato la connessione ma la stampante non ha pubblicato alcun report di stato. È quasi sempre un numero di serie errato o con maiuscole/minuscole sbagliate — il topic device/<serial>/report distingue tra maiuscole e minuscole. Confronta il numero di serie nelle impostazioni della stampante con quello mostrato sullo schermo del dispositivo.',
- skip: 'Impossibile verificare — richiede una connessione attiva alla stampante.',
- },
- },
- },
- systemHealth: {
- sectionTitle: 'Stato del sistema',
- sectionDescription: 'Analizza i log recenti alla ricerca di problemi noti che di solito puoi risolvere da solo, prima che diventino un ticket di assistenza.',
- rescan: 'Analizza di nuovo',
- clean: 'Nessun problema noto trovato nelle ultime {{times}} voci di log.',
- logUnavailable: 'La registrazione su file è disattivata, quindi i log non possono essere analizzati. Attiva la registrazione su file per usare questo controllo.',
- learnMore: 'Come risolvere',
- fixLabel: 'Soluzione:',
- occurrences: 'Visto {{times}}× — ultima volta alle {{lastSeen}}',
- category: {
- layer8: 'Puoi risolverlo tu',
- environment: 'Ambiente',
- bug: 'Segnalalo, per favore',
- },
- signature: {
- 'ftp-auth-rejected': {
- name: 'La stampante ha rifiutato il codice di accesso',
- cause: 'La stampante ha rifiutato l\'accesso per il trasferimento file. Il codice di accesso è errato oppure è cambiato dopo aver attivato la Modalità Sviluppatore.',
- fix: 'Ricopia il codice di accesso dallo schermo della stampante (impostazioni LAN) e aggiornalo nelle impostazioni della stampante in Bambuddy.',
- },
- 'ftp-connection-timeout': {
- name: 'Timeout della connessione di trasferimento file',
- cause: 'Bambuddy non è riuscito a raggiungere la porta di trasferimento file della stampante (FTPS 990). La porta è bloccata, oppure la stampante è spenta o in un\'altra sottorete.',
- fix: 'Assicurati che nulla blocchi la porta 990 tra Bambuddy e la stampante e che entrambi siano sulla stessa rete.',
- },
- 'ftp-ssl-error': {
- name: 'Handshake sicuro del trasferimento file non riuscito',
- cause: 'Il servizio file della stampante ha risposto sulla porta 990 senza TLS. Il suo server file si è bloccato: è un guasto della stampante, non un problema di firewall o firmware.',
- fix: 'Riavvia la stampante. Fino ad allora non è possibile scaricare file di stampa, copertine e timelapse; la stampa in sé non è interessata.',
- },
- 'bambu-cloud-captcha': {
- name: 'Bambu Cloud richiede un CAPTCHA',
- cause: 'Il sistema antiabuso di Bambu sta verificando questa rete, quindi nessun accesso a Bambu Cloud può andare a buon fine. Dipende dall\'indirizzo IP pubblico, non dal tuo account né da questa installazione.',
- fix: 'Attendi: di solito si risolve entro qualche ora e i tentativi ripetuti lo prolungano. Nel frattempo accedi con un token di accesso preso da una sessione del browser.',
- },
- 'mqtt-connection-flapping': {
- name: 'La connessione alla stampante cade di continuo',
- cause: 'La connessione di controllo (MQTT 8883) si disconnette e si riconnette ripetutamente, di solito per una rete debole o una porta parzialmente bloccata.',
- fix: 'Controlla il segnale Wi-Fi vicino alla stampante, preferisci una connessione cablata e assicurati che la porta 8883 sia raggiungibile in modo affidabile.',
- },
- 'camera-connection-refused': {
- name: 'Flusso della telecamera non raggiungibile',
- cause: 'Non è stato possibile raggiungere la telecamera dal vivo sulla porta RTSPS 322. La porta è bloccata, oppure la telecamera o la visione dal vivo via LAN è disattivata sulla stampante.',
- fix: 'Attiva la telecamera e la visione dal vivo via LAN sulla stampante e assicurati che la porta 322 non sia bloccata. Questo non influisce sulla stampa.',
- },
- 'database-locked': {
- name: 'Conflitti di scrittura nel database',
- cause: 'Il database SQLite presenta errori "database is locked" sotto carico, comune quando si usano più stampanti contemporaneamente.',
- fix: 'Passa Bambuddy a un database PostgreSQL esterno. Consulta la guida PostgreSQL nella documentazione.',
- },
- },
- },
- vpDiagnostic: {
- title: 'Controllo configurazione — {{name}}',
- runButton: 'Esegui controllo configurazione',
- running: 'Controllo configurazione in corso...',
- runFailed: 'Impossibile eseguire il controllo della configurazione: {{error}}',
- retry: 'Esegui di nuovo',
- overall: {
- ok: 'Tutti i controlli superati — questa stampante virtuale è configurata correttamente.',
- warnings: 'La stampante virtuale dovrebbe funzionare, ma alcuni aspetti richiedono attenzione.',
- problems: 'Sono stati trovati problemi che spiegano perché lo slicer non riesce a vedere o usare questa stampante virtuale.',
- },
- check: {
- enabled: {
- title: 'Stampante virtuale abilitata',
- fail: 'Questa stampante virtuale è spenta. Attivala per renderla rilevabile.',
- },
- running: {
- title: 'Servizi in esecuzione',
- fail: 'La stampante virtuale è abilitata ma i suoi servizi non sono in esecuzione. Controlla il log di Bambuddy — di solito li ferma un conflitto di IP di binding o un errore di permessi.',
- },
- bind_interface: {
- title: 'Interfaccia di rete di binding',
- fail: 'L\'interfaccia di binding non è impostata o non esiste più su questo host. Scegli un\'interfaccia attuale nel menu "Interfaccia di binding".',
- },
- access_code: {
- title: 'Codice di accesso impostato',
- fail: 'Nessun codice di accesso impostato. Allo slicer deve essere fornito lo stesso codice di accesso di 8 caratteri impostato qui.',
- },
- target_printer: {
- title: 'Stampante di destinazione',
- fail: 'Nessuna stampante di destinazione selezionata. La modalità proxy richiede una stampante reale a cui inoltrare.',
- warn: 'La stampante di destinazione è offline in questo momento — l\'inoltro riprenderà quando si riconnetterà.',
- },
- port_ftps: {
- title: 'Servizio di caricamento file (porta {{port}})',
- fail: 'Nulla è in ascolto sulla porta {{port}} dell\'IP di binding, quindi lo slicer non può caricare i file. La causa abituale è un conflitto di porta su questa interfaccia.',
- },
- port_mqtt: {
- title: 'Servizio di controllo (porta {{port}})',
- fail: 'Nulla è in ascolto sulla porta {{port}} dell\'IP di binding, quindi lo slicer non può connettersi o mostrare lo stato.',
- },
- port_bind: {
- title: 'Servizio di rilevamento (porta {{port}})',
- fail: 'Nulla è in ascolto sulla porta {{port}} dell\'IP di binding, quindi l\'handshake di rilevamento dello slicer fallisce.',
- },
- privileged_ports: {
- title: 'Binding sulle porte privilegiate',
- fail: 'La porta {{port}} è sotto 1024 e questo servizio non è autorizzato ad associarla: per questo sopra non risulta nulla in ascolto. Aggiungi AmbientCapabilities=CAP_NET_BIND_SERVICE in /etc/systemd/system/bambuddy.service e riavvia, oppure esegui "sudo setcap cap_net_bind_service=+ep $(readlink -f $(which python3))". Con Docker aggiungi cap_add: [NET_BIND_SERVICE].',
- },
- certificate: {
- title: 'Certificato TLS',
- pass: 'Certificato pronto. Assicurati che il certificato CA di Bambuddy (sopra) sia importato nell\'archivio attendibile del tuo slicer.',
- fail: 'Il certificato TLS per questa stampante virtuale è mancante. Verifica che la directory dei dati di Bambuddy sia scrivibile.',
- },
- },
- },
- bugReport: {
- logHealthSummary: 'Trovati problemi noti nei tuoi log',
- logHealthIntro: 'I log recenti corrispondono a problemi noti. Controlla le soluzioni qui sotto: risolverle potrebbe sistemare il problema senza una segnalazione di bug. Puoi comunque inviare una segnalazione qui sotto.',
- title: 'Segnala un bug',
- description: 'Descrizione',
- descriptionPlaceholder: 'Cosa è andato storto? Descrivi il problema...',
- email: 'Email (opzionale)',
- emailPlaceholder: 'tua@email.it',
- emailPrivacy: 'Se fornita, la tua email sarà inclusa in una sezione compressa dell\'issue GitHub per permettere al manutentore di contattarti.',
- screenshot: 'Schermata',
- uploadOrPaste: 'Carica, incolla o trascina un\'immagine',
- dataCollectedSummary: 'Quali dati sono inclusi nel report?',
- dataIncluded: 'Inclusi:',
- dataIncludedList: 'Versione app, OS, architettura, versione Python, statistiche database (solo conteggi), modelli stampante, numero ugelli, versioni firmware, stato connessione, stato integrazioni (Spoolman, MQTT, HA), impostazioni non sensibili, conteggio interfacce di rete, dettagli Docker, versioni dipendenze.',
- dataNeverIncluded: 'Mai inclusi:',
- dataNeverIncludedList: 'Nomi stampanti, numeri di serie, codici di accesso, password, indirizzi IP, indirizzi email, chiavi API, token, URL webhook, nomi host o nomi utente.',
- submit: 'Invia',
- startLogging: 'Avvia registrazione debug',
- stepEnableLogging: 'Registrazione debug attivata',
- stepReproduce: 'Riproduci il problema ora',
- stepStopLogging: 'Ferma & invia rapporto',
- stopAndSubmit: 'Ferma & Invia',
- maxDuration: 'Arresto automatico dopo {{minutes}} min',
- stoppingLogs: 'Raccolta log & invio...',
- submitting: 'Invio segnalazione bug...',
- submittingStepConnection: 'Controlli di connettività delle stampanti in corso',
- submittingStepVirtualPrinters: 'Controlli di configurazione delle stampanti virtuali in corso',
- submittingStepLogScan: 'Analisi dei log recenti per problemi noti',
- submittingStepSubmit: 'Invio del report a GitHub',
- submitSuccess: 'Segnalazione bug inviata con successo!',
- submitFailed: 'Impossibile inviare la segnalazione bug',
- diagnosticChecking: 'Verifica delle connessioni delle stampanti...',
- diagnosticHealthy: 'Verifica della connessione superata — nessun problema rilevato sulle tue stampanti.',
- diagnosticSummary: '{{problems}} stampanti su {{total}} hanno problemi di connessione',
- diagnosticIntro: 'Una o più stampanti hanno un problema di connessione che potrebbe essere la causa del tuo problema. Espandi una stampante qui sotto per vedere la soluzione — risolverla potrebbe sistemare il problema senza una segnalazione di bug. Puoi comunque inviare una segnalazione qui sotto.',
- thankYou: 'Grazie!',
- submitted: 'La tua segnalazione bug è stata inviata.',
- viewIssue: 'Vedi issue',
- closeKeepsRecording: 'Puoi chiudere questo pannello mentre riproduci il problema: la registrazione continua e riaprendolo tornerai qui.',
- resumeRecording: 'Segnalazione in registrazione — {{elapsed}}. Fai clic per completare.',
- resumeReport: 'Riprendi segnalazione',
- unexpectedError: 'Si è verificato un errore imprevisto',
- },
- failureDetection: {
- title: 'Rilevamento guasti con IA',
- description: 'Monitora le stampe tramite un\'API ML Obico auto-ospitata e agisce automaticamente sui guasti rilevati.',
- mlUrl: 'URL API ML Obico',
- mlUrlHint: 'URL base del tuo container Obico ml_api auto-ospitato (es. http://192.168.1.10:3333).',
- mlToken: 'Token API ML (facoltativo)',
- mlTokenPlaceholder: 'Lascia vuoto se il server funziona senza ML_API_TOKEN',
- mlTokenHint: 'Deve corrispondere alla variabile di ambiente ML_API_TOKEN del tuo container Obico ml_api. Lascia vuoto se il container funziona senza token.',
- test: 'Prova',
- testSuccess: 'API ML raggiungibile e funzionante.',
- testSuccessTokenUnknown: 'API ML raggiungibile e funzionante. Non è stato possibile verificare il token.',
- testFailed: 'Impossibile raggiungere l\'API ML.',
- sensitivity: 'Sensibilità',
- sensitivityLow: 'Bassa (meno falsi positivi)',
- sensitivityMedium: 'Media (bilanciata)',
- sensitivityHigh: 'Alta (rilevamento precoce, più falsi positivi)',
- sensitivityHint: 'Regola le soglie di confidenza che attivano avvisi e guasti.',
- action: 'Azione al guasto rilevato',
- actionNotify: 'Solo notifica',
- actionPause: 'Metti in pausa',
- actionPauseOff: 'Pausa e stacca corrente',
- pollInterval: 'Intervallo di controllo (secondi)',
- pollIntervalHint: 'Frequenza di controllo di ogni stampante durante la stampa. Minimo 5s, massimo 120s.',
- externalUrlMissing: 'URL esterno non impostato.',
- externalUrlHint: 'L\'API ML recupera l\'istantanea della telecamera tramite URL. Imposta l\'URL esterno nelle impostazioni generali in modo che il container API ML possa raggiungere Bambuddy.',
- perPrinterTitle: 'Stampanti monitorate',
- perPrinterHint: 'Scegli quali stampanti il servizio di rilevamento deve monitorare.',
- monitorAll: 'Monitora tutte le stampanti connesse',
- statusTitle: 'Stato',
- serviceRunning: 'Servizio in esecuzione',
- thresholds: 'Soglie bassa / alta',
- activePrinters: 'Stampe attive',
- noActivePrints: 'Nessuna stampa in corso.',
- historyTitle: 'Rilevamenti recenti',
- noHistory: 'Nessun rilevamento finora.',
- },
- makerworld: {
- title: 'MakerWorld',
- description: 'Incolla un URL di un modello MakerWorld per importarlo e stamparlo direttamente da Bambuddy — senza passare dall\'app Bambu Handy.',
- pasteUrlHeader: 'Importa da MakerWorld',
- pasteUrlPlaceholder: 'https://makerworld.com/en/models/… o incolla qualsiasi link MakerWorld',
- resolveButton: 'Risolvi',
- signInRequiredTitle: 'Accesso Bambu Cloud richiesto per scaricare',
- signInRequiredBody: 'Puoi consultare i dettagli del modello in modo anonimo, ma MakerWorld richiede un account Bambu Cloud per scaricare i file 3MF.',
- signInExpiredTitle: 'Accesso a Bambu Cloud scaduto',
- signInExpiredBody: 'Hai ancora effettuato l\'accesso a Bambuddy, ma Bambu Lab non accetta più il token salvato, quindi i download non riusciranno. Accedi di nuovo a Bambu Cloud.',
- openCloudSettings: 'Apri impostazioni Cloud',
- untitledModel: 'Modello senza titolo',
- byCreator: 'di {{name}}',
- downloadsCount: '{{count}} download',
- licensePrefix: 'Licenza',
- alreadyImported: 'Già nella libreria',
- openOnMakerworld: 'Apri su MakerWorld',
- alreadyInLibrary: 'Questo modello è già nella tua libreria — lo trovi in Gestione file → MakerWorld',
- importSuccess: '{{filename}} importato — salvato in Gestione file → MakerWorld',
- platesHeader: 'Piatti ({{count}})',
- plateDefaultName: 'Piatto {{n}}',
- materialCount: '{{count}} filamenti',
- amsRequired: 'AMS richiesto',
- slicedFor: 'Sezionato per {{printer}}',
- alsoCompatible: 'Anche contrassegnato come compatibile: {{printers}}',
- importToLibrary: 'Salva',
- sliceIn: 'Salva e affetta in {{slicer}}',
- disclaimer: 'L\'integrazione MakerWorld utilizza endpoint API documentati dalla community. Bambuddy non è affiliato né approvato da MakerWorld o Bambu Lab.',
- lastImportSuccess: 'Importato nella tua libreria',
- lastImportAlreadyInLibrary: 'Già nella tua libreria',
- viewInLibrary: 'Visualizza in Gestione file',
- openInBambuStudio: 'Apri in Bambu Studio',
- openInOrcaSlicer: 'Apri in OrcaSlicer',
- importTo: 'Importa in Gestione file',
- recentImportsHeader: 'Importazioni recenti',
- phaseResolving: 'Risoluzione',
- phaseDownloading: 'Download',
- folderAuto: 'MakerWorld (predefinita)',
- importAll: 'Importa tutto',
- importAllProgress: 'Importazione {{current}}/{{total}}',
- openGallery: 'Apri galleria immagini',
- galleryPrev: 'Immagine precedente',
- galleryNext: 'Immagine successiva',
- deleteImport: 'Rimuovi dalla libreria',
- importDeleting: 'Rimozione…',
- importDeleted: 'Rimosso dalla libreria',
- confirmDelete: 'Rimuovere {{filename}} dalla libreria? Il file locale verrà eliminato, ma il piatto può essere re-importato da MakerWorld.',
- errors: {
- resolveFailed: 'Impossibile risolvere questo URL MakerWorld.',
- downloadFailed: 'Download non riuscito. Riprova.',
- deleteFailed: 'Impossibile rimuovere il file dalla libreria.',
- },
- },
- gcodeViewer: {
- filamentSlot: 'Filamento {{n}}',
- loading: 'Lettura del percorso…',
- loadFailed: 'Impossibile caricare il G-code di questo file.',
- showTravel: 'Spostamenti a vuoto',
- topLayer: 'Strato superiore',
- bottomLayer: 'Strato inferiore',
- noSource: 'Nessun file da visualizzare è stato indicato.',
- view: {
- filament: 'Filamento',
- feature: 'Elemento',
- height: 'Altezza',
- width: 'Larghezza',
- },
- feature: {
- wall: 'Pareti',
- sparseInfill: 'Riempimento rado',
- solidInfill: 'Riempimento solido',
- bridge: 'Ponte / sbalzo',
- support: 'Supporto',
- skirt: 'Skirt / brim',
- gapFill: 'Riempimento vuoti',
- ironing: 'Stiratura',
- primeTower: 'Torre di spurgo',
- },
- back: 'Indietro',
- backToArchives: 'Torna agli archivi di stampa',
- backToFiles: 'Torna al gestore file',
- plates: 'Piastre',
- plateN: 'Piastra {{n}}',
- },
- libraryTrash: {
- title: 'Cestino',
- headerButton: 'Cestino',
- headerTooltip: 'Visualizza i file spostati nel cestino',
- backToFiles: 'Torna al gestore file',
- subtitleAdmin: 'I file eliminati restano qui per {{days}} giorni, poi vengono rimossi automaticamente. Questa vista mostra il cestino di tutti gli utenti.',
- subtitleUser: 'I file eliminati restano qui per {{days}} giorni, poi vengono rimossi automaticamente.',
- loading: 'Caricamento del cestino…',
- loadError: 'Impossibile caricare il cestino.',
- empty: 'Il cestino è vuoto.',
- summary: '{{count}} file · {{size}}',
- emptyTrash: 'Svuota cestino',
- restore: 'Ripristina',
- purgeNow: 'Elimina ora',
- autoPurgeIn: 'Eliminazione automatica tra {{when}}',
- days: 'giorni',
- retentionLabel: 'Elimina automaticamente dopo',
- selectAll: 'Seleziona tutto',
- selectOne: 'Seleziona {{filename}}',
- selectionCount: '{{count}} selezionati',
- bulkRestore: 'Ripristina selezionati',
- bulkPurge: 'Elimina selezionati',
- col: {
- filename: 'File',
- folder: 'Cartella',
- size: 'Dimensione',
- deleted: 'Spostato nel cestino',
- autoPurge: 'Eliminazione auto.',
- owner: 'Proprietario',
- actions: 'Azioni',
- },
- confirm: {
- purgeTitle: 'Eliminare definitivamente?',
- purgeBody: '{{filename}} verrà eliminato dal disco e non potrà essere ripristinato.',
- emptyTitle: 'Svuotare il cestino?',
- emptyBody: 'Tutti i {{count}} file verranno eliminati dal disco. Azione non annullabile.',
- bulkPurgeTitle: 'Eliminare definitivamente i file selezionati?',
- bulkPurgeBody: 'I {{count}} file selezionati verranno eliminati dal disco e non potranno essere ripristinati.',
- cta: 'Elimina definitivamente',
- },
- toast: {
- restored: 'File ripristinato.',
- restoreFailed: 'Impossibile ripristinare il file.',
- purged: 'File eliminato definitivamente.',
- purgeFailed: 'Impossibile eliminare il file.',
- emptied: '{{count}} file eliminati dal cestino.',
- emptyFailed: 'Impossibile svuotare il cestino.',
- retentionSaved: 'Eliminazione automatica impostata su {{days}} giorni.',
- retentionFailed: 'Impossibile salvare l\'impostazione di conservazione.',
- bulkRestored: '{{count}} file ripristinati.',
- bulkPurged: '{{count}} file eliminati.',
- },
- },
- libraryPurge: {
- title: 'Elimina file vecchi',
- headerButton: 'Elimina vecchi',
- headerTooltip: 'Sposta in blocco i file vecchi nel cestino',
- description: 'I file più vecchi della soglia verranno spostati nel cestino. Le cartelle esterne vengono ignorate. Puoi ripristinarli dal cestino prima dell\'eliminazione automatica.',
- ageLabel: 'Sposta i file più vecchi di',
- days: 'giorni',
- includeNeverPrinted: 'Includi i file mai stampati',
- effectsTitle: 'Cosa succede quando fai clic su Pulisci',
- effect1: 'I file corrispondenti vengono spostati nel cestino — non sono ancora eliminati dal disco.',
- effect2: 'Puoi ripristinarli dal cestino in qualsiasi momento fino alla scadenza del periodo di conservazione.',
- effect3: 'Dopo il periodo di conservazione, lo spazzino del cestino li rimuove definitivamente.',
- effect4: 'I file in cartelle esterne (collegate) vengono saltati — Bambuddy non elimina mai dati che non possiede.', previewLoading: 'Verifica quanti file corrispondono…',
- previewFailed: 'Impossibile mostrare l\'anteprima.',
- previewSummary: '{{count}} file · {{size}} verrebbero spostati nel cestino',
- andMore: '…e altri {{count}}',
- warning: 'I file vengono eliminati in modo soft — puoi ripristinarli dal cestino fino alla scadenza del periodo di conservazione.',
- confirmCta: 'Sposta {{count}} nel cestino',
- purging: 'Spostamento nel cestino…',
- toast: {
- success: '{{count}} file spostati nel cestino.',
- failed: 'Impossibile eliminare i file.',
- },
- },
- libraryAutoPurge: {
- enableLabel: 'Elimina automaticamente i file vecchi',
- enableDescription: 'Esegue l\'eliminazione amministrativa una volta al giorno. I file finiscono prima nel cestino — non vengono eliminati immediatamente.',
- ageLabel: 'Elimina automaticamente i file più vecchi di',
- ageDescription: 'Minimo 7 giorni, massimo 10 anni. Usa la stessa regola di età del pulsante Elimina manuale.',
- days: 'giorni',
- includeNeverPrinted: 'Includi i file mai stampati',
- saveFailed: 'Impossibile salvare le impostazioni di eliminazione automatica.',
- },
- archivePurge: {
- headerButton: 'Elimina vecchi',
- headerTooltip: 'Eliminazione massiva vecchi archivi',
- title: 'Elimina vecchi archivi',
- description: 'Cancella la vecchia cronologia di stampa. Ogni archivio invecchia in base alla sua ultima stampa completata — ristampare azzera l\'età, quindi il lavoro attivo non viene mai eliminato.',
- ageLabel: 'Elimina archivi non stampati negli ultimi',
- days: 'giorni',
- effectsTitle: 'Cosa succede quando fai clic su Pulisci',
- effect1: 'Ogni archivio corrispondente viene nascosto dagli elenchi e i suoi file vengono rimossi dal disco (3MF, miniatura, timelapse, 3MF sorgente, F3D, foto).',
- effect2: 'La riga dell\'archivio rimane nel database, così le Quick Stats conservano il contributo di filamento, tempo, costo ed energia — come il comportamento predefinito dell\'eliminazione singola.',
- effect3: 'Spunta «Rimuovi anche dalle statistiche» qui sotto per eliminare anche il contributo dalle Quick Stats (equivalente all\'opzione dell\'eliminazione singola). Questo percorso è irreversibile.',
- effect4: 'Ristampare un archivio azzera il suo conteggio dell\'età, quindi gli archivi attivi sono al sicuro.',
- purgeStatsLabel: 'Rimuovi anche dalle statistiche',
- purgeStatsHint: 'Rimuove gli archivi selezionati dalle Quick Stats (filamento, tempo, costo, energia). Senza questa opzione le Quick Stats conservano ogni contributo e solo i file vengono cancellati.',
- previewLoading: 'Verifica del numero di archivi corrispondenti…',
- previewFailed: 'Impossibile visualizzare l\'anteprima della pulizia.',
- previewSummary: '{{count}} archivi · {{size}} verrebbero rimossi',
- andMore: '…e altri {{count}}',
- warning: 'I file vengono rimossi dal disco e non possono essere ripristinati. Scarica o aggiungi ai preferiti tutto ciò che vuoi conservare prima di continuare.',
- confirmCta: 'Rimuovi {{count}} archivio(i)',
- purging: 'Rimozione…',
- toast: {
- success: '{{count}} archivio(i) rimosso.',
- failed: 'Impossibile eliminare gli archivi.',
- },
- },
- archiveAutoPurge: {
- enableLabel: 'Elimina auto. vecchi archivi',
- enableDescription: 'Una volta al giorno nasconde dagli elenchi gli archivi non stampati entro la soglia e rimuove i loro file dal disco. Ristampare azzera il timer.',
- ageLabel: 'Eliminazione auto. di archivi non stampati negli ultimi',
- ageDescription: 'Minimo 7 giorni, massimo 10 anni. Basato sull\'ultima stampa completata — ristampare azzera l\'età. Rimuove 3MF, miniatura, timelapse, 3MF sorgente, F3D e foto.',
- days: 'giorni',
- purgeStatsLabel: 'Rimuovi anche dalle statistiche',
- purgeStatsDescription: 'Quando abilitato, lo sweeper giornaliero elimina anche il contributo di ogni archivio purgato dalle Quick Stats (filamento, tempo, costo, energia). Disabilitato per impostazione predefinita — le Quick Stats mantengono il contributo e solo i file vengono cancellati.',
- runNow: 'Elimina archivi ora',
- saveFailed: 'Impossibile salvare le impostazioni di pulizia automatica.',
- },
- cameraTokens: {
- scope: {
- camera_stream: 'Flusso della telecamera',
- camwall: 'Muro telecamere',
- overlay: 'Overlay di streaming',
- },
- title: 'Token API telecamera',
- navTitle: 'Token API telecamera',
- description:
- "Token di lunga durata per incorporare il flusso della telecamera in Home Assistant, Frigate, schermi in modalità chiosco o qualsiasi altro strumento che richieda un indirizzo stabile. L'ambito si sceglie alla creazione; un token può essere revocato in qualsiasi momento.",
- loading: 'Caricamento…',
- confirmRevoke: {
- title: 'Revocare questo token?',
- body: 'Qualsiasi dispositivo che usa "{{name}}" perderà l\'accesso immediatamente. Non può essere annullato.',
- cancel: 'Annulla',
- confirm: 'Revoca',
- },
- create: {
- scopeLabel: 'Ambito',
- hintCameraStream:
- 'Un token del flusso della telecamera può recuperare soltanto flussi e istantanee. Usalo per Home Assistant, Frigate o qualsiasi cosa incorpori una singola telecamera.',
- hintCamWall:
- 'Un token Muro telecamere apre /camwall su uno schermo senza login. Vede nome e stato di ogni stampante e i relativi flussi della telecamera. Non vede nomi di file, indirizzi o codici di accesso.',
- hintOverlay:
- 'Un token Overlay di streaming apre /overlay/{printerId} su uno schermo senza login, per OBS o qualsiasi diretta streaming. Vede il flusso della telecamera di una stampante e il suo stato di stampa in tempo reale, incluso il nome del file mostrato sullo schermo. Non vede indirizzi o codici di accesso.',
- title: 'Crea nuovo token',
- nameLabel: 'Nome token',
- namePlaceholder: 'es. Home Assistant',
- daysLabel: 'Giorni alla scadenza',
- submit: 'Crea',
- hint:
- 'Durata massima 365 giorni. Il valore del token viene mostrato solo alla creazione — copialo ora.',
- },
- created: {
- camWallUrlTitle: 'Indirizzo del muro telecamere per questo schermo',
- camWallUrlHint:
- 'Apri questo indirizzo sullo schermo. Chiunque possa leggerlo può guardare il muro, quindi trattalo come una chiave: revoca il token per escludere lo schermo.',
- overlayUrlTitle: 'Indirizzo overlay per OBS',
- overlayUrlHint:
- "Aggiungi questo come Sorgente browser in OBS. Cambia il numero in /overlay/1 con il numero della tua stampante (dall'indirizzo nella pagina Stampanti). Chiunque possa leggere l'indirizzo può guardare lo streaming, quindi trattalo come una chiave: revoca il token per interrompere l'accesso.",
- title: 'Token creato – copialo ora',
- warning:
- 'Questa è l\'unica volta in cui questo token sarà visibile. Dopo la chiusura di questa finestra non potrai più visualizzarlo.',
- copy: 'Copia',
- dismiss: 'L\'ho salvato',
- },
- list: {
- scope: 'Ambito',
- myTitle: 'I miei token',
- allTitle: 'Tutti gli utenti (vista admin)',
- empty: 'Nessun token ancora.',
- name: 'Nome',
- owner: 'Proprietario',
- prefix: 'Prefisso',
- created: 'Creato',
- expires: 'Scade',
- lastUsed: 'Ultimo uso',
- revoke: 'Revoca',
- expired: 'Scaduto',
- },
- toast: {
- created: 'Token creato',
- createFailed: 'Creazione token fallita',
- revoked: 'Token revocato',
- revokeFailed: 'Revoca token fallita',
- loadFailed: 'Caricamento token fallito',
- copied: 'Copiato negli appunti',
- copyFailed: 'Copia non riuscita – seleziona e copia manualmente',
- },
- },
- // Forecast & Inventory Intelligence
- forecast: {
- title: 'Previsione scorte',
- noSpools: 'Nessuna bobina attiva trovata. Aggiungi bobine al tuo inventario per vedere i dati di previsione.',
- noUsageData: 'Nessun dato di utilizzo disponibile — impossibile proiettare la timeline delle scorte.',
- sku: 'SKU',
- // Table headers
- material: 'Materiale',
- stock: 'Scorte',
- dailyRate: 'Tasso',
- daysLeft: 'Giorni rimanenti',
- emptyBy: 'Esaurimento previsto',
- reorderBy: 'Riordinare entro',
- actions: 'Azioni',
- // Rate tier badges
- trend: 'Tendenza',
- estimated: 'Stim.',
- noData: 'Nessun dato',
- // Timeframe
- timeframe: 'Periodo',
- // Chart
- chartTitle: 'Stock proiettato — Top 5 materiali',
- dashedLinesROP: 'Linee tratteggiate = punti di riordino',
- stockLevel: 'Livello scorte',
- reorderPoint: 'Punto di riordino',
- safetyMargin: 'Margine di sicurezza',
- trendLegend: 'Tendenza (basata su storico, livello servizio 95%)',
- estimatedLegend: 'Stimata (delta peso)',
- noDataLegend: 'Nessun dato',
- ropLabel: 'PR',
- ssLabel: 'SS',
- safetyStockLegend: 'Scorta di sicurezza',
- stockArrivalLegend: 'Arrivo merce',
- stockoutLegend: 'Esaurimento scorte',
- // Alerts toolbar
- alertCount_one: '{{count}} avviso',
- alertCount_other: '{{count}} avvisi',
- order: 'Ordina',
- // Settings
- globalLeadTime: 'Lead time globale',
- globalLeadTimeHint: 'Lead time globale minimo — usato nel calcolo del punto di riordino per tutti gli SKU',
- save: 'Salva',
- cancel: 'Annulla',
- settingsSaved: 'Impostazioni salvate',
- failedSaveSettings: 'Impossibile salvare le impostazioni',
- globalLeadTimeSaved: 'Lead time globale salvato',
- skuLeadTimeOverride: 'Override lead time SKU',
- skuLeadTimeHint: '0 = usa lead time globale. Imposta >0 per sovrascrivere per questo SKU.',
- safetyMarginLabel: 'Margine di sicurezza',
- effectiveLeadTime: 'Lead time effettivo',
- effectiveLeadTimeHint: 'max(globale {{global}}g, SKU {{sku}}g)',
- reorderPointHint: 'd̄ × LT + safety margin — ordina quando le scorte raggiungono questo livello',
- safetyMarginHint: 'Scorta di sicurezza statistica (z=1,65 × σ × √LT) + buffer definito dall\'utente',
- safetyMarginHintDays: 'Buffer aggiunto sulla scorta di sicurezza statistica.{{approx}}',
- safetyMarginHintDaysApprox: ' ≈ {{g}}g al tasso attuale.',
- safetyMarginHintG: 'Buffer di peso fisso aggiunto sulla scorta di sicurezza statistica.{{approx}}',
- safetyMarginHintGApprox: ' ≈ {{days}}g al tasso attuale.',
- individualSpools: 'Bobine singole',
- labelWeight: 'Etichetta',
- spoolCount_one: '{{count}} bobina',
- spoolCount_other: '{{count}} bobine',
- // Alerts
- stockBreakRisk: 'Rischio di rottura scorte',
- stockBreakBefore: 'Rottura scorte prima del rifornimento',
- stockBreakDetail: '{{days}}g rimanenti, lead time {{lt}}g.',
- reorderNow: 'Riordina ora',
- reorderTriggerPassed: 'La data di attivazione {{date}} è passata.',
- // Shopping list
- shoppingList: 'Lista della spesa',
- shoppingListItems_one: '({{count}} articolo)',
- shoppingListItems_other: '({{count}} articoli)',
- shoppingListEmpty: 'La lista della spesa è vuota. Clicca sull\'icona del carrello in qualsiasi riga per aggiungere articoli.',
- addToCart: 'Aggiungi alla lista della spesa',
- alertsSnoozed: 'Silenzia avvisi per questo SKU',
- alertsEnabled: 'Riattiva avvisi per questo SKU',
- addedToCart: 'Aggiunto alla lista della spesa',
- failedAddItem: 'Impossibile aggiungere l\'articolo',
- listView: 'Lista',
- logisticsView: 'Logistica',
- qty: 'Qtà',
- weight: 'Peso',
- leadTime: 'Lead time',
- expectedRestock: 'Rifornimento previsto',
- status: 'Stato',
- note: 'Nota',
- pending: 'In attesa',
- purchased: 'Acquistato',
- received: 'Ricevuto',
- markPurchased: 'Segna come acquistato',
- markReceived: 'Segna come ricevuto — aggiunge bobine all\'inventario',
- resetToPending: 'Ripristina in attesa',
- remove: 'Rimuovi',
- clearAll: 'Cancella tutto',
- downloadCsv: 'CSV',
- // Add to cart modal
- addToCartTitle: 'Aggiungi alla lista della spesa',
- byQuantity: 'Per quantità',
- byDuration: 'Per durata',
- numberOfSpools: 'Numero di bobine',
- lastHowManyDays: 'Per quanti giorni deve durare?',
- noUsageQty: 'Nessun dato di utilizzo — quantità impostata a 1.',
- noteOptional: 'Nota (opzionale)',
- notePlaceholder: 'es. per il progetto X, urgente…',
- addNSpools_one: 'Aggiungi {{count}} bobina',
- addNSpools_other: 'Aggiungi {{count}} bobine',
- // Cart logistics
- onArrival: 'All\'arrivo',
- stockBreakIn: 'Rottura scorte tra {{days}}g.',
- stockRunsOutBefore: 'Le scorte si esauriscono prima dello scadere del lead time di {{lt}}g.',
- atRate: 'A {{rate}}g/giorno hai bisogno di',
- moreSpools_one: '{{count}} bobina in più',
- moreSpools_other: '{{count}} bobine in più',
- bridgeGap: 'per colmare il divario.',
- // Permissions
- noReadAccess: 'Non hai il permesso di visualizzare le previsioni di inventario.',
- noWriteAccess: 'Non hai il permesso di modificare le impostazioni di previsione.',
- },
- };
|