| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209 |
- export default {
- nav: {
- printers: "Принтеры",
- archives: "Архив",
- queue: "Очередь печати",
- stats: "Статистика",
- profiles: "Профили",
- maintenance: "Обслуживание",
- projects: "Проекты",
- inventory: "Филамент",
- finance: "Финансы",
- files: "Файловый менеджер",
- makerworld: "MakerWorld",
- notifications: "Уведомления",
- settings: "Настройки",
- system: "Система",
- collapseSidebar: "Свернуть боковую панель",
- expandSidebar: "Развернуть боковую панель",
- update: "Обновить",
- updateAvailable: "Доступно обновление: v{{version}}",
- updateAvailableBanner: "Доступна версия {{version}}!",
- viewUpdate: "Посмотреть обновление",
- viewOnGithub: "Открыть на GitHub",
- keyboardShortcuts: "Горячие клавиши (?)",
- switchToLight: "Включить светлую тему",
- switchToDark: "Включить тёмную тему",
- switchToSystem: "Использовать системную тему",
- smartSwitches: "Умные выключатели",
- logout: "Выйти",
- installApp: "Установить приложение",
- installAppSuccess: "Bambuddy установлен",
- },
- common: {
- plusNMore: 'ещё {{count}}',
- save: "Сохранить",
- saving: "Сохранение...",
- cancel: "Отмена",
- delete: "Удалить",
- edit: "Изменить",
- add: "Добавить",
- close: "Закрыть",
- confirm: "Подтвердить",
- loading: "Загрузка...",
- error: "Ошибка",
- errorLoading: "Не удалось загрузить данные",
- retry: "Повторить",
- success: "Готово",
- warning: "Предупреждение",
- enabled: "Включено",
- disabled: "Отключено",
- yes: "Да",
- no: "Нет",
- on: "Вкл.",
- off: "Выкл.",
- all: "Все",
- none: "Нет",
- search: "Поиск",
- filter: "Фильтр",
- sort: "Сортировка",
- refresh: "Обновить",
- download: "Скачать",
- upload: "Загрузить",
- uploading: "Загрузка...",
- uploadFailed: "Ошибка загрузки",
- actions: "Действия",
- status: "Состояние",
- name: "Название",
- description: "Описание",
- date: "Дата",
- time: "Время",
- hours: "часов",
- minutes: "минут",
- seconds: "секунд",
- days: "дней",
- enable: "Включить",
- disable: "Отключить",
- permissions: "Разрешения",
- noPrinters: "Принтеры не настроены",
- noData: "Нет данных",
- linkNotFound: "Ссылка не найдена",
- required: "Обязательно",
- optional: "Необязательно",
- dismiss: "Закрыть",
- apply: "Применить",
- reset: "Сбросить",
- export: "Экспорт",
- import: "Импорт",
- clear: "Очистить",
- selectAll: "Выбрать все",
- deselectAll: "Снять выделение",
- noChange: "— Без изменений —",
- unchanged: "Без изменений",
- unassigned: "Не назначено",
- unknown: "Неизвестно",
- unknownError: "Неизвестная ошибка",
- today: "Сегодня",
- tomorrow: "Завтра",
- asap: "Как можно скорее",
- overdue: "Просрочено",
- now: "Сейчас",
- collapse: "Свернуть",
- expand: "Развернуть",
- previous: "Назад",
- next: "Далее",
- viewArchive: "Открыть архив",
- viewInFileManager: "Открыть в файловом менеджере",
- addedBy: "Добавил: {{username}}",
- prints: "печатей",
- more: "ещё +{{count}}",
- ascending: "По возрастанию",
- descending: "По убыванию",
- back: "Назад",
- copy: "Копировать",
- copied: "Скопировано!",
- printer: "Принтер",
- remove: "Удалить",
- type: "Тип",
- print: "Печать",
- rename: "Переименовать",
- move: "Переместить",
- create: "Создать",
- duplicate: "Дублировать",
- left: "Левый",
- right: "Правый",
- user: "Пользователь",
- run: "Запустить",
- running: "Выполняется...",
- },
- finance: {
- allTypes: "Все типы",
- allCostCenters: "Все центры затрат",
- title: "Финансы",
- subtitle: "Кошелёк, личные операции и центры затрат",
- noAccess: "У вас нет разрешения на просмотр финансовых данных.",
- personalView: "Личный режим",
- adminView: "Режим администратора",
- createCostCenter: "Создать центр затрат",
- adjustWallet: "Изменить кошелёк",
- addManualPrint: "Добавить печать вручную",
- manageMembers: "Управление участниками центра затрат",
- currentBalance: "Личный баланс",
- transactions: "Операции",
- personalTransactions: "Личные операции",
- costCenters: "Центры затрат",
- availableForPrinting: "Доступен для назначения печати",
- costCenterName: "Название",
- budgetType: "Тип бюджета",
- monthlyBudget: "Месячный бюджет",
- totalBudget: "Общий бюджет",
- noBudget: "Без бюджета",
- create: "Создать",
- selectUser: "Выберите пользователя",
- transactionType: "Тип",
- amount: "Сумма",
- noCostCenter: "Без центра затрат",
- descriptionOptional: "Описание (необязательно)",
- applyAdjustment: "Применить изменение",
- memberCanPrint: "Участник может печатать",
- addMember: "Добавить участника",
- canPrint: "Может печатать",
- noMembers: "Участники не назначены.",
- editCostCenter: "Изменить центр затрат",
- myCostCenters: "Мои центры затрат",
- costCentersHint: "Проверяйте бюджетные лимиты и контролируйте расходы",
- noCostCenters: "Центры затрат не найдены.",
- owner: "Владелец",
- balance: "Баланс счёта",
- unlimited: "Без ограничений",
- budgetPolicyHint: "Баланс счёта используется для учёта затрат. Печать ограничивается только бюджетом выбранного центра затрат; без бюджета ограничений нет.",
- budget: "Бюджет",
- shared: "Общий",
- cannotEditPrivateCostCenter: "Личные центры затрат нельзя редактировать здесь",
- recentTransactions: "Недавние операции",
- transactionsHint: "Фильтр по типу и центру затрат",
- first: "Первая",
- prev: "Предыдущая",
- next: "Следующая",
- last: "Последняя",
- pageNumberOf: "Страница {{page}} из {{total}}",
- noTransactions: "Нет доступных операций.",
- noTransactionsForFilter: "Нет операций, соответствующих выбранным фильтрам.",
- costCenter: "Центр затрат",
- balanceAfter: "Баланс после операции",
- userWithId: "Пользователь №{{id}}",
- partial: "Частично",
- editTransaction: "Изменить операцию",
- selectCostCenter: "Выберите центр затрат...",
- costCenterRequired: "Выберите центр затрат",
- amountExample: "например, 4,00",
- manualAdjustmentExample: "например, ручная корректировка",
- userRequired: "Выберите пользователя",
- amountInvalid: "Сумма должна быть допустимым числом",
- createdCostCenter: "Центр затрат создан",
- createCostCenterFailed: "Не удалось создать центр затрат",
- transactionDeleted: "Операция удалена",
- deleteTransactionFailed: "Не удалось удалить операцию",
- transactionEdited: "Операция обновлена, бухгалтерская книга пересчитана",
- editTransactionFailed: "Не удалось изменить операцию",
- manualPrintCreated: "Расход на печать добавлен, бухгалтерская книга пересчитана",
- manualPrintFailed: "Не удалось добавить печать вручную",
- memberSaved: "Участник сохранён",
- memberSaveFailed: "Не удалось сохранить участника",
- memberRemoved: "Участник удалён",
- memberRemoveFailed: "Не удалось удалить участника",
- costCenterNameRequired: "Необходимо указать название центра затрат",
- costCenterUpdated: "Центр затрат обновлён",
- costCenterUpdateFailed: "Не удалось обновить центр затрат",
- confirmDeleteCostCenter: "Удалить центр затрат «{{name}}»?",
- costCenterDeleted: "Центр затрат удалён",
- costCenterDeleteFailed: "Не удалось удалить центр затрат",
- deleteTransactionConfirm: "Удалить эту операцию? Балансы будут пересчитаны автоматически.",
- deposit: "Пополнение",
- withdraw: "Списание",
- printCharge: "Расход на печать",
- deleteTransaction: "Удалить операцию",
- },
- printers: {
- title: "Принтеры",
- addPrinter: "Добавить принтер",
- addPreflight: {
- checking: "Проверка подключения...",
- warning: "Некоторые проверки подключения не пройдены. Принтер может отображаться как отключённый. Проверьте результаты ниже, исправьте возможные проблемы или сохраните настройки как есть.",
- back: "Назад",
- saveAnyway: "Всё равно сохранить",
- },
- editPrinter: "Изменить принтер",
- deletePrinter: "Удалить принтер",
- printerName: "Название принтера",
- serialNumber: "Серийный номер",
- ipAddress: "IP-адрес / имя хоста",
- accessCode: "Код доступа",
- model: "Модель",
- nozzleCount: "Количество сопел",
- autoArchive: "Автоматически архивировать",
- status: {
- available: "Доступен",
- idle: "Ожидает",
- printing: "Печать",
- paused: "Приостановлен",
- offline: "Не в сети",
- problem: "Проблема",
- error: "Ошибка",
- finished: "Завершено",
- unknown: "Неизвестно",
- },
- temperatures: {
- nozzle: "Сопло",
- bed: "Стол",
- chamber: "Камера",
- },
- heaterHistory: {
- title: "История нагрева",
- openLabel: "Открыть историю нагрева",
- nozzle: "Сопло",
- nozzle2: "Сопло 2",
- bed: "Стол",
- chamber: "Камера",
- error: "Не удалось загрузить историю",
- empty: "Данные пока не записывались",
- },
- progress: "Выполнено {{percent}}%",
- timeRemaining: "Осталось {{time}}",
- deleteConfirm: "Удалить принтер «{{name}}»?",
- maintenanceOk: "Обслуживание в норме",
- maintenanceWarning: "{{count}} предупреждение",
- maintenanceWarning_plural: "{{count}} предупреждений",
- maintenanceDue: "Требуется: {{count}}",
- maintenanceDue_plural: "Требуется: {{count}}",
- sort: {
- name: "Название",
- status: "Состояние",
- model: "Модель",
- location: "Расположение",
- eta: "Время завершения",
- ascending: "По возрастанию",
- descending: "По убыванию",
- },
- cardSize: {
- small: "Маленькие карточки",
- medium: "Средние карточки",
- large: "Большие карточки",
- extraLarge: "Очень большие карточки",
- },
- pageView: {
- openCamWallPage: "Открыть стену камер как отдельную страницу",
- cards: "Карточки",
- camWall: "Стена камер",
- },
- camWall: {
- page: {
- tokenRejected: "Эта ссылка на стену камер больше недействительна. Возможно, срок действия токена истёк или он был отозван.",
- loadFailed: "Не удалось загрузить принтеры.",
- },
- noPrinters: "Нет принтеров для отображения",
- noSignal: "Нет сигнала",
- live: "Онлайн",
- snap: "Снимок",
- off: "Выкл.",
- summary: "Онлайн: {{live}}, снимки: {{snap}}, всего: {{total}}",
- layer: "Слой {{cur}}/{{total}}",
- timeLeft: "Осталось {{time}}",
- statusMode: {
- off: "Выкл.",
- compact: "Компактный",
- full: "Полный",
- },
- settings: {
- title: "Настройки стены камер",
- maxLive: "Максимум онлайн-трансляций",
- maxLiveHint: "Сколько камер одновременно показывать в реальном времени. Остальные будут обновляться снимками.",
- snapshotInterval: "Интервал снимков, с",
- snapshotIntervalHint: "Как часто обновлять снимки камер без онлайн-трансляции.",
- statusOverlay: "Наложение состояния",
- statusOverlayHint: "Компактный режим: только состояние. Полный: прогресс, слой и оставшееся время.",
- },
- },
- hideOffline: "Скрыть принтеры не в сети",
- nextAvailable: "Ближайший доступный",
- powerOn: "Включить питание",
- offlinePrintersWithPlugs: "Принтеры не в сети с умными розетками",
- noPrintersConfigured: "Принтеры пока не настроены",
- search: "Поиск принтеров...",
- noSearchResults: "Нет принтеров, соответствующих поиску или фильтрам",
- filter: {
- allStatuses: "Все состояния",
- allLocations: "Все расположения",
- },
- toolbar: {
- filters: "Фильтры",
- view: "Вид",
- actions: "Действия",
- },
- readyToPrint: "Готов к печати",
- external: "Внешняя подача",
- extL: "Внешняя, левое",
- extR: "Внешняя, правое",
- deleteArchives: "Удалить архивы печати",
- noLabel: "Без метки",
- printPreview: "Предпросмотр печати",
- width: "Ширина",
- height: "Высота",
- noObjectsFound: "Объекты не найдены",
- objectsLoadedOnPrintStart: "Объекты загрузятся после начала печати",
- willBeSkipped: "Будет пропущен",
- name: "Название",
- serialCannotBeChanged: "Серийный номер нельзя изменить",
- locationHelp: "Используется для группировки принтеров и фильтрации заданий в очереди",
- wifiSignal: {
- veryWeak: "Очень слабый",
- weak: "Слабый",
- fair: "Средний",
- good: "Хороший",
- excellent: "Отличный",
- },
- maintenanceUpToDate: "Обслуживание выполнено — нажмите для просмотра",
- maintenance: {
- title: "На обслуживании",
- subtitle: "Принтер приостановлен: подключение отключено, задания из очереди не назначаются, уведомления не отправляются.",
- pillLabel: "Обслуживание",
- exitButton: "Завершить обслуживание",
- menuEnter: "Перевести в режим обслуживания",
- menuExit: "Выйти из режима обслуживания",
- toastEntered: "Принтер {{name}} переведён в режим обслуживания",
- toastExited: "Принтер {{name}} снова в работе",
- confirmMidPrintTitle: "Перевести в режим обслуживания во время печати?",
- confirmMidPrintMessage: "Принтер {{name}} сейчас печатает. Режим обслуживания отключит MQTT, отслеживание прогресса и уведомление о завершении этого задания. Продолжить?",
- editFieldLabel: "Режим обслуживания",
- editFieldHelp: "Отключает для принтера MQTT, назначение заданий из очереди и уведомления. Используйте при ремонте, параллельных установках Bambuddy или временной приостановке.",
- },
- chamberLightOn: "Включить подсветку камеры",
- chamberLightOff: "Выключить подсветку камеры",
- files: "Файлы",
- browseFiles: "Открыть файлы принтера",
- autoOffAfterPrint: "Автовыключение после печати",
- autoOffExecuted: "Автовыключение выполнено — включите принтер для сброса состояния",
- hmsErrors: "Ошибки HMS",
- viewHmsErrors: "Показать ошибки HMS: {{count}}",
- resume: "Продолжить",
- pause: "Пауза",
- stop: "Стоп",
- camera: "Камера",
- skipObject: "Пропустить объект",
- reconnect: "Переподключить",
- forceRefresh: "Принудительно обновить",
- forceRefreshSuccess: "Запрошено обновление данных",
- mqttDebug: "Отладка MQTT",
- printerInformation: "Информация о принтере",
- copyToClipboard: "Копировать",
- copied: "Скопировано!",
- state: "Состояние",
- wifiSignalLabel: "Сигнал Wi‑Fi",
- developerMode: "Режим разработчика",
- enabled: "Включён",
- disabled: "Отключён",
- addedOn: "Добавлен",
- sdCard: "SD-карта",
- inserted: "Установлена",
- notInserted: "Не установлена",
- totalPrintHours: "Часов печати",
- activeNozzle: "Активное сопло: {{nozzle}}",
- amsSwitchInletTooltip: "Переключатель тракта филамента IN-{{inlet}} ({{side}}) — подаёт на оба сопла",
- nozzleRack: "Держатель сопел",
- nozzleDocked: "В держателе",
- nozzleMounted: "Установлено",
- nozzleActive: "Активно",
- nozzleIdle: "Ожидание",
- nozzleDiameter: "Диаметр",
- nozzleType: "Тип",
- nozzleStatus: "Состояние",
- nozzleFilament: "Филамент",
- nozzleWear: "Износ",
- nozzleMaxTemp: "Макс. температура",
- nozzleSerial: "Серийный номер",
- nozzleHardenedSteel: "Закалённая сталь",
- nozzleStainlessSteel: "Нержавеющая сталь",
- nozzleTungstenCarbide: "Карбид вольфрама",
- nozzleFlow: "Производительность",
- nozzleHighFlow: "Высокопоточное",
- nozzleStandardFlow: "Стандартное",
- firmwareUpdate: "Обновление прошивки",
- firmwareInstructions: "На сенсорном экране принтера откройте",
- firmwareNav: "Перейдите в раздел",
- settings: "Настройки",
- firmware: "Прошивка",
- discoverPrinters: "Найти принтеры",
- searching: "Поиск...",
- manualEntry: "Добавить вручную",
- addFromCloud: "Добавить из облака",
- toast: {
- printerDeleted: "Принтер удалён",
- missingSpoolAssignment: "На принтере {{printer}} началась печать. Не назначены катушки для слотов: {{slots}}",
- killSwitchTriggered: 'Аварийный выключатель биллинга остановил несанкционированную печать на {{printer}}: {{filename}}',
- billingChargeFailed: 'Не удалось начислить стоимость {{filename}} на {{printer}}. Резерв бюджета сохранён; проверьте журналы сервера.',
- assignmentVerified: "Филамент загружен в слот {{slot}} ({{printer}})",
- assignmentVerifiedNoKprofile: "Слот {{slot}} на {{printer}} загружен, но профиль калибровки потока (K-профиль) не применён",
- assignmentNotConfirmed: "Не удалось подтвердить назначение слота {{slot}} на {{printer}} — проверьте слот AMS",
- printerAdded: "Принтер добавлен",
- printerUpdated: "Настройки принтера обновлены",
- failedToDelete: "Не удалось удалить принтер",
- failedToAdd: "Не удалось добавить принтер",
- connectionFailedNotAdded: "Не удалось подключиться к принтеру. Проверьте IP-адрес, серийный номер и код доступа, а также убедитесь, что включён режим «Только локальная сеть». Принтер не добавлен.",
- failedToUpdate: "Не удалось обновить настройки принтера",
- commandSent: "Команда отправлена",
- failedToSendCommand: "Не удалось отправить команду",
- turnedOn: "Питание {{name}} включено",
- failedToPowerOn: "Не удалось включить {{name}}",
- scriptTriggered: "Сценарий запущен",
- printStopped: "Печать остановлена",
- printPaused: "Печать приостановлена",
- printResumed: "Печать продолжена",
- referenceDeleted: "Эталон удалён",
- detectionAreaSaved: "Область обнаружения сохранена",
- failedToRunScript: "Не удалось запустить сценарий",
- failedToStopPrint: "Не удалось остановить печать",
- failedToPausePrint: "Не удалось приостановить печать",
- failedToResumePrint: "Не удалось продолжить печать",
- failedToControlChamberLight: "Не удалось изменить состояние подсветки камеры",
- failedToSetSpeed: "Не удалось изменить скорость печати",
- failedToUpdateSetting: "Не удалось изменить настройку",
- failedToSkipObjects: "Не удалось пропустить объекты",
- failedToRereadRfid: "Не удалось повторно считать RFID",
- failedToCheckPlate: "Не удалось проверить пластину",
- failedToUpdateLabel: "Не удалось обновить метку",
- failedToDeleteReference: "Не удалось удалить эталон",
- failedToSaveDetectionArea: "Не удалось сохранить область обнаружения",
- plateCheckEnabled: "Проверка пластины включена",
- plateCheckDisabled: "Проверка пластины отключена",
- calibrationSaved: "Калибровка сохранена",
- calibrationFailed: "Не удалось выполнить калибровку",
- rfidRereadInitiated: "Запущено повторное считывание RFID",
- loadInitiated: "Загрузка филамента…",
- unloadInitiated: "Выгрузка филамента…",
- failedToLoad: "Не удалось загрузить филамент",
- failedToUnload: "Не удалось выгрузить филамент",
- },
- connection: {
- connected: "Подключён",
- offline: "Не в сети",
- },
- plateStatus: {
- markCleared: "Отметить пластину как очищенную",
- cleared: "Пластина очищена",
- notCleared: "Пластина не очищена",
- inUse: "Пластина используется",
- },
- queue: {
- inQueue: "В очереди: {{count}} задание",
- inQueue_plural: "В очереди: {{count}} заданий",
- },
- controls: "Управление",
- rfid: {
- reread: "Повторно считать RFID",
- },
- ams: {
- load: "Загрузить",
- unload: "Выгрузить",
- feedTitle: "В какое сопло загрузить {{slot}}?",
- feedPrompt: "Filament Track Switch может направить этот слот в любой из хотэндов. Выберите, в какой подавать.",
- feedLeft: "Левое сопло",
- feedRight: "Правое сопло",
- feedAlreadyLoaded: "Уже загружено",
- switchNotReady: "Filament Track Switch ещё не настроен. Назначьте каждой AMS вход на принтере и повторите попытку.",
- },
- bedJog: {
- limitWarning: "При ручном перемещении ограничения хода не контролируются: из-за ошибки прошивки Bambu программные концевики игнорируются для удалённых команд. Перемещайте осторожно, чтобы избежать столкновения.",
- title: "Ручное перемещение",
- bed: "Стол",
- step: "Шаг (мм)",
- up: "Поднять стол",
- down: "Опустить стол",
- disabledWhilePrinting: "Недоступно во время печати",
- notHomedTitle: "Принтер не выполнил парковку по осям",
- notHomedMessage: "После последней печати принтер не выполнял Home. Сначала запустите автоматическую парковку для безопасного позиционирования (парковка печатающей головы и поиск нуля по X, Y и Z) либо продолжите перемещение — программные концевики будут отключены.",
- homeZ: "Автопарковка",
- moveAnyway: "Всё равно переместить",
- homingStarted: "Выполняется автопарковка…",
- },
- permission: {
- noAdd: "У вас нет разрешения на добавление принтеров",
- noEdit: "У вас нет разрешения на изменение принтеров",
- noDelete: "У вас нет разрешения на удаление принтеров",
- noControl: "У вас нет разрешения на управление принтерами",
- noFiles: "У вас нет разрешения на доступ к файлам принтера",
- noAmsRfid: "У вас нет разрешения на повторное считывание RFID AMS",
- noSmartPlugControl: "У вас нет разрешения на управление умными розетками",
- noCamera: "У вас нет разрешения на просмотр камер",
- },
- modal: {
- addTitle: "Добавить принтер",
- editTitle: "Изменить принтер",
- myPrinter: "Мой принтер",
- selectModel: "Выберите модель…",
- locationGroup: "Расположение / группа (необязательно)",
- locationPlaceholder: "например: Мастерская, Офис, Подвал",
- autoArchiveLabel: "Автоматически архивировать завершённые печати",
- fromPrinterSettings: "Из настроек принтера",
- modelOptional: "Модель (необязательно)",
- saveChanges: "Сохранить изменения",
- },
- skipObjects: {
- tooltip: "Пропустить объекты",
- onlyWhilePrinting: "Пропуск объектов доступен только во время печати",
- requiresMultiple: "Для пропуска требуется не менее двух объектов",
- title: "Пропустить объекты",
- matchIdsInfo: "Сопоставьте идентификаторы с экраном принтера",
- printerShowsIds: "На экране принтера отображаются идентификаторы объектов на пластине",
- skipSelected: "Пропустить выбранные",
- skipping: "Пропуск…",
- noObjectsSelected: "Объекты не выбраны",
- selectObjectsToSkip: "Выберите объекты, которые нужно исключить из текущей печати",
- skipped: "пропущен",
- objectsSkipped: "Объекты пропущены",
- activeCount: "Активно: {{count}}",
- waitForLayer: "Пропуск объектов доступен со второго слоя (сейчас слой {{layer}})",
- skip: "Пропустить",
- confirmTitle: "Пропустить объект?",
- confirmMessage: "Пропустить объект «{{name}}»? Это действие нельзя отменить.",
- confirmAllMessage: "Выбраны все оставшиеся объекты. Это остановит задание печати. Продолжить?",
- confirmMultipleMessage: "Пропустить выбранные объекты ({{count}})? Это действие нельзя отменить.",
- },
- confirm: {
- deleteTitle: "Удалить принтер",
- deleteMessage: "Удалить принтер «{{name}}»? Все параметры подключения будут удалены.",
- deleteArchivesNote: "Вся история печати этого принтера будет удалена безвозвратно.",
- keepArchivesNote: "История печати сохранится, но больше не будет связана с этим принтером.",
- stopTitle: "Остановить печать",
- stopMessage: "Остановить текущую печать на принтере «{{name}}»? Задание будет отменено.",
- stopButton: "Остановить печать",
- pauseTitle: "Приостановить печать",
- pauseMessage: "Приостановить текущую печать на принтере «{{name}}»?",
- pauseButton: "Приостановить печать",
- resumeTitle: "Продолжить печать",
- resumeMessage: "Продолжить печать на принтере «{{name}}»?",
- resumeButton: "Продолжить печать",
- powerOnTitle: "Включить принтер",
- powerOnMessage: "Включить питание принтера «{{name}}»?",
- powerOnButton: "Включить питание",
- powerOffTitle: "Выключить принтер",
- powerOffMessage: "Выключить питание принтера «{{name}}»?",
- powerOffWarning: "ВНИМАНИЕ: принтер «{{name}}» сейчас печатает. Выключение питания прервёт печать и может повредить принтер. Продолжить?",
- powerOffButton: "Выключить питание",
- haToggleTitle: "Переключить «{{name}}»",
- haToggleMessage: "Переключить сущность Home Assistant {{entity}}? Если она сейчас включена, питание может отключиться.",
- haToggleWarning: "ВНИМАНИЕ: принтер «{{name}}» сейчас печатает. Переключение {{entity}} может отключить питание и прервать печать. Продолжить?",
- haToggleButton: "Переключить",
- },
- bulk: {
- select: "Выбрать",
- selectAll: "Выбрать все",
- selectByLocation: "Выбрать по расположению",
- selected: "Выбрано: {{count}}",
- actions: {
- stop: "Стоп",
- pause: "Пауза",
- resume: "Продолжить",
- clearPlate: "Освободить стол",
- clearHMS: "Очистить уведомления",
- },
- confirm: {
- stopTitle: "Остановить печати: {{count}}",
- stopMessage: "Активные печати на {{count}} принтерах будут отменены. Это действие нельзя отменить.",
- stopButton: "Остановить все",
- pauseTitle: "Приостановить печати: {{count}}",
- pauseMessage: "Активные печати на {{count}} принтерах будут приостановлены.",
- pauseButton: "Приостановить все",
- clearPlateTitle: "Освободить столы: {{count}}",
- clearPlateMessage: "Столы на {{count}} принтерах будут отмечены как свободные; после этого могут запуститься задания из очереди.",
- clearPlateButton: "Освободить все",
- },
- success: "Действие «{{action}}» выполнено на {{count}} принтерах",
- partial: "Успешно: {{succeeded}}, с ошибкой: {{failed}}",
- noneApplicable: "Ни один из выбранных принтеров не находится в подходящем состоянии",
- selectByState: "Выбрать по состоянию",
- },
- discovery: {
- title: "Поиск принтеров",
- searching: "Поиск…",
- scanning: "Сканирование…",
- scanProgress: "Сканирование: {{scanned}}/{{total}}",
- foundPrinters: "Найдено принтеров: {{count}}",
- noPrintersFound: "Принтеры не найдены",
- noPrintersFoundSubnet: "В указанной подсети принтеры не найдены.",
- noPrintersFoundNetwork: "Принтеры в сети не найдены.",
- allConfigured: "Все найденные принтеры уже настроены.",
- alreadyAdded: "Уже добавлен",
- select: "Выбрать",
- manualEntry: "Добавить вручную",
- addFromCloud: "Добавить из облака",
- subnetToScan: "Подсеть для сканирования",
- dockerNote: "Обнаружен Docker. Укажите подсеть принтера в формате CIDR. В docker-compose.yml требуется network_mode: host.",
- scanSubnet: "Сканировать подсеть",
- discoverNetwork: "Найти принтеры в сети",
- scanningSubnet: "Поиск принтеров Bambu в подсети…",
- scanningNetwork: "Сканирование сети…",
- serialRequired: "Требуется серийный номер",
- unknown: "Неизвестно",
- failedToStart: "Не удалось запустить поиск",
- customSubnetOption: "Другая подсеть…",
- customSubnetLabel: "Другая подсеть (CIDR)",
- customSubnetNote: "Используйте другую подсеть, если принтер находится в иной сети. Порты FTP (990) и MQTT (8883) должны быть доступны через маршрутизатор.",
- },
- drying: {
- start: "Начать сушку",
- stop: "Остановить сушку",
- temperature: "Температура",
- duration: "Продолжительность",
- hours: "ч",
- timeRemaining: "осталось {{time}}",
- active: "Сушка",
- targetSummary: "{{filament}} при {{temp}} °C",
- notSupported: "Сушка не поддерживается",
- powerRequired: "Подключите адаптер питания AMS, чтобы включить сушку",
- cannotDryNow: "AMS сейчас не может начать сушку",
- startingDrying: "Запуск сушки...",
- toastCommandSent: "Команда сушки отправлена",
- toastStopped: "Сушка остановлена",
- toastNotStarted: "Принтер принял команду, но AMS не начал сушку. Убедитесь, что адаптер питания AMS подключён, а принтер не занят.",
- screenOnly: "На этом принтере управлять сушкой AMS можно только с экрана самого принтера (ограничение Bambu)",
- stoppingDrying: "Остановка сушки...",
- rotateTray: "Вращать катушку во время сушки",
- rotateUnavailableReason: "Недоступно: слот этого AMS сейчас подаёт филамент в печатающую головку. Катушка зафиксирована подающей трубкой и не может вращаться. Сначала выгрузите филамент.",
- startMode: "Время начала",
- modeNow: "Сейчас",
- modeDelay: "После задержки",
- modeAtTime: "По времени",
- schedule: "Запланировать",
- scheduledFor: "Сушка запланирована на {{time}}",
- scheduledAsap: "Сушка запланирована (ожидание принтера)",
- cancelScheduled: "Отменить запланированную сушку",
- scheduleFailed: "Не удалось запланировать сушку",
- retractFilament: "Извлеките филамент из выхода AMS, чтобы начать сушку",
- waitingAmsNotFound: "Ожидание обнаружения AMS",
- waitingOffline: "Ожидание подключения принтера",
- waitingPrinterBusy: "Ожидание освобождения принтера",
- waitingAlreadyDrying: "Ожидание завершения текущего цикла сушки",
- waitingInterrupted: "Прервано, возобновится, когда принтер освободится",
- scheduleFailedReason: "Не удалось выполнить запланированную сушку: {{reason}}",
- scheduleFailedUnknown: "Неизвестная ошибка",
- dismissFailed: "Скрыть",
- },
- amsBackup: {
- titleOn: "Резервный филамент AMS включён. Нажмите, чтобы отключить.",
- titleOff: "Резервный филамент AMS выключен. Нажмите, чтобы включить.",
- titleUnknown: "Состояние резервного филамента AMS недоступно для этого принтера.",
- toastEnabled: "Резервный филамент AMS включён",
- toastDisabled: "Резервный филамент AMS отключён",
- modalTitle: "Резервный филамент AMS",
- modalHelp: "Когда активный слот опустеет, принтер по очереди использует подходящие слоты с тем же профилем и цветом в указанном порядке.",
- modalNoSlots: "Филамент не загружен.",
- modalNoPairs: "Резервных пар нет: ни у двух слотов не совпадают профиль филамента и цвет.",
- extruderRightShort: "П",
- extruderLeftShort: "Л",
- stateOn: "Включено",
- stateOff: "Отключено",
- stateUnknown: "Не поддерживается этим принтером",
- },
- activeJobSlot: {
- title: "Этот слот используется как филамент {{n}} в текущей печати",
- ariaLabel: "Слот {{n}} текущей печати",
- },
- expectedSlot: {
- title: "Принтер ожидает филамент в этом слоте",
- ariaLabel: "Ожидаемый слот филамента {{n}}",
- label: "{{ams}} · Слот {{slot}}",
- external: "Внешняя катушка",
- },
- filaments: "Филаменты",
- externalSpool: {
- hide: "Скрыть внешнюю катушку",
- show: "Показать внешнюю катушку",
- },
- openCameraOverlay: "Открыть камеру поверх интерфейса",
- openCameraWindow: "Открыть камеру в новом окне",
- firmwareUpdateAvailable: "Доступно обновление прошивки: {{current}} → {{latest}}",
- firmwareUpToDate: "Прошивка {{version}} — актуальная версия",
- firmwareUpdateButton: "Обновить",
- plateDetection: {
- noPermission: "У вас нет прав на изменение настроек принтера",
- enabledClick: "Проверка пластины включена — нажмите, чтобы отключить",
- disabledClick: "Проверка пластины отключена — нажмите, чтобы включить",
- manageCalibration: "Управление калибровкой проверки пластины",
- calibrationRequired: "Требуется калибровка",
- calibrationInstructions: "Убедитесь, что печатная пластина <strong>полностью пустая</strong>, затем нажмите «Калибровать».",
- calibrationDescription: "При калибровке сохраняется эталонное изображение пустой пластины. При последующих проверках система сравнивает снимок с эталоном и обнаруживает посторонние объекты.",
- calibrationTip: "<strong>Совет:</strong> можно сохранить до 5 калибровок для разных пластин. При проверке система автоматически выберет наиболее подходящий эталон.",
- plateEmpty: "Пластина выглядит пустой",
- objectsDetected: "На пластине обнаружены объекты",
- confidence: "Уверенность",
- difference: "Различие",
- analysisPreview: "Предпросмотр анализа:",
- analysisLegend: "Зелёная рамка — область обнаружения, красная заливка — отличия от калибровочного снимка",
- savedReferences: "Сохранённые эталоны ({{count}}/{{max}})",
- deleteReference: "Удалить эталон",
- labelPlaceholder: "Метка...",
- clickToEdit: "{{label}} — нажмите для изменения",
- clickToAddLabel: "Нажмите, чтобы добавить метку",
- },
- speed: {
- title: "Скорость печати",
- silent: "Тихий (50%)",
- standard: "Стандартный (100%)",
- sport: "Спортивный (124%)",
- ludicrous: "Безумный (166%)",
- },
- airduct: {
- title: "Режим воздуховода",
- cooling: "Охлаждение",
- heating: "Нагрев",
- },
- noSdCard: "Нет SD-карты",
- door: {
- open: "Открыта",
- closed: "Закрыта",
- },
- fans: {
- partCooling: "Вентилятор обдува модели",
- auxiliary: "Дополнительный вентилятор",
- leftAuxiliary: "Левый дополнительный вентилятор",
- exhaust: "Вытяжка",
- chamber: "Вентилятор камеры",
- },
- clickToViewHmsErrors: "Нажмите, чтобы посмотреть ошибки HMS",
- aiDetection: {
- safe: "Безопасно",
- warning: "Предупреждение",
- failure: "Сбой",
- idle: "Ожидает",
- error: "Не проверяется",
- unknown: "Запуск",
- tooltipError: "Обнаружение сбоев с помощью ИИ не проверяет эту печать: {{reason}} - нажмите для подробностей",
- tooltipUnknown: "Обнаружение сбоев с помощью ИИ: ожидание первого результата - нажмите для подробностей",
- errorHint: "Эта печать не проверяется. Обнаружение возобновится автоматически после устранения проблемы, указанной ниже.",
- tooltip: "Обнаружение сбоев с помощью ИИ: {{status}} (оценка {{score}}) - нажмите для подробностей",
- tooltipIdle: "Обнаружение сбоев с помощью ИИ включено - мониторинг начнётся со следующей печати - нажмите для подробностей",
- modalTitle: "Обнаружение сбоев с помощью ИИ - {{name}}",
- currentStatus: "Статус",
- score: "Оценка",
- framesAnalyzed: "Проанализировано кадров",
- idleHint: "Сейчас ни одна печать не отслеживается. Мониторинг начнётся автоматически со следующей печати.",
- lastError: "Последняя ошибка",
- openSettings: "Открыть настройки",
- },
- estimatedCompletion: "Расчётное время завершения",
- plateNumber: "Пластина {{number}}",
- slotOptions: "Параметры слота",
- amsPopup: {
- friendlyName: "Имя AMS",
- friendlyNamePlaceholder: "Например, левый AMS",
- serialNumber: "Серийный номер",
- firmwareVersion: "Прошивка",
- save: "Сохранить",
- clear: "Очистить",
- noEditPermission: "У вас нет прав на переименование модулей AMS",
- },
- firmwareModal: {
- title: "Обновление прошивки",
- titleUpToDate: "Сведения о прошивке",
- currentVersion: "Текущая:",
- latestVersion: "Последняя:",
- releaseNotes: "Примечания к выпуску",
- checkingPrereqs: "Проверка условий...",
- sdCardReady: "SD-карта готова. Нажмите ниже, чтобы загрузить прошивку.",
- uploadedSuccess: "Прошивка загружена на SD-карту!",
- applyInstructions: "Чтобы установить обновление на принтер:",
- step1: "На экране принтера откройте <strong>Настройки</strong>",
- step2: "Перейдите в раздел <strong>Прошивка</strong>",
- step3: "Выберите <strong>Обновить с SD-карты</strong>",
- step4: "Обновление займёт 10–20 минут",
- done: "Готово",
- starting: "Запуск...",
- uploadFirmware: "Загрузить прошивку",
- uploadFailed: "Не удалось начать загрузку: {{error}}",
- uploadedToast: "Прошивка загружена. Запустите обновление с экрана принтера.",
- availableVersions: "Доступные версии",
- usable: "Доступна",
- unavailable: "Недоступна",
- installed: "Установлена",
- newerBadge: "новее",
- olderBadge: "старее",
- currentBadge: "текущая",
- },
- accessCodePlaceholder: "Оставьте пустым, чтобы сохранить текущий",
- roi: {
- title: "Область обнаружения (ROI)",
- xStart: "Начало X",
- yStart: "Начало Y",
- width: "Ширина",
- height: "Высота",
- instruction: "Настройте область обнаружения так, чтобы она охватывала печатную пластину. Зелёная рамка в предпросмотре показывает текущую область.",
- },
- developerModeWarning: "Режим LAN для разработчиков не включён на: {{names}}. Некоторые функции могут не работать.",
- howToEnable: "Как включить",
- incompatibleFile: "Файл подготовлен для {{slicedFor}}, а выбранный принтер — {{printerModel}}",
- dropNotPrintable: "Для печати подходят только файлы .gcode и .gcode.3mf",
- dropToPrint: "Перетащите файл для печати",
- dropToQueue: "Перетащите файл в очередь",
- },
- archives: {
- media: {
- title: 'Видео печати',
- download: 'Скачать видео печати',
- searching: 'Поиск видео на принтере…',
- searchFailed: 'Не удалось проверить видео на принтере.',
- none: 'Для этой печати не найдены таймлапсы или фрагменты IP-камеры.',
- attachedTimelapse: 'Прикреплённый таймлапс',
- printerFiles: 'Файлы, оставшиеся на принтере',
- downloadSelected: 'Скачать выбранное',
- printerMissing: 'Принтер больше не настроен',
- timelapseUnavailable: 'Не удалось прочитать каталог таймлапсов',
- ipcamUnavailable: 'Не удалось прочитать каталог IP-камеры',
- },
- title: "Архив печати",
- no3mfBanner: {
- title: "Некоторые последние задания сохранены без миниатюр",
- body: "Слайсер не оставил файл .gcode.3mf на SD-карте принтера, поэтому Bambuddy не смог получить миниатюру и метаданные слайсера. Обычно это происходит, если в слайсере отключена настройка «Сохранять отправленные файлы во внешнем хранилище» (вкладка «Устройство» в Bambu Studio / OrcaSlicer).",
- docsLink: "См. шаг 4 установки",
- docsLinkInternalStorage: 'Почему так происходит',
- titleInternalStorage: 'Некоторые недавние печати остались во внутренней памяти принтера',
- bodyInternalStorage: 'Bambu Studio сохранил нарезанный файл во внутренней памяти принтера, а не на карте, поэтому Bambuddy было нечего читать по FTP. На серии H2 и P2S кнопка «Печать» всегда делает так: выбор есть только в «Отправить», и там по умолчанию тоже «Кэш». Эти печати по-прежнему архивируются с именем и временем, только без миниатюры и метаданных слайсера. Чтобы архивы были полными, запускайте печать из Bambuddy или нарезайте в OrcaSlicer, либо в Bambu Studio используйте «Отправить» с «Внешним накопителем», а печать запускайте после этого. Во всех случаях в принтере нужна карта или флешка.',
- titleNoExternalStorage: 'Некоторые недавние печати не удалось архивировать — в принтере нет накопителя',
- bodyNoExternalStorage: 'Принтер не видит ни карты, ни флешки в слоте, поэтому нарезанному файлу некуда было попасть, а Bambuddy нечего читать. Вставьте накопитель, и следующая печать будет заархивирована полностью.',
- titleInternalHistory: 'Некоторые недавние печати запущены из файла, который уже был на принтере',
- bodyInternalHistory: 'Эти печати шли из собственной библиотеки принтера — повторная печать с его экрана, запуск из Handy или файл, отправленный раньше и напечатанный позже. Bambuddy читает файлы печати по FTP, а он отдаёт только карту или флешку, тогда как принтер держит эту библиотеку в области, куда FTP не достаёт, — читать 3MF было негде. Настройки слайсера тут ничего не меняют: для этих печатей ничего не отправлялось. Они по-прежнему архивируются с именем и временем, а в «Редактировании архива» израсходованный филамент можно указать вручную. Чтобы архив был полным, запускайте печать из Bambuddy или из своего слайсера.',
- titleFtpsCooloff: 'Некоторые недавние печати не удалось заархивировать — принтер отклонил файловое соединение',
- bodyFtpsCooloff: 'Bambuddy открыл порт передачи файлов принтера (FTPS 990), и принтер ответил чем-то, что не является TLS, поэтому прочитать с него ничего не удалось. Эти печати всё равно сохранены в архиве с названием и временем, только без миниатюры и метаданных слайсера. Это не настройка слайсера и не то, что вы меняли: те же модели и прошивки нормально работают на других установках, а затронутый принтер обычно позже начинает работать сам. После такой ошибки Bambuddy приостанавливает передачи к этому принтеру на пять минут и возвращается за файлом, когда пауза заканчивается, поэтому короткий эпизод исправляется сам; если карточка так и осталась пустой, значит отказ продлился дольше повторной попытки. Что именно это вызывает, пока неизвестно. Если повторяется, включите отладочное журналирование на странице Система и приложите пакет поддержки к своему сообщению.',
- dismissLabel: "Закрыть это уведомление",
- },
- searchPlaceholder: "Поиск в архиве...",
- filterByPrinter: "Фильтр по принтеру",
- filterByStatus: "Фильтр по состоянию",
- sortBy: "Сортировать по",
- sortNewest: "Сначала новые",
- sortOldest: "Сначала старые",
- sortName: "Названию",
- sortDuration: "Длительности",
- sortLargest: "Сначала большие",
- sortSmallest: "Сначала маленькие",
- sortSize: "Размеру",
- noArchives: "Архивы не найдены",
- noArchivesSearch: "По вашему запросу ничего не найдено",
- originalPrintNotVisible: "Исходная печать не отображается — попробуйте сбросить фильтры",
- noArchivesYet: "Архив пока пуст",
- prints: "печатей",
- pagination: {
- showing: "Показано",
- to: "–",
- of: "из",
- show: "Показывать",
- page: "Страница",
- all: "Все",
- },
- loadingArchives: "Загрузка архива...",
- releaseToUpload: "Отпустите файлы для загрузки",
- showAll: "Показать все",
- showFavoritesOnly: "Только избранное",
- gridView: "Плитка",
- listView: "Список",
- calendarView: "Календарь",
- logView: "Журнал печати",
- manageTags: "Управление тегами",
- showFailedPrints: "Показывать неудачные печати",
- hideFailedPrints: "Скрывать неудачные печати",
- hideDuplicates: "Скрывать дубликаты",
- viewOriginalPrint: "Открыть исходную печать №{{id}}",
- printTime: "Время печати",
- filamentUsed: "Израсходовано филамента",
- cost: "Стоимость",
- preview: "Предпросмотр",
- deleteArchive: "Удалить запись из архива",
- deleteConfirm: "Удалить эту запись из архива?",
- favorite: "В избранное",
- unfavorite: "Удалить из избранного",
- viewDetails: "Подробнее",
- status: {
- completed: "Завершено",
- failed: "Ошибка",
- stopped: "Остановлено",
- },
- toast: {
- source3mfAttached: "Исходный 3MF прикреплён: {{filename}}",
- failedUploadSource3mf: "Не удалось загрузить исходный 3MF",
- source3mfRemoved: "Исходный 3MF удалён",
- failedRemoveSource3mf: "Не удалось удалить исходный 3MF",
- f3dAttached: "F3D прикреплён: {{filename}}",
- failedUploadF3d: "Не удалось загрузить F3D",
- f3dRemoved: "F3D удалён",
- failedRemoveF3d: "Не удалось удалить F3D",
- timelapseAttached: "Таймлапс прикреплён: {{filename}}",
- timelapseAlreadyAttached: "Таймлапс уже прикреплён",
- noMatchingTimelapse: "Подходящий таймлапс не найден",
- failedScanTimelapse: "Не удалось найти таймлапс",
- failedAttachTimelapse: "Не удалось прикрепить таймлапс",
- timelapseRemoved: "Таймлапс удалён",
- failedRemoveTimelapse: "Не удалось удалить таймлапс",
- timelapseUploaded: "Таймлапс загружен: {{filename}}",
- failedUploadTimelapse: "Не удалось загрузить таймлапс",
- archiveDeleted: "Запись удалена из архива",
- failedDeleteArchive: "Не удалось удалить запись из архива",
- addedToFavorites: "Добавлено в избранное",
- removedFromFavorites: "Удалено из избранного",
- projectUpdated: "Проект обновлён",
- failedUpdateProject: "Не удалось обновить проект",
- linkCopied: "Ссылка скопирована",
- failedCopyLink: "Не удалось скопировать ссылку",
- photoDeleted: "Фотография удалена",
- failedDeletePhoto: "Не удалось удалить фотографию",
- failedDeleteArchives: "Не удалось удалить записи из архива",
- failedUpdateFavorites: "Не удалось обновить избранное",
- exportDownloaded: "Экспортированный файл скачан",
- exportFailed: "Ошибка экспорта",
- },
- menu: {
- print: "Печать",
- openInBambuStudio: "Открыть в слайсере",
- slice: "Нарезать",
- externalLink: "Внешняя ссылка",
- viewOnMakerWorld: "Открыть на MakerWorld",
- preview3d: "3D-просмотр",
- viewTimelapse: "Посмотреть таймлапс",
- scanForTimelapse: "Найти таймлапс",
- uploadTimelapse: "Загрузить таймлапс",
- removeTimelapse: "Удалить таймлапс",
- downloadSource3mf: "Скачать исходный 3MF",
- uploadSource3mf: "Загрузить исходный 3MF",
- replaceSource3mf: "Заменить исходный 3MF",
- removeSource3mf: "Удалить исходный 3MF",
- uploadF3d: "Загрузить F3D",
- replaceF3d: "Заменить F3D",
- downloadF3d: "Скачать F3D",
- removeF3d: "Удалить F3D",
- download: "Скачать",
- copyDownloadLink: "Скопировать ссылку для скачивания",
- qrCode: "QR-код",
- viewPhotos: "Посмотреть фотографии",
- viewPhotosCount: "Фотографии ({{count}})",
- projectPage: "Страница проекта",
- addToFavorites: "Добавить в избранное",
- removeFromFavorites: "Удалить из избранного",
- edit: "Изменить",
- printLog: "Журнал печати",
- goToProject: "Открыть проект: {{name}}",
- addToProject: "Добавить в проект",
- removeFromProject: "Удалить из проекта",
- loading: "Загрузка...",
- noProjectsAvailable: "Нет доступных проектов",
- searchProjects: "Поиск проектов…",
- select: "Выбрать",
- deselect: "Снять выделение",
- delete: "Удалить",
- },
- permission: {
- noReprint: "У вас нет разрешения на повторную печать этой записи",
- noAddToQueue: "У вас нет разрешения на добавление в очередь",
- noUpdateArchives: "У вас нет разрешения на изменение архива",
- noUploadFiles: "У вас нет разрешения на загрузку файлов",
- noDownload: "У вас нет разрешения на скачивание файлов из архива",
- noCopyLink: "У вас нет разрешения на копирование ссылок для скачивания",
- noDelete: "У вас нет разрешения на удаление этой записи",
- noEdit: "У вас нет разрешения на изменение этой записи",
- noCreate: "У вас нет разрешения на создание записей в архиве",
- },
- platePicker: {
- title: "Выберите пластину для предпросмотра",
- hint: "В этой записи несколько пластин. Выберите пластину, которую нужно открыть в просмотрщике G-code.",
- plateLabel: "Пластина {{index}}",
- objectCount: "{{count}} объект",
- objectCount_plural: "{{count}} объектов",
- noGcode: "В этой записи нет нарезанного G-code для предпросмотра. Сначала откройте файл в Bambu Studio и выполните нарезку.",
- },
- card: {
- previousPlate: "Предыдущая пластина",
- nextPlate: "Следующая пластина",
- plateNumber: "Пластина {{index}}",
- moreOptions: "Щёлкните правой кнопкой для дополнительных действий",
- addToFavorites: "Добавить в избранное",
- removeFromFavorites: "Удалить из избранного",
- cancelled: "отменено",
- failed: "ошибка",
- duplicate: "дубликат",
- duplicateTitle: "Эта модель уже печаталась",
- openSource3mf: "Открыть исходный 3MF в Bambu Studio (щёлкните правой кнопкой для дополнительных действий)",
- downloadF3d: "Скачать файл проекта Fusion 360",
- viewTimelapse: "Посмотреть таймлапс",
- viewPhoto: "Посмотреть фотографию",
- viewPhotos: "Посмотреть фотографии: {{count}}",
- openFolder: "Открыть папку: {{name}}",
- slicedFile: "Нарезанный файл — готов к печати",
- sourceFile: "Только исходный файл — сопоставление AMS недоступно",
- gcode: "G-CODE",
- source: "ИСХОДНИК",
- project: "Проект: {{name}}",
- runsBadge: "Печатей: {{count}}",
- runsBadgeTitle: "Всего печатей: {{count}}, успешных: {{successful}}, неудачных: {{failed}}. Нажмите, чтобы открыть полный журнал.",
- estimated: "Расчётное время: {{time}}",
- actual: "Фактическое время: {{time}}",
- accuracy: "Точность оценки: {{percent}}%",
- filament: "{{weight}} г",
- layer: "{{count}} слой",
- layers: "{{count}} слоёв",
- object: "{{count}} объект",
- objects: "{{count}} объектов",
- slicedFor: "Нарезано для {{model}}",
- uploadedBy: "Загрузил",
- noPermissionReprint: "У вас нет разрешения на повторную печать",
- noFileForReprint: "Файл 3MF недоступен: при сохранении задания не удалось скачать его с принтера",
- slicerAmsMapping: "Маппинг AMS сохранён ({{printer}})",
- slicerAmsMappingTooltip: "Выбор ячеек AMS, сделанный слайсером, сохранён для принтера {{printer}}. Номера ячеек имеют смысл только на нём, поэтому повторная печать использует их только при отправке снова на {{printer}}.",
- noPermissionEdit: "У вас нет разрешения на изменение архива",
- noPermissionDelete: "У вас нет разрешения на удаление записей из архива",
- openInBambuStudio: "Открыть в слайсере",
- openInBambuStudioToSlice: "Открыть в слайсере для нарезки",
- slice: "Нарезать",
- externalLink: "Внешняя ссылка",
- makerWorld: "MakerWorld: {{designer}}",
- viewProject: "Открыть проект",
- noExternalLink: "Внешняя ссылка не указана",
- preview3d: "3D-просмотр",
- download: "Скачать",
- edit: "Изменить",
- delete: "Удалить",
- },
- runLog: {
- title: "Журнал печати",
- modalTitle: "Журнал печати — {{name}}",
- modalTitleFallback: "эта запись",
- empty: "Для этой записи пока нет событий печати.",
- col: {
- date: "Дата",
- status: "Состояние",
- duration: "Длительность",
- filament: "Филамент",
- cost: "Стоимость",
- },
- status: {
- completed: "Завершено",
- failed: "Ошибка",
- cancelled: "Отменено",
- stopped: "Остановлено",
- skipped: "Пропущено",
- printing: "Печать",
- },
- },
- modal: {
- deleteArchive: "Удаление записи из архива",
- deleteConfirm: "Удалить «{{name}}»? Это действие нельзя отменить.",
- deleteButton: "Удалить",
- deletePurgeStats: "Также исключить эту печать из краткой статистики: филамент, время, стоимость и энергия",
- deleteQueueItemsWarning: "Также будут удалены связанные элементы очереди: {{count}}.",
- deleteBlockedByPrinting: "Удаление невозможно: сейчас печатаются связанные элементы очереди ({{count}}). Сначала остановите печать.",
- removeSource3mf: "Удаление исходного 3MF",
- removeSource3mfConfirm: "Удалить исходный файл 3MF из «{{name}}»? Исходный проект слайсера будет удалён.",
- removeButton: "Удалить",
- removeF3d: "Удаление F3D",
- removeF3dConfirm: "Удалить файл проекта Fusion 360 из «{{name}}»?",
- removeTimelapse: "Удаление таймлапса",
- removeTimelapseConfirm: "Удалить видео таймлапса из «{{name}}»?",
- timelapse: "{{name}} — таймлапс",
- selectTimelapse: "Выбор таймлапса",
- selectTimelapseDesc: "Автоматически найти совпадение не удалось. Выберите таймлапс для этой печати:",
- deleteArchives: "Удаление записей из архива",
- deleteArchivesConfirm: "Удалить записи из архива ({{count}})? Это действие нельзя отменить.",
- deleteCount: "Удалить: {{count}}",
- },
- page: {
- title: "Архив",
- printsCount: "Показано {{filtered}} из {{total}} печатей",
- dropFilesHere: "Перетащите сюда файлы .3mf",
- releaseToUpload: "Отпустите файлы для загрузки",
- only3mfSupported: "Поддерживаются только файлы .3mf",
- close: "Закрыть",
- selected: "Выбрано: {{count}}",
- selectAll: "Выбрать все",
- tags: "Теги",
- project: "Проект",
- favorite: "Избранное",
- delete: "Удалить",
- toggledFavorites: "Избранное изменено для записей: {{count}}",
- failedUpdateFavorites: "Не удалось обновить избранное",
- archivesDeleted: "Удалено записей: {{count}}",
- failedDeleteArchives: "Не удалось удалить записи из архива",
- photoDeleted: "Фотография удалена",
- failedDeletePhoto: "Не удалось удалить фотографию",
- },
- list: {
- name: "Название",
- printer: "Принтер",
- date: "Дата",
- size: "Размер",
- actions: "Действия",
- hasTimelapse: "Есть таймлапс",
- },
- log: {
- date: "Дата",
- printName: "Название печати",
- printer: "Принтер",
- user: "Пользователь",
- status: "Состояние",
- duration: "Длительность",
- filament: "Филамент",
- filamentUsed: 'Израсходовано филамента',
- cost: 'Стоимость',
- energy: 'Энергия',
- energyCost: 'Стоимость энергии',
- completedAt: 'Завершено',
- columns: 'Столбцы',
- sortBy: 'Сортировать по: {{column}}',
- allPrinters: "Все принтеры",
- allUsers: "Все пользователи",
- allStatuses: "Все состояния",
- cancelled: "Отменено",
- skipped: "Пропущено",
- dateFrom: "С",
- dateTo: "По",
- noEntries: "Записи журнала не найдены",
- showing: "Показано {{count}} из {{total}} записей",
- rowsPerPage: "Строк",
- page: "Страница",
- prev: "Назад",
- next: "Далее",
- clearLog: "Очистить журнал",
- clearLogTitle: "Очистка журнала печати",
- clearLogConfirm: "Все записи журнала печати будут удалены без возможности восстановления. Архив и очередь не изменятся. Продолжить?",
- clearLogButton: "Очистить всё",
- cleared: "Удалено записей журнала: {{count}}",
- clearFailed: "Не удалось очистить журнал печати",
- deleteEntryTitle: "Удаление записи журнала",
- deleteEntryConfirm: "Запись будет удалена из журнала, а её вклад в расход филамента, время и стоимость исчезнет из краткой статистики. Связанная запись архива, если она существует, не изменится. Это действие нельзя отменить.",
- entryDeleted: "Запись журнала удалена",
- entryDeleteFailed: "Не удалось удалить запись журнала",
- editEntryTitle: "Изменение записи журнала",
- editEntryDescription: "Укажите результат этой печати. Виджет анализа отказов группирует данные по этим значениям, поэтому изменения сразу отразятся в статистике.",
- entryUpdated: "Запись журнала обновлена",
- entryUpdateFailed: "Не удалось обновить запись журнала",
- statuses: {
- completed: "Завершено",
- failed: "Ошибка",
- stopped: "Остановлено",
- cancelled: "Отменено",
- skipped: "Пропущено",
- },
- },
- },
- dispatchToast: {
- untitled: "Задание печати",
- startingPrints: "Запуск печати",
- progressSummary: "Завершено: {{complete}}/{{total}} • Обрабатывается: {{processing}}",
- expandDetails: "Показать подробности отправки",
- collapseDetails: "Скрыть подробности отправки",
- awaitingPrinter: "Ожидание принтера…",
- status: {
- processing: "Обработка",
- completed: "Завершено",
- failed: "Ошибка",
- },
- failed: {
- generic: "Не удалось отправить задание",
- upload_failed: "Не удалось загрузить файл на принтер",
- start_command_failed: "Принтер отклонил команду запуска",
- },
- dismiss: "Закрыть",
- },
- pipelineRuns: {
- title: "Запуски конвейеров",
- loading: "Загрузка…",
- empty: "Конвейеры ещё не запускались.",
- filter: {
- pipeline: "Конвейер",
- status: "Состояние",
- target: "Назначение",
- all: "Все",
- allPipelines: "Все конвейеры",
- allStatus: "Все состояния",
- allTargets: "Все назначения",
- clear: "Сбросить фильтры",
- noMatches: "Нет запусков, соответствующих выбранным фильтрам.",
- },
- totalCount_one: "{{n}} запуск",
- totalCount_other: "{{n}} запусков",
- copies: "Копий: {{n}}",
- failedCount: "Ошибок: {{n}}",
- copyN: "Копия {{n}}",
- retryFailed: "Повторить неудачные",
- retryOf: "повтор запуска №{{n}}",
- pagination: "{{start}}–{{end}} из {{total}}",
- cancelledByUser: "Отменено пользователем",
- toast: {
- cancelled: "Запуск отменён",
- cancelFailed: "Не удалось отменить запуск",
- retryStarted: "Повторный запуск начат",
- retryFailed: "Повторный запуск не удался",
- cleared: "Удалено запусков: {{n}}",
- clearFailed: "Не удалось очистить журнал",
- },
- clearLog: "Очистить журнал",
- clearConfirmTitle: "Очистить журнал?",
- clearConfirmBody: "Удалить все завершённые, неудачные, отменённые и частично неудачные запуски конвейеров? Выполняющиеся запуски сохранятся. Это действие нельзя отменить.",
- clearConfirmAction: "Очистить",
- jobStatus: {
- pending: "ожидание",
- awaiting_printer: "ожидание принтера",
- queued: "в очереди",
- printing: "печать",
- completed: "завершено",
- failed: "ошибка",
- cancelled: "отменено",
- },
- },
- queue: {
- title: "Очередь печати",
- subtitle: "Планирование и управление заданиями печати",
- filamentShort: {
- rowBadge: "Для назначенной катушки недостаточно филамента",
- rowTooltip: "Планировщик отметил это задание. Нажмите «Запустить», чтобы увидеть нехватку по каждому слоту и решить, печатать ли всё равно.",
- confirmTitle: "Недостаточно филамента",
- confirmIntro: "Назначенной катушки недостаточно как минимум для одного слота. Всё равно запустить печать?",
- lineItem: "Слот {{slot}}: требуется {{required}} г, осталось {{remaining}} г",
- unknown: "неизвестно",
- printAnyway: "Всё равно печатать",
- },
- slicerAmsMapping: {
- rowBadge: "Ячейки AMS сохранены для этого принтера",
- rowTooltip: "У этого архива сохранены точные ячейки AMS, выбранные слайсером, — для принтера, на который нацелено это задание. Повторная печать на нём может использовать те же катушки вместо повторного подбора по типу и цвету.",
- },
- editQueueItem: "Изменить задание в очереди",
- selectAllPlates: "Выбрать все пластины ({{count}})",
- deselectAll: "Снять выделение",
- printQueued: "Задание добавлено в очередь",
- printQueuedWillStartWhenIdle: "Запустится, когда принтер освободится",
- itemsQueued: "Добавлено в очередь: {{count}}",
- sending: "Отправка...",
- sendingProgress: "Отправка {{current}} из {{total}}...",
- adding: "Добавление...",
- addingProgress: "Добавление {{current}} из {{total}}...",
- savingProgress: "Сохранение {{current}} из {{total}}...",
- clearQueue: "Очистить очередь",
- clearHistory: "Очистить историю",
- emptyQueue: "Очередь пуста",
- position: "Позиция",
- scheduledTime: "Запланированное время",
- moveUp: "Переместить вверх",
- moveDown: "Переместить вниз",
- startNow: "Запустить сейчас",
- printingInProgress: "Идёт печать...",
- viewArchive: "Открыть архив",
- viewInFileManager: "Открыть в файловом менеджере",
- itemCount: "{{count}} задание",
- itemCount_plural: "{{count}} заданий",
- dragToReorder: "Перетащите для изменения порядка (только задания «как можно скорее»)",
- reorderHint: "Позиция влияет только на задания «как можно скорее». Запланированные задания запускаются в указанное время.",
- sjf: {
- label: "SJF",
- tooltip: "Shortest Job First — планировщик отдаёт приоритет более коротким заданиям",
- },
- addedBy: "Добавил: {{name}}",
- nextInQueue: "Следующее в очереди",
- clearPlateSuccess: "Пластина очищена — можно запускать следующую печать",
- plateNumber: "Пластина {{index}}",
- quantity: "Количество",
- quantityHint: "Будет создано заданий: {{count}}",
- plateQuantityLabel: "Повторы: {{plate}}",
- plateQuantityTotal_one: "Всего запусков: {{count}}",
- plateQuantityTotal_other: "Всего запусков: {{count}}",
- batchOrders: {
- title: "Пакетные заказы",
- emptyTitle: "Пакетных заказов нет",
- emptyDescription: "Поставьте в очередь файл с несколькими столами или несколько копий одного стола — заказ появится здесь вместе с прогрессом.",
- filter: {
- active: "Активные",
- completed: "Завершённые",
- cancelled: "Отменённые",
- all: "Все",
- },
- status: {
- active: "Активен",
- completed: "Завершён",
- cancelled: "Отменён",
- },
- noTargets: "Только группировка",
- noTargetsHint: "Создан до появления целевых количеств по столам, поэтому отслеживает поставленные в очередь запуски, а не цель.",
- dispatchRemaining: "Поставить в очередь: {{count}}",
- dispatchPlate: "Поставить остаток",
- strandedPlate: "Нет запуска для копирования настроек",
- strandedNotice: "Не удаётся поставить в очередь {{runs}} из {{owed}} ещё не выполненных запусков: для этой пластины не осталось запуска в очереди или завершённого, из которого можно скопировать настройки. Поставьте пластину в очередь один раз из файла или отмените заказ.",
- dispatched: "Оставшиеся запуски для «{{name}}» поставлены в очередь",
- plateProgress: "Готово {{completed}} из {{target}}",
- remaining: "Осталось: {{count}}",
- failed: "Неудачных: {{count}}",
- printing: "Печатается: {{count}}",
- wholeFile: "Весь файл",
- due: "Срок: {{date}}",
- costSoFar: "{{amount}} потрачено",
- costRemaining: "(ещё {{amount}})",
- },
- activeBatches: "Активные партии",
- batchProgress: "Выполнено {{completed}} из {{total}}",
- cancelBatch: "Отменить оставшиеся",
- batchCancelled: "Оставшиеся задания партии отменены",
- cancelBatchConfirmTitle: "Отменить партию",
- cancelBatchConfirmMessage: "Закрыть этот заказ? Запуски, ещё стоящие в очереди, будут отменены, и заказ перестанет требовать то, что не произведено.",
- batch: {
- defaultName: "Партия",
- label: "{{count}} задание",
- label_plural: "{{count}} заданий",
- pendingCount: "Ожидает: {{count}}",
- pendingCount_plural: "Ожидают: {{count}}",
- expand: "Развернуть партию",
- collapse: "Свернуть партию",
- groupAsBatch: "Объединить в партию…",
- groupAsBatchDescription: "Объединить выбранные задания ({{count}}) в одну сворачиваемую партию.",
- nameLabel: "Название партии",
- namePlaceholder: "Например: подарки к пятнице",
- create: "Создать партию",
- ungroup: "Разгруппировать",
- ungroupConfirmTitle: "Разгруппировать партию?",
- ungroupConfirmMessage: "Задания останутся в очереди, но больше не будут объединены в одну группу.",
- dragGroup: "Перетащить группу",
- },
- tabs: {
- batches: "Партии",
- queue: "Очередь",
- history: "История",
- timeline: "Временная шкала",
- pipelines: "Конвейеры",
- },
- layout: {
- flatList: "Список",
- byPrinter: "По принтерам",
- groupByPrinter: "Группировать по принтерам",
- },
- history: {
- emptyTitle: "История пока пуста",
- emptyDescription: "Здесь появятся завершённые, отменённые и неудачные задания.",
- showMore: "Показать ещё",
- showingCount: "Показано {{shown}} из {{total}}",
- },
- dragGhost: {
- multiCount: "{{count}} заданий",
- batch: "{{name}} ({{count}} копия)",
- batch_plural: "{{name}} ({{count}} копий)",
- },
- sections: {
- currentlyPrinting: "Сейчас печатается",
- queued: "В очереди",
- history: "История",
- },
- status: {
- pending: "Ожидает",
- waiting: "Ожидание",
- printing: "Печать",
- paused: "Приостановлено",
- completed: "Завершено",
- failed: "Ошибка",
- skipped: "Пропущено",
- cancelled: "Отменено",
- },
- summary: {
- printing: "Печатается",
- queued: "В очереди",
- totalTime: "Общее время очереди",
- totalWeight: "Общий вес очереди",
- history: "История",
- },
- filter: {
- allPrinters: "Все принтеры",
- unassigned: "Не назначено",
- allStatus: "Все состояния",
- allLocations: "Все расположения",
- any: "Любое",
- },
- sort: {
- byPosition: "По позиции",
- byName: "По названию",
- byPrinter: "По принтеру",
- bySchedule: "По времени запуска",
- byDate: "По дате",
- ascendingOldest: "По возрастанию (сначала старые)",
- descendingNewest: "По убыванию (сначала новые)",
- },
- badges: {
- staged: "Подготовлено",
- requiresPrevious: "Требуется успешное предыдущее задание",
- autoPowerOff: "Автоотключение питания",
- gcodeInjection: "G-code",
- },
- empty: {
- title: "Нет запланированных заданий",
- description: "Запланируйте печать на странице архива через пункт «Запланировать» в контекстном меню либо перетащите сюда файлы.",
- },
- time: {
- etaIfStartedNow: "Время завершения, если запустить это задание сейчас",
- whenFree: "Когда принтер освободится",
- overdue: "Просрочено",
- now: "Сейчас",
- lessThanMinute: "Меньше чем через минуту",
- inMinutes: "Через {{count}} мин",
- inHours: "Через {{count}} ч",
- },
- actions: {
- startPrint: "Запустить печать",
- stopPrint: "Остановить печать",
- requeue: "Вернуть в очередь",
- },
- bulkEdit: {
- title: "Изменить {{count}} задание",
- title_plural: "Изменить задания: {{count}}",
- description: "К выбранным заданиям будут применены только изменённые параметры.",
- printer: "Принтер",
- noChange: "— Без изменений —",
- queueOptions: "Параметры очереди",
- staged: "Подготовлено (ручной запуск)",
- autoPowerOff: "Отключить питание после печати",
- requirePrevious: "Требовать успешного завершения предыдущего задания",
- printOptions: "Параметры печати",
- bedLevelling: "Калибровка стола",
- flowCalibration: "Калибровка потока",
- vibrationCalibration: "Калибровка вибраций",
- layerInspection: "Проверка первого слоя",
- timelapse: "Таймлапс",
- useAms: "Использовать AMS",
- nozzleOffsetCali: "Калибровка смещения сопел",
- applyChanges: "Применить изменения",
- selectAll: "Выбрать все",
- deselectAll: "Снять выделение",
- selected: "Выбрано: {{count}}",
- editSelected: "Изменить выбранные",
- cancelSelected: "Отменить выбранные",
- },
- confirm: {
- cancelTitle: "Отменить запланированную печать",
- cancelMessage: "Отменить задание «{{name}}»?",
- stopTitle: "Остановить печать",
- stopMessage: "Остановить текущую печать «{{name}}»? Задание на принтере будет отменено.",
- removeTitle: "Удалить из истории",
- removeMessage: "Удалить «{{name}}» из истории очереди?",
- clearHistoryTitle: "Очистить историю",
- clearHistoryMessage: "Удалить все записи из истории ({{count}})?",
- cancelButton: "Отменить печать",
- stopButton: "Остановить печать",
- thisPrint: "эту печать",
- thisItem: "это задание",
- },
- toast: {
- cancelled: "Задание отменено",
- cancelFailed: "Не удалось отменить задание",
- removed: "Задание удалено",
- keptForOrder: "Отменено, а не удалено: только из этого запуска заказ может снова поставить эту пластину в очередь",
- historyKeptForOrders: "Сохранено {{kept}}, они ещё нужны заказам.",
- removeFailed: "Не удалось удалить задание",
- stopped: "Печать остановлена",
- stopFailed: "Не удалось остановить печать",
- released: "Задание передано в очередь",
- startFailed: "Не удалось запустить печать",
- reorderFailed: "Не удалось изменить порядок очереди",
- historyCleared: "Удалено записей истории: {{count}}",
- clearHistoryFailed: "Не удалось очистить историю",
- updateFailed: "Не удалось обновить задания",
- bulkCancelled: "Отменено заданий: {{count}}",
- bulkCancelFailed: "Не удалось отменить задания",
- batchCreated: "Партия «{{name}}» создана",
- batchCreateFailed: "Не удалось создать партию",
- batchUngrouped: "Разгруппировано заданий: {{count}}",
- batchUngroupFailed: "Не удалось разгруппировать партию",
- resumedAfterFailure: "Очередь возобновлена — восстановлено заданий: {{restored}}",
- resumeAfterFailureFailed: "Не удалось возобновить очередь",
- },
- resumeAfterFailure: {
- banner: "Очередь принтера {{printer}} заблокирована из-за ошибки предыдущей печати — пропущено заданий: {{count}}",
- bannerHint: "Устраните проблему с принтером, затем возобновите очередь, чтобы вернуть пропущенные задания и снять блокировку.",
- button: "Возобновить после ошибки",
- confirmTitle: "Возобновить очередь после ошибки?",
- confirmMessage: "Вернуть пропущенные задания ({{count}}) для принтера {{printer}} в состояние ожидания и снять блокировку. Перед продолжением убедитесь, что принтер готов.",
- },
- timeline: {
- listView: "Список",
- timelineView: "Временная шкала",
- unassigned: "Не назначено",
- noData: "На этот день печать не запланирована",
- nothingCommitted: "В этом интервале нет заданий с фиксированным временем. Подготовленные и ожидающие задания, а также задания «как можно скорее» на свободных принтерах не показываются — задайте время запуска или выпустите подготовленное задание в очередь.",
- allDoneBy: "Расчётное завершение всех заданий: {{time}}",
- staged: "Подготовлено",
- filterAll: "Показать все",
- filterPrinting: "Печатается",
- filterQueued: "В очереди",
- time: {
- anyMoment: "в любой момент",
- minutesLeft: "осталось {{minutes}} мин",
- hoursLeft: "осталось {{hours}} ч",
- hoursMinutesLeft: "осталось {{hours}} ч {{minutes}} мин",
- },
- day: {
- previous: "Предыдущий день",
- next: "Следующий день",
- today: "Сегодня",
- },
- window: {
- back12h: "Назад на 12 часов",
- forward12h: "Вперёд на 12 часов",
- now: "Сейчас",
- },
- printerColumnHeader: "Принтер",
- },
- permissions: {
- noStopPrint: "У вас нет разрешения останавливать печать",
- noStartPrint: "У вас нет разрешения запускать печать",
- noEdit: "У вас нет разрешения изменять это задание",
- noCancel: "У вас нет разрешения отменять это задание",
- noRequeue: "У вас нет разрешения возвращать задания в очередь",
- noRemove: "У вас нет разрешения удалять это задание",
- noClearHistory: "У вас нет разрешения очищать историю",
- noEditItems: "У вас нет разрешения изменять задания очереди",
- noCancelItems: "У вас нет разрешения отменять задания очереди",
- },
- },
- stats: {
- title: "Статистика",
- subtitle: "Перетаскивайте виджеты для изменения порядка. Нажмите значок глаза, чтобы скрыть виджет.",
- overview: "Обзор",
- totalPrints: "Всего печатей",
- successRate: "Успешность",
- totalPrintTime: "Общее время печати",
- printTime: "Время печати",
- totalFilament: "Всего использовано филамента",
- filamentUsed: "Использовано филамента",
- filamentCost: "Стоимость филамента",
- totalCost: "Общая стоимость",
- energyUsed: "Потреблено энергии",
- energyCost: "Стоимость энергии",
- energyWarmingUpTooltip: "Учёт энергии ещё накапливает почасовые снимки. Итоги за выбранный период станут точными, когда появится хотя бы один снимок до начала этого периода. Первые значения могут быть занижены.",
- averagePrintTime: "Среднее время печати",
- printsPerDay: "Печатей в день",
- byPrinter: "По принтерам",
- printsByPrinter: "Печати по принтерам",
- byMaterial: "По материалам",
- byMonth: "По месяцам",
- last7Days: "Последние 7 дней",
- last30Days: "Последние 30 дней",
- last90Days: "Последние 90 дней",
- allTime: "За всё время",
- quickStats: "Краткая статистика",
- printActivity: "Активность печати",
- filamentTypes: "Типы филамента",
- filamentTrends: "Расход филамента",
- failureAnalysis: "Анализ неудач",
- timeAccuracy: "Точность оценки времени",
- successful: "Успешно:",
- failed: "Неудачно:",
- cancelled: "Отменено:",
- perfectEstimate: "100% — точное совпадение с оценкой",
- noTimeAccuracyData: "Данных о точности оценки времени пока нет",
- noFilamentData: "Нет данных о филаменте",
- noPrinterData: "Нет данных о принтерах",
- noPrintData: "Нет данных о печати",
- noPrintDataLast30Days: "За последние 30 дней данных о печати нет",
- failureReasons: "Причины неудач",
- topFailureReasons: "Основные причины неудач",
- failedPrintsCount: "Неудачных печатей: {{failed}} из {{total}}",
- lastWeekRate: "За прошлую неделю: {{rate}}%",
- resetLayout: "Сбросить расположение",
- recalculateCosts: "Пересчитать стоимость",
- recalculateCostsHint: "Пересчитать стоимость всех архивных заданий по текущим ценам филамента",
- exportStats: "Экспорт статистики",
- exportAsCsv: "Экспорт в CSV",
- exportAsExcel: "Экспорт в Excel",
- hiddenCount: "Скрыто: {{count}}",
- exportDownloaded: "Файл экспорта скачан",
- exportFailed: "Не удалось экспортировать данные",
- layoutReset: "Расположение сброшено",
- recalculatedCosts: "Пересчитана стоимость архивов: {{count}}",
- recalculateFailed: "Не удалось пересчитать стоимость",
- loadingStats: "Загрузка статистики...",
- noPermissionResetLayout: "У вас нет разрешения сбрасывать расположение",
- noPermissionRecalculate: "У вас нет разрешения пересчитывать стоимость",
- noPrintDataInRange: "В выбранном периоде нет данных о печати",
- periodFilament: "Филамент за период",
- periodCost: "Стоимость за период",
- avgPerPrint: "В среднем на печать",
- usageOverTime: "Расход по времени",
- energyOverTime: "Энергия по времени",
- filamentByWeight: "По весу",
- printDuration: "Продолжительность печати",
- printerUtilization: "Загрузка принтеров",
- filamentSuccess: "Успешность по материалам",
- printHabits: "Характер печати",
- printTimeOfDay: "Время суток",
- colorDistribution: "Распределение по цветам",
- noColorData: "Нет данных о цветах",
- records: "Рекорды",
- longestPrint: "Самая долгая печать",
- heaviestPrint: "Самая тяжёлая печать",
- mostExpensivePrint: "Самая дорогая печать",
- busiestDay: "Самый загруженный день",
- successStreak: "Серия успешных печатей",
- streakPrint: "успешная печать подряд",
- streakPrints: "{{count}} успешных печатей подряд",
- printerStats: "Статистика принтеров",
- hours: "часов",
- avgPrints: "В среднем печатей",
- noArchiveData: "Нет данных о печати",
- filamentByTime: "По времени",
- avgWeight: "Средний вес",
- avgTime: "Среднее время",
- filamentByPrints: "По количеству печатей",
- timeframe: {
- today: "Сегодня",
- "this-week": "Эта неделя",
- "this-month": "Этот месяц",
- "last-7": "Последние 7 дней",
- "last-30": "Последние 30 дней",
- "last-90": "Последние 90 дней",
- "this-year": "Этот год",
- "all-time": "За всё время",
- custom: "Произвольный период",
- from: "С",
- to: "По",
- },
- allUsers: "Все пользователи",
- noUser: "Без пользователя (система)",
- filterByUser: "Фильтр по пользователю",
- },
- maintenance: {
- title: "Обслуживание",
- overview: "Обзор",
- allOk: "Всё обслуживание выполнено вовремя",
- dueCount: "Требуется выполнить: {{count}}",
- dueCount_plural: "Требуется выполнить: {{count}}",
- warningCount: "Предупреждений: {{count}}",
- warningCount_plural: "Предупреждений: {{count}}",
- totalPrintTime: "Общее время печати",
- nextMaintenance: "Следующее обслуживание",
- nothingDue: "Пока ничего не требуется",
- tasks: "Задачи",
- lastPerformed: "Последнее выполнение",
- interval: "Интервал",
- hoursRemaining: "Осталось {{hours}} ч",
- hoursOverdue: "Просрочено на {{hours}} ч",
- markDone: "Отметить выполненным",
- performMaintenance: "Выполнить обслуживание",
- history: "История",
- noHistory: "История обслуживания пуста",
- editPrintHours: "Изменить часы печати",
- currentHours: "Текущие часы",
- statusTab: "Состояние",
- settingsTab: "Настройки",
- overdueCount: "Просрочено: {{count}}",
- dueSoonCount: "Скоро потребуется: {{count}}",
- dueSoon: "Скоро потребуется",
- allGood: "Всё в порядке",
- overdueBy: "Просрочено на {{duration}}",
- dueIn: "Через {{duration}}",
- timeLeft: "Осталось {{duration}}",
- day: "1 день",
- days: "{{count}} дней",
- week: "1 неделя",
- weeks: "{{count}} недель",
- month: "1 месяц",
- months: "{{count}} месяцев",
- year: "1 год",
- maintenanceTypes: "Виды обслуживания",
- maintenanceTypesDescription: "Системные и пользовательские задачи обслуживания",
- addCustomType: "Добавить пользовательскую задачу",
- restoreDefaults: "Восстановить стандартные задачи",
- intervalType: "Тип интервала",
- intervalValue: "Интервал ({{type}})",
- icon: "Значок",
- documentationLink: "Ссылка на документацию (необязательно)",
- assignToPrinters: "Назначить принтерам",
- selectAtLeastOnePrinter: "Выберите хотя бы один принтер",
- addType: "Добавить вид",
- custom: "Пользовательский",
- printHours: "Часы печати",
- calendarDays: "Календарные дни",
- exampleName: "Например: заменить HEPA-фильтр",
- viewDocumentation: "Открыть документацию",
- timeBasedInterval: "Интервал по времени",
- intervalOverrides: "Переопределение интервалов",
- intervalOverridesDescription: "Настройка отдельных интервалов для конкретных принтеров",
- assignedToPrinters: "Назначено принтерам:",
- noPrintersAssigned: "Не назначено ни одному принтеру",
- addPrinterShort: "Добавить:",
- printersAssignedClick: "Назначено принтерам: {{count}} — нажмите для управления",
- removeFromPrinter: "Убрать с этого принтера",
- types: {
- lubricateCarbonRods: "Смазать карбоновые валы",
- lubricateRails: "Смазать линейные направляющие",
- cleanNozzle: "Очистить сопло/хотэнд",
- checkBelts: "Проверить натяжение ремней",
- cleanBuildPlate: "Очистить печатную пластину",
- checkExtruder: "Проверить шестерни экструдера",
- checkCooling: "Проверить вентиляторы охлаждения",
- generalInspection: "Общий осмотр",
- cleanCarbonRods: "Очистить карбоновые валы",
- lubricateSteelRods: "Смазать стальные валы",
- cleanSteelRods: "Очистить стальные валы",
- cleanLinearRails: "Очистить линейные направляющие",
- checkPtfeTube: "Проверить PTFE-трубку",
- replaceHepaFilter: "Заменить HEPA-фильтр",
- replaceCarbonFilter: "Заменить угольный фильтр",
- lubricateLeftNozzleRail: "Смазать направляющую левого сопла",
- },
- maintenanceComplete: "Обслуживание отмечено выполненным",
- typeUpdated: "Вид обслуживания обновлён",
- typeDeleted: "Вид обслуживания удалён",
- defaultsRestored: "Восстановлено стандартных задач: {{count}}",
- printHoursUpdated: "Часы печати обновлены",
- printerAssigned: "Принтер назначен",
- printerRemoved: "Принтер удалён из назначения",
- deleteTypeConfirm: "Удалить «{{name}}»?",
- deleteSystemTypeTitle: "Удалить стандартную задачу обслуживания?",
- deleteSystemTypeMessage: "Удалить стандартную задачу обслуживания «{{name}}»?",
- noPermissionUpdate: "У вас нет разрешения обновлять задачи обслуживания",
- noPermissionPerform: "У вас нет разрешения отмечать обслуживание выполненным",
- noPermissionEditTypes: "У вас нет разрешения изменять виды обслуживания",
- noPermissionDeleteTypes: "У вас нет разрешения удалять виды обслуживания",
- noPermissionEditHours: "У вас нет разрешения изменять часы печати",
- noPermissionRemovePrinter: "У вас нет разрешения удалять назначения принтеров",
- noPermissionAssignPrinter: "У вас нет разрешения назначать принтеры",
- noPermissionEditIntervals: "У вас нет разрешения изменять интервалы",
- configureSettings: "Настроить виды обслуживания и интервалы",
- },
- settings: {
- sliceEngine: 'Движок нарезки',
- sliceEngineSidecar: 'Серверный sidecar',
- sliceEngineSidecarHint: 'Нарезка выполняется на сервере, в контейнере sidecar слайсера.',
- sliceEngineBrowser: 'В браузере',
- sliceEngineBrowserHint: 'Нарезка выполняется на этом устройстве, без участия сервера.',
- title: "Настройки",
- general: "Общие",
- tabs: {
- general: "Общие",
- smartPlugs: "Умные розетки",
- sensors: "Датчики",
- notifications: "Уведомления",
- queue: "Рабочий процесс",
- queueDispatch: "Очередь и отправка",
- queuePipelines: "Конвейеры",
- filament: "Филамент",
- network: "Сеть",
- apiKeys: "Ключи API",
- virtualPrinter: "Виртуальный принтер",
- spoolbuddy: "SpoolBuddy",
- failureDetection: "Обнаружение сбоев",
- users: "Аутентификация",
- backup: "Резервное копирование",
- emailAuth: "Аутентификация по email",
- ldap: "LDAP",
- twoFa: "Двухфакторная аутентификация",
- oidc: "SSO / OIDC",
- security: "Безопасность",
- },
- spoolbuddy: {
- infoTitle: "Устройства SpoolBuddy",
- infoBody: "Киоски SpoolBuddy регистрируются автоматически по сигналам активности. Удалите регистрацию устройства, если оно больше не используется или после сбоя демона остался устаревший дубликат.",
- duplicatesTitle: "Зарегистрировано устройств: {{count}}",
- duplicatesBody: "Интерфейс киоска использует только первое зарегистрированное устройство. Если один из экземпляров — устаревший дубликат после сбоя, удалите его регистрацию: работающее устройство зарегистрируется снова при следующем сигнале активности.",
- empty: "Устройства SpoolBuddy пока не зарегистрированы.",
- online: "В сети",
- offline: "Не в сети",
- unregister: "Удалить регистрацию",
- unregisterSuccess: "Регистрация устройства удалена",
- unregisterError: "Не удалось удалить регистрацию устройства",
- confirmTitle: "Удалить регистрацию устройства SpoolBuddy?",
- confirmBody: "Устройство «{{hostname}}» ({{deviceId}}) будет удалено из базы данных. Если оно работает, то зарегистрируется снова при следующем сигнале активности.",
- ipAddress: "IP-адрес",
- firmware: "Прошивка",
- lastSeen: "Последняя активность",
- daemonUptime: "Время работы демона",
- systemUptime: "Время работы системы",
- never: "никогда",
- nfc: "NFC",
- scale: "Весы",
- cpuTemp: "Температура ЦП",
- cpuLoad: "Загрузка ЦП",
- memory: "Память",
- disk: "Диск",
- update: "Обновить",
- updateConfirmTitle: "Обновить демон SpoolBuddy?",
- updateConfirmBody: "Запустить обновление ПО на «{{hostname}}»? После установки обновления демон будет перезапущен.",
- restartBrowser: "Перезапустить браузер",
- restartBrowserConfirmTitle: "Перезапустить браузер киоска?",
- restartBrowserConfirmBody: "Перезапустить браузер киоска на «{{hostname}}»? Экран ненадолго погаснет.",
- restartDaemon: "Перезапустить демон",
- restartDaemonConfirmTitle: "Перезапустить демон SpoolBuddy?",
- restartDaemonConfirmBody: "Перезапустить демон SpoolBuddy на «{{hostname}}»? Устройство на несколько секунд пропадёт из сети.",
- reboot: "Перезагрузить",
- rebootConfirmTitle: "Перезагрузить устройство?",
- rebootConfirmBody: "Перезагрузить «{{hostname}}»? Устройство будет недоступно около минуты.",
- shutdown: "Выключить",
- shutdownConfirmTitle: "Выключить устройство?",
- shutdownConfirmBody: "Выключить «{{hostname}}»? Для повторного включения потребуется физический доступ.",
- commandConfirm: "Подтвердить",
- commandQueued: "Команда поставлена в очередь",
- commandError: "Не удалось отправить команду",
- },
- ldap: {
- title: "Аутентификация LDAP",
- enabledDesc: "Аутентификация LDAP включена",
- disabledDesc: "Аутентификация LDAP отключена",
- disabledHint: "Настройте и сохраните параметры LDAP ниже, затем включите аутентификацию.",
- enabled: "Аутентификация LDAP включена",
- disabled: "Аутентификация LDAP отключена",
- feature1: "Пользователи могут входить с учётными данными LDAP",
- feature2: "Локальная учётная запись администратора остаётся резервным способом входа",
- feature3: "При входе группы LDAP сопоставляются с группами Bambuddy",
- serverConfig: "Настройка сервера LDAP",
- serverUrl: "Адрес сервера",
- serverUrlHint: "Используйте ldaps:// для SSL либо ldap:// с StartTLS",
- security: "Безопасность",
- securityHint: "StartTLS переводит обычное соединение на TLS. LDAPS использует TLS с самого начала.",
- bindDn: "Bind DN (служебная учётная запись)",
- bindPassword: "Пароль Bind",
- searchBase: "Базовый DN поиска",
- userFilter: "Фильтр поиска пользователей",
- userFilterHint: "{username} заменяется именем пользователя при входе. Для OpenLDAP используйте (uid={username}).",
- advanced: "Дополнительно",
- autoProvision: "Автоматически создавать пользователей",
- autoProvisionHint: "Автоматически создавать учётную запись Bambuddy при первом входе через LDAP",
- defaultGroup: "Группа по умолчанию",
- defaultGroupNone: "— Нет (без резервной группы) —",
- defaultGroupHint: "Резервная группа для пользователя LDAP, который успешно вошёл, но не состоит ни в одной сопоставленной группе LDAP. Оставьте пустым, чтобы такие пользователи не получали разрешений.",
- groupMapping: "Сопоставление групп (JSON)",
- groupMappingHint: "Сопоставьте DN групп LDAP с группами Bambuddy. Доступные группы: ",
- testConnection: "Проверить подключение",
- settingsSaved: "Настройки LDAP сохранены",
- errors: {
- serverRequired: "Укажите адрес сервера LDAP",
- searchBaseRequired: "Укажите базовый DN поиска",
- enableAuthFirst: "Сначала включите аутентификацию",
- configureLdapFirst: "Сначала сохраните настройки LDAP",
- },
- },
- email: {
- smtpSettings: "Настройка SMTP",
- smtpHost: "SMTP-сервер",
- smtpPort: "Порт SMTP",
- security: "Безопасность",
- authentication: "Аутентификация",
- username: "Имя пользователя",
- password: "Пароль",
- fromEmail: "Адрес отправителя",
- fromName: "Имя отправителя",
- testConnection: "Проверить подключение SMTP",
- testRecipient: "Адрес получателя тестового письма",
- sendTest: "Отправить тестовое письмо",
- sending: "Отправка...",
- save: "Сохранить настройки",
- saving: "Сохранение...",
- advancedAuth: "Расширенная аутентификация",
- advancedAuthEnabled: "Расширенная аутентификация включена",
- advancedAuthEnabledDesc: "Функции управления пользователями через email активны. Новые пользователи получают автоматически созданные пароли по почте и могут сбрасывать пароль через функцию восстановления.",
- advancedAuthDisabled: "Расширенная аутентификация отключена",
- advancedAuthDisabledDesc: "Включите расширенную аутентификацию, чтобы использовать почтовые функции управления пользователями.",
- enable: "Включить",
- disable: "Отключить",
- feature1: "Пароли для новых пользователей создаются автоматически и отправляются по email",
- feature2: "Пользователи могут входить по имени или адресу электронной почты",
- feature3: "Доступно восстановление забытого пароля",
- feature4: "Администраторы могут сбрасывать пароли пользователей по email",
- errors: {
- requiredFields: "Заполните все обязательные поля",
- usernameRequired: "При включённой аутентификации требуется имя пользователя",
- enterTestEmail: "Введите адрес для тестового письма",
- smtpServerAndEmail: "Перед проверкой укажите SMTP-сервер и адрес отправителя",
- usernamePasswordRequired: "При включённой аутентификации требуются имя пользователя и пароль",
- configureSmtpFirst: "Сначала настройте и проверьте SMTP",
- enableAuthFirst: "Чтобы использовать почтовые функции, сначала включите аутентификацию.",
- },
- success: {
- settingsSaved: "Настройки SMTP сохранены",
- },
- securityOptions: {
- starttls: "STARTTLS (порт 587)",
- ssl: "SSL/TLS (порт 465)",
- none: "Без шифрования (порт 25)",
- },
- authOptions: {
- enabled: "Включена",
- disabled: "Отключена",
- },
- },
- appearance: "Внешний вид",
- notifications: "Уведомления",
- smartPlugs: "Умные розетки",
- spoolman: "Spoolman",
- updates: "Обновления",
- language: "Язык",
- languageDescription: "Выберите предпочитаемый язык",
- theme: "Тема",
- themeLight: "Светлая",
- themeDark: "Тёмная",
- themeSystem: "Системная",
- defaultView: "Страница по умолчанию",
- defaultViewDescription: "Страница, которая открывается при запуске приложения",
- checkForUpdates: "Проверить обновления",
- autoUpdate: "Автоматическое обновление",
- currentVersion: "Текущая версия",
- latestVersion: "Последняя версия",
- upToDate: "Установлена последняя версия",
- updateAvailable: "Доступно обновление",
- notificationLanguage: "Язык уведомлений",
- notificationLanguageDescription: "Язык push-уведомлений",
- bedCooledThreshold: "Порог остывания стола",
- bedCooledThresholdDescription: "Температура, ниже которой стол после печати считается остывшим",
- userNotificationsEnabled: "Пользовательские уведомления",
- userNotificationsEnabledDescription: "Включить меню пользовательских и почтовых уведомлений о событиях печати. Требуется расширенная аутентификация.",
- userNotificationsDisabledHint: "Для пользовательских уведомлений включите расширенную аутентификацию.",
- notificationProviders: "Провайдеры уведомлений",
- addProvider: "Добавить провайдера",
- editProvider: "Изменить провайдера",
- providerType: "Тип провайдера",
- testNotification: "Проверить уведомление",
- testSuccess: "Тестовое уведомление успешно отправлено",
- testFailed: "Не удалось отправить тестовое уведомление",
- quietHours: "Тихие часы",
- quietHoursDescription: "Не беспокоить в указанный период",
- quietHoursStart: "Начало",
- quietHoursEnd: "Окончание",
- events: {
- title: "События уведомлений",
- printStart: "Печать началась",
- printComplete: "Печать завершена",
- printFailed: "Ошибка печати",
- printStopped: "Печать остановлена",
- printProgress: "Этапы выполнения",
- printProgressDescription: "Уведомлять при 25%, 50% и 75%",
- printerOffline: "Принтер не в сети",
- printerError: "Ошибка принтера",
- filamentLow: "Филамент заканчивается",
- maintenanceDue: "Требуется обслуживание",
- maintenanceDueDescription: "Уведомлять, когда наступил срок обслуживания",
- },
- smartPlug: {
- title: "Умные розетки",
- add: "Добавить умную розетку",
- edit: "Изменить умную розетку",
- name: "Название",
- ipAddress: "IP-адрес",
- linkedPrinter: "Связанный принтер",
- autoOn: "Автоматическое включение",
- autoOnDescription: "Включать при начале печати",
- autoOff: "Автоматическое выключение",
- autoOffDescription: "Выключать после завершения печати",
- offDelay: "Задержка выключения",
- offDelayMinutes: "Минут после печати",
- offDelayTemp: "Когда сопло остынет ниже заданной температуры",
- currentState: "Текущее состояние",
- turnOn: "Включить",
- turnOff: "Выключить",
- },
- filamentTracking: "Учёт филамента",
- filamentTrackingDesc: "Выберите способ учёта катушек: встроенный инвентарь или внешний сервер Spoolman.",
- autoAddUnknownRfid: "Автоматически добавлять неизвестные RFID-катушки",
- autoAddUnknownRfidDesc: "Автоматически создавать запись в инвентаре при обнаружении катушки с неизвестной RFID-меткой. Отключите, если регистрируете новые катушки заранее, чтобы избежать дубликатов.",
- filamentChecks: "Проверки филамента",
- disableFilamentWarnings: "Отключить предупреждения о филаменте",
- disableFilamentWarningsDesc: "Не показывать предупреждения о нехватке филамента при запуске печати или добавлении в очередь",
- preferLowestFilament: "Предпочитать катушку с наименьшим остатком",
- preferLowestFilamentDesc: "Если подходят несколько катушек, использовать катушку с наименьшим остатком филамента",
- preferLowestFilamentBackupNote: "Работает только при включённом AMS Filament Backup: иначе принтер не сможет переключиться на вторую катушку после окончания выбранной.",
- trackingModeBuiltIn: "Встроенный инвентарь",
- trackingModeBuiltInDesc: "Автоматическое сопоставление RFID и учёт расхода",
- trackingModeSpoolmanDesc: "Внешний сервер управления филаментом",
- builtInFeatureRfid: "Автоматически определяет официальные RFID-катушки Bambu Lab в AMS",
- builtInFeatureUsage: "Учитывает расход филамента для каждой печати",
- builtInFeatureCatalog: "Управление катушками, цветами и профилями K-фактора",
- builtInFeatureThirdParty: "Сторонние катушки можно связать с катушками инвентаря",
- amsSyncButton: "Синхронизировать вес из AMS",
- amsSyncTitle: "Синхронизация веса катушек из AMS",
- amsSyncMessage: "Вес всех катушек инвентаря будет заменён текущими значениями остатка из AMS подключённых принтеров. Используйте это для восстановления повреждённых данных о весе. Принтеры должны быть в сети.",
- amsSyncing: "Синхронизация...",
- amsSyncSuccess: "Синхронизировано катушек: {{synced}}, пропущено: {{skipped}}",
- amsSyncError: "Не удалось синхронизировать вес из AMS",
- spoolmanAmsSyncButton: "Синхронизировать вес Spoolman из AMS",
- spoolmanAmsSyncTitle: "Синхронизация веса катушек Spoolman из AMS",
- spoolmanAmsSyncMessage: "Вес всех катушек Spoolman будет обновлён по текущим значениям остатка из AMS подключённых принтеров. Принтеры должны быть в сети.",
- spoolmanAmsSyncing: "Синхронизация...",
- spoolmanAmsSyncSuccess: "Синхронизировано катушек: {{synced}}, пропущено: {{skipped}}",
- spoolmanAmsSyncError: "Не удалось синхронизировать вес Spoolman из AMS",
- spoolmanAmsSyncErrorUnreachable: "Не удалось синхронизировать вес Spoolman: сервер недоступен",
- spoolmanAmsSyncErrorNotConfigured: "Не удалось синхронизировать вес Spoolman: сервер не настроен",
- spoolmanNotConfigured: "Spoolman не настроен",
- spoolmanFilamentCatalogTitle: "Каталог филамента Spoolman",
- spoolmanFilamentCatalogDesc: "Названия филаментов и масса пустых катушек из Spoolman. Здесь можно изменить название и массу катушки; остальные свойства редактируются непосредственно в Spoolman.",
- spoolmanUrl: "Адрес Spoolman",
- spoolmanUrlHint: "Адрес сервера Spoolman, например http://localhost:7912",
- spoolmanConnected: "Подключён",
- spoolmanDisconnected: "Отключён",
- status: "Состояние",
- connect: "Подключить",
- disconnect: "Отключить",
- howSyncWorks: "Как работает синхронизация",
- syncInfoRfidOnly: "Синхронизируются только официальные RFID-катушки Bambu Lab",
- syncInfoAutoCreate: "Новые катушки автоматически создаются в Spoolman при первой синхронизации",
- syncInfoThirdPartySkipped: "Неофициальные катушки Bambu Lab, сторонние и перезаправленные катушки пропускаются",
- linkingExistingSpools: "Привязка существующих катушек",
- linkingExistingSpoolsDesc: "Чтобы привязать существующую катушку Spoolman к AMS, наведите указатель на слот AMS и нажмите «Привязать к Spoolman».",
- syncMode: "Режим синхронизации",
- syncModeAuto: "Автоматически",
- syncModeManual: "Только вручную",
- syncModeAutoDesc: "Данные AMS синхронизируются автоматически при обнаружении изменений",
- syncModeManualDesc: "Синхронизация выполняется только вручную",
- syncAmsData: "Синхронизировать данные AMS",
- syncAmsDataDesc: "Вручную синхронизировать данные AMS принтера со Spoolman",
- allPrinters: "Все принтеры",
- noDefaultPrinter: "Без принтера по умолчанию (спрашивать каждый раз)",
- sidebarOrder: "Порядок пунктов боковой панели",
- saveThumbnails: "Сохранять миниатюры",
- captureFinishPhoto: "Снимок после завершения",
- noPrintersConfigured: "Принтеры не настроены",
- archiveMode: {
- always: "Всегда создавать запись в архиве",
- never: "Не создавать запись в архиве",
- ask: "Спрашивать каждый раз",
- },
- checkForUpdatesLabel: "Проверять обновления",
- checkPrinterFirmware: "Проверять прошивку принтера",
- includeBetaUpdates: "Включать бета-версии",
- includeBetaUpdatesDesc: "Уведомлять о бета- и предварительных версиях при проверке обновлений",
- localLogin: {
- disable: "Отключить локальный вход по имени пользователя и паролю",
- disableHint: "Если включено, вход возможен только через провайдеров SSO. На LDAP это не влияет. Чтобы сохранить аварийный способ входа, задайте на сервере BAMBUDDY_LOCAL_LOGIN=true.",
- },
- enableRetry: "Включить повторные попытки",
- homeAssistantDescription: "Управление умными розетками через Home Assistant",
- environmentManagedLabel: "(управляется окружением)",
- autoEnabledViaEnv: "Автоматически включено переменными окружения",
- urlFromEnvReadOnly: "Значение задано переменной окружения HA_URL (только чтение)",
- tokenFromEnvReadOnly: "Значение задано переменной окружения HA_TOKEN (только чтение)",
- mqttConnectedTo: "Подключено к",
- prometheusDescription: "Экспортировать данные принтеров в формате Prometheus",
- noSmartPlugsTitle: "Умные розетки не настроены",
- noSmartPlugsDescription: "Добавьте умную розетку на базе Tasmota для учёта энергии и автоматизации питания.",
- noProvidersTitle: "Провайдеры не настроены",
- noProvidersDescription: "Добавьте провайдера для получения уведомлений.",
- noTemplatesAvailable: "Шаблоны отсутствуют. Перезапустите бэкенд, чтобы создать стандартные шаблоны.",
- apiPermissionView: "Просмотр состояния принтеров и очереди",
- apiPermissionEdit: "Добавление и удаление заданий из очереди печати",
- apiKeysEmptyTitle: "Ключей API нет",
- apiKeysEmptyDescription: "Создайте ключ API для интеграции с внешними сервисами.",
- noUsersFound: "Пользователи не найдены",
- noGroupsFound: "Группы не найдены",
- noGroupsAvailable: "Доступных групп нет",
- passwordsDoNotMatch: "Пароли не совпадают",
- systemGroupWarning: "Названия системных групп изменить нельзя",
- authDisabledTitle: "Аутентификация отключена",
- authDisabledFeature1: "Требовать вход для доступа к системе",
- authDisabledFeature2: "Создавать нескольких пользователей с групповыми разрешениями",
- authDisabledFeature3: "Управлять доступом с помощью более чем 50 отдельных разрешений",
- userHasCreated: "Этот пользователь создал:",
- userItemsQuestion: "Что сделать с этими объектами?",
- deleteUserConfirm: "Удалить этого пользователя?",
- actionCannotBeUndone: "Это действие нельзя отменить.",
- addFirstSmartPlug: "Добавить первую умную розетку",
- providers: "Провайдеры",
- log: "Журнал",
- testAll: "Проверить все",
- testResults: "Результаты проверки",
- testPassedCount: "Успешно: {{count}}",
- testFailedCount: "Ошибок: {{count}}",
- messageTemplates: "Шаблоны сообщений",
- messageTemplatesDescription: "Настройте тексты уведомлений для каждого события.",
- apiKeys: "Ключи API",
- apiKeysDescription: "Создавайте ключи API для внешних интеграций и вебхуков.",
- createKey: "Создать ключ",
- apiKeyCreated: "Ключ API успешно создан",
- apiKeyCopyWarning: "Скопируйте ключ сейчас — повторно он показан не будет!",
- useInApiBrowser: "Использовать в обозревателе API",
- apiKeyQrButton: "QR-код",
- apiKeyQrTitle: "Сканирование для настройки",
- apiKeyQrCaption: "Отсканируйте мобильным приложением, чтобы добавить этот сервер и ключ API.",
- apiKeyQrWarning: "QR-код содержит секретный ключ API — не передавайте его и не публикуйте снимок экрана.",
- createNewApiKey: "Создать ключ API",
- keyName: "Название ключа",
- keyNamePlaceholder: "например, Home Assistant или OctoPrint",
- readStatus: "Чтение состояния",
- readStatusDescription: "Просмотр состояния принтеров, очереди, библиотеки, архива и конвейеров слайсера",
- manageQueue: "Управление очередью",
- manageQueueDescription: "Добавление и удаление заданий из очереди печати. Вместе с «Управление библиотекой» — запуск конвейеров слайсера",
- controlPrinter: "Управление принтером",
- controlPrinterDescription: "Пауза, продолжение и остановка печати",
- manageLibrary: "Управление библиотекой",
- manageLibraryDescription: "Загрузка, переименование, удаление и слайсинг файлов библиотеки; импорт моделей из MakerWorld. Вместе с «Управление очередью» — запуск конвейеров слайсера",
- manageInventory: "Управление запасами",
- manageInventoryDescription: "Создание, изменение и удаление катушек и записей учёта. Требуется для киосков SpoolBuddy: сканирование NFC, показания весов и системные команды киоска.",
- manageMaintenance: "Управление обслуживанием",
- manageMaintenanceDescription: "Регистрация выполненного обслуживания, сброс счётчиков, изменение интервалов и управление каталогом видов обслуживания. Подходит для автоматизаций Home Assistant, которые отмечают, например, «сопло очищено», без предоставления более широких прав управления принтером.",
- manageArchives: "Управление архивом",
- manageArchivesDescription: "Изменение и удаление записей архива печати, включая старые задания и их вклад в статистику. Подходит для автоматизаций очистки истории печати.",
- manageProjects: "Управление проектами",
- manageProjectsDescription: "Создание, изменение и удаление проектов, а также добавление в них архивных заданий. Подходит для автоматизаций, распределяющих печати по проектам.",
- libraryBadge: "Библиотека",
- inventoryBadge: "Запасы",
- maintenanceBadge: "Обслуживание",
- archivesBadge: "Архив",
- projectsBadge: "Проекты",
- cloudAccess: "Разрешить доступ к облаку",
- cloudAccessDescription: "Чтение пресетов и филаментов Bambu Cloud от вашего имени. Требуется вход в Bambu Cloud.",
- cloudBadge: "Облако",
- updateEnergyCost: "Обновление тарифа на электроэнергию",
- updateEnergyCostDescription: "Разрешить этому ключу отправлять новую цену за кВт⋅ч методом POST в /settings/electricity-price. Полезно для автоматизаций динамического тарифа Home Assistant (Tibber, Octopus и т. п.). Это единственный параметр настроек, доступный для записи через ключ API.",
- energyCostBadge: "Энергия",
- legacyKey: "Устаревший",
- legacyKeyTooltip: "Создан до появления привязки к пользователям; пересоздайте для доступа к облаку",
- unnamedKey: "Ключ без названия",
- lastUsed: "Последнее использование",
- read: "Чтение",
- control: "Управление",
- createFirstKey: "Создать первый ключ",
- webhookEndpoints: "Конечные точки вебхуков",
- webhookApiKeyHint: "Передавайте ключ API в заголовке X-API-Key.",
- webhook: {
- getAllStatus: "Получить состояние всех принтеров",
- getSpecificStatus: "Получить состояние выбранного принтера",
- addToQueue: "Добавить в очередь печати",
- pausePrint: "Приостановить печать",
- resumePrint: "Продолжить печать",
- stopPrint: "Остановить печать",
- },
- apiBrowser: "Обозреватель API",
- apiBrowserDescription: "Просмотр и проверка всех доступных конечных точек API.",
- apiKeyForTesting: "Ключ API для проверки",
- apiKeyPlaceholder: "Вставьте ключ API для проверки защищённых конечных точек…",
- apiKeyHint: "Ключ будет передан в запросе в заголовке X-API-Key.",
- deleteApiKeyTitle: "Удаление ключа API",
- deleteApiKeyMessage: "Удалить этот ключ API? Все использующие его интеграции перестанут работать.",
- deleteKey: "Удалить ключ",
- amsDisplayThresholds: "Пороговые значения AMS",
- amsThresholdsDescription: "Настройте цветовые пороги индикаторов влажности и температуры AMS.",
- humidity: "Влажность",
- goodGreen: "Норма (зелёный)",
- fairOrange: "Допустимо (оранжевый)",
- aboveFairBad: "Выше допустимого порога отображается красным",
- fairAlsoDryingThreshold: "Этот порог также запускает автоматическую сушку, если она включена",
- fairBelowDryingFloor: "Автоматическая сушка не может достичь этого значения: при работающем нагревателе AMS показывает {{floor}} % и выше, поэтому каждый цикл завершался бы и тут же запускался снова. Установите значение выше {{floor}} %, если используете автоматическую сушку.",
- temperature: "Температура",
- goodBlue: "Норма (синий)",
- aboveFairHot: "Выше допустимого порога отображается красным как перегрев",
- tempAlarmThreshold: "Тревога выше",
- tempAlarmSeparateFromBand: "Уведомления отправляет только порог тревоги — «хорошо» и «допустимо» лишь окрашивают индикатор. Оставьте поле пустым, чтобы срабатывать по допустимому порогу, как раньше.",
- tempAlarmMustBePositive: "Порог 0 или меньше игнорируется — тревога срабатывает по допустимому порогу.",
- historyRetention: "Хранение истории",
- keepSensorHistory: "Хранить историю датчиков",
- historyRetentionDescription: "Более старые данные влажности и температуры будут удаляться автоматически",
- defaultPrintOptions: "Параметры печати по умолчанию",
- defaultPrintOptionsDescription: "Задайте значения по умолчанию для новых заданий. Их можно изменить отдельно в диалоге запуска печати.",
- defaultBedLevelling: "Калибровка стола",
- defaultBedLevellingDesc: "Автоматически выровнять стол перед печатью",
- defaultFlowCali: "Калибровка потока",
- defaultFlowCaliDesc: "Калибровать поток экструзии",
- defaultVibrationCali: "Калибровка вибраций",
- defaultVibrationCaliDesc: "Уменьшить артефакты звона",
- defaultLayerInspect: "Проверка первого слоя",
- defaultLayerInspectDesc: "Проверка первого слоя системой компьютерного зрения",
- defaultTimelapse: "Таймлапс",
- defaultTimelapseDesc: "Записывать таймлапс",
- defaultNozzleOffsetCali: "Калибровка смещения сопел",
- defaultNozzleOffsetCaliDesc: "Калибровать взаимное смещение сопел экструдеров",
- tempFanPresetsTitle: "Пресеты температуры и вентиляторов",
- tempFanPresetsDescription: "Настройте значения быстрого выбора в меню температуры и скорости вентиляторов карточки принтера. Кнопка «Выкл.» отображается всегда.",
- tempFanPresetsNozzle: "Температура сопла",
- tempFanPresetsBed: "Температура стола",
- tempFanPresetsChamber: "Температура камеры",
- tempFanPresetsFan: "Скорость вентилятора",
- tempFanPresetsReset: "Восстановить значения по умолчанию",
- concurrentUploadsTitle: "Одновременные загрузки",
- concurrentUploadsDescription: "Количество принтеров, на которые очередь может одновременно отправлять файлы. Передача файлов на принтеры выполняется медленно: крупная модель может загружаться несколько минут, а каждый принтер ждёт своей очереди. В большом парке увеличение этого значения сокращает ожидание последних принтеров в группе. Уменьшите его, если сеть или сервер Bambuddy плохо справляются с параллельной передачей.",
- concurrentUploadsLabel: "Одновременно загружать на принтеры",
- concurrentUploadsHelp: "Значение 1 отправляет файл только на один принтер за раз, как в прежнем режиме. По умолчанию: 4.",
- staggeredStart: "Поэтапный запуск",
- staggeredStartDescription: "Размер группы и интервал по умолчанию при поэтапном запуске партии на нескольких принтерах. Для каждой партии значения можно изменить в окне запуска печати.",
- preheatTitle: "Преднагрев и выдержка",
- preheatDescription: "Нагреть стол и, если поддерживается, камеру, затем выдержать температуру перед запуском каждого задания очереди. Полезно для инженерных пластиков (PA, ABS) на принтерах без активного нагревателя камеры: во время выдержки стол прогревает камеру излучением. Целевая температура стола берётся из файла печати; поведение камеры зависит от модели принтера.",
- preheatEnabled: "Включить преднагрев и выдержку",
- preheatEnabledDesc: "Если выключено, задания очереди отправляются сразу. Для каждого задания можно задать отдельное значение.",
- preheatFilamentTargetsLabel: "Целевая температура камеры по типу филамента (°C)",
- preheatFilamentTargetsHint: "Bambuddy выбирает наибольшее значение среди задействованных слотов AMS. Печать, для всех слотов которой получается 0 — PLA, PETG, TPU, PVA, — полностью пропускает прогрев и начинается сразу.",
- preheatFilamentTargetsReset: "Восстановить значения по умолчанию",
- preheatFilamentTargetsDefaultRow: "Прочее / без сопоставления",
- preheatMaxWait: "Максимальное ожидание (с)",
- preheatMaxWaitHelp: "Предельное время прогрева камеры, после которого процесс продолжится.",
- preheatSoak: "Выдержка (с)",
- preheatSoakHelp: "Время выдержки после достижения цели или истечения максимального ожидания.",
- preheatHardwareTitle: "Поведение по моделям принтеров:",
- preheatHardwareDetail: "H2C/H2D/H2D Pro/H2S/X2D/X1E активно нагревают камеру командой M141. X1C/P2S измеряют температуру камеры, но прогревают её только теплом стола. У P1S/P1P/A1/A1 Mini нет датчика камеры — применяется только таймер выдержки.",
- preheatPerItemDesc: "Нагревать стол и камеру перед запуском этого задания. По умолчанию используется общий переключатель «Настройки → Рабочий процесс».",
- preheatOverride_inherit: "Наследовать",
- preheatOverride_on: "Включено",
- preheatOverride_off: "Выключено",
- calibrationMode_off: "Выключено",
- calibrationMode_on: "Включено",
- calibrationMode_auto: "Авто",
- preheatTargetOverride: "Переопределение температуры камеры (°C; пусто — значение для филамента)",
- preheatTargetOverrideHelp: "0 нагревает стол и выполняет выдержку без камеры. Если поле пустое, печать, которой камера не нужна, полностью пропускает прогрев.",
- plateClear: "Подтверждение очистки пластины",
- requirePlateClear: "Требовать подтверждение очистки пластины",
- requirePlateClearDescription: "Если включено, планировщик не запускает следующее задание на принтере с завершённой печатью, пока не подтверждена очистка пластины. Отключение также скрывает индикатор состояния пластины и кнопку «Пластина очищена» на карточках принтеров.",
- keepBedWarm: 'Держать стол тёплым между печатями',
- keepBedWarmDesc: 'Пока ожидается подтверждение очистки пластины, стол поддерживается при указанной ниже температуре подогрева, чтобы камера оставалась тёплой, — или при температуре стола следующей печати, если она выше. Применяется только если следующая печать требует нагрева камеры (ASA, ABS, PA, PC и др.). Требуется включённое подтверждение очистки пластины.',
- keepWarmBedTemp: 'Температура стола при поддержании тепла (°C)',
- keepWarmBedTempHelp: 'Используется, когда стол служит для нагрева камеры: при поддержании тепла и при предварительном нагреве, если в файле печати нет температуры стола. Более высокая температура из файла всегда имеет приоритет.',
- keepWarmMaxMinutes: 'Прекратить подогрев через (минут)',
- keepWarmMaxMinutesHelp: 'Если пластина не освобождена за это время, нагреватели выключаются, а не остаются включёнными бесконечно.',
- gcodeInjection: "Вставка G-кода",
- gcodeInjectionDescription: "Настройте G-код, добавляемый в начало и/или конец печати для систем автоматического запуска, таких как Farmloop, SwapMod, AutoClear и Printflow 3D. Фрагменты задаются отдельно для каждой модели принтера и применяются, когда для задания очереди включена вставка G-кода.",
- gcodeInjectionNoPrinters: "Принтеры не найдены. Добавьте принтеры, чтобы настроить фрагменты G-кода.",
- gcodeStartLabel: "Начальный G-код",
- gcodeEndLabel: "Завершающий G-код",
- gcodeStartPlaceholder: "G-код, добавляемый перед началом печати…",
- gcodeEndPlaceholder: "G-код, добавляемый после завершения печати…",
- staggerGroupSize: "Размер группы",
- staggerGroupSizeHelp: "Количество принтеров, запускаемых одновременно",
- staggerInterval: "Интервал (мин)",
- staggerIntervalHelp: "Задержка между запуском групп",
- queueDrying: "Автоматическая сушка в очереди",
- queueDryingDescription: "Автоматически сушить филамент в AMS, когда принтер простаивает между заданиями очереди. Запуск определяется указанным выше порогом влажности.",
- queueDryingEnabled: "Включить автоматическую сушку",
- queueDryingEnabledDescription: "Автоматически запускать сушку AMS, когда принтер простаивает и влажность выше порога",
- queueDryingBlock: "Ожидать завершения сушки",
- queueDryingBlockDescription: "Блокировать очередь печати до завершения сушки. Если выключено, печать имеет приоритет.",
- ambientDryingEnabled: "Фоновая сушка",
- ambientDryingEnabledDescription: "Автоматически сушить филамент на простаивающих принтерах при превышении порога влажности, даже если очередь пуста.",
- printDryingEnabled: "Продолжать сушку во время печати",
- printDryingEnabledDescription: "Разрешить автоматической сушке продолжаться во время печати на поддерживаемом оборудовании (H2D, H2C, H2S, P2S, H2D Pro, X2D, X1C, A2L с актуальной прошивкой). Для защиты катушек температура автоматически ограничивается на 5 °C ниже пресета сушки в простое.",
- dryingPresets: "Пресеты сушки",
- dryingPresetsDescription: "Температура и длительность для каждого типа филамента. AMS 2 Pro использует более низкие температуры, AMS-HT поддерживает более высокие.",
- dryingFilament: "Филамент",
- humidityThresholds: "Пороги влажности",
- humidityThresholdsDescription: "Порог запуска автоматической сушки и предупреждений для каждого типа филамента. При смешанной загрузке AMS используется наименьший порог.",
- humidityThresholdCol: "Порог",
- humidityThresholdDefault: "По умолчанию (неизвестные типы)",
- printModal: "Окно запуска печати",
- expandCustomMapping: "Разворачивать пользовательское сопоставление",
- expandCustomMappingDescription: "При печати на нескольких принтерах сразу показывать развёрнутое сопоставление AMS для каждого принтера",
- authentication: "Аутентификация",
- authEnabledDescription: "Доступ к экземпляру защищён аутентификацией пользователей",
- authDisabledDescription: "Включите, чтобы требовать вход и управлять доступом пользователей",
- authDisabledMessage: "Включите аутентификацию, чтобы создавать учётные записи, управлять правами и защитить экземпляр Bambuddy.",
- enableAuthentication: "Включить аутентификацию",
- currentUser: "Текущий пользователь",
- changePassword: "Изменить пароль",
- admin: "Администратор",
- users: "Пользователи",
- addUser: "Добавить пользователя",
- groups: "Группы",
- addGroup: "Добавить группу",
- system: "Система",
- noDescription: "Нет описания",
- userCount: "Пользователей: {{count}}",
- permissionCount: "Разрешений: {{count}}",
- createUser: "Создать пользователя",
- username: "Имя пользователя",
- enterUsername: "Введите имя пользователя",
- password: "Пароль",
- enterPassword: "Введите пароль",
- passwordRequirements: "Не менее 8 символов: одна заглавная и одна строчная буква, одна цифра и один специальный символ.",
- confirmPassword: "Подтвердите пароль",
- confirmPasswordPlaceholder: "Повторите пароль",
- viewReleaseOnGitHub: "Открыть выпуск на GitHub",
- turnAllPlugsOn: "Включить все розетки",
- turnAllPlugsOff: "Выключить все розетки",
- clearNotificationLogs: "Очистить журнал уведомлений",
- clearLogsMessage: "Все записи журнала уведомлений старше 30 дней будут безвозвратно удалены. Это действие нельзя отменить.",
- clearLogs: "Очистить журнал",
- resetUiPreferences: "Сбросить настройки интерфейса",
- resetUiPreferencesMessage: "Будут сброшены порядок боковой панели, тема, компоновка панели, режимы отображения и сортировка. Принтеры, архивы и серверные настройки НЕ изменятся. После очистки страница перезагрузится.",
- resetPreferences: "Сбросить настройки",
- deleteGroupTitle: "Удаление группы",
- deleteGroupMessage: "Удалить эту группу? Пользователи группы потеряют назначенные ей разрешения.",
- deleteGroup: "Удалить группу",
- disableAuthenticationTitle: "Отключение аутентификации",
- disableAuthenticationMessage: "Отключить аутентификацию? Bambuddy станет доступен без входа. Все пользователи останутся в базе данных, но проверка учётных данных выполняться не будет.",
- disableAuthentication: "Отключить аутентификацию",
- configureBambuddy: "Настроить Bambuddy",
- systemDefault: "Системное значение",
- archiveSettings: "Настройки архива",
- newWindow: "Новое окно",
- embeddedOverlay: "Встроенное наложение",
- preferredSlicer: "Предпочитаемый слайсер",
- preferredSlicerDescription: "Слайсер для нарезки внутри приложения через API-службу",
- openInSlicerLabel: "Открывать в слайсере",
- openInSlicerInherit: "Как для API-слайсера",
- openInSlicerDescription: "Настольный слайсер, который открывается кнопкой «Открыть в слайсере». Оставьте «Как для API-слайсера», чтобы наследовать настройку, либо выберите другой локальный слайсер.",
- orcaslicerKnownIssuesWarning: "В OrcaSlicer 2.3.2 и 2.4.0-dev известны ошибки CLI, мешающие нарезке многих 3MF от Bambu: #12426 (сбой на раскрашенных файлах с несколькими экструдерами) и #13386 (слишком строгая проверка диапазонов параметров). До исправления рекомендуется Bambu Studio.",
- useSlicerApi: "Использовать API слайсера",
- useSlicerApiDescription: "Если включено, действия «Нарезать» открывают встроенное окно и обращаются к API-службе слайсера. Если выключено, файл передаётся настольному слайсеру через URI-схему.",
- slicerCard: "Слайсер",
- orcaslicerApiUrl: "URL API-службы OrcaSlicer",
- bambuStudioApiUrl: "URL API-службы Bambu Studio",
- slicerStallTimeout: 'Тайм-аут простоя слайсера (минуты)',
- slicerStallTimeoutDescription: 'Прервать нарезку, если sidecar не сообщает о прогрессе в течение этого времени. Тяжёлые модели, которые продолжают сообщать о прогрессе, не прерываются, сколько бы времени ни потребовалось. Для sidecar без отчёта о прогрессе это значение используется как общий лимит времени.',
- slicerApiUrlDescription: "URL контейнера API-службы слайсера. Оставьте пустым, чтобы использовать значения переменных окружения SLICER_API_URL или BAMBU_STUDIO_API_URL.",
- externalCameras: "Внешние камеры",
- costTracking: "Учёт затрат",
- billingEnabled: "Включить расчёты",
- billingEnabledDescription: "Списывать с пользователей стоимость печати и включить финансовые функции",
- printerKillSwitch: "Автоостановка несанкционированной печати",
- printerKillSwitchDescription: "Немедленно останавливает печать, начатую без разрешения.",
- financeBudgetReset: "Ежемесячный сброс финансового бюджета",
- financeBudgetResetDay: "День сброса",
- financeBudgetResetDayHelp: "В коротких месяцах сброс выполняется в последний день месяца.",
- financeBudgetResetTimezone: "Часовой пояс сброса",
- financeBudgetResetTimezoneHelp: "Начало бюджетного периода рассчитывается в этом часовом поясе.",
- rebuildLedger: "Пересчитать книгу кошелька",
- rebuildLedgerStarted: "Пересчёт книги запущен",
- rebuildLedgerConfirmTitle: "Пересчитать книгу кошелька?",
- rebuildLedgerConfirmMessage: "Книга кошелька будет пересчитана для исправления исторических значений баланса. Запускайте это действие только если понимаете его последствия.",
- rebuildLedgerInProgress: "Запуск пересчёта...",
- printsOnly: "Только печать",
- totalConsumption: "Общее потребление",
- dataManagement: "Управление данными",
- storageUsage: "Использование хранилища",
- storageUsageDescription: "Распределение занятого места по категориям",
- storageUsageTotal: "Всего",
- storageUsageErrors: "Ошибки",
- storageUsageOtherBreakdown: "Прочее (статические ресурсы, скрипты и конфигурационные файлы)",
- storageUsageSystem: "Система",
- storageUsageData: "Данные",
- storageUsageUnavailable: "Сведения об использовании хранилища недоступны",
- clearNotificationLogsDescription: "Удалить записи журнала уведомлений старше 30 дней",
- resetUiPreferencesDescription: "Сбросить порядок боковой панели, тему, режимы отображения и компоновку. Принтеры, архивы и настройки не изменятся.",
- enableHomeAssistant: "Включить Home Assistant",
- enableMqtt: "Включить MQTT",
- useTls: "Использовать TLS",
- enableMetricsEndpoint: "Включить endpoint метрик",
- availableMetrics: "Доступные метрики",
- editUser: "Изменить пользователя",
- deleteUserTitle: "Удаление пользователя",
- groupName: "Название группы",
- leaveEmptyForAnonymous: "Оставьте пустым для анонимного доступа",
- leaveEmptyForNoAuth: "Оставьте пустым, чтобы не использовать аутентификацию",
- enterNewPassword: "Введите новый пароль",
- confirmNewPassword: "Повторите новый пароль",
- enterGroupName: "Введите название группы",
- enterDescriptionOptional: "Введите описание (необязательно)",
- enterCurrentPassword: "Введите текущий пароль",
- enterNewPasswordMin6: "Введите новый пароль (не менее 6 символов)",
- toast: {
- keyCopied: "Ключ скопирован в буфер обмена",
- copyFailed: "Не удалось скопировать ключ",
- keyAddedToBrowser: "Ключ добавлен в обозреватель API",
- clearLogsFailed: "Не удалось очистить журнал",
- uiPreferencesReset: "Настройки интерфейса сброшены. Обновление страницы…",
- authDisabled: "Аутентификация отключена",
- authDisableFailed: "Не удалось отключить аутентификацию",
- apiKeyCreated: "Ключ API создан",
- apiKeyDeleted: "Ключ API удалён",
- userCreated: "Пользователь создан",
- userUpdated: "Пользователь обновлён",
- userDeleted: "Пользователь удалён",
- groupCreated: "Группа создана",
- groupUpdated: "Группа обновлена",
- groupDeleted: "Группа удалена",
- fillRequiredFields: "Заполните все обязательные поля",
- passwordsDoNotMatch: "Пароли не совпадают",
- passwordTooShort: "Пароль должен содержать не менее 8 символов",
- passwordNeedsUppercase: "Пароль должен содержать хотя бы одну заглавную букву",
- passwordNeedsLowercase: "Пароль должен содержать хотя бы одну строчную букву",
- passwordNeedsDigit: "Пароль должен содержать хотя бы одну цифру",
- passwordNeedsSpecial: "Пароль должен содержать хотя бы один специальный символ",
- enterGroupName: "Введите название группы",
- settingsSaved: "Настройки сохранены",
- noPermissionUpdate: "У вас нет прав на изменение настроек",
- cameraSettingsSaved: "Настройки камеры сохранены",
- enterCameraUrl: "Введите URL камеры",
- passwordChanged: "Пароль изменён",
- connectionFailed: "Не удалось подключиться",
- testFailed: "Проверка завершилась ошибкой",
- cameraConnected: "Камера подключена{{resolution}}",
- cameraConnectedCoalesced: "Камера подключена{{resolution}} (используется уже выполняющийся захват)",
- },
- testConnection: "Проверить подключение",
- catalog: {
- spoolCatalog: "Каталог катушек",
- spoolCatalogDescription: "Масса пустых катушек по производителю и типу. Используется для автоматического определения массы при добавлении катушек.",
- searchCatalog: "Поиск по каталогу…",
- addNewEntry: "Добавить запись",
- namePlaceholder: "Название (например, Bambu Lab — пластик)",
- weight: "Масса",
- type: "Тип",
- default: "Стандартная",
- custom: "Пользовательская",
- noMatch: "Ничего не найдено",
- empty: "Каталог пуст",
- deleteEntry: "Удалить запись",
- deleteConfirm: "Удалить «{{name}}»?",
- resetCatalog: "Сбросить каталог",
- resetConfirm: "Сбросить каталог к исходному состоянию? Все пользовательские записи будут удалены.",
- loadFailed: "Не удалось загрузить каталог катушек",
- nameWeightRequired: "Укажите название и массу",
- entryAdded: "Запись добавлена",
- addFailed: "Не удалось добавить запись",
- entryUpdated: "Запись обновлена",
- updateFailed: "Не удалось обновить запись",
- entryDeleted: "Запись удалена",
- deleteFailed: "Не удалось удалить запись",
- resetSuccess: "Каталог сброшен к исходному состоянию",
- resetFailed: "Не удалось сбросить каталог",
- exported: "Экспортировано записей: {{count}}",
- imported: "Импортировано записей: {{added}}, пропущено: {{skipped}}",
- importFailed: "Не удалось импортировать: неверный формат JSON",
- exportTooltip: "Экспортировать каталог в JSON",
- importTooltip: "Импортировать каталог из JSON",
- resetTooltip: "Сбросить к исходному состоянию",
- selectedCount: "Выбрано: {{count}}",
- deleteSelected: "Удалить выбранные",
- bulkDeleteConfirm: "Удалить выбранные записи ({{count}})?",
- bulkDeleted: "Удалено записей: {{count}}",
- bulkDeleteFailed: "Не удалось удалить записи",
- material: "Материал",
- spoolWeight: "Масса катушки",
- color: "Цвет",
- updateSpoolWeight: "Обновить массу катушки",
- filamentUpdated: "Филамент обновлён",
- filamentUpdateFailed: "Не удалось обновить филамент",
- filamentUpdateInvalid: "Некорректные данные филамента",
- keepExistingSpoolWeight: "Сохранить прежнюю массу у существующих катушек",
- keepExistingSpoolWeightDesc: "Катушки, уже созданные с этим типом филамента, сохранят прежнюю массу тары. Для новых катушек будет использоваться обновлённое значение.",
- applyToAllSpools: "Применить ко всем катушкам",
- applyToAllSpoolsDesc: "Все расчёты массы для катушек этого типа немедленно начнут использовать новую массу тары.",
- },
- colorCatalog: {
- title: "Каталог цветов",
- description: "Цвета филамента по производителю и материалу. Используются для автоматического определения цвета при добавлении катушек.",
- searchColors: "Поиск цветов…",
- allManufacturers: "Все производители",
- addNewColor: "Добавить цвет",
- manufacturer: "Производитель",
- colorName: "Название цвета",
- hex: "HEX",
- materialOptional: "Материал (необязательно)",
- showing: "Показано {{filtered}} из {{total}} цветов",
- noMatch: "Подходящие цвета не найдены",
- empty: "Каталог цветов пуст",
- deleteColor: "Удалить цвет",
- deleteConfirm: "Удалить «{{name}}»?",
- resetCatalog: "Сбросить каталог цветов",
- resetConfirm: "Сбросить каталог к исходному состоянию? Все пользовательские цвета будут удалены.",
- sync: "Синхронизировать",
- starting: "Запуск…",
- syncTooltip: "Синхронизировать с FilamentColors.xyz (более 2000 цветов; может занять около минуты)",
- loadFailed: "Не удалось загрузить каталог цветов",
- fieldsRequired: "Укажите производителя, название цвета и HEX-код",
- colorAdded: "Цвет добавлен",
- addFailed: "Не удалось добавить цвет",
- colorUpdated: "Цвет обновлён",
- updateFailed: "Не удалось обновить цвет",
- colorDeleted: "Цвет удалён",
- deleteFailed: "Не удалось удалить цвет",
- resetSuccess: "Каталог цветов сброшен к исходному состоянию",
- resetFailed: "Не удалось сбросить каталог цветов",
- syncUpToDate: "Каталог уже актуален (проверено цветов: {{count}})",
- syncComplete: "Добавлено новых цветов: {{added}}, уже существовало: {{skipped}}",
- syncError: "Ошибка синхронизации",
- syncFailed: "Не удалось синхронизировать каталог с FilamentColors.xyz",
- exported: "Экспортировано цветов: {{count}}",
- imported: "Импортировано цветов: {{added}}, пропущено: {{skipped}}",
- importFailed: "Не удалось импортировать: неверный формат JSON",
- selectedCount: "Выбрано: {{count}}",
- deleteSelected: "Удалить выбранные",
- bulkDeleteConfirm: "Удалить выбранные цвета ({{count}})?",
- bulkDeleted: "Удалено цветов: {{count}}",
- bulkDeleteFailed: "Не удалось удалить цвета",
- },
- dateFormat: "Формат даты",
- dateFormatUs: "США (ММ/ДД/ГГГГ)",
- dateFormatEu: "Европа (ДД/ММ/ГГГГ)",
- dateFormatIso: "ISO (ГГГГ-ММ-ДД)",
- timeFormat: "Формат времени",
- timeFormat12: "12-часовой (3:30 PM)",
- timeFormat24: "24-часовой (15:30)",
- defaultPrinter: "Принтер по умолчанию",
- defaultPrinterDescription: "Предварительно выбирать этот принтер при загрузке файлов, повторной печати и других операциях.",
- slicerBambuStudio: "Bambu Studio",
- slicerOrcaSlicer: "OrcaSlicer",
- sidebarOrderDescription: "Изменяйте порядок, видимость и пользовательские ссылки в настройках боковой панели.",
- setDefault: "Сделать стандартным",
- sidebarOrderSetDefaultHint: "Текущий порядок меню будет применяться к пользователям, которые ещё не настроили его самостоятельно.",
- sidebarDefaultSet: "Стандартный порядок меню сохранён.",
- sidebarDefaultCleared: "Стандартный порядок меню сброшен.",
- sidebarDefaultFailed: "Не удалось сохранить стандартный порядок меню.",
- reset: "Сбросить",
- darkMode: "Тёмная тема",
- lightMode: "Светлая тема",
- active: "(активна)",
- background: "Фон",
- accent: "Акцент",
- style: "Стиль",
- bgNeutral: "Нейтральный",
- bgWarm: "Тёплый",
- bgCool: "Холодный",
- bgOled: "Чёрный OLED",
- bgSlate: "Сланцево-синий",
- bgForest: "Лесной зелёный",
- accentGreen: "Зелёный",
- accentTeal: "Бирюзовый",
- accentBlue: "Синий",
- accentOrange: "Оранжевый",
- accentPurple: "Фиолетовый",
- accentRed: "Красный",
- styleClassic: "Классический",
- styleGlow: "Свечение",
- styleVibrant: "Насыщенный",
- themeToggleHint: "Переключайте тёмную, светлую и системную тему значком в боковой панели.",
- progressInTitle: "Прогресс во вкладке",
- progressInTitleDescription: "Показывает процент текущей печати и кольцо прогресса во вкладке браузера.",
- autoArchivePrints: "Автоматически архивировать печать",
- autoArchiveDescription: "Автоматически сохранять 3MF после завершения печати",
- saveThumbnailsDescription: "Извлекать и сохранять изображения предпросмотра из 3MF",
- captureFinishPhotoDescription: "Сделать снимок камерой принтера после завершения печати. Во время печати Bambuddy записывает короткий таймлапс, чтобы получить кадр до опускания стола. Если таймлапс был включён для задания, файл сохранится; иначе после получения снимка он будет автоматически удалён.",
- finishPhotoRestorePlate: "Поднимать стол для финального снимка",
- finishPhotoRestorePlateDescription: "По окончании печати принтер опускает стол примерно на 100 мм, и готовая модель оказывается ниже кадра камеры. Bambuddy поднимает стол обратно чуть выше последнего напечатанного слоя, делает снимок и снова опускает его. Пропускается, если высота печати неизвестна или в очереди есть другое задание.",
- ffmpegNotInstalled: "ffmpeg не установлен",
- ffmpegRequired: "Для захвата изображения требуется ffmpeg. Установите его командой <brew>brew install ffmpeg</brew> в macOS или <apt>apt install ffmpeg</apt> в Linux.",
- camera: "Камера",
- cameraViewMode: "Режим просмотра камеры",
- cameraOverlayDescription: "Камера открывается поверх основного экрана в окне с изменяемым размером",
- cameraWindowDescription: "Камера открывается в отдельном окне браузера",
- externalCamerasDescription: "Настройка внешних камер вместо встроенной камеры принтера. Поддерживаются потоки MJPEG, RTSP, HTTP-снимки и USB-камеры V4L2. Внешняя камера используется для просмотра в реальном времени и снимков после завершения печати.",
- cameraPlaceholderUsb: "Путь к устройству (/dev/video0)",
- cameraPlaceholderUrl: "URL камеры (rtsp://… или http://…)",
- cameraTypeMjpeg: "Поток MJPEG",
- cameraTypeRtsp: "Поток RTSP",
- cameraTypeSnapshot: "HTTP-снимок",
- cameraTypeUsb: "USB-камера (V4L2)",
- cameraSnapshotUrl: "URL снимка (необязательно)",
- cameraSnapshotUrlPlaceholder: "http://192.168.1.61:1984/api/frame.jpeg?src=printer",
- cameraSnapshotUrlHelp: "URL одиночного кадра для миниатюр уведомлений, снимков после печати, кадров послойного таймлапса и распознавания пластины. Для таймлапса и распознавания пластины должны быть отдельно включены соответствующие настройки принтера; этот URL задаёт лишь источник изображения. Оставьте пустым, чтобы получать кадры из указанного выше видеопотока. Полезно для go2rtc (/api/frame.jpeg) и IP-камер с отдельным endpoint снимка.",
- cameraRotation: "Поворот",
- test: "Проверить",
- connected: "Подключено",
- disconnected: "Отключено",
- currency: "Валюта",
- defaultFilamentCost: "Стоимость филамента по умолчанию (за кг)",
- electricityCost: "Стоимость электроэнергии за кВт·ч",
- energyDisplayMode: "Режим отображения энергии",
- energyModePrintDescription: "На панели показывается сумма энергии, израсходованной во время печати",
- energyModeTotalDescription: "На панели показывается полный расход энергии по данным умных розеток",
- fileManager: "Файловый менеджер",
- createArchiveEntry: "Создавать запись в архиве при печати",
- createArchiveEntryDescription: "При запуске печати из файлового менеджера при необходимости создавать запись в архиве",
- lowDiskSpaceWarning: "Предупреждение о нехватке места",
- lowDiskSpaceDescription: "Показывать предупреждение, когда свободного места остаётся меньше указанного порога",
- printerFirmware: "Прошивка принтера",
- checkFirmwareDescription: "Проверять наличие обновлений прошивки принтера у Bambu Lab",
- bambuddySoftware: "Программное обеспечение Bambuddy",
- autoCheckDescription: "Автоматически проверять наличие новых версий при запуске",
- checkNow: "Проверить сейчас",
- updateAvailableVersion: "Доступно обновление: v{{version}}",
- releaseNotes: "Примечания к выпуску",
- updateViaDocker: "Обновление через Docker Compose:",
- composeDirectory: "Каталог Compose",
- composeDirectoryHint: "Каталог с вашим docker-compose.yml. Оставьте пустым, чтобы не добавлять cd.",
- copyUpdateCommand: "Скопировать команду обновления",
- updateViaHomeAssistant: "Обновления устанавливаются через Home Assistant Supervisor. Чтобы установить новую версию, откройте в Home Assistant: Настройки → Дополнения → Bambuddy.",
- updateViaWindowsInstaller: "В Windows обновление выполняется повторным запуском установщика. Скачайте новую версию ниже — данные, настройки и принтеры сохранятся.",
- downloadWindowsInstaller: "Скачать установщик v{{version}}",
- installUpdate: "Установить обновление",
- latestVersionRunning: "Установлена последняя версия",
- failedToCheckUpdates: "Не удалось проверить обновления: {{error}}",
- backupRestore: "Резервное копирование и восстановление",
- backupRestoreDescription: "Экспорт и импорт настроек, а также резервное копирование в GitHub",
- goToBackup: "Перейти к резервным копиям",
- externalUrl: "Внешний URL",
- externalUrlDescription: "Внешний адрес, по которому доступен Bambuddy. Используется для изображений в уведомлениях и внешних интеграций.",
- bambuddyUrl: "URL Bambuddy",
- externalUrlHint: "Укажите протокол и порт, например http://192.168.1.100:8000",
- ftpRetry: "Повтор FTP-операций",
- ftpRetryDescription: "Повторять FTP-операции при нестабильном Wi‑Fi принтера. Применяется к скачиванию 3MF и таймлапсов, загрузке заданий и обновлению прошивки.",
- autoRetryDescription: "Автоматически повторять неудачные FTP-операции",
- retryAttempts: "Количество попыток",
- retryDelay: "Задержка между попытками",
- connectionTimeout: "Тайм-аут подключения",
- time_one: "{{count}} раз",
- time_other: "{{count}} раз",
- second_one: "{{count}} секунда",
- second_other: "{{count}} секунд",
- nSeconds: "{{count}} секунд",
- increaseForWeakWifi: "Увеличьте для принтеров со слабым Wi‑Fi",
- homeAssistant: "Home Assistant",
- homeAssistantFullDescription: "Подключение к Home Assistant для управления умными розетками через REST API. Поддерживаются сущности switch, light, input_boolean и script.",
- homeAssistantUrl: "URL Home Assistant",
- longLivedAccessToken: "Долгосрочный токен доступа",
- haTokenHint: "Создайте токен в Home Assistant: Профиль → Долгосрочные токены доступа → Создать токен",
- connectionSuccessful: "Подключение установлено",
- connectionFailed: "Подключиться не удалось",
- haConnectionSuccess: "Подключение к Home Assistant установлено.",
- haConnectionFailed: "Не удалось подключиться к Home Assistant.",
- mqttPublishing: "Публикация MQTT",
- mqttDescription: "Публикация событий Bambuddy во внешнем MQTT-брокере для интеграции с Node-RED, Home Assistant и другими системами автоматизации.",
- mqttEnableDescription: "Публиковать события во внешнем MQTT-брокере",
- brokerHostname: "Имя хоста брокера",
- port: "Порт",
- usernameOptional: "Имя пользователя (необязательно)",
- passwordOptional: "Пароль (необязательно)",
- topicPrefix: "Префикс топиков",
- topicPrefixHint: "Топики будут иметь вид {{prefix}}/printers/<serial>/status и т. п.",
- prometheusMetrics: "Метрики Prometheus",
- prometheusEndpointDescription: "Публиковать метрики принтеров по адресу <code>/api/v1/metrics</code> для мониторинга в Prometheus/Grafana.",
- bearerTokenOptional: "Bearer-токен (необязательно)",
- bearerTokenHint: "Если задан, запросы должны содержать <code>Authorization: Bearer <token></code>",
- metricsConnectionStatus: "Состояние подключения",
- metricsPrinterState: "Состояние принтера (ожидание, печать и т. п.)",
- metricsPrintProgress: "Прогресс печати, 0–100 %",
- metricsBedTemp: "Температура стола",
- metricsNozzleTemp: "Температура сопла",
- metricsPrintsTotal: "Общее количество заданий по результату",
- metricsMore: "…и другие данные: слои, вентиляторы, очередь, расход филамента",
- smartPlugsDescription: "Подключение умных розеток Tasmota или Home Assistant для автоматического управления питанием принтеров и учёта энергопотребления.",
- allOn: "Включить все",
- allOff: "Выключить все",
- addSmartPlug: "Добавить умную розетку",
- energySummary: "Сводка энергопотребления",
- currentPower: "Текущая мощность",
- plugsOnline: "Розеток в сети: {{reachable}}/{{total}}",
- today: "Сегодня",
- yesterday: "Вчера",
- total: "Всего",
- enablePlugsForSummary: "Включите розетки, чтобы увидеть сводку энергопотребления",
- addNotificationProvider: "Добавить",
- systemBadge: "(системная)",
- creating: "Создание…",
- changing: "Изменение…",
- deleteUserAndItems: "Удалить пользователя И его объекты",
- deleteUserKeepItems: "Удалить пользователя, объекты оставить без владельца",
- ok: "ОК",
- twoFa: {
- totpTitle: "Приложение-аутентификатор (TOTP)",
- totpDesc: "Использовать приложение-аутентификатор, например Google Authenticator, Aegis или Authy.",
- emailOtpTitle: "Одноразовый код по электронной почте",
- emailOtpDesc: "Отправлять одноразовый код на {{email}} при входе.",
- emailOtpNoEmail: "Добавьте адрес электронной почты в учётную запись, чтобы включить этот способ.",
- addEmailFirst: "В вашей учётной записи нет адреса электронной почты. Перед включением одноразовых кодов попросите администратора добавить его.",
- setupTotp: "Настроить приложение-аутентификатор",
- setupAuthApp: "Настроить приложение-аутентификатор",
- setupInstructions: "Отсканируйте QR-код приложением-аутентификатором, затем подтвердите настройку кодом.",
- manualEntry: "Не получается отсканировать? Введите этот секрет вручную:",
- scannedContinue: "Код отсканирован — продолжить",
- enterCodeToConfirm: "Для подтверждения настройки введите шестизначный код из приложения-аутентификатора.",
- activate: "Активировать",
- disableTotp: "Отключить аутентификатор",
- disableConfirmHint: "Чтобы отключить аутентификатор, введите действующий код TOTP или резервный код.",
- totpDisabled: "Приложение-аутентификатор отключено.",
- emailOtpEnabled: "Одноразовые коды по электронной почте включены.",
- emailOtpDisabled: "Одноразовые коды по электронной почте отключены.",
- smtpRequired: "Сначала настройте и проверьте SMTP.",
- invalidCode: "Неверный код. Повторите попытку.",
- enableEmailOtp: "Включить одноразовые коды по электронной почте",
- disableEmailOtp: "Отключить одноразовые коды по электронной почте",
- emailSetupEnterCode: "Код подтверждения отправлен на вашу электронную почту. Введите его ниже, чтобы подтвердить доступ к этому почтовому ящику.",
- verifyAndEnable: "Подтвердить и включить",
- emailDisablePasswordHint: "Чтобы подтвердить отключение одноразовых кодов по электронной почте, введите пароль учётной записи.",
- passwordPlaceholder: "Введите пароль",
- backupCodesTitle: "Сохраните резервные коды",
- backupCodesWarning: "Сохраните эти коды в надёжном месте. Каждый код можно использовать только один раз; повторно они показаны не будут.",
- backupCodesRemaining: "Осталось резервных кодов: {{count}}",
- savedCodes: "Я сохранил коды",
- regenBackup: "Создать новые резервные коды",
- regenBackupHint: "Введите текущий код TOTP, чтобы создать 10 новых резервных кодов. Все существующие резервные коды станут недействительными.",
- newBackupCodes: "Новые резервные коды",
- linkedAccounts: "Связанные учётные записи SSO",
- linkedAccountsDesc: "Эти внешние провайдеры идентификации связаны с вашей учётной записью.",
- oidcUnlinked: "Учётная запись отсоединена.",
- },
- sessionPolicy: {
- title: "Политика сеансов",
- description: "Максимальный срок действия сеанса для новых входов пользователей. Уже выданные токены сохраняют исходный срок действия.",
- preset24h: "24 часа",
- preset7d: "7 дней",
- preset30d: "30 дней",
- customHoursLabel: "Срок действия сеанса в часах",
- hoursSuffix: "часов",
- warning: "Длительные сеансы снижают защиту автоматическим выходом. Рекомендуется только для доверенных установок с одним пользователем.",
- },
- oidc: {
- title: "Провайдеры SSO / OIDC",
- desc: "Настройка провайдеров OpenID Connect для единого входа через внешние службы идентификации.",
- addProvider: "Добавить провайдера",
- newProvider: "Новый провайдер",
- empty: "Провайдеры OIDC пока не настроены.",
- created: "Провайдер создан.",
- updated: "Провайдер обновлён.",
- deleted: "Провайдер удалён.",
- refreshIcon: "Обновить значок",
- removeIcon: "Удалить значок",
- iconRefreshed: "Значок обновлён.",
- iconRemoved: "Значок удалён.",
- iconFetchFailed: "Не удалось получить значок по URL провайдера.",
- deleteTitle: "Удалить провайдера",
- deleteMessage: "Удалить «{{name}}»? Все связанные учётные записи пользователей будут отсоединены.",
- form: {
- name: "Отображаемое имя",
- issuerUrl: "URL издателя",
- clientId: "Идентификатор клиента",
- clientSecret: "Секрет клиента",
- scopes: "Области доступа",
- iconUrl: "URL значка (необязательно)",
- enabled: "Включён",
- autoCreate: "Автоматически создавать пользователей",
- autoCreateDesc: "Автоматически создавать локальную учётную запись при первом входе.",
- autoLink: "Автоматически связывать существующие учётные записи",
- autoLinkDesc: "При первом входе связывать локальные учётные записи по совпадающему адресу электронной почты.",
- secretHint: "оставьте пустым, чтобы сохранить текущий",
- secretPlaceholder: "новый секрет",
- emailClaim: "Поле электронной почты",
- emailClaimDesc: "Поле JWT, используемое как адрес электронной почты. Для Azure Entra ID, который не передаёт email_verified, используйте preferred_username или upn. Указывайте только доверенные поля.",
- emailClaimPlaceholder: "email",
- emailClaimCustomClaimAutoLinkWarning: "Пользовательское поле безопасно для автоматического связывания только тогда, когда его значение назначается администратором арендатора, например upn или preferred_username в Azure Entra ID. Не включайте автоматическое связывание, если ваш IdP позволяет пользователям самостоятельно задавать это поле.",
- requireEmailVerified: "Требовать подтверждённый адрес электронной почты",
- requireEmailVerifiedDesc: "Принимать адрес электронной почты только в том случае, если провайдер пометил его как подтверждённый.",
- requireEmailVerifiedWarning: "Предупреждение: адрес будет принят даже без подтверждения. Используйте только с доверенными провайдерами.",
- requireEmailVerifiedAutoLink: "Чтобы изменить этот параметр, сначала отключите автоматическое связывание.",
- defaultGroup: "Группа по умолчанию",
- defaultGroupDesc: "Группа для автоматически созданных пользователей. Если не задана, используется группа «Наблюдатели».",
- defaultGroupViewersFallback: "Наблюдатели (по умолчанию)",
- autologin: "Автоматический вход",
- autologinDesc: "Сразу перенаправлять неавторизованных посетителей к этому провайдеру. Этот флаг может быть установлен только у одного провайдера.",
- },
- },
- encryption: {
- title: "Состояние шифрования MFA",
- enabledFromEnv: "Шифрование данных включено; ключ получен из переменной окружения MFA_ENCRYPTION_KEY",
- enabledFromFile: "Шифрование данных включено; ключ загружен из каталога данных",
- enabledGenerated: "Шифрование данных включено с автоматически созданным ключом",
- notConfigured: "Шифрование хранимых данных не настроено",
- notConfiguredDesc: "Секреты TOTP и client_secret провайдеров OIDC хранятся открытым текстом. Задайте MFA_ENCRYPTION_KEY или перезапустите Bambuddy с доступным для записи каталогом данных, чтобы ключ был создан автоматически.",
- allEncrypted: "Все секреты MFA зашифрованы при хранении.",
- legacyRowsLabel: "Старые записи открытым текстом",
- encryptedRowsLabel: "Зашифрованные записи",
- legacyRowsWarning: "Обнаружено старых записей открытым текстом: {{count}}. Чтобы перенести их в зашифрованное хранилище, повторно сохраните провайдера OIDC или заново подключите приложение-аутентификатор пользователя.",
- backupHint: "Автоматически созданный ключ хранится в DATA_DIR/.mfa_encryption_key и включается в локальные ZIP-копии. Храните резервные копии в безопасном месте либо задайте MFA_ENCRYPTION_KEY явно.",
- decryptionBrokenTitle: "Отсутствует ключ шифрования",
- decryptionBrokenError: "Невозможно расшифровать записей: {{count}}, поскольку ключ шифрования больше недоступен. Для восстановления верните прежний MFA_ENCRYPTION_KEY или файл DATA_DIR/.mfa_encryption_key.",
- migrationErrorWarning: "Не удалось повторно зашифровать старых записей при запуске: {{count}}. Проверьте журнал сервера и перезапустите Bambuddy для повторной попытки.",
- },
- pipelineLimits: {
- title: "Ограничения конвейеров слайсера",
- maxCopiesLabel: "Максимум копий за запуск",
- maxCopiesDesc: "Верхний предел количества копий, которое оператор может запросить при запуске конвейера. Жёсткое серверное ограничение — 1000.",
- },
- pipelines: {
- title: "Конвейеры слайсера",
- subtitle: "Повторно используемые наборы профилей: принтер, процесс, филаменты и тип стола. Сохраните набор в окне нарезки и применяйте его к следующему файлу одним нажатием.",
- loading: "Загрузка конвейеров...",
- loadError: "Не удалось загрузить конвейеры.",
- confirmDelete: "Удалить этот конвейер? Отменить действие нельзя.",
- staleWarning: "Один или несколько связанных профилей больше не существуют. Чтобы исправить конвейер, повторно сохраните его из окна нарезки.",
- empty: {
- title: "Конвейеров пока нет.",
- howto: "Откройте окно нарезки любого файла, выберите принтер, процесс, филаменты и тип стола, затем нажмите «Сохранить как конвейер». Сохранённые конвейеры появятся здесь.",
- },
- field: {
- name: "Название конвейера",
- description: "Описание",
- targetPrinter: "Целевой принтер",
- noTarget: "— Цель не задана —",
- targetKind: "Тип цели",
- targetKindSpecific: "Конкретный принтер",
- targetKindClass: "Класс принтеров",
- targetModelClass: "Модель принтера",
- fanoutStrategy: "Стратегия распределения",
- fanout: {
- max_parallel: "Максимум параллельно — распределять между любыми свободными подходящими принтерами",
- round_robin: "По кругу — последовательно чередовать подходящие принтеры",
- fill_one_first: "Сначала один — назначить все копии одному принтеру",
- },
- fanoutShort: {
- max_parallel: "параллельно",
- round_robin: "по кругу",
- fill_one_first: "сначала один",
- },
- },
- action: {
- save: "Сохранить",
- cancel: "Отмена",
- rename: "Переименовать",
- delete: "Удалить",
- },
- slot: {
- printer: "Принтер",
- process: "Процесс",
- filament: "Филамент",
- filamentN: "Филамент {{n}}",
- filamentAll: "Все слоты: {{n}}",
- bed: "Стол",
- },
- group: {
- profiles: "Профили",
- filaments: "Филаменты",
- },
- searchPlaceholder: "Поиск конвейеров...",
- filterTargetType: "Фильтр по типу цели",
- filterTarget: "Фильтр по цели",
- filter: {
- all: "Все цели",
- noTarget: "Цель не задана",
- count: "{{shown}} из {{total}}",
- noMatches: "Нет конвейеров, соответствующих текущим фильтрам.",
- },
- toast: {
- saved: "Конвейер сохранён",
- saveFailed: "Не удалось сохранить",
- deleted: "Конвейер удалён",
- deleteFailed: "Не удалось удалить",
- },
- noTargetHint: "Чтобы запустить, задайте целевой принтер",
- noTargetWarning: "Перед запуском конвейера задайте целевой принтер.",
- runs: {
- lastRun: "Последний запуск",
- status: {
- queued: "в очереди",
- slicing: "нарезка",
- dispatching: "назначение",
- in_progress: "печать",
- completed: "завершено",
- failed: "ошибка",
- partial_failure: "частичная ошибка",
- cancelled: "отменено",
- },
- },
- },
- },
- notification: {
- printStarted: {
- title: "Печать началась",
- body: "{{printer}}: началась печать файла {{filename}}",
- },
- printCompleted: {
- title: "Печать завершена",
- body: "{{printer}}: файл {{filename}} успешно напечатан",
- },
- printFailed: {
- title: "Ошибка печати",
- body: "{{printer}}: печать файла {{filename}} завершилась ошибкой",
- },
- printStopped: {
- title: "Печать остановлена",
- body: "{{printer}}: печать файла {{filename}} остановлена",
- },
- printProgress: {
- title: "Ход печати",
- body: "{{printer}}: файл {{filename}} напечатан на {{percent}}%",
- },
- printerOffline: {
- title: "Принтер не в сети",
- body: "{{printer}} не в сети",
- },
- printerError: {
- title: "Ошибка принтера",
- body: "{{printer}}: {{error}}",
- },
- filamentLow: {
- title: "Заканчивается филамент",
- body: "{{printer}}: осталось мало филамента",
- },
- maintenanceDue: {
- title: "Требуется обслуживание",
- body: "{{printer}}: требуют внимания: {{items}}",
- },
- },
- errors: {
- generic: "Что-то пошло не так",
- networkError: "Ошибка сети. Проверьте подключение.",
- notFound: "Не найдено",
- unauthorized: "Доступ не разрешён",
- serverError: "Ошибка сервера",
- validationError: "Проверьте введённые данные",
- printerConnectionFailed: "Не удалось подключиться к принтеру",
- saveFailed: "Не удалось сохранить изменения",
- deleteFailed: "Не удалось удалить",
- loadFailed: "Не удалось загрузить данные",
- },
- hmsErrors: {
- title: "Ошибки — {{name}}",
- noErrors: "Ошибок нет",
- viewOnWiki: "Открыть в Bambu Lab Wiki",
- mqttVerifyFailedRemedy: "Включите режим разработчика на принтере, перезагрузите принтер и запустите задание снова.",
- unknownCode: "Неизвестный код HMS — подробности см. в Bambu Lab Wiki.",
- clearInstructions: "Устраните ошибки на принтере, чтобы они исчезли из этого списка.",
- clearErrors: "Очистить ошибки",
- clearSuccess: "Ошибки HMS очищены",
- clearFailed: "Не удалось очистить ошибки HMS",
- actionSuccess: "Команда отправлена принтеру",
- actionFailed: "Не удалось отправить команду",
- runoutExpectedSlot: "Филамент закончился в {{ranOut}}. Теперь принтер ожидает совместимый филамент в {{expected}}. Установите катушку в {{expected}}, затем выберите «Повторить».",
- runoutExpectedSlotOnly: "Принтер ожидает совместимый филамент в {{expected}}. Установите туда катушку, затем выберите «Повторить».",
- runoutSlotUnknown: "Филамент закончился, и печать приостановлена. Bambuddy не смог определить, какой слот теперь ожидает принтер. Проверьте запрошенный слот на экране принтера.",
- actions: {
- RESUME_PRINTING: "Продолжить печать",
- RESUME_PRINTING_DEFECTS: "Продолжить (дефекты допустимы)",
- RESUME_PRINTING_PROBELM_SOLVED: "Продолжить (проблема устранена)",
- STOP_PRINTING: "Остановить печать",
- CHECK_ASSISTANT: "Проверить помощник",
- FILAMENT_EXTRUDED: "Филамент выдавливается — продолжить",
- RETRY_FILAMENT_EXTRUDED: "Филамент ещё не выходит — повторить",
- CONTINUE: "Готово — продолжить",
- LOAD_VIRTUAL_TRAY: "Загрузить филамент",
- OK_BUTTON: "ОК",
- FILAMENT_LOAD_RESUME: "Филамент загружен — продолжить",
- JUMP_TO_LIVEVIEW: "Открыть камеру",
- NO_REMINDER_NEXT_TIME: "Больше не напоминать",
- REFRESH_NOZZLE: "Проверить ещё раз",
- IGNORE_NO_REMINDER_NEXT_TIME: "Игнорировать и больше не напоминать",
- IGNORE_RESUME: "Игнорировать и продолжить",
- PROBLEM_SOLVED_RESUME: "Проблема устранена — продолжить",
- TURN_OFF_FIRE_ALARM: "Понятно, отключить пожарную тревогу",
- RETRY_PROBLEM_SOLVED: "Повторить (проблема устранена)",
- CANCLE: "Отмена",
- STOP_DRYING: "Остановить сушку",
- PROCEED: "Продолжить",
- OK_JUMP_RACK: "ОК",
- ABORT: "Прервать",
- DISABLE_PURIFICATION: "Отключить очистку воздуха для этой печати",
- DONT_REMIND_NEXT_TIME: "Больше не напоминать",
- DBL_CHECK_CANCEL: "Отмена",
- DBL_CHECK_DONE: "Готово",
- DBL_CHECK_RETRY: "Повторить",
- DBL_CHECK_RESUME: "Продолжить",
- DBL_CHECK_OK: "Подтвердить",
- REMOVE_CLOSE_BTN: "Закрыть",
- },
- },
- mqttDebug: {
- title: "Журнал отладки MQTT",
- searchPlaceholder: "Поиск по теме или содержимому...",
- noMessages: "Сообщений пока нет",
- startLoggingHint: "Нажмите «Начать запись», чтобы перехватывать сообщения MQTT",
- noMessagesMatch: "Нет сообщений, соответствующих фильтру",
- adjustFilterHint: "Измените запрос или параметры фильтра",
- incoming: "Входящие",
- outgoing: "Исходящие",
- loggingStopped: "Запись остановлена",
- loggingActive: "Запись активна — сообщения обновляются автоматически",
- startLogging: "Начать запись",
- stopLogging: "Остановить запись",
- clearLog: "Очистить журнал",
- topic: "Тема",
- timestamp: "Время",
- direction: "Направление",
- all: "Все",
- },
- printerFiles: {
- zipStarted_one: 'Начато скачивание ZIP для {{count}} файла',
- zipStarted_other: 'Начато скачивание ZIP для {{count}} файлов',
- zipPartial: 'Начато скачивание ZIP с {{successful}} из {{total}} файлов; остальные получить не удалось',
- downloadFailed: 'Ошибка скачивания: {{error}}',
- unknownError: 'Неизвестная ошибка',
- shiftSelectHint: 'Щёлкните с Shift, чтобы выбрать диапазон',
- selectFile: 'Выбрать {{name}}',
- deselectFile: 'Снять выбор с {{name}}',
- title: "Файлы принтера",
- storageUsed: "Занято:",
- storageFree: "Свободно:",
- filterPlaceholder: "Фильтр файлов...",
- deleteButton: "Удалить",
- deleteFiles: "Удалить файлы: {{count}}",
- deleteFileConfirm: "Удалить «{{name}}»? Это действие нельзя отменить.",
- deleteFilesConfirm: "Удалить выбранные файлы ({{count}})? Это действие нельзя отменить.",
- noFiles: "На принтере нет файлов",
- printerUnavailable: 'Файловая служба принтера недоступна. Повторите попытку, когда принтер будет доступен.',
- loadingFiles: "Загрузка файлов...",
- failedToLoad: "Не удалось загрузить файлы",
- toast: {
- filesDeleted: "Удалено файлов: {{count}}",
- deleteFailed: "Не удалось удалить: {{error}}",
- },
- },
- confirm: {
- delete: "Удалить этот объект?",
- unsavedChanges: "Есть несохранённые изменения. Всё равно уйти со страницы?",
- clearQueue: "Очистить очередь печати?",
- },
- login: {
- title: "Вход в Bambuddy",
- subtitle: "Войдите в свою учётную запись",
- username: "Имя пользователя",
- usernamePlaceholder: "Введите имя пользователя",
- usernameOrEmail: "Имя пользователя или email",
- usernameOrEmailPlaceholder: "Имя пользователя или email",
- password: "Пароль",
- passwordPlaceholder: "Введите пароль",
- signIn: "Войти",
- signingIn: "Вход...",
- rememberMe: "Запомнить меня",
- forgotPassword: "Забыли пароль?",
- autologinFailed: "Автоматический вход через SSO не выполнен. Выберите провайдера ниже.",
- localDisabledNotice: "Локальный вход отключён. Используйте одного из SSO-провайдеров ниже.",
- loginSuccess: "Вход выполнен",
- loginFailed: "Не удалось войти",
- enterCredentials: "Введите имя пользователя и пароль",
- enterEmail: "Введите адрес электронной почты",
- oidcLoginFailed: "Ошибка входа через OIDC",
- oidcErrors: {
- providerError: "Провайдер удостоверений вернул ошибку",
- missingParameters: "В ответе OIDC отсутствуют обязательные параметры",
- invalidState: "Состояние OIDC недействительно или уже использовано",
- stateExpired: "Сеанс входа OIDC истёк — повторите попытку",
- providerNotFound: "Провайдер OIDC не найден",
- discoveryFailed: "Не удалось получить документ обнаружения OIDC",
- invalidDiscovery: "Документ обнаружения OIDC недействителен",
- networkError: "Сетевая ошибка при обмене токена OIDC",
- badResponse: "Неожиданный ответ при обмене токена OIDC",
- noIdToken: "Провайдер OIDC не вернул ID-токен",
- validationFailed: "Не удалось проверить токен OIDC",
- nonceMismatch: "Несовпадение nonce OIDC — возможна атака повторного воспроизведения",
- missingSubClaim: "В токене OIDC отсутствует поле sub",
- noLinkedAccount: "С этой учётной записью OIDC не связана локальная учётная запись",
- accountInactive: "Учётная запись неактивна",
- userResolutionFailed: "Не удалось определить учётную запись",
- internalError: "Внутренняя ошибка при входе через OIDC",
- tokenExchangeFailed: "Не удалось обменять токен OIDC",
- },
- forgotPasswordTitle: "Восстановление пароля",
- forgotPasswordMessage: "Обратитесь к системному администратору для сброса пароля.",
- forgotPasswordEmailMessage: "Введите адрес электронной почты, и мы отправим новый пароль.",
- emailAddress: "Адрес электронной почты",
- emailPlaceholder: "your.email@example.com",
- cancel: "Отмена",
- sending: "Отправка...",
- sendResetEmail: "Отправить письмо для сброса",
- howToReset: "Как сбросить пароль:",
- resetStep1: "Свяжитесь с администратором Bambuddy",
- resetStep2: "Попросите сбросить пароль в разделе управления пользователями",
- resetStep3: "Администратор задаст новый временный пароль",
- resetStep4: "Войдите с новым паролем и измените его в настройках",
- gotIt: "Понятно",
- resetPassword: {
- title: "Новый пароль",
- subtitle: "Введите и подтвердите новый пароль.",
- newPassword: "Новый пароль",
- newPasswordPlaceholder: "Не менее 8 символов",
- confirmPassword: "Подтверждение пароля",
- confirmPasswordPlaceholder: "Повторите новый пароль",
- saving: "Сохранение…",
- submit: "Установить новый пароль",
- backToLogin: "Вернуться ко входу",
- passwordsDoNotMatch: "Пароли не совпадают",
- passwordTooShort: "Пароль должен содержать не менее 8 символов",
- resetFailed: "Не удалось сбросить пароль. Возможно, ссылка устарела.",
- },
- twoFA: {
- title: "Двухфакторная аутентификация",
- subtitle: "Учётная запись защищена 2FA. Введите код подтверждения.",
- methodAuthenticator: "Приложение-аутентификатор",
- methodEmail: "Код по email",
- methodBackup: "Резервный код",
- instructionsTotp: "Откройте приложение-аутентификатор и введите шестизначный код Bambuddy.",
- instructionsEmail: "Шестизначный код отправлен на вашу электронную почту. Он действует 10 минут.",
- instructionsEmailNotSent: "Нажмите кнопку ниже, чтобы получить код подтверждения по email.",
- instructionsBackup: "Введите один из восьмизначных резервных кодов восстановления. Каждый код используется только один раз.",
- sendCodeButton: "Отправить код по email",
- sendingCode: "Отправка...",
- resendCode: "Отправить код повторно",
- codeLabel: "Код подтверждения",
- backupCodeLabel: "Резервный код",
- codePlaceholder: "000000",
- backupCodePlaceholder: "XXXXXXXX",
- verifyButton: "Подтвердить",
- verifyingButton: "Проверка...",
- backToLogin: "← Вернуться ко входу",
- orContinueWith: "или продолжить через",
- signInWith: "Войти через {{provider}}",
- enterCode: "Введите код подтверждения",
- sendCodeFailed: "Не удалось отправить код подтверждения",
- invalidCode: "Неверный код. Повторите попытку.",
- },
- },
- setup: {
- title: "Настройка Bambuddy",
- subtitle: "Настройте аутентификацию для этого экземпляра Bambuddy",
- enableAuth: "Включить аутентификацию",
- adminAccount: "Учётная запись администратора",
- adminAccountDesc: "Если администраторы уже существуют, аутентификация будет включена с использованием существующих учётных записей. Оставьте поля пустыми или введите данные для создания нового администратора.",
- adminUsername: "Имя администратора",
- adminPassword: "Пароль администратора",
- optionalIfAdminExists: "(необязательно, если администратор уже существует)",
- adminUsernamePlaceholder: "Введите имя администратора (необязательно)",
- adminPasswordPlaceholder: "Введите пароль администратора (необязательно)",
- confirmPassword: "Подтвердите пароль",
- confirmPasswordPlaceholder: "Повторите пароль администратора",
- settingUp: "Настройка...",
- completeSetup: "Завершить настройку",
- toast: {
- authEnabledAdminCreated: "Аутентификация включена, администратор создан",
- authEnabledExistingAdmins: "Аутентификация включена для существующих администраторов",
- setupCompleted: "Настройка завершена",
- enterBothCredentials: "Введите имя и пароль администратора либо оставьте оба поля пустыми",
- passwordsDoNotMatch: "Пароли не совпадают",
- passwordTooShort: "Пароль должен содержать не менее 6 символов",
- },
- },
- changePassword: {
- title: "Изменение пароля",
- currentPassword: "Текущий пароль",
- currentPasswordPlaceholder: "Введите текущий пароль",
- newPassword: "Новый пароль",
- newPasswordPlaceholder: "Введите новый пароль (не менее 6 символов)",
- confirmPassword: "Подтвердите новый пароль",
- confirmPasswordPlaceholder: "Повторите новый пароль",
- passwordsDoNotMatch: "Пароли не совпадают",
- passwordTooShort: "Пароль должен содержать не менее 6 символов",
- changing: "Изменение...",
- success: "Пароль изменён",
- failed: "Не удалось изменить пароль",
- },
- plateAlert: {
- title: "Печать приостановлена!",
- message: "На печатной пластине обнаружены объекты. Печать автоматически приостановлена. Очистите пластину и продолжите печать.",
- understand: "Понятно",
- },
- camera: {
- title: "Камера",
- invalidPrinterId: "Неверный идентификатор принтера",
- live: "Прямой эфир",
- snapshot: "Снимок",
- restartStream: "Перезапустить поток",
- refreshSnapshot: "Обновить снимок",
- fullscreen: "На весь экран",
- exitFullscreen: "Выйти из полноэкранного режима",
- connectingToCamera: "Подключение к камере...",
- capturingSnapshot: "Создание снимка...",
- connectionLost: "Соединение потеряно",
- connectionFailed: "Не удалось подключиться к камере",
- reconnecting: "Повторное подключение через {{countdown}} с... (попытка {{attempt}} из {{max}})",
- reconnectNow: "Подключиться сейчас",
- cameraUnavailable: "Камера недоступна",
- cameraUnavailableDesc: "Убедитесь, что принтер включён и подключён к сети.",
- noCamera: "Камера отсутствует",
- retry: "Повторить",
- cameraStream: "Видеопоток камеры",
- zoomOut: "Уменьшить",
- zoomIn: "Увеличить",
- resetZoom: "Сбросить масштаб",
- recording: "Запись",
- startRecording: "Начать запись",
- stopRecording: "Остановить запись",
- chamberLight: "Переключить освещение камеры принтера",
- unavailable: "Камера недоступна",
- diagnose: {
- button: "Диагностика",
- modalTitle: "Диагностика камеры",
- running: "Выполняется диагностика...",
- runFailed: "Не удалось выполнить диагностику: {{error}}",
- retry: "Запустить снова",
- stage: {
- tcp_reachable: "Доступность по сети",
- first_frame: "Получение кадра",
- live_stream_active: "Активный видеопоток",
- },
- summary: {
- all_ok: "Камера работает. Все этапы диагностики завершены успешно.",
- live_stream_active_healthy: "Камера уже передаёт свежие кадры — дополнительная проверка не требуется.",
- printer_unreachable: "Принтер недоступен. Проверьте IP-адрес, сетевое подключение и питание принтера.",
- camera_port_closed: "Принтер доступен, но порт камеры закрыт. Убедитесь, что в настройках принтера включены режим «Только LAN» и режим разработчика.",
- no_frame: "Подключение к камере установлено, но кадры не поступают. Повторите попытку или проверьте, включена ли камера в настройках принтера.",
- unknown_failure: "Диагностика камеры завершилась неизвестной ошибкой. Подробности см. в журнале поддержки.",
- },
- meta: {
- protocol: "Протокол",
- port: "Порт",
- profile: "Профиль",
- },
- },
- },
- groups: {
- title: "Управление группами",
- subtitle: "Настройка групп разрешений для контроля доступа",
- backToSettings: "Вернуться к настройкам",
- createGroup: "Создать группу",
- noPermission: "У вас нет доступа к этой странице.",
- system: "Системная",
- noDescription: "Без описания",
- usersCount: "Пользователей: {{count}}",
- permissionsCount: "Разрешений: {{count}}",
- edit: "Изменить",
- delete: "Удалить",
- toast: {
- created: "Группа создана",
- updated: "Группа обновлена",
- deleted: "Группа удалена",
- enterGroupName: "Введите название группы",
- },
- modal: {
- editGroup: "Изменение группы",
- createGroup: "Создание группы",
- cancel: "Отмена",
- saving: "Сохранение...",
- creating: "Создание...",
- saveChanges: "Сохранить изменения",
- },
- form: {
- groupName: "Название группы",
- groupNamePlaceholder: "Введите название группы",
- systemGroupWarning: "Названия системных групп изменить нельзя",
- description: "Описание",
- descriptionPlaceholder: "Введите описание (необязательно)",
- permissions: "Разрешения (выбрано: {{count}})",
- },
- deleteModal: {
- title: "Удаление группы",
- message: "Удалить эту группу? Входящие в неё пользователи потеряют соответствующие разрешения.",
- confirm: "Удалить группу",
- },
- editor: {
- title: "Изменение группы",
- createTitle: "Создание группы",
- search: "Поиск разрешений...",
- selectAll: "Выбрать все",
- clearAll: "Очистить выбор",
- permissionsSelected: "Выбрано: {{count}}",
- noResults: "Нет разрешений, соответствующих запросу",
- websocketHint: "Необходимо для обновлений в реальном времени. Без этого интерфейс будет периодически опрашивать сервер.",
- },
- },
- users: {
- title: "Управление пользователями",
- subtitle: "Управление пользователями и их доступом к Bambuddy",
- backToSettings: "Вернуться к настройкам",
- createUser: "Создать пользователя",
- noPermission: "У вас нет доступа к этой странице.",
- admin: "Администратор",
- noGroups: "Без групп",
- active: "Активен",
- inactive: "Отключён",
- edit: "Изменить",
- delete: "Удалить",
- system: "Системный",
- noGroupsAvailable: "Нет доступных групп",
- table: {
- username: "Имя пользователя",
- groups: "Группы",
- status: "Состояние",
- actions: "Действия",
- },
- toast: {
- created: "Пользователь создан",
- updated: "Пользователь обновлён",
- deleted: "Пользователь удалён",
- fillRequired: "Заполните все обязательные поля",
- passwordsDoNotMatch: "Пароли не совпадают",
- passwordTooShort: "Пароль должен содержать не менее 6 символов",
- ldapProvisioned: "Пользователь LDAP «{{username}}» добавлен",
- },
- modal: {
- createUser: "Создание пользователя",
- editUser: "Изменение пользователя",
- cancel: "Отмена",
- creating: "Создание...",
- saving: "Сохранение...",
- saveChanges: "Сохранить изменения",
- advancedAuthSubtitle: "с расширенной аутентификацией",
- tabsAriaLabel: "Источник пользователя",
- localTab: "Локальный",
- ldapTab: "LDAP",
- ldapSearchLabel: "Поиск в каталоге",
- ldapSearchPlaceholder: "Введите имя пользователя, имя или email...",
- ldapMinChars: "Для поиска введите не менее 2 символов",
- ldapTypeToSearch: "Начните вводить запрос для поиска в каталоге LDAP",
- ldapSearching: "Поиск в каталоге...",
- ldapNoResults: "В каталоге нет подходящих пользователей",
- ldapSearchError: "Ошибка поиска в каталоге. Проверьте состояние сервера LDAP.",
- ldapAlreadyProvisioned: "Уже добавлен",
- ldapSelectedLabel: "Выбран",
- ldapProvision: "Добавить пользователя",
- ldapProvisioning: "Добавление...",
- ldapErrorProvision: "Не удалось добавить пользователя. Проверьте сервер LDAP и повторите попытку.",
- },
- form: {
- username: "Имя пользователя",
- usernamePlaceholder: "Введите имя пользователя",
- email: "Электронная почта",
- emailPlaceholder: "user@example.com",
- password: "Пароль",
- passwordPlaceholder: "Введите пароль",
- confirmPassword: "Подтверждение пароля",
- confirmPasswordPlaceholder: "Повторите пароль",
- newPasswordPlaceholder: "Введите новый пароль",
- confirmNewPasswordPlaceholder: "Повторите новый пароль",
- leaveBlankToKeep: "оставьте пустым, чтобы сохранить текущий",
- groups: "Группы",
- optional: "необязательно",
- autoGeneratedPassword: "Надёжный пароль будет создан автоматически и отправлен пользователю по email.",
- passwordManagedByAdvancedAuth: "Пароль управляется расширенной аутентификацией. Используйте «Сбросить пароль», чтобы отправить пользователю новый пароль по email.",
- resetPassword: "Сбросить пароль",
- resettingPassword: "Сброс пароля...",
- },
- deleteModal: {
- title: "Удаление пользователя",
- message: "Удалить этого пользователя? Это действие нельзя отменить.",
- confirm: "Удалить пользователя",
- },
- },
- streamOverlay: {
- title: "Оформление трансляции",
- invalidPrinterId: "Неверный идентификатор принтера",
- cameraStream: "Видеопоток камеры",
- progress: "Прогресс",
- eta: "Осталось",
- printerIdle: "Принтер простаивает",
- printerOffline: "Принтер не в сети",
- builder: {
- title: "Оформление трансляции",
- description: "Собирает адрес оформления трансляции: полноэкранное изображение камеры с наложенными данными о печати — для OBS, настенного экрана или любого источника-браузера. Выберите нужные поля и скопируйте адрес.",
- printer: "Принтер",
- size: "Размер текста",
- sizeSmall: "Мелкий",
- sizeMedium: "Средний",
- sizeLarge: "Крупный",
- fps: "Частота кадров",
- fpsHint: "Камеры A1 и P1 выдают не более примерно 5 кадров в секунду, какое бы значение вы ни задали.",
- token: "Токен оформления трансляции (необязательно)",
- tokenHint: "Нужен только при включённом входе: у OBS нет собственного сеанса. Создайте его выше с областью «Оформление трансляции».",
- tokenWarning: "Этот адрес содержит токен: любой, кто его прочитает, увидит трансляцию и имя файла. Отзовите токен, чтобы закрыть доступ.",
- fields: "Показываемые поля",
- fieldPrinter: "Имя принтера",
- fieldFilename: "Имя файла",
- fieldStatus: "Состояние",
- fieldProgress: "Полоса прогресса",
- fieldLayers: "Количество слоёв",
- fieldEta: "Оставшееся время и время окончания",
- fieldCamera: "Изображение камеры",
- chamberHint: "Температура камеры показывается только на моделях с настоящим датчиком: P1 и A1 сообщают бессмысленное значение, поэтому она опускается.",
- urlTitle: "Адрес оформления",
- open: "Открыть",
- showPreview: "Показать предпросмотр",
- hidePreview: "Скрыть предпросмотр",
- previewTitle: "Предпросмотр оформления",
- },
- status: {
- printing: "Печать",
- paused: "Приостановлено",
- finished: "Завершено",
- failed: "Ошибка",
- idle: "Ожидание",
- unknown: "Неизвестно",
- },
- },
- profiles: {
- title: "Профили",
- subtitle: "Управление профилями слайсера и калибровками Pressure Advance",
- tabs: {
- bambuCloud: "Bambu Cloud",
- orcaCloud: "Orca Cloud",
- local: "Локальные профили",
- kprofiles: "K-профили",
- },
- orcaCloud: {
- connectedAs: "Подключено как",
- connectedShort: "Подключено к Orca Cloud",
- logout: "Отключиться",
- noLogoutPermission: "У вас нет разрешения отключаться от Orca Cloud",
- noConnectPermission: "У вас нет разрешения подключаться к Orca Cloud",
- retry: "Повторить",
- connectButton: "Подключить Orca Cloud",
- connect: {
- title: "Подключение к Orca Cloud",
- description: "Войдите в Orca Cloud, чтобы синхронизировать профили слайсера с Bambuddy.",
- },
- device: {
- title: "Разрешите доступ Bambuddy в Orca Cloud",
- instruction: "Откройте Orca Cloud и подтвердите этот код. После подтверждения Bambuddy подключится автоматически.",
- codeLabel: "Код сопряжения",
- openButton: "Открыть страницу подтверждения Orca Cloud",
- manualHint: "Либо откройте {{url}} и введите указанный выше код.",
- waiting: "Ожидание подтверждения…",
- cancel: "Отмена",
- },
- profiles: {
- title: "Ваши профили Orca Cloud ({{count}})",
- refresh: "Обновить",
- empty: "В вашей учётной записи Orca Cloud пока нет профилей.",
- },
- toast: {
- disconnected: "Orca Cloud отключён",
- },
- errors: {
- startFailed: "Не удалось начать вход в Orca Cloud.",
- denied: "Сопряжение отклонено в Orca Cloud.",
- expired: "Срок действия кода сопряжения истёк. Нажмите «Подключить», чтобы повторить попытку.",
- pollFailed: "Соединение было потеряно во время ожидания подтверждения. Повторите попытку.",
- },
- },
- localProfiles: {
- title: "Локальные профили",
- subtitle: "Импорт профилей OrcaSlicer и управление ими",
- import: "Импортировать профили",
- importDesc: "Перетащите сюда файлы .bbscfg, .bbsflmt, .orca_filament, .zip или .json",
- importing: "Импорт...",
- search: "Поиск локальных профилей...",
- noPresets: "Локальных профилей пока нет",
- noSearchResults: "Нет профилей, соответствующих запросу",
- badge: "Локальный",
- edit: "Изменить",
- delete: "Удалить",
- cancel: "Отмена",
- deleteConfirmTitle: "Удаление профиля",
- deleteConfirm: "Удалить этот профиль? Это действие нельзя отменить.",
- source: "Источник",
- inheritsFrom: "Наследует",
- filamentType: "Тип",
- vendor: "Производитель",
- compatiblePrinters: "Принтеры",
- nozzleTemp: "Температура сопла",
- cost: "Стоимость",
- density: "Плотность",
- pressureAdvance: "Опережение давления",
- filament: "Филамент",
- process: "Процесс",
- printer: "Принтер",
- toast: {
- importSuccess: "Импортировано профилей: {{count}}",
- importSkipped: "Пропущено дубликатов: {{count}}",
- importError: "Ошибок при импорте: {{count}}",
- deleted: "Профиль удалён",
- updated: "Профиль обновлён",
- },
- },
- connectedAs: "Подключено как",
- signInExpiredTitle: "Срок авторизации в Bambu Cloud истёк",
- signInExpiredBody: "Bambu Lab больше не принимает сохранённый токен. Выполните вход снова, чтобы восстановить облачные профили, импорт из MakerWorld и проверку прошивок.",
- logout: "Выйти",
- noLogoutPermission: "У вас нет разрешения выходить из учётной записи",
- failedToLoad: "Не удалось загрузить профили",
- retry: "Повторить",
- time: {
- justNow: "Только что",
- minsAgo: "{{count}} мин назад",
- hoursAgo: "{{count}} ч назад",
- daysAgo: "{{count}} дн назад",
- },
- toast: {
- loggedOut: "Вы вышли из учётной записи",
- },
- login: {
- title: "Подключение к Bambu Cloud",
- subtitle: "Синхронизация профилей слайсера между устройствами",
- email: "Электронная почта",
- password: "Пароль",
- region: "Регион",
- regionGlobal: "Глобальный",
- regionChina: "Китай",
- verificationCode: "Код подтверждения",
- totpCode: "Код приложения-аутентификатора",
- checkEmail: "Проверьте почту {{email}}: туда отправлен шестизначный код",
- enterTotpHint: "Введите шестизначный код из приложения-аутентификатора",
- accessToken: "Токен доступа",
- accessTokenHint: "Вставьте токен доступа Bambu Cloud. Для учётных записей китайского региона, привязанных к телефону, доступен только этот способ: вход по email не поддерживается. Инструкцию по получению токена из cookie MakerWorld см. в wiki.",
- back: "Назад",
- loginButton: "Войти",
- verifyButton: "Подтвердить",
- setTokenButton: "Сохранить токен",
- useToken: "Использовать токен доступа",
- captchaTitle: "Bambu Cloud требует пройти CAPTCHA",
- captchaBody: "Bambu требует от вашей сети пройти CAPTCHA, прежде чем принять вход, и ответить на эту проверку из Bambuddy невозможно. Дело не в почте и не в пароле. Блокировка привязана к вашему публичному IP-адресу и обычно снимается сама в течение нескольких часов, а повторные попытки только продлевают её. Чтобы войти сейчас, используйте токен доступа из сессии браузера.",
- useEmail: "Войти по email",
- toast: {
- loggedIn: "Вход выполнен",
- codeSent: "Код подтверждения отправлен по email",
- enterTotp: "Введите код из приложения-аутентификатора",
- tokenSet: "Токен сохранён",
- },
- },
- presets: {
- myPreset: "Мой профиль (редактируемый)",
- duplicate: "Создать копию",
- editable: "Редактируемый",
- failedToLoadDetails: "Не удалось загрузить сведения о профиле",
- deleteConfirm: "Удалить этот профиль?",
- deleteWarning: "Профиль «{{name}}» будет безвозвратно удалён из Bambu Cloud. Это действие нельзя отменить.",
- noDuplicatePermission: "У вас нет разрешения копировать профили",
- noEditPermission: "У вас нет разрешения редактировать профили",
- noDeletePermission: "У вас нет разрешения удалять профили",
- types: {
- filament: "Профиль филамента",
- printer: "Профиль принтера",
- process: "Профиль процесса",
- },
- toast: {
- deleted: "Профиль удалён",
- created: "Профиль создан",
- updated: "Профиль обновлён",
- duplicated: "Копия профиля создана",
- fieldAdded: "Добавлено поле «{{key}}»",
- exported: "Профиль экспортирован",
- },
- baseLabel: "Базовый: {{name}}",
- currentLabel: "Текущий: {{name}}",
- newPreset: "Новый профиль",
- editPreset: "Изменение профиля",
- duplicatePreset: "Копирование профиля",
- createNewPreset: "Создание профиля",
- customizeSettings: "Настройте параметры нового профиля",
- compareWithBase: "Сравнить с базовым профилем",
- compare: "Сравнить",
- basePreset: "Базовый профиль",
- selectBasePreset: "Выберите базовый профиль...",
- presetName: "Название профиля",
- myCustomPreset: "Мой профиль",
- inheritsFrom: "Наследует от",
- dropJsonToImport: "Перетащите JSON для импорта",
- tabs: {
- common: "Основные",
- allFields: "Все поля",
- },
- availableFields: "Доступные поля",
- searchFieldsPlaceholder: "Поиск полей...",
- noMatchingFields: "Нет подходящих полей",
- allFieldsAdded: "Все поля добавлены",
- addCustomField: "Добавить произвольное поле",
- yourOverrides: "Ваши переопределения",
- noOverridesYet: "Переопределений пока нет",
- clickFieldsToAdd: "Нажимайте поля слева, чтобы добавить их",
- saveAsTemplate: "Сохранить как шаблон",
- jsonTip: "Совет: перетащите файл .json в это окно, чтобы импортировать настройки",
- },
- cloudView: {
- searchPlaceholder: "Поиск профилей...",
- templates: "Шаблоны",
- refresh: "Обновить",
- newPreset: "Новый профиль",
- clearFilters: "Сбросить фильтры",
- compareMode: "Режим сравнения",
- selectAnotherPreset: "Выберите другой профиль типа «{{type}}»",
- clickTwoPresets: "Выберите два профиля одного типа для сравнения",
- selectFirst: "1. Выберите первый",
- selectSecond: "2. Выберите второй",
- compareNow: "Сравнить",
- lastSynced: "Последняя синхронизация:",
- showingCount: "Показано {{showing}} из {{total}} профилей",
- noPresetsFound: "Профили не найдены",
- columns: {
- filament: "Филамент",
- process: "Процесс",
- printer: "Принтер",
- },
- noFilamentPresets: "Нет профилей филамента",
- noProcessPresets: "Нет профилей процесса",
- noPrinterPresets: "Нет профилей принтера",
- filters: {
- type: "Тип",
- owner: "Владелец",
- printer: "Принтер",
- nozzle: "Сопло",
- filament: "Филамент",
- layer: "Слой",
- all: "Все",
- myPresets: "Мои профили",
- builtIn: "Встроенные",
- process: "Процесс",
- },
- noTemplatesPermission: "У вас нет разрешения управлять шаблонами",
- noRefreshPermission: "У вас нет разрешения обновлять профили",
- noCreatePermission: "У вас нет разрешения создавать профили",
- },
- templates: {
- title: "Быстрые шаблоны",
- noTemplates: "Шаблонов пока нет",
- createFirst: "Создавайте шаблоны в редакторе профилей",
- typeFilter: "Тип:",
- deleteTitle: "Удаление шаблона",
- deleteWarning: "Это действие нельзя отменить",
- deleteConfirm: "Удалить шаблон «{{name}}»?",
- namePlaceholder: "Название шаблона",
- descriptionPlaceholder: "Описание",
- settingsJson: "Настройки (JSON)",
- fieldsCount: "Полей: {{count}}",
- shownInModals: "Показывается в окнах",
- hiddenInModals: "Скрыт в окнах",
- apply: "Применить",
- toast: {
- deleted: "Шаблон удалён",
- updated: "Шаблон обновлён",
- created: "Шаблон создан",
- applied: "Шаблон применён",
- },
- },
- },
- support: {
- debugLoggingActive: "Отладочное журналирование включено",
- manageLogs: "Управление",
- collectItem7: "Подключение принтеров и версии прошивок",
- collectItem8: "Состояние интеграций (Spoolman, MQTT, HA)",
- collectItem9: "Сетевые интерфейсы (только подсети)",
- collectItem10: "Версии пакетов Python",
- collectItem11: "Проверка состояния базы данных",
- collectItem12: "Сведения о среде Docker",
- bundleGenerating: "Формирование пакета...",
- bundleStepConnection: "Проверка подключения принтеров",
- bundleStepVirtualPrinters: "Проверка настройки виртуальных принтеров",
- bundleStepLogScan: "Поиск известных проблем в последних журналах",
- bundleStepBuild: "Создание ZIP-пакета для поддержки",
- },
- fileManager: {
- variants: {
- badge: 'Версий: {{count}}',
- groupAction: 'Сгруппировать как версии',
- groupTooltip: 'Пометить эти файлы как одну задачу, нарезанную для разных принтеров',
- grouped: 'Файлов сгруппировано как версии: {{count}}',
- printAlternatives: 'Печать (вариантов: {{count}})',
- },
- title: "Файловый менеджер",
- subtitle: "Организация и управление файлами для печати",
- uploadFiles: "Загрузить файлы",
- newFolder: "Новая папка",
- folderName: "Имя папки",
- folderNamePlaceholder: "например, Функциональные детали",
- renameFile: "Переименовать файл",
- renameFolder: "Переименовать папку",
- invalidFilenameChar: "Символ «{{char}}» нельзя использовать в именах файлов печати. SD-карта принтера не принимает: < > : \" / \\ | ? *",
- moveFiles: "Переместить файлы ({{count}})",
- rootNoFolder: "Корень (без папки)",
- current: "текущая",
- linkFolder: "Связать папку",
- linkFolderDescription: "Связать «{{name}}» с проектом или архивом для быстрого доступа.",
- project: "Проект",
- archive: "Архив",
- noProjectsFound: "Проекты не найдены",
- noArchivesFound: "Архивы не найдены",
- unlink: "Отвязать",
- link: "Связать",
- dragDropFiles: "Перетащите файлы сюда",
- dropFilesHere: "Перетащите файлы сюда",
- releaseToUpload: "Отпустите для загрузки",
- orClickToBrowse: "или нажмите для выбора",
- allFileTypesSupported: "Поддерживаются все типы файлов. ZIP-архивы будут распакованы.",
- zipFilesDetected: "Обнаружены ZIP-архивы",
- zipExtractOptions: "ZIP-архивы будут распакованы. Выберите способ обработки структуры папок:",
- preserveZipStructure: "Сохранить структуру папок из ZIP",
- createFolderFromZip: "Создать папку с именем ZIP-файла",
- stlThumbnailGeneration: "Создание миниатюр STL",
- zipMayContainStl: "ZIP-архивы могут содержать STL-файлы. Миниатюры можно создать при распаковке.",
- thumbnailsCanBeGenerated: "Для STL-файлов можно создать миниатюры. Обработка крупных моделей может занять больше времени.",
- generateThumbnailsForStl: "Создать миниатюры для STL-файлов",
- threemfDetected: "Обнаружены файлы 3MF",
- threemfExtractionInfo: "Модель принтера, материал, цвет и параметры печати будут автоматически извлечены из файлов 3MF.",
- willBeExtracted: "Будут извлечены",
- filesExtracted: "Извлечено файлов: {{count}}",
- uploadComplete: "Загрузка завершена: успешно — {{succeeded}}",
- uploadFailed: "Ошибка загрузки",
- zipFilesFailed: "Не удалось обработать файлов: {{count}}",
- uploading: "Загрузка...",
- changeLink: "Изменить связь...",
- linkTo: "Связать с...",
- linkToProjectOrArchive: "Связать с проектом или архивом",
- generateThumbnail: "Создать миниатюру",
- generateThumbnails: "Создать миниатюры",
- generateThumbnailsForMissing: "Создать отсутствующие миниатюры для STL-файлов",
- gridView: "Плитка",
- listView: "Список",
- lowDiskSpaceWarning: "Мало свободного места",
- lowDiskSpaceDetails: "Свободно только {{free}} из {{total}}. Порог предупреждения в настройках: {{threshold}} ГБ.",
- files: "Файлы",
- folders: "Папки",
- size: "Размер",
- free: "Свободно",
- allFiles: "Все файлы",
- allExternal: "Внешние",
- externalIsEmpty: "Внешних файлов нет",
- externalEmptyDescription: "Здесь появятся файлы из подключённых внешних папок.",
- wrap: "Перенос строк",
- enableTextWrapping: "Включить перенос строк",
- disableTextWrapping: "Отключить перенос строк",
- collapse: "Свернуть",
- collapseFoldersByDefault: "Сворачивать папки по умолчанию",
- expandFoldersByDefault: "Разворачивать папки по умолчанию",
- folderSort: "Сортировка папок",
- folderSortByName: "По имени",
- folderSortByActivity: "По последней активности",
- dragToResizeTooltip: "Перетащите для изменения размера, двойной щелчок — сброс",
- searchFiles: "Поиск файлов...",
- searchSubfoldersHint: "С учётом вложенных папок",
- readme: {
- truncated: "Показано не полностью",
- show: "Показать README",
- hide: "Скрыть README",
- label: "README",
- },
- tags: {
- title: "Метки",
- subtitle: "Помечайте файлы для сквозной фильтрации: игрушки, безопасно для детей, только PETG и что угодно ещё.",
- manage: "Метки",
- manageTitle: "Управление каталогом меток",
- add: "Новая метка",
- edit: "Переименовать метку",
- name: "Название",
- fileCount: "Файлы",
- empty: "Меток пока нет. Создайте первую, чтобы начать помечать файлы.",
- noMatches: "Подходящие метки не найдены.",
- createPlaceholder: "например, игрушки, детям, petg",
- createButton: "Создать",
- nameRequired: "Укажите название.",
- searchPlaceholder: "Фильтр меток...",
- created: "Метка создана.",
- updated: "Метка переименована.",
- deleted: "Метка удалена.",
- saveFailed: "Не удалось сохранить метку.",
- deleteFailed: "Не удалось удалить метку.",
- applyFailed: "Не удалось применить метки.",
- applyAdd: "Добавить метки",
- applyRemove: "Удалить метки",
- applyAddSuccess: "Добавлено меток: {{count}}; обработано файлов: {{files}}.",
- applyRemoveSuccess: "Удалено меток: {{count}}; обработано файлов: {{files}}.",
- actionAdd: "Добавить к выбранным файлам",
- actionRemove: "Удалить с выбранных файлов",
- tagAction: "Метки",
- bulkTitle: "Метки для выбранных файлов ({{count}})",
- bulkTooltip: "Добавить или удалить метки у всех выбранных файлов.",
- noPermission: "У вас нет прав на изменение меток файлов.",
- filterLabel: "Фильтр по меткам:",
- clearAll: "Очистить всё",
- confirmDelete: "Удалить метку «{{name}}»?",
- confirmDeleteMessage: "Метка будет удалена из каталога. Остальные метки файлов сохранятся.",
- confirmDeleteInUseMessage: "Эта метка назначена файлам ({{count}}). При удалении метка исчезнет у всех файлов; сами файлы не изменятся.",
- editAria: "Изменить {{name}}",
- deleteAria: "Удалить {{name}}",
- },
- allTypes: "Все типы",
- prints: "Файлы печати",
- ascending: "По возрастанию",
- descending: "По убыванию",
- showModified: "Показать даты изменения",
- hideModified: "Скрыть даты изменения",
- lastModified: "Изменено",
- lastActivity: "Последняя активность",
- resultsCount: "Показано {{showing}} из {{total}} файлов",
- selectAll: "Выбрать всё",
- deselectAll: "Снять выделение",
- selected: "Выбрано: {{count}}",
- adding: "Добавление...",
- loadingFiles: "Загрузка файлов...",
- folderIsEmpty: "Папка пуста",
- noFilesYet: "Файлов пока нет",
- folderEmptyDescription: "Загрузите или переместите файлы в эту папку.",
- noFilesDescription: "Загрузите файлы, чтобы начать упорядочивать материалы для печати.",
- noMatchingFiles: "Подходящие файлы не найдены",
- noMatchingFilesDescription: "Нет файлов, соответствующих текущему поиску или фильтрам.",
- clearFilters: "Сбросить фильтры",
- printedCount: "Напечатано: {{count}}×",
- uploadedBy: "Загрузил",
- deleteFolder: "Удалить папку",
- deleteFile: "Удалить файл",
- deleteFilesCount: "Удалить файлы ({{count}})",
- deleteFolderConfirm: "Удалить эту папку? Все находящиеся в ней файлы также будут удалены.",
- deleteFileConfirm: "Удалить этот файл?",
- deleteFilesConfirm: "Удалить выбранные файлы ({{count}})? Это действие нельзя отменить.",
- deleting: "Удаление...",
- noPermissionRenameFolder: "У вас нет прав на переименование папок",
- noPermissionLinkFolder: "У вас нет прав на связывание папок",
- noPermissionDeleteFolder: "У вас нет прав на удаление папок",
- onlyEmptyFoldersDeletable: "Вы можете удалять только пустые папки",
- noPermissionPrint: "У вас нет прав на запуск печати",
- noPermissionAddToQueue: "У вас нет прав на добавление в очередь",
- noPermissionSlice: "У вас нет прав на нарезку файлов",
- noPermissionDownload: "У вас нет прав на скачивание файлов",
- noPermissionPreview: 'У вас нет прав на предварительный просмотр файлов',
- preview3d: '3D-просмотр',
- noPermissionRenameFile: "У вас нет прав на переименование этого файла",
- noPermissionGenerateThumbnail: "У вас нет прав на создание миниатюр",
- noPermissionDeleteFile: "У вас нет прав на удаление этого файла",
- noPermissionCreateFolder: "У вас нет прав на создание папок",
- noPermissionUpload: "У вас нет прав на загрузку файлов",
- noPermissionMoveFiles: "У вас нет прав на перемещение файлов",
- noPermissionDeleteFiles: "У вас нет прав на удаление файлов",
- linkExternal: "Подключить внешнюю папку",
- linkExternalFolder: "Подключить внешнюю папку",
- linkExternalFolderDescription: "Подключить каталог хоста (NAS, USB-накопитель или сетевой ресурс) к файловому менеджеру. Файлы не копируются — Bambuddy обращается к ним по исходному пути.",
- externalFolderNamePlaceholder: "например, Модели на NAS",
- externalPath: "Путь на хосте",
- externalPathHelp: "Абсолютный путь к каталогу на хосте Docker. Каталог должен быть подключён к контейнеру через bind mount.",
- readOnly: "Только чтение",
- readOnlyHelp: "запрещает загрузку и удаление файлов",
- showHiddenFiles: "Показывать скрытые файлы (dotfiles)",
- externalFolder: "Внешняя папка",
- scanFolder: "Сканировать",
- toast: {
- folderCreated: "Папка создана",
- openInSlicerFailed: "Не удалось открыть в слайсере",
- folderDeleted: "Папка удалена",
- fileDeleted: "Файл удалён",
- filesDeleted: "Удалено файлов: {{count}}",
- filesMoved: "Файлы перемещены",
- folderLinked: "Папка связана",
- folderUnlinked: "Связь с папкой удалена",
- externalFolderLinked: "Внешняя папка подключена и просканирована",
- folderScanned: "Сканирование завершено: добавлено — {{added}}, удалено — {{removed}}",
- addedToQueue: "Добавлено в очередь файлов: {{count}}",
- addedToQueuePartial: "Добавлено файлов: {{added}}, ошибок: {{failed}}",
- failedToAddToQueue: "Не удалось добавить файлы: {{error}}",
- fileRenamed: "Файл переименован",
- folderRenamed: "Папка переименована",
- thumbnailsGenerated: "Создано миниатюр: {{count}}",
- thumbnailsGeneratedPartial: "Создано миниатюр: {{succeeded}}, ошибок: {{failed}}",
- noStlMissingThumbnails: "Нет STL-файлов без миниатюр",
- failedToGenerateThumbnails: "Не удалось создать миниатюры: {{error}}",
- thumbnailGenerated: "Миниатюра создана",
- failedToGenerateThumbnail: "Не удалось создать миниатюру: {{error}}",
- },
- },
- projects: {
- parentLabel: "Родительский проект",
- parentNone: "Нет (проект верхнего уровня)",
- parentHint: "Вложите этот проект в другой, чтобы его показатели суммировались в главном проекте",
- partOf: "Часть проекта {{name}}",
- subProjectCount: "Подпроектов: {{count}}",
- subProjectsOf: "Подпроекты проекта {{name}}",
- collapseSubProjects: "Свернуть подпроекты",
- expandSubProjects: "Развернуть подпроекты",
- title: "Проекты",
- subtitle: "Организация и отслеживание проектов 3D-печати",
- newProject: "Новый проект",
- editProject: "Изменить проект",
- deleteProject: "Удалить проект",
- projectName: "Название проекта",
- description: "Описание",
- noProjects: "Проектов пока нет",
- noProjectsFiltered: "Нет проектов со статусом «{{status}}»",
- noProjectsFilteredHelp: "У вас нет проектов со статусом «{{status}}». Они появятся здесь после изменения статуса.",
- createFirst: "Создайте первый проект, чтобы объединять связанные печати, отслеживать ход работ и управлять сборкой.",
- createFirstButton: "Создать первый проект",
- create: "Создать",
- files: "Файлы",
- prints: "Печати",
- plates: "пластин",
- parts: "деталей",
- lastModified: "Последнее изменение",
- deleteConfirm: "Удалить этот проект? Архивные записи и элементы очереди будут отвязаны, но не удалены.",
- addFiles: "Добавить файлы",
- removeFile: "Убрать файл",
- viewDetails: "Подробнее",
- namePlaceholder: "например, Сборка Voron 2.4",
- descriptionPlaceholder: "Необязательное описание...",
- urlLabel: "URL",
- urlPlaceholder: "https://makerworld.com/...",
- urlInvalid: "URL должен начинаться с http:// или https://",
- openExternalUrl: "Открыть страницу проекта",
- coverImageLabel: "Обложка",
- coverImageAlt: "Обложка проекта",
- coverImageUpload: "Загрузить",
- coverImageReplace: "Заменить",
- coverImageRemove: "Удалить",
- color: "Цвет",
- targetPlates: "План по пластинам",
- targetPlatesPlaceholder: "например, 25",
- targetPlatesHelp: "Количество заданий печати",
- targetParts: "План по деталям",
- targetPartsPlaceholder: "например, 150",
- targetPartsHelp: "Общее требуемое количество объектов",
- targetSets: "Копий на файл",
- targetSetsPlaceholder: "напр. 10",
- targetSetsHelp: "Сколько раз нужно напечатать каждый печатаемый файл",
- tagsLabel: "Метки (через запятую)",
- tagsPlaceholder: "например, voron, функциональное, подарок",
- dueDate: "Срок",
- priority: "Приоритет",
- priorityLow: "Низкий",
- priorityNormal: "Обычный",
- priorityHigh: "Высокий",
- priorityUrgent: "Срочный",
- statusActive: "Активный",
- statusCompleted: "Завершён",
- statusArchived: "В архиве",
- done: "Готово",
- completed: "завершено",
- failed: "ошибка",
- inQueue: "в очереди",
- noPrintsYet: "Печатей пока нет",
- printJobs: "Задания печати (пластины)",
- partsPrinted: "Напечатано деталей",
- failedParts: "Неудачных деталей",
- import: "Импорт",
- export: "Экспорт",
- importProject: "Импортировать проект",
- exportAll: "Экспортировать все проекты",
- loading: "Загрузка проектов...",
- noEditPermission: "У вас нет прав на изменение проектов",
- noDeletePermission: "У вас нет прав на удаление проектов",
- noCreatePermission: "У вас нет прав на создание проектов",
- noImportPermission: "У вас нет прав на импорт проектов",
- noExportPermission: "У вас нет прав на экспорт проектов",
- toast: {
- created: "Проект создан",
- updated: "Проект обновлён",
- deleted: "Проект удалён",
- imported: "Проект импортирован",
- multipleImported: "Импортировано проектов: {{count}}",
- importFailed: "Не удалось импортировать проект",
- exported: "Проекты экспортированы (только метаданные)",
- },
- },
- projectDetail: {
- notFound: "Проект не найден",
- backToProjects: "Вернуться к проектам",
- export: "Экспорт",
- exportProject: "Экспортировать проект",
- noExportPermission: "У вас нет прав на экспорт проектов",
- noEditPermission: "У вас нет прав на изменение проектов",
- partOf: "Входит в:",
- priorityLabel: "Приоритет:",
- noPrints: "В этом проекте пока нет печатей",
- status: {
- active: "Активный",
- completed: "Завершён",
- archived: "В архиве",
- },
- priority: {
- low: "Низкий",
- normal: "Обычный",
- high: "Высокий",
- urgent: "Срочный",
- },
- dueDate: {
- overdue: "Срок истёк",
- today: "Срок сегодня",
- daysLeft: "Осталось дней: {{count}}",
- },
- progress: {
- platesProgress: "Выполнение по пластинам",
- partsProgress: "Выполнение по деталям",
- setsProgress: "Полные комплекты",
- sets: "комплектов",
- setsHint: "Комплект готов, когда каждый печатаемый файл достиг этого количества",
- printJobs: "заданий печати",
- parts: "деталей",
- percentComplete: "Выполнено {{percent}}%",
- remaining: "Осталось: {{count}}",
- },
- stats: {
- printJobs: "Задания печати",
- total: "всего",
- failed: "Неудачных: {{count}}",
- partsPrinted: "Напечатано деталей: {{count}}",
- printTime: "Время печати",
- filamentUsed: "Израсходовано филамента",
- },
- cost: {
- title: "Учёт стоимости",
- filamentCost: "Стоимость филамента",
- energy: "Электроэнергия",
- totalCost: "Общая стоимость",
- total: "Итого",
- includesBom: "включая спецификацию",
- budget: "Бюджет",
- remaining: "Остаток",
- },
- subProjects: {
- title: "Подпроекты ({{count}})",
- jobs: "Заданий: {{count}}",
- },
- rollup: {
- title: "Включая подпроекты: {{count}}",
- progress: "Общий прогресс",
- percentComplete: "Завершено {{percent}}%",
- },
- notes: {
- title: "Заметки",
- noEditPermission: "У вас нет прав на изменение заметок",
- placeholder: "Добавьте заметки о проекте...",
- empty: "Заметок пока нет. Нажмите «Изменить», чтобы добавить.",
- },
- files: {
- title: "Файлы",
- linkFolders: "Свяжите папки из файлового менеджера",
- forQuickAccess: "с этим проектом для быстрого доступа.",
- fileCount: "Файлов: {{count}}",
- empty: "Связанных папок нет. Откройте файловый менеджер и свяжите папку с проектом.",
- printedCount: "Напечатано {{count}} раз",
- progressTooltip: "{{done}} из {{target}} завершённых печатей",
- noFiles: "В этой папке нет файлов.",
- },
- bom: {
- title: "Спецификация",
- acquired: "Приобретено: {{completed}}/{{total}}",
- showAll: "Показать всё",
- hideDone: "Скрыть готовое",
- addPart: "Добавить позицию",
- noAddPermission: "У вас нет прав на добавление позиций",
- partNamePlaceholder: "Название позиции (например, винты M3×8)",
- partName: "Название позиции",
- qty: "Кол-во",
- price: "Цена ({{currency}})",
- sourcingUrlPlaceholder: "Ссылка на поставщика (необязательно)",
- remarksPlaceholder: "Примечание (необязательно)",
- deletePart: "Удалить позицию",
- deleteConfirm: "Удалить «{{name}}»?",
- noUpdatePermission: "У вас нет прав на обновление позиций",
- noEditPermission: "У вас нет прав на изменение позиций",
- noDeletePermission: "У вас нет прав на удаление позиций",
- totalCost: "Общая стоимость:",
- empty: "В спецификации пока нет позиций. Добавьте крепёж, электронику и другие компоненты, закупку которых нужно отслеживать.",
- },
- timeline: {
- title: "Хронология активности",
- empty: "Активности пока нет.",
- },
- template: {
- saveAsTemplate: "Сохранить как шаблон",
- noCreatePermission: "У вас нет прав на создание шаблонов",
- },
- queue: {
- title: "Очередь",
- viewAll: "Показать всё",
- printing: "Печатается: {{count}}",
- queued: "В очереди: {{count}}",
- },
- prints: {
- title: "Печати ({{count}})",
- },
- toast: {
- projectUpdated: "Проект обновлён",
- partAdded: "Позиция добавлена",
- partRemoved: "Позиция удалена",
- exportFailed: "Не удалось экспортировать",
- projectExported: "Проект экспортирован",
- templateCreated: "Шаблон создан",
- },
- },
- system: {
- title: "Информация о системе",
- version: "Версия",
- uptime: "Время работы",
- cpuUsage: "Загрузка процессора",
- memoryUsage: "Использование памяти",
- diskUsage: "Использование диска",
- networkInfo: "Сетевая информация",
- logs: "Журналы",
- debugMode: "Режим отладки",
- enableDebug: "Включить журналирование отладки",
- disableDebug: "Отключить журналирование отладки",
- downloadLogs: "Скачать журналы",
- clearLogs: "Очистить журналы",
- dockerInfo: "Информация о Docker",
- containerName: "Имя контейнера",
- imageName: "Имя образа",
- platform: "Платформа",
- architecture: "Архитектура",
- },
- sponsors: {
- sectionTitle: "Независимый проект на поддержке сообщества",
- tagline: "Bambuddy бесплатен и остаётся таким благодаря добровольной поддержке пользователей. Без венчурного капитала и привязки к облаку.",
- viewSupporters: "Посмотреть сторонников проекта",
- toastPrints: "С Bambuddy выполнено печатей: {{count}}. Проект остаётся бесплатным благодаря поддержке сообщества.",
- toastCost: "С помощью Bambuddy учтено филамента на сумму {{total}}. Посмотрите, кто помогает проекту оставаться независимым.",
- toastArchives: "С Bambuddy архивировано печатей: {{count}}. Посмотрите, кто помогает проекту оставаться независимым.",
- toastAnniversary: "Вы уже год с Bambuddy! Посмотрите, кто помогает проекту оставаться независимым.",
- toastVersionUpdate: "Обновлено до версии {{version}}. Bambuddy остаётся бесплатным благодаря поддержке сообщества.",
- toastBusiness: "Используете Bambuddy для {{count}} принтеров? Для команд доступен план поддержки с приоритетным исправлением ошибок, выставлением счетов и прямой связью с разработчиком.",
- businessCta: "Bambuddy для бизнеса",
- businessTitle: "Bambuddy для бизнеса",
- businessTagline: "Вы используете {{count}} принтеров. Для команд и печатных ферм доступны приоритетная поддержка, коммерческая лицензия и выставление счетов.",
- },
- library: {
- title: "Библиотека филаментов",
- addFilament: "Добавить филамент",
- editFilament: "Изменить филамент",
- deleteFilament: "Удалить филамент",
- vendor: "Производитель",
- material: "Материал",
- color: "Цвет",
- kFactor: "Коэффициент K",
- temperature: "Температура",
- noFilaments: "В библиотеке нет филаментов",
- deleteConfirm: "Удалить этот филамент?",
- importFromPrinter: "Импортировать с принтера",
- exportToFile: "Экспортировать в файл",
- runWithPipeline: {
- actionLabel: "Запустить через конвейер",
- noPermission: "У вас нет прав на запуск конвейеров",
- modalTitle: "Запуск через конвейер",
- confirmTitle: "Подтверждение запуска",
- confirmIntro: "Предварительная проверка обнаружила проблемы",
- sourceHint: "Источник",
- pipelineHint: "Конвейер",
- targetHint: "Назначение",
- pipelineListAria: "Доступные конвейеры",
- runAnyway: "Всё равно запустить",
- loading: "Загрузка…",
- empty: "Сохранённых конвейеров пока нет. Откройте диалог нарезки и нажмите «Сохранить как конвейер».",
- noTarget: "Целевой принтер не задан",
- noTargetMessage: "Для этого конвейера не задан целевой принтер. Откройте его в настройках и выберите принтер.",
- copies: "Копии",
- copiesHint: "макс. {{n}}",
- classTarget: "Любой {{model}}",
- toast: {
- started: "Конвейер запущен",
- failed: "Не удалось запустить конвейер",
- },
- issue: {
- printerNotSet: "Для этого конвейера не задан целевой принтер.",
- printerNotFound: "Целевой принтер больше не существует.",
- printerDisabled: "Целевой принтер отключён.",
- printerOffline: "Целевой принтер не в сети.",
- filamentType: "Слот филамента {{slot}}: ожидается {{expected}}, в AMS установлен {{actual}}",
- filamentColor: "Слот филамента {{slot}}: цвет отличается (ожидается {{expected}}, в AMS установлен {{actual}})",
- amsSlotMissing: "Слот AMS {{slot}} недоступен на этом принтере",
- filamentUnverified: "Филамент в слоте {{slot}} выбран из облачного или стандартного профиля и не может быть проверен заранее.",
- noClassMatches: "Ни один принтер в этой установке не соответствует целевому классу модели конвейера ({{expected}}).",
- classNotSet: "В качестве цели конвейера выбран класс принтера, но модель не указана.",
- },
- },
- },
- slicerSettings: {
- presetValuesOutdatedSidecar: 'Показаны значения по умолчанию слайсера: ваш sidecar старше этой функции и не может сообщить значения профиля. Обновите образ sidecar, чтобы увидеть их. Всё, что вы не измените, по-прежнему берётся из профиля.',
- presetValuesNotConfigured: 'Показаны значения по умолчанию слайсера: sidecar не настроен, поэтому значения профиля прочитать нельзя. Всё, что вы не измените, по-прежнему берётся из профиля.',
- presetValuesSidecarUnavailable: 'Показаны значения по умолчанию слайсера: sidecar не ответил, поэтому значения профиля прочитать нельзя. Всё, что вы не измените, по-прежнему берётся из профиля.',
- presetValuesUnavailable: 'Показаны значения по умолчанию слайсера: значения выбранного профиля прочитать не удалось. Всё, что вы не измените, по-прежнему берётся из профиля.',
- filamentDefault: 'По умолчанию',
- fromFile: 'из файла',
- fromFileHint: 'Автор модели изменил этот параметр в исходном файле. Значение: {{value}}.',
- fromFilePrinterCoupled: 'принтер автора',
- fromFilePrinterCoupledHint: 'Подобрано под принтер, для которого создан файл, — на вашем значение может быть неверным или вне диапазона.',
- fromFileOverridesPreset: 'переопределяет пресет',
- fromFileOverridesPresetHint:
- 'В файле задано {{value}}, а выбранный пресет использует {{preset}}. Отмечайте, только если приоритет должен быть у файла.',
- useFromFile: 'Использовать значение из исходного файла для «{{option}}»',
- otherFromFile: 'Другие параметры из этого файла',
- fromFileSummary: "Дизайнер изменил в этом файле {{count}} параметров процесса. Применяются только отмеченные.",
- fromFileUseAll: "Использовать настройки дизайнера",
- fromFileUseAllHint: "Отмечает параметры, которые переносятся на другие принтеры. Подогнанные под принтер дизайнера и задающие выбранный пресет остаются выключенными.",
- fromFileClear: "Снять {{count}}",
- loading: 'Загрузка настроек слайсера…',
- mode: {
- simple: 'Простой',
- advanced: 'Расширенный',
- expert: 'Эксперт',
- },
- searchPlaceholder: 'Поиск параметров',
- resetAll: 'Сбросить: {{count}}',
- resetOption: 'Сбросить к значению по умолчанию',
- noMatches: 'Нет параметров, соответствующих запросу.',
- },
- slice: {
- filamentSlotUnset: 'не задано',
- processSettingsEmbedded: 'Не используется, пока включено «Использовать встроенные настройки файла» — нарезкой управляют настройки самого файла.',
- processSettingsInactive: 'Не активно',
- presetsHidden: 'скрыто: {{count}}',
- showAllPresets: 'Показать все',
- showFewerPresets: 'Показать меньше',
- processSettings: 'Параметры процесса',
- processSettingsHint: 'Настройте выбранный профиль для этой нарезки. Всё, что вы не измените, останется как задано в профиле.',
- processSettingsChanged: 'изменено: {{count}}',
- processSettingsUnchanged: 'Значения профиля',
- title: "Нарезка модели",
- action: "Нарезать",
- actionAll: "Нарезать все пластины ({{count}})",
- actionAllTitle: "Нарезать все пластины в один многостольный результат и сохранить в одном архиве. Выбор филаментов охватывает все слоты, используемые проектом.",
- allPlatesToggle: "Нарезать все пластины ({{count}})",
- slicing: "Нарезка…",
- printer: "Профиль принтера",
- process: "Профиль процесса",
- filament: "Профиль филамента",
- filamentSlot: "Филамент {{index}} ({{type}})",
- filamentColour: "Цвет филамента",
- selectPreset: "— Выберите профиль —",
- loadingPresets: "Загрузка профилей…",
- analyzingPlateFilaments: "Анализ филаментов пластины…",
- analyzingPlateFilamentsHint: "Выполняется предварительная нарезка, чтобы определить, какие слоты AMS используются на этой пластине. Результат кэшируется, поэтому повторное открытие будет мгновенным.",
- previewToast: "Анализ {{name}} — {{elapsed}}",
- previewWithProgress: "Анализ {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",
- notUsedByPlate: "— не используется на этой пластине",
- noPresetsForSlot: "Нет доступных профилей",
- otherPrinters: "Другие принтеры",
- presetsLoadFailed: "Не удалось загрузить профили. Сначала импортируйте их в разделе «Настройки → Профили».",
- refreshPresets: "Обновить",
- refreshPresetsTitle: "Обновить профили — получить свежие облачные и встроенные списки. Используйте после удаления профиля в Bambu Studio или Bambu Handy.",
- allPresetsRequired: "Необходимо выбрать все профили",
- useEmbedded: "Использовать встроенные настройки файла",
- useEmbeddedHint: "Нарезать так, как задумал автор модели (стенки, заполнение, филамент), вместо профилей выше. Доступно, потому что ваш принтер совпадает с указанным в файле.",
- autoOrient: 'Автоматически ориентировать объекты',
- autoOrientHint: 'Слайсер повернёт каждый объект на сторону, которая печатается лучше всего. Ориентация из файла будет заменена.',
- autoArrange: 'Автоматически разместить на столе',
- autoArrangeHint: 'Слайсер расставит объекты так, чтобы они не перекрывались. Расположение из файла будет заменено.',
- enqueuing: "Отправка задания на нарезку…",
- queued: "В очереди…",
- failed: "Ошибка нарезки. Проверьте журналы вспомогательного сервиса слайсера.",
- startedToast: "Фоновая нарезка {{name}}…",
- queuedToast: "В очереди: {{name}} — {{elapsed}}",
- runningToast: "Нарезка {{name}} — {{elapsed}}",
- runningWithProgress: "{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",
- runningWithProgressMultiPlate: "Пластина {{plateIndex}} из {{plateCount}} • {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}",
- completedToast: "Нарезка {{name}} завершена",
- externalWriteFallbackToast: "Сохранено во внутренней библиотеке: не удалось записать во внешнюю папку",
- failedTitle: "Ошибка нарезки",
- failedToast: "Не удалось нарезать {{name}}: {{detail}}",
- tier: {
- local: "Импортированные",
- cloud: "Bambu Cloud",
- orcaCloud: "Orca Cloud",
- standard: "Стандартные",
- },
- cloud: {
- notAuthenticated: "Войдите в Bambu Cloud («Настройки → Профили → Bambu Cloud»), чтобы увидеть облачные профили.",
- expired: "Сессия Bambu Cloud истекла. Войдите снова, чтобы обновить облачные профили.",
- unreachable: "Bambu Cloud сейчас недоступен. Локальные и стандартные профили продолжат работать.",
- },
- orcaCloud: {
- notAuthenticated: "Войдите в Orca Cloud («Профили → Orca Cloud»), чтобы увидеть профили Orca.",
- expired: "Сессия Orca Cloud истекла. Войдите снова, чтобы обновить профили Orca.",
- unreachable: "Orca Cloud сейчас недоступен. Остальные профили продолжат работать.",
- },
- bedType: {
- label: "Печатная пластина",
- auto: "Авто (из профиля процесса)",
- coolPlate: "Холодная пластина",
- coolPlateSuperTack: "Холодная пластина SuperTack",
- engineering: "Инженерная пластина",
- highTemp: "Высокотемпературная пластина",
- texturedPEI: "Текстурированная PEI-пластина",
- smoothPEI: "Гладкая PEI-пластина",
- },
- pipelines: {
- label: "Конвейер",
- applyAria: "Применить конвейер",
- applyPrompt: "Применить конвейер…",
- empty: "Нет сохранённых конвейеров",
- saveButton: "Сохранить как конвейер",
- saveTitle: "Сохранить текущий набор из четырёх профилей как повторно используемый конвейер",
- namePlaceholder: "Название конвейера",
- nameAria: "Название нового конвейера",
- toast: {
- applied: "Применён конвейер «{{name}}»",
- saved: "Конвейер сохранён",
- saveFailed: "Не удалось сохранить",
- },
- },
- },
- spoolman: {
- title: "Интеграция со Spoolman",
- enabled: "Spoolman включён",
- url: "URL Spoolman",
- connected: "Подключено",
- disconnected: "Нет подключения",
- testConnection: "Проверить подключение",
- sync: "Синхронизировать",
- syncing: "Синхронизация…",
- lastSync: "Последняя синхронизация",
- linkToSpoolman: "Связать со Spoolman",
- openInSpoolman: "Открыть в Spoolman",
- unlinkSpool: "Отвязать катушку",
- unlinkConfirmTitle: "Снять назначение катушки?",
- unlinkConfirmMessage: "Катушка будет удалена из этого слота. Данные самой катушки останутся без изменений.",
- selectSpool: "Выбрать катушку",
- noUnlinkedSpools: "Нет свободных катушек",
- linkSuccess: "Катушка успешно назначена",
- linkFailed: "Не удалось назначить катушку",
- unlinkSuccess: "Назначение катушки снято",
- unlinkFailed: "Не удалось снять назначение катушки",
- linkedSpool: "Назначенная катушка",
- spoolId: "ID катушки",
- fillSourceLabel: "(Spoolman)",
- weight: "Масса",
- remaining: "Остаток",
- disableWeightSync: "Отключить синхронизацию расчётной массы AMS",
- disableWeightSyncDesc: "Не обновлять остаток по оценке AMS. Используйте это, если предпочитаете учёт расхода Spoolman процентной оценке AMS. Для новых катушек оценка AMS всё равно будет использована как начальная масса.",
- reportPartialUsage: "Учитывать частичный расход при неудачной печати",
- reportPartialUsageDesc: "Если печать завершилась ошибкой или была отменена, учитывать примерный расход филамента до этого момента по прогрессу слоёв.",
- },
- locations: {
- title: "Места хранения",
- subtitle: "Управление полками, ящиками и другими физическими местами хранения катушек",
- add: "Добавить место",
- addShort: "Добавить",
- edit: "Изменить место",
- name: "Название",
- spools: "Катушки",
- sensors: "Датчики",
- empty: "Мест хранения пока нет. Создайте первую полку или ящик.",
- manage: "Места хранения",
- createPlaceholder: "например, Полка A или Ящик 1",
- nameRequired: "Укажите название места хранения",
- created: "Место хранения создано",
- updated: "Место хранения обновлено",
- deleted: "Место хранения удалено",
- saveFailed: "Не удалось сохранить место хранения",
- deleteFailed: "Не удалось удалить место хранения",
- deleteBlocked: "Перед удалением переместите из этого места все катушки",
- confirmDelete: "Удалить «{{name}}»?",
- confirmDeleteMessage: "Это место будет удалено из каталога. Сначала необходимо переместить все катушки.",
- confirmDeleteMessageWithSensors: 'Это место будет удалено из каталога. Сначала необходимо переместить все катушки. Подключённые датчики также будут удалены.',
- },
- inventory: {
- title: "Учёт катушек",
- subtitle: "Управление катушками",
- addToInventory: "Добавить в учёт",
- addToInventoryPending: "Добавление…",
- addToInventorySuccess: "Катушка добавлена в учёт",
- addToInventoryFailed: "Не удалось добавить катушку в учёт",
- unknownSpoolTitle: "Обнаружен новый филамент",
- unknownSpoolMessage: "В {{location}} обнаружена катушка с неизвестной RFID-меткой. Добавить её в учёт?",
- unknownSpoolSlot: "Слот",
- bulk: {
- selectAllVisible: "Выбрать все видимые",
- selectRow: "Выбрать строку",
- selectGroup: "Выбрать группу",
- selectionCount: "Выбрано: {{count}}",
- edit: "Изменить",
- printLabels: "Печать этикеток",
- resetUsage: "Сбросить расход",
- restore: "Восстановить",
- archive: "Архивировать",
- delete: "Удалить",
- clearSelection: "Снять выделение",
- editTitle: "Массовое изменение катушек",
- editSubtitle: "Изменения применятся к {{count}} выбранным катушкам. Обновятся только отмеченные поля.",
- editHint: "Введите значение в поле, чтобы включить его обновление. Будут отправлены только отмеченные строки. Пустое поле не изменяет катушки; очистить значение можно только при редактировании отдельной катушки.",
- useCustom: "Использовать «{{value}}»",
- toggleField: "Включить или отключить обновление этого поля",
- changeCount: "Будет обновлено полей: {{count}}.",
- applyPending: "Применение…",
- applyButton: "Применить к {{count}} катушкам",
- deleteTitle: "Удалить выбранные катушки",
- archiveTitle: "Архивировать выбранные катушки",
- restoreTitle: "Восстановить выбранные катушки",
- resetUsageTitle: "Сбросить расход выбранных катушек",
- deleteMessage: "Безвозвратно удалить {{count}} катушек? Это действие нельзя отменить.",
- archiveMessage: "Архивировать {{count}} катушек? Позже их можно будет восстановить.",
- restoreMessage: "Восстановить {{count}} архивных катушек?",
- resetUsageMessage: "Сбросить счётчик «Израсходовано всего» у {{count}} катушек? Текущий остаток массы сохранится.",
- updateSuccess: "Обновлено катушек: {{count}}",
- updateFailed: "Ошибка массового обновления",
- updatePartial: "Обновлено: {{ok}}, с ошибкой: {{failed}}",
- updateAllFailed: "Не удалось обновить все {{count}} катушек. Выделение сохранено для повторной попытки.",
- deleteSuccess: "Удалено катушек: {{count}}",
- deleteFailed: "Ошибка массового удаления",
- deletePartial: "Удалено: {{ok}}, с ошибкой: {{failed}}",
- deleteAllFailed: "Не удалось удалить все {{count}} катушек. Выделение сохранено для повторной попытки.",
- archiveSuccess: "Архивировано катушек: {{count}}",
- archiveFailed: "Ошибка массового архивирования",
- archivePartial: "Архивировано: {{ok}}, с ошибкой: {{failed}}",
- archiveAllFailed: "Не удалось архивировать все {{count}} катушек. Выделение сохранено для повторной попытки.",
- restoreSuccess: "Восстановлено катушек: {{count}}",
- restoreFailed: "Ошибка массового восстановления",
- restorePartial: "Восстановлено: {{ok}}, с ошибкой: {{failed}}",
- restoreAllFailed: "Не удалось восстановить все {{count}} катушек. Выделение сохранено для повторной попытки.",
- invalidHex: "Введите 6 шестнадцатеричных символов (RRGGBB) или 8 (RRGGBBAA), иначе поле не будет применено.",
- },
- spoolmanMixedContentTitle: "Spoolman не загружается через HTTPS: браузер заблокировал смешанное содержимое",
- spoolmanMixedContentBody: "Bambuddy открыт через HTTPS (через обратный прокси), а URL Spoolman всё ещё использует обычный HTTP. Браузер блокирует такое смешанное содержимое, поэтому встроенный интерфейс Spoolman не отображается. Для работы Spoolman должен быть доступен по HTTPS.",
- spoolmanMixedContentFixReverseProxy: "Разместите Spoolman за тем же обратным прокси, что и Bambuddy (Traefik / Nginx / Caddy), включите HTTPS и укажите новый HTTPS-адрес Spoolman в настройках.",
- spoolmanMixedContentFixOpenNewTab: "В качестве обходного решения откройте Spoolman по HTTP в новой вкладке. Ограничение смешанного содержимого действует только для встроенных фреймов.",
- spoolmanOpenInNewTab: "Открыть Spoolman в новой вкладке",
- labels: {
- title: "Печать этикеток катушек",
- selectedCount: "Выбрано: {{count}}",
- pickSpools: "Выберите катушки для печати этикеток:",
- monochrome: "Монохромный режим (чёрно-белый принтер)",
- monochromeHint: "Убирает образец цвета и расширяет область текста",
- startingPosition: "Начальная позиция этикетки",
- startingPositionRange: "Только для листовых шаблонов: L7160 — 1–21; 5160 — 1–30.",
- startingPositionInvalid: "Введите целое число от 1 до {{capacity}}.",
- startingPositionFirst: "Печать начинается с позиции 1.",
- startingPositionSkipped: "Позиции с 1 по {{lastPosition}} останутся пустыми на первом листе.",
- startingPositionRangeError: "Начальная позиция для этого листа должна быть от 1 до {{capacity}}.",
- searchPlaceholder: "Поиск по названию, бренду или #ID",
- filterByMaterial: "Материал:",
- allMaterials: "Все",
- selectVisible: "Выбрать все видимые ({{count}})",
- deselectVisible: "Снять выделение с видимых",
- clearAll: "Очистить выбор",
- noSpoolsToShow: "Нет катушек для отображения. Измените фильтр и повторите попытку.",
- noMatches: "Нет катушек, соответствующих поиску или фильтру.",
- printOne: "Напечатать этикетку этой катушки",
- printLabels: "Печать этикеток…",
- bulkTitle: "Выберите катушки для печати этикеток из {{count}} отображаемых",
- noSpoolsTitle: "Нет катушек для печати этикеток",
- error: "Не удалось создать этикетки: {{msg}}",
- sortBy: {
- label: "Сортировка:",
- id: "По ID",
- color: "По цвету",
- },
- templates: {
- amsHolderSmall: {
- label: "Держатель AMS — малый (74 × 33 мм)",
- hint: "Одна этикетка на страницу; соответствует печатной этикетке для модели MakerWorld 752566 (AMS Filament Label Holder).",
- },
- amsHolderLarge: {
- label: "Держатель AMS — большой (75 × 55 мм)",
- hint: "Одна этикетка на страницу; подходит для варианта держателя AMS с картонной вставкой. Достаточно места для образца цвета, бренда, материала, ID и QR-кода.",
- },
- box40x30: {
- label: "Этикетка для коробки (40 × 30 мм)",
- hint: "Одна этикетка на страницу; распространённый размер рулона DK/Brother, подходит для пакетов с филаментом и контейнеров хранения.",
- },
- box: {
- label: "Этикетка для коробки (62 × 29 мм)",
- hint: "Одна этикетка на страницу; размер для малых этикеток Brother PT/QL и Dymo.",
- },
- averyL7160: {
- label: "Avery L7160 — лист A4 (38,1 × 63,5 мм × 21)",
- hint: "Европейский формат: 21 этикетка на листе A4.",
- },
- avery5160: {
- label: "Avery 5160 — лист US Letter (25,4 × 66,7 мм × 30)",
- hint: "Американский формат: 30 этикеток на листе Letter.",
- },
- },
- },
- csv: {
- importButton: "Импорт CSV",
- exportButton: "Экспорт CSV",
- modalTitle: "Импорт катушек из CSV",
- selectFile: "Выберите CSV-файл или перетащите его сюда",
- dragHint: "Заголовок: material (обязательно), brand, subtype, color_name, rgba, …",
- parsing: "Чтение файла…",
- previewError: "Не удалось прочитать CSV-файл",
- validCount: "Корректных: {{count}}",
- errorCount: "Ошибок: {{count}}",
- skippedCount: "Пропущено: {{count}}",
- colRow: "Строка",
- colStatus: "Состояние",
- colColor: "Цвет",
- colorResolved: "Цвет подставлен из каталога",
- colorCrossMaterial: "Цвет взят у другого материала: точного совпадения в каталоге нет",
- duplicateExisting: "Катушка с таким материалом, брендом и цветом уже существует, но запись всё равно будет импортирована как новая катушка",
- spoolmanHint: "В режиме Spoolman используйте встроенный импорт и экспорт CSV в Spoolman.",
- importValidRows: "Импортировать {{count}} корректных строк",
- noValidRows: "Нет корректных строк",
- importing: "Импорт…",
- importSuccess: "Импортировано катушек: {{count}}",
- importError: "Ошибка импорта",
- exportError: "Ошибка экспорта",
- },
- addSpool: "Добавить катушку",
- editSpool: "Изменить катушку",
- copySpool: "Копировать катушку",
- material: "Материал",
- selectMaterial: "Выберите материал…",
- subtype: "Подтип",
- brand: "Бренд",
- searchBrand: "Поиск бренда…",
- useCustomBrand: "Использовать «{{brand}}»",
- useCustomMaterial: "Использовать свой материал: {{material}}",
- suggestedOptions: "Рекомендуемые",
- allOptions: "Все",
- colorName: "Название цвета",
- colorNamePlaceholder: "Jade White, Fire Red…",
- color: "Цвет",
- hexColor: "Цвет HEX",
- pickColor: "Выбрать свой цвет",
- labelWeight: "Номинальная масса",
- coreWeight: "Масса пустой катушки",
- searchSpoolWeight: "Поиск массы катушки…",
- weightUsed: "Израсходовано",
- currentWeight: "Остаток массы",
- measuredWeight: "Измеренная масса",
- spoolName: "Катушка",
- costPerKg: "Стоимость за кг",
- storageLocation: "Место хранения",
- temperature: "Температура",
- humidity: "Влажность",
- battery: "Батарея",
- storageLocationPlaceholder: "например, Полка A, Ящик 1",
- openInInventory: "Открыть в учёте",
- measuredWeightError: "Измеренная масса должна быть от {{min}} до {{max}} г.",
- slicerFilament: "Филамент слайсера",
- slicerFilamentName: "Название пресета слайсера",
- slicerPreset: "Пресет слайсера",
- searchPresets: "Поиск пресетов филамента…",
- selectedPreset: "Выбрано",
- noPresetsFound: "Пресеты не найдены",
- tempOverrides: "Переопределение температур",
- note: "Примечание",
- notePlaceholder: "Дополнительные сведения об этой катушке…",
- category: "Категория",
- categoryPlaceholder: "например, Производство, Прототип, Клиент A",
- categoryNone: "Без категории",
- storageLocationNone: "Место не указано",
- lowStockThresholdOverride: "Порог малого остатка (эта катушка)",
- lowStockThresholdOverrideHelp: "Оставьте пустым, чтобы использовать общий порог ({{global}}%).",
- clearRfid: "Очистить RFID-метку",
- rfidCleared: "RFID-метка очищена",
- archive: "Архивировать",
- restore: "Восстановить",
- noSpools: "Катушек пока нет. Добавьте первую катушку.",
- noAvailableSpools: "Нет доступных катушек. Добавьте катушку в учёт или сначала освободите её в другом слоте.",
- kProfiles: "K-профили",
- addKProfile: "Добавить K-профиль",
- assignSpool: "Назначить катушку",
- unassignSpool: "Снять назначение",
- assignSuccess: "Катушка назначена, слот AMS настроен",
- assignPendingInsert: "Катушка назначена. Слот будет настроен после её установки.",
- assignFailed: "Не удалось назначить катушку",
- selectSpool: "Выберите катушку для назначения этому слоту",
- assigned: "Назначено",
- assigning: "Назначение…",
- searchSpools: "Поиск катушек…",
- showAllSpools: "Показать все катушки",
- spoolmanSpools: "Катушки Spoolman",
- allMaterials: "Все материалы",
- filterByBrand: "Фильтр по бренду…",
- showArchived: "Показывать архивные",
- quickAdd: "Быстрое добавление",
- quantity: "Количество",
- stock: "На складе",
- configured: "Настроено",
- spoolsCreated: "Создано катушек: {{count}}",
- spoolsPartiallyCreated: "Создано {{created}} из {{total}} катушек; часть операций завершилась ошибкой",
- spoolCreated: "Катушка создана",
- spoolUpdated: "Катушка обновлена",
- spoolDeleted: "Катушка удалена",
- deepLinkSpoolNotFound: "Катушка не найдена",
- deepLinkFetchFailed: "Не удалось загрузить катушку. Повторите попытку.",
- spoolArchived: "Катушка архивирована",
- spoolRestored: "Катушка восстановлена",
- kProfileSaveFailed: "Не удалось сохранить настройки K-профиля",
- syncWeightSpoolNotFound: "Катушка не найдена: возможно, она была удалена",
- syncWeightSpoolmanUnreachable: "Spoolman недоступен. Повторите попытку позже.",
- syncWeightFailed: "Не удалось синхронизировать массу",
- spoolmanUnreachable: "Spoolman недоступен. Повторите попытку позже.",
- deleteSpoolNotFound: "Катушка не найдена: возможно, она уже удалена",
- deleteFailed: "Не удалось удалить катушку",
- archiveSpoolNotFound: "Катушка не найдена: возможно, она уже удалена",
- archiveFailed: "Не удалось архивировать катушку",
- restoreSpoolNotFound: "Катушка не найдена: возможно, она уже удалена",
- restoreFailed: "Не удалось восстановить катушку",
- saveFailed: "Не удалось сохранить изменения",
- tagClearFailed: "Не удалось очистить метку",
- deleteConfirm: "Удалить эту катушку без возможности восстановления?",
- archiveConfirm: "Архивировать эту катушку?",
- advancedSettings: "Расширенные настройки",
- filamentInfoTab: "Сведения о филаменте",
- paProfileTab: "Профиль PA",
- colorAndCostTab: 'Цвет и стоимость',
- printersTab: 'Принтеры',
- filamentInfo: "Филамент",
- additional: "Дополнительно",
- loadingPresets: "Загрузка облачных пресетов…",
- cloudConnected: "Облако подключено",
- cloudNotConnected: "Облако не подключено; используются значения по умолчанию",
- recentColors: "Недавние",
- searchColors: "Поиск цветов…",
- searchResults: "Результаты поиска",
- allColors: "Все цвета",
- commonColors: "Основные цвета",
- showLess: "Показать меньше",
- showAll: "Показать все",
- noColorsFound: "Нет цветов, соответствующих запросу",
- noResults: "Совпадений не найдено",
- extraColorsLabel: "Дополнительные цвета",
- extraColorsPlaceholder: "EC984C,#6CD4BC,A66EB9,D87694",
- extraColorsHint: "Вставьте от 2 до 8 HEX-цветов через запятую. Они будут отображены как градиент.",
- extraColorsInvalid: "Пропущены некорректные HEX-значения: {{tokens}}",
- colorEffectLabel: "Эффект",
- colorEffect: {
- none: "Нет",
- sparkle: "Блёстки",
- wood: "Дерево",
- marble: "Мрамор",
- glow: "Свечение",
- matte: "Матовый",
- silk: "Шёлк",
- galaxy: "Галактика",
- rainbow: "Радуга",
- metal: "Металл",
- translucent: "Полупрозрачный",
- gradient: "Градиент",
- dualColor: "Двухцветный",
- triColor: "Трёхцветный",
- multicolor: "Многоцветный",
- },
- selectMaterialFirst: "Сначала выберите материал на вкладке «Сведения о филаменте».",
- noPrintersConfigured: "Принтеры не настроены. Добавьте принтеры, чтобы использовать профили PA.",
- matchingFilter: "Совпадающие",
- anyBrand: "Любой бренд",
- anyVariant: "Любой вариант",
- autoSelect: "Автовыбор",
- matches: "совпадений",
- match: "совпадение",
- noMatches: "Нет совпадений",
- connected: "Подключён",
- offline: "Не в сети",
- printerOffline: "Принтер не в сети. Подключите его для просмотра калибровочных профилей.",
- noKProfilesMatch: "Нет K-профилей, соответствующих выбранному филаменту.",
- leftNozzle: "Левое сопло",
- rightNozzle: "Правое сопло",
- profilesSelected: "выбрано калибровочных профилей",
- // Printers tab: per-model filament preset + per-hotend K profile
- filamentPreset: 'Пресет филамента',
- presetUseSpoolDefault: 'Использовать пресет катушки',
- presetInherited: 'наследуется',
- presetOverride: 'переопределён',
- presetNeedsModel: 'Этот принтер ещё не сообщил свою модель, поэтому у него не может быть собственного пресета.',
- autoMatchPresets: 'Подобрать автоматически',
- autoMatchPresetsHint: 'Найти вариант пресета катушки, в названии которого указана каждая модель',
- kProfilesPerPrinter: 'K-профили',
- kProfileNotSet: 'Не задан',
- kProfileFlowMismatch: 'Этот профиль измерен на сопле {{profile}}, но установлено сопло {{fitted}}, поэтому он не будет применён',
- nozzle: 'Сопло',
- unknownModel: 'Неизвестная модель',
- onePrinter: '1 принтер',
- nPrinters: 'Принтеров: {{n}}',
- filamentPresetsLoadFailed: 'Не удалось загрузить пресеты по моделям для этой катушки',
- filamentPresetSaveFailed: 'Не удалось сохранить пресеты по моделям',
- totalInventory: "Всего в учёте",
- totalConsumed: "Израсходовано всего",
- byMaterial: "По материалам",
- inPrinter: "В принтерах",
- lowStock: "Малый остаток",
- sinceTracking: "С начала учёта",
- resetConsumedCounter: "Сбросить счётчик",
- resetConsumedCounterTooltip: "Обнулить счётчик израсходованных граммов для этой катушки. Остаток массы не изменится.",
- resetConsumedCounterConfirm: "Сбросить счётчик расхода этой катушки до 0? Последующие печати будут учитываться заново. Сама катушка, расчёт остатка и настройки не изменятся.",
- resetAllConsumedCounters: "Сбросить все счётчики",
- resetAllConsumedCountersTooltip: "Обнулить счётчик израсходованных граммов у всех катушек. Остатки массы не изменятся.",
- resetAllConsumedCountersConfirm: "Сбросить счётчик расхода до 0 у всех {{count}} катушек, включая архивные? Показатель «Израсходовано всего» будет очищен, а будущие печати начнут учитываться с нуля. Катушки и их остатки не изменятся.",
- consumedCounterReset: "Счётчик сброшен",
- allConsumedCountersReset: "Счётчик сброшен у {{count}} катушек",
- resetConsumedCounterFailed: "Не удалось сбросить счётчик",
- loadedInAms: "Загружено в AMS/внешний слот",
- remaining: "Остаток",
- weightCheck: "Проверка массы",
- lastWeighed: "Последнее взвешивание",
- neverWeighed: "Не взвешивалась",
- search: "Поиск катушек…",
- showing: "Показано",
- to: "–",
- of: "из",
- show: "Показывать",
- spools: "катушек",
- spool: "катушка",
- page: "Страница",
- noSpoolsMatch: "Ничего не найдено",
- noSpoolsMatchDesc: "Измените поисковый запрос или фильтры.",
- active: "Активные",
- archived: "Архивные",
- all: "Все",
- used: "Израсходовано",
- new: "Новые",
- clearFilters: "Сбросить фильтры",
- table: "Таблица",
- cards: "Карточки",
- net: "Нетто",
- groupSimilar: "Группировать",
- groupedSpools: "Одинаковых катушек: {{count}}",
- groupedRows: "строк",
- columns: "Столбцы",
- configureColumns: "Настроить столбцы",
- configureColumnsDesc: "Перетаскивайте столбцы или используйте стрелки для изменения порядка. Видимость переключается значком глаза.",
- visible: "видимых",
- reset: "Сбросить",
- cancel: "Отмена",
- applyChanges: "Применить изменения",
- moveUp: "Переместить вверх",
- moveDown: "Переместить вниз",
- hideColumn: "Скрыть столбец",
- showColumn: "Показать столбец",
- linkToSpool: "Связать с катушкой",
- tagLinked: "Метка связана с катушкой",
- tagLinkFailed: "Не удалось связать метку",
- tagAlreadyLinked: "Метка уже связана с другой катушкой",
- unknownTag: "Обнаружена неизвестная RFID-метка",
- usageHistory: "История расхода",
- noUsageHistory: "Расход пока не зарегистрирован",
- printName: "Название печати",
- weightConsumed: "Израсходованная масса",
- clearHistory: "Очистить",
- historyCleared: "История расхода очищена",
- fillSourceLabel: "(Учёт)",
- lowStockThresholdError: "Порог должен быть от 0,1 до 99,9",
- assignMismatchTitle: "Несоответствие материала",
- assignMismatchMessage: "Материал выбранной катушки «{{spoolMaterial}}» не соответствует материалу слота «{{trayMaterial}}» в {{location}}. Всё равно назначить?",
- assignMismatchConfirm: "Всё равно назначить",
- assignPartialMismatchMessage: "Материал катушки «{{spoolMaterial}}» похож, но не совпадает точно с «{{trayMaterial}}» в {{location}}. Продолжить?",
- assignProfileMismatchMessage: "Профиль катушки «{{spoolProfile}}» не соответствует профилю слота «{{trayProfile}}» в {{location}}. Продолжить?",
- assignReconfigureNote: "Слот AMS будет перенастроен на профиль катушки.",
- spoolmanFilamentCatalog: "Каталог филаментов Spoolman",
- pickFromSpoolmanCatalog: "Выбрать из каталога Spoolman…",
- spoolmanFilamentSelected: "Филамент выбран из каталога Spoolman",
- spoolmanFilamentUnlinked: "Связь с каталогом филаментов удалена",
- noSpoolmanFilaments: "В каталоге Spoolman филаменты не найдены",
- spoolmanFilamentColorSwatch: "Цвет филамента",
- spoolWeightManagedBySpoolman: "Масса пустой катушки задаётся в Spoolman для каждого типа филамента",
- spoolmanCatalogLoadFailed: "Не удалось загрузить каталог филаментов Spoolman",
- },
- timelapse: {
- title: "Таймлапс",
- create: "Создать таймлапс",
- download: "Скачать",
- delete: "Удалить",
- preview: "Предпросмотр",
- frameRate: "Частота кадров",
- quality: "Качество",
- processing: "Обработка...",
- noTimelapses: "Таймлапсы отсутствуют",
- },
- ams: {
- title: "AMS",
- slot: "Слот",
- empty: "Пусто",
- emptySlot: "Пустой слот",
- slotEmpty: "Пусто",
- slotUnconfigured: "?",
- emptySlotReset: "Филамент не назначен",
- unknown: "Неизвестно",
- humidity: "Влажность",
- temperature: "Температура",
- filamentType: "Тип филамента",
- filamentColor: "Цвет",
- remaining: "Остаток",
- history: "История AMS",
- noHistory: "История отсутствует",
- configureSlot: "Настроить слот",
- externalSpool: "Внешняя катушка",
- profile: "Профиль",
- kFactor: "Коэффициент K",
- kFactorShort: "K",
- fill: "Заполнить",
- configure: "Настроить",
- used: "использовано",
- remainingUnit: "осталось",
- },
- printModal: {
- variants: {
- editNote: 'Эти варианты заданы при добавлении в очередь. Чтобы изменить их, отмените и добавьте заново.',
- title: 'Варианты принтера',
- help: 'Одна задача, одно место в очереди. Первый подходящий освободившийся принтер напечатает свой файл.',
- unknownModel: 'Неизвестная модель',
- plateFor: 'Стол для {{filename}}',
- moveUp: 'Вверх',
- moveDown: 'Вниз',
- queued: 'В очереди, вариантов: {{count}}',
- },
- selectPrinter: "Выберите принтер",
- selectPlate: "Выберите пластину",
- filamentMapping: "Сопоставление филаментов",
- useArchiveMapping: "Маппинг",
- useArchiveMappingTooltip: "Выбрать все ячейки из маппинга AMS, сохранённого с этим архивом (от слайсера), вместо подбора по типу/цвету.",
- clickToChangeSlot: "Нажмите, чтобы изменить назначение ячейки",
- reRead: "Перечитать",
- plateN: "Пластина {{n}}",
- plateFilamentsUnreadable: "Не удалось определить филаменты выбранной пластины, поэтому их невозможно сопоставить. Снимите выбор с этой пластины, чтобы добавить остальные в очередь.",
- totalCost: "Общая стоимость:",
- slotRemainingShort: " — осталось {{grams}} г",
- printSettings: "Настройки печати",
- bedLeveling: "Калибровка стола",
- flowCalibration: "Калибровка потока",
- vibrationCalibration: "Калибровка вибраций",
- layerInspection: "Проверка первого слоя",
- timelapse: "Таймлапс",
- cancel: "Отмена",
- noPrintersAvailable: "Нет доступных принтеров",
- printerBusy: "Принтер занят",
- printerOffline: "Принтер не в сети",
- sameTypeDifferentColor: "Тот же тип, другой цвет",
- filamentTypeNotLoaded: "Филамент этого типа не загружен",
- statusReady: "Готово",
- statusColorMismatch: "Цвет не совпадает",
- statusTypeNotFound: "Тип не найден",
- requiredTooltip: "Требуется: {{name}} - {{color}}",
- manuallySelected: "Выбрано вручную",
- autoMatched: "Подобрано автоматически",
- selectSlot: "Выбрать слот",
- sameTypeDifferentColorDetail: "Тот же тип, другой цвет: нужен {{required}}, в слоте {{loaded}}",
- requiredTypeNotInPrinter: "Требуемый тип филамента не найден в принтере.",
- whenToPrint: "Когда печатать",
- asap: "Как можно скорее",
- queue: "В очередь",
- schedule: "По расписанию",
- dateTime: "Дата и время",
- invalidDateTime: "Введите корректные дату и время",
- openCalendar: "Открыть календарь",
- requireManualStart: "Требовать ручного запуска",
- requirePreviousSuccess: "Запускать только после успешной предыдущей печати",
- autoOffAfter: "Выключить принтер после завершения",
- helpAsap: "Задание будет добавлено в начало очереди и запустится, как только подходящий принтер освободится.",
- helpSchedule: "Задание запустится в указанное время, если принтер свободен. Если принтер занят, оно будет ждать освобождения.",
- helpQueue: "Задание будет добавлено в конец очереди.",
- leftNozzle: "Л",
- rightNozzle: "П",
- leftNozzleTooltip: "Левое сопло",
- rightNozzleTooltip: "Правое сопло",
- ftsSameInletHint: "Все филаменты для этой печати подключены к переключателю тракта филамента IN-{{inlet}}. Смена между филаментами на одном входе идёт медленнее — переставьте один в AMS на другом входе.",
- rackPosition: "Позиция в стойке",
- rackPositionTooltip: "Каким соплом из стойки печатать этот филамент. Позиции нумеруются так же, как на принтере.",
- rackEmptyPosition: "Эта позиция в стойке пуста",
- rackWrongNozzle: "Установлено сопло {{has}}; этому филаменту нужно {{needs}}",
- filamentOverride: "Переопределение филаментов",
- filamentOverrideHint: "При необходимости замените филаменты для назначения по модели. Планировщик будет сопоставлять выбранные филаменты вместо исходных значений из 3MF.",
- originalFilament: "Исходный",
- overrideWith: "Заменить на",
- resetToOriginal: "Вернуть исходный",
- insufficientFilamentTitle: "Недостаточно филамента",
- waitingForAmsStatus: "Ожидание состояния AMS от принтера {{printer}}…",
- insufficientFilamentMessage: "На некоторых назначенных катушках осталось меньше филамента, чем требуется для этой печати:",
- insufficientFilamentLine: "{{printer}} — {{slot}}: требуется {{required}} г, осталось {{remaining}} г",
- insufficientFilamentLinePooled: "{{printer}} — {{slot}}: требуется {{required}} г, доступно {{remaining}} г на подходящих катушках (резервный филамент AMS)",
- printAnyway: "Всё равно печатать",
- forceColorMatch: "Обязательно учитывать цвет",
- staggerPrinterStarts: "Запускать принтеры с задержкой",
- staggerGroupSize: "Размер группы",
- staggerInterval: "Интервал (мин)",
- staggerPreview: "{{printers}} принтеров → {{groups}} групп по {{size}}, запуск каждые {{interval}} мин",
- staggerLastGroup: "последняя группа: {{count}}",
- staggerTotal: "всего: {{minutes}} мин",
- staggerToPrinters: "Распределить запуск для {{count}} принтеров",
- gcodeInjection: "Добавить G-code автозапуска",
- insufficientBudget: "Недостаточно бюджета",
- unlimitedNoBudget: "Без ограничений — лимит бюджета не задан.",
- noPrintableCostCenters: "Нет активного центра затрат, доступного для печати. Попросите администратора предоставить вам доступ к печати.",
- },
- backup: {
- includesEncryptionKey: "Локальные резервные копии включают файл ключа шифрования MFA (DATA_DIR/.mfa_encryption_key), поэтому ZIP-архив является самодостаточным. Считайте этот ZIP конфиденциальным: любой, у кого есть файл, сможет расшифровать сохранённые в нём секреты клиента OIDC и TOTP.",
- title: "Резервное копирование и восстановление",
- createBackup: "Создать резервную копию",
- restoreBackup: "Восстановить из копии",
- restoreDescription: "Заменить все данные данными из резервной копии",
- downloadBackup: "Скачать резервную копию",
- uploadBackup: "Загрузить резервную копию",
- lastBackup: "Последняя копия",
- autoBackup: "Автоматическое резервное копирование",
- backupNow: "Создать копию сейчас",
- restoreWarning: "Внимание: восстановление из резервной копии перезапишет все текущие данные.",
- includeArchives: "Включить архивы",
- includeSettings: "Включить настройки",
- includeProfiles: "Включить профили",
- backupSuccess: "Резервная копия успешно создана",
- restoreSuccess: "Резервная копия успешно восстановлена",
- backupFailed: "Не удалось создать резервную копию",
- restoreFailed: "Не удалось выполнить восстановление",
- restoreNote: "На время восстановления виртуальный принтер будет остановлен",
- githubBackup: "Резервная копия в Git",
- enabled: "Включено",
- cloudLoginRequired: "Требуется вход в Bambu Cloud. Войдите в разделе «Профили → Облачные профили», чтобы включить резервное копирование в GitHub.",
- cloudLoginRequiredShort: "Требуется вход в облако",
- githubDescription: "Автоматически синхронизировать профили с приватным репозиторием GitHub для резервного копирования и хранения истории версий.",
- repoIsPrivate: "Репозиторий приватный — резервное копирование безопасно.",
- repoIsPublicWarning: "Репозиторий ПУБЛИЧНЫЙ. Резервные копии Bambuddy содержат учётные данные MQTT, токены Home Assistant и Prometheus, адрес электронной почты Bambu Cloud и коды доступа к принтерам из K-профилей. Сохранение заблокировано, пока репозиторий не будет сделан приватным в настройках провайдера.",
- repoVisibilityUnknown: "Не удалось определить видимость репозитория. Bambuddy отказывается создавать резервные копии в репозитории, приватность которого не подтверждена; сохранение будет заблокировано.",
- repositoryUrl: "URL репозитория",
- 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: "Разрешить небезопасный HTTP",
- allowInsecureHttpHint: "Включайте для локальных серверов в частной сети без TLS",
- personalAccessToken: "Персональный токен доступа",
- tokenSaved: "(сохранён)",
- enterNewToken: "Введите новый токен для обновления",
- tokenHintGitHub: "Токен с точечными правами на чтение и запись Contents либо классический токен с областью repo.",
- tokenHintGitLab: "Токен с областью api либо read_repository вместе с write_repository.",
- tokenHintGitea: "Токен с областью write:repository.",
- tokenHintForgejo: "Токен с областью write:repository. Достаточно токена, ограниченного только этим репозиторием.",
- branch: "Ветка",
- provider: "Git-провайдер",
- providerGitHub: "GitHub",
- providerGitLab: "GitLab",
- providerGitea: "Gitea",
- providerForgejo: "Forgejo",
- manualOnly: "Только вручную",
- hourly: "Ежечасно",
- daily: "Ежедневно",
- weekly: "Еженедельно",
- includeInBackup: "Включить в резервную копию",
- kProfiles: "K-профили",
- kProfilesDescription: "Калибровки Pressure Advance с подключённых принтеров",
- noPrintersConnected: "Нет подключённых принтеров",
- printersConnected: "Подключено {{connected}} из {{total}}",
- cloudProfiles: "Облачные профили",
- cloudProfilesDescription: "Предустановки филамента, принтера и процесса из Bambu Cloud и Orca Cloud",
- cloudProfilesAccounts: "Подключённые аккаунты — Bambu Cloud: {{bambu}}, Orca Cloud: {{orca}}",
- appSettings: "Настройки приложения",
- appSettingsDescription: "Конфигурация Bambuddy (полная база данных)",
- spoolInventory: "Учёт катушек",
- spoolInventoryDescription: "Катушки филамента, история расхода и учёт стоимости",
- printArchives: "Архив печати",
- printArchivesDescription: "Метаданные истории печати без файлов G-code и 3MF",
- lastBackupAt: "Последняя копия:",
- noBackupsYet: "Резервных копий пока нет",
- next: "Следующая:",
- startingBackup: "Запуск резервного копирования...",
- test: "Проверить",
- enableBackup: "Включить резервное копирование",
- testConnection: "Проверить соединение",
- enterRepoUrl: "Введите URL репозитория",
- enterRepoAndToken: "Введите URL репозитория и токен доступа",
- repoRequired: "Необходимо указать URL репозитория",
- tokenRequired: "Необходимо указать токен доступа",
- githubBackupEnabled: "Резервное копирование в GitHub включено",
- tokenUpdated: "Токен обновлён",
- settingsSaved: "Настройки сохранены",
- failedToSave: "Не удалось сохранить: {{message}}",
- backupCompleteFiles: "Резервное копирование завершено — обновлено файлов: {{count}}",
- backupSkippedNoChanges: "Резервное копирование пропущено — изменений нет",
- backupFailed2: "Ошибка резервного копирования: {{message}}",
- clearedLogs: "Очищено записей журнала: {{count}}",
- failedToClearLogs: "Не удалось очистить журнал: {{message}}",
- // Restore from Git backup (#2656)
- restoreFromGit: {
- button: 'Восстановить из Git',
- title: 'Восстановление из резервной копии Git',
- subtitle: 'Выберите коммит и данные для восстановления',
- commitLabel: 'Коммит резервной копии',
- latestCommit: 'Последняя резервная копия (вершина ветки)',
- categoriesLabel: 'Что восстановить',
- inspecting: 'Чтение содержимого резервной копии...',
- itemCount: '{{count}} в резервной копии',
- overwriteLabel: 'Перезаписывать существующие записи',
- overwriteOn: 'Существующие записи будут обновлены из резервной копии.',
- overwriteOff: 'Добавляются только отсутствующие записи, существующие не изменяются.',
- selectedCount: 'Выбрано: {{count}}',
- restoring: 'Восстановление...',
- confirmTitle: 'Восстановить из резервной копии?',
- confirmMessage: 'Выбранные категории будут восстановлены из этого коммита. Отсутствующие записи будут добавлены, существующие останутся без изменений.',
- confirmMessageOverwrite: 'Выбранные категории будут восстановлены из этого коммита с перезаписью уже существующих локальных записей. Отменить это действие нельзя.',
- kprofilesOverwriteCaveat: 'K-профили — исключение: запись в слот всегда заменяет калибровку на принтере.',
- tally: 'восстановлено: {{restored}}, пропущено: {{skipped}}, с ошибкой: {{failed}}',
- reloadHint: 'Перезагрузите Bambuddy, чтобы восстановленные данные отобразились везде.',
- partialHint: 'Перечисленные выше категории завершены и сохранены. Отсутствующие категории не выполнялись.',
- failed: 'Не удалось выполнить восстановление.',
- loadFailed: 'Не удалось прочитать репозиторий резервных копий.',
- details: {
- notPresent: 'Отсутствует в этом коммите резервной копии',
- unreadableJson: 'Нечитаемый JSON: {{paths}}',
- settingsNoPayload: 'В данных нет настроек',
- settingsCredentialsWillSkip: 'Ключей, похожих на учётные данные, будет пропущено: {{count}}',
- settingsCompanionWillSkip: 'Ключей, похожих на учётные данные, будет пропущено: {{count}}, а зависящие от них переключатели ({{companion}}) останутся выключенными',
- settingsCompanionOnlyWillSkip: 'Переключатели ({{companion}}) останутся выключенными - учётные данные, нужные каждому из них, нельзя восстановить из резервной копии',
- spoolsUsageCount: 'включая записей расхода: {{count}}',
- archivesMetadataOnly: 'Только метаданные - файлы 3MF и миниатюры не входят в резервную копию Git',
- kprofilesPrinterCount: 'по {{count}} принтерам',
- },
- notes: {
- noData: 'В этой резервной копии нет данных такого типа',
- archivesPrinterMissing: 'Некоторые архивы ссылались на несуществующие принтеры - связь очищена',
- archivesProjectMissing: 'Некоторые архивы ссылались на несуществующие проекты - связь очищена',
- archivesOwnerCleared: 'Некоторые архивы ссылались на несуществующих пользователей - владелец очищен, поэтому они видны только пользователям с правом archives:read_all, пока администратор не назначит владельца заново',
- archivesOwnerUnmatched: 'Некоторые архивы указывают владельца, которого нет в этом экземпляре - владелец очищен, а не угадан по идентификатору пользователя из резервной копии, поэтому они видны только пользователям с правом archives:read_all, пока администратор не назначит владельца заново',
- archivesOwnerUnknown: 'Некоторые архивы восстановлены без владельца - в этой резервной копии он не записан, поэтому они видны только пользователям с правом archives:read_all, пока администратор не назначит владельца',
- archivesUndeleted: 'Архивы, удалённые после резервного копирования, снова видны - перезапись была включена',
- archivesMetadataOnly: 'Восстановленные архивы содержат только метаданные - файлы 3MF и миниатюры не входят в резервную копию Git',
- spoolUsageUnresolved: 'Записей расхода пропущено: {{count}} - их катушки нет в списке катушек этой резервной копии, поэтому привязать их не к чему.',
- spoolUsageUnlinked: 'Записей расхода восстановлено без связи с историей печати: {{count}} - выберите «Архивы печати» вместе с «Инвентарём катушек», чтобы сохранить связь.',
- spoolTagKept: 'Меток катушек оставлено без изменений: {{count}} - резервная копия стёрла бы метку, отсканированную позже, или перенесла бы её на другую катушку.',
- settingsCredentialsSkipped: 'Ключей, похожих на учётные данные, пропущено: {{count}} - введите секреты вручную',
- settingsAuthSkipped: 'Настроек аутентификации пропущено: {{count}} - меняйте их в разделе «Настройки > Аутентификация», чтобы продолжали работать проверки блокировки',
- settingsCompanionSkipped: '{{keys}} оставлены выключенными - нужные им учётные данные нельзя восстановить из резервной копии, и в этом экземпляре они не сохранены, поэтому включение оставило бы интеграцию без аутентификации',
- settingsMqttRelayFailed: 'Настройки MQTT восстановлены, но переподключить реле не удалось - перезапустите Bambuddy',
- kprofilesAlwaysOverwrite: 'K-профили всегда перезаписывают соответствующий слот на принтере',
- kprofilesAckUnreliable: 'Принтер, который не отвечает, всё равно считается восстановленным - проверьте профили на принтере',
- kprofilesPrinterMissing: 'Нет принтера с серийным номером {{serial}} - пропущено',
- kprofilesPrinterOffline: '{{printer}} ({{serial}}) не подключён - пропущено',
- kprofilesUnknownNozzle: 'Неожиданный диаметр сопла {{nozzle}} для {{serial}} - отправлено как есть',
- kprofilesUnmatched: 'Профилей для {{nozzle}} без соответствия на {{printer}}: {{count}} - добавлены как новые профили',
- kprofilesSendFailed: 'Не удалось отправить профили {{nozzle}} на {{printer}} ({{serial}})',
- kprofilesRefused: '{{printer}} ({{serial}}) отклонил профили {{nozzle}}: {{reason}}',
- kprofilesStepFailed: 'Не удалось завершить этап K-профилей - {{reason}}. Всё, что было восстановлено до него, сохранено.',
- },
- },
- history: "История",
- clear: "Очистить",
- date: "Дата",
- status: "Статус",
- trigger: "Тип",
- triggers: {
- manual: "Резервная копия (вручную)",
- scheduled: "Резервная копия (по расписанию)",
- restore: "Восстановление",
- },
- commit: "Коммит",
- localBackup: "Локальная резервная копия",
- localBackupDescription: "Создать полную резервную копию данных Bambuddy, включая базу данных, архивы, загрузки и все файлы.",
- downloadBackupLabel: "Скачать резервную копию",
- completeBackupZip: "Полная копия: база данных и все файлы (ZIP)",
- download: "Скачать",
- preparingBackup: "Подготовка резервной копии...",
- creatingArchive: "Создание архива резервной копии... Для больших архивов это может занять некоторое время.",
- downloadingFile: "Скачивание файла резервной копии...",
- backupDownloaded: "Резервная копия успешно скачана",
- failedToCreateBackup: "Не удалось создать резервную копию: {{message}}",
- restore: "Восстановить",
- restoreReplacesAll: "Восстановление заменит все данные.",
- restoreReplacesAllDetail: "Текущая база данных и файлы будут полностью заменены. После восстановления потребуется перезапуск.",
- restoreConfirmTitle: "Восстановление из резервной копии",
- restoreConfirmMessage: "Восстановить данные из файла «{{filename}}»? Текущая база данных и все файлы будут полностью заменены. После восстановления приложение потребуется перезапустить.",
- restoreConfirmButton: "Восстановить",
- uploadingFile: "Загрузка файла резервной копии...",
- backupRestoredRestart: "Резервная копия восстановлена. Перезапустите Bambuddy.",
- failedToRestore: "Не удалось восстановить резервную копию. Проверьте формат файла.",
- reloadNow: "Перезагрузить сейчас",
- creatingBackup: "Создание резервной копии",
- restoringBackup: "Восстановление данных",
- preparing: "Подготовка...",
- processing: "Обработка...",
- doNotClosePage: "Не закрывайте эту страницу и не переходите на другую. Для больших резервных копий операция может занять несколько минут.",
- restoring: "Восстановление...",
- restoreComplete: "Восстановление завершено",
- restoreFailed2: "Ошибка восстановления",
- importSettings: "Импортировать настройки из файла резервной копии",
- pleaseWaitRestoring: "Подождите, пока данные восстанавливаются",
- selectBackupFile: "Нажмите, чтобы выбрать файл резервной копии (.json или .zip)",
- duplicateHandling: "Правила обработки дубликатов:",
- matchPrinters: "Принтеры",
- matchPrintersBy: "сопоставляются по серийному номеру",
- matchSmartPlugs: "Умные розетки",
- matchSmartPlugsBy: "сопоставляются по IP-адресу",
- matchNotificationProviders: "Провайдеры уведомлений",
- matchNotificationProvidersBy: "сопоставляются по имени",
- matchFilaments: "Филаменты",
- matchFilamentsBy: "сопоставляются по имени, типу и бренду",
- matchArchives: "Архивы",
- matchArchivesBy: "сопоставляются по хешу содержимого и всегда пропускаются",
- matchPendingUploads: "Ожидающие загрузки",
- matchPendingUploadsBy: "сопоставляются по имени файла",
- matchSettingsTemplates: "Настройки и шаблоны",
- matchSettingsTemplatesBy: "всегда перезаписываются",
- replaceExisting: "Заменять существующие данные",
- keepExisting: "Сохранять существующие данные",
- overwriteDescription: "Перезаписывать существующие элементы данными из резервной копии",
- keepDescription: "Восстанавливать только отсутствующие элементы",
- overwriteCaution: "Внимание:",
- overwriteWarning: "Перезапись заменит текущие настройки данными из резервной копии. В целях безопасности коды доступа к принтерам никогда не перезаписываются.",
- cancel: "Отмена",
- processingBackup: "Обработка файла резервной копии...",
- itemsRestored: "Восстановлено элементов",
- itemsSkipped: "Пропущено элементов",
- restored: "Восстановлено",
- skippedAlreadyExist: "Пропущено — уже существует",
- filesCategory: "Файлы (3MF, миниатюры и т. п.)",
- andMore: "...и ещё {{count}}",
- newApiKeysGenerated: "Созданы новые API-ключи",
- keysShownOnce: "Эти ключи показываются только один раз. Скопируйте их сейчас!",
- copy: "Копировать",
- noDataFound: "В резервной копии не найдено данных для восстановления.",
- close: "Закрыть",
- scheduledBackup: "Резервные копии по расписанию",
- scheduledBackupDescription: "Автоматически создавать снимки резервных копий по расписанию. Каталог назначения можно смонтировать с NAS или внешнего накопителя.",
- frequency: "Периодичность",
- backupTime: "Время",
- retention: "Хранение",
- retentionDescription: "Количество сохраняемых резервных копий",
- outputPath: "Каталог назначения",
- outputPathPlaceholder: "По умолчанию: {{path}}",
- outputPathDescription: "Оставьте пустым, чтобы использовать стандартный каталог",
- runNow: "Запустить сейчас",
- backupFiles: "Файлы резервных копий",
- noScheduledBackups: "Резервных копий пока нет",
- deleteBackup: "Удалить",
- deleteBackupConfirm: "Удалить этот файл резервной копии?",
- backupRunning: "Выполняется резервное копирование...",
- scheduledBackupComplete: "Резервная копия успешно создана",
- scheduledBackupFailed: "Ошибка резервного копирования",
- nextBackup: "Следующая копия",
- backupSize: "Размер",
- localTimeHint: "Местное время ({{tz}})",
- defaultPathLabel: "По умолчанию:",
- pathCheck: {
- title: "Bambuddy не может записывать в этот каталог",
- howToFix: "Как исправить:",
- sandboxed: "Служба Bambuddy не может записывать в {{path}}. Её модуль systemd работает с ProtectSystem=strict, поэтому все каталоги за пределами каталогов установки, данных и журналов доступны службе только для чтения, даже если из вашей командной оболочки запись разрешена.",
- read_only: "{{path}} находится в файловой системе, доступной только для чтения.",
- permission_denied: "Bambuddy не разрешена запись в {{path}}. Проверьте владельца каталога и права доступа.",
- no_space: "В файловой системе, содержащей {{path}}, закончилось свободное место.",
- not_a_directory: "{{path}} существует, но не является каталогом.",
- missing: "{{path}} не существует, и создать этот каталог не удалось.",
- error: "Bambuddy не может записывать в {{path}}.",
- ephemeralTitle: "Эти резервные копии не сохранятся после перезапуска контейнера",
- container_ephemeral: "{{path}} находится внутри контейнера Bambuddy, а не на хосте. Записанные туда резервные копии будут потеряны при пересоздании контейнера. Подключите каталог с хоста:",
- },
- categories: {
- settings: "Настройки",
- notification_providers: "Провайдеры уведомлений",
- notification_templates: "Шаблоны уведомлений",
- smart_plugs: "Умные розетки",
- printers: "Принтеры",
- filaments: "Филаменты",
- maintenance_types: "Виды обслуживания",
- archives: "Архивы",
- projects: "Проекты",
- pending_uploads: "Ожидающие загрузки",
- external_links: "Внешние ссылки",
- api_keys: "API-ключи",
- },
- },
- tags: {
- title: "Метки",
- addTag: "Добавить метку",
- editTag: "Изменить метку",
- deleteTag: "Удалить метку",
- tagName: "Название метки",
- tagColor: "Цвет метки",
- noTags: "Меток нет",
- deleteConfirm: "Удалить эту метку?",
- manageTags: "Управление метками",
- },
- uploadModal: {
- title: "Загрузка файлов 3MF",
- dragDrop: "Перетащите файлы .3mf сюда",
- or: "или",
- browseFiles: "Выбрать файлы",
- extractionInfo: "Модель принтера будет автоматически определена по метаданным файла 3MF.",
- uploaded: "загружено",
- failed: "ошибок",
- uploading: "Загрузка...",
- upload: "Загрузить",
- uploadFailed: "Не удалось загрузить",
- },
- editArchive: {
- title: "Редактирование архива",
- name: "Название",
- namePlaceholder: "Название печати",
- printer: "Принтер",
- noPrinter: "Без принтера",
- project: "Проект",
- noProject: "Без проекта",
- itemsPrinted: "Напечатано изделий",
- itemsPrintedHelp: "Количество изделий, полученных в этом задании печати",
- filamentUsed: "Израсходованный филамент (г)",
- filamentUsedPlaceholder: "напр. 46.16",
- filamentUsedHelp: "Укажите вручную, если печать заархивирована без 3MF — тогда она попадёт в итоги по филаменту. При повторном сканировании архива с 3MF значение снова считывается из файла.",
- notes: "Заметки",
- notesPlaceholder: "Добавьте заметки об этой печати...",
- externalLink: "Внешняя ссылка",
- externalLinkPlaceholder: "https://printables.com/model/...",
- externalLinkHelp: "Ссылка на Printables, Thingiverse или другой источник",
- tags: "Метки",
- tagsPlaceholder: "Добавить метки...",
- addMoreTags: "Добавить ещё метки...",
- matchingTags: "Совпадения для «{{query}}»",
- existingTags: "Существующие метки",
- clickToAdd: "(нажмите, чтобы добавить)",
- status: "Статус",
- failureReason: "Причина сбоя",
- selectReason: "Выберите причину...",
- photos: "Фотографии результата печати",
- photosHelp: "Нажмите +, чтобы добавить фотографии результата",
- printResult: "Результат печати",
- saving: "Сохранение...",
- failureReasons: {
- adhesionFailure: "Плохая адгезия к столу",
- spaghettiDetached: "Спагетти / отрыв детали",
- layerShift: "Сдвиг слоёв",
- cloggedNozzle: "Засор сопла",
- filamentRunout: "Закончился филамент",
- warping: "Коробление",
- stringing: "Стрингинг",
- underExtrusion: "Недоэкструзия",
- powerFailure: "Сбой питания",
- userCancelled: "Отменено пользователем",
- noStatusUpdate: "Обновление статуса не получено",
- other: "Другое",
- },
- statuses: {
- completed: "Завершено",
- failed: "Ошибка",
- aborted: "Отменено",
- printing: "Печать",
- },
- },
- kProfiles: {
- title: "K-профили",
- noPrintersConfigured: "Принтеры не настроены",
- addPrinterInSettings: "Добавьте принтер в настройках, чтобы управлять K-профилями",
- noActivePrinters: "Нет активных принтеров",
- enablePrinterConnection: "Включите подключение к принтеру, чтобы просматривать его K-профили",
- loadingProfiles: "Загрузка K-профилей...",
- printerOffline: "Принтер не в сети",
- printerOfflineDesc: "Выбранный принтер не подключён. Включите его, чтобы просмотреть K-профили.",
- noMatchingProfiles: "Подходящие профили не найдены",
- noMatchingProfilesDesc: "Ни один профиль не соответствует условиям поиска",
- noKProfiles: "K-профили отсутствуют",
- noKProfilesDesc: "Для сопла {{diameter}} мм не найдены профили Pressure Advance",
- createFirstProfile: "Создать первый профиль",
- printer: "Принтер",
- nozzle: "Сопло",
- refresh: "Обновить",
- addProfile: "Добавить профиль",
- export: "Экспорт",
- import: "Импорт",
- select: "Выбрать",
- selectAll: "Выбрать все",
- delete: "Удалить",
- searchPlaceholder: "Поиск по названию или филаменту...",
- allExtruders: "Все экструдеры",
- leftOnly: "Только левый",
- rightOnly: "Только правый",
- allFlow: "Любой тип потока",
- hfOnly: "Только HF",
- sOnly: "Только S",
- sortName: "Сортировка: название",
- sortKValue: "Сортировка: K-значение",
- sortFilament: "Сортировка: филамент",
- leftExtruder: "Левый экструдер",
- rightExtruder: "Правый экструдер",
- modal: {
- addTitle: "Добавить K-профиль",
- editTitle: "Изменить K-профиль",
- profileName: "Название профиля",
- profileNamePlaceholder: "Мой профиль PLA",
- kValue: "K-значение",
- kValuePlaceholder: "0.020",
- kValueHelp: "Типичный диапазон: 0,01–0,06 для PLA, 0,02–0,10 для PETG",
- filament: "Филамент",
- selectFilament: "Выберите филамент...",
- source: {
- local: "Импортированные",
- orcaCloud: "Orca Cloud",
- bambuCloud: "Bambu Cloud",
- builtin: "Встроенный",
- },
- noFilamentsHelp: "Нет доступных филаментов. Войдите в Bambu Cloud или импортируйте пресеты в разделе Профили → Локальные профили.",
- searchFilaments: "Поиск филаментов...",
- noFilamentMatches: "Нет филаментов, соответствующих запросу",
- flowType: "Тип потока",
- highFlow: "Высокопоточный",
- standard: "Стандартный",
- nozzleSize: "Диаметр сопла",
- extruder: "Экструдер",
- extruders: "Экструдеры",
- left: "Левый",
- right: "Правый",
- notes: "Заметки (хранятся локально)",
- notesPlaceholder: "Добавьте заметки об этом профиле...",
- notesHelp: "Заметки сохраняются в Bambuddy, а не на принтере",
- syncing: "Синхронизация с принтером...",
- savingExtruder: "Сохранение в экструдер {{current}}/{{total}}...",
- pleaseWait: "Подождите",
- },
- deleteConfirm: {
- title: "Удалить профиль",
- cannotUndo: "Это действие нельзя отменить",
- message: "Удалить профиль «{{name}}» с принтера?",
- },
- bulkDelete: {
- title: "Удалить профили",
- cannotUndo: "Это действие нельзя отменить",
- message: "Удалить с принтера выбранные профили ({{count}})?",
- },
- toast: {
- profileSaved: "K-профиль сохранён",
- profilesSaved: "K-профиль сохранён для {{count}} экструдеров",
- selectAtLeastOneExtruder: "Выберите хотя бы один экструдер",
- selectFilament: "Сначала выберите филамент",
- filamentNotResolvable: "Нет идентификатора филамента Bambu для {{name}} — принтер не сможет сохранить профиль",
- profileDeleted: "K-профиль удалён",
- profilesDeleted: "Удалено профилей: {{count}}",
- exportedProfiles: "Экспортировано профилей: {{count}}",
- importedProfiles: "Импортировано {{count}} из {{total}} профилей",
- noProfilesToExport: "Нет профилей для экспорта",
- invalidFileFormat: "Недопустимый формат файла",
- failedToParseImport: "Не удалось разобрать файл импорта",
- failedToSaveBatch: "Не удалось сохранить K-профили",
- noteSaved: "Заметка сохранена",
- failedToSaveNote: "Не удалось сохранить заметку",
- },
- permission: {
- noRead: "У вас нет прав на обновление профилей",
- noCreate: "У вас нет прав на добавление профилей",
- noUpdate: "У вас нет прав на изменение K-профилей",
- noDelete: "У вас нет прав на удаление K-профилей",
- noExport: "У вас нет прав на экспорт профилей",
- noImport: "У вас нет прав на импорт профилей",
- },
- },
- virtualPrinter: {
- title: "Виртуальный принтер",
- running: "Запущен",
- stopped: "Остановлен",
- description: {
- default: "Включает виртуальный принтер, который отображается в Bambu Studio и OrcaSlicer. Отправленные на него файлы сразу сохраняются в архив без печати.",
- proxy: "Включает прокси, перенаправляющий трафик слайсера на реальный принтер и позволяющий печатать удалённо из любой сети.",
- },
- enable: {
- title: "Включить виртуальный принтер",
- visibleInSlicer: "Отображается как «Bambuddy» при обнаружении принтеров в слайсере",
- proxyingTo: "Проксирование на {{name}}",
- notActive: "Не активен",
- },
- model: {
- title: "Модель принтера",
- description: "Выберите модель принтера, которую нужно эмулировать.",
- restartWarning: "При изменении модели виртуальный принтер будет перезапущен",
- },
- accessCode: {
- title: "Код доступа",
- isSet: "Код доступа задан",
- notSet: "Код доступа не задан — он необходим для включения",
- placeholder: "Введите 8-значный код",
- placeholderChange: "Введите новый код",
- hint: "Код должен состоять ровно из 8 символов. Слайсеры используют его для аутентификации.",
- charCount: "({{count}}/8)",
- inheritedFromTarget: "Унаследован от целевого принтера",
- derivedFromTargetHint: "Используется код доступа целевого принтера. Мост перенаправляет аутентификацию слайсера на реальный принтер, поэтому коды должны совпадать. Чтобы изменить значение, измените код доступа самого принтера.",
- reveal: "Показать код доступа",
- hide: "Скрыть код доступа",
- },
- targetPrinter: {
- title: "Целевой принтер",
- configured: "Целевой принтер для прокси настроен",
- notConfigured: "Целевой принтер не выбран — он необходим для режима прокси",
- placeholder: "Выберите принтер...",
- hint: "Выберите принтер, на который будет перенаправляться трафик слайсера. Принтер должен работать в режиме LAN.",
- noPrinters: "Нет настроенных принтеров. Сначала добавьте принтер.",
- },
- remoteInterface: {
- title: "Переопределение сетевого интерфейса",
- configured: "Переопределение интерфейса активно",
- optional: "Необязательно — используйте, если IP определён неверно, например при нескольких сетевых картах, Docker или VPN",
- placeholder: "Определять автоматически...",
- hint: "Переопределяет IP-адрес, публикуемый через SSDP и используемый в TLS-сертификате. Полезно, если у Bambuddy несколько сетевых интерфейсов.",
- },
- mode: {
- title: "Режим",
- archive: "Архив",
- archiveDesc: "Сразу сохранять файлы в архив",
- review: "Проверка",
- reviewDesc: "Проверять перед добавлением в архив",
- queue: "Очередь",
- queueDesc: "Сохранять в архив и добавлять в очередь",
- proxy: "Прокси",
- proxyDesc: "Перенаправлять на реальный принтер",
- },
- autoDispatch: {
- title: "Автоматический запуск",
- description: "Автоматически запускать задания после добавления в очередь. Если выключено, задания ожидают ручного запуска.",
- },
- queueForceColorMatch: {
- title: "Требовать совпадения цвета",
- description: "Не назначать задание принтеру, если загружены филамент другого типа или другого цвета. По умолчанию выключено: без этой проверки очередь сопоставляет только модель принтера и может выбрать принтер с неподходящим цветом.",
- },
- saveAmsMapping: {
- title: "Сохранять маппинг AMS",
- description: "Сохранять выбор AMS-ячейки, который сделал слайсер (из MQTT-команды project_file), в архив — тогда повторная печать использует ту же физическую катушку вместо повторного подбора по типу/цвету файла. По умолчанию выключено.",
- },
- gcodeInjection: {
- title: "Вставка G-code",
- description: "Применять к заданиям этого виртуального принтера фрагменты G-code для соответствующей модели, заданные в настройках. По умолчанию выключено.",
- },
- tailscaleDisabled: {
- title: "Интеграция Tailscale",
- description: "Отметить этот виртуальный принтер как доступный через Tailscale. Будет показан Tailscale-адрес хоста, который нужно указать в слайсере. Импорт сертификата центра сертификации выполняется как обычно; этот переключатель на сертификаты не влияет.",
- },
- setupRequired: {
- title: "Требуется настройка",
- description: "Для работы виртуального принтера требуется дополнительная настройка системы: перенаправление портов, правила межсетевого экрана и параметры, зависящие от платформы.",
- readGuide: "Перед включением прочитайте руководство по настройке",
- },
- archiveNameSource: {
- title: "Источник названия архива",
- description: "Выберите способ формирования названия новых архивов для файлов, полученных через виртуальный принтер. «Метаданные» использует поле Title, встроенное слайсером в 3MF. «Имя файла» использует имя, переданное Bambu Studio по FTP. Bambu Studio заменяет введённое в окне отправки название значением Title из 3MF, если оно присутствует, поэтому оба режима часто дают одинаковый результат.",
- metadata: "Метаданные",
- filename: "Имя файла",
- },
- caCert: {
- title: "Сертификат для слайсера",
- description: "Виртуальные принтеры используют TLS-сертификат, подписанный центром сертификации Bambuddy. Один раз импортируйте этот сертификат CA в хранилище доверенных сертификатов слайсера, чтобы он принимал соединение.",
- copy: "Копировать",
- copied: "Скопировано",
- download: "Скачать",
- fingerprint: "SHA-256",
- },
- howItWorks: {
- title: "Как это работает",
- step1: "В одной локальной сети виртуальные принтеры автоматически появляются в Bambu Studio и OrcaSlicer. Из других сетей добавьте их вручную по IP-адресу и коду доступа.",
- step2: "В режимах «Архив», «Проверка» и «Очередь» используйте кнопку «Отправить» в слайсере для загрузки 3MF в Bambuddy. Слайсер покажет сообщение об успешной печати, но файл будет только сохранён, без запуска печати.",
- step3: "В режиме прокси виртуальный принтер перенаправляет весь трафик на реальный принтер — печать запускается сразу, как при прямом подключении.",
- },
- status: {
- title: "Сведения о состоянии",
- printerName: "Имя принтера",
- model: "Модель",
- serialNumber: "Серийный номер",
- mode: "Режим",
- pendingFiles: "Ожидающие файлы",
- targetPrinter: "Целевой принтер",
- ftpPort: "Порт FTP",
- mqttPort: "Порт MQTT",
- ftpConnections: "Соединения FTP",
- mqttConnections: "Соединения MQTT",
- },
- toast: {
- updated: "Настройки виртуального принтера обновлены",
- failedToUpdate: "Не удалось обновить настройки",
- copyFailed: "Не удалось скопировать — выделите текст вручную",
- accessCodeRequired: "Сначала задайте код доступа",
- targetPrinterRequired: "Сначала выберите целевой принтер",
- bindIpRequired: "Сначала задайте IP-адрес привязки",
- accessCodeEmpty: "Код доступа не может быть пустым",
- accessCodeLength: "Код доступа должен состоять ровно из 8 символов",
- targetCodeChangedRebind: "Код доступа приведён в соответствие с новым целевым принтером. Удалите и снова добавьте устройство в слайсере, чтобы он получил новый код.",
- created: "Виртуальный принтер создан",
- failedToCreate: "Не удалось создать виртуальный принтер",
- deleted: "Виртуальный принтер удалён",
- failedToDelete: "Не удалось удалить виртуальный принтер",
- },
- list: {
- title: "Виртуальные принтеры",
- add: "Добавить",
- addFirst: "Добавить виртуальный принтер",
- empty: "Виртуальные принтеры не настроены. Добавьте первый принтер.",
- },
- bindIp: {
- title: "Интерфейс привязки",
- placeholder: "Выберите интерфейс...",
- hint: "Сетевой интерфейс, к которому будет привязан этот виртуальный принтер. Для каждого принтера он должен быть уникальным.",
- },
- proxy: {
- accessCodeHint: "В режиме прокси используйте в слайсере код доступа целевого принтера. Соединение прозрачно перенаправляется на реальный принтер.",
- },
- addDialog: {
- title: "Добавление виртуального принтера",
- name: "Название",
- hint: "После создания можно настроить код доступа, целевой принтер и остальные параметры.",
- create: "Создать",
- },
- deleteConfirm: {
- title: "Удаление виртуального принтера",
- message: "Удалить «{{name}}»? Все службы этого виртуального принтера будут остановлены.",
- },
- },
- modelViewer: {
- openInSlicer: "Открыть в слайсере",
- openInSlicerWith: "Открыть в {{slicer}}",
- moreSlicerOptions: "Другие варианты слайсера",
- openInSlicerFailed: "Не удалось открыть в слайсере",
- tabs: {
- model: "3D-модель",
- },
- notAvailable: "недоступно",
- plates: "Пластины",
- allPlates: "Все пластины",
- plateNumber: "Пластина {{number}}",
- plateCount: "{{count}} пластина",
- plateCount_other: "{{count}} пластин",
- objectCount: "{{count}} объект",
- objectCount_other: "{{count}} объектов",
- filamentCount: "{{count}} филамент",
- filamentCount_other: "{{count}} филаментов",
- eta: "Осталось {{minutes}} мин",
- noPreview: "Для этого файла нет предпросмотра",
- pagination: {
- pageOf: "Страница {{current}} из {{total}}",
- prev: "Назад",
- next: "Далее",
- },
- errors: {
- failedToLoad: "Не удалось загрузить файл",
- noMeshes: "В файле 3MF не найдены сеточные модели",
- unsupportedFormat: "Неподдерживаемый формат файла",
- },
- },
- maintenanceDescriptions: {
- lubricateCarbonRods: "Смазать углепластиковые направляющие для плавного перемещения",
- lubricateRails: "Смазать линейные направляющие для плавного перемещения",
- cleanNozzle: "Очистить хотэнд и сопло для предотвращения засоров",
- checkBelts: "Проверить натяжение ремней для сохранения точности печати",
- cleanBuildPlate: "Очистить печатную пластину для улучшения адгезии",
- checkExtruder: "Проверить шестерни экструдера на износ",
- checkCooling: "Проверить исправность вентиляторов охлаждения",
- generalInspection: "Общий осмотр принтера",
- cleanCarbonRods: "Очистить углепластиковые направляющие для уменьшения трения",
- lubricateSteelRods: "Смазать стальные направляющие для плавного перемещения",
- cleanSteelRods: "Очистить стальные направляющие для уменьшения трения",
- cleanLinearRails: "Протереть линейные направляющие от пыли и загрязнений",
- checkPtfeTube: "Проверить PTFE-трубку на износ и повреждения",
- replaceHepaFilter: "Заменить HEPA-фильтр",
- replaceCarbonFilter: "Заменить угольный фильтр",
- lubricateLeftNozzleRail: "Смазать направляющую левого сопла (серия H2)",
- },
- haSensors: {
- label: "Датчики",
- unavailable: "Недоступно",
- blocksPrints: "{{entity}} — удерживает печать, пока активно оповещение",
- states: {
- open: "Открыто",
- closed: "Закрыто",
- unlocked: "Разблокировано",
- locked: "Заблокировано",
- detected: "Обнаружено",
- clear: "Чисто",
- wet: "Влажно",
- dry: "Сухо",
- problem: "Проблема",
- ok: "Норма",
- running: "Работает",
- stopped: "Остановлено",
- on: "Вкл",
- off: "Выкл",
- },
- sectionTitle: "Датчики Home Assistant (принтеры)",
- add: "Добавить датчик",
- addTitle: "Добавить датчик Home Assistant",
- editTitle: "Изменить датчик Home Assistant",
- empty: "Датчиков пока нет. Свяжите дверной контакт или термометр из Home Assistant, чтобы показать его на карточке принтера.",
- unknownPrinter: "Неизвестный принтер",
- badgeBlocks: "Удерживает печать",
- badgeNotifies: "Уведомляет",
- badgeHidden: "Скрыт на карточке",
- printer: "Принтер",
- entity: "Сущность",
- searchPlaceholder: "Поиск сущностей...",
- noEntities: "Подходящих сущностей нет",
- name: "Отображаемое имя",
- alertWhen: "Оповещать когда",
- alertNever: "Никогда — только показывать",
- alertAbove: "Выше",
- alertBelow: "Ниже",
- alertHint: "Состояние оповещения подсвечивает датчик на карточке принтера и включает параметры ниже.",
- showOnCard: "Показывать в карточке принтера",
- notifyOnAlert: "Отправлять уведомление при срабатывании",
- blockPrint: "Удерживать печать в очереди, пока активно оповещение",
- blockPrintHint: "Задания остаются в очереди и запускаются сами, когда датчик приходит в норму. Игнорируется, пока Home Assistant недоступен.",
- toast: {
- created: "Датчик добавлен",
- updated: "Датчик сохранён",
- deleted: "Датчик удалён",
- },
- error: {
- pickEntity: "Выберите сущность Home Assistant",
- nameRequired: "Введите отображаемое имя",
- printerRequired: "Выберите принтер",
- alertRequired: "Сначала задайте условие оповещения",
- },
- },
- locationHaSensors: {
- sectionTitle: "Датчики Home Assistant (места хранения)",
- sectionDescription:
- "Привяжите датчики температуры, влажности или заряда батареи Home Assistant к местам хранения, чтобы показывать актуальные значения на карточке филамента и в таблице. Для каждого места хранения допускается только один датчик на категорию.",
- add: "Добавить датчик",
- addTitle: "Добавить датчик Home Assistant",
- editTitle: "Изменить датчик Home Assistant",
- empty: "Датчиков пока нет. Свяжите датчик температуры или влажности из Home Assistant, чтобы показать его на карточке филамента.",
- unknownLocation: "Неизвестное место",
- location: "Место хранения",
- showOnCard: "Показывать на карточке филамента",
- overwriteConfirm: {
- title: "Заменить существующий датчик?",
- messageTemperature: "У «{{location}}» уже привязан датчик температуры: {{name}}. Продолжение заменит его.",
- messageHumidity: "У «{{location}}» уже привязан датчик влажности: {{name}}. Продолжение заменит его.",
- messageBattery: "У «{{location}}» уже привязан датчик заряда батареи: {{name}}. Продолжение заменит его.",
- },
- autoAdd: {
- confirmTitle: "Добавить также остальные датчики?",
- confirmMessage: "Bambuddy также нашёл другие датчики для этого места. Выберите, какие добавить.",
- added: "Также добавлено: {{names}}",
- noneFound: "Подходящие датчики температуры, влажности или заряда батареи для этого места не найдены.",
- onlyThisOne: "Только этот",
- },
- options: {
- buttonLabel: "Настройки датчиков",
- title: "Настройки датчиков места хранения",
- description: "Эти значения используются, когда датчик температуры, влажности или заряда батареи привязывается автоматически вместе с первым датчиком места хранения.",
- generalSettings: 'Общие настройки',
- pollInterval: 'Интервал обновления (секунды)',
- pollIntervalHint: 'Как часто Bambuddy опрашивает Home Assistant и обновляет значения датчиков на экране. Минимум 60 секунд.',
- colorizeValues: 'Окрашивать значения датчиков в соответствии с их порогами тревоги',
- aboveColor: 'Цвет при превышении порога',
- belowColor: 'Цвет при значении ниже порога',
- optimalColor: 'Цвет оптимального значения',
- colors: {
- red: 'Красный',
- orange: 'Оранжевый',
- yellow: 'Жёлтый',
- green: 'Зелёный',
- blue: 'Синий',
- purple: 'Фиолетовый',
- pink: 'Розовый',
- },
- saved: "Настройки сохранены",
- saveFailed: "Не удалось сохранить настройки",
- reset: "Сбросить",
- resetConfirm: {
- title: "Сбросить все существующие датчики мест хранения?",
- message:
- "Это перезапишет пороги тревоги, уведомления и видимость на карточке для всех существующих датчиков температуры, влажности и заряда батареи мест хранения значениями, настроенными выше, а также восстановит имя каждого датчика до его понятного имени в Home Assistant — датчики принтеров не затрагиваются. Это действие нельзя отменить. В зависимости от количества датчиков это может занять некоторое время.",
- },
- resetDone: "Применено к {{count}} датчикам мест хранения",
- resetFailed: "Не удалось сбросить датчики мест хранения",
- },
- deleteAllConfirm: {
- title: "Удалить все датчики?",
- message: "Будут удалены все {{count}} датчиков, привязанных к «{{location}}». Это действие нельзя отменить.",
- },
- currentlyBound: "Сейчас привязан: {{entity}}",
- error: {
- locationRequired: "Выберите место хранения",
- },
- toast: {
- created: "Датчик добавлен",
- updated: "Датчик сохранён",
- deleted: "Датчик удалён",
- },
- },
- smartPlugs: {
- offline: "Не в сети",
- admin: "Управление",
- openPlugAdminPage: "Открыть страницу управления розеткой",
- deleteSmartPlug: "Удалить умную розетку",
- turnOnSmartPlug: "Включить умную розетку",
- turnOffSmartPlug: "Выключить умную розетку",
- turnOn: "Включить",
- turnOff: "Выключить",
- addSmartPlug: {
- scanningNetwork: "Сканирование сети...",
- chooseEntity: "Выберите сущность...",
- connectionFailed: "Ошибка подключения",
- searchEntities: "Поиск сущностей...",
- searchPowerSensors: "Поиск датчиков мощности...",
- searchEnergySensors: "Поиск датчиков энергии...",
- placeholders: {
- plugName: "Розетка в гостиной",
- mqttStateOnValue: "ON, true, 1",
- mqttSameAsPower: "Та же тема, что для мощности, или другая",
- },
- },
- linkedTo: "Связана с:",
- monitorOnly: "Только мониторинг",
- alerts: "Оповещения",
- scheduleOn: "Включение в {{time}}",
- scheduleOff: "Выключение в {{time}}",
- on: "Включена",
- off: "Выключена",
- power: "Мощность",
- kwhToday: "кВт·ч сегодня",
- settings: "Настройки",
- automationSettings: "Настройки автоматизации",
- showInSwitchbar: "Показывать на панели переключателей",
- quickAccessSidebar: "Быстрый доступ с боковой панели",
- enabled: "Включено",
- enableAutomation: "Включить автоматизацию для этой розетки",
- autoOn: "Автовключение",
- autoOnDescription: "Включать при начале печати",
- autoOff: "Автовыключение",
- autoOffDescription: "Выключать после завершения печати (однократно)",
- autoOffPersistent: "Оставлять включённым",
- autoOffPersistentDescription: "Не сбрасывать автовыключение после печати",
- controlsPrinterPower: "Питает принтер",
- controlsPrinterPowerDescription: "Отключите, если эта розетка питает только аксессуар (вентилятор фильтра, подсветку). Иначе её выключение помечает принтер как офлайн.",
- autoOffAfterDrying: "Выключать после сушки",
- autoOffAfterDryingDescription: "Выключать после завершения сушки в AMS",
- delayAfterDryingMinutes: "Задержка после сушки (мин)",
- turnOffDelayMode: "Условие отложенного выключения",
- time: "Время",
- temp: "Температура",
- delayMinutes: "Задержка (мин)",
- tempThreshold: "Порог температуры (°C)",
- tempThresholdDescription: "Выключать, когда сопло остынет ниже этой температуры",
- edit: "Изменить",
- deleteConfirm: "Удалить «{{name}}»? Это действие нельзя отменить.",
- turnOnConfirm: "Включить «{{name}}»?",
- turnOffConfirm: "Выключить «{{name}}»? Питание подключённого устройства будет отключено.",
- failedToTurn: "Не удалось {{action}} «{{name}}»",
- unknown: "Неизвестно",
- addTitle: "Добавление умной розетки",
- editTitle: "Редактирование умной розетки",
- stopScanning: "Остановить сканирование",
- discoverTasmota: "Найти устройства Tasmota",
- foundDevices: "Найдено устройств: {{count}}. Нажмите для выбора:",
- noDevicesFound: "Устройства Tasmota в сети не найдены",
- haNotConfigured: "Home Assistant не настроен. Настройте его в разделе",
- haSettingsPath: "Настройки → Сеть → Home Assistant",
- selectEntity: "Выберите сущность *",
- ipAddress: "IP-адрес *",
- nameLabel: "Название *",
- username: "Имя пользователя",
- password: "Пароль",
- authHint: "Оставьте пустым, если устройство Tasmota не требует аутентификации",
- linkToPrinter: "Связать с принтером",
- noPrinter: "Без принтера — только ручное управление",
- linkingDescription: "Связь позволяет автоматически включать и выключать питание при начале и завершении печати",
- powerAlerts: "Оповещения о мощности",
- alertAbove: "Оповещать выше (Вт)",
- alertBelow: "Оповещать ниже (Вт)",
- alertDescription: "Отправлять уведомление при пересечении заданных порогов мощности. Оставьте поле пустым, чтобы отключить соответствующий порог.",
- dailySchedule: "Ежедневное расписание",
- turnOnAt: "Включать в",
- turnOffAt: "Выключать в",
- scheduleDescription: "Ежедневно включать и выключать розетку в указанное время. Оставьте поле пустым, чтобы не выполнять соответствующее действие.",
- showOnPrinterCard: "Показывать в карточке принтера",
- displayOnPrinterCard: "Показывать кнопку в карточке принтера",
- connectedResult: "Подключено!",
- deviceLabel: "Устройство: {{name}} — ",
- stateLabel: "Состояние: {{state}}",
- test: "Проверить",
- delete: "Удалить",
- save: "Сохранить",
- add: "Добавить",
- cancel: "Отмена",
- failedToStartScan: "Не удалось запустить сканирование",
- nameRequired: "Укажите название",
- entityRequired: "Для розеток Home Assistant необходимо выбрать сущность",
- mqttTopicRequired: "Для мониторинга мощности, энергии или состояния необходимо настроить хотя бы одну тему MQTT",
- loadingEntities: "Загрузка сущностей...",
- loading: "Загрузка...",
- failedToLoadEntities: "Не удалось загрузить сущности: {{error}}",
- noEntitiesMatching: "Сущности по запросу «{{search}}» не найдены",
- noEntitiesAvailable: "Нет доступных сущностей",
- searchingEntities: "Поиск по всем сущностям, найдено: {{count}}",
- showingEntities: "Показаны switch, light и input_boolean, доступно: {{count}}",
- energyMonitoringOptional: "Мониторинг энергии (необязательно)",
- energyMonitoringHint: "Найдите и выберите датчики мощности и энергии.",
- powerSensorW: "Датчик мощности (Вт)",
- energyTodayKwh: "Энергия за сегодня (кВт·ч)",
- totalEnergyKwh: "Общая энергия (кВт·ч)",
- noMatchingSensors: "Подходящие датчики не найдены",
- none: "Нет",
- mqttNotConfigured: "Брокер MQTT не настроен. Укажите его адрес в разделе",
- mqttSettingsPath: "Настройки → Сеть → Публикация MQTT",
- mqttNotConfiguredSuffix: "Включать публикацию не обязательно — достаточно заполнить параметры брокера.",
- mqttMonitorOnlyDescription: "Розетки MQTT получают данные мощности и энергии через подписку MQTT. Управление включением и выключением недоступно — используйте брокер MQTT или систему домашней автоматизации.",
- powerMonitoring: "Мониторинг мощности",
- energyMonitoring: "Мониторинг энергии",
- stateMonitoring: "Мониторинг состояния",
- optional: "необязательно",
- topic: "Тема",
- jsonPath: "Путь JSON",
- multiplier: "Множитель",
- onValue: "Значение «включено»",
- mqttPowerHint: "Путь JSON извлекает значение из полезной нагрузки JSON, например «power_l1». Оставьте пустым, если тема публикует число напрямую.\nДля преобразования мВт→Вт используйте 0.001, для кВт→Вт — 1000.",
- mqttEnergyHint: "Путь JSON извлекает значение из полезной нагрузки JSON. Оставьте пустым для числового значения напрямую.\nДля преобразования Вт·ч→кВт·ч используйте 0.001, для МВт·ч→кВт·ч — 1000.",
- mqttStateHint: "Путь JSON извлекает значение из полезной нагрузки JSON. Оставьте пустым для значения напрямую.\nЗначение «включено» — точная строка, означающая включённое состояние. Оставьте пустым для автоматического распознавания ON, true и 1.",
- restControl: "Управление",
- restOnUrl: "URL включения",
- restOffUrl: "URL выключения",
- restOnBody: "Тело запроса включения",
- restOffBody: "Тело запроса выключения",
- restMethod: "Метод HTTP",
- restHeaders: "Пользовательские заголовки (JSON)",
- restStatusUrl: "URL состояния",
- restStatusPath: "Путь JSON состояния",
- restStatusOnValue: "Значение «включено»",
- restPowerUrl: "URL мощности",
- restPowerPath: "Путь JSON мощности",
- restPowerMultiplier: "Множитель мощности",
- restEnergyUrl: "URL энергии",
- restEnergyPath: "Путь JSON энергии",
- restEnergyTotalPath: "Путь JSON полной энергии",
- restEnergyTotalMultiplier: "Множитель полной энергии",
- restEnergyTotalPathHint: "например, aenergy.total",
- restEnergyTotalHint: "Многие розетки, включая все устройства Shelly, передают только накопительный счётчик энергии, который никогда не сбрасывается. Его следует указывать здесь, а не в поле выше: если считать его суточным расходом, значение не сбросится в полночь, а данные за вчера и общий расход останутся пустыми. Bambuddy вычисляет расход за сегодня и вчера по этому счётчику; для накопления данных потребуется один-два дня. Shelly передаёт ватт-часы, поэтому используйте множитель 0.001.",
- restEnergyMultiplier: "Множитель энергии",
- restUrlRequired: "Для REST-розетки необходимо указать хотя бы один URL: включения или выключения",
- restHeadersHint: "например, {\"Authorization\": \"Bearer your-token\"}",
- restBodyHint: "например, ON или {\"state\": \"on\"}",
- restStatusHint: "URL для опроса текущего состояния",
- restPathHint: "например, state или data.power.status",
- restPowerUrlHint: "Отдельный URL данных мощности; если пусто, используется URL состояния",
- restEnergyUrlHint: "Отдельный URL данных энергии; если пусто, используется URL состояния",
- restEnergyHint: "Для каждого значения можно использовать отдельный URL либо URL состояния. Множители используются для преобразования единиц, например 0.001 для Вт·ч→кВт·ч.",
- testConnection: "Проверить подключение",
- connectionSuccess: "Подключение успешно",
- noSwitchesInSwitchbar: "На панели переключателей нет устройств",
- enableSwitchbarHint: "Включите «Показывать на панели переключателей» в разделе «Настройки → Умные розетки»",
- },
- notifications: {
- providerTypes: {
- callmebot: "CallMeBot/WhatsApp",
- ntfy: "ntfy",
- pushover: "Pushover",
- telegram: "Telegram",
- email: "Электронная почта",
- discord: "Discord",
- webhook: "Вебхук",
- homeassistant: "Home Assistant",
- bark: "Bark",
- },
- providerDescriptions: {
- email: "Уведомления по электронной почте через SMTP",
- telegram: "Уведомления через Telegram-бота",
- discord: "Отправка в канал Discord через вебхук",
- ntfy: "Бесплатные push-уведомления с возможностью самостоятельного размещения сервера",
- pushover: "Простые и надёжные push-уведомления",
- callmebot: "Бесплатные уведомления WhatsApp через CallMeBot",
- webhook: "Универсальный HTTP POST-запрос на любой URL",
- homeassistant: "Постоянные уведомления на панели Home Assistant",
- bark: "iOS push-уведомления через Bark (можно разместить у себя)",
- },
- lastSuccess: "Последняя отправка: {{date}}",
- error: "Ошибка",
- printer: "Принтер:",
- allPrinters: "Все принтеры",
- sendTestNotification: "Отправить тестовое уведомление",
- eventSettings: "Настройки событий",
- enabled: "Включено",
- sendFromProvider: "Отправлять уведомления через этого провайдера",
- printEvents: "События печати",
- printerStatus: "Состояние принтера",
- amsAlarms: "Предупреждения AMS",
- amsHtAlarms: "Предупреждения AMS-HT",
- printQueue: "Очередь печати",
- start: "Запуск",
- plateCheck: "Проверка пластины",
- complete: "Завершено",
- failed: "Ошибка",
- stopped: "Остановлено",
- progress: "Ход печати",
- offline: "Не в сети",
- lowFilament: "Мало филамента",
- maintenance: "Обслуживание",
- amsHumidity: "Влажность AMS",
- amsTemp: "Температура AMS",
- amsDryingSuspended: "Сушка приостановлена",
- amsHtHumidity: "Влажность AMS-HT",
- amsHtTemp: "Температура AMS-HT",
- bedCooled: "Стол остыл",
- firstLayer: "Первый слой",
- quiet: "Тихий режим",
- digest: "Сводка в {{time}}",
- printStarted: "Печать началась",
- plateNotEmpty: "Пластина не пуста",
- plateNotEmptyDescription: "Перед печатью на пластине обнаружены объекты",
- plateClearRequired: "Требуется подтверждение стола",
- plateClearRequiredDescription: "Печать завершена, очередь ждет подтверждения",
- plateClear: "Стол свободен",
- printCompleted: "Печать завершена",
- bedCooledLabel: "Стол остыл",
- bedCooledDescription: "После печати температура стола опустилась ниже заданного порога",
- firstLayerCompleteLabel: "Первый слой завершён",
- firstLayerCompleteDescription: "Уведомить со снимком после завершения первого слоя",
- missingSpoolAssignmentLabel: "Катушка не назначена",
- billingChargeFailedLabel: 'Ошибка списания',
- billingChargeFailedDescription: 'Уведомлять, если не удалось учесть стоимость печати',
- missingSpoolAssignmentDescription: "Уведомить при запуске печати, если для необходимых слотов не назначены катушки",
- printFailed: "Ошибка печати",
- printStopped: "Печать остановлена",
- progressMilestones: "Этапы выполнения",
- progressMilestonesDescription: "Уведомлять при 25%, 50% и 75%",
- printerOffline: "Принтер не в сети",
- printerError: "Ошибка принтера",
- aiFailureDetection: "Обнаружение сбоев с помощью ИИ",
- aiFailureDetectionDescription: "Уведомить, если Obico AI обнаружит возможный сбой печати",
- lowFilamentLabel: "Заканчивается филамент",
- maintenanceDue: "Требуется обслуживание",
- maintenanceDueDescription: "Уведомить, когда принтеру потребуется обслуживание",
- amsHumidityHigh: "Высокая влажность в AMS",
- amsHumidityHighDescription: "Влажность в обычной AMS превысила заданный порог",
- amsTemperatureHigh: "Высокая температура в AMS",
- amsTemperatureHighDescription: "Температура в обычной AMS превысила заданный порог",
- amsDryingSuspendedTitle: "Автоматическая сушка приостановлена",
- amsDryingSuspendedDescription: "Автоматическая сушка блока AMS прекращена: влажность так и не опустилась ниже порога",
- amsHtHumidityHigh: "Высокая влажность в AMS-HT",
- amsHtHumidityHighDescription: "Влажность в AMS-HT превысила заданный порог",
- amsHtTemperatureHigh: "Высокая температура в AMS-HT",
- amsHtTemperatureHighDescription: "Температура в AMS-HT превысила заданный порог",
- inventoryAlerts: "Уведомления о запасах",
- stockReorderAlert: "Пора заказывать",
- stockReorderAlertDescription: "Запас по SKU достиг точки повторного заказа",
- stockBreakAlert: "Риск исчерпания запаса",
- stockBreakAlertDescription: "Запас закончится раньше, чем поступит пополнение",
- jobAdded: "Задание добавлено",
- jobAddedDescription: "Задание добавлено в очередь",
- jobAssigned: "Задание назначено",
- jobAssignedDescription: "Задание по модели назначено принтеру",
- jobStarted: "Задание запущено",
- jobStartedDescription: "Задание из очереди отправлено на печать",
- jobWaiting: "Задание ожидает",
- jobWaitingDescription: "Задание ожидает филамент или свободный принтер",
- jobSkipped: "Задание пропущено",
- jobSkippedDescription: "Задание пропущено из-за ошибки предыдущего",
- jobFailed: "Не удалось запустить задание",
- jobFailedDescription: "Задание не удалось отправить на печать",
- queueComplete: "Очередь завершена",
- queueCompleteDescription: "Все задания в очереди завершены",
- quietHours: "Тихие часы",
- noNotificationsDuring: "Не отправлять уведомления в это время",
- editProviderToChangeQuietHours: "Измените провайдера, чтобы настроить тихие часы",
- dailyDigest: "Ежедневная сводка",
- batchNotifications: "Объединять уведомления в одну ежедневную сводку",
- sendAt: "Отправлять в {{time}}",
- editProviderToChangeDigestTime: "Измените провайдера, чтобы настроить время сводки",
- edit: "Изменить",
- deleteProvider: "Удалить провайдера уведомлений",
- deleteConfirm: "Удалить «{{name}}»? Это действие нельзя отменить.",
- delete: "Удалить",
- addTitle: "Добавить провайдера уведомлений",
- editTitle: "Изменить провайдера уведомлений",
- nameLabel: "Название *",
- namePlaceholder: "Мои уведомления",
- providerTypeLabel: "Тип провайдера *",
- configuration: "Настройка",
- testConfiguration: "Проверить настройку",
- printerFilter: "Фильтр принтеров",
- onlyFromPrinter: "Отправлять уведомления только о событиях этого принтера",
- quietHoursDnd: "Тихие часы (не беспокоить)",
- quietStart: "Начало",
- quietEnd: "Окончание",
- dailyDigestLabel: "Ежедневная сводка",
- sendDigestAt: "Отправлять сводку в",
- digestCollected: "События будут собраны и отправлены одной сводкой в указанное время",
- notificationEvents: "События для уведомлений",
- progressPercent: "(25%, 50%, 75%)",
- bedCooledAfterPrint: "(после завершения печати)",
- haSensorAlert: "Оповещение датчика принтера",
- haSensorAlertDescription: "(связанный датчик Home Assistant требует внимания)",
- locationHaSensorAlert: "Оповещение датчика места хранения",
- locationHaSensorAlertDescription: "(датчик Home Assistant, связанный с местом хранения, требует внимания)",
- eventPriority: {
- sectionTitle: "Приоритет ntfy",
- helpNtfy: "Выберите приоритет для каждого включённого события. ntfy использует его для усиления оповещений: звука, видимости и поведения push-уведомлений. Для неуказанных событий используется приоритет по умолчанию сервера ntfy.",
- min: "Минимальный",
- low: "Низкий",
- default: "Обычный",
- high: "Высокий",
- urgent: "Срочный",
- },
- cancel: "Отмена",
- save: "Сохранить",
- add: "Добавить",
- nameRequired: "Укажите название",
- fieldRequired: "Поле «{{field}}» обязательно",
- haDataInvalid: 'Поле Data должно быть корректным JSON-объектом, напр. {"priority": "high", "ttl": 0}',
- phoneNumber: "Номер телефона",
- apiKey: "Ключ API",
- serverUrl: "URL сервера",
- topic: "Тема",
- authToken: "Токен авторизации",
- userKey: "Ключ пользователя",
- appToken: "Токен приложения",
- priority: "Приоритет",
- pushoverRetry: "Повтор экстренного уведомления (с)",
- pushoverExpire: "Срок действия экстренного уведомления (с)",
- botToken: "Токен бота",
- chatId: "ID чата",
- telegramThreadId: "ID темы форума",
- telegramThreadIdHelp: "Необязательно. Отправляет в конкретную тему форум-группы — последнее число в ссылке на тему (t.me/c/.../25). Оставьте пустым для темы General.",
- telegramThreadIdInvalid: "ID темы форума должен быть числом.",
- smtpServer: "SMTP-сервер",
- smtpPort: "Порт SMTP",
- security: "Защита соединения",
- authentication: "Аутентификация",
- username: "Имя пользователя",
- password: "Пароль",
- fromEmail: "Адрес отправителя",
- toEmail: "Адрес получателя",
- webhookUrl: "URL вебхука",
- payloadFormat: "Формат данных",
- authorization: "Авторизация",
- titleFieldName: "Имя поля заголовка",
- messageFieldName: "Имя поля сообщения",
- editTemplate: "Изменить шаблон: {{name}}",
- titleLabel: "Заголовок",
- bodyLabel: "Текст",
- titlePlaceholder: "Заголовок уведомления...",
- bodyPlaceholder: "Текст уведомления...",
- availableVariables: "Доступные переменные",
- clickToInsert: "Нажмите, чтобы вставить в позицию курсора в тексте",
- livePreview: "Предварительный просмотр",
- hide: "Скрыть",
- show: "Показать",
- loadingPreview: "Загрузка предварительного просмотра...",
- enterTemplateContent: "Введите содержимое шаблона для предварительного просмотра",
- titlePreview: "Заголовок:",
- bodyPreview: "Текст:",
- resetToDefault: "Восстановить стандартный шаблон",
- titleRequired: "Укажите заголовок",
- bodyRequired: "Введите текст уведомления",
- notificationLog: "Журнал уведомлений",
- showFailedOnly: "Только неудачные",
- last24Hours: "Последние 24 часа",
- last7Days: "Последние 7 дней",
- last30Days: "Последние 30 дней",
- last90Days: "Последние 90 дней",
- justNow: "Только что",
- noFailedNotifications: "Неудачных уведомлений нет",
- noNotificationsLogged: "В журнале пока нет уведомлений",
- unknownProvider: "Неизвестный провайдер",
- logTitle: "Заголовок",
- logMessage: "Сообщение",
- logError: "Ошибка",
- logProvider: "Провайдер: {{type}}",
- logTime: "Время: {{time}}",
- refresh: "Обновить",
- clearOld: "Удалить старые",
- statsSummary: "За последние {{days}} дней:",
- statsNotifications: "уведомлений",
- statsSent: "отправлено: {{count}}",
- statsFailed: "ошибок: {{count}}",
- eventTypes: {
- print_start: "Печать началась",
- print_complete: "Печать завершена",
- print_failed: "Ошибка печати",
- print_stopped: "Печать остановлена",
- print_progress: "Ход печати",
- printer_offline: "Принтер не в сети",
- printer_error: "Ошибка принтера",
- filament_low: "Заканчивается филамент",
- maintenance_due: "Требуется обслуживание",
- test: "Тест",
- },
- userEmail: {
- title: "Уведомления",
- emailNotifications: "Уведомления по электронной почте",
- emailNotificationsDesc: "Получать письма о собственных заданиях печати. Для отправки используются системные параметры SMTP из раздела расширенной аутентификации.",
- sendingTo: "Уведомления будут отправляться на адрес",
- noEmailWarning: "Для вашей учётной записи не указан адрес электронной почты. Обратитесь к администратору.",
- printJobNotifications: "Уведомления о заданиях печати",
- printJobNotificationsDesc: "Выберите события, при которых будут отправляться письма о запущенных вами заданиях.",
- printJobStarts: "Запуск задания печати",
- printJobStartsDesc: "Уведомлять о начале вашего задания печати.",
- printJobFinishes: "Завершение задания печати",
- printJobFinishesDesc: "Уведомлять об успешном завершении вашего задания печати.",
- printErrors: "Ошибки печати",
- printErrorsDesc: "Уведомлять, если задание завершилось ошибкой или при печати возникла проблема.",
- printJobStops: "Остановка задания печати",
- printJobStopsDesc: "Уведомлять об отмене или остановке вашего задания печати.",
- saveSuccess: "Настройки уведомлений сохранены.",
- saveError: "Не удалось сохранить настройки уведомлений.",
- },
- },
- richTextEditor: {
- bold: "Полужирный",
- italic: "Курсив",
- underline: "Подчёркивание",
- bulletList: "Маркированный список",
- numberedList: "Нумерованный список",
- alignLeft: "По левому краю",
- alignCenter: "По центру",
- alignRight: "По правому краю",
- addLink: "Добавить ссылку",
- removeLink: "Удалить ссылку",
- },
- externalLinks: {
- title: "Ссылки на боковой панели",
- sidebarLayout: "Боковая панель",
- sidebarLayoutDescription: "Показывайте или скрывайте встроенные страницы, добавляйте внешние ссылки и перетаскивайте пункты, меняя порядок навигации.",
- systemPages: "Страницы Bambuddy",
- externalLinks: "Внешние ссылки",
- visibleInSidebar: "Показывается на боковой панели",
- hiddenFromSidebar: "Скрыто с боковой панели",
- requiredInSidebar: "Обязательный пункт боковой панели",
- hidePage: "Скрыть страницу",
- showPage: "Показать страницу",
- settingsCannotBeHidden: "Настройки нельзя скрыть",
- noLinksConfigured: "Внешние ссылки не настроены",
- deleteLink: "Удалить ссылку",
- removeCustomIcon: "Удалить пользовательский значок",
- openInNewTab: "Открывать в новой вкладке",
- placeholders: {
- linkName: "Моя ссылка",
- },
- },
- keyboardShortcuts: {
- title: "Горячие клавиши",
- navigation: "Навигация",
- archivesSection: "Архив",
- kProfilesSection: "K-профили",
- generalSection: "Общие",
- shortcuts: {
- goToPrinters: "Перейти к принтерам",
- goToArchives: "Перейти в архив",
- goToQueue: "Перейти к очереди",
- goToStats: "Перейти к статистике",
- goToProfiles: "Перейти к облачным профилям",
- goToSettings: "Перейти к настройкам",
- focusSearch: "Перейти в строку поиска",
- openUploadModal: "Открыть окно загрузки",
- clearSelection: "Снять выделение / убрать фокус с поля",
- contextMenu: "Контекстное меню карточки",
- refreshProfiles: "Обновить профили",
- newProfile: "Новый профиль",
- exitSelectionMode: "Выйти из режима выделения",
- showHelp: "Показать эту справку",
- },
- footer: "Нажмите Esc или щёлкните снаружи, чтобы закрыть",
- },
- notificationLog: {
- title: "Журнал уведомлений",
- events: {
- printStarted: "Печать началась",
- printComplete: "Печать завершена",
- printFailed: "Ошибка печати",
- printStopped: "Печать остановлена",
- progress: "Ход выполнения",
- printerOffline: "Принтер не в сети",
- printerError: "Ошибка принтера",
- lowFilament: "Заканчивается филамент",
- maintenanceDue: "Требуется обслуживание",
- test: "Тест",
- },
- timeAgo: {
- justNow: "Только что",
- minutesAgo: "{{minutes}} мин назад",
- hoursAgo: "{{hours}} ч назад",
- },
- },
- restoreBackup: {
- title: "Восстановление резервной копии",
- restoring: "Восстановление...",
- restoreComplete: "Восстановление завершено",
- restoreFailed: "Ошибка восстановления",
- importSettings: "Импортировать настройки из файла резервной копии",
- pleaseWait: "Подождите, пока данные восстанавливаются",
- clickToSelect: "Нажмите, чтобы выбрать файл резервной копии (.json или .zip)",
- howDuplicateHandling: "Как обрабатываются совпадения:",
- categories: {
- printers: "Принтеры",
- smartPlugs: "Умные розетки",
- notificationProviders: "Провайдеры уведомлений",
- filaments: "Филаменты",
- archives: "Архив",
- pendingUploads: "Ожидающие загрузки",
- settingsTemplates: "Настройки и шаблоны",
- },
- matchingInfo: {
- printers: "сопоставляются по серийному номеру",
- smartPlugs: "сопоставляются по IP-адресу",
- notificationProviders: "сопоставляются по названию",
- filaments: "сопоставляются по названию, типу и бренду",
- archives: "сопоставляются по хешу содержимого",
- pendingUploads: "сопоставляются по имени файла",
- settingsTemplates: "всегда перезаписываются",
- },
- replaceExisting: "Заменить существующие данные",
- keepExisting: "Сохранить существующие данные",
- replaceDescription: "Перезаписать уже существующие элементы данными из резервной копии",
- keepDescription: "Восстановить только отсутствующие элементы",
- caution: "Внимание:",
- cautionText: "При перезаписи текущая конфигурация будет заменена данными из резервной копии. В целях безопасности коды доступа к принтерам никогда не перезаписываются.",
- itemsRestored: "Восстановлено элементов",
- itemsSkipped: "Пропущено элементов",
- restored: "Восстановлено",
- skipped: "Пропущено (уже существует)",
- filesLabel: "Файлы (3MF, миниатюры и т. п.)",
- newApiKeysGenerated: "Созданы новые ключи API",
- newApiKeysWarning: "Эти ключи показываются только один раз. Скопируйте их сейчас!",
- processingBackup: "Обработка резервной копии...",
- noDataFound: "В резервной копии не найдено данных для восстановления.",
- failedToRestore: "Не удалось восстановить резервную копию. Проверьте формат файла.",
- },
- backupExport: {
- title: "Экспорт резервной копии",
- selectData: "Выберите данные для включения",
- selectAll: "Выбрать всё",
- selectNone: "Снять выделение",
- categoryDescriptions: {
- settings: "Язык, тема и настройки обновлений",
- notifications: "ntfy, Pushover, Discord и другие",
- templates: "Пользовательские шаблоны сообщений",
- smartPlugs: "Конфигурация розеток Tasmota",
- externalLinks: "Ссылки на внешние сервисы в боковой панели",
- printers: "Сведения о принтерах (без кодов доступа)",
- plateDetection: "Эталонные изображения пустых пластин",
- filaments: "Типы и стоимость филамента",
- maintenance: "Пользовательские графики обслуживания",
- archives: "Все данные печати и файлы (3MF, миниатюры, фотографии)",
- projects: "Проекты, позиции спецификаций и вложения",
- pendingUploads: "Загрузки виртуальных принтеров, ожидающие проверки",
- apiKeys: "Ключи API вебхуков (при импорте создаются новые)",
- },
- requiresPrinters: "Необходимо выбрать раздел «Принтеры»",
- zipFileWarning: "Будет создан ZIP-файл.",
- zipFileDescription: "В него войдут все файлы 3MF, миниатюры, таймлапсы и фотографии. Операция может занять некоторое время, а файл — получиться большим.",
- includeAccessCodes: "Включить коды доступа",
- includeAccessCodesDescription: "Для переноса на другой компьютер",
- includeAccessCodesWarning: "Коды доступа попадут в файл открытым текстом. Храните резервную копию в безопасном месте!",
- categoriesSelected: "Выбрано категорий: {{selectedCount}}",
- },
- pendingUploads: {
- placeholders: {
- notes: "Добавьте примечания об этой печати...",
- },
- discardUpload: "Отклонить загрузку",
- archiveAllUploads: "Добавить все загрузки в архив",
- discardAllUploads: "Отклонить все загрузки",
- archive: "В архив",
- timeAgo: {
- justNow: "Только что",
- minutesAgo: "{{minutes}} мин назад",
- hoursAgo: "{{hours}} ч назад",
- daysAgo: "{{days}} дн. назад",
- },
- },
- apiBrowser: {
- placeholders: {
- requestBody: "Тело запроса JSON...",
- searchEndpoints: "Поиск конечных точек...",
- },
- },
- configureAmsSlot: {
- title: "Настройка слота AMS",
- slotConfigured: "Слот настроен!",
- configuringSlot: "Настраивается слот:",
- slotLabel: "{{ams}}, слот {{slot}}",
- searchPresets: "Поиск профилей...",
- colorPlaceholder: "Название или HEX-код цвета (например: brown, FF8800)",
- clearCustomColor: "Очистить пользовательский цвет",
- noCloudPresets: "Облачных профилей нет. Войдите в Bambu Cloud для синхронизации.",
- noPresetsAvailable: "Нет доступных профилей. Войдите в Bambu Cloud или импортируйте локальные профили.",
- noMatchingPresets: "Подходящие профили не найдены.",
- custom: "Пользовательский",
- builtin: "Встроенный",
- orcaCloud: "Orca Cloud",
- bambuCloud: "Bambu Cloud",
- settingsSentToPrinter: "Настройки отправлены на принтер",
- filamentProfile: "Профиль филамента",
- kProfileLabel: "K-профиль (Pressure Advance)",
- filteringFor: "Фильтр по материалу: {{material}}",
- noKProfile: "Без K-профиля (стандартное значение 0,020)",
- noMatchingKProfiles: "Подходящие K-профили не найдены. Будет использовано стандартное значение K=0,020.",
- otherKProfiles: "Другие K-профили на этом принтере",
- selectFilamentFirst: "Сначала выберите профиль филамента",
- kFromCalibration: "K={{value}} из калибровки принтера",
- customColorLabel: "Пользовательский цвет (необязательно)",
- presetColors: "Цвета {{name}}:",
- showLessColors: "Показать меньше цветов",
- showMoreColors: "Показать больше цветов",
- clear: "Очистить",
- hexLabel: "HEX: #{{hex}}",
- resetting: "Сброс...",
- resetSlot: "Сбросить слот",
- cancel: "Отмена",
- configuring: "Настройка...",
- configureSlot: "Настроить слот",
- },
- githubBackup: {
- title: "Резервное копирование в Git",
- history: "История",
- downloadBackup: "Скачать резервную копию",
- restoreBackup: "Восстановить резервную копию",
- noBackupsYet: "Резервных копий пока нет",
- },
- emailSettings: {
- placeholders: {
- fromName: "BamBuddy",
- },
- },
- tagManagement: {
- searchTags: "Поиск меток...",
- renameTag: "Переименовать метку",
- deleteTag: "Удалить метку",
- },
- notificationTemplates: {
- placeholders: {
- title: "Заголовок уведомления...",
- body: "Текст уведомления...",
- },
- },
- batchTag: {
- placeholders: {
- newTag: "Введите новую метку...",
- },
- },
- photoGallery: {
- deletePhoto: "Удалить фотографию",
- },
- filamentHoverCard: {
- copySpoolUuid: "Скопировать UUID катушки",
- },
- kProfilesView: {
- hasNote: "Есть примечание",
- copyProfile: "Копировать профиль",
- },
- layout: {
- openMenu: "Открыть меню",
- noPermissionSystemInfo: "У вас нет разрешения на просмотр системной информации",
- },
- dashboard: {
- dragToReorder: "Перетащите, чтобы изменить порядок",
- hideWidget: "Скрыть виджет",
- },
- notificationProviderCard: {
- deleteNotificationProvider: "Удалить провайдера уведомлений",
- },
- fileManagerModal: {
- closeFileManager: "Закрыть файловый менеджер",
- sortFiles: "Сортировать файлы",
- goToParentFolder: "Перейти в родительскую папку",
- threeView: "Просмотр 3D",
- },
- embeddedCameraViewer: {
- refreshStream: "Обновить поток",
- close: "Закрыть",
- zoomOut: "Уменьшить",
- resetZoom: "Сбросить масштаб",
- zoomIn: "Увеличить",
- dragToResize: "Перетащите, чтобы изменить размер",
- },
- timelapseViewer: {
- skipBack5s: "Назад на 5 с",
- skipForward5s: "Вперёд на 5 с",
- },
- notificationProviders: {
- descriptions: {
- email: "Уведомления по электронной почте через SMTP",
- telegram: "Уведомления через Telegram-бота",
- discord: "Отправка в канал Discord через вебхук",
- ntfy: "Бесплатные push-уведомления с возможностью самостоятельного размещения сервера",
- pushover: "Простые и надёжные push-уведомления",
- callmebot: "Бесплатные уведомления WhatsApp через CallMeBot",
- webhook: "Обычный HTTP POST на любой URL",
- },
- },
- logViewer: {
- searchPlaceholder: "Поиск по сообщению или имени логгера...",
- noLogEntries: "Записи журнала не найдены",
- },
- switchbarPopover: {
- noSwitchesInSwitchbar: "На панели переключателей нет устройств",
- },
- projectPageModal: {
- placeholders: {
- title: "Название",
- designer: "Автор",
- license: "Лицензия",
- description: "Введите описание...",
- profileTitle: "Название профиля",
- profileDescription: "Описание профиля...",
- },
- },
- spoolmanSettings: {
- },
- time: {
- unknown: "—",
- waiting: "Ожидание",
- justNow: "Только что",
- now: "Сейчас",
- minsAgo: "{{count}} мин назад",
- inMins: "через {{count}} мин",
- hoursAgo: "{{count}} ч назад",
- inHours: "через {{count}} ч",
- daysAgo: "{{count}} дн. назад",
- inDays: "через {{count}} дн.",
- },
- spoolbuddy: {
- nav: {
- dashboard: "Панель",
- ams: "AMS",
- inventory: "Катушки",
- writeTag: "Запись метки",
- settings: "Настройки",
- },
- status: {
- nfcReady: "NFC готов",
- nfcOff: "NFC выключен",
- offline: "Не в сети",
- online: "В сети",
- noPrinters: "Нет принтеров",
- deviceOffline: "Устройство не в сети",
- waitingConnection: "Ожидание подключения устройства...",
- systemReady: "Система готова",
- status: "Состояние",
- },
- dashboard: {
- readyToScan: "Готово к сканированию",
- idleMessage: "Поставьте катушку на весы для идентификации",
- nfcHint: "Метка NFC будет считана автоматически",
- device: "Устройство",
- syncWeight: "Синхронизировать массу",
- weightSynced: "Синхронизировано!",
- unknownTag: "Неизвестная метка",
- newTag: "Обнаружена новая метка",
- onScale: "на весах",
- linkSpool: "Связать с катушкой",
- linkTagTitle: "Связать метку с катушкой",
- linkTag: "Связать метку",
- selectSpool: "Выберите катушку, с которой нужно связать эту метку:",
- noUntagged: "Катушки без меток не найдены",
- tagDetected: "Метка обнаружена",
- noTag: "Метка отсутствует",
- tagId: "Метка",
- grossWeight: "Масса брутто",
- spoolSize: "Размер катушки",
- close: "Закрыть",
- currentSpool: "Текущая катушка",
- plateReady: "Пластина готова: {{name}}",
- plateReadyLabel: "Пластины, готовые к очистке",
- plateClearAction: "Очищено",
- plateClearedToast: "Пластина отмечена как очищенная",
- plateClearFailed: "Не удалось отметить пластину как очищенную",
- },
- modal: {
- spoolDetected: "Катушка обнаружена",
- assignToAms: "Назначить в AMS",
- syncWeight: "Синхронизировать массу",
- weightSynced: "Синхронизировано!",
- syncing: "Синхронизация...",
- newTagDetected: "Обнаружена новая метка",
- addToInventory: "Добавить в учёт",
- assignToAmsTitle: "Назначить в AMS",
- selectSlot: "Выберите слот",
- assign: "Назначить",
- assigning: "Назначение...",
- assignSuccess: "Назначено!",
- assignPendingInsert: "Назначено. Слот будет настроен после установки катушки.",
- assignError: "Не удалось назначить катушку. Повторите попытку.",
- noPrinterSelected: "Выберите принтер...",
- noAmsDetected: "На этом принтере AMS не обнаружена",
- slot: "Слот",
- },
- weight: {
- noReading: "Нет показаний",
- stable: "Стабильно",
- measuring: "Измерение...",
- tare: "Тарировать",
- calibrate: "Калибровать",
- },
- spool: {
- remaining: "Остаток",
- material: "Материал",
- brand: "Бренд",
- color: "Цвет",
- coreWeight: "Сердечник",
- labelWeight: "По этикетке",
- scaleWeight: "По весам",
- netWeight: "Нетто",
- lastUsed: "Последнее использование",
- },
- ams: {
- noData: "AMS не обнаружена",
- connectAms: "Подключите AMS, чтобы увидеть слоты филамента",
- noPrinter: "Принтер не выбран",
- selectPrinter: "Выберите принтер на верхней панели",
- printerDisconnected: "Принтер отключён",
- humidity: "Влажность",
- level: "Уровень",
- active: "Активен",
- slot: "Слот",
- empty: "Пусто",
- },
- inventory: {
- search: "Поиск катушек...",
- empty: "В учёте нет катушек",
- noResults: "Подходящие катушки не найдены",
- spools: "катушек",
- addSpool: "Добавить катушку",
- },
- settings: {
- tabDevice: "Устройство",
- tabDisplay: "Экран",
- tabScale: "Весы",
- tabUpdates: "Обновления",
- nfcReader: "Считыватель NFC",
- type: "Тип",
- connection: "Подключение",
- notConnected: "Н/Д",
- deviceInfo: "Сведения об устройстве",
- hostname: "Хост",
- uptime: "Время работы",
- systemConfig: "Бэкенд и авторизация",
- backendUrl: "URL бэкенда Bambuddy",
- apiToken: "Токен API",
- apiTokenPlaceholder: "Введите токен API",
- saveConfig: "Сохранить конфигурацию",
- systemQueued: "Конфигурация поставлена в очередь.",
- nfcDiagnostic: "Диагностика NFC",
- scaleDiagnostic: "Диагностика весов",
- readTagDiagnostic: "Диагностика чтения метки",
- testNfc: "Проверить считыватель",
- testScale: "Проверить точность",
- testReadTag: "Считать метку",
- systemFieldsRequired: "Необходимо указать URL бэкенда.",
- brightness: "Яркость",
- saved: "Сохранено",
- noBacklight: "Подсветка DSI не обнаружена. Для управления яркостью требуется дисплей DSI.",
- screenBlank: "Тайм-аут отключения экрана",
- screenBlankDesc: "Экран выключается при бездействии. Коснитесь его для пробуждения.",
- displayNote: "Яркость регулируется программным фильтром.",
- scaleCalibration: "Калибровка весов",
- currentWeight: "Текущая масса",
- tareOffset: "Тара",
- calFactor: "Коэффициент",
- knownWeight: "Эталонная масса",
- calStep1: "Уберите всё с весов и нажмите «Установить ноль».",
- calStep2: "Положите на весы груз известной массы.",
- setZero: "Установить ноль",
- calibrateNow: "Калибровать",
- calibrated: "Откалибровано",
- tareSet: "Команда тарирования отправлена. Ожидание устройства...",
- tareComplete: "Тарирование завершено!",
- tareTimedOut: "Истекло время ожидания тарирования — демон SpoolBuddy запущен?",
- tareFailed: "Не удалось отправить команду тарирования",
- zeroSet: "Нулевая точка установлена. Положите на весы груз известной массы.",
- calibrationDone: "Калибровка завершена!",
- calibrationFailed: "Ошибка калибровки",
- lastCalibrated: "Последняя калибровка",
- stable: "Стабильно",
- settling: "Стабилизация...",
- firmware: "Прошивка",
- scale: "Весы",
- noDevice: "Устройство SpoolBuddy не найдено",
- daemonVersion: "Версия демона",
- currentVersion: "Текущая",
- versionPending: "Ожидание демона...",
- checking: "Проверка...",
- checkUpdates: "Проверить обновления",
- updateAvailable: "Доступно обновление",
- updateInstructions: "Обновление по SSH: запустите установочный скрипт SpoolBuddy.",
- upToDate: "Установлена актуальная версия",
- includeBeta: "Включать бета-версии",
- },
- writeTag: {
- tabExisting: "Существующая катушка",
- tabNew: "Новая катушка",
- tabReplace: "Заменить метку",
- searchPlaceholder: "Поиск по материалу, цвету или бренду...",
- noUntaggedSpools: "Нет катушек без меток",
- noTaggedSpools: "Нет катушек с метками",
- selectSpool: "Выберите катушку, затем положите чистую метку NTAG на считыватель",
- placeTag: "Положите метку NTAG на считыватель",
- tagReady: "Метка обнаружена — можно записывать",
- writeTag: "Записать метку",
- replaceTag: "Заменить метку",
- writing: "Запись метки...",
- waiting: "Ожидание SpoolBuddy...",
- writeSuccess: "Метка успешно записана!",
- writeFailed: "Ошибка записи",
- queueFailed: "Не удалось поставить команду записи в очередь",
- tryAgain: "Повторить",
- cancel: "Отмена",
- replaceWarning: "Старая метка будет отвязана и заменена новой.",
- deviceOffline: "SpoolBuddy не в сети",
- material: "Материал",
- colorName: "Название цвета",
- color: "Цвет",
- brand: "Бренд",
- weight: "Масса (г)",
- createSpool: "Создать катушку",
- creating: "Создание...",
- spoolCreated: "Катушка создана! Можно записывать метку.",
- createFailed: "Не удалось создать катушку",
- incompleteDataWarning: "Метка записана с неполными данными Spoolman",
- },
- quickMenu: {
- printerPower: "Питание принтера",
- systemControls: "Система",
- restartDaemon: "Перезапустить демон",
- restartBrowser: "Перезапустить браузер",
- reboot: "Перезагрузить",
- shutdown: "Выключить",
- swipeToClose: "Проведите вниз, чтобы закрыть",
- confirmTitle: "Подтверждение",
- confirmShutdown: "Выключить SpoolBuddy? Для повторного включения потребуется физический доступ.",
- confirmReboot: "Перезагрузить SpoolBuddy?",
- confirmRestartDaemon: "Перезапустить демон SpoolBuddy? NFC и весы временно будут недоступны.",
- confirmRestartBrowser: "Перезапустить браузер киоска? Экран ненадолго погаснет.",
- confirm: "Подтвердить",
- confirmPlugOn: "Включить {{name}}?",
- confirmPlugOff: "Выключить {{name}}?",
- turnOn: "Включить",
- turnOff: "Выключить",
- },
- },
- diagnostic: {
- modalTitle: "Диагностика подключения — {{name}}",
- running: "Выполняется диагностика...",
- runningElapsed: "Выполняется диагностика... ({{elapsed}} с)",
- waitingForReportHint: "Ожидание публикации отчёта о состоянии принтера — это может занять до {{max}} секунд.",
- runFailed: "Не удалось выполнить диагностику: {{error}}",
- retry: "Запустить снова",
- runButton: "Запустить диагностику",
- sectionTitle: "Диагностика подключения",
- sectionDescription: "Проверьте, почему принтер не подключается или не печатает: доступность портов, режим разработчика LAN, сетевой режим Docker и учётные данные.",
- noPrinters: "Принтеры не настроены.",
- overall: {
- ok: "Проблем не обнаружено — подключение к принтеру исправно.",
- warnings: "Принтер должен работать, но некоторые пункты требуют внимания.",
- problems: "Обнаружены проблемы, объясняющие, почему принтер не подключается или не печатает.",
- },
- check: {
- port_mqtt: {
- title: "Порт управления (MQTT 8883)",
- pass: "Доступен — принтер принимает управляющие подключения.",
- fail: "Порт 8883 недоступен. Принтер выключен, имеет другой IP-адрес либо подключение блокирует межсетевой экран. Проверьте IP-адрес принтера и доступность порта 8883.",
- },
- port_ftps: {
- title: "Порт передачи файлов (FTPS 990)",
- pass: "Доступен — отправка файлов печати будет работать.",
- warn: "Порт 990 недоступен. Мониторинг может работать, но отправка заданий на принтер завершится ошибкой. Убедитесь, что порт 990 не заблокирован.",
- warn_no_tls: "Порт 990 открыт, но файловая служба принтера не завершает рукопожатие TLS. Файлы печати, обложки и таймлапсы получить невозможно, поэтому архивы остаются пустыми. Перезагрузите принтер — разблокировка порта не поможет.",
- },
- external_storage: {
- title: "Сохранять отправленные файлы во внешнем хранилище (шаг 4 установки)",
- pass: "Принтер сообщает, что параметр включён: отправленные файлы будут сохраняться на SD-карте, а в архиве появятся миниатюры и метаданные слайсера.",
- fail: "Принтер сообщает, что параметр выключен. Включите «Сохранять отправленные файлы во внешнем хранилище»: в новых прошивках (P2S 01.02 / Bambu Studio 2.6+) переключатель находится в настройках печати принтера, в старых — на вкладке «Устройство» Bambu Studio / OrcaSlicer. Без этого у всех архивных заданий не будет миниатюр и метаданных слайсера.",
- skip: "Не проверено — требуется активное подключение MQTT. В старых версиях слайсеров этот параметр существует только в слайсере и принтер его не сообщает, поэтому проверка может пройти даже при выключенном параметре. Проверьте шаг 4 установки вручную.",
- skip_unsupported_model: "В этой модели есть слот SD-карты, но включить соответствующую функцию невозможно: текущая прошивка серии P1 не предоставляет переключатель в Bambu Studio, а у принтера нет экрана. Исправлять здесь нечего. Пока Bambu Lab не добавит поддержку в прошивку, архивные задания могут сохраняться без миниатюр и метаданных слайсера.",
- fail_no_media: 'Параметр включён, но принтер не видит ни карты, ни флешки в слоте, поэтому отправленным файлам некуда деваться. Вставьте накопитель и напечатайте снова — до тех пор у каждой архивной печати не будет ни миниатюры, ни метаданных слайсера.',
- warn_internal_storage: 'Параметр включён и накопитель на месте, но последняя печать всё равно ушла во внутреннюю память принтера, которую Bambuddy не может прочитать. На серии H2 и P2S кнопка «Печать» в Bambu Studio всегда отправляет туда, независимо от этого параметра. Печати архивируются с именем и временем, но без миниатюры и метаданных слайсера. Чтобы архивы были полными, запускайте печать из Bambuddy, нарезайте в OrcaSlicer или в Bambu Studio используйте «Отправить» с «Внешним накопителем», а затем запускайте печать.',
- warn_internal_history: 'Опция включена и накопитель на месте, но последняя печать шла из файла, который уже был на принтере, — повторная печать с его экрана, запуск из Handy или файл, отправленный раньше. Эта библиотека лежит во внутренней памяти, которую Bambuddy не читает, и никакие настройки этого не меняют: для той печати ничего не отправлялось. Она по-прежнему архивируется с именем и временем, но без миниатюры и метаданных слайсера. Чтобы архивы были полными, запускайте печать из Bambuddy или отправляйте её из слайсера.',
- },
- port_rtsps: {
- title: "Порт камеры ({{protocol}} {{port}})",
- pass: "Доступен — видеопоток камеры будет работать.",
- warn: "Порт {{port}} недоступен. Просмотр камеры в реальном времени работать не будет. На печать это не влияет.",
- },
- network_mode: {
- title: "Сетевой режим Docker",
- pass: "Используется сетевой режим host.",
- warn: "Bambuddy запущен в Docker с сетью bridge. Для обнаружения принтеров и виртуального принтера требуется режим host — пересоздайте контейнер с параметром «network_mode: host».",
- skip: "Bambuddy запущен не в Docker — проверка неприменима.",
- },
- subnet: {
- title: "Подсеть",
- pass: "Принтер и Bambuddy находятся в одной подсети.",
- warn: "Принтер ({{printer_ip}}) и Bambuddy ({{host_ip}}) находятся в разных подсетях. Без настроенной маршрутизации между подсетями они могут быть недоступны друг для друга.",
- skip: "Не удалось определить подсеть — проверка пропущена.",
- },
- mqtt_auth: {
- title: "Учётные данные принтера",
- pass: "Принтер принял подключение.",
- fail: "Принтер доступен, но Bambuddy к нему не подключён. Скорее всего, неверны код доступа или серийный номер — код доступа изменяется при каждом переключении режима «Только LAN» или режима разработчика, поэтому снова скопируйте его с экрана принтера. Так же выглядит принтер, который перезагружается или уже исчерпал лимит одновременных подключений.",
- fail_auth_rejected: "Принтер отклонил учётные данные Bambuddy. Код доступа или серийный номер неверны — код доступа изменяется при каждом переключении режима «Только LAN» или режима разработчика. Снова скопируйте его с экрана принтера и сохраните в настройках принтера.",
- skip: "Не проверено — принтер недоступен.",
- },
- developer_mode: {
- title: "Режим разработчика LAN",
- pass: "Режим разработчика включён.",
- fail: "Режим разработчика на принтере ВЫКЛЮЧЕН. Включите его в настройках LAN принтера и подтвердите кнопкой OK. Без него задания печати не запускаются.",
- skip: "Не удалось проверить — требуется активное подключение к принтеру.",
- },
- printer_publishing: {
- title: "Принтер публикует состояние",
- pass: "Принтер публикует обновления состояния — AMS, филаменты и K-профили будут корректно передаваться в слайсер.",
- fail: "MQTT-брокер принял подключение, но принтер не опубликовал ни одного отчёта о состоянии. Почти всегда причина в неверном регистре или ошибке в серийном номере: тема device/<serial>/report чувствительна к регистру. Сверьте серийный номер в настройках принтера с номером на его экране.",
- skip: "Не удалось проверить — требуется активное подключение к принтеру.",
- },
- },
- },
- systemHealth: {
- sectionTitle: "Состояние системы",
- sectionDescription: "Проверяет последние журналы на известные проблемы, которые обычно можно исправить самостоятельно до обращения в поддержку.",
- rescan: "Проверить снова",
- clean: "В последних {{times}} записях журнала известные проблемы не найдены.",
- logUnavailable: "Запись журналов в файл отключена, поэтому выполнить проверку невозможно. Включите файловое журналирование.",
- learnMore: "Как исправить",
- fixLabel: "Исправление:",
- occurrences: "Обнаружено {{times}} раз; последний раз — {{lastSeen}}",
- category: {
- layer8: "Можно исправить самостоятельно",
- environment: "Окружение",
- bug: "Сообщите об ошибке",
- },
- signature: {
- "ftp-auth-rejected": {
- name: "Принтер отклонил код доступа",
- cause: "Принтер отклонил вход в службу передачи файлов. Код доступа неверен либо изменился после переключения режима разработчика.",
- fix: "Снова скопируйте код доступа с экрана принтера в настройках LAN и обновите его в настройках принтера Bambuddy.",
- },
- "ftp-connection-timeout": {
- name: "Истекло время подключения к службе передачи файлов",
- cause: "Bambuddy не смог подключиться к порту передачи файлов принтера (FTPS 990). Порт заблокирован, принтер выключен либо находится в другой подсети.",
- fix: "Убедитесь, что порт 990 между Bambuddy и принтером не блокируется и оба устройства находятся в доступных друг другу сетях.",
- },
- "ftp-ssl-error": {
- name: "Ошибка защищённого соединения с файловой службой",
- cause: "Файловая служба принтера ответила на порту 990 без TLS. Её файловый сервер завис — это неисправность самого принтера, а не межсетевого экрана или прошивки.",
- fix: "Перезапустите принтер. До этого файлы печати, обложки и таймлапсы получить нельзя, но на саму печать это не влияет.",
- },
- "bambu-cloud-captcha": {
- name: "Bambu Cloud требует пройти CAPTCHA",
- cause: "Защита Bambu от злоупотреблений проверяет эту сеть, поэтому вход в Bambu Cloud завершить невозможно. Это связано с публичным IP-адресом, а не с вашей учётной записью или этой установкой.",
- fix: "Подождите: обычно проверка снимается за несколько часов, а повторные попытки входа её продлевают. Пока что войдите с помощью токена доступа из сессии браузера.",
- },
- "mqtt-connection-flapping": {
- name: "Подключение к принтеру постоянно обрывается",
- cause: "Управляющее соединение MQTT 8883 постоянно разрывается и восстанавливается. Обычно причина в нестабильной сети или частично заблокированном порте.",
- fix: "Проверьте уровень Wi‑Fi у принтера, по возможности используйте проводное подключение и убедитесь в стабильной доступности порта 8883.",
- },
- "camera-connection-refused": {
- name: "Видеопоток камеры недоступен",
- cause: "Камера недоступна по порту RTSPS 322. Порт заблокирован либо на принтере выключены камера или просмотр по LAN.",
- fix: "Включите камеру и просмотр по LAN на принтере и убедитесь, что порт 322 не заблокирован. На печать это не влияет.",
- },
- "database-locked": {
- name: "Конфликт записи в базу данных",
- cause: "Под нагрузкой SQLite выдаёт ошибки «database is locked». Это часто происходит при одновременной работе с несколькими принтерами.",
- fix: "Переведите Bambuddy на внешнюю базу PostgreSQL. См. руководство по PostgreSQL в документации.",
- },
- },
- },
- vpDiagnostic: {
- title: "Проверка настройки — {{name}}",
- runButton: "Запустить проверку",
- running: "Выполняется проверка настройки...",
- runFailed: "Не удалось выполнить проверку: {{error}}",
- retry: "Запустить снова",
- overall: {
- ok: "Все проверки пройдены — виртуальный принтер настроен правильно.",
- warnings: "Виртуальный принтер должен работать, но некоторые пункты требуют внимания.",
- problems: "Обнаружены проблемы, из-за которых слайсер не видит или не может использовать виртуальный принтер.",
- },
- check: {
- enabled: {
- title: "Виртуальный принтер включён",
- fail: "Виртуальный принтер выключен. Включите его, чтобы он обнаруживался в сети.",
- },
- running: {
- title: "Службы запущены",
- fail: "Виртуальный принтер включён, но его службы не работают. Проверьте журнал Bambuddy: обычно запуску мешает конфликт IP-адреса привязки или ошибка прав доступа.",
- },
- bind_interface: {
- title: "Сетевой интерфейс привязки",
- fail: "Интерфейс привязки не задан или больше не существует на этом хосте. Выберите актуальный интерфейс в списке «Интерфейс привязки».",
- },
- access_code: {
- title: "Код доступа задан",
- fail: "Код доступа не задан. В слайсере необходимо указать тот же восьмизначный код, который задан здесь.",
- },
- target_printer: {
- title: "Целевой принтер",
- fail: "Целевой принтер не выбран. Для режима прокси необходимо указать реальный принтер.",
- warn: "Целевой принтер сейчас не в сети. Перенаправление возобновится после его подключения.",
- },
- port_ftps: {
- title: "Служба загрузки файлов (порт {{port}})",
- fail: "На порту {{port}} выбранного IP-адреса никто не слушает, поэтому слайсер не сможет загружать файлы. Обычно причина в конфликте порта на этом интерфейсе.",
- },
- port_mqtt: {
- title: "Служба управления (порт {{port}})",
- fail: "На порту {{port}} выбранного IP-адреса никто не слушает, поэтому слайсер не сможет подключиться и отображать состояние.",
- },
- port_bind: {
- title: "Служба обнаружения (порт {{port}})",
- fail: "На порту {{port}} выбранного IP-адреса никто не слушает, поэтому сетевое обнаружение слайсером не работает.",
- },
- privileged_ports: {
- title: 'Привязка к привилегированным портам',
- fail: 'Порт {{port}} ниже 1024, и этой службе не разрешено его занимать — поэтому выше ничего не слушает. Добавьте AmbientCapabilities=CAP_NET_BIND_SERVICE в /etc/systemd/system/bambuddy.service и перезапустите либо выполните "sudo setcap cap_net_bind_service=+ep $(readlink -f $(which python3))". В Docker добавьте cap_add: [NET_BIND_SERVICE].',
- },
- certificate: {
- title: "Сертификат TLS",
- pass: "Сертификат готов. Убедитесь, что сертификат центра сертификации Bambuddy, указанный выше, импортирован в доверенное хранилище слайсера.",
- fail: "Сертификат TLS для этого виртуального принтера отсутствует. Проверьте права записи в каталог данных Bambuddy.",
- },
- },
- },
- bugReport: {
- title: "Сообщить об ошибке",
- description: "Описание",
- descriptionPlaceholder: "Что пошло не так? Опишите проблему...",
- email: "Электронная почта (необязательно)",
- emailPlaceholder: "your@email.com",
- emailPrivacy: "Указанный адрес будет добавлен в сворачиваемый раздел задачи GitHub, чтобы сопровождающий мог с вами связаться.",
- screenshot: "Снимок экрана",
- uploadOrPaste: "Загрузите, вставьте или перетащите изображение",
- dataCollectedSummary: "Какие данные включаются в отчёт?",
- dataIncluded: "Включаются:",
- dataIncludedList: "Версия приложения, ОС, архитектура, версия Python, статистика базы данных (только количества), модели принтеров, количество сопел, версии прошивок, состояние подключений, состояние интеграций (Spoolman, MQTT, HA), неконфиденциальные настройки, количество сетевых интерфейсов, сведения о Docker и версии зависимостей.",
- dataNeverIncluded: "Никогда не включаются:",
- dataNeverIncludedList: "Имена принтеров, серийные номера, коды доступа, пароли, IP-адреса, адреса электронной почты, ключи API, токены, URL вебхуков, имена хостов и пользователей.",
- submit: "Отправить",
- startLogging: "Начать отладочную запись",
- stepEnableLogging: "Отладочная запись включена",
- stepReproduce: "Теперь воспроизведите проблему",
- stepStopLogging: "Остановить и отправить отчёт",
- stopAndSubmit: "Остановить и отправить",
- maxDuration: "Автоматическая остановка через {{minutes}} мин",
- stoppingLogs: "Сбор журналов и отправка...",
- submitting: "Отправка отчёта об ошибке...",
- submittingStepConnection: "Проверка подключений к принтерам",
- submittingStepVirtualPrinters: "Проверка настройки виртуальных принтеров",
- submittingStepLogScan: "Поиск известных проблем в последних журналах",
- submittingStepSubmit: "Отправка отчёта в GitHub",
- submitSuccess: "Отчёт об ошибке успешно отправлен!",
- submitFailed: "Не удалось отправить отчёт об ошибке",
- diagnosticChecking: "Проверка подключений к принтерам...",
- diagnosticHealthy: "Проверка подключения пройдена — проблем с принтерами не обнаружено.",
- diagnosticSummary: "Проблемы с подключением обнаружены у {{problems}} из {{total}} принтеров",
- diagnosticIntro: "У одного или нескольких принтеров есть проблема подключения, которая может быть причиной сбоя. Разверните сведения о принтере ниже и посмотрите способ исправления — возможно, отчёт об ошибке не потребуется. При необходимости его всё равно можно отправить ниже.",
- logHealthSummary: "В журналах найдены известные проблемы",
- logHealthIntro: "Последние записи журнала совпадают с известными проблемами. Посмотрите способы исправления ниже — возможно, отчёт об ошибке не потребуется. При необходимости его всё равно можно отправить.",
- thankYou: "Спасибо!",
- submitted: "Отчёт об ошибке отправлен.",
- viewIssue: "Открыть задачу",
- closeKeepsRecording: 'Вы можете закрыть эту панель, пока воспроизводите проблему: запись продолжается, и при повторном открытии вы вернётесь сюда.',
- resumeRecording: 'Идёт запись отчёта об ошибке — {{elapsed}}. Нажмите, чтобы завершить.',
- resumeReport: 'Продолжить отчёт',
- unexpectedError: "Произошла непредвиденная ошибка",
- },
- failureDetection: {
- title: "Обнаружение сбоев с помощью ИИ",
- description: "Контролируйте печать через собственный сервер Obico ML API и автоматически реагируйте на обнаруженные сбои.",
- mlUrl: "URL Obico ML API",
- mlUrlHint: "Базовый URL собственного контейнера Obico ml_api, например http://192.168.1.10:3333.",
- mlToken: "Токен ML API (необязательно)",
- mlTokenPlaceholder: "Оставьте пустым, если сервер работает без ML_API_TOKEN",
- mlTokenHint: "Должен совпадать с переменной окружения ML_API_TOKEN вашего контейнера Obico ml_api. Оставьте пустым, если контейнер работает без токена.",
- test: "Проверить",
- testSuccess: "ML API доступен и работает.",
- testSuccessTokenUnknown: "ML API доступен и работает. Проверить токен не удалось.",
- testFailed: "Не удалось подключиться к ML API.",
- sensitivity: "Чувствительность",
- sensitivityLow: "Низкая (меньше ложных срабатываний)",
- sensitivityMedium: "Средняя (сбалансированная)",
- sensitivityHigh: "Высокая (раннее обнаружение, больше ложных срабатываний)",
- sensitivityHint: "Определяет пороги уверенности, при которых создаются предупреждения и фиксируются сбои.",
- action: "Действие при обнаружении сбоя",
- actionNotify: "Только уведомить",
- actionPause: "Приостановить печать",
- actionPauseOff: "Приостановить печать и отключить питание",
- pollInterval: "Интервал проверки (секунды)",
- pollIntervalHint: "Как часто проверять каждый принтер во время печати. Минимум 5 с, максимум 120 с.",
- externalUrlMissing: "Внешний URL не задан.",
- externalUrlHint: "ML API получает снимок камеры по URL. Укажите внешний URL в общих настройках, чтобы контейнер ML API мог обращаться к Bambuddy.",
- perPrinterTitle: "Контролируемые принтеры",
- perPrinterHint: "Выберите принтеры, за которыми будет следить служба обнаружения.",
- monitorAll: "Контролировать все подключённые принтеры",
- statusTitle: "Состояние",
- serviceRunning: "Служба работает",
- thresholds: "Низкий / высокий порог",
- activePrinters: "Активные задания",
- noActivePrints: "Сейчас ничего не печатается.",
- historyTitle: "Последние обнаружения",
- noHistory: "Обнаружений пока нет.",
- },
- makerworld: {
- title: "MakerWorld",
- description: "Вставьте URL модели MakerWorld, чтобы импортировать и напечатать её прямо из Bambuddy — без перехода в приложение Bambu Handy.",
- pasteUrlHeader: "Импорт из MakerWorld",
- pasteUrlPlaceholder: "https://makerworld.com/en/models/… или любая ссылка MakerWorld",
- resolveButton: "Получить данные",
- signInRequiredTitle: "Для загрузки требуется вход в Bambu Cloud",
- signInRequiredBody: "Просматривать сведения о модели можно анонимно, но для загрузки файлов 3MF MakerWorld требует учётную запись Bambu Cloud.",
- signInExpiredTitle: "Срок авторизации в Bambu Cloud истёк",
- signInExpiredBody: "Вы по-прежнему авторизованы в Bambuddy, но Bambu Lab перестал принимать сохранённый токен, поэтому загрузки завершатся ошибкой. Выполните вход в Bambu Cloud снова.",
- openCloudSettings: "Открыть настройки облака",
- untitledModel: "Модель без названия",
- byCreator: "Автор: {{name}}",
- downloadsCount: "Загрузок: {{count}}",
- licensePrefix: "Лицензия",
- alreadyImported: "Уже в библиотеке",
- openOnMakerworld: "Открыть на MakerWorld",
- alreadyInLibrary: "Эта модель уже есть в библиотеке — найдите её в разделе «Файлы → MakerWorld».",
- importSuccess: "Импортирован файл {{filename}} — сохранён в «Файлы → MakerWorld».",
- platesHeader: "Пластины ({{count}})",
- plateDefaultName: "Пластина {{n}}",
- materialCount: "Филаментов: {{count}}",
- amsRequired: "Требуется AMS",
- slicedFor: "Нарезано для {{printer}}",
- alsoCompatible: "Также отмечено как совместимое: {{printers}}",
- importToLibrary: "Сохранить",
- sliceIn: "Сохранить и нарезать в {{slicer}}",
- disclaimer: "Интеграция с MakerWorld использует документированные сообществом конечные точки API. Bambuddy не связан с MakerWorld или Bambu Lab и не одобрен ими.",
- lastImportSuccess: "Импортировано в библиотеку",
- lastImportAlreadyInLibrary: "Уже в библиотеке",
- viewInLibrary: "Открыть в файловом менеджере",
- openInBambuStudio: "Открыть в Bambu Studio",
- openInOrcaSlicer: "Открыть в OrcaSlicer",
- importTo: "Импортировать в файловый менеджер",
- recentImportsHeader: "Недавние импорты",
- phaseResolving: "Получение данных",
- phaseDownloading: "Загрузка",
- folderAuto: "MakerWorld (по умолчанию)",
- importAll: "Импортировать всё",
- importAllProgress: "Импорт {{current}} из {{total}}",
- openGallery: "Открыть галерею изображений",
- galleryPrev: "Предыдущее изображение",
- galleryNext: "Следующее изображение",
- deleteImport: "Удалить из библиотеки",
- importDeleting: "Удаление…",
- importDeleted: "Удалено из библиотеки",
- confirmDelete: "Удалить {{filename}} из библиотеки? Локальный файл будет удалён, но пластину можно снова импортировать из MakerWorld.",
- errors: {
- resolveFailed: "Не удалось обработать эту ссылку MakerWorld.",
- downloadFailed: "Ошибка загрузки. Повторите попытку.",
- deleteFailed: "Не удалось удалить файл из библиотеки.",
- },
- },
- gcodeViewer: {
- filamentSlot: 'Филамент {{n}}',
- loading: 'Чтение траектории…',
- loadFailed: 'Не удалось загрузить G-код этого файла.',
- showTravel: 'Холостые перемещения',
- topLayer: 'Верхний слой',
- bottomLayer: 'Нижний слой',
- noSource: 'Файл для предпросмотра не указан.',
- view: {
- filament: 'Филамент',
- feature: 'Тип',
- height: 'Высота',
- width: 'Ширина',
- },
- feature: {
- wall: 'Стенки',
- sparseInfill: 'Разреженное заполнение',
- solidInfill: 'Сплошное заполнение',
- bridge: 'Мост / нависание',
- support: 'Поддержка',
- skirt: 'Юбка / кайма',
- gapFill: 'Заполнение зазоров',
- ironing: 'Разглаживание',
- primeTower: 'Башня очистки',
- },
- back: "Назад",
- backToArchives: "Вернуться в архив печати",
- backToFiles: "Вернуться в файловый менеджер",
- plates: "Пластины",
- plateN: "Пластина {{n}}",
- },
- libraryTrash: {
- title: "Корзина",
- headerButton: "Корзина",
- headerTooltip: "Просмотреть файлы, перемещённые в корзину",
- backToFiles: "Вернуться к файлам",
- subtitleAdmin: "Удалённые файлы хранятся здесь {{days}} дней, затем удаляются автоматически. Показаны файлы всех пользователей.",
- subtitleUser: "Удалённые файлы хранятся здесь {{days}} дней, затем удаляются автоматически.",
- loading: "Загрузка корзины…",
- loadError: "Не удалось загрузить корзину.",
- empty: "Корзина пуста.",
- summary: "{{count}} файлов · {{size}}",
- emptyTrash: "Очистить корзину",
- restore: "Восстановить",
- purgeNow: "Удалить сейчас",
- autoPurgeIn: "Автоудаление через {{when}}",
- days: "дней",
- retentionLabel: "Автоудаление через",
- selectAll: "Выбрать всё",
- selectOne: "Выбрать {{filename}}",
- selectionCount: "Выбрано: {{count}}",
- bulkRestore: "Восстановить выбранные",
- bulkPurge: "Удалить выбранные",
- col: {
- filename: "Файл",
- folder: "Папка",
- size: "Размер",
- deleted: "Перемещён в корзину",
- autoPurge: "Автоудаление",
- owner: "Владелец",
- actions: "Действия",
- },
- confirm: {
- purgeTitle: "Удалить навсегда?",
- purgeBody: "Файл {{filename}} будет удалён с диска без возможности восстановления.",
- emptyTitle: "Очистить корзину?",
- emptyBody: "Все файлы ({{count}}) будут удалены с диска. Отменить это действие нельзя.",
- bulkPurgeTitle: "Удалить выбранные файлы навсегда?",
- bulkPurgeBody: "Выбранные файлы ({{count}}) будут удалены с диска без возможности восстановления.",
- cta: "Удалить навсегда",
- },
- toast: {
- restored: "Файл восстановлен.",
- restoreFailed: "Не удалось восстановить файл.",
- purged: "Файл удалён навсегда.",
- purgeFailed: "Не удалось удалить файл.",
- emptied: "Из корзины удалено файлов: {{count}}.",
- emptyFailed: "Не удалось очистить корзину.",
- retentionSaved: "Срок автоудаления: {{days}} дней.",
- retentionFailed: "Не удалось сохранить срок хранения.",
- bulkRestored: "Восстановлено файлов: {{count}}.",
- bulkPurged: "Удалено файлов: {{count}}.",
- },
- },
- libraryPurge: {
- title: "Очистить старые файлы",
- headerButton: "Очистить старые",
- headerTooltip: "Массово переместить старые файлы в корзину",
- description: "За один проход убирает старые файлы из библиотеки. Для печатавшихся файлов возраст считается от даты последней печати, для ни разу не печатавшихся — от даты загрузки.",
- ageLabel: "Переместить файлы старше",
- days: "дней",
- includeNeverPrinted: "Включить файлы, которые ни разу не печатались",
- effectsTitle: "Что произойдёт после нажатия «Очистить»",
- effect1: "Подходящие файлы будут перемещены в корзину, но пока не удалены с диска.",
- effect2: "Их можно восстановить из корзины до окончания срока хранения.",
- effect3: "После окончания срока хранения очистка корзины окончательно удалит их с диска.",
- effect4: "Файлы во внешних подключённых папках пропускаются: Bambuddy не удаляет чужие данные.",
- previewLoading: "Подсчёт подходящих файлов…",
- previewFailed: "Не удалось выполнить предварительный расчёт.",
- previewSummary: "В корзину будет перемещено: {{count}} файлов · {{size}}",
- andMore: "…и ещё {{count}}",
- warning: "Файлы в корзине продолжают занимать место до окончания срока хранения. Чтобы освободить диск сразу, после операции очистите корзину.",
- confirmCta: "Переместить в корзину: {{count}}",
- purging: "Перемещение в корзину…",
- toast: {
- success: "Перемещено в корзину файлов: {{count}}.",
- failed: "Не удалось очистить файлы.",
- },
- },
- libraryAutoPurge: {
- enableLabel: "Автоматически очищать старые файлы",
- enableDescription: "Раз в сутки запускает административную очистку. Сначала файлы попадают в корзину и не удаляются немедленно.",
- ageLabel: "Автоматически очищать файлы старше",
- ageDescription: "Минимум 7 дней, максимум 10 лет. Используется тот же способ расчёта возраста, что и при ручной очистке.",
- days: "дней",
- includeNeverPrinted: "Включить файлы, которые ни разу не печатались",
- saveFailed: "Не удалось сохранить настройки автоочистки.",
- },
- archivePurge: {
- headerButton: "Очистить старые",
- headerTooltip: "Массово удалить старые записи архива",
- title: "Очистить старые записи архива",
- description: "Удаляет старую историю печати. Возраст записи считается от последнего завершения печати; повторная печать обновляет дату, поэтому используемые записи не удаляются.",
- ageLabel: "Удалить записи, которые не печатались последние",
- days: "дней",
- effectsTitle: "Что произойдёт после нажатия «Очистить»",
- effect1: "Каждая подходящая запись будет скрыта из списков, а связанные файлы удалены с диска: 3MF, миниатюра, таймлапс, исходный 3MF, проект F3D и фотографии.",
- effect2: "Строка архива останется в базе, поэтому быстрая статистика сохранит вклад по филаменту, времени, стоимости и энергии — как при обычном удалении отдельной записи.",
- effect3: "Установите флажок «Также удалить из статистики», чтобы исключить вклад из быстрой статистики. Это действие необратимо.",
- effect4: "Повторная печать обновляет дату записи, поэтому используемые архивы не удаляются.",
- purgeStatsLabel: "Также удалить из статистики",
- purgeStatsHint: "Исключает соответствующие записи из быстрой статистики по филаменту, времени, стоимости и энергии. Без этого удаляются только файлы, а статистика сохраняется.",
- previewLoading: "Подсчёт подходящих записей…",
- previewFailed: "Не удалось выполнить предварительный расчёт.",
- previewSummary: "Будет удалено: {{count}} записей · {{size}}",
- andMore: "…и ещё {{count}}",
- warning: "Файлы будут удалены с диска без возможности восстановления. Перед продолжением скачайте или добавьте в избранное всё, что нужно сохранить.",
- confirmCta: "Удалить записей: {{count}}",
- purging: "Удаление…",
- toast: {
- success: "Удалено записей архива: {{count}}.",
- failed: "Не удалось очистить архив.",
- },
- },
- archiveAutoPurge: {
- enableLabel: "Автоматически очищать старые записи архива",
- enableDescription: "Раз в сутки скрывает записи из списков и удаляет их файлы с диска, если они не печатались в течение заданного срока. Повторная печать сбрасывает отсчёт.",
- ageLabel: "Автоматически удалять записи, которые не печатались последние",
- ageDescription: "Минимум 7 дней, максимум 10 лет. Срок считается от последнего завершения печати; повторная печать обновляет дату. Удаляются 3MF, миниатюра, таймлапс, исходный 3MF, F3D и фотографии.",
- days: "дней",
- purgeStatsLabel: "Также удалить из статистики",
- purgeStatsDescription: "Если включено, ежедневная очистка исключает удалённые записи из быстрой статистики по филаменту, времени, стоимости и энергии. По умолчанию выключено: статистика сохраняется, удаляются только файлы.",
- runNow: "Очистить архив сейчас",
- saveFailed: "Не удалось сохранить настройки автоочистки.",
- },
- cameraTokens: {
- scope: {
- camera_stream: "Поток камеры",
- camwall: "Стена камер",
- overlay: "Оверлей для стрима",
- },
- title: "Токены API камеры",
- navTitle: "Токены API камеры",
- description: "Долгоживущие токены для встраивания видеопотока в Home Assistant, Frigate, киоски и другие системы, которым нужен постоянный URL. Каждый токен даёт доступ только к потоку камеры и может быть отозван в любой момент.",
- loading: "Загрузка...",
- confirmRevoke: {
- title: "Отозвать этот токен?",
- body: "Все устройства, использующие «{{name}}», немедленно потеряют доступ. Отменить это действие нельзя.",
- cancel: "Отмена",
- confirm: "Отозвать",
- },
- create: {
- scopeLabel: "Область действия",
- hintCameraStream: "Токен потока камеры позволяет получать только видеопотоки и снимки. Используйте его для Home Assistant, Frigate и других систем, встраивающих изображение с одной камеры.",
- hintCamWall: "Токен стены камер открывает страницу /camwall на экране без авторизации. Он позволяет видеть названия и состояния всех принтеров, а также видеопотоки с их камер. Имена файлов, адреса и коды доступа недоступны.",
- hintOverlay: "Токен оверлея для стрима открывает страницу /overlay/{printerId} на экране без авторизации — для OBS или любой прямой трансляции. Он даёт доступ к видеопотоку одного принтера и его текущему статусу печати, включая имя файла, отображаемое на экране. Адреса и коды доступа недоступны.",
- title: "Создать токен",
- nameLabel: "Название токена",
- namePlaceholder: "Например, Home Assistant",
- daysLabel: "Срок действия, дней",
- submit: "Создать",
- hint: "Максимальный срок действия — 365 дней. Значение токена показывается только один раз при создании — скопируйте его сейчас.",
- },
- created: {
- camWallUrlTitle: "URL стены камер для этого экрана",
- camWallUrlHint: "Откройте этот адрес на экране. Любой, кто получит URL, сможет наблюдать за стеной камер, поэтому обращайтесь с ним как с ключом. Отзовите токен, чтобы отключить экран.",
- overlayUrlTitle: "URL оверлея для OBS",
- overlayUrlHint: "Добавьте этот адрес как источник браузера (Browser Source) в OBS. Замените число в /overlay/1 на номер вашего принтера (его можно узнать из URL на странице «Принтеры»). Любой, кто получит URL, сможет смотреть трансляцию, поэтому обращайтесь с ним как с ключом — отзовите токен, чтобы прекратить доступ.",
- title: "Токен создан — скопируйте его сейчас",
- warning: "Это единственный раз, когда токен отображается. После закрытия окна посмотреть его снова будет невозможно.",
- copy: "Копировать",
- dismiss: "Я сохранил токен",
- },
- list: {
- scope: "Область действия",
- myTitle: "Мои токены",
- allTitle: "Все пользователи (режим администратора)",
- empty: "Токенов пока нет.",
- name: "Название",
- owner: "Владелец",
- prefix: "Префикс",
- created: "Создан",
- expires: "Истекает",
- lastUsed: "Последнее использование",
- revoke: "Отозвать",
- expired: "Истёк",
- },
- toast: {
- created: "Токен создан",
- createFailed: "Не удалось создать токен",
- revoked: "Токен отозван",
- revokeFailed: "Не удалось отозвать токен",
- loadFailed: "Не удалось загрузить токены",
- copied: "Скопировано в буфер обмена",
- copyFailed: "Не удалось скопировать — выделите и скопируйте вручную",
- },
- },
- forecast: {
- title: "Прогноз",
- noSpools: "Активные катушки не найдены. Добавьте катушки в учёт, чтобы увидеть прогноз.",
- noUsageData: "Нет данных о расходе — невозможно спрогнозировать остатки.",
- sku: "Артикул",
- material: "Материал",
- stock: "Запас",
- dailyRate: "Расход",
- daysLeft: "Осталось дней",
- emptyBy: "Закончится к",
- reorderBy: "Заказать до",
- actions: "Действия",
- trend: "Тренд",
- estimated: "Оценка",
- noData: "Нет данных",
- timeframe: "Период",
- chartTitle: "Прогноз запаса — 5 основных материалов",
- dashedLinesROP: "Пунктирные линии — точки заказа",
- stockLevel: "Уровень запаса",
- reorderPoint: "Точка заказа",
- safetyMargin: "Страховой запас",
- trendLegend: "Тренд (по истории, уровень обслуживания 95%)",
- estimatedLegend: "Оценка (по изменению массы)",
- noDataLegend: "Нет данных",
- ropLabel: "ТЗ",
- ssLabel: "СЗ",
- safetyStockLegend: "Страховой запас",
- stockArrivalLegend: "Поступление",
- stockoutLegend: "Исчерпание запаса",
- alertCount_one: "{{count}} предупреждение",
- alertCount_other: "{{count}} предупреждений",
- order: "Заказать",
- save: "Сохранить",
- cancel: "Отмена",
- settingsSaved: "Настройки сохранены",
- failedSaveSettings: "Не удалось сохранить настройки",
- globalLeadTimeSaved: "Общий срок поставки сохранён",
- globalLeadTime: "Общий срок поставки",
- globalLeadTimeHint: "Минимальный общий срок поставки, используемый при расчёте точки заказа для всех артикулов",
- skuLeadTimeOverride: "Переопределение срока поставки",
- skuLeadTimeHint: "0 — использовать общий срок поставки. Значение больше 0 переопределяет его для этого артикула.",
- safetyMarginLabel: "Страховой запас",
- effectiveLeadTime: "Фактический срок поставки",
- effectiveLeadTimeHint: "макс. (общий {{global}} дн., для артикула {{sku}} дн.)",
- reorderPointHint: "средний расход × срок поставки + страховой запас — заказывайте, когда остаток достигнет этого уровня",
- safetyMarginHint: "Статистический страховой запас (z=1,65 × σ × √LT) плюс заданный пользователем резерв",
- safetyMarginHintDays: "Резерв поверх статистического страхового запаса.{{approx}}",
- safetyMarginHintDaysApprox: " ≈ {{g}} г при текущем расходе.",
- safetyMarginHintG: "Фиксированный весовой резерв поверх статистического страхового запаса.{{approx}}",
- safetyMarginHintGApprox: " ≈ {{days}} дн. при текущем расходе.",
- individualSpools: "Отдельные катушки",
- labelWeight: "Метка",
- spoolCount_one: "{{count}} катушка",
- spoolCount_other: "{{count}} катушек",
- stockBreakRisk: "Риск исчерпания запаса",
- stockBreakDetail: "Осталось {{days}} дн., срок поставки {{lt}} дн.",
- stockBreakBefore: "Запас закончится до пополнения",
- reorderNow: "Заказать сейчас",
- reorderTriggerPassed: "Дата заказа {{date}} уже прошла.",
- shoppingList: "Список покупок",
- shoppingListItems_one: "({{count}} позиция)",
- shoppingListItems_other: "({{count}} позиций)",
- shoppingListEmpty: "Список покупок пуст. Нажмите значок корзины в нужной строке, чтобы добавить позицию.",
- addToCart: "Добавить в список покупок",
- alertsSnoozed: "Отключить предупреждения для артикула",
- alertsEnabled: "Включить предупреждения для артикула",
- addedToCart: "Добавлено в список покупок",
- failedAddItem: "Не удалось добавить позицию",
- listView: "Список",
- logisticsView: "Логистика",
- qty: "Кол-во",
- weight: "Масса",
- leadTime: "Срок поставки",
- expectedRestock: "Ожидаемое пополнение",
- status: "Состояние",
- note: "Примечание",
- pending: "Ожидается",
- purchased: "Куплено",
- received: "Получено",
- markPurchased: "Отметить как купленное",
- markReceived: "Отметить как полученное — катушки будут добавлены в запас",
- resetToPending: "Вернуть в ожидание",
- remove: "Удалить",
- clearAll: "Очистить всё",
- downloadCsv: "CSV",
- addToCartTitle: "Добавить в список покупок",
- byQuantity: "По количеству",
- byDuration: "По сроку",
- numberOfSpools: "Количество катушек",
- lastHowManyDays: "На сколько дней должно хватить?",
- noUsageQty: "Нет данных о расходе — количество установлено равным 1.",
- noteOptional: "Примечание (необязательно)",
- notePlaceholder: "например, для проекта X, срочно…",
- addNSpools_one: "Добавить {{count}} катушку",
- addNSpools_other: "Добавить {{count}} катушек",
- onArrival: "После поступления",
- stockBreakIn: "Запас закончится через {{days}} дн.",
- stockRunsOutBefore: "Запас закончится раньше, чем истекут {{lt}} дн. срока поставки.",
- atRate: "При расходе {{rate}} г/день требуется",
- moreSpools_one: "ещё {{count}} катушка",
- moreSpools_other: "ещё {{count}} катушек",
- bridgeGap: "чтобы перекрыть дефицит.",
- noReadAccess: "У вас нет прав на просмотр прогноза запасов.",
- noWriteAccess: "У вас нет прав на изменение настроек прогноза.",
- },
- };
|