fr.ts 325 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915
  1. export default {
  2. // Navigation
  3. nav: {
  4. printers: 'Imprimantes',
  5. archives: 'Archives',
  6. queue: 'File d\'attente d\'impression',
  7. stats: 'Statistiques',
  8. profiles: 'Profils',
  9. maintenance: 'Maintenance',
  10. projects: 'Projets',
  11. inventory: 'Filament',
  12. files: 'Gestionnaire de fichiers',
  13. makerworld: 'MakerWorld',
  14. notifications: 'Notifications',
  15. settings: 'Paramètres',
  16. system: 'Système',
  17. collapseSidebar: 'Réduire la barre latérale',
  18. expandSidebar: 'Développer la barre latérale',
  19. update: 'Mise à jour',
  20. updateAvailable: 'Mise à jour disponible : v{{version}}',
  21. updateAvailableBanner: 'La version {{version}} est disponible !',
  22. viewUpdate: 'Voir la mise à jour',
  23. viewOnGithub: 'Voir sur GitHub',
  24. keyboardShortcuts: 'Raccourcis clavier (?)',
  25. switchToLight: 'Passer au mode clair',
  26. switchToDark: 'Passer au mode sombre',
  27. switchToSystem: 'Passer au mode système',
  28. smartSwitches: 'Interrupteurs intelligents',
  29. logout: 'Déconnexion',
  30. installApp: "Installer l'application",
  31. installAppSuccess: 'Bambuddy a été installé',
  32. },
  33. // Common
  34. common: {
  35. save: 'Enregistrer',
  36. saving: 'Enregistrement...',
  37. cancel: 'Annuler',
  38. delete: 'Supprimer',
  39. edit: 'Modifier',
  40. add: 'Ajouter',
  41. close: 'Fermer',
  42. confirm: 'Confirmer',
  43. loading: 'Chargement...',
  44. error: 'Erreur',
  45. errorLoading: 'Erreur de chargement',
  46. retry: 'Réessayer',
  47. success: 'Succès',
  48. warning: 'Avertissement',
  49. enabled: 'Activé',
  50. disabled: 'Désactivé',
  51. yes: 'Oui',
  52. no: 'Non',
  53. on: 'On',
  54. off: 'Désactivé',
  55. all: 'Tous',
  56. none: 'Aucun',
  57. search: 'Rechercher',
  58. filter: 'Filtrer',
  59. sort: 'Trier',
  60. refresh: 'Actualiser',
  61. download: 'Télécharger',
  62. upload: 'Téléverser',
  63. uploading: 'Téléversement...',
  64. uploadFailed: 'Échec du téléversement',
  65. actions: 'Actions',
  66. status: 'Statut',
  67. name: 'Nom',
  68. description: 'Description',
  69. date: 'Date',
  70. time: 'Heure',
  71. hours: 'heures',
  72. minutes: 'minutes',
  73. seconds: 'secondes',
  74. days: 'jours',
  75. enable: 'Activer',
  76. disable: 'Désactiver',
  77. permissions: 'Autorisations',
  78. noPrinters: 'Aucune imprimante configurée',
  79. noData: 'Aucune donnée disponible',
  80. linkNotFound: 'Lien non trouvé',
  81. required: 'Requis',
  82. optional: 'Optionnel',
  83. dismiss: 'Ignorer',
  84. apply: 'Appliquer',
  85. reset: 'Réinitialiser',
  86. export: 'Exporter',
  87. import: 'Importer',
  88. clear: 'Effacer',
  89. selectAll: 'Tout sélectionner',
  90. deselectAll: 'Tout désélectionner',
  91. noChange: '— Aucun changement —',
  92. unchanged: 'Inchangé',
  93. unassigned: 'Non assigné',
  94. unknown: 'Inconnu',
  95. unknownError: 'Erreur inconnue',
  96. today: 'Aujourd\'hui',
  97. tomorrow: 'Demain',
  98. asap: 'Dès que possible',
  99. overdue: 'En retard',
  100. now: 'Maintenant',
  101. collapse: 'Réduire',
  102. expand: 'Développer',
  103. previous: 'Précédent',
  104. next: 'Suivant',
  105. viewArchive: 'Voir l\'archive',
  106. viewInFileManager: 'Voir dans le gestionnaire de fichiers',
  107. addedBy: 'Ajouté par {{username}}',
  108. prints: 'impressions',
  109. more: '+{{count}} de plus',
  110. ascending: 'Croissant',
  111. descending: 'Décroissant',
  112. back: 'Retour',
  113. copy: 'Copier',
  114. copied: 'Copié !',
  115. printer: 'Imprimante',
  116. remove: 'Retirer',
  117. type: 'Type',
  118. print: 'Imprimer',
  119. rename: 'Renommer',
  120. move: 'Déplacer',
  121. create: 'Créer',
  122. duplicate: 'Dupliquer',
  123. left: 'Gauche',
  124. right: 'Droite',
  125. },
  126. // Printers page
  127. printers: {
  128. addPreflight: {
  129. checking: 'Vérification de la connexion...',
  130. warning: 'Certaines vérifications de connexion ont échoué. Cette imprimante pourrait apparaître hors ligne. Examinez les vérifications ci-dessous, corrigez ce que vous pouvez, ou enregistrez quand même.',
  131. back: 'Retour',
  132. saveAnyway: 'Enregistrer quand même',
  133. },
  134. title: 'Imprimantes',
  135. addPrinter: 'Ajouter une imprimante',
  136. editPrinter: 'Modifier l\'imprimante',
  137. deletePrinter: 'Supprimer l\'imprimante',
  138. printerName: 'Nom de l\'imprimante',
  139. serialNumber: 'Numéro de série',
  140. ipAddress: 'Adresse IP / Nom d\'hôte',
  141. accessCode: 'Code d\'accès',
  142. model: 'Modèle',
  143. nozzleCount: 'Nombre de buses',
  144. autoArchive: 'Auto-archivage',
  145. status: {
  146. available: 'Disponible',
  147. idle: 'Inactif',
  148. printing: 'Impression en cours',
  149. paused: 'En pause',
  150. offline: 'Hors ligne',
  151. problem: 'Problème',
  152. error: 'Erreur',
  153. finished: 'Terminé',
  154. unknown: 'Inconnu',
  155. },
  156. temperatures: {
  157. nozzle: 'Buse',
  158. bed: 'Plateau',
  159. chamber: 'Chambre',
  160. },
  161. heaterHistory: {
  162. title: 'Historique des chauffages',
  163. openLabel: 'Voir l\'historique des chauffages',
  164. nozzle: 'Buse',
  165. nozzle2: 'Buse 2',
  166. bed: 'Plateau',
  167. chamber: 'Chambre',
  168. error: 'Échec du chargement de l\'historique',
  169. empty: 'Aucune donnée enregistrée',
  170. },
  171. progress: '{{percent}}% terminé',
  172. timeRemaining: '{{time}} restant',
  173. deleteConfirm: 'Êtes-vous sûr de vouloir supprimer "{{name}}" ?',
  174. maintenanceOk: 'Maintenance OK',
  175. maintenanceWarning: '{{count}} avertissement',
  176. maintenanceWarning_plural: '{{count}} avertissements',
  177. maintenanceDue: '{{count}} échéance',
  178. maintenanceDue_plural: '{{count}} échéances',
  179. // Sort options
  180. sort: {
  181. name: 'Nom',
  182. status: 'Statut',
  183. model: 'Modèle',
  184. location: 'Emplacement',
  185. eta: 'Temps restant',
  186. ascending: 'Tri croissant',
  187. descending: 'Tri décroissant',
  188. },
  189. // Card size
  190. cardSize: {
  191. small: 'Petites cartes',
  192. medium: 'Cartes moyennes',
  193. large: 'Grandes cartes',
  194. extraLarge: 'Très grandes cartes',
  195. },
  196. pageView: {
  197. openCamWallPage: 'Ouvrir le mur de caméras en pleine page',
  198. cards: 'Cartes',
  199. camWall: 'Mur de caméras',
  200. },
  201. camWall: {
  202. page: {
  203. tokenRejected:
  204. "Ce lien du mur de caméras n'est plus valide. Le jeton a peut-être expiré ou été révoqué.",
  205. loadFailed: 'Impossible de charger les imprimantes.',
  206. },
  207. noPrinters: 'Aucune imprimante à afficher',
  208. noSignal: 'Aucun signal',
  209. live: 'En direct',
  210. snap: 'Photo',
  211. off: 'Arrêt',
  212. summary: '{{live}} en direct, {{snap}} captures, {{total}} au total',
  213. layer: 'Couche {{cur}}/{{total}}',
  214. timeLeft: '{{time}} restantes',
  215. statusMode: {
  216. off: 'Arrêt',
  217. compact: 'Compact',
  218. full: 'Complet',
  219. },
  220. settings: {
  221. title: 'Paramètres du mur de caméras',
  222. maxLive: 'Flux en direct max.',
  223. maxLiveHint: 'Combien de vignettes diffusent en direct à la fois. Les autres se rafraîchissent en captures.',
  224. snapshotInterval: 'Intervalle de capture (secondes)',
  225. snapshotIntervalHint: 'À quelle fréquence les vignettes hors direct récupèrent une nouvelle capture.',
  226. statusOverlay: 'Overlay de statut',
  227. statusOverlayHint: 'Compact : badge de statut seul. Complet : + progression, couche, temps restant.',
  228. },
  229. },
  230. // Controls
  231. hideOffline: 'Masquer hors ligne',
  232. nextAvailable: 'Prochaine disponible',
  233. powerOn: 'Allumer',
  234. offlinePrintersWithPlugs: 'Imprimantes hors ligne avec prises connectées',
  235. noPrintersConfigured: 'Aucune imprimante configurée pour le moment',
  236. search: 'Rechercher des imprimantes...',
  237. noSearchResults: 'Aucune imprimante ne correspond à votre recherche ou à vos filtres',
  238. filter: {
  239. allStatuses: 'Tous les statuts',
  240. allLocations: 'Tous les emplacements',
  241. },
  242. toolbar: {
  243. filters: 'Filtres',
  244. view: 'Vue',
  245. actions: 'Actions',
  246. },
  247. // Printer card
  248. readyToPrint: 'Prête à imprimer',
  249. external: 'Externe',
  250. extL: 'Ext-L',
  251. extR: 'Ext-R',
  252. deleteArchives: 'Supprimer les archives d\'impression',
  253. noLabel: 'Pas d\'étiquette',
  254. printPreview: 'Aperçu avant impression',
  255. width: 'Largeur',
  256. height: 'Hauteur',
  257. noObjectsFound: 'Aucun objet trouvé',
  258. objectsLoadedOnPrintStart: 'Les objets sont chargés au début de l\'impression',
  259. willBeSkipped: 'Sera sauté',
  260. name: 'Nom',
  261. serialCannotBeChanged: 'Le numéro de série ne peut pas être modifié',
  262. locationHelp: 'Utilisé pour grouper les imprimantes et filtrer la file d\'attente',
  263. // WiFi signal strength
  264. wifiSignal: {
  265. veryWeak: 'Très faible',
  266. weak: 'Faible',
  267. fair: 'Moyen',
  268. good: 'Bon',
  269. excellent: 'Excellent',
  270. },
  271. // Maintenance
  272. maintenanceUpToDate: 'Maintenance à jour - Cliquez pour voir',
  273. maintenance: {
  274. title: 'En maintenance',
  275. subtitle: "Cette imprimante est en pause — non connectée, non éligible à la file d'attente, sans notifications.",
  276. pillLabel: 'Maintenance',
  277. exitButton: 'Quitter la maintenance',
  278. menuEnter: 'Activer le mode maintenance',
  279. menuExit: 'Quitter le mode maintenance',
  280. toastEntered: '{{name}} est maintenant en mode maintenance',
  281. toastExited: '{{name}} est de nouveau en ligne',
  282. confirmMidPrintTitle: 'Passer en mode maintenance pendant une impression ?',
  283. confirmMidPrintMessage: "{{name}} est en cours d'impression. Le mode maintenance déconnectera MQTT et arrêtera le suivi de progression ainsi que les notifications de fin pour ce travail. Continuer ?",
  284. editFieldLabel: 'Mode maintenance',
  285. editFieldHelp: "Quand activé, cette imprimante est mise en pause de MQTT, de la file d'attente et des notifications — utile pour les réparations, les installations Bambuddy parallèles ou une suspension temporaire.",
  286. },
  287. // Chamber light
  288. chamberLightOn: 'Allumer la lumière de la chambre',
  289. chamberLightOff: 'Éteindre la lumière de la chambre',
  290. // Files
  291. files: 'Fichiers',
  292. browseFiles: 'Parcourir les fichiers de l\'imprimante',
  293. // Smart plug
  294. autoOffAfterPrint: 'Extinction auto après impression',
  295. autoOffExecuted: 'Extinction auto exécutée - rallumez pour réinitialiser',
  296. // HMS errors
  297. hmsErrors: 'Erreurs HMS',
  298. viewHmsErrors: 'Voir {{count}} erreur(s) HMS',
  299. // Actions
  300. resume: 'Reprendre',
  301. pause: 'Pause',
  302. stop: 'Arrêter',
  303. camera: 'Caméra',
  304. skipObject: 'Sauter l\'objet',
  305. reconnect: 'Reconnecter',
  306. forceRefresh: 'Forcer l\'actualisation',
  307. forceRefreshSuccess: 'Actualisation demandée',
  308. mqttDebug: 'Débogage MQTT',
  309. printerInformation: 'Informations imprimante',
  310. copyToClipboard: 'Copier',
  311. copied: 'Copié !',
  312. state: 'État',
  313. wifiSignalLabel: 'Signal WiFi',
  314. developerMode: 'Mode développeur',
  315. enabled: 'Activé',
  316. disabled: 'Désactivé',
  317. addedOn: 'Ajoutée le',
  318. sdCard: 'Carte SD',
  319. inserted: 'Insérée',
  320. notInserted: 'Non insérée',
  321. totalPrintHours: 'Heures d\'impression',
  322. activeNozzle: 'Active : buse {{nozzle}}',
  323. nozzleRack: 'Rack à buses',
  324. nozzleDocked: 'Rangée',
  325. nozzleMounted: 'Montée',
  326. nozzleActive: 'Actif',
  327. nozzleIdle: 'Inactive',
  328. nozzleDiameter: 'Diamètre',
  329. nozzleType: 'Type',
  330. nozzleStatus: 'Statut',
  331. nozzleFilament: 'Filament',
  332. nozzleWear: 'Usure',
  333. nozzleMaxTemp: 'Temp Max',
  334. nozzleSerial: 'Série',
  335. nozzleHardenedSteel: 'Acier Trempé',
  336. nozzleStainlessSteel: 'Acier Inoxydable',
  337. nozzleTungstenCarbide: 'Carbure de Tungstène',
  338. nozzleFlow: 'Débit',
  339. nozzleHighFlow: 'Haut débit',
  340. nozzleStandardFlow: 'Standard',
  341. // Firmware
  342. firmwareUpdate: 'Mise à jour Firmware',
  343. firmwareInstructions: 'Sur l\'écran de l\'imprimante, allez dans',
  344. firmwareNav: 'Naviguez vers',
  345. settings: 'Paramètres',
  346. firmware: 'Micrologiciel',
  347. // Discovery
  348. discoverPrinters: 'Découvrir les imprimantes',
  349. searching: 'Recherche...',
  350. manualEntry: 'Saisie manuelle',
  351. addFromCloud: 'Ajouter depuis le Cloud',
  352. // Toast messages
  353. toast: {
  354. printerDeleted: 'Imprimante supprimée',
  355. missingSpoolAssignment: 'Impression démarrée sur {{printer}}. Attribution de bobine manquante pour : {{slots}}',
  356. assignmentVerified: 'Filament chargé dans l\'emplacement {{slot}} ({{printer}})',
  357. assignmentVerifiedNoKprofile: 'Emplacement {{slot}} sur {{printer}} chargé, mais le profil de calibration de débit (profil K) n\'a pas été appliqué',
  358. assignmentNotConfirmed: 'Impossible de confirmer l\'attribution de l\'emplacement {{slot}} sur {{printer}} — vérifiez l\'emplacement AMS',
  359. printerAdded: 'Imprimante ajoutée',
  360. printerUpdated: 'Imprimante mise à jour',
  361. failedToDelete: 'Échec de la suppression',
  362. failedToAdd: 'Échec de l\'ajout',
  363. connectionFailedNotAdded: 'Connexion à l\'imprimante impossible. Vérifiez l\'IP, le numéro de série et le code d\'accès, et confirmez que le mode LAN-only est activé. L\'imprimante n\'a pas été ajoutée.',
  364. failedToUpdate: 'Échec de la mise à jour',
  365. commandSent: 'Commande envoyée',
  366. failedToSendCommand: 'Échec de l\'envoi de la commande',
  367. turnedOn: '{{name}} allumée',
  368. failedToPowerOn: 'Échec de l\'allumage de {{name}}',
  369. scriptTriggered: 'Script déclenché',
  370. printStopped: 'Impression arrêtée',
  371. printPaused: 'Impression en pause',
  372. printResumed: 'Impression reprise',
  373. referenceDeleted: 'Référence supprimée',
  374. detectionAreaSaved: 'Zone de détection enregistrée',
  375. failedToRunScript: 'Échec du script',
  376. failedToStopPrint: 'Échec de l\'arrêt',
  377. failedToPausePrint: 'Échec de la mise en pause',
  378. failedToResumePrint: 'Échec de la reprise',
  379. failedToControlChamberLight: 'Échec du contrôle de la lumière',
  380. failedToSetSpeed: 'Échec du réglage de la vitesse',
  381. failedToUpdateSetting: 'Échec de mise à jour du paramètre',
  382. failedToSkipObjects: 'Échec du saut d\'objets',
  383. failedToRereadRfid: 'Échec lecture RFID',
  384. failedToCheckPlate: 'Échec vérification plateau',
  385. failedToUpdateLabel: 'Échec mise à jour étiquette',
  386. failedToDeleteReference: 'Échec suppression référence',
  387. failedToSaveDetectionArea: 'Échec enregistrement zone',
  388. plateCheckEnabled: 'Vérification plateau activée',
  389. plateCheckDisabled: 'Vérification plateau désactivée',
  390. calibrationSaved: 'Calibration enregistrée !',
  391. calibrationFailed: 'Échec de la calibration',
  392. rfidRereadInitiated: 'Lecture RFID initiée',
  393. loadInitiated: 'Chargement du filament…',
  394. unloadInitiated: 'Déchargement du filament…',
  395. failedToLoad: 'Échec du chargement du filament',
  396. failedToUnload: 'Échec du déchargement du filament',
  397. },
  398. // Connection status
  399. connection: {
  400. connected: 'Connecté',
  401. offline: 'Hors ligne',
  402. },
  403. plateStatus: {
  404. markCleared: 'Marquer le plateau comme dégagé',
  405. cleared: 'Plateau dégagé',
  406. notCleared: 'Plateau non dégagé',
  407. inUse: 'Plateau en cours d\'utilisation',
  408. },
  409. // Queue info
  410. queue: {
  411. inQueue: '{{count}} impression en file',
  412. inQueue_plural: '{{count}} impressions en file',
  413. },
  414. // Controls section
  415. controls: 'Contrôles',
  416. // RFID
  417. rfid: {
  418. reread: 'Relire RFID',
  419. },
  420. // AMS load/unload (#891)
  421. ams: {
  422. load: 'Charger',
  423. unload: 'Décharger',
  424. },
  425. bedJog: {
  426. limitWarning: 'Les limites de déplacement ne sont pas appliquées lors des mouvements manuels : un bug du firmware Bambu ignore les butées logicielles pour les commandes à distance. Déplacez avec précaution pour éviter une collision.',
  427. title: 'Commandes de déplacement',
  428. bed: 'Plateau',
  429. step: 'Pas (mm)',
  430. up: 'Monter le plateau',
  431. down: 'Descendre le plateau',
  432. disabledWhilePrinting: 'Désactivé pendant l\'impression',
  433. notHomedTitle: 'Imprimante non référencée',
  434. notHomedMessage: 'L\'imprimante n\'a pas été référencée depuis la dernière impression. Lancez la référence automatique d\'abord pour un positionnement sûr (parque la tête d\'outil, puis référence X, Y et Z), ou déplacez quand même — les butées logicielles seront ignorées.',
  435. homeZ: 'Référence automatique',
  436. moveAnyway: 'Déplacer quand même',
  437. homingStarted: 'Référencement automatique en cours…',
  438. },
  439. // Permissions
  440. permission: {
  441. noAdd: 'Pas d\'autorisation pour ajouter',
  442. noEdit: 'Pas d\'autorisation pour modifier',
  443. noDelete: 'Pas d\'autorisation pour supprimer',
  444. noControl: 'Pas d\'autorisation pour contrôler',
  445. noFiles: 'Pas d\'autorisation pour les fichiers',
  446. noAmsRfid: 'Pas d\'autorisation pour le RFID',
  447. noSmartPlugControl: 'Pas d\'autorisation pour les prises',
  448. noCamera: 'Pas d\'autorisation pour les caméras',
  449. },
  450. // Add/Edit modal
  451. modal: {
  452. addTitle: 'Ajouter une imprimante',
  453. editTitle: 'Modifier l\'imprimante',
  454. myPrinter: 'Mon imprimante',
  455. selectModel: 'Choisir un modèle...',
  456. locationGroup: 'Emplacement / Groupe (optionnel)',
  457. locationPlaceholder: 'ex: Atelier, Bureau',
  458. autoArchiveLabel: 'Auto-archiver les impressions terminées',
  459. fromPrinterSettings: 'Depuis les paramètres imprimante',
  460. modelOptional: 'Modèle (optionnel)',
  461. saveChanges: 'Enregistrer les modifications',
  462. },
  463. // Skip objects
  464. skipObjects: {
  465. tooltip: 'Sauter des objets',
  466. onlyWhilePrinting: 'Sauter (uniquement pendant l\'impression)',
  467. requiresMultiple: 'Sauter (nécessite 2+ objets)',
  468. title: 'Sauter des objets',
  469. matchIdsInfo: 'Faites correspondre les IDs avec l\'écran de l\'imprimante',
  470. printerShowsIds: 'L\'écran affiche les IDs des objets sur le plateau',
  471. skipSelected: 'Sauter la sélection',
  472. skipping: 'Saut en cours...',
  473. noObjectsSelected: 'Aucun objet sélectionné',
  474. selectObjectsToSkip: 'Sélectionnez les objets à ignorer',
  475. skipped: 'sauté',
  476. objectsSkipped: 'Objets sautés',
  477. activeCount: '{{count}} actifs',
  478. waitForLayer: 'Attendez la couche 2 pour sauter des objets (actuelle : {{layer}})',
  479. skip: 'Sauter',
  480. confirmTitle: 'Sauter l\'objet ?',
  481. confirmMessage: 'Voulez-vous vraiment sauter "{{name}}" ? Cette action est irréversible.',
  482. confirmAllMessage: 'Tous les objets restants sont sélectionnés. Cela arrêtera la tâche d’impression. Continuer ?',
  483. confirmMultipleMessage: 'Sauter {{count}} objets sélectionnés ? Cette action est irréversible.',
  484. },
  485. // Confirm modals
  486. confirm: {
  487. deleteTitle: 'Supprimer l\'imprimante',
  488. deleteMessage: 'Supprimer "{{name}}" ? Cela retirera tous les paramètres de connexion.',
  489. deleteArchivesNote: 'Tout l\'historique sera définitivement supprimé.',
  490. keepArchivesNote: 'L\'historique sera conservé mais plus associé à cette imprimante.',
  491. stopTitle: 'Arrêter l\'impression',
  492. stopMessage: 'Arrêter l\'impression sur "{{name}}" ?',
  493. stopButton: 'Arrêter',
  494. pauseTitle: 'Mettre en pause',
  495. pauseMessage: 'Mettre en pause l\'impression sur "{{name}}" ?',
  496. pauseButton: 'Pause',
  497. resumeTitle: 'Reprendre l\'impression',
  498. resumeMessage: 'Reprendre l\'impression sur "{{name}}" ?',
  499. resumeButton: 'Reprendre',
  500. powerOnTitle: 'Allumer l\'imprimante',
  501. powerOnMessage: 'Allumer "{{name}}" ?',
  502. powerOnButton: 'Allumer',
  503. powerOffTitle: 'Éteindre l\'imprimante',
  504. powerOffMessage: 'Éteindre "{{name}}" ?',
  505. powerOffWarning: 'ATTENTION : "{{name}}" imprime ! L\'éteindre maintenant peut endommager l\'imprimante.',
  506. powerOffButton: 'Éteindre',
  507. haToggleTitle: 'Basculer "{{name}}"',
  508. haToggleMessage: 'Basculer l\'entité Home Assistant {{entity}} ? Cela peut couper l\'alimentation si elle est actuellement activée.',
  509. haToggleWarning: 'ATTENTION : "{{name}}" imprime ! Basculer {{entity}} peut couper l\'alimentation et interrompre l\'impression. Continuer ?',
  510. haToggleButton: 'Basculer',
  511. },
  512. // Bulk actions
  513. bulk: {
  514. select: 'Sélectionner',
  515. selectAll: 'Tout sélectionner',
  516. selectByLocation: 'Sélectionner par emplacement',
  517. selected: '{{count}} sélectionné(s)',
  518. actions: {
  519. stop: 'Arrêter',
  520. pause: 'Pause',
  521. resume: 'Reprendre',
  522. clearPlate: 'Vider le plateau',
  523. clearHMS: 'Effacer les notifications',
  524. },
  525. confirm: {
  526. stopTitle: 'Arrêter {{count}} impressions',
  527. stopMessage: 'Cela annulera les impressions actives sur {{count}} imprimante(s). Cette action est irréversible.',
  528. stopButton: 'Tout arrêter',
  529. pauseTitle: 'Mettre en pause {{count}} impressions',
  530. pauseMessage: 'Cela mettra en pause les impressions actives sur {{count}} imprimante(s).',
  531. pauseButton: 'Tout mettre en pause',
  532. clearPlateTitle: 'Vider {{count}} plateaux',
  533. clearPlateMessage: 'Cela videra le plateau sur {{count}} imprimante(s) et pourrait lancer les travaux en file d\'attente.',
  534. clearPlateButton: 'Tout vider',
  535. },
  536. success: '{{action}} terminé sur {{count}} imprimante(s)',
  537. partial: '{{succeeded}} réussi(s), {{failed}} échoué(s)',
  538. noneApplicable: 'Aucune imprimante sélectionnée n\'est dans le bon état pour cette action',
  539. selectByState: 'Sélectionner par état',
  540. },
  541. // Discovery
  542. discovery: {
  543. title: 'Découvrir les imprimantes',
  544. searching: 'Recherche...',
  545. scanning: 'Scan en cours...',
  546. scanProgress: 'Scan... {{scanned}}/{{total}}',
  547. foundPrinters: '{{count}} imprimante(s) trouvée(s)',
  548. noPrintersFound: 'Aucune imprimante trouvée',
  549. noPrintersFoundSubnet: 'Aucune imprimante dans ce sous-réseau.',
  550. noPrintersFoundNetwork: 'Aucune imprimante sur le réseau.',
  551. allConfigured: 'Toutes les imprimantes trouvées sont déjà configurées.',
  552. alreadyAdded: 'Déjà ajoutée',
  553. select: 'Sélectionner',
  554. manualEntry: 'Saisie manuelle',
  555. addFromCloud: 'Ajouter depuis le Cloud',
  556. subnetToScan: 'Sous-réseau à scanner',
  557. dockerNote: 'Docker détecté. Entrez le sous-réseau en notation CIDR. Nécessite network_mode: host.',
  558. scanSubnet: 'Scanner le sous-réseau',
  559. discoverNetwork: 'Découvrir sur le réseau',
  560. scanningSubnet: 'Scan du sous-réseau pour imprimantes Bambu...',
  561. scanningNetwork: 'Scan du réseau...',
  562. serialRequired: 'Série requis',
  563. unknown: 'Inconnu',
  564. failedToStart: 'Échec du démarrage de la découverte',
  565. customSubnetOption: 'Sous-réseau personnalisé...',
  566. customSubnetLabel: 'Sous-réseau personnalisé (CIDR)',
  567. customSubnetNote: 'Utilisez un sous-réseau personnalisé si votre imprimante se trouve sur un réseau différent de celui de ce serveur. Les ports FTP (990) et MQTT (8883) doivent être accessibles à travers la limite de routage.',
  568. },
  569. // AMS Drying
  570. drying: {
  571. start: 'Démarrer le séchage',
  572. stop: 'Arrêter le séchage',
  573. temperature: 'Température',
  574. duration: 'Durée',
  575. hours: 'heures',
  576. timeRemaining: '{{time}} restant',
  577. active: 'Séchage',
  578. targetSummary: '{{filament}} @ {{temp}}°C',
  579. notSupported: 'Séchage non pris en charge',
  580. powerRequired: 'Brancher l\'adaptateur secteur AMS pour activer le séchage',
  581. startingDrying: 'Démarrage du séchage...',
  582. toastCommandSent: 'Commande de séchage envoyée',
  583. toastStopped: 'Séchage arrêté',
  584. toastNotStarted: 'L\'imprimante a accepté la commande, mais l\'AMS n\'a pas démarré le séchage. Vérifiez que l\'adaptateur secteur de l\'AMS est branché et que l\'imprimante est inactive.',
  585. screenOnly: 'Sur cette imprimante, le séchage de l\'AMS ne peut être commandé que depuis l\'écran de l\'imprimante (limitation de Bambu)',
  586. stoppingDrying: 'Arrêt du séchage...',
  587. rotateTray: 'Tourner la bobine pendant le séchage',
  588. rotateUnavailableReason: 'Indisponible — un emplacement de cet AMS est chargé vers la tête d\'impression. La bobine est bloquée par le tube d\'alimentation et ne peut pas tourner. Rétractez d\'abord le filament.',
  589. },
  590. amsBackup: {
  591. titleOn: "AMS Filament Backup est ACTIVÉ. Cliquez pour désactiver.",
  592. titleOff: "AMS Filament Backup est DÉSACTIVÉ. Cliquez pour activer.",
  593. titleUnknown: "État de l'AMS Filament Backup indisponible sur cette imprimante.",
  594. toastEnabled: "AMS Filament Backup activé",
  595. toastDisabled: "AMS Filament Backup désactivé",
  596. modalTitle: 'AMS Filament Backup',
  597. modalHelp: "Lorsque l'emplacement actif s'épuise, l'imprimante passe aux emplacements ayant le même preset et la même couleur dans cet ordre.",
  598. modalNoSlots: "Aucun filament chargé.",
  599. modalNoPairs: "Aucune paire de secours — aucun emplacement ne partage à la fois preset et couleur.",
  600. extruderRightShort: "D",
  601. extruderLeftShort: "G",
  602. stateOn: "Activé",
  603. stateOff: "Désactivé",
  604. stateUnknown: "Non pris en charge par cette imprimante",
  605. },
  606. activeJobSlot: {
  607. title: 'Cet emplacement est le filament {{n}} dans l\'impression active',
  608. ariaLabel: 'Emplacement d\'impression active {{n}}',
  609. },
  610. expectedSlot: {
  611. title: 'L\'imprimante attend du filament dans cet emplacement',
  612. ariaLabel: 'Emplacement de filament attendu {{n}}',
  613. label: '{{ams}} · Emplacement {{slot}}',
  614. external: 'Bobine externe',
  615. },
  616. // Filaments section
  617. filaments: 'Filaments',
  618. // Camera
  619. openCameraOverlay: 'Ouvrir la caméra en superposition',
  620. openCameraWindow: 'Ouvrir la caméra dans une fenêtre',
  621. // Firmware
  622. firmwareUpdateAvailable: 'Mise à jour firmware : {{current}} → {{latest}}',
  623. firmwareUpToDate: 'Firmware {{version}} — À jour',
  624. firmwareUpdateButton: 'Mettre à jour',
  625. // Plate detection
  626. plateDetection: {
  627. noPermission: 'Pas d\'autorisation de modification',
  628. enabledClick: 'Vérification activée - Cliquez pour désactiver',
  629. disabledClick: 'Vérification désactivée - Cliquez pour activer',
  630. manageCalibration: 'Gérer la calibration de détection',
  631. calibrationRequired: 'Calibration requise',
  632. calibrationInstructions: 'Videz le plateau, puis cliquez sur Calibrer.',
  633. calibrationDescription: 'Capture une image de référence du plateau vide.',
  634. calibrationTip: 'Conseil : Stockez jusqu\'à 5 références. Le système utilise la meilleure correspondance.',
  635. plateEmpty: 'Le plateau semble vide',
  636. objectsDetected: 'Objets détectés sur le plateau',
  637. confidence: 'Confiance',
  638. difference: 'Différence',
  639. analysisPreview: 'Aperçu de l\'analyse :',
  640. analysisLegend: 'Cadre vert = zone, Rouge = différences',
  641. savedReferences: 'Références ({{count}}/{{max}})',
  642. deleteReference: 'Supprimer la référence',
  643. labelPlaceholder: 'Étiquette...',
  644. clickToEdit: '{{label}} - Modifier',
  645. clickToAddLabel: 'Ajouter une étiquette',
  646. },
  647. // Speed
  648. speed: {
  649. title: 'Vitesse d\'impression',
  650. silent: 'Silencieux (50%)',
  651. standard: 'Standard (100%)',
  652. sport: 'Sport (124%)',
  653. ludicrous: 'Ludicrous (166%)',
  654. },
  655. airduct: {
  656. title: 'Mode conduit d\'air',
  657. cooling: 'Refroidissement',
  658. heating: 'Chauffage',
  659. },
  660. noSdCard: 'Pas de SD',
  661. door: {
  662. open: 'Ouverte',
  663. closed: 'Fermée',
  664. },
  665. // Fans
  666. fans: {
  667. partCooling: 'Ventilateur pièce',
  668. auxiliary: 'Ventilateur auxiliaire',
  669. leftAuxiliary: 'Ventilateur auxiliaire gauche',
  670. exhaust: 'Extraction',
  671. chamber: 'Ventilateur chambre',
  672. },
  673. // HMS errors
  674. clickToViewHmsErrors: 'Cliquez pour voir les erreurs HMS',
  675. aiDetection: {
  676. safe: 'Sûr',
  677. warning: 'Avertissement',
  678. failure: 'Échec',
  679. idle: 'Inactif',
  680. tooltip: 'Détection d\'échec par IA : {{status}} (score {{score}}) - cliquez pour les détails',
  681. tooltipIdle: 'Détection d\'échec par IA activée - la surveillance démarre à la prochaine impression - cliquez pour les détails',
  682. modalTitle: 'Détection d\'échec par IA - {{name}}',
  683. currentStatus: 'Statut',
  684. score: 'Score',
  685. framesAnalyzed: 'Images analysées',
  686. idleHint: 'Aucune impression n\'est surveillée actuellement. La surveillance démarre automatiquement à la prochaine impression.',
  687. lastError: 'Dernière erreur',
  688. openSettings: 'Ouvrir les paramètres',
  689. },
  690. estimatedCompletion: 'Fin estimée',
  691. plateNumber: 'Plaque {{number}}',
  692. slotOptions: 'Options du slot',
  693. // AMS hover popup
  694. amsPopup: {
  695. friendlyName: 'Nom AMS',
  696. friendlyNamePlaceholder: 'ex. Nom convivial AMS',
  697. serialNumber: 'Numéro de série',
  698. firmwareVersion: 'Micrologiciel',
  699. save: 'Enregistrer',
  700. clear: 'Effacer',
  701. noEditPermission: 'Vous n\'avez pas la permission de renommer les unités AMS',
  702. },
  703. // Firmware modal
  704. firmwareModal: {
  705. title: 'Mise à jour Firmware',
  706. titleUpToDate: 'Infos Firmware',
  707. currentVersion: 'Actuelle :',
  708. latestVersion: 'Dernière :',
  709. releaseNotes: 'Notes de version',
  710. checkingPrereqs: 'Vérification des prérequis...',
  711. sdCardReady: 'Carte SD prête. Cliquez pour téléverser.',
  712. uploadedSuccess: 'Firmware téléversé !',
  713. applyInstructions: 'Pour appliquer sur l\'imprimante :',
  714. step1: 'Sur l\'écran, allez dans Paramètres',
  715. step2: 'Allez dans Firmware',
  716. step3: 'Sélectionnez "Mettre à jour depuis carte SD"',
  717. step4: 'Prévoyez 10-20 minutes',
  718. done: 'Terminé',
  719. starting: 'Démarrage...',
  720. uploadFirmware: 'Téléverser le Firmware',
  721. uploadFailed: 'Échec du téléversement : {{error}}',
  722. uploadedToast: 'Firmware téléversé ! Lancez la mise à jour sur l\'écran.',
  723. availableVersions: 'Versions disponibles',
  724. usable: 'Utilisable',
  725. unavailable: 'Indisponible',
  726. installed: 'Installé',
  727. newerBadge: 'plus récent',
  728. olderBadge: 'plus ancien',
  729. currentBadge: 'actuel',
  730. },
  731. accessCodePlaceholder: 'Laissez vide pour garder l\'actuel',
  732. // ROI editor
  733. roi: {
  734. title: 'Zone de détection (ROI)',
  735. xStart: 'Début X',
  736. yStart: 'Début Y',
  737. width: 'Largeur',
  738. height: 'Hauteur',
  739. instruction: 'Ajustez le cadre vert pour cibler le plateau.',
  740. },
  741. developerModeWarning: 'Le mode développeur LAN n\'est pas activé sur : {{names}}. Certaines fonctionnalités peuvent ne pas fonctionner.',
  742. howToEnable: 'Comment activer',
  743. incompatibleFile: 'Ce fichier a été tranché pour {{slicedFor}}, mais cette imprimante est une {{printerModel}}',
  744. dropNotPrintable: 'Seuls les fichiers .gcode et .gcode.3mf peuvent être imprimés',
  745. dropToPrint: 'Déposer pour imprimer',
  746. cannotPrint: 'Imprimante occupée',
  747. },
  748. // Archives page
  749. archives: {
  750. title: 'Archives d\'impression',
  751. no3mfBanner: {
  752. title: 'Certaines impressions récentes n\'ont pas pu être archivées avec leur miniature',
  753. body: 'Le slicer n\'a pas laissé le fichier .gcode.3mf sur la carte SD de l\'imprimante, donc Bambuddy n\'a pas pu récupérer la miniature ni les métadonnées slicer. C\'est généralement parce que « Stocker les fichiers envoyés sur stockage externe » est désactivé dans le slicer (onglet Périphérique de Bambu Studio / OrcaSlicer).',
  754. docsLink: 'Voir l\'étape 4 de l\'installation',
  755. dismissLabel: 'Ignorer ce message',
  756. },
  757. searchPlaceholder: 'Chercher dans les archives...',
  758. filterByPrinter: 'Par imprimante',
  759. filterByStatus: 'Par statut',
  760. sortBy: 'Trier par',
  761. sortNewest: 'Plus récent',
  762. sortOldest: 'Plus ancien',
  763. sortName: 'Nom',
  764. sortDuration: 'Durée',
  765. sortLargest: 'Plus volumineux',
  766. sortSmallest: 'Plus léger',
  767. sortSize: 'Taille',
  768. noArchives: 'Aucune archive trouvée',
  769. noArchivesSearch: 'Aucune archive ne correspond',
  770. originalPrintNotVisible: 'Impression d\'origine non visible - essayez d\'effacer les filtres',
  771. noArchivesYet: 'Pas encore d\'archive',
  772. prints: 'impressions',
  773. pagination: {
  774. showing: 'Affichage',
  775. to: 'à',
  776. of: 'sur',
  777. show: 'Afficher',
  778. page: 'Page',
  779. all: 'Tout',
  780. },
  781. loadingArchives: 'Chargement...',
  782. releaseToUpload: 'Relâcher pour téléverser',
  783. showAll: 'Tout afficher',
  784. showFavoritesOnly: 'Favoris uniquement',
  785. gridView: 'Grille',
  786. listView: 'Liste',
  787. calendarView: 'Calendrier',
  788. logView: 'Journal d\'impression',
  789. manageTags: 'Gérer les tags',
  790. showFailedPrints: 'Afficher les échecs',
  791. hideFailedPrints: 'Masquer les échecs',
  792. hideDuplicates: 'Masquer les doublons',
  793. viewOriginalPrint: 'Cliquez pour afficher l\'impression originale (#{{id}})',
  794. printTime: 'Temps d\'impression',
  795. filamentUsed: 'Filament utilisé',
  796. cost: 'Coût',
  797. preview: 'Aperçu',
  798. deleteArchive: 'Supprimer l\'archive',
  799. deleteConfirm: 'Supprimer cette archive ?',
  800. favorite: 'Favori',
  801. unfavorite: 'Retirer des favoris',
  802. viewDetails: 'Détails',
  803. status: {
  804. completed: 'Réussi',
  805. failed: 'Échoué',
  806. stopped: 'Arrêté',
  807. },
  808. toast: {
  809. source3mfAttached: 'Source 3MF attachée : {{filename}}',
  810. failedUploadSource3mf: 'Échec téléversement 3MF',
  811. source3mfRemoved: 'Source 3MF retirée',
  812. failedRemoveSource3mf: 'Échec retrait 3MF',
  813. f3dAttached: 'F3D attaché : {{filename}}',
  814. failedUploadF3d: 'Échec téléversement F3D',
  815. f3dRemoved: 'F3D retiré',
  816. failedRemoveF3d: 'Échec retrait F3D',
  817. timelapseAttached: 'Timelapse attaché : {{filename}}',
  818. timelapseAlreadyAttached: 'Timelapse déjà présent',
  819. noMatchingTimelapse: 'Pas de timelapse correspondant',
  820. failedScanTimelapse: 'Échec scan timelapse',
  821. failedAttachTimelapse: 'Échec attache timelapse',
  822. timelapseRemoved: 'Timelapse supprimé',
  823. failedRemoveTimelapse: 'Échec de la suppression du timelapse',
  824. timelapseUploaded: 'Timelapse importé : {{filename}}',
  825. failedUploadTimelapse: 'Échec de l\'importation du timelapse',
  826. archiveDeleted: 'Archive supprimée',
  827. failedDeleteArchive: 'Échec suppression',
  828. addedToFavorites: 'Ajouté aux favoris',
  829. removedFromFavorites: 'Retiré des favoris',
  830. projectUpdated: 'Projet mis à jour',
  831. failedUpdateProject: 'Échec mise à jour projet',
  832. linkCopied: 'Lien copié',
  833. failedCopyLink: 'Échec copie lien',
  834. photoDeleted: 'Photo supprimée',
  835. failedDeletePhoto: 'Échec suppression photo',
  836. failedDeleteArchives: 'Échec suppression archives',
  837. failedUpdateFavorites: 'Échec mise à jour favoris',
  838. exportDownloaded: 'Export téléchargé',
  839. exportFailed: 'Échec export',
  840. },
  841. menu: {
  842. print: 'Imprimer',
  843. openInBambuStudio: 'Ouvrir dans le Slicer',
  844. slice: 'Découper',
  845. externalLink: 'Lien externe',
  846. viewOnMakerWorld: 'Voir sur MakerWorld',
  847. preview3d: 'Aperçu 3D',
  848. viewTimelapse: 'Voir le Timelapse',
  849. scanForTimelapse: 'Scanner pour Timelapse',
  850. uploadTimelapse: 'Importer un timelapse',
  851. removeTimelapse: 'Supprimer le timelapse',
  852. downloadSource3mf: 'Télécharger Source 3MF',
  853. uploadSource3mf: 'Téléverser Source 3MF',
  854. replaceSource3mf: 'Remplacer Source 3MF',
  855. removeSource3mf: 'Retirer Source 3MF',
  856. uploadF3d: 'Téléverser F3D',
  857. replaceF3d: 'Remplacer F3D',
  858. downloadF3d: 'Télécharger F3D',
  859. removeF3d: 'Retirer F3D',
  860. download: 'Télécharger',
  861. copyDownloadLink: 'Copier lien de téléchargement',
  862. qrCode: 'Code QR',
  863. viewPhotos: 'Voir les photos',
  864. viewPhotosCount: 'Voir les photos ({{count}})',
  865. projectPage: 'Page du Projet',
  866. addToFavorites: 'Ajouter aux favoris',
  867. removeFromFavorites: 'Retirer des favoris',
  868. edit: 'Modifier',
  869. printLog: 'Journal d\'impression',
  870. goToProject: 'Aller au Projet : {{name}}',
  871. addToProject: 'Ajouter au Projet',
  872. removeFromProject: 'Retirer du Projet',
  873. loading: 'Chargement...',
  874. noProjectsAvailable: 'Aucun projet disponible',
  875. searchProjects: 'Rechercher des projets…',
  876. select: 'Sélectionner',
  877. deselect: 'Désélectionner',
  878. delete: 'Supprimer',
  879. },
  880. permission: {
  881. noReprint: 'Pas d\'autorisation de réimpression',
  882. noAddToQueue: 'Pas d\'autorisation pour la file',
  883. noUpdateArchives: 'Pas d\'autorisation de mise à jour',
  884. noUploadFiles: 'Pas d\'autorisation de téléversement',
  885. noDownload: 'Pas d\'autorisation de téléchargement',
  886. noCopyLink: 'Pas d\'autorisation de copie lien',
  887. noDelete: 'Pas d\'autorisation de suppression',
  888. noEdit: 'Pas d\'autorisation de modification',
  889. noCreate: 'Pas d\'autorisation de création',
  890. },
  891. platePicker: {
  892. title: 'Choisir une plaque à prévisualiser',
  893. hint: 'Cette archive contient plusieurs plaques. Sélectionnez-en une pour l\'ouvrir dans la visionneuse GCode.',
  894. plateLabel: 'Plaque {{index}}',
  895. objectCount: '{{count}} objet',
  896. objectCount_plural: '{{count}} objets',
  897. noGcode: 'Cette archive ne contient pas de G-code généré à prévisualiser. Ouvrez-la d\'abord dans Bambu Studio pour la trancher.',
  898. },
  899. card: {
  900. previousPlate: 'Plateau précédent',
  901. nextPlate: 'Plateau suivant',
  902. plateNumber: 'Plateau {{index}}',
  903. moreOptions: 'Clic droit pour plus d\'options',
  904. addToFavorites: 'Ajouter aux favoris',
  905. removeFromFavorites: 'Retirer des favoris',
  906. cancelled: 'annulé',
  907. failed: 'échoué',
  908. duplicate: 'doublon',
  909. duplicateTitle: 'Ce modèle a déjà été imprimé',
  910. openSource3mf: 'Ouvrir 3MF dans Bambu Studio (clic droit pour plus)',
  911. downloadF3d: 'Télécharger fichier Fusion 360',
  912. viewTimelapse: 'Voir timelapse',
  913. viewPhoto: 'Voir 1 photo',
  914. viewPhotos: 'Voir {{count}} photos',
  915. openFolder: 'Ouvrir le dossier : {{name}}',
  916. slicedFile: 'Fichier découpé - prêt',
  917. sourceFile: 'Fichier source uniquement - pas de mapping AMS',
  918. gcode: 'GCODE',
  919. source: 'SOURCE',
  920. project: 'Projet : {{name}}',
  921. runsBadge: '{{count}} impressions',
  922. runsBadgeTitle: '{{count}} impressions au total — {{successful}} réussies, {{failed}} échouées. Cliquez pour voir le journal complet.',
  923. estimated: 'Estimé : {{time}}',
  924. actual: 'Réel : {{time}}',
  925. accuracy: 'Précision : {{percent}}%',
  926. filament: '{{weight}} g',
  927. layer: '{{count}} couche',
  928. layers: '{{count}} couches',
  929. object: '{{count}} objet',
  930. objects: '{{count}} objets',
  931. slicedFor: 'Découpé pour {{model}}',
  932. uploadedBy: 'Téléversé par',
  933. noPermissionReprint: 'Pas d\'autorisation de réimpression',
  934. noFileForReprint: 'Aucun fichier 3MF disponible — le fichier n\'a pas pu être téléchargé depuis l\'imprimante lors de l\'enregistrement',
  935. noPermissionEdit: 'Pas d\'autorisation de modification',
  936. noPermissionDelete: 'Pas d\'autorisation de suppression',
  937. openInBambuStudio: 'Ouvrir dans le Slicer',
  938. openInBambuStudioToSlice: 'Ouvrir dans le Slicer pour découper',
  939. slice: 'Découper',
  940. externalLink: 'Lien externe',
  941. makerWorld: 'MakerWorld : {{designer}}',
  942. viewProject: 'Voir projet',
  943. noExternalLink: 'Aucun lien externe',
  944. preview3d: 'Aperçu 3D',
  945. download: 'Télécharger',
  946. edit: 'Modifier',
  947. delete: 'Supprimer',
  948. },
  949. runLog: {
  950. title: 'Journal d\'impression',
  951. modalTitle: 'Journal d\'impression — {{name}}',
  952. modalTitleFallback: 'cette archive',
  953. empty: 'Aucun événement d\'impression enregistré pour cette archive.',
  954. col: {
  955. date: 'Date',
  956. status: 'Statut',
  957. duration: 'Durée',
  958. filament: 'Filament',
  959. cost: 'Coût',
  960. },
  961. status: {
  962. completed: 'Terminé',
  963. failed: 'Échoué',
  964. cancelled: 'Annulé',
  965. stopped: 'Arrêté',
  966. skipped: 'Ignoré',
  967. printing: 'Impression en cours',
  968. },
  969. },
  970. modal: {
  971. deleteArchive: 'Supprimer l\'archive',
  972. deleteConfirm: 'Supprimer "{{name}}" ? Cette action est irréversible.',
  973. deleteButton: 'Supprimer',
  974. deletePurgeStats: 'Retirer également cette impression des Quick Stats (filament, temps, coût, énergie)',
  975. deleteQueueItemsWarning: '{{count}} élément(s) de file d\'attente lié(s) à cette archive seront également supprimé(s).',
  976. deleteBlockedByPrinting: 'Suppression impossible — {{count}} élément(s) de file d\'attente en cours d\'impression. Arrêtez l\'impression d\'abord, puis réessayez.',
  977. removeSource3mf: 'Retirer Source 3MF',
  978. removeSource3mfConfirm: 'Retirer le fichier 3MF de "{{name}}" ?',
  979. removeButton: 'Retirer',
  980. removeF3d: 'Retirer F3D',
  981. removeF3dConfirm: 'Retirer le fichier Fusion 360 de "{{name}}" ?',
  982. removeTimelapse: 'Supprimer le timelapse',
  983. removeTimelapseConfirm: 'Êtes-vous sûr de vouloir supprimer la vidéo timelapse de "{{name}}" ?',
  984. timelapse: '{{name}} – Timelapse',
  985. selectTimelapse: 'Choisir un Timelapse',
  986. selectTimelapseDesc: 'Sélectionnez manuellement le timelapse :',
  987. deleteArchives: 'Supprimer les archives',
  988. deleteArchivesConfirm: 'Supprimer {{count}} archive(s) ?',
  989. deleteCount: 'Supprimer {{count}}',
  990. },
  991. page: {
  992. title: 'Archives',
  993. printsCount: '{{filtered}} sur {{total}} impressions',
  994. dropFilesHere: 'Déposez les fichiers .3mf ici',
  995. releaseToUpload: 'Relâcher pour téléverser',
  996. only3mfSupported: 'Seuls les fichiers .3mf sont supportés',
  997. close: 'Fermer',
  998. selected: '{{count}} sélectionnés',
  999. selectAll: 'Tout sélectionner',
  1000. tags: 'Étiquettes',
  1001. project: 'Projet',
  1002. favorite: 'Favori',
  1003. delete: 'Supprimer',
  1004. toggledFavorites: 'Favoris mis à jour pour {{count}} archive(s)',
  1005. failedUpdateFavorites: 'Échec mise à jour favoris',
  1006. archivesDeleted: '{{count}} archive(s) supprimée(s)',
  1007. failedDeleteArchives: 'Échec suppression',
  1008. photoDeleted: 'Photo supprimée',
  1009. failedDeletePhoto: 'Échec suppression photo',
  1010. },
  1011. list: {
  1012. name: 'Nom',
  1013. printer: 'Imprimante',
  1014. date: 'Date',
  1015. size: 'Taille',
  1016. actions: 'Actions',
  1017. hasTimelapse: 'A un timelapse',
  1018. },
  1019. log: {
  1020. date: 'Date',
  1021. printName: 'Nom de l\'impression',
  1022. printer: 'Imprimante',
  1023. user: 'Utilisateur',
  1024. status: 'Statut',
  1025. duration: 'Durée',
  1026. filament: 'Filament',
  1027. allPrinters: 'Toutes les imprimantes',
  1028. allUsers: 'Tous les utilisateurs',
  1029. allStatuses: 'Tous les statuts',
  1030. cancelled: 'Annulé',
  1031. skipped: 'Ignoré',
  1032. dateFrom: 'Du',
  1033. dateTo: 'Au',
  1034. noEntries: 'Aucune entrée de journal trouvée',
  1035. showing: '{{count}} sur {{total}} entrées',
  1036. rowsPerPage: 'Lignes',
  1037. page: 'Page',
  1038. prev: 'Préc.',
  1039. next: 'Suiv.',
  1040. clearLog: 'Effacer le journal',
  1041. clearLogTitle: 'Effacer le journal d\'impression',
  1042. clearLogConfirm: 'Toutes les entrées du journal d\'impression seront supprimées définitivement. Les archives et les éléments de file d\'attente ne sont pas affectés. Cette action est irréversible. Êtes-vous sûr ?',
  1043. clearLogButton: 'Tout effacer',
  1044. cleared: '{{count}} entrées de journal effacées',
  1045. clearFailed: 'Échec de l\'effacement du journal d\'impression',
  1046. deleteEntryTitle: 'Supprimer l\'entrée du journal d\'impression',
  1047. deleteEntryConfirm: 'Cette entrée sera retirée du journal et ses contributions en filament, temps et coût disparaîtront des statistiques rapides. L\'archive correspondante (le cas échéant) n\'est pas affectée. Cette action est irréversible.',
  1048. entryDeleted: 'Entrée du journal d\'impression supprimée',
  1049. entryDeleteFailed: 'Échec de la suppression de l\'entrée du journal d\'impression',
  1050. editEntryTitle: 'Modifier l\'entrée du journal d\'impression',
  1051. editEntryDescription: 'Classez cette impression. Le widget Analyse des échecs regroupe par ces valeurs, ce qui répercute immédiatement la mise à jour dans les statistiques.',
  1052. entryUpdated: 'Entrée du journal mise à jour',
  1053. entryUpdateFailed: 'Échec de la mise à jour de l\'entrée du journal',
  1054. statuses: {
  1055. completed: 'Terminée',
  1056. failed: 'Échouée',
  1057. stopped: 'Arrêtée',
  1058. cancelled: 'Annulée',
  1059. skipped: 'Ignorée',
  1060. },
  1061. },
  1062. },
  1063. // Sticky upload-progress toast (#1625 follow-up)
  1064. dispatchToast: {
  1065. untitled: 'Tâche d\'impression',
  1066. startingPrints: 'Démarrage des impressions',
  1067. progressSummary: '{{complete}}/{{total}} terminées • En cours : {{processing}}',
  1068. expandDetails: 'Afficher les détails de l\'envoi',
  1069. collapseDetails: 'Masquer les détails de l\'envoi',
  1070. awaitingPrinter: 'En attente de l\'imprimante…',
  1071. status: {
  1072. processing: 'En cours',
  1073. completed: 'Terminée',
  1074. failed: 'Échouée',
  1075. },
  1076. failed: {
  1077. generic: 'Échec de l\'envoi',
  1078. upload_failed: 'Échec du téléversement vers l\'imprimante',
  1079. start_command_failed: 'L\'imprimante a rejeté la commande de démarrage',
  1080. },
  1081. dismiss: 'Fermer',
  1082. },
  1083. // Pipeline Runs dashboard (#1425 PR C).
  1084. pipelineRuns: {
  1085. title: 'Exécutions de pipeline',
  1086. loading: 'Chargement…',
  1087. empty: 'Aucune exécution de pipeline pour le moment.',
  1088. filter: {
  1089. pipeline: 'Pipeline',
  1090. status: 'Statut',
  1091. target: 'Cible',
  1092. all: 'Toutes',
  1093. allPipelines: 'Tous les pipelines',
  1094. allStatus: 'Tous les statuts',
  1095. allTargets: 'Toutes les cibles',
  1096. clear: 'Effacer les filtres',
  1097. noMatches: 'Aucune exécution ne correspond aux filtres actuels.',
  1098. },
  1099. totalCount_one: '{{n}} exécution',
  1100. totalCount_other: '{{n}} exécutions',
  1101. copies: '{{n}} copies',
  1102. failedCount: '{{n}} échouées',
  1103. copyN: 'Copie {{n}}',
  1104. retryFailed: 'Réessayer les échouées',
  1105. retryOf: 'réessai de #{{n}}',
  1106. pagination: '{{start}}–{{end}} sur {{total}}',
  1107. toast: {
  1108. cancelled: 'Exécution annulée',
  1109. cancelFailed: 'Annulation échouée',
  1110. retryStarted: 'Réessai démarré',
  1111. retryFailed: 'Réessai échoué',
  1112. cleared: '{{n}} exécutions effacées',
  1113. clearFailed: 'Échec de l\'effacement',
  1114. },
  1115. clearLog: 'Effacer le journal',
  1116. clearConfirmTitle: 'Effacer le journal ?',
  1117. clearConfirmBody: 'Supprimer toutes les exécutions de pipeline terminées, échouées, annulées et en échec partiel ? Les exécutions en cours sont conservées. Ceci ne peut pas être annulé.',
  1118. clearConfirmAction: 'Effacer',
  1119. jobStatus: {
  1120. pending: 'en attente',
  1121. awaiting_printer: 'attente imprimante',
  1122. queued: 'en file',
  1123. printing: 'impression',
  1124. completed: 'terminée',
  1125. failed: 'échouée',
  1126. cancelled: 'annulée',
  1127. },
  1128. cancelledByUser: 'Annulé par l\'utilisateur',
  1129. },
  1130. // Queue page
  1131. queue: {
  1132. filamentShort: {
  1133. rowBadge: 'Filament insuffisant pour la bobine assignee',
  1134. rowTooltip: "Le planificateur a signale cet element. Cliquez sur Lecture pour voir le deficit par emplacement et decider de lancer quand meme l'impression.",
  1135. confirmTitle: 'Filament insuffisant',
  1136. confirmIntro: 'La bobine assignee ne peut pas couvrir au moins un emplacement. Imprimer quand meme ?',
  1137. lineItem: 'Emplacement {{slot}} : besoin de {{required}} g, {{remaining}} g restants',
  1138. unknown: 'inconnu',
  1139. printAnyway: 'Imprimer quand meme',
  1140. },
  1141. title: 'File d\'attente',
  1142. subtitle: 'Gérez vos travaux d\'impression',
  1143. // Print modal
  1144. editQueueItem: 'Modifier l\'élément',
  1145. selectAllPlates: 'Sélectionner les {{count}} plaques',
  1146. deselectAll: 'Tout désélectionner',
  1147. printQueued: 'Impression ajoutée à la file',
  1148. printQueuedWillStartWhenIdle: 'Démarrera lorsque l\'imprimante sera inactive',
  1149. itemsQueued: '{{count}} éléments ajoutés à la file',
  1150. sending: 'Envoi...',
  1151. sendingProgress: 'Envoi {{current}}/{{total}}...',
  1152. adding: 'Ajout...',
  1153. addingProgress: 'Ajout {{current}}/{{total}}...',
  1154. savingProgress: 'Enregistrement {{current}}/{{total}}...',
  1155. clearQueue: 'Vider la file',
  1156. clearHistory: 'Effacer l\'historique',
  1157. emptyQueue: 'La file est vide',
  1158. position: 'Position',
  1159. scheduledTime: 'Heure prévue',
  1160. moveUp: 'Monter',
  1161. moveDown: 'Descendre',
  1162. startNow: 'Démarrer maintenant',
  1163. printingInProgress: 'Impression en cours...',
  1164. viewArchive: 'Voir l\'archive',
  1165. viewInFileManager: 'Voir dans le gestionnaire',
  1166. itemCount: '{{count}} élément',
  1167. itemCount_plural: '{{count}} éléments',
  1168. dragToReorder: 'Glisser pour réordonner (ASAP uniquement)',
  1169. reorderHint: 'La position n\'affecte que les éléments ASAP.',
  1170. sjf: {
  1171. label: 'SJF',
  1172. tooltip: 'Travail le plus court en premier — le planificateur priorise les impressions plus courtes',
  1173. },
  1174. addedBy: 'Ajouté par {{name}}',
  1175. nextInQueue: 'Prochain en file',
  1176. clearPlateSuccess: 'Plateau vidé — prêt pour l\'impression suivante',
  1177. plateNumber: 'Plateau {{index}}',
  1178. // Batch / quantity
  1179. quantity: 'Quantité',
  1180. quantityHint: 'Crée {{count}} éléments de file d\'attente',
  1181. activeBatches: 'Lots actifs',
  1182. batchProgress: '{{completed}} sur {{total}} terminés',
  1183. cancelBatch: 'Annuler les restants',
  1184. batchCancelled: 'Éléments restants du lot annulés',
  1185. cancelBatchConfirmTitle: 'Annuler le lot',
  1186. cancelBatchConfirmMessage: 'Annuler tous les éléments en attente restants dans ce lot ?',
  1187. batch: {
  1188. defaultName: 'Lot',
  1189. label: '{{count}} élément',
  1190. label_plural: '{{count}} éléments',
  1191. pendingCount: '{{count}} en attente',
  1192. pendingCount_plural: '{{count}} en attente',
  1193. expand: 'Développer le lot',
  1194. collapse: 'Réduire le lot',
  1195. groupAsBatch: 'Grouper en lot…',
  1196. groupAsBatchDescription: 'Combiner les {{count}} éléments sélectionnés en un seul lot repliable.',
  1197. nameLabel: 'Nom du lot',
  1198. namePlaceholder: 'p. ex. Cadeaux du vendredi',
  1199. create: 'Créer le lot',
  1200. ungroup: 'Dégrouper',
  1201. ungroupConfirmTitle: 'Dégrouper le lot ?',
  1202. ungroupConfirmMessage: 'Les éléments resteront dans la file mais ne seront plus groupés.',
  1203. dragGroup: 'Faire glisser le groupe',
  1204. },
  1205. tabs: {
  1206. queue: 'File',
  1207. history: 'Historique',
  1208. timeline: 'Chronologie',
  1209. pipelines: 'Exécutions',
  1210. },
  1211. layout: {
  1212. flatList: 'Liste',
  1213. byPrinter: 'Par imprimante',
  1214. groupByPrinter: 'Grouper par imprimante',
  1215. },
  1216. history: {
  1217. emptyTitle: 'Aucun historique',
  1218. emptyDescription: 'Les impressions terminées, annulées et échouées apparaîtront ici.',
  1219. showMore: 'Afficher plus',
  1220. showingCount: 'Affichage de {{shown}} sur {{total}}',
  1221. },
  1222. dragGhost: {
  1223. multiCount: '{{count}} éléments',
  1224. batch: '{{name}} ({{count}} copie)',
  1225. batch_plural: '{{name}} ({{count}} copies)',
  1226. },
  1227. // Sections
  1228. sections: {
  1229. currentlyPrinting: 'En cours',
  1230. queued: 'En attente',
  1231. history: 'Historique',
  1232. },
  1233. // Status
  1234. status: {
  1235. pending: 'En attente',
  1236. waiting: 'En attente',
  1237. printing: 'Impression',
  1238. paused: 'En pause',
  1239. completed: 'Terminé',
  1240. failed: 'Échoué',
  1241. skipped: 'Sauté',
  1242. cancelled: 'Annulé',
  1243. },
  1244. // Summary cards
  1245. summary: {
  1246. printing: 'Impressions',
  1247. queued: 'En attente',
  1248. totalTime: 'Temps total estimé',
  1249. totalWeight: 'Poids total estimé',
  1250. history: 'Historique',
  1251. },
  1252. // Filters
  1253. filter: {
  1254. allPrinters: 'Toutes les imprimantes',
  1255. unassigned: 'Non assigné',
  1256. allStatus: 'Tous les statuts',
  1257. allLocations: 'Tous les emplacements',
  1258. any: 'Tout',
  1259. },
  1260. // Sort
  1261. sort: {
  1262. byPosition: 'Par position',
  1263. byName: 'Par nom',
  1264. byPrinter: 'Par imprimante',
  1265. bySchedule: 'Par planification',
  1266. byDate: 'Par date',
  1267. ascendingOldest: 'Croissant (plus vieux)',
  1268. descendingNewest: 'Décroissant (plus récent)',
  1269. },
  1270. // Badges
  1271. badges: {
  1272. staged: 'Préparé',
  1273. requiresPrevious: 'Nécessite succès précédent',
  1274. autoPowerOff: 'Extinction auto',
  1275. gcodeInjection: 'G-code',
  1276. },
  1277. // Empty state
  1278. empty: {
  1279. title: 'Aucune impression prévue',
  1280. description: 'Planifiez depuis les Archives ou glissez des fichiers ici.',
  1281. },
  1282. // Time
  1283. time: {
  1284. asap: 'Dès que possible',
  1285. overdue: 'En retard',
  1286. now: 'Maintenant',
  1287. lessThanMinute: 'Dans moins d\'une minute',
  1288. inMinutes: 'Dans {{count}} min',
  1289. inHours: 'Dans {{count}} heures',
  1290. },
  1291. // Actions
  1292. actions: {
  1293. startPrint: 'Démarrer',
  1294. stopPrint: 'Arrêter',
  1295. requeue: 'Remettre en file',
  1296. },
  1297. // Bulk edit
  1298. bulkEdit: {
  1299. title: 'Modifier {{count}} élément',
  1300. title_plural: 'Modifier {{count}} éléments',
  1301. description: 'Seuls les changements seront appliqués.',
  1302. printer: 'Imprimante',
  1303. noChange: '— Aucun changement —',
  1304. queueOptions: 'Options de file',
  1305. staged: 'Préparé (manuel)',
  1306. autoPowerOff: 'Extinction auto après',
  1307. requirePrevious: 'Requiert succès précédent',
  1308. printOptions: 'Options d\'impression',
  1309. bedLevelling: 'Nivellement plateau',
  1310. flowCalibration: 'Calibration débit',
  1311. vibrationCalibration: 'Vibration (Input Shaper)',
  1312. layerInspection: 'Inspection 1ère couche',
  1313. timelapse: 'Time-lapse',
  1314. useAms: 'Utiliser AMS',
  1315. nozzleOffsetCali: 'Calibration du décalage des buses',
  1316. applyChanges: 'Appliquer',
  1317. selectAll: 'Tout sélectionner',
  1318. deselectAll: 'Tout désélectionner',
  1319. selected: '{{count}} sélectionnés',
  1320. editSelected: 'Modifier la sélection',
  1321. cancelSelected: 'Annuler la sélection',
  1322. },
  1323. // Confirmations
  1324. confirm: {
  1325. cancelTitle: 'Annuler l\'impression prévue',
  1326. cancelMessage: 'Annuler "{{name}}" ?',
  1327. stopTitle: 'Arrêter l\'impression',
  1328. stopMessage: 'Arrêter "{{name}}" sur l\'imprimante ?',
  1329. removeTitle: 'Retirer de l\'historique',
  1330. removeMessage: 'Retirer "{{name}}" de l\'historique ?',
  1331. clearHistoryTitle: 'Effacer l\'historique',
  1332. clearHistoryMessage: 'Retirer les {{count}} éléments ?',
  1333. cancelButton: 'Annuler l\'impression',
  1334. stopButton: 'Arrêter l\'impression',
  1335. thisPrint: 'cette impression',
  1336. thisItem: 'cet élément',
  1337. },
  1338. // Toast messages
  1339. toast: {
  1340. cancelled: 'Élément annulé',
  1341. cancelFailed: 'Échec annulation',
  1342. removed: 'Élément retiré',
  1343. removeFailed: 'Échec retrait',
  1344. stopped: 'Impression arrêtée',
  1345. stopFailed: 'Échec arrêt',
  1346. released: 'Libéré dans la file',
  1347. startFailed: 'Échec démarrage',
  1348. reorderFailed: 'Échec réorganisation',
  1349. historyCleared: '{{count}} éléments effacés',
  1350. clearHistoryFailed: 'Échec effacement',
  1351. updateFailed: 'Échec mise à jour',
  1352. bulkCancelled: '{{count}} éléments annulés',
  1353. bulkCancelFailed: 'Échec annulation',
  1354. batchCreated: 'Lot « {{name}} » créé',
  1355. batchCreateFailed: 'Échec de la création du lot',
  1356. batchUngrouped: '{{count}} élément(s) dégroupé(s)',
  1357. batchUngroupFailed: 'Échec du dégroupement du lot',
  1358. resumedAfterFailure: 'File reprise — {{restored}} tâche(s) restaurée(s) en attente',
  1359. resumeAfterFailureFailed: 'Échec de la reprise de la file',
  1360. },
  1361. resumeAfterFailure: {
  1362. banner: '{{printer}} est bloquée par un échec d\'impression précédent — {{count}} tâche(s) ignorée(s)',
  1363. bannerHint: 'Résolvez le problème de l\'imprimante, puis reprenez la file pour restaurer les tâches ignorées et lever le blocage.',
  1364. button: 'Reprendre après échec',
  1365. confirmTitle: 'Reprendre la file après l\'échec ?',
  1366. confirmMessage: 'Restaurer {{count}} tâche(s) ignorée(s) sur {{printer}} en attente et lever le blocage de l\'impression précédente. Assurez-vous que l\'imprimante est prête avant de continuer.',
  1367. },
  1368. // Timeline view
  1369. timeline: {
  1370. listView: 'Liste',
  1371. timelineView: 'Chronologie',
  1372. unassigned: 'Non attribué',
  1373. noData: 'Aucune impression planifiée pour ce jour',
  1374. nothingCommitted: 'Aucun horaire confirmé dans cette fenêtre. Les éléments en attente d’action, les éléments bloqués et les jobs ASAP sur des imprimantes inactives ne sont pas affichés — définissez une heure planifiée ou libérez un élément en attente pour qu’il apparaisse ici.',
  1375. allDoneBy: 'Toutes les impressions terminées vers {{time}}',
  1376. staged: 'En attente',
  1377. filterAll: 'Tout afficher',
  1378. filterPrinting: 'En cours',
  1379. filterQueued: 'En file',
  1380. time: {
  1381. anyMoment: 'imminent',
  1382. minutesLeft: '{{minutes}}m restantes',
  1383. hoursLeft: '{{hours}}h restantes',
  1384. hoursMinutesLeft: '{{hours}}h {{minutes}}m restantes',
  1385. },
  1386. day: {
  1387. previous: 'Jour précédent',
  1388. next: 'Jour suivant',
  1389. today: 'Aujourd\'hui',
  1390. },
  1391. window: {
  1392. back12h: 'Reculer de 12 heures',
  1393. forward12h: 'Avancer de 12 heures',
  1394. now: 'Maintenant',
  1395. },
  1396. printerColumnHeader: 'Imprimante',
  1397. },
  1398. // Permissions
  1399. permissions: {
  1400. noStopPrint: 'Pas d\'autorisation d\'arrêt',
  1401. noStartPrint: 'Pas d\'autorisation de démarrage',
  1402. noEdit: 'Pas d\'autorisation de modification',
  1403. noCancel: 'Pas d\'autorisation d\'annulation',
  1404. noRequeue: 'Pas d\'autorisation de remise en file',
  1405. noRemove: 'Pas d\'autorisation de retrait',
  1406. noClearHistory: 'Pas d\'autorisation historique',
  1407. noEditItems: 'Pas d\'autorisation modification groupée',
  1408. noCancelItems: 'Pas d\'autorisation annulation groupée',
  1409. },
  1410. },
  1411. // Statistics page
  1412. stats: {
  1413. title: 'Statistiques',
  1414. subtitle: 'Glissez les widgets pour réorganiser. Cliquez sur l\'œil pour masquer.',
  1415. overview: 'Vue d\'ensemble',
  1416. totalPrints: 'Total impressions',
  1417. successRate: 'Taux de succès',
  1418. totalPrintTime: 'Temps total d\'impression',
  1419. printTime: 'Temps d\'impression',
  1420. totalFilament: 'Total filament utilisé',
  1421. filamentUsed: 'Filament utilisé',
  1422. filamentCost: 'Coût filament',
  1423. totalCost: 'Coût total',
  1424. energyUsed: 'Énergie consommée',
  1425. energyCost: 'Coût énergie',
  1426. energyWarmingUpTooltip: 'Le suivi énergétique collecte encore des instantanés horaires. Les totaux par période deviendront précis dès qu’un instantané existera avant la plage sélectionnée. Les premières valeurs peuvent être sous-estimées.',
  1427. averagePrintTime: 'Temps moyen par impression',
  1428. printsPerDay: 'Impressions par jour',
  1429. byPrinter: 'Par imprimante',
  1430. printsByPrinter: 'Impressions par imprimante',
  1431. byMaterial: 'Par matériau',
  1432. byMonth: 'Par mois',
  1433. last7Days: '7 derniers jours',
  1434. last30Days: '30 derniers jours',
  1435. last90Days: '90 derniers jours',
  1436. allTime: 'Tout le temps',
  1437. // Widgets
  1438. quickStats: 'Stats rapides',
  1439. printActivity: 'Activité d\'impression',
  1440. filamentTypes: 'Types de filament',
  1441. filamentTrends: 'Tendances filament',
  1442. failureAnalysis: 'Analyse des échecs',
  1443. timeAccuracy: 'Précision du temps',
  1444. successful: 'Succès :',
  1445. failed: 'Échecs :',
  1446. cancelled: 'Annulés :',
  1447. perfectEstimate: '100% = estimation parfaite',
  1448. noTimeAccuracyData: 'Pas encore de données de précision',
  1449. noFilamentData: 'Aucune donnée de filament',
  1450. noPrinterData: 'Aucune donnée d\'imprimante',
  1451. noPrintData: 'Aucune donnée d\'impression',
  1452. noPrintDataLast30Days: 'Aucune impression ces 30 derniers jours',
  1453. failureReasons: 'Raisons des échecs',
  1454. topFailureReasons: 'Top raisons d\'échec',
  1455. failedPrintsCount: '{{failed}} / {{total}} impressions ont échoué',
  1456. lastWeekRate: 'Semaine dernière : {{rate}}%',
  1457. // Actions
  1458. resetLayout: 'Réinitialiser la mise en page',
  1459. recalculateCosts: 'Recalculer les coûts',
  1460. recalculateCostsHint: 'Recalcule les coûts avec les prix actuels des filaments',
  1461. exportStats: 'Exporter les stats',
  1462. exportAsCsv: 'Exporter en CSV',
  1463. exportAsExcel: 'Exporter en Excel',
  1464. hiddenCount: '{{count}} Masqués',
  1465. // Toast
  1466. exportDownloaded: 'Export téléchargé',
  1467. exportFailed: 'Échec export',
  1468. layoutReset: 'Mise en page réinitialisée',
  1469. recalculatedCosts: 'Coûts recalculés pour {{count}} archives',
  1470. recalculateFailed: 'Échec du calcul',
  1471. // Loading
  1472. loadingStats: 'Chargement des statistiques...',
  1473. // Permissions
  1474. noPermissionResetLayout: 'Pas d\'autorisation de réinitialisation',
  1475. noPermissionRecalculate: 'Pas d\'autorisation de recalcul',
  1476. noPrintDataInRange: 'Aucune donnée dans la période sélectionnée',
  1477. periodFilament: 'Filament utilisé',
  1478. periodCost: 'Coût',
  1479. avgPerPrint: 'Moy. par impression',
  1480. usageOverTime: 'Utilisation dans le temps',
  1481. energyOverTime: 'Énergie dans le temps',
  1482. filamentByWeight: 'Poids',
  1483. printDuration: 'Durée d\'impression',
  1484. printerUtilization: 'Utilisation imprimante',
  1485. filamentSuccess: 'Succès par matériau',
  1486. printHabits: 'Habitudes d\'impression',
  1487. printTimeOfDay: 'Heure d\'impression',
  1488. colorDistribution: 'Distribution des couleurs',
  1489. noColorData: 'Aucune donnée de couleur disponible',
  1490. records: 'Enregistrements',
  1491. longestPrint: 'Plus longue impression',
  1492. heaviestPrint: 'Plus lourde impression',
  1493. mostExpensivePrint: 'Plus chère',
  1494. busiestDay: 'Jour le plus actif',
  1495. successStreak: 'Série de succès',
  1496. streakPrint: 'impression consécutive',
  1497. streakPrints: '{{count}} impressions consécutives',
  1498. printerStats: 'Stats imprimante',
  1499. hours: 'heures',
  1500. avgPrints: 'Moy. impressions',
  1501. noArchiveData: 'Aucune donnée d\'impression disponible',
  1502. filamentByTime: 'Temps',
  1503. avgWeight: 'Moy. poids',
  1504. avgTime: 'Moy. temps',
  1505. filamentByPrints: 'Impressions',
  1506. timeframe: {
  1507. today: 'Aujourd\'hui',
  1508. 'this-week': 'Cette semaine',
  1509. 'this-month': 'Ce mois',
  1510. 'last-7': '7 derniers jours',
  1511. 'last-30': '30 derniers jours',
  1512. 'last-90': '90 derniers jours',
  1513. 'this-year': 'Cette année',
  1514. 'all-time': 'Tout',
  1515. custom: 'Personnalisé',
  1516. from: 'Du',
  1517. to: 'Au',
  1518. },
  1519. allUsers: 'Tous les utilisateurs',
  1520. noUser: 'Aucun utilisateur (Système)',
  1521. filterByUser: 'Filtrer par utilisateur',
  1522. },
  1523. // Maintenance page
  1524. maintenance: {
  1525. title: 'Maintenance',
  1526. overview: 'Vue d\'ensemble',
  1527. allOk: 'Toute la maintenance est à jour',
  1528. dueCount: '{{count}} tâche à faire',
  1529. dueCount_plural: '{{count}} tâches à faire',
  1530. warningCount: '{{count}} avertissement',
  1531. warningCount_plural: '{{count}} avertissements',
  1532. totalPrintTime: 'Temps d\'impression total',
  1533. nextMaintenance: 'Prochaine maintenance',
  1534. nothingDue: 'Rien de prévu',
  1535. tasks: 'Tâches',
  1536. lastPerformed: 'Dernière réalisation',
  1537. interval: 'Intervalle',
  1538. hoursRemaining: '{{hours}}h restantes',
  1539. hoursOverdue: '{{hours}}h de retard',
  1540. markDone: 'Marquer comme fait',
  1541. performMaintenance: 'Effectuer la maintenance',
  1542. history: 'Historique',
  1543. noHistory: 'Aucun historique',
  1544. editPrintHours: 'Modifier les heures d\'impression',
  1545. currentHours: 'Heures actuelles',
  1546. // Tabs
  1547. statusTab: 'Statut',
  1548. settingsTab: 'Paramètres',
  1549. // Status
  1550. overdueCount: '{{count}} en retard',
  1551. dueSoonCount: '{{count}} bientôt',
  1552. dueSoon: 'Bientôt',
  1553. allGood: 'Tout va bien',
  1554. overdueBy: 'Retard de {{duration}}',
  1555. dueIn: 'Dans {{duration}}',
  1556. timeLeft: '{{duration}} restant',
  1557. // Duration formats
  1558. day: '1 jour',
  1559. days: '{{count}} jours',
  1560. week: '1 semaine',
  1561. weeks: '{{count}} semaines',
  1562. month: '1 mois',
  1563. months: '{{count}} mois',
  1564. year: '1 an',
  1565. // Settings
  1566. maintenanceTypes: 'Types de maintenance',
  1567. maintenanceTypesDescription: 'Types système et tâches personnalisées',
  1568. addCustomType: 'Ajouter un type',
  1569. restoreDefaults: 'Restaurer les tâches par défaut',
  1570. intervalType: 'Type d\'intervalle',
  1571. intervalValue: 'Intervalle ({{type}})',
  1572. icon: 'Icône',
  1573. documentationLink: 'Lien documentation (optionnel)',
  1574. assignToPrinters: 'Assigner aux imprimantes',
  1575. selectAtLeastOnePrinter: 'Sélectionnez au moins une imprimante',
  1576. addType: 'Ajouter le type',
  1577. custom: 'Personnalisé',
  1578. printHours: 'Heures d\'impression',
  1579. calendarDays: 'Jours calendaires',
  1580. exampleName: 'ex: Remplacement filtre HEPA',
  1581. viewDocumentation: 'Voir documentation',
  1582. timeBasedInterval: 'Intervalle temporel',
  1583. // Interval overrides
  1584. intervalOverrides: 'Exceptions d\'intervalle',
  1585. intervalOverridesDescription: 'Intervalles spécifiques par imprimante',
  1586. // Printer assignment
  1587. assignedToPrinters: 'Assigné aux imprimantes :',
  1588. noPrintersAssigned: 'Aucune imprimante assignée',
  1589. addPrinterShort: 'Ajouter :',
  1590. printersAssignedClick: '{{count}} imprimante(s) assignée(s) - gérer',
  1591. removeFromPrinter: 'Retirer de cette imprimante',
  1592. // Types
  1593. types: {
  1594. lubricateCarbonRods: 'Lubrifier les tiges carbone',
  1595. lubricateRails: 'Lubrifier les rails linéaires',
  1596. cleanNozzle: 'Nettoyer la buse / hotend',
  1597. checkBelts: 'Vérifier la tension des courroies',
  1598. cleanBuildPlate: 'Nettoyer le plateau',
  1599. checkExtruder: 'Vérifier les engrenages de l\'extrudeur',
  1600. checkCooling: 'Vérifier les ventilateurs',
  1601. generalInspection: 'Inspection générale',
  1602. cleanCarbonRods: 'Nettoyer les tiges carbone',
  1603. lubricateSteelRods: 'Lubrifier les tiges en acier',
  1604. cleanSteelRods: 'Nettoyer les tiges en acier',
  1605. cleanLinearRails: 'Nettoyer les rails linéaires',
  1606. checkPtfeTube: 'Vérifier le tube PTFE',
  1607. replaceHepaFilter: 'Remplacer le filtre HEPA',
  1608. replaceCarbonFilter: 'Remplacer le filtre charbon',
  1609. lubricateLeftNozzleRail: 'Lubrifier le rail de buse gauche',
  1610. },
  1611. // Toast
  1612. maintenanceComplete: 'Maintenance marquée comme faite',
  1613. typeUpdated: 'Type mis à jour',
  1614. typeDeleted: 'Type supprimé',
  1615. defaultsRestored: '{{count}} tâche(s) par défaut restaurée(s)',
  1616. printHoursUpdated: 'Heures mises à jour',
  1617. printerAssigned: 'Imprimante assignée',
  1618. printerRemoved: 'Imprimante retirée',
  1619. // Confirmation
  1620. deleteTypeConfirm: 'Supprimer "{{name}}" ?',
  1621. deleteSystemTypeTitle: 'Supprimer la tâche de maintenance par défaut ?',
  1622. deleteSystemTypeMessage: 'Êtes-vous sûr de vouloir supprimer la tâche de maintenance par défaut "{{name}}" ?',
  1623. // Permissions
  1624. noPermissionUpdate: 'Pas d\'autorisation de mise à jour',
  1625. noPermissionPerform: 'Pas d\'autorisation d\'action',
  1626. noPermissionEditTypes: 'Pas d\'autorisation de modification types',
  1627. noPermissionDeleteTypes: 'Pas d\'autorisation de suppression types',
  1628. noPermissionEditHours: 'Pas d\'autorisation de modification heures',
  1629. noPermissionRemovePrinter: 'Pas d\'autorisation retrait imprimante',
  1630. noPermissionAssignPrinter: 'Pas d\'autorisation assignation',
  1631. noPermissionEditIntervals: 'Pas d\'autorisation modification intervalles',
  1632. // Configure link
  1633. configureSettings: 'Configurer types et intervalles',
  1634. },
  1635. // Settings page
  1636. settings: {
  1637. title: 'Paramètres',
  1638. general: 'Général',
  1639. // Tab names
  1640. tabs: {
  1641. general: 'Général',
  1642. smartPlugs: 'Prises connectées',
  1643. notifications: 'Notifications',
  1644. queue: 'Flux de travail',
  1645. queueDispatch: 'File & Distribution',
  1646. queuePipelines: 'Pipelines',
  1647. filament: 'Filament',
  1648. network: 'Réseau',
  1649. apiKeys: 'Clés API',
  1650. virtualPrinter: 'Imprimante virtuelle',
  1651. failureDetection: 'Détection d\'échec',
  1652. users: 'Authentification',
  1653. backup: 'Sauvegarde',
  1654. emailAuth: 'Authentification Email',
  1655. ldap: 'LDAP',
  1656. twoFa: 'Authentification 2FA',
  1657. oidc: 'SSO / OIDC',
  1658. security: 'Sécurité',
  1659. spoolbuddy: 'SpoolBuddy',
  1660. },
  1661. ldap: {
  1662. title: 'Authentification LDAP',
  1663. enabledDesc: "L'authentification LDAP est activée",
  1664. disabledDesc: "L'authentification LDAP est désactivée",
  1665. disabledHint: 'Configurez et enregistrez les paramètres LDAP ci-dessous, puis activez.',
  1666. enabled: 'Authentification LDAP activée',
  1667. disabled: 'Authentification LDAP désactivée',
  1668. feature1: 'Les utilisateurs peuvent se connecter avec leurs identifiants LDAP',
  1669. feature2: "Le compte administrateur local reste disponible en secours",
  1670. feature3: 'Les groupes LDAP sont associés aux groupes BamBuddy à la connexion',
  1671. serverConfig: 'Configuration du serveur LDAP',
  1672. serverUrl: 'URL du serveur',
  1673. serverUrlHint: 'Utilisez ldap:// pour standard ou ldaps:// pour les connexions SSL',
  1674. security: 'Sécurité',
  1675. securityHint: 'StartTLS met à niveau une connexion simple vers TLS. LDAPS utilise TLS dès le début.',
  1676. bindDn: 'DN de liaison (compte de service)',
  1677. bindPassword: 'Mot de passe de liaison',
  1678. searchBase: 'DN de base de recherche',
  1679. userFilter: 'Filtre de recherche utilisateur',
  1680. userFilterHint: "{username} est remplacé par le nom d'utilisateur. Utilisez (uid={username}) pour OpenLDAP.",
  1681. advanced: 'Avancé',
  1682. autoProvision: 'Provisionnement automatique',
  1683. autoProvisionHint: 'Créer automatiquement un compte BamBuddy lors de la première connexion LDAP',
  1684. defaultGroup: 'Groupe par défaut',
  1685. defaultGroupNone: '— Aucun (pas de repli) —',
  1686. defaultGroupHint: "Groupe de repli attribué lorsqu'un utilisateur LDAP s'authentifie mais n'est dans aucun groupe LDAP mappé. Laissez vide pour laisser les utilisateurs non mappés sans autorisations.",
  1687. groupMapping: 'Mappage de groupes (JSON)',
  1688. groupMappingHint: 'Associer les DN de groupes LDAP aux groupes BamBuddy. Groupes disponibles : ',
  1689. testConnection: 'Tester la connexion',
  1690. settingsSaved: 'Paramètres LDAP enregistrés',
  1691. errors: {
  1692. serverRequired: "L'URL du serveur LDAP est requise",
  1693. searchBaseRequired: 'Le DN de base de recherche est requis',
  1694. enableAuthFirst: "Activez d'abord l'authentification",
  1695. configureLdapFirst: "Enregistrez d'abord les paramètres LDAP",
  1696. },
  1697. },
  1698. // Email settings
  1699. email: {
  1700. smtpSettings: 'Configuration SMTP',
  1701. smtpHost: 'Serveur SMTP',
  1702. smtpPort: 'Port SMTP',
  1703. security: 'Sécurité',
  1704. authentication: 'Authentification',
  1705. username: 'Utilisateur',
  1706. password: 'Mot de passe',
  1707. fromEmail: 'Email expéditeur',
  1708. fromName: 'Nom expéditeur',
  1709. testConnection: 'Tester la connexion SMTP',
  1710. testRecipient: 'Email test destinataire',
  1711. sendTest: 'Envoyer email test',
  1712. sending: 'Envoi...',
  1713. save: 'Enregistrer les paramètres',
  1714. saving: 'Enregistrement...',
  1715. advancedAuth: 'Authentification avancée',
  1716. advancedAuthEnabled: 'L\'authentification avancée est activée',
  1717. advancedAuthEnabledDesc: 'La gestion des utilisateurs par email est active. Les nouveaux utilisateurs recevront un mot de passe auto-généré.',
  1718. advancedAuthDisabled: 'Authentification avancée désactivée',
  1719. advancedAuthDisabledDesc: 'Activez pour les fonctionnalités liées à l\'email (mot de passe oublié, etc).',
  1720. enable: 'Activer',
  1721. disable: 'Désactiver',
  1722. feature1: 'Génération auto et envoi de mots de passe par email',
  1723. feature2: 'Connexion par utilisateur ou email',
  1724. feature3: 'Réinitialisation mot de passe oublié disponible',
  1725. feature4: 'Réinitialisation admin par email',
  1726. // Error messages
  1727. errors: {
  1728. requiredFields: 'Remplissez tous les champs requis',
  1729. usernameRequired: 'L\'utilisateur est requis pour l\'authentification',
  1730. enterTestEmail: 'Entrez une adresse email de test',
  1731. smtpServerAndEmail: 'Serveur et expéditeur requis pour le test',
  1732. usernamePasswordRequired: 'Utilisateur et mot de passe requis pour l\'auth',
  1733. configureSmtpFirst: 'Configurez et testez le SMTP d\'abord',
  1734. enableAuthFirst: 'Veuillez d\'abord activer l\'authentification pour utiliser les fonctionnalités basées sur le courrier électronique.',
  1735. },
  1736. // Success messages
  1737. success: {
  1738. settingsSaved: 'Paramètres SMTP enregistrés',
  1739. },
  1740. // Security options
  1741. securityOptions: {
  1742. starttls: 'STARTTLS (Port 587)',
  1743. ssl: 'SSL/TLS (Port 465)',
  1744. none: 'Aucun (Port 25)',
  1745. },
  1746. // Authentication options
  1747. authOptions: {
  1748. enabled: 'Activée',
  1749. disabled: 'Désactivée',
  1750. },
  1751. },
  1752. appearance: 'Apparence',
  1753. notifications: 'Notifications',
  1754. smartPlugs: 'Prises connectées',
  1755. spoolman: 'Spoolman',
  1756. updates: 'Mises à jour',
  1757. language: 'Langue',
  1758. languageDescription: 'Choisissez votre langue',
  1759. theme: 'Thème',
  1760. themeLight: 'Clair',
  1761. themeDark: 'Sombre',
  1762. themeSystem: 'Système',
  1763. defaultView: 'Vue par défaut',
  1764. defaultViewDescription: 'Page affichée au démarrage',
  1765. checkForUpdates: 'Vérifier les mises à jour',
  1766. autoUpdate: 'Mise à jour auto',
  1767. currentVersion: 'Version actuelle',
  1768. latestVersion: 'Dernière version',
  1769. upToDate: 'Bambuddy est à jour',
  1770. updateAvailable: 'Mise à jour disponible',
  1771. // Notifications
  1772. notificationLanguage: 'Langue des notifications',
  1773. notificationLanguageDescription: 'Langue pour les notifications push',
  1774. bedCooledThreshold: 'Seuil de refroidissement du plateau',
  1775. bedCooledThresholdDescription: 'Température en dessous de laquelle le plateau est considéré comme refroidi',
  1776. userNotificationsEnabled: 'Notifications utilisateur',
  1777. userNotificationsEnabledDescription: "Active le menu de notifications utilisateur et les notifications par e-mail pour les événements d'impression. Nécessite l'authentification avancée.",
  1778. userNotificationsDisabledHint: "Activez l'authentification avancée pour utiliser les notifications utilisateur.",
  1779. notificationProviders: 'Fournisseurs de notifications',
  1780. addProvider: 'Ajouter un fournisseur',
  1781. editProvider: 'Modifier le fournisseur',
  1782. providerType: 'Type de fournisseur',
  1783. testNotification: 'Tester la notification',
  1784. testSuccess: 'Notification de test envoyée',
  1785. testFailed: 'Échec de l\'envoi du test',
  1786. quietHours: 'Heures de silence',
  1787. quietHoursDescription: 'Ne pas déranger pendant ces heures',
  1788. quietHoursStart: 'Début',
  1789. quietHoursEnd: 'Fin',
  1790. events: {
  1791. title: 'Événements de notification',
  1792. printStart: 'Impression démarrée',
  1793. printComplete: 'Impression terminée',
  1794. printFailed: 'Impression échouée',
  1795. printStopped: 'Impression arrêtée',
  1796. printProgress: 'Jalons de progression',
  1797. printProgressDescription: 'Notifier à 25%, 50%, 75%',
  1798. printerOffline: 'Imprimante hors ligne',
  1799. printerError: 'Erreur imprimante',
  1800. filamentLow: 'Filament bas',
  1801. maintenanceDue: 'Maintenance due',
  1802. maintenanceDueDescription: 'Notifier quand une tâche est due',
  1803. },
  1804. // Smart Plugs
  1805. smartPlug: {
  1806. title: 'Prises connectées',
  1807. add: 'Ajouter une prise',
  1808. edit: 'Modifier la prise',
  1809. name: 'Nom',
  1810. ipAddress: 'Adresse IP',
  1811. linkedPrinter: 'Imprimante liée',
  1812. autoOn: 'Allumage auto',
  1813. autoOnDescription: 'Allumer au début de l\'impression',
  1814. autoOff: 'Extinction auto',
  1815. autoOffDescription: 'Éteindre après l\'impression',
  1816. offDelay: 'Délai d\'extinction',
  1817. offDelayMinutes: 'Minutes après fin',
  1818. offDelayTemp: 'Quand la buse est sous',
  1819. currentState: 'État actuel',
  1820. turnOn: 'Allumer',
  1821. turnOff: 'Éteindre',
  1822. },
  1823. // Filament Tracking Mode
  1824. filamentTracking: 'Suivi de Filament',
  1825. filamentTrackingDesc: 'Choisissez comment suivre vos bobines. Utilisez l\'inventaire intégré ou connectez un serveur Spoolman.',
  1826. autoAddUnknownRfid: 'Ajouter automatiquement les bobines RFID inconnues',
  1827. autoAddUnknownRfidDesc: 'Crée automatiquement une entrée d\'inventaire lorsqu\'une bobine avec un tag RFID inconnu est détectée. Désactivez si vous enregistrez manuellement les nouvelles bobines à l\'avance pour éviter les doublons.',
  1828. filamentChecks: 'Vérifications du filament',
  1829. disableFilamentWarnings: 'Désactiver les avertissements de filament',
  1830. disableFilamentWarningsDesc: 'Ne pas afficher les avertissements de filament insuffisant lors de l\'impression ou de la mise en file d\'attente',
  1831. preferLowestFilament: 'Préférer le filament le plus bas',
  1832. preferLowestFilamentDesc: 'Lorsque plusieurs bobines correspondent, utiliser celle avec le moins de filament restant',
  1833. preferLowestFilamentBackupNote: "Ne prend effet que si AMS Filament Backup est activé sur l'imprimante — sinon, l'imprimante ne peut pas basculer vers une seconde bobine quand celle choisie est vide.",
  1834. trackingModeBuiltIn: 'Inventaire Intégré',
  1835. trackingModeBuiltInDesc: 'Correspondance RFID et suivi de consommation inclus',
  1836. trackingModeSpoolmanDesc: 'Serveur de gestion externe',
  1837. builtInFeatureRfid: 'Détecte auto les bobines RFID Bambu Lab dans l\'AMS',
  1838. builtInFeatureUsage: 'Suit la consommation par impression',
  1839. builtInFeatureCatalog: 'Gère bobines, couleurs et profils facteur K',
  1840. builtInFeatureThirdParty: 'Les bobines tierces peuvent être assignées aux bobines d\'inventaire',
  1841. amsSyncButton: 'Synchroniser les poids depuis l\'AMS',
  1842. amsSyncTitle: 'Synchroniser les poids des bobines depuis l\'AMS',
  1843. amsSyncMessage: 'Tous les poids des bobines de l\'inventaire seront écrasés par les valeurs actuelles de l\'AMS des imprimantes connectées. Utilisez ceci pour récupérer des données de poids corrompues. Les imprimantes doivent être en ligne.',
  1844. amsSyncing: 'Synchronisation...',
  1845. amsSyncSuccess: '{{synced}} bobine(s) synchronisée(s), {{skipped}} ignorée(s)',
  1846. amsSyncError: 'Échec de la synchronisation des poids depuis l\'AMS',
  1847. spoolmanAmsSyncButton: 'Synchroniser les poids Spoolman depuis l\'AMS',
  1848. spoolmanAmsSyncTitle: 'Synchroniser les poids des bobines Spoolman depuis l\'AMS',
  1849. spoolmanAmsSyncMessage: 'Cela mettra à jour les poids des bobines Spoolman en fonction des valeurs de remplissage AMS actuelles des imprimantes connectées. Les imprimantes doivent être en ligne.',
  1850. spoolmanAmsSyncing: 'Synchronisation...',
  1851. spoolmanAmsSyncSuccess: '{{synced}} bobine(s) synchronisée(s), {{skipped}} ignorée(s)',
  1852. spoolmanAmsSyncError: 'Échec de la synchronisation des poids Spoolman depuis l\'AMS',
  1853. spoolmanAmsSyncErrorUnreachable: 'Échec de la synchronisation (Spoolman inaccessible)',
  1854. spoolmanAmsSyncErrorNotConfigured: 'Échec de la synchronisation (Spoolman non configuré)',
  1855. spoolmanNotConfigured: 'Spoolman non configuré',
  1856. // Spoolman filament catalog section in spool catalog settings
  1857. spoolmanFilamentCatalogTitle: 'Catalogue de filaments Spoolman',
  1858. spoolmanFilamentCatalogDesc: 'Noms de filaments et poids à vide depuis votre instance Spoolman. Le nom et le poids bobine sont modifiables ici ; toutes les autres propriétés sont gérées directement dans Spoolman.',
  1859. // Spoolman settings
  1860. spoolmanUrl: 'URL Spoolman',
  1861. spoolmanUrlHint: 'URL de votre serveur Spoolman (ex: http://localhost:7912)',
  1862. spoolmanConnected: 'Connecté',
  1863. spoolmanDisconnected: 'Déconnecté',
  1864. status: 'Statut',
  1865. connect: 'Connecter',
  1866. disconnect: 'Déconnecter',
  1867. howSyncWorks: 'Fonctionnement de la Sync',
  1868. syncInfoRfidOnly: 'Seules les bobines officielles RFID sont synchronisées',
  1869. syncInfoAutoCreate: 'Les bobines sont créées dans Spoolman à la 1ère sync',
  1870. syncInfoThirdPartySkipped: 'Les bobines tierces ou rechargées sont ignorées',
  1871. linkingExistingSpools: 'Lier des bobines existantes',
  1872. linkingExistingSpoolsDesc: 'Pour lier une bobine Spoolman, survolez un slot AMS et cliquez sur "Lier à Spoolman".',
  1873. syncMode: 'Mode de Sync',
  1874. syncModeAuto: 'Automatique',
  1875. syncModeManual: 'Manuel uniquement',
  1876. syncModeAutoDesc: 'Sync auto lors de changements AMS',
  1877. syncModeManualDesc: 'Sync uniquement sur déclenchement manuel',
  1878. syncAmsData: 'Synchroniser AMS',
  1879. syncAmsDataDesc: 'Synchroniser manuellement les données vers Spoolman',
  1880. allPrinters: 'Toutes les imprimantes',
  1881. // Default printer
  1882. noDefaultPrinter: 'Aucune par défaut (demander à chaque fois)',
  1883. // Sidebar
  1884. sidebarOrder: 'Ordre de la barre latérale',
  1885. // Camera
  1886. saveThumbnails: 'Enregistrer les vignettes',
  1887. captureFinishPhoto: 'Prendre une photo à la fin',
  1888. noPrintersConfigured: 'Aucune imprimante configurée',
  1889. // Archive settings
  1890. archiveMode: {
  1891. always: 'Toujours créer une archive',
  1892. never: 'Ne jamais créer d\'archive',
  1893. ask: 'Demander à chaque fois',
  1894. },
  1895. // Updates
  1896. checkForUpdatesLabel: 'Vérifier les mises à jour',
  1897. checkPrinterFirmware: 'Vérifier le firmware imprimante',
  1898. includeBetaUpdates: 'Inclure les versions bêta',
  1899. includeBetaUpdatesDesc: 'Notifier des versions bêta et préliminaires lors de la vérification des mises à jour',
  1900. localLogin: {
  1901. disable: 'Désactiver la connexion locale par nom d\'utilisateur/mot de passe',
  1902. disableHint: 'Quand activée, seuls les fournisseurs SSO peuvent se connecter. LDAP n\'est pas affecté. Définissez BAMBUDDY_LOCAL_LOGIN=true sur le serveur pour conserver une voie de récupération.',
  1903. },
  1904. // Queue
  1905. enableRetry: 'Activer la rétentative',
  1906. // Home Assistant
  1907. homeAssistantDescription: 'Contrôler les prises via Home Assistant',
  1908. environmentManagedLabel: '(Géré par l\'environnement)',
  1909. autoEnabledViaEnv: 'Activé via variables d\'environnement',
  1910. urlFromEnvReadOnly: 'Valeur HA_URL (lecture seule)',
  1911. tokenFromEnvReadOnly: 'Valeur HA_TOKEN (lecture seule)',
  1912. // MQTT
  1913. mqttConnectedTo: 'Connecté à',
  1914. // Prometheus
  1915. prometheusDescription: 'Exposer les données au format Prometheus',
  1916. // Smart plugs empty state
  1917. noSmartPlugsTitle: 'Aucune prise configurée',
  1918. noSmartPlugsDescription: 'Ajoutez une prise Tasmota pour suivre l\'énergie et automatiser.',
  1919. // Notifications empty state
  1920. noProvidersTitle: 'Aucun fournisseur configuré',
  1921. noProvidersDescription: 'Ajoutez un fournisseur pour recevoir des alertes.',
  1922. noTemplatesAvailable: 'Aucun modèle dispo. Redémarrez pour les générer.',
  1923. // API permissions
  1924. apiPermissionView: 'Voir statut et file',
  1925. apiPermissionEdit: 'Gérer la file d\'attente',
  1926. // API keys
  1927. apiKeysEmptyTitle: 'Aucune clé API',
  1928. apiKeysEmptyDescription: 'Créez une clé pour vos intégrations.',
  1929. // Users
  1930. noUsersFound: 'Aucun utilisateur trouvé',
  1931. noGroupsFound: 'Aucun groupe trouvé',
  1932. noGroupsAvailable: 'Aucun groupe disponible',
  1933. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  1934. systemGroupWarning: 'Les noms des groupes système sont fixes',
  1935. // Auth disabled
  1936. authDisabledTitle: 'Authentification désactivée',
  1937. authDisabledFeature1: 'Requis pour accéder au système',
  1938. authDisabledFeature2: 'Gestion multi-utilisateurs et groupes',
  1939. authDisabledFeature3: 'Plus de 50 permissions granulaires',
  1940. // User deletion
  1941. userHasCreated: 'Cet utilisateur a créé :',
  1942. userItemsQuestion: 'Que faire de ces éléments ?',
  1943. deleteUserConfirm: 'Supprimer cet utilisateur ?',
  1944. actionCannotBeUndone: 'Cette action est irréversible.',
  1945. // Smart plugs
  1946. addFirstSmartPlug: 'Ajoutez votre première prise',
  1947. // Notifications
  1948. providers: 'Fournisseurs',
  1949. log: 'Journal',
  1950. testAll: 'Tout tester',
  1951. testResults: 'Résultats du test',
  1952. testPassedCount: '{{count}} succès',
  1953. testFailedCount: '{{count}} échecs',
  1954. messageTemplates: 'Modèles de message',
  1955. messageTemplatesDescription: 'Personnalisez les messages par événement.',
  1956. // API Keys section
  1957. apiKeys: 'Clés API',
  1958. apiKeysDescription: 'Créez des clés pour webhooks et API.',
  1959. createKey: 'Créer une clé',
  1960. apiKeyCreated: 'Clé API créée avec succès',
  1961. apiKeyCopyWarning: 'Copiez cette clé maintenant - elle ne sera plus affichée !',
  1962. useInApiBrowser: 'Utiliser dans l\'explorateur API',
  1963. apiKeyQrButton: 'Code QR',
  1964. apiKeyQrTitle: 'Scanner pour configurer',
  1965. apiKeyQrCaption: 'Scannez avec votre application mobile pour ajouter ce serveur et cette clé API.',
  1966. apiKeyQrWarning: 'Contient votre clé API secrète — ne la partagez pas et ne la capturez pas là où d\'autres peuvent la voir.',
  1967. createNewApiKey: 'Nouvelle clé API',
  1968. keyName: 'Nom de la clé',
  1969. keyNamePlaceholder: 'ex: Home Assistant, OctoPrint',
  1970. readStatus: 'Lire le statut',
  1971. readStatusDescription: 'Voir les imprimantes et la file',
  1972. manageQueue: 'Gérer la file',
  1973. manageQueueDescription: 'Ajouter/retirer des éléments',
  1974. controlPrinter: 'Contrôler l\'imprimante',
  1975. controlPrinterDescription: 'Pause, reprise, arrêt',
  1976. manageLibrary: 'Gérer la bibliothèque',
  1977. manageLibraryDescription: 'Téléverser, renommer et supprimer des fichiers de la bibliothèque ; importer des modèles depuis MakerWorld',
  1978. manageInventory: 'Gérer l\'inventaire',
  1979. manageInventoryDescription: 'Créer, modifier et supprimer des bobines et des entrées d\'inventaire. Requis pour les bornes SpoolBuddy (scan NFC, lectures de balance, commandes système de la borne).',
  1980. manageMaintenance: 'Gérer la maintenance',
  1981. manageMaintenanceDescription: 'Enregistrer les maintenances effectuées, réinitialiser les compteurs, modifier les intervalles et gérer le catalogue des types de maintenance. Adapté aux automatisations Home Assistant qui consignent "J\'ai nettoyé la buse" sans accorder un contrôle plus large de l\'imprimante.',
  1982. manageArchives: 'Gérer les archives',
  1983. manageArchivesDescription: 'Modifier et supprimer les archives d\'impression, y compris la suppression des anciennes impressions. N\'inclut pas la purge de leur contribution aux statistiques. Adapté aux automatisations qui élaguent l\'historique d\'impression.',
  1984. manageProjects: 'Gérer les projets',
  1985. manageProjectsDescription: 'Créer, modifier et supprimer des projets, et y ajouter des archives. Adapté aux automatisations qui organisent les impressions en projets.',
  1986. maintenanceBadge: 'Maintenance',
  1987. archivesBadge: 'Archives',
  1988. projectsBadge: 'Projets',
  1989. libraryBadge: 'Bibliothèque',
  1990. inventoryBadge: 'Inventaire',
  1991. cloudAccess: 'Autoriser l\'accès cloud',
  1992. cloudAccessDescription: 'Lit les préréglages et filaments Bambu Cloud en votre nom. Nécessite d\'être connecté à Bambu Cloud.',
  1993. cloudBadge: 'Cloud',
  1994. updateEnergyCost: 'Mettre à jour le tarif électrique',
  1995. updateEnergyCostDescription: 'Autoriser cette clé à POSTer un nouveau tarif électrique par kWh sur /settings/electricity-price. Utile pour les automatisations Home Assistant à tarif dynamique (Tibber, Octopus, etc.). Il s\'agit du seul champ de paramètres modifiable via clé API.',
  1996. energyCostBadge: 'Énergie',
  1997. legacyKey: 'Hérité',
  1998. legacyKeyTooltip: 'Créé avant la propriété par utilisateur ; recréez pour l\'accès cloud',
  1999. unnamedKey: 'Clé sans nom',
  2000. lastUsed: 'Dernière utilisation',
  2001. read: 'Lecture',
  2002. control: 'Contrôle',
  2003. createFirstKey: 'Créez votre première clé',
  2004. webhookEndpoints: 'Points de terminaison Webhook',
  2005. webhookApiKeyHint: 'Utilisez la clé dans l\'en-tête X-API-Key.',
  2006. webhook: {
  2007. getAllStatus: 'Tous les statuts',
  2008. getSpecificStatus: 'Statut spécifique',
  2009. addToQueue: 'Ajouter à la file',
  2010. pausePrint: 'Pause',
  2011. resumePrint: 'Reprise',
  2012. stopPrint: 'Arrêt',
  2013. },
  2014. apiBrowser: 'Explorateur API',
  2015. apiBrowserDescription: 'Testez les endpoints API.',
  2016. apiKeyForTesting: 'Clé API pour test',
  2017. apiKeyPlaceholder: 'Collez votre clé pour tester...',
  2018. apiKeyHint: 'Sera envoyée via l\'en-tête X-API-Key.',
  2019. deleteApiKeyTitle: 'Supprimer la clé API',
  2020. deleteApiKeyMessage: 'Les intégrations utilisant cette clé cesseront de fonctionner.',
  2021. deleteKey: 'Supprimer la clé',
  2022. // Filament tab
  2023. amsDisplayThresholds: 'Seuils d\'affichage AMS',
  2024. amsThresholdsDescription: 'Seuils de couleur pour humidité et température.',
  2025. humidity: 'Humidité',
  2026. goodGreen: 'Bon (vert)',
  2027. fairOrange: 'Moyen (orange)',
  2028. aboveFairBad: 'Au-dessus = rouge (mauvais)',
  2029. fairAlsoDryingThreshold: 'Ce seuil est aussi utilisé pour déclencher le séchage automatique',
  2030. temperature: 'Température',
  2031. goodBlue: 'Bon (bleu)',
  2032. aboveFairHot: 'Au-dessus = rouge (chaud)',
  2033. historyRetention: 'Rétention d\'historique',
  2034. keepSensorHistory: 'Garder l\'historique pendant',
  2035. historyRetentionDescription: 'Les anciennes données seront supprimées.',
  2036. defaultPrintOptions: 'Options d\'impression par défaut',
  2037. defaultPrintOptionsDescription: 'Définir les valeurs par défaut des options d\'impression. Modifiables dans la boîte de dialogue d\'impression.',
  2038. defaultBedLevelling: 'Nivellement du lit',
  2039. defaultBedLevellingDesc: 'Niveler automatiquement le lit avant l\'impression',
  2040. defaultFlowCali: 'Calibration du flux',
  2041. defaultFlowCaliDesc: 'Calibrer le flux d\'extrusion',
  2042. defaultVibrationCali: 'Calibration des vibrations',
  2043. defaultVibrationCaliDesc: 'Réduire les artefacts de ringing',
  2044. defaultLayerInspect: 'Inspection première couche',
  2045. defaultLayerInspectDesc: 'Inspection IA de la première couche',
  2046. defaultTimelapse: 'Time-lapse',
  2047. defaultTimelapseDesc: 'Enregistrer une vidéo timelapse',
  2048. defaultNozzleOffsetCali: 'Calibration du décalage des buses',
  2049. defaultNozzleOffsetCaliDesc: 'Calibrer les décalages entre les buses',
  2050. tempFanPresetsTitle: 'Préréglages de température et de ventilateur',
  2051. tempFanPresetsDescription: 'Personnalisez les valeurs de sélection rapide affichées dans les fenêtres contextuelles de température et de vitesse du ventilateur de la carte imprimante. Le bouton Arrêt est toujours affiché.',
  2052. tempFanPresetsNozzle: 'Température de la buse',
  2053. tempFanPresetsBed: 'Température du plateau',
  2054. tempFanPresetsChamber: 'Température de la chambre',
  2055. tempFanPresetsFan: 'Vitesse du ventilateur',
  2056. tempFanPresetsReset: 'Rétablir les valeurs par défaut',
  2057. concurrentUploadsTitle: 'Envois simultanés',
  2058. concurrentUploadsDescription: "Nombre d'imprimantes auxquelles la file d'attente peut envoyer des fichiers en même temps. Les imprimantes reçoivent les fichiers lentement (une grosse impression peut prendre plusieurs minutes) et chacune attend son tour : sur un parc important, augmenter cette valeur évite que la dernière imprimante d'un lot doive attendre la fin de tous les transferts précédents. Réduisez-la si votre réseau ou votre hôte Bambuddy supporte mal les transferts parallèles.",
  2059. concurrentUploadsLabel: 'Imprimantes servies simultanément',
  2060. concurrentUploadsHelp: "1 n'envoie qu'à une imprimante à la fois (l'ancien comportement). Valeur par défaut : 4.",
  2061. staggeredStart: 'Démarrage échelonné',
  2062. staggeredStartDescription: 'Taille de groupe et intervalle par défaut lors de l\'échelonnement des démarrages de lots multi-imprimantes. Modifiable par lot dans la fenêtre d\'impression.',
  2063. preheatTitle: 'Préchauffage & Heat Soak',
  2064. preheatDescription: 'Chauffe le plateau (et la chambre, si pris en charge) et maintient la température avant le démarrage de chaque impression de la file. Utile pour les filaments techniques (PA, ABS) sur les imprimantes sans chauffage actif de la chambre — le plateau chauffe la chambre par rayonnement pendant que le minuteur de soak s\'écoule. La température cible du plateau provient du fichier d\'impression ; le comportement de la chambre dépend du modèle d\'imprimante.',
  2065. preheatEnabled: 'Activer préchauffage & soak',
  2066. preheatEnabledDesc: 'Si désactivé, les impressions en file démarrent immédiatement. Chaque élément peut surcharger par impression.',
  2067. preheatFilamentTargetsLabel: 'Cible chambre par filament (°C)',
  2068. preheatFilamentTargetsHint: 'Bambuddy choisit la cible la plus haute parmi les slots AMS chargés ; les impressions PLA uniquement dérivent 0 et sautent la phase chambre automatiquement.',
  2069. preheatFilamentTargetsReset: 'Restaurer les valeurs par défaut',
  2070. preheatFilamentTargetsDefaultRow: 'Autre / non mappé',
  2071. preheatMaxWait: 'Attente max (secondes)',
  2072. preheatMaxWaitHelp: 'Plafond de la phase de chauffe de la chambre avant passage au soak.',
  2073. preheatSoak: 'Soak (secondes)',
  2074. preheatSoakHelp: 'Maintien après l\'atteinte de la cible ou l\'expiration de l\'attente max.',
  2075. preheatHardwareTitle: 'Comportement par imprimante :',
  2076. preheatHardwareDetail: 'H2C/H2D/H2D Pro/H2S/X2D/X1E chauffent activement la chambre via M141. X1C/P2S lisent la température mais ne chauffent la chambre que par rayonnement du plateau. P1S/P1P/A1/A1 Mini n\'ont pas de capteur de chambre — seul le minuteur de soak s\'applique.',
  2077. preheatPerItemDesc: 'Chauffe le plateau et la chambre avant le démarrage de cette impression. Utilise par défaut le commutateur global de Paramètres → Workflow.',
  2078. preheatOverride_inherit: 'Hériter',
  2079. preheatOverride_on: 'Activé',
  2080. preheatOverride_off: 'Désactivé',
  2081. calibrationMode_off: 'Désactivé',
  2082. calibrationMode_on: 'Activé',
  2083. calibrationMode_auto: 'Auto',
  2084. preheatTargetOverride: 'Surcharger la cible chambre (°C, vide = par filament)',
  2085. plateClear: 'Confirmation de plateau libre',
  2086. requirePlateClear: 'Exiger la confirmation de plateau libre',
  2087. requirePlateClearDescription: 'Lorsque cette option est activée, le planificateur attend une confirmation de plateau libre par imprimante avant de lancer les impressions en file d\'attente sur les imprimantes ayant terminé. La désactiver masque également le badge d\'état du plateau et le bouton « Marquer le plateau comme dégagé » sur les cartes d\'imprimante.',
  2088. gcodeInjection: 'Injection de G-code',
  2089. gcodeInjectionDescription: 'Configurez du G-code personnalisé à injecter au début et/ou à la fin des impressions pour les systèmes d\'auto-impression comme Farmloop, SwapMod, AutoClear et Printflow 3D. Les snippets sont configurés par modèle d\'imprimante et appliqués lorsque « Injecter le G-code » est activé sur un élément de file d\'attente.',
  2090. gcodeInjectionNoPrinters: 'Aucune imprimante trouvée. Ajoutez des imprimantes pour configurer les snippets G-code.',
  2091. gcodeStartLabel: 'G-code de début',
  2092. gcodeEndLabel: 'G-code de fin',
  2093. gcodeStartPlaceholder: 'G-code ajouté avant le début de l\'impression...',
  2094. gcodeEndPlaceholder: 'G-code ajouté après la fin de l\'impression...',
  2095. staggerGroupSize: 'Taille du groupe',
  2096. staggerGroupSizeHelp: 'Imprimantes à démarrer simultanément par groupe',
  2097. staggerInterval: 'Intervalle (minutes)',
  2098. staggerIntervalHelp: 'Délai entre chaque démarrage de groupe',
  2099. queueDrying: 'Séchage automatique',
  2100. queueDryingDescription: 'Sécher automatiquement le filament AMS lorsque l\'imprimante est inactive entre les impressions. Utilise le seuil d\'humidité ci-dessus.',
  2101. queueDryingEnabled: 'Activer le séchage automatique',
  2102. queueDryingEnabledDescription: 'Démarrer le séchage AMS automatiquement lorsque l\'imprimante est inactive et l\'humidité dépasse le seuil',
  2103. queueDryingBlock: 'Attendre la fin du séchage',
  2104. queueDryingBlockDescription: 'Bloquer la file d\'attente jusqu\'à la fin du séchage. Désactivé, les impressions sont prioritaires.',
  2105. ambientDryingEnabled: 'Séchage ambiant',
  2106. ambientDryingEnabledDescription: 'Sécher automatiquement le filament sur les imprimantes inactives lorsque l\'humidité dépasse le seuil, même sans impressions en file.',
  2107. printDryingEnabled: 'Séchage pendant l\'impression',
  2108. printDryingEnabledDescription: 'Autorise le séchage automatique à continuer pendant une impression sur le matériel pris en charge (H2D, H2C, H2S, P2S, H2D Pro, X2D, X1C, A2L avec firmware récent). La température de séchage est automatiquement limitée à 5°C sous le préréglage en attente pour protéger les bobines.',
  2109. dryingPresets: 'Préréglages de séchage',
  2110. dryingPresetsDescription: 'Température et durée par type de filament. AMS 2 Pro utilise des températures plus basses, AMS-HT supporte des températures plus élevées.',
  2111. dryingFilament: 'Filament',
  2112. humidityThresholds: 'Seuils d\'humidité',
  2113. humidityThresholdsDescription: 'Déclencheur d\'humidité par type de filament pour le séchage auto et les alarmes. Charges mixtes dans un AMS utilisent le seuil le plus bas.',
  2114. humidityThresholdCol: 'Seuil',
  2115. humidityThresholdDefault: 'Par défaut (types inconnus)',
  2116. printModal: 'Fenêtre d\'impression',
  2117. expandCustomMapping: 'Étendre le mapping personnalisé par défaut',
  2118. expandCustomMappingDescription: 'Affiche le mapping AMS par imprimante étendu.',
  2119. // User management
  2120. authentication: 'Authentification',
  2121. authEnabledDescription: 'L\'instance est sécurisée',
  2122. authDisabledDescription: 'Activez pour restreindre l\'accès',
  2123. authDisabledMessage: 'Activez l\'authentification pour gérer comptes et permissions.',
  2124. enableAuthentication: 'Activer l\'authentification',
  2125. currentUser: 'Utilisateur actuel',
  2126. changePassword: 'Changer le mot de passe',
  2127. admin: 'Administrateur',
  2128. users: 'Utilisateurs',
  2129. addUser: 'Ajouter un utilisateur',
  2130. groups: 'Groupes',
  2131. addGroup: 'Ajouter un groupe',
  2132. system: 'Système',
  2133. noDescription: 'Pas de description',
  2134. userCount: '{{count}} utilisateurs',
  2135. permissionCount: '{{count}} permissions',
  2136. createUser: 'Créer un utilisateur',
  2137. username: 'Nom d\'utilisateur',
  2138. enterUsername: 'Entrez l\'utilisateur',
  2139. password: 'Mot de passe',
  2140. enterPassword: 'Entrez le mot de passe',
  2141. passwordRequirements: 'Au moins 8 caractères, avec une majuscule, une minuscule, un chiffre et un caractère spécial.',
  2142. confirmPassword: 'Confirmer le mot de passe',
  2143. confirmPasswordPlaceholder: 'Confirmez le mot de passe',
  2144. // Title tooltips
  2145. viewReleaseOnGitHub: 'Voir la version sur GitHub',
  2146. turnAllPlugsOn: 'Tout allumer',
  2147. turnAllPlugsOff: 'Tout éteindre',
  2148. // Modal: Clear logs
  2149. clearNotificationLogs: 'Effacer les journaux',
  2150. clearLogsMessage: 'Efface définitivement les logs de plus de 30 jours.',
  2151. clearLogs: 'Effacer les logs',
  2152. // Modal: Reset UI
  2153. resetUiPreferences: 'Réinitialiser l\'UI',
  2154. resetUiPreferencesMessage: 'Réinitialise l\'ordre, thème, widgets, etc. N\'affecte pas vos données.',
  2155. resetPreferences: 'Réinitialiser',
  2156. // Modal: Delete group
  2157. deleteGroupTitle: 'Supprimer le groupe',
  2158. deleteGroupMessage: 'Les utilisateurs de ce groupe perdront ces permissions.',
  2159. deleteGroup: 'Supprimer le groupe',
  2160. // Modal: Disable auth
  2161. disableAuthenticationTitle: 'Désactiver l\'authentification',
  2162. disableAuthenticationMessage: 'Instance accessible sans connexion. Les comptes sont conservés.',
  2163. disableAuthentication: 'Désactiver',
  2164. // Additional settings
  2165. configureBambuddy: 'Configurer Bambuddy',
  2166. systemDefault: 'Défaut système',
  2167. archiveSettings: 'Réglages Archives',
  2168. newWindow: 'Nouvelle fenêtre',
  2169. embeddedOverlay: 'Superposition intégrée',
  2170. preferredSlicer: 'Slicer préféré',
  2171. preferredSlicerDescription: 'Slicer utilisé pour le tranchage intégré via le sidecar API',
  2172. openInSlicerLabel: 'Ouvrir dans le slicer',
  2173. openInSlicerInherit: 'Identique au slicer API',
  2174. openInSlicerDescription: 'Slicer de bureau utilisé par le bouton « Ouvrir dans le slicer ». Laissez sur « Identique au slicer API » pour hériter, ou choisissez un slicer différent pour un usage local.',
  2175. orcaslicerKnownIssuesWarning: 'OrcaSlicer 2.3.2 / 2.4.0-dev ont des bugs CLI connus qui bloquent le découpage de nombreux 3MF créés par Bambu — voir les issues amont #12426 (segfault sur fichiers multi-extrudeurs peints) et #13386 (rejet de validation stricte des plages de paramètres). Bambu Studio est recommandé jusqu\'à ce que les correctifs amont arrivent.',
  2176. useSlicerApi: 'Utiliser l\'API Slicer',
  2177. useSlicerApiDescription: 'Lorsque activé, les actions "Slice" ouvrent le slicer intégré et appellent le sidecar slicer-API. Lorsque désactivé (par défaut), elles redirigent vers le slicer desktop via le schéma URI.',
  2178. slicerCard: 'Slicer',
  2179. orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
  2180. bambuStudioApiUrl: 'Bambu Studio sidecar URL',
  2181. slicerApiUrlDescription: 'URL du conteneur sidecar slicer-API. Laisser vide pour utiliser les variables d\'environnement SLICER_API_URL / BAMBU_STUDIO_API_URL.',
  2182. slicerBundlesRemoved: {
  2183. title: 'Bundles de slicer (supprimé)',
  2184. description: 'L\'import de Printer Preset Bundles (.bbscfg) a été supprimé. L\'export de bundle de BambuStudio ne comprend que les préréglages personnalisés, donc l\'import ne livrait jamais les processus / filaments standard et le découpage retombait sur les paramètres intégrés.',
  2185. alternatives: 'Utilisez l\'Import de préréglage unique pour les personnalisations, ou synchronisez via Bambu Cloud / Orca Cloud. Les préréglages standard viennent automatiquement du sidecar du trancheur.',
  2186. lookupOrder: 'Ordre de recherche des préréglages au découpage : 1) Importé (local), 2) Orca Cloud, 3) Bambu Cloud, 4) Standard (repli sidecar).',
  2187. },
  2188. externalCameras: 'Caméras externes',
  2189. costTracking: 'Suivi des coûts',
  2190. printsOnly: 'Impressions uniquement',
  2191. totalConsumption: 'Consommation totale',
  2192. dataManagement: 'Gestion des données',
  2193. storageUsage: 'Utilisation du stockage',
  2194. storageUsageDescription: 'Répartition de l\'utilisation des données par catégorie',
  2195. storageUsageTotal: 'Total',
  2196. storageUsageErrors: 'Erreurs',
  2197. storageUsageOtherBreakdown: 'Autre (inclut ressources statiques, scripts et fichiers de configuration)',
  2198. storageUsageSystem: 'Système',
  2199. storageUsageData: 'Données',
  2200. storageUsageUnavailable: 'Informations d\'utilisation du stockage non disponibles',
  2201. clearNotificationLogsDescription: 'Supprimer logs de plus de 30 jours',
  2202. resetUiPreferencesDescription: 'Réinitialise thèmes et affichage sans toucher aux données.',
  2203. enableHomeAssistant: 'Activer Home Assistant',
  2204. enableMqtt: 'Activer MQTT',
  2205. useTls: 'Utiliser TLS',
  2206. enableMetricsEndpoint: 'Activer l\'endpoint Metrics',
  2207. availableMetrics: 'Metrics disponibles',
  2208. editUser: 'Modifier l\'utilisateur',
  2209. deleteUserTitle: 'Supprimer l\'utilisateur',
  2210. groupName: 'Nom du groupe',
  2211. // Placeholders
  2212. leaveEmptyForAnonymous: 'Vide pour anonyme',
  2213. leaveEmptyForNoAuth: 'Vide si pas d\'auth',
  2214. enterNewPassword: 'Nouveau mot de passe',
  2215. confirmNewPassword: 'Confirmer nouveau mdp',
  2216. enterGroupName: 'Entrez le nom du groupe',
  2217. enterDescriptionOptional: 'Description (optionnel)',
  2218. enterCurrentPassword: 'Mdp actuel',
  2219. enterNewPasswordMin6: 'Nouveau mdp (min 6 char)',
  2220. toast: {
  2221. keyCopied: 'Clé copiée',
  2222. copyFailed: 'Échec copie',
  2223. keyAddedToBrowser: 'Clé ajoutée à l\'explorateur',
  2224. clearLogsFailed: 'Échec effacement logs',
  2225. uiPreferencesReset: 'Préférences UI réinitialisées. Rafraîchissement...',
  2226. authDisabled: 'Authentification désactivée',
  2227. authDisableFailed: 'Échec désactivation',
  2228. apiKeyCreated: 'Clé API créée',
  2229. apiKeyDeleted: 'Clé API supprimée',
  2230. userCreated: 'Utilisateur créé',
  2231. userUpdated: 'Utilisateur mis à jour',
  2232. userDeleted: 'Utilisateur supprimé',
  2233. groupCreated: 'Groupe créé',
  2234. groupUpdated: 'Groupe mis à jour',
  2235. groupDeleted: 'Groupe supprimé',
  2236. fillRequiredFields: 'Remplissez les champs requis',
  2237. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  2238. passwordTooShort: 'Le mot de passe doit contenir au moins 8 caractères',
  2239. passwordNeedsUppercase: 'Le mot de passe doit contenir au moins une majuscule',
  2240. passwordNeedsLowercase: 'Le mot de passe doit contenir au moins une minuscule',
  2241. passwordNeedsDigit: 'Le mot de passe doit contenir au moins un chiffre',
  2242. passwordNeedsSpecial: 'Le mot de passe doit contenir au moins un caractère spécial',
  2243. enterGroupName: 'Entrez un nom de groupe',
  2244. settingsSaved: 'Paramètres enregistrés',
  2245. noPermissionUpdate: "Vous n'avez pas l'autorisation de modifier les paramètres",
  2246. cameraSettingsSaved: 'Réglages caméra enregistrés',
  2247. enterCameraUrl: 'Entrez une URL caméra',
  2248. passwordChanged: 'Mot de passe modifié',
  2249. connectionFailed: 'Échec connexion',
  2250. testFailed: 'Échec test',
  2251. cameraConnected: 'Caméra connectée {{resolution}}',
  2252. },
  2253. testConnection: 'Tester la connexion',
  2254. catalog: {
  2255. spoolCatalog: 'Catalogue de Bobines',
  2256. spoolCatalogDescription: 'Poids des bobines vides par marque/type. Utilisé pour le calcul auto du poids restant.',
  2257. searchCatalog: 'Chercher dans le catalogue...',
  2258. addNewEntry: 'Nouvelle Entrée',
  2259. namePlaceholder: 'Nom (ex: Bambu Lab - Plastique)',
  2260. weight: 'Poids',
  2261. type: 'Type',
  2262. default: 'Défaut',
  2263. custom: 'Perso',
  2264. noMatch: 'Aucune entrée correspondante',
  2265. empty: 'Catalogue vide',
  2266. deleteEntry: 'Supprimer l\'entrée',
  2267. deleteConfirm: 'Supprimer "{{name}}" ?',
  2268. resetCatalog: 'Réinitialiser le catalogue',
  2269. resetConfirm: 'Réinitialiser aux valeurs par défaut ? Vos entrées personnalisées seront supprimées.',
  2270. loadFailed: 'Échec chargement catalogue',
  2271. nameWeightRequired: 'Nom et poids requis',
  2272. entryAdded: 'Entrée ajoutée',
  2273. addFailed: 'Échec ajout',
  2274. entryUpdated: 'Entrée mise à jour',
  2275. updateFailed: 'Échec mise à jour',
  2276. entryDeleted: 'Entrée supprimée',
  2277. deleteFailed: 'Échec suppression',
  2278. resetSuccess: 'Catalogue réinitialisé',
  2279. resetFailed: 'Échec réinitialisation',
  2280. exported: '{{count}} entrées exportées',
  2281. imported: '{{added}} entrées importées ({{skipped}} ignorées)',
  2282. importFailed: 'Échec import : format JSON invalide',
  2283. exportTooltip: 'Exporter en JSON',
  2284. importTooltip: 'Importer depuis JSON',
  2285. resetTooltip: 'Réinitialiser par défaut',
  2286. selectedCount: '{{count}} sélectionnés',
  2287. deleteSelected: 'Supprimer la sélection',
  2288. bulkDeleteConfirm: 'Supprimer {{count}} entrées ?',
  2289. bulkDeleted: '{{count}} entrées supprimées',
  2290. bulkDeleteFailed: 'Échec de la suppression',
  2291. material: 'Matériau',
  2292. spoolWeight: 'Poids bobine',
  2293. color: 'Couleur',
  2294. updateSpoolWeight: 'Mettre à jour le poids bobine',
  2295. filamentUpdated: 'Filament mis à jour',
  2296. filamentUpdateFailed: 'Échec de la mise à jour du filament',
  2297. filamentUpdateInvalid: 'Données de filament invalides',
  2298. keepExistingSpoolWeight: 'Conserver l\'ancien poids pour les bobines existantes',
  2299. keepExistingSpoolWeightDesc: 'Les bobines déjà créées avec ce type de filament conservent l\'ancien poids à vide. Les nouvelles bobines utilisent la valeur mise à jour.',
  2300. applyToAllSpools: 'Appliquer à toutes les bobines',
  2301. applyToAllSpoolsDesc: 'Tous les calculs de poids pour ce type de filament utilisent immédiatement le nouveau poids à vide.',
  2302. },
  2303. colorCatalog: {
  2304. title: 'Catalogue de Couleurs',
  2305. description: 'Couleurs de filament par fabricant. Utilisé pour la recherche auto lors de l\'ajout de bobines.',
  2306. searchColors: 'Chercher couleurs...',
  2307. allManufacturers: 'Tous les fabricants',
  2308. addNewColor: 'Nouvelle Couleur',
  2309. manufacturer: 'Fabricant',
  2310. colorName: 'Nom couleur',
  2311. hex: 'Hex',
  2312. materialOptional: 'Matériau (optionnel)',
  2313. showing: 'Affichage {{filtered}} sur {{total}} couleurs',
  2314. noMatch: 'Aucune couleur correspondante',
  2315. empty: 'Catalogue vide',
  2316. deleteColor: 'Supprimer couleur',
  2317. deleteConfirm: 'Supprimer "{{name}}" ?',
  2318. resetCatalog: 'Réinitialiser catalogue couleurs',
  2319. resetConfirm: 'Réinitialiser aux valeurs par défaut ?',
  2320. sync: 'Synchro.',
  2321. starting: 'Démarrage...',
  2322. syncTooltip: 'Sync depuis FilamentColors.xyz (2000+ couleurs, peut être long)',
  2323. loadFailed: 'Échec chargement catalogue couleurs',
  2324. fieldsRequired: 'Fabricant, nom et code Hex requis',
  2325. colorAdded: 'Couleur ajoutée',
  2326. addFailed: 'Échec ajout',
  2327. colorUpdated: 'Couleur mise à jour',
  2328. updateFailed: 'Échec mise à jour',
  2329. colorDeleted: 'Couleur supprimée',
  2330. deleteFailed: 'Échec suppression',
  2331. resetSuccess: 'Catalogue réinitialisé',
  2332. resetFailed: 'Échec réinitialisation',
  2333. syncUpToDate: 'Déjà à jour ({{count}} couleurs vérifiées)',
  2334. syncComplete: '{{added}} couleurs ajoutées ({{skipped}} déjà présentes)',
  2335. syncError: 'Erreur de sync',
  2336. syncFailed: 'Échec sync FilamentColors.xyz',
  2337. exported: '{{count}} couleurs exportées',
  2338. imported: '{{added}} couleurs importées ({{skipped}} ignorées)',
  2339. importFailed: 'Échec import : format JSON invalide',
  2340. selectedCount: '{{count}} sélectionnés',
  2341. deleteSelected: 'Supprimer la sélection',
  2342. bulkDeleteConfirm: 'Supprimer {{count}} couleurs ?',
  2343. bulkDeleted: '{{count}} couleurs supprimées',
  2344. bulkDeleteFailed: 'Échec de la suppression des couleurs',
  2345. },
  2346. // General tab
  2347. dateFormat: 'Format de date',
  2348. dateFormatUs: 'US (MM/JJ/AAAA)',
  2349. dateFormatEu: 'EU (JJ/MM/AAAA)',
  2350. dateFormatIso: 'ISO (AAAA-MM-JJ)',
  2351. timeFormat: 'Format horaire',
  2352. timeFormat12: '12 heures (3:30 PM)',
  2353. timeFormat24: '24 heures (15:30)',
  2354. defaultPrinter: 'Imprimante par défaut',
  2355. defaultPrinterDescription: 'Présélectionner cette imprimante pour les téléversements, réimpressions et autres opérations.',
  2356. slicerBambuStudio: 'Bambu Studio',
  2357. slicerOrcaSlicer: 'OrcaSlicer',
  2358. sidebarOrderDescription: 'Utilisez la disposition de la barre latérale pour réorganiser les éléments, réinitialiser la visibilité et gérer les liens personnalisés.',
  2359. setDefault: 'Définir par défaut',
  2360. sidebarOrderSetDefaultHint: 'Définir par défaut applique l\'ordre actuel du menu aux utilisateurs qui n\'ont pas encore personnalisé le leur.',
  2361. sidebarDefaultSet: 'L\'ordre du menu par défaut a été défini.',
  2362. sidebarDefaultCleared: 'Ordre du menu par défaut effacé.',
  2363. sidebarDefaultFailed: 'Échec de la définition de l\'ordre du menu par défaut.',
  2364. reset: 'Réinitialiser',
  2365. darkMode: 'Mode sombre',
  2366. lightMode: 'Mode clair',
  2367. active: '(actif)',
  2368. background: 'Arrière-plan',
  2369. accent: 'Accent',
  2370. style: 'Style',
  2371. bgNeutral: 'Neutre',
  2372. bgWarm: 'Chaud',
  2373. bgCool: 'Froid',
  2374. bgOled: 'OLED Noir',
  2375. bgSlate: 'Bleu ardoise',
  2376. bgForest: 'Vert forêt',
  2377. accentGreen: 'Vert',
  2378. accentTeal: 'Sarcelle',
  2379. accentBlue: 'Bleu',
  2380. accentOrange: 'Orange',
  2381. accentPurple: 'Violet',
  2382. accentRed: 'Rouge',
  2383. styleClassic: 'Classique',
  2384. styleGlow: 'Lumineux',
  2385. styleVibrant: 'Vif',
  2386. themeToggleHint: 'Basculer entre le mode sombre, clair et système avec l\'icône dans la barre latérale.',
  2387. progressInTitle: 'Progression dans l\'onglet',
  2388. progressInTitleDescription: 'Affiche le pourcentage de l\'impression en cours et un anneau de progression dans l\'onglet du navigateur.',
  2389. autoArchivePrints: 'Archiver automatiquement les impressions',
  2390. autoArchiveDescription: 'Sauvegarder automatiquement les fichiers 3MF à la fin des impressions',
  2391. saveThumbnailsDescription: 'Extraire et sauvegarder les images d\'aperçu des fichiers 3MF',
  2392. captureFinishPhotoDescription: 'Prendre une photo avec la caméra de l\'imprimante à la fin de l\'impression. Bambuddy enregistre un court timelapse pendant l\'impression afin que la photo puisse provenir du moment précédant l\'abaissement du plateau ; le fichier du timelapse est conservé si vous avez activé le timelapse pour cette impression, sinon il est supprimé automatiquement après la capture de la photo.',
  2393. ffmpegNotInstalled: 'ffmpeg non installé',
  2394. ffmpegRequired: 'La capture caméra nécessite ffmpeg. Installez-le via <brew>brew install ffmpeg</brew> (macOS) ou <apt>apt install ffmpeg</apt> (Linux).',
  2395. camera: 'Caméra',
  2396. cameraViewMode: 'Mode d\'affichage caméra',
  2397. cameraOverlayDescription: 'La caméra s\'ouvre dans un overlay redimensionnable sur l\'écran principal',
  2398. cameraWindowDescription: 'La caméra s\'ouvre dans une fenêtre de navigateur séparée',
  2399. externalCamerasDescription: 'Configurer des caméras externes pour remplacer la caméra intégrée. Supporte les flux MJPEG, RTSP, snapshots HTTP et caméras USB (V4L2). Lorsqu\'activée, la caméra externe est utilisée pour la vue en direct et les photos de fin.',
  2400. cameraPlaceholderUsb: 'Chemin du périphérique (/dev/video0)',
  2401. cameraPlaceholderUrl: 'URL caméra (rtsp://... ou http://...)',
  2402. cameraTypeMjpeg: 'Flux MJPEG',
  2403. cameraTypeRtsp: 'Flux RTSP',
  2404. cameraTypeSnapshot: 'Snapshot HTTP',
  2405. cameraTypeUsb: 'Caméra USB (V4L2)',
  2406. cameraSnapshotUrl: 'URL de capture (facultatif)',
  2407. cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer',
  2408. cameraSnapshotUrlHelp: 'URL d\'image unique utilisée pour les miniatures de notification, photos de fin, frames de timelapse par couche et détection de plaque. Le timelapse et la détection de plaque nécessitent chacun leur propre bascule par imprimante — cette URL est juste la source d\'image qu\'ils utilisent lorsqu\'activés. Laisser vide pour capturer depuis le flux en direct ci-dessus. Utile pour go2rtc (/api/frame.jpeg) et caméras IP avec un point de terminaison de capture dédié.',
  2409. cameraRotation: 'Rotation',
  2410. test: 'Tester',
  2411. connected: 'Connecté',
  2412. disconnected: 'Déconnecté',
  2413. currency: 'Devise',
  2414. defaultFilamentCost: 'Coût filament par défaut (par kg)',
  2415. electricityCost: 'Coût électricité par kWh',
  2416. energyDisplayMode: 'Mode d\'affichage énergie',
  2417. energyModePrintDescription: 'Le tableau de bord affiche la somme de l\'énergie utilisée pendant les impressions',
  2418. energyModeTotalDescription: 'Le tableau de bord affiche l\'énergie totale des prises connectées',
  2419. fileManager: 'Gestionnaire de fichiers',
  2420. createArchiveEntry: 'Créer une entrée d\'archive lors de l\'impression',
  2421. createArchiveEntryDescription: 'Lors de l\'impression depuis le gestionnaire de fichiers, créer optionnellement une entrée d\'archive',
  2422. lowDiskSpaceWarning: 'Avertissement espace disque faible',
  2423. lowDiskSpaceDescription: 'Afficher un avertissement lorsque l\'espace disque libre descend sous ce seuil',
  2424. printerFirmware: 'Firmware imprimante',
  2425. checkFirmwareDescription: 'Vérifier les mises à jour firmware de Bambu Lab',
  2426. bambuddySoftware: 'Logiciel Bambuddy',
  2427. autoCheckDescription: 'Vérifier automatiquement les nouvelles versions au démarrage',
  2428. checkNow: 'Vérifier maintenant',
  2429. updateAvailableVersion: 'Mise à jour disponible : v{{version}}',
  2430. releaseNotes: 'Notes de version',
  2431. updateViaDocker: 'Mettre à jour via Docker Compose :',
  2432. updateViaHomeAssistant: 'Les mises à jour sont gérées par le superviseur Home Assistant. Ouvrez Paramètres → Modules complémentaires → Bambuddy dans Home Assistant pour installer la nouvelle version.',
  2433. updateViaWindowsInstaller: "Les installations Windows se mettent à jour en relançant l'installateur. Téléchargez la nouvelle version ci-dessous — vos données, paramètres et imprimantes sont préservés.",
  2434. downloadWindowsInstaller: "Télécharger l'installateur pour la v{{version}}",
  2435. installUpdate: 'Installer la mise à jour',
  2436. latestVersionRunning: 'Vous utilisez la dernière version',
  2437. failedToCheckUpdates: 'Échec de la vérification des mises à jour : {{error}}',
  2438. backupRestore: 'Sauvegarde & Restauration',
  2439. backupRestoreDescription: 'Exporter/importer les paramètres et configurer la sauvegarde GitHub',
  2440. goToBackup: 'Aller à la sauvegarde',
  2441. externalUrl: 'URL externe',
  2442. externalUrlDescription: 'L\'URL externe où Bambuddy est accessible. Utilisée pour les images de notification et les intégrations externes.',
  2443. bambuddyUrl: 'URL Bambuddy',
  2444. externalUrlHint: 'Inclure le protocole et le port (ex : http://192.168.1.100:8000)',
  2445. ftpRetry: 'Réessai FTP',
  2446. ftpRetryDescription: 'Réessayer les opérations FTP lorsque le WiFi de l\'imprimante est instable. S\'applique aux téléchargements 3MF, uploads d\'impression, téléchargements timelapse et mises à jour firmware.',
  2447. autoRetryDescription: 'Réessayer automatiquement les opérations FTP échouées',
  2448. retryAttempts: 'Tentatives de réessai',
  2449. retryDelay: 'Délai de réessai',
  2450. connectionTimeout: 'Délai de connexion',
  2451. time_one: '{{count}} fois',
  2452. time_other: '{{count}} fois',
  2453. second_one: '{{count}} seconde',
  2454. second_other: '{{count}} secondes',
  2455. nSeconds: '{{count}} secondes',
  2456. increaseForWeakWifi: 'Augmenter pour les imprimantes avec un WiFi faible',
  2457. homeAssistant: 'Home Assistant',
  2458. homeAssistantFullDescription: 'Se connecter à Home Assistant pour contrôler les prises connectées via l\'API REST HA. Supporte les entités switch, light, input_boolean et script.',
  2459. homeAssistantUrl: 'URL Home Assistant',
  2460. longLivedAccessToken: 'Token d\'accès longue durée',
  2461. haTokenHint: 'Créer un token dans HA : Profil → Tokens d\'accès longue durée → Créer un token',
  2462. connectionSuccessful: 'Connexion réussie',
  2463. connectionFailed: 'Connexion échouée',
  2464. haConnectionSuccess: 'Connexion à Home Assistant réussie.',
  2465. haConnectionFailed: 'Échec de la connexion à Home Assistant.',
  2466. mqttPublishing: 'Publication MQTT',
  2467. mqttDescription: 'Publier les événements BamBuddy vers un broker MQTT externe pour l\'intégration avec Node-RED, Home Assistant et d\'autres systèmes d\'automatisation.',
  2468. mqttEnableDescription: 'Publier les événements vers un broker MQTT externe',
  2469. brokerHostname: 'Nom d\'hôte du broker',
  2470. port: 'Port',
  2471. usernameOptional: 'Nom d\'utilisateur (optionnel)',
  2472. passwordOptional: 'Mot de passe (optionnel)',
  2473. topicPrefix: 'Préfixe de topic',
  2474. topicPrefixHint: 'Les topics seront : {{prefix}}/printers/<serial>/status, etc.',
  2475. prometheusMetrics: 'Métriques Prometheus',
  2476. prometheusEndpointDescription: 'Exposer les métriques imprimante sur <code>/api/v1/metrics</code> pour la surveillance Prometheus/Grafana.',
  2477. bearerTokenOptional: 'Token Bearer (optionnel)',
  2478. bearerTokenHint: 'Si défini, les requêtes doivent inclure <code>Authorization: Bearer <token></code>',
  2479. metricsConnectionStatus: 'État de connexion',
  2480. metricsPrinterState: 'État imprimante (idle/printing/etc)',
  2481. metricsPrintProgress: 'Progression impression 0-100%',
  2482. metricsBedTemp: 'Température du plateau',
  2483. metricsNozzleTemp: 'Température de la buse',
  2484. metricsPrintsTotal: 'Total impressions par résultat',
  2485. metricsMore: '...et plus (couches, ventilateurs, file d\'attente, utilisation filament)',
  2486. smartPlugsDescription: 'Connecter des prises connectées (Tasmota ou Home Assistant) pour automatiser le contrôle de l\'alimentation et suivre la consommation d\'énergie de vos imprimantes.',
  2487. allOn: 'Tout allumer',
  2488. allOff: 'Tout éteindre',
  2489. addSmartPlug: 'Ajouter une prise',
  2490. energySummary: 'Résumé énergétique',
  2491. currentPower: 'Puissance actuelle',
  2492. plugsOnline: '{{reachable}}/{{total}} prises en ligne',
  2493. today: 'Aujourd\'hui',
  2494. yesterday: 'Hier',
  2495. total: 'Total',
  2496. enablePlugsForSummary: 'Activer les prises pour voir le résumé énergétique',
  2497. addNotificationProvider: 'Ajouter',
  2498. systemBadge: '(Système)',
  2499. creating: 'Création...',
  2500. changing: 'Modification...',
  2501. deleteUserAndItems: 'Supprimer l\'utilisateur ET ses éléments',
  2502. deleteUserKeepItems: 'Supprimer l\'utilisateur, garder les éléments (deviennent sans propriétaire)',
  2503. ok: 'OK',
  2504. // 2FA settings
  2505. twoFa: {
  2506. totpTitle: 'Application Authenticator (TOTP)',
  2507. totpDesc: 'Utilisez une application comme Google Authenticator, Aegis ou Authy.',
  2508. emailOtpTitle: 'OTP par e-mail',
  2509. emailOtpDesc: 'Envoyez un code à usage unique à {{email}} lors de la connexion.',
  2510. emailOtpNoEmail: 'Ajoutez une adresse e-mail à votre compte pour activer cette méthode.',
  2511. addEmailFirst: 'Votre compte n\'a pas d\'adresse e-mail. Demandez à un administrateur d\'en ajouter une.',
  2512. setupTotp: 'Configurer l\'application Authenticator',
  2513. setupAuthApp: 'Configurer l\'application Authenticator',
  2514. setupInstructions: 'Scannez le QR code avec votre application authenticator, puis confirmez avec un code.',
  2515. manualEntry: 'Impossible de scanner ? Entrez ce secret manuellement :',
  2516. scannedContinue: 'Code scanné — continuer',
  2517. enterCodeToConfirm: 'Entrez le code à 6 chiffres de votre application authenticator pour confirmer.',
  2518. activate: 'Activer',
  2519. disableTotp: 'Désactiver l\'Authenticator',
  2520. disableConfirmHint: 'Entrez un code TOTP valide ou un code de secours pour désactiver l\'authenticator.',
  2521. totpDisabled: 'Application Authenticator désactivée.',
  2522. emailOtpEnabled: 'OTP par e-mail activé.',
  2523. emailOtpDisabled: 'OTP par e-mail désactivé.',
  2524. smtpRequired: 'Veuillez d\'abord configurer et tester les paramètres SMTP.',
  2525. invalidCode: 'Code invalide. Veuillez réessayer.',
  2526. enableEmailOtp: 'Activer OTP par e-mail',
  2527. disableEmailOtp: 'Désactiver OTP par e-mail',
  2528. emailSetupEnterCode: 'Un code de vérification a été envoyé à votre adresse e-mail. Entrez-le ci-dessous pour confirmer que vous possédez cette boîte de réception.',
  2529. verifyAndEnable: 'Vérifier et activer',
  2530. emailDisablePasswordHint: 'Entrez le mot de passe de votre compte pour confirmer la désactivation de l\'OTP par e-mail.',
  2531. passwordPlaceholder: 'Entrez votre mot de passe',
  2532. backupCodesTitle: 'Sauvegardez vos codes de secours',
  2533. backupCodesWarning: 'Conservez ces codes en lieu sûr. Chaque code ne peut être utilisé qu\'une seule fois et ne sera plus affiché.',
  2534. backupCodesRemaining: '{{count}} codes de secours restants',
  2535. savedCodes: 'Codes sauvegardés',
  2536. regenBackup: 'Régénérer les codes de secours',
  2537. regenBackupHint: 'Entrez votre code TOTP actuel pour générer 10 nouveaux codes de secours. Tous les codes existants seront invalidés.',
  2538. newBackupCodes: 'Nouveaux codes de secours',
  2539. linkedAccounts: 'Comptes SSO liés',
  2540. linkedAccountsDesc: 'Ces fournisseurs d\'identité externes sont liés à votre compte.',
  2541. oidcUnlinked: 'Compte dissocié.',
  2542. },
  2543. // Session Policy (#1706)
  2544. sessionPolicy: {
  2545. title: 'Politique de session',
  2546. description: 'Durée maximale des sessions pour les nouvelles connexions utilisateur. Les jetons déjà émis conservent leur expiration d\'origine.',
  2547. preset24h: '24 heures',
  2548. preset7d: '7 jours',
  2549. preset30d: '30 jours',
  2550. customHoursLabel: 'Durée de session personnalisée en heures',
  2551. hoursSuffix: 'heures',
  2552. warning: 'Les sessions plus longues réduisent la protection de déconnexion automatique. Recommandé uniquement pour les déploiements mono-utilisateur de confiance.',
  2553. },
  2554. // OIDC provider settings
  2555. oidc: {
  2556. title: 'Fournisseurs SSO / OIDC',
  2557. desc: 'Configurez des fournisseurs OpenID Connect pour l\'authentification unique.',
  2558. addProvider: 'Ajouter un fournisseur',
  2559. newProvider: 'Nouveau fournisseur',
  2560. empty: 'Aucun fournisseur OIDC configuré.',
  2561. created: 'Fournisseur créé.',
  2562. updated: 'Fournisseur mis à jour.',
  2563. deleted: 'Fournisseur supprimé.',
  2564. refreshIcon: 'Actualiser l\'icône',
  2565. removeIcon: 'Supprimer l\'icône',
  2566. iconRefreshed: 'Icône actualisée.',
  2567. iconRemoved: 'Icône supprimée.',
  2568. iconFetchFailed: 'Impossible de récupérer l\'icône depuis l\'URL du fournisseur.',
  2569. deleteTitle: 'Supprimer le fournisseur',
  2570. deleteMessage: 'Supprimer "{{name}}" ? Tous les comptes liés seront déconnectés.',
  2571. form: {
  2572. name: 'Nom d\'affichage',
  2573. issuerUrl: 'URL de l\'émetteur',
  2574. clientId: 'ID client',
  2575. clientSecret: 'Secret client',
  2576. scopes: 'Portées',
  2577. iconUrl: 'URL de l\'icône (optionnel)',
  2578. enabled: 'Activé',
  2579. autoCreate: 'Créer les utilisateurs automatiquement',
  2580. autoCreateDesc: 'Crée automatiquement un compte local lors de la première connexion.',
  2581. autoLink: 'Lier automatiquement les comptes existants',
  2582. autoLinkDesc: 'Lie les comptes locaux existants par e-mail lors de la première connexion.',
  2583. secretHint: 'laisser vide pour conserver',
  2584. secretPlaceholder: 'nouveau secret',
  2585. emailClaim: 'Claim e-mail',
  2586. emailClaimDesc: "Claim JWT utilisé comme identité e-mail. Utiliser 'preferred_username' ou 'upn' pour Azure Entra ID (qui n'envoie pas email_verified). Utiliser uniquement des noms de claims de confiance.",
  2587. emailClaimPlaceholder: 'e-mail',
  2588. emailClaimCustomClaimAutoLinkWarning: 'Les revendications personnalisées sont sûres pour la liaison auto uniquement lorsque la valeur est administrée par le tenant (par ex. Azure Entra ID upn / preferred_username). N\'activez pas la liaison auto si votre IdP permet aux utilisateurs de s\'auto-attribuer cette revendication.',
  2589. requireEmailVerified: 'Exiger la vérification e-mail',
  2590. requireEmailVerifiedDesc: "N'accepter le claim e-mail que si le fournisseur le marque comme vérifié.",
  2591. requireEmailVerifiedWarning: "Avertissement : l'e-mail sera accepté sans vérification. À utiliser uniquement avec des fournisseurs de confiance.",
  2592. requireEmailVerifiedAutoLink: 'Désactiver le lien automatique d\'abord pour modifier ce paramètre.',
  2593. defaultGroup: 'Groupe par défaut',
  2594. defaultGroupDesc: 'Groupe attribué aux utilisateurs créés automatiquement. Repli sur Viewers si non défini.',
  2595. defaultGroupViewersFallback: 'Viewers (par défaut)',
  2596. autologin: 'Connexion automatique',
  2597. autologinDesc: 'Rediriger les visiteurs non authentifiés directement vers ce fournisseur. Un seul fournisseur peut porter cet indicateur.',
  2598. },
  2599. },
  2600. // TODO: translate encryption keys
  2601. encryption: {
  2602. title: 'Statut du chiffrement MFA',
  2603. enabledFromEnv: 'Chiffrement au repos activé (clé depuis la variable d\'environnement MFA_ENCRYPTION_KEY)',
  2604. enabledFromFile: 'Chiffrement au repos activé (clé chargée depuis le répertoire de données)',
  2605. enabledGenerated: 'Chiffrement au repos activé avec une clé auto-générée',
  2606. notConfigured: 'Chiffrement au repos non configuré',
  2607. notConfiguredDesc: 'Les secrets TOTP et client_secrets OIDC sont stockés en clair. Définissez MFA_ENCRYPTION_KEY ou redémarrez Bambuddy avec un répertoire de données accessible en écriture pour en générer un automatiquement.',
  2608. allEncrypted: 'Tous les secrets MFA sont chiffrés au repos.',
  2609. legacyRowsLabel: 'Lignes héritées en clair',
  2610. encryptedRowsLabel: 'Lignes chiffrées',
  2611. legacyRowsWarning: '{{count}} ligne(s) héritée(s) en clair détectée(s). Réenregistrez le fournisseur OIDC ou réinscrivez l\'application d\'authentification de l\'utilisateur pour migrer vers le stockage chiffré.',
  2612. backupHint: 'La clé auto-générée est stockée dans DATA_DIR/.mfa_encryption_key et incluse dans les ZIP de sauvegarde locale. Conservez vos sauvegardes en sécurité ou définissez MFA_ENCRYPTION_KEY explicitement.',
  2613. decryptionBrokenTitle: 'Clé de chiffrement manquante',
  2614. decryptionBrokenError: '{{count}} enregistrement(s) chiffré(s) ne peuvent pas être déchiffrés car la clé de chiffrement n\'est plus disponible. Restaurez le MFA_ENCRYPTION_KEY précédent ou DATA_DIR/.mfa_encryption_key pour récupérer.',
  2615. migrationErrorWarning: "{{count}} ligne(s) ancienne(s) n'ont pas pu être rechiffrée(s) au démarrage. Vérifiez les journaux du serveur et redémarrez Bambuddy pour réessayer.",
  2616. },
  2617. spoolbuddy: {
  2618. infoTitle: 'Périphériques SpoolBuddy',
  2619. infoBody: 'Les bornes SpoolBuddy s\'enregistrent automatiquement via heartbeat. Désinscrivez ici un appareil qui n\'est plus utilisé ou un doublon obsolète laissé par un crash du daemon.',
  2620. duplicatesTitle: '{{count}} appareils enregistrés',
  2621. duplicatesBody: 'Seul le premier appareil enregistré est utilisé par l\'interface du kiosk. Si l\'un de ces appareils est un doublon obsolète issu d\'un crash, désinscrivez-le — un appareil en ligne se ré-enregistrera automatiquement au prochain heartbeat.',
  2622. empty: 'Aucun appareil SpoolBuddy enregistré pour le moment.',
  2623. online: 'En ligne',
  2624. offline: 'Hors ligne',
  2625. unregister: 'Désinscrire',
  2626. unregisterSuccess: 'Appareil désinscrit',
  2627. unregisterError: 'Échec de la désinscription',
  2628. confirmTitle: 'Désinscrire l\'appareil SpoolBuddy ?',
  2629. confirmBody: 'Cela retirera "{{hostname}}" ({{deviceId}}) de la base de données. Si l\'appareil est en ligne, il se ré-enregistrera automatiquement au prochain heartbeat.',
  2630. ipAddress: 'Adresse IP',
  2631. firmware: 'Micrologiciel',
  2632. lastSeen: 'Dernière activité',
  2633. daemonUptime: 'Uptime du daemon',
  2634. systemUptime: 'Uptime système',
  2635. never: 'jamais',
  2636. nfc: 'NFC',
  2637. scale: 'Balance',
  2638. cpuTemp: 'Temp. CPU',
  2639. cpuLoad: 'Charge CPU',
  2640. memory: 'Mémoire',
  2641. disk: 'Disque',
  2642. update: 'Mettre à jour',
  2643. updateConfirmTitle: 'Mettre à jour le daemon Spoolbuddy ?',
  2644. updateConfirmBody: 'Déclencher une mise à jour logicielle sur "{{hostname}}" ? Le daemon redémarrera une fois la mise à jour appliquée.',
  2645. restartBrowser: 'Redémarrer le navigateur',
  2646. restartBrowserConfirmTitle: 'Redémarrer le navigateur du kiosk ?',
  2647. restartBrowserConfirmBody: 'Redémarrer le navigateur du kiosk sur "{{hostname}}" ? L\'écran sera momentanément vide.',
  2648. restartDaemon: 'Redémarrer le daemon',
  2649. restartDaemonConfirmTitle: 'Redémarrer le daemon Spoolbuddy ?',
  2650. restartDaemonConfirmBody: 'Redémarrer le daemon Spoolbuddy sur "{{hostname}}" ? L\'appareil sera hors ligne quelques secondes.',
  2651. reboot: 'Redémarrer',
  2652. rebootConfirmTitle: 'Redémarrer l\'appareil ?',
  2653. rebootConfirmBody: 'Redémarrer "{{hostname}}" ? L\'appareil sera hors ligne pendant environ une minute.',
  2654. shutdown: 'Éteindre',
  2655. shutdownConfirmTitle: 'Éteindre l\'appareil ?',
  2656. shutdownConfirmBody: 'Éteindre "{{hostname}}" ? Vous aurez besoin d\'un accès physique pour le rallumer.',
  2657. commandConfirm: 'Confirmer',
  2658. commandQueued: 'Commande en file d\'attente',
  2659. commandError: 'Échec de l\'envoi de la commande',
  2660. },
  2661. pipelineLimits: {
  2662. title: 'Limites des pipelines du trancheur',
  2663. maxCopiesLabel: 'Copies maximales par exécution',
  2664. maxCopiesDesc: 'Limite supérieure du nombre de copies que les opérateurs peuvent demander lors de l\'exécution d\'un pipeline. La limite stricte côté serveur est 1000.',
  2665. },
  2666. // Slicer Pipelines (#1425): list/edit/delete preset bundles users saved
  2667. // from the Slice dialog. Lives in Settings → Workflow → Pipelines sub-tab.
  2668. pipelines: {
  2669. title: 'Pipelines du Trancheur',
  2670. subtitle: 'Lots de préréglages réutilisables (imprimante + processus + filaments + type de plateau). Enregistrez-en un depuis le dialogue Trancher et appliquez-le en un clic au fichier suivant.',
  2671. loading: 'Chargement des pipelines…',
  2672. loadError: 'Impossible de charger les pipelines.',
  2673. confirmDelete: 'Supprimer ce pipeline ? Cela ne peut pas être annulé.',
  2674. staleWarning: 'Un ou plusieurs préréglages référencés n\'existent plus. Réenregistrez ce pipeline depuis le dialogue Trancher pour le corriger.',
  2675. empty: {
  2676. title: 'Aucun pipeline pour le moment.',
  2677. howto: 'Ouvrez le dialogue Trancher pour n\'importe quel fichier, choisissez imprimante / processus / filaments / plateau, puis cliquez sur « Enregistrer comme pipeline ». Vos pipelines enregistrés apparaîtront ici.',
  2678. },
  2679. field: {
  2680. name: 'Nom du pipeline',
  2681. description: 'Description',
  2682. targetPrinter: 'Imprimante cible',
  2683. noTarget: '— Aucune cible —',
  2684. targetKind: 'Type de cible',
  2685. targetKindSpecific: 'Imprimante spécifique',
  2686. targetKindClass: 'Classe d\'imprimante',
  2687. targetModelClass: 'Modèle d\'imprimante',
  2688. fanoutStrategy: 'Stratégie de distribution',
  2689. fanout: {
  2690. max_parallel: 'Max parallèle — distribuer sur toute imprimante libre correspondante',
  2691. round_robin: 'Round robin — alterner entre imprimantes éligibles',
  2692. fill_one_first: 'Remplir une d\'abord — épingler toutes les copies à une imprimante',
  2693. },
  2694. fanoutShort: {
  2695. max_parallel: 'parallèle',
  2696. round_robin: 'round robin',
  2697. fill_one_first: 'remplir une',
  2698. },
  2699. },
  2700. action: {
  2701. save: 'Enregistrer',
  2702. cancel: 'Annuler',
  2703. rename: 'Renommer',
  2704. delete: 'Supprimer',
  2705. },
  2706. slot: {
  2707. printer: 'Imprimante',
  2708. process: 'Processus',
  2709. filament: 'Filament',
  2710. filamentN: 'Filament {{n}}',
  2711. filamentAll: 'Tous les {{n}} emplacements',
  2712. bed: 'Plateau',
  2713. },
  2714. group: {
  2715. profiles: 'Profils',
  2716. filaments: 'Filaments',
  2717. },
  2718. searchPlaceholder: 'Rechercher des pipelines…',
  2719. filterTargetType: 'Filtrer par type de cible',
  2720. filterTarget: 'Filtrer par cible',
  2721. filter: {
  2722. all: 'Toutes les cibles',
  2723. noTarget: 'Aucune cible',
  2724. count: '{{shown}} / {{total}}',
  2725. noMatches: 'Aucun pipeline ne correspond aux filtres actuels.',
  2726. },
  2727. toast: {
  2728. saved: 'Pipeline enregistré',
  2729. saveFailed: 'Échec de l\'enregistrement',
  2730. deleted: 'Pipeline supprimé',
  2731. deleteFailed: 'Échec de la suppression',
  2732. },
  2733. noTargetHint: 'Définissez une imprimante cible pour exécuter',
  2734. noTargetWarning: 'Définissez une imprimante cible avant d\'exécuter ce pipeline.',
  2735. runs: {
  2736. lastRun: 'Dernière exécution',
  2737. status: {
  2738. queued: 'en file',
  2739. slicing: 'tranchage',
  2740. dispatching: 'envoi',
  2741. in_progress: 'impression',
  2742. completed: 'terminé',
  2743. failed: 'échec',
  2744. partial_failure: 'échec partiel',
  2745. cancelled: 'annulé',
  2746. },
  2747. },
  2748. },
  2749. },
  2750. // Notifications (for push notifications)
  2751. notification: {
  2752. printStarted: {
  2753. title: 'Impression démarrée',
  2754. body: '{{printer}} : {{filename}} commence l\'impression',
  2755. },
  2756. printCompleted: {
  2757. title: 'Impression terminée',
  2758. body: '{{printer}} : {{filename}} a réussi',
  2759. },
  2760. printFailed: {
  2761. title: 'Impression échouée',
  2762. body: '{{printer}} : {{filename}} a échoué',
  2763. },
  2764. printStopped: {
  2765. title: 'Impression arrêtée',
  2766. body: '{{printer}} : {{filename}} a été arrêtée',
  2767. },
  2768. printProgress: {
  2769. title: 'Progression d\'impression',
  2770. body: '{{printer}} : {{filename}} est à {{percent}}%',
  2771. },
  2772. printerOffline: {
  2773. title: 'Imprimante hors ligne',
  2774. body: '{{printer}} est déconnectée',
  2775. },
  2776. printerError: {
  2777. title: 'Erreur imprimante',
  2778. body: '{{printer}} : {{error}}',
  2779. },
  2780. filamentLow: {
  2781. title: 'Filament bas',
  2782. body: '{{printer}} : Le filament est presque vide',
  2783. },
  2784. maintenanceDue: {
  2785. title: 'Maintenance due',
  2786. body: '{{printer}} : {{items}} demandent votre attention',
  2787. },
  2788. },
  2789. // Errors
  2790. errors: {
  2791. generic: 'Une erreur est survenue',
  2792. networkError: 'Erreur réseau. Vérifiez votre connexion.',
  2793. notFound: 'Non trouvé',
  2794. unauthorized: 'Non autorisé',
  2795. serverError: 'Erreur serveur',
  2796. validationError: 'Vérifiez vos saisies',
  2797. printerConnectionFailed: 'Échec connexion imprimante',
  2798. saveFailed: 'Échec enregistrement',
  2799. deleteFailed: 'Échec suppression',
  2800. loadFailed: 'Échec chargement',
  2801. },
  2802. // HMS Errors modal
  2803. hmsErrors: {
  2804. title: 'Erreurs - {{name}}',
  2805. noErrors: 'Aucune erreur',
  2806. viewOnWiki: 'Voir sur le Wiki Bambu Lab',
  2807. unknownCode: 'Code HMS inconnu — consultez le wiki Bambu Lab pour plus de détails.',
  2808. clearInstructions: 'Effacez les erreurs sur l\'imprimante pour les retirer ici.',
  2809. clearErrors: 'Effacer les erreurs',
  2810. clearSuccess: 'Erreurs HMS effacées',
  2811. clearFailed: 'Échec de l\'effacement des erreurs HMS',
  2812. actionSuccess: 'Action envoyée à l\'imprimante',
  2813. actionFailed: 'Échec de l\'envoi de l\'action',
  2814. runoutExpectedSlot: 'Le filament est épuisé dans {{ranOut}}. L\'imprimante attend maintenant du filament compatible dans {{expected}}. Insérez une bobine dans {{expected}}, puis sélectionnez Réessayer.',
  2815. runoutExpectedSlotOnly: 'L\'imprimante attend du filament compatible dans {{expected}}. Insérez-y une bobine, puis sélectionnez Réessayer.',
  2816. runoutSlotUnknown: 'Le filament est épuisé et l\'impression est en pause. Bambuddy n\'a pas pu déterminer quel emplacement l\'imprimante attend désormais — vérifiez l\'écran de l\'imprimante pour l\'emplacement demandé.',
  2817. actions: {
  2818. RESUME_PRINTING: 'Reprendre l\'impression',
  2819. RESUME_PRINTING_DEFECTS: 'Reprendre (défauts acceptables)',
  2820. RESUME_PRINTING_PROBELM_SOLVED: 'Reprendre (problème résolu)',
  2821. STOP_PRINTING: 'Arrêter l\'impression',
  2822. CHECK_ASSISTANT: 'Ouvrir l\'assistant',
  2823. FILAMENT_EXTRUDED: 'Filament extrudé, continuer',
  2824. RETRY_FILAMENT_EXTRUDED: 'Pas encore extrudé, réessayer',
  2825. CONTINUE: 'Terminé, continuer',
  2826. LOAD_VIRTUAL_TRAY: 'Charger le filament',
  2827. OK_BUTTON: 'OK',
  2828. FILAMENT_LOAD_RESUME: 'Filament chargé, reprendre',
  2829. JUMP_TO_LIVEVIEW: 'Voir en direct',
  2830. NO_REMINDER_NEXT_TIME: 'Ne plus rappeler la prochaine fois',
  2831. REFRESH_NOZZLE: 'Revérifier',
  2832. IGNORE_NO_REMINDER_NEXT_TIME: 'Ignorer et ne plus rappeler',
  2833. IGNORE_RESUME: 'Ignorer et reprendre',
  2834. PROBLEM_SOLVED_RESUME: 'Problème résolu, reprendre',
  2835. TURN_OFF_FIRE_ALARM: 'Compris, désactiver l\'alarme incendie',
  2836. RETRY_PROBLEM_SOLVED: 'Réessayer (problème résolu)',
  2837. CANCLE: 'Annuler',
  2838. STOP_DRYING: 'Arrêter le séchage',
  2839. PROCEED: 'Continuer',
  2840. OK_JUMP_RACK: 'OK',
  2841. ABORT: 'Annuler',
  2842. DISABLE_PURIFICATION: 'Désactiver la purification pour cette impression',
  2843. DONT_REMIND_NEXT_TIME: 'Ne plus me rappeler',
  2844. DBL_CHECK_CANCEL: 'Annuler',
  2845. DBL_CHECK_DONE: 'Terminé',
  2846. DBL_CHECK_RETRY: 'Réessayer',
  2847. DBL_CHECK_RESUME: 'Reprendre',
  2848. DBL_CHECK_OK: 'Confirmer',
  2849. REMOVE_CLOSE_BTN: 'Fermer',
  2850. },
  2851. },
  2852. // MQTT Debug modal
  2853. mqttDebug: {
  2854. title: 'Journal de débogage MQTT',
  2855. searchPlaceholder: 'Chercher topic ou message...',
  2856. noMessages: 'Aucun message enregistré',
  2857. startLoggingHint: 'Cliquez sur "Démarrer" pour capturer les messages MQTT',
  2858. noMessagesMatch: 'Aucun message ne correspond',
  2859. adjustFilterHint: 'Ajustez votre recherche',
  2860. incoming: 'Entrant',
  2861. outgoing: 'Sortant',
  2862. loggingStopped: 'Enregistrement arrêté',
  2863. loggingActive: 'Enregistrement actif - rafraîchissement auto',
  2864. startLogging: 'Démarrer',
  2865. stopLogging: 'Arrêter',
  2866. clearLog: 'Effacer le journal',
  2867. topic: 'Sujet',
  2868. timestamp: 'Horodatage',
  2869. direction: 'Direction',
  2870. all: 'Tous',
  2871. },
  2872. // Printer File Manager modal (printer internal storage)
  2873. printerFiles: {
  2874. title: 'Gestionnaire de fichiers',
  2875. storageUsed: 'Utilisé :',
  2876. storageFree: 'Libre :',
  2877. filterPlaceholder: 'Filtrer les fichiers...',
  2878. deleteButton: 'Supprimer',
  2879. deleteFiles: 'Supprimer {{count}} fichiers',
  2880. deleteFileConfirm: 'Supprimer "{{name}}" ?',
  2881. deleteFilesConfirm: 'Supprimer les {{count}} fichiers sélectionnés ?',
  2882. noFiles: 'Aucun fichier sur l\'imprimante',
  2883. loadingFiles: 'Chargement...',
  2884. failedToLoad: 'Échec chargement fichiers',
  2885. toast: {
  2886. filesDeleted: '{{count}} fichier(s) supprimé(s)',
  2887. deleteFailed: 'Échec suppression : {{error}}',
  2888. },
  2889. },
  2890. // Confirmations
  2891. confirm: {
  2892. delete: 'Voulez-vous vraiment supprimer cet élément ?',
  2893. unsavedChanges: 'Changements non sauvegardés. Voulez-vous quitter ?',
  2894. clearQueue: 'Voulez-vous vraiment vider la file d\'attente ?',
  2895. },
  2896. // Login page
  2897. login: {
  2898. title: 'Connexion Bambuddy',
  2899. subtitle: 'Connectez-vous à votre compte',
  2900. username: 'Utilisateur',
  2901. usernamePlaceholder: 'Entrez votre utilisateur',
  2902. usernameOrEmail: 'Utilisateur ou Email',
  2903. usernameOrEmailPlaceholder: 'Utilisateur ou @ Email',
  2904. password: 'Mot de passe',
  2905. passwordPlaceholder: 'Entrez votre mot de passe',
  2906. signIn: 'Se connecter',
  2907. signingIn: 'Connexion...',
  2908. rememberMe: 'Se souvenir de moi',
  2909. forgotPassword: 'Mot de passe oublié ?',
  2910. autologinFailed: 'La connexion SSO automatique a échoué. Choisissez un fournisseur ci-dessous pour continuer.',
  2911. localDisabledNotice: 'La connexion locale est désactivée. Utilisez l\'un des fournisseurs SSO ci-dessous.',
  2912. loginSuccess: 'Connecté avec succès',
  2913. loginFailed: 'Échec de connexion',
  2914. enterCredentials: 'Entrez vos identifiants',
  2915. enterEmail: 'Veuillez entrer votre adresse e-mail',
  2916. oidcLoginFailed: 'Échec de la connexion OIDC',
  2917. oidcErrors: {
  2918. providerError: "Le fournisseur d'identité a renvoyé une erreur",
  2919. missingParameters: 'Il manque des paramètres requis dans le callback OIDC',
  2920. invalidState: "L'état OIDC est invalide ou a déjà été utilisé",
  2921. stateExpired: 'La session OIDC a expiré — veuillez réessayer',
  2922. providerNotFound: 'Fournisseur OIDC introuvable',
  2923. discoveryFailed: 'Impossible de récupérer le document de découverte OIDC',
  2924. invalidDiscovery: 'Le document de découverte OIDC est invalide',
  2925. networkError: "Erreur réseau lors de l'échange de jeton OIDC",
  2926. badResponse: "Réponse inattendue lors de l'échange de jeton OIDC",
  2927. noIdToken: "Le fournisseur OIDC n'a pas renvoyé de jeton d'identité",
  2928. validationFailed: 'La validation du jeton OIDC a échoué',
  2929. nonceMismatch: 'Le nonce OIDC ne correspond pas — possible attaque par rejeu',
  2930. missingSubClaim: 'Le jeton OIDC est dépourvu de la revendication sub',
  2931. noLinkedAccount: 'Aucun compte local est lié à cette identité OIDC',
  2932. accountInactive: 'Votre compte est inactif',
  2933. userResolutionFailed: 'Impossible de résoudre votre compte',
  2934. internalError: 'Une erreur interne est survenue lors de la connexion OIDC',
  2935. tokenExchangeFailed: "L'échange de jeton OIDC a échoué",
  2936. },
  2937. forgotPasswordTitle: 'Mot de passe oublié',
  2938. forgotPasswordMessage: 'Contactez votre administrateur pour réinitialiser votre accès.',
  2939. forgotPasswordEmailMessage: 'Entrez votre email pour recevoir un nouveau mot de passe.',
  2940. emailAddress: 'Adresse Email',
  2941. emailPlaceholder: 'votre.email@exemple.com',
  2942. cancel: 'Annuler',
  2943. sending: 'Envoi...',
  2944. sendResetEmail: 'Envoyer l\'email',
  2945. howToReset: 'Comment réinitialiser :',
  2946. resetStep1: 'Contactez votre admin Bambuddy',
  2947. resetStep2: 'Demandez une réinitialisation dans la Gestion Utilisateurs',
  2948. resetStep3: 'Il vous donnera un mot de passe temporaire',
  2949. resetStep4: 'Connectez-vous et changez-le dans les Paramètres',
  2950. gotIt: 'Compris',
  2951. twoFA: {
  2952. title: 'Authentification à deux facteurs',
  2953. subtitle: 'Votre compte est protégé par la 2FA. Saisissez le code de vérification ci-dessous.',
  2954. methodAuthenticator: "Application d'authentification",
  2955. methodEmail: 'Code par e-mail',
  2956. methodBackup: 'Code de récupération',
  2957. instructionsTotp: "Ouvrez votre application d'authentification et saisissez le code à 6 chiffres pour Bambuddy.",
  2958. instructionsEmail: 'Un code à 6 chiffres a été envoyé à votre adresse e-mail. Il est valable 10 minutes.',
  2959. instructionsEmailNotSent: 'Cliquez ci-dessous pour recevoir un code de vérification par e-mail.',
  2960. instructionsBackup: "Saisissez l'un de vos codes de récupération à 8 caractères. Chaque code ne peut être utilisé qu'une seule fois.",
  2961. sendCodeButton: 'Envoyer le code par e-mail',
  2962. sendingCode: 'Envoi en cours...',
  2963. resendCode: 'Renvoyer le code',
  2964. codeLabel: 'Code de vérification',
  2965. backupCodeLabel: 'Code de récupération',
  2966. codePlaceholder: '000000',
  2967. backupCodePlaceholder: 'XXXXXXXX',
  2968. verifyButton: 'Vérifier',
  2969. verifyingButton: 'Vérification en cours...',
  2970. backToLogin: '← Retour à la connexion',
  2971. orContinueWith: 'ou continuer avec',
  2972. signInWith: 'Se connecter avec {{provider}}',
  2973. enterCode: 'Veuillez entrer le code de vérification',
  2974. sendCodeFailed: 'Échec de l\'envoi du code de vérification',
  2975. invalidCode: 'Code invalide. Veuillez réessayer.',
  2976. },
  2977. resetPassword: {
  2978. title: 'Définir un nouveau mot de passe',
  2979. subtitle: 'Saisissez et confirmez votre nouveau mot de passe ci-dessous.',
  2980. newPassword: 'Nouveau mot de passe',
  2981. newPasswordPlaceholder: 'Au moins 8 caractères',
  2982. confirmPassword: 'Confirmer le mot de passe',
  2983. confirmPasswordPlaceholder: 'Répéter le nouveau mot de passe',
  2984. saving: 'Enregistrement…',
  2985. submit: 'Définir le mot de passe',
  2986. backToLogin: 'Retour à la connexion',
  2987. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  2988. passwordTooShort: 'Le mot de passe doit contenir au moins 8 caractères',
  2989. resetFailed: 'Échec de la réinitialisation. Le lien a peut-être expiré.',
  2990. },
  2991. },
  2992. // Setup page
  2993. setup: {
  2994. title: 'Configuration Bambuddy',
  2995. subtitle: 'Configurez l\'authentification',
  2996. enableAuth: 'Activer l\'authentification',
  2997. adminAccount: 'Compte Admin',
  2998. adminAccountDesc: 'Si des admins existent, ils seront utilisés. Sinon, créez-en un ci-dessous.',
  2999. adminUsername: 'Utilisateur Admin',
  3000. adminPassword: 'Mot de passe Admin',
  3001. optionalIfAdminExists: '(optionnel si admin existe)',
  3002. adminUsernamePlaceholder: 'Nom admin (optionnel)',
  3003. adminPasswordPlaceholder: 'Mdp admin (optionnel)',
  3004. confirmPassword: 'Confirmer mdp',
  3005. confirmPasswordPlaceholder: 'Confirmez mdp admin',
  3006. settingUp: 'Configuration...',
  3007. completeSetup: 'Terminer la configuration',
  3008. toast: {
  3009. authEnabledAdminCreated: 'Authentification activée et admin créé',
  3010. authEnabledExistingAdmins: 'Authentification activée avec admins existants',
  3011. setupCompleted: 'Configuration terminée',
  3012. enterBothCredentials: 'Entrez les deux ou laissez vide pour utiliser les admins existants',
  3013. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  3014. passwordTooShort: 'Minimum 6 caractères',
  3015. },
  3016. },
  3017. // Password change
  3018. changePassword: {
  3019. title: 'Changer le mot de passe',
  3020. currentPassword: 'Mot de passe actuel',
  3021. currentPasswordPlaceholder: 'Entrez mdp actuel',
  3022. newPassword: 'Nouveau mot de passe',
  3023. newPasswordPlaceholder: 'Nouveau mdp (min 6 char)',
  3024. confirmPassword: 'Confirmer nouveau mdp',
  3025. confirmPasswordPlaceholder: 'Confirmez nouveau mdp',
  3026. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  3027. passwordTooShort: 'Minimum 6 caractères',
  3028. changing: 'Changement...',
  3029. success: 'Mot de passe modifié',
  3030. failed: 'Échec modification',
  3031. },
  3032. // Plate detection alert
  3033. plateAlert: {
  3034. title: 'Impression en Pause !',
  3035. message: 'Objets détectés sur le plateau. L\'impression a été suspendue automatiquement. Videz le plateau avant de reprendre.',
  3036. understand: 'J\'ai compris',
  3037. },
  3038. // Camera page
  3039. camera: {
  3040. title: 'Vue Caméra',
  3041. invalidPrinterId: 'ID imprimante invalide',
  3042. live: 'Direct',
  3043. snapshot: 'Instantané',
  3044. restartStream: 'Redémarrer le flux',
  3045. refreshSnapshot: 'Rafraîchir l\'image',
  3046. fullscreen: 'Plein écran',
  3047. exitFullscreen: 'Quitter plein écran',
  3048. connectingToCamera: 'Connexion caméra...',
  3049. capturingSnapshot: 'Capture...',
  3050. connectionLost: 'Connexion perdue',
  3051. connectionFailed: 'Échec connexion caméra',
  3052. reconnecting: 'Reconnexion dans {{countdown}}s... (essai {{attempt}}/{{max}})',
  3053. reconnectNow: 'Reconnexion immédiate',
  3054. cameraUnavailable: 'Caméra indisponible',
  3055. cameraUnavailableDesc: 'Vérifiez que l\'imprimante est allumée.',
  3056. noCamera: 'Aucune caméra disponible',
  3057. retry: 'Réessayer',
  3058. cameraStream: 'Flux caméra',
  3059. zoomOut: 'Zoom arrière',
  3060. zoomIn: 'Zoom avant',
  3061. resetZoom: 'Réinitialiser zoom',
  3062. recording: 'Enregistrement',
  3063. startRecording: 'Démarrer l\'enregistrement',
  3064. stopRecording: 'Arrêter l\'enregistrement',
  3065. chamberLight: 'Basculer lumière chambre',
  3066. unavailable: 'Caméra indisponible',
  3067. diagnose: {
  3068. button: 'Diagnostic',
  3069. modalTitle: 'Diagnostic de la caméra',
  3070. running: 'Diagnostic en cours...',
  3071. runFailed: 'Impossible d\'exécuter le diagnostic : {{error}}',
  3072. retry: 'Relancer',
  3073. stage: {
  3074. tcp_reachable: 'Accessibilité réseau',
  3075. first_frame: 'Capture d\'image',
  3076. live_stream_active: 'Flux en direct actif',
  3077. },
  3078. summary: {
  3079. all_ok: 'La caméra fonctionne. Toutes les étapes du diagnostic ont réussi.',
  3080. live_stream_active_healthy: 'La caméra diffuse actuellement avec des images récentes — aucun test nécessaire.',
  3081. printer_unreachable: 'L\'imprimante n\'est pas joignable. Vérifiez l\'adresse IP, la connexion réseau et que l\'imprimante est allumée.',
  3082. camera_port_closed: 'L\'imprimante répond mais le port de la caméra est fermé. Assurez-vous que le mode LAN et le mode développeur sont activés dans les paramètres de l\'imprimante.',
  3083. no_frame: 'Connexion à la caméra établie mais aucune image reçue. Réessayez ou vérifiez que la caméra est activée dans les paramètres de l\'imprimante.',
  3084. unknown_failure: 'Le diagnostic de la caméra a échoué pour une raison inconnue. Consultez le journal de support pour plus de détails.',
  3085. },
  3086. meta: {
  3087. protocol: 'Protocole',
  3088. port: 'Port',
  3089. profile: 'Profil',
  3090. },
  3091. },
  3092. },
  3093. // Groups management
  3094. groups: {
  3095. title: 'Gestion des Groupes',
  3096. subtitle: 'Gérez les permissions pour le contrôle d\'accès',
  3097. backToSettings: 'Retour aux paramètres',
  3098. createGroup: 'Créer un groupe',
  3099. noPermission: 'Accès refusé.',
  3100. system: 'Système',
  3101. noDescription: 'Pas de description',
  3102. usersCount: '{{count}} utilisateurs',
  3103. permissionsCount: '{{count}} permissions',
  3104. edit: 'Modifier',
  3105. delete: 'Supprimer',
  3106. toast: {
  3107. created: 'Groupe créé',
  3108. updated: 'Groupe mis à jour',
  3109. deleted: 'Groupe supprimé',
  3110. enterGroupName: 'Entrez un nom de groupe',
  3111. },
  3112. modal: {
  3113. editGroup: 'Modifier le groupe',
  3114. createGroup: 'Créer un groupe',
  3115. cancel: 'Annuler',
  3116. saving: 'Enregistrement...',
  3117. creating: 'Création...',
  3118. saveChanges: 'Enregistrer',
  3119. },
  3120. form: {
  3121. groupName: 'Nom du groupe',
  3122. groupNamePlaceholder: 'Nom du groupe',
  3123. systemGroupWarning: 'Les groupes système sont fixes',
  3124. description: 'Description',
  3125. descriptionPlaceholder: 'Description (optionnel)',
  3126. permissions: 'Permissions ({{count}} sélectionnées)',
  3127. },
  3128. deleteModal: {
  3129. title: 'Supprimer le groupe',
  3130. message: 'Les utilisateurs de ce groupe perdront ces permissions.',
  3131. confirm: 'Supprimer',
  3132. },
  3133. editor: {
  3134. title: 'Modifier le groupe',
  3135. createTitle: 'Créer un groupe',
  3136. search: 'Rechercher des permissions...',
  3137. selectAll: 'Tout sélectionner',
  3138. clearAll: 'Tout désélectionner',
  3139. permissionsSelected: '{{count}} sélectionnée(s)',
  3140. noResults: 'Aucune permission ne correspond à votre recherche',
  3141. websocketHint: "Requis pour les mises à jour en direct. Sans cette permission, l'interface bascule sur une actualisation périodique.",
  3142. },
  3143. },
  3144. // Users management
  3145. users: {
  3146. title: 'Gestion des Utilisateurs',
  3147. subtitle: 'Gérez les accès à Bambuddy',
  3148. backToSettings: 'Retour aux paramètres',
  3149. createUser: 'Créer un utilisateur',
  3150. noPermission: 'Accès refusé.',
  3151. admin: 'Administrateur',
  3152. noGroups: 'Aucun groupe',
  3153. active: 'Actif',
  3154. inactive: 'Inactif',
  3155. edit: 'Modifier',
  3156. delete: 'Supprimer',
  3157. system: 'Système',
  3158. noGroupsAvailable: 'Aucun groupe disponible',
  3159. table: {
  3160. username: 'Utilisateur',
  3161. groups: 'Groupes',
  3162. status: 'Statut',
  3163. actions: 'Actions',
  3164. },
  3165. toast: {
  3166. created: 'Utilisateur créé',
  3167. updated: 'Utilisateur mis à jour',
  3168. deleted: 'Utilisateur supprimé',
  3169. fillRequired: 'Remplissez les champs requis',
  3170. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  3171. passwordTooShort: 'Minimum 6 caractères',
  3172. ldapProvisioned: 'Utilisateur LDAP "{{username}}" provisionné',
  3173. },
  3174. modal: {
  3175. createUser: 'Créer utilisateur',
  3176. editUser: 'Modifier utilisateur',
  3177. cancel: 'Annuler',
  3178. creating: 'Création...',
  3179. saving: 'Enregistrement...',
  3180. saveChanges: 'Enregistrer',
  3181. advancedAuthSubtitle: 'avec Authentification Avancée',
  3182. // Manual LDAP provisioning (#1298) — English fallbacks
  3183. tabsAriaLabel: 'Source utilisateur',
  3184. localTab: 'Local',
  3185. ldapTab: 'LDAP',
  3186. ldapSearchLabel: 'Rechercher dans l\'annuaire',
  3187. ldapSearchPlaceholder: 'Tapez un nom d\'utilisateur, un nom ou un e-mail...',
  3188. ldapMinChars: 'Tapez au moins 2 caractères pour rechercher',
  3189. ldapTypeToSearch: 'Commencez à taper pour rechercher dans l\'annuaire LDAP',
  3190. ldapSearching: 'Recherche dans l\'annuaire...',
  3191. ldapNoResults: 'Aucun utilisateur correspondant dans l\'annuaire',
  3192. ldapSearchError: 'Échec de la recherche dans l\'annuaire. Vérifiez l\'état du serveur LDAP.',
  3193. ldapAlreadyProvisioned: 'Déjà provisionné',
  3194. ldapSelectedLabel: 'Sélectionné',
  3195. ldapProvision: 'Provisionner l\'utilisateur',
  3196. ldapProvisioning: 'Provisionnement...',
  3197. ldapErrorProvision: 'Échec du provisionnement. Vérifiez l\'état du serveur LDAP et réessayez.',
  3198. },
  3199. form: {
  3200. username: 'Utilisateur',
  3201. usernamePlaceholder: 'Nom utilisateur',
  3202. email: 'E-mail',
  3203. emailPlaceholder: 'utilisateur@exemple.com',
  3204. password: 'Mot de passe',
  3205. passwordPlaceholder: 'Mot de passe',
  3206. confirmPassword: 'Confirmer mdp',
  3207. confirmPasswordPlaceholder: 'Confirmez mdp',
  3208. newPasswordPlaceholder: 'Nouveau mdp',
  3209. confirmNewPasswordPlaceholder: 'Confirmez nouveau mdp',
  3210. leaveBlankToKeep: 'Laissez vide pour conserver l\'actuel',
  3211. groups: 'Groupes',
  3212. optional: 'optionnel',
  3213. autoGeneratedPassword: 'Un mot de passe sera généré et envoyé par email.',
  3214. passwordManagedByAdvancedAuth: 'Géré par Auth Avancée. Utilisez "Réinitialiser" pour envoyer un nouveau mdp par email.',
  3215. resetPassword: 'Réinitialiser le mot de passe',
  3216. resettingPassword: 'Réinitialisation...',
  3217. },
  3218. deleteModal: {
  3219. title: 'Supprimer utilisateur',
  3220. message: 'Cette action est irréversible.',
  3221. confirm: 'Supprimer',
  3222. },
  3223. },
  3224. // Stream overlay
  3225. streamOverlay: {
  3226. title: 'Superposition Flux',
  3227. invalidPrinterId: 'ID invalide',
  3228. cameraStream: 'Flux caméra',
  3229. progress: 'Progression',
  3230. eta: 'Fin estimée',
  3231. printerIdle: 'Imprimante inactive',
  3232. printerOffline: 'Imprimante hors ligne',
  3233. status: {
  3234. printing: 'Impression',
  3235. paused: 'En pause',
  3236. finished: 'Terminée',
  3237. failed: 'Échouée',
  3238. idle: 'Inactive',
  3239. unknown: 'Inconnue',
  3240. },
  3241. },
  3242. // Profiles
  3243. profiles: {
  3244. title: 'Profils',
  3245. subtitle: 'Gérez vos presets slicer et calibrations Pressure Advance',
  3246. tabs: {
  3247. bambuCloud: 'Bambu Cloud',
  3248. orcaCloud: 'Orca Cloud',
  3249. local: 'Profils Locaux',
  3250. kprofiles: 'Profils K',
  3251. },
  3252. orcaCloud: {
  3253. connectedAs: 'Connecté en tant que',
  3254. connectedShort: 'Connecté à Orca Cloud',
  3255. logout: 'Déconnecter',
  3256. noLogoutPermission: 'Vous n\'avez pas la permission de vous déconnecter',
  3257. noConnectPermission: 'Vous n\'avez pas la permission de vous connecter à Orca Cloud',
  3258. retry: 'Réessayer',
  3259. connectButton: 'Connecter Orca Cloud',
  3260. connect: {
  3261. title: 'Se connecter à Orca Cloud',
  3262. description: 'Connectez-vous à votre compte Orca Cloud pour synchroniser vos profils de slicer dans Bambuddy.',
  3263. },
  3264. device: {
  3265. title: 'Approuver Bambuddy dans Orca Cloud',
  3266. instruction: 'Ouvrez Orca Cloud et approuvez ce code. Bambuddy se connecte automatiquement dès que vous l\'approuvez.',
  3267. codeLabel: 'Votre code d\'appairage',
  3268. openButton: 'Ouvrir la page d\'approbation d\'Orca Cloud',
  3269. manualHint: 'Ou rendez-vous sur {{url}} et saisissez le code ci-dessus.',
  3270. waiting: 'En attente de votre approbation…',
  3271. cancel: 'Annuler',
  3272. },
  3273. profiles: {
  3274. title: 'Vos profils Orca Cloud ({{count}})',
  3275. refresh: 'Actualiser',
  3276. empty: 'Aucun profil trouvé dans votre compte Orca Cloud pour le moment.',
  3277. },
  3278. toast: {
  3279. disconnected: 'Déconnecté d\'Orca Cloud',
  3280. },
  3281. errors: {
  3282. startFailed: 'Impossible de démarrer la connexion à Orca Cloud.',
  3283. denied: 'L\'appairage a été refusé dans Orca Cloud.',
  3284. expired: 'Le code d\'appairage a expiré. Cliquez sur Connecter pour réessayer.',
  3285. pollFailed: 'La connexion a été perdue pendant l\'attente de l\'approbation. Veuillez réessayer.',
  3286. },
  3287. },
  3288. localProfiles: {
  3289. title: 'Profils Locaux',
  3290. subtitle: 'Gérez vos presets OrcaSlicer',
  3291. import: 'Importer Profils',
  3292. importDesc: 'Déposez les fichiers .bbscfg, .bbsflmt, .orca_filament, .zip ou .json',
  3293. importing: 'Importation...',
  3294. search: 'Chercher un preset...',
  3295. noPresets: 'Aucun preset local',
  3296. noSearchResults: 'Aucun preset ne correspond à votre recherche',
  3297. badge: 'Local',
  3298. edit: 'Modifier',
  3299. delete: 'Supprimer',
  3300. cancel: 'Annuler',
  3301. deleteConfirmTitle: 'Supprimer Preset',
  3302. deleteConfirm: 'Supprimer définitivement ce preset ?',
  3303. source: 'Source',
  3304. inheritsFrom: 'Hérite de',
  3305. filamentType: 'Type',
  3306. vendor: 'Vendeur',
  3307. compatiblePrinters: 'Imprimantes',
  3308. nozzleTemp: 'Temp Buse',
  3309. cost: 'Coût',
  3310. density: 'Densité',
  3311. pressureAdvance: 'Pressure Advance',
  3312. filament: 'Filament',
  3313. process: 'Processus',
  3314. printer: 'Imprimante',
  3315. toast: {
  3316. importSuccess: '{{count}} profil(s) importé(s)',
  3317. importSkipped: '{{count}} profil(s) ignoré(s) (doublons)',
  3318. importError: '{{count}} erreur(s) d\'import',
  3319. deleted: 'Preset supprimé',
  3320. updated: 'Preset mis à jour',
  3321. },
  3322. },
  3323. connectedAs: 'Connecté en tant que',
  3324. signInExpiredTitle: 'Session Bambu Cloud expirée',
  3325. signInExpiredBody: 'Bambu Lab n\'accepte plus le jeton enregistré. Reconnectez-vous pour rétablir les profils cloud, les imports MakerWorld et la vérification des firmwares.',
  3326. logout: 'Déconnexion',
  3327. noLogoutPermission: 'Pas d\'autorisation de déconnexion',
  3328. failedToLoad: 'Échec chargement profils',
  3329. retry: 'Réessayer',
  3330. time: {
  3331. justNow: 'À l\'instant',
  3332. minsAgo: 'Il y a {{count}}m',
  3333. hoursAgo: 'Il y a {{count}}h',
  3334. daysAgo: 'Il y a {{count}}j',
  3335. },
  3336. toast: {
  3337. loggedOut: 'Déconnecté',
  3338. },
  3339. login: {
  3340. title: 'Connexion Bambu Cloud',
  3341. subtitle: 'Synchronisez vos presets slicer',
  3342. email: 'E-mail',
  3343. password: 'Mot de passe',
  3344. region: 'Région',
  3345. regionGlobal: 'Global',
  3346. regionChina: 'Chine',
  3347. verificationCode: 'Code de vérification',
  3348. totpCode: 'Code Authenticator',
  3349. checkEmail: 'Code envoyé à {{email}}',
  3350. enterTotpHint: 'Entrez le code 2FA',
  3351. accessToken: 'Jeton d\'accès (Access Token)',
  3352. accessTokenHint: 'Collez votre jeton Bambu Cloud. Les comptes de la région Chine doivent passer par ici (liés à un numéro de téléphone — pas de connexion par e-mail). Le wiki explique comment récupérer le jeton depuis les cookies MakerWorld.',
  3353. back: 'Retour',
  3354. loginButton: 'Connexion',
  3355. verifyButton: 'Vérifier',
  3356. setTokenButton: 'Définir Jeton',
  3357. useToken: 'Utiliser jeton d\'accès',
  3358. useEmail: 'Connexion par email',
  3359. toast: {
  3360. loggedIn: 'Connecté avec succès',
  3361. codeSent: 'Code envoyé par email',
  3362. enterTotp: 'Entrez le code Authenticator',
  3363. tokenSet: 'Jeton défini',
  3364. },
  3365. },
  3366. presets: {
  3367. myPreset: 'Mon preset (modifiable)',
  3368. duplicate: 'Dupliquer',
  3369. editable: 'Modifiable',
  3370. failedToLoadDetails: 'Échec détails preset',
  3371. deleteConfirm: 'Supprimer ce preset ?',
  3372. deleteWarning: 'Ceci supprimera "{{name}}" de Bambu Cloud définitivement.',
  3373. noDuplicatePermission: 'Pas d\'autorisation duplication',
  3374. noEditPermission: 'Pas d\'autorisation modification',
  3375. noDeletePermission: 'Pas d\'autorisation suppression',
  3376. types: {
  3377. filament: 'Preset filament',
  3378. printer: 'Preset imprimante',
  3379. process: 'Preset processus',
  3380. },
  3381. toast: {
  3382. deleted: 'Preset supprimé',
  3383. created: 'Preset créé',
  3384. updated: 'Preset mis à jour',
  3385. duplicated: 'Preset dupliqué',
  3386. fieldAdded: 'Champ "{{key}}" ajouté',
  3387. exported: 'Preset exporté',
  3388. },
  3389. baseLabel: 'Base : {{name}}',
  3390. currentLabel: 'Actuel : {{name}}',
  3391. newPreset: 'Nouveau Preset',
  3392. editPreset: 'Modifier Preset',
  3393. duplicatePreset: 'Dupliquer Preset',
  3394. createNewPreset: 'Créer un nouveau Preset',
  3395. customizeSettings: 'Personnalisez vos réglages',
  3396. compareWithBase: 'Comparer avec la base',
  3397. compare: 'Comparer',
  3398. // CreatePresetModal - Basic Info
  3399. basePreset: 'Preset de base',
  3400. selectBasePreset: 'Choisir preset de base...',
  3401. presetName: 'Nom du preset',
  3402. myCustomPreset: 'Mon preset personnalisé',
  3403. inheritsFrom: 'Hérite de',
  3404. dropJsonToImport: 'Glissez JSON pour importer',
  3405. // CreatePresetModal - Tabs
  3406. tabs: {
  3407. common: 'Commun',
  3408. allFields: 'Tous les champs',
  3409. },
  3410. // CreatePresetModal - All Fields Tab
  3411. availableFields: 'Champs disponibles',
  3412. searchFieldsPlaceholder: 'Chercher un champ...',
  3413. noMatchingFields: 'Aucun champ trouvé',
  3414. allFieldsAdded: 'Tous les champs sont ajoutés',
  3415. addCustomField: 'Ajouter un champ personnalisé',
  3416. yourOverrides: 'Vos modifications',
  3417. noOverridesYet: 'Aucune modification',
  3418. clickFieldsToAdd: 'Cliquez à gauche pour ajouter',
  3419. saveAsTemplate: 'Enregistrer comme modèle',
  3420. jsonTip: 'Conseil : Glissez un .json pour importer les réglages',
  3421. },
  3422. cloudView: {
  3423. searchPlaceholder: 'Chercher presets...',
  3424. templates: 'Modèles',
  3425. refresh: 'Rafraîchir',
  3426. newPreset: 'Nouveau Preset',
  3427. clearFilters: 'Effacer filtres',
  3428. // Compare mode
  3429. compareMode: 'Mode Comparaison',
  3430. selectAnotherPreset: 'Choisir un autre preset {{type}}',
  3431. clickTwoPresets: 'Choisissez deux presets de même type',
  3432. selectFirst: '1. Sélectionner premier',
  3433. selectSecond: '2. Sélectionner second',
  3434. compareNow: 'Comparer maintenant',
  3435. // Status row
  3436. lastSynced: 'Synchronisé :',
  3437. showingCount: '{{showing}} sur {{total}} presets',
  3438. noPresetsFound: 'Aucun preset trouvé',
  3439. // Column headers
  3440. columns: {
  3441. filament: 'Filament',
  3442. process: 'Processus',
  3443. printer: 'Imprimante',
  3444. },
  3445. noFilamentPresets: 'Pas de preset filament',
  3446. noProcessPresets: 'Pas de preset processus',
  3447. noPrinterPresets: 'Pas de preset imprimante',
  3448. // Filters
  3449. filters: {
  3450. type: 'Type',
  3451. owner: 'Propriétaire',
  3452. printer: 'Imprimante',
  3453. nozzle: 'Buse',
  3454. filament: 'Filament',
  3455. layer: 'Couche',
  3456. all: 'Tous',
  3457. myPresets: 'Mes Presets',
  3458. builtIn: 'Inclus',
  3459. process: 'Processus',
  3460. },
  3461. // Permissions
  3462. noTemplatesPermission: 'Pas d\'autorisation modèles',
  3463. noRefreshPermission: 'Pas d\'autorisation rafraîchissement',
  3464. noCreatePermission: 'Pas d\'autorisation création',
  3465. },
  3466. templates: {
  3467. title: 'Modèles rapides',
  3468. noTemplates: 'Aucun modèle',
  3469. createFirst: 'Créez-en depuis l\'éditeur de preset',
  3470. typeFilter: 'Type :',
  3471. deleteTitle: 'Supprimer modèle',
  3472. deleteWarning: 'Action irréversible',
  3473. deleteConfirm: 'Supprimer "{{name}}" ?',
  3474. namePlaceholder: 'Nom du modèle',
  3475. descriptionPlaceholder: 'Description',
  3476. settingsJson: 'Paramètres (JSON)',
  3477. fieldsCount: '{{count}} champs',
  3478. shownInModals: 'Visible dans fenêtres',
  3479. hiddenInModals: 'Masqué dans fenêtres',
  3480. apply: 'Appliquer',
  3481. toast: {
  3482. deleted: 'Modèle supprimé',
  3483. updated: 'Modèle mis à jour',
  3484. created: 'Modèle créé',
  3485. applied: 'Modèle appliqué',
  3486. },
  3487. },
  3488. },
  3489. // Support/Debug
  3490. support: {
  3491. debugLoggingActive: 'Débogage actif',
  3492. manageLogs: 'Gérer',
  3493. collectItem7: 'Connectivité et versions firmware',
  3494. collectItem8: 'Statut intégrations (Spoolman, MQTT, HA)',
  3495. collectItem9: 'Interfaces réseau (sous-réseaux)',
  3496. collectItem10: 'Versions packages Python',
  3497. collectItem11: 'Santé base de données',
  3498. collectItem12: 'Détails environnement Docker',
  3499. bundleGenerating: 'Génération du paquet...',
  3500. bundleStepConnection: 'Vérification de la connectivité des imprimantes',
  3501. bundleStepVirtualPrinters: 'Vérification de la configuration des imprimantes virtuelles',
  3502. bundleStepLogScan: 'Analyse des journaux récents pour les problèmes connus',
  3503. bundleStepBuild: 'Création du ZIP du paquet de support',
  3504. },
  3505. // File manager
  3506. fileManager: {
  3507. title: 'Gestionnaire de fichiers',
  3508. subtitle: 'Organisez vos fichiers d\'impression',
  3509. uploadFiles: 'Téléverser fichiers',
  3510. newFolder: 'Nouveau dossier',
  3511. folderName: 'Nom du dossier',
  3512. folderNamePlaceholder: 'ex: Pièces Utiles',
  3513. renameFile: 'Renommer fichier',
  3514. renameFolder: 'Renommer dossier',
  3515. invalidFilenameChar: 'Le caractère "{{char}}" n\'est pas autorisé dans les noms de fichier d\'impression. La carte SD de l\'imprimante refuse : < > : " / \\ | ? *',
  3516. moveFiles: 'Déplacer {{count}} fichier(s)',
  3517. rootNoFolder: 'Racine (aucun dossier)',
  3518. current: 'actuel',
  3519. linkFolder: 'Lier le dossier',
  3520. linkFolderDescription: 'Lier "{{name}}" à un projet ou archive.',
  3521. project: 'Projet',
  3522. archive: 'Archive',
  3523. noProjectsFound: 'Aucun projet trouvé',
  3524. noArchivesFound: 'Aucune archive trouvée',
  3525. unlink: 'Délier',
  3526. link: 'Lier',
  3527. dragDropFiles: 'Glissez les fichiers ici',
  3528. dropFilesHere: 'Déposez ici',
  3529. releaseToUpload: 'Relâcher pour téléverser',
  3530. orClickToBrowse: 'ou cliquez pour parcourir',
  3531. allFileTypesSupported: 'Tous types supportés. ZIP extraits.',
  3532. zipFilesDetected: 'ZIP détectés',
  3533. zipExtractOptions: 'Choix de structure pour ZIP :',
  3534. preserveZipStructure: 'Garder structure ZIP',
  3535. createFolderFromZip: 'Dossier par nom du ZIP',
  3536. stlThumbnailGeneration: 'Vignettes STL',
  3537. zipMayContainStl: 'Extraction vignettes possible pour STL.',
  3538. thumbnailsCanBeGenerated: 'Génération vignettes (peut être long).',
  3539. generateThumbnailsForStl: 'Générer vignettes STL',
  3540. threemfDetected: 'Fichiers 3MF détectés',
  3541. threemfExtractionInfo: 'Réglages extraits auto du 3MF.',
  3542. willBeExtracted: 'Sera extrait',
  3543. filesExtracted: '{{count}} fichiers extraits',
  3544. uploadComplete: 'Terminé : {{succeeded}} succès',
  3545. uploadFailed: 'Échec du téléversement',
  3546. zipFilesFailed: '{{count}} fichiers échoués',
  3547. uploading: 'Téléversement...',
  3548. changeLink: 'Modifier lien...',
  3549. linkTo: 'Lier à...',
  3550. linkToProjectOrArchive: 'Lier à projet ou archive',
  3551. generateThumbnail: 'Générer vignette',
  3552. generateThumbnails: 'Générer vignettes',
  3553. generateThumbnailsForMissing: 'Vignettes STL manquantes',
  3554. gridView: 'Grille',
  3555. listView: 'Liste',
  3556. lowDiskSpaceWarning: 'Espace disque faible',
  3557. lowDiskSpaceDetails: '{{free}} libre sur {{total}}. Seuil : {{threshold}} Go.',
  3558. files: 'Fichiers',
  3559. folders: 'Dossiers',
  3560. size: 'Taille',
  3561. free: 'Libre',
  3562. allFiles: 'Tous les fichiers',
  3563. allExternal: 'Externes',
  3564. externalIsEmpty: 'Aucun fichier externe',
  3565. externalEmptyDescription: 'Les fichiers de vos dossiers externes liés apparaîtront ici.',
  3566. wrap: 'Retour ligne',
  3567. enableTextWrapping: 'Activer retour ligne',
  3568. disableTextWrapping: 'Désactiver retour ligne',
  3569. collapse: 'Réduire',
  3570. collapseFoldersByDefault: 'Réduire les dossiers par défaut',
  3571. expandFoldersByDefault: 'Développer les dossiers par défaut',
  3572. folderSort: 'Trier les dossiers',
  3573. folderSortByName: 'Par nom',
  3574. folderSortByActivity: 'Par activité récente',
  3575. dragToResizeTooltip: 'Glisser pour redimensionner, double-clic reset',
  3576. searchFiles: 'Chercher fichiers...',
  3577. searchSubfoldersHint: 'Sous-dossiers inclus',
  3578. readme: {
  3579. truncated: 'Tronqué',
  3580. show: 'Afficher le README',
  3581. hide: 'Masquer le README',
  3582. label: 'README',
  3583. },
  3584. tags: {
  3585. title: 'Étiquettes',
  3586. subtitle: 'Étiquetez les fichiers pour des filtres transversaux — jouets, adapté aux enfants, PETG uniquement, etc.',
  3587. manage: 'Étiquettes',
  3588. manageTitle: 'Gérer le catalogue d\'étiquettes',
  3589. add: 'Nouvelle étiquette',
  3590. edit: 'Renommer l\'étiquette',
  3591. name: 'Nom',
  3592. fileCount: 'Fichiers',
  3593. empty: 'Aucune étiquette pour le moment. Créez-en une pour commencer.',
  3594. noMatches: 'Aucune étiquette correspondante.',
  3595. createPlaceholder: 'ex. jouets, kid-safe, petg',
  3596. createButton: 'Créer',
  3597. nameRequired: 'Le nom est requis.',
  3598. searchPlaceholder: 'Filtrer les étiquettes...',
  3599. created: 'Étiquette créée.',
  3600. updated: 'Étiquette renommée.',
  3601. deleted: 'Étiquette supprimée.',
  3602. saveFailed: 'Impossible d\'enregistrer l\'étiquette.',
  3603. deleteFailed: 'Impossible de supprimer l\'étiquette.',
  3604. applyFailed: 'Impossible d\'appliquer les étiquettes.',
  3605. applyAdd: 'Ajouter des étiquettes',
  3606. applyRemove: 'Retirer des étiquettes',
  3607. applyAddSuccess: '{{count}} étiquette(s) ajoutée(s) sur {{files}} fichier(s).',
  3608. applyRemoveSuccess: '{{count}} étiquette(s) retirée(s) sur {{files}} fichier(s).',
  3609. actionAdd: 'Ajouter aux fichiers sélectionnés',
  3610. actionRemove: 'Retirer des fichiers sélectionnés',
  3611. tagAction: 'Étiqueter',
  3612. bulkTitle: 'Étiqueter {{count}} fichier(s) sélectionné(s)',
  3613. bulkTooltip: 'Ajouter ou retirer des étiquettes sur chaque fichier sélectionné.',
  3614. noPermission: 'Vous n\'avez pas la permission d\'étiqueter les fichiers.',
  3615. filterLabel: 'Filtré par :',
  3616. clearAll: 'Tout effacer',
  3617. confirmDelete: 'Supprimer l\'étiquette « {{name}} » ?',
  3618. confirmDeleteMessage: 'Cela supprime l\'étiquette du catalogue. Les fichiers conservent leurs autres étiquettes.',
  3619. confirmDeleteInUseMessage: 'Cette étiquette est sur {{count}} fichier(s). La suppression la retire de tous ; les fichiers eux-mêmes ne sont pas touchés.',
  3620. editAria: 'Modifier {{name}}',
  3621. deleteAria: 'Supprimer {{name}}',
  3622. },
  3623. allTypes: 'Tous types',
  3624. prints: 'Impressions',
  3625. ascending: 'Croissant',
  3626. descending: 'Décroissant',
  3627. showModified: 'Afficher les dates de modification',
  3628. hideModified: 'Masquer les dates de modification',
  3629. lastModified: 'Dernière modification',
  3630. lastActivity: 'Dernière activité',
  3631. resultsCount: '{{showing}} sur {{total}} fichiers',
  3632. selectAll: 'Tout sélectionner',
  3633. deselectAll: 'Tout désélectionner',
  3634. selected: '{{count}} sélectionnés',
  3635. adding: 'Ajout...',
  3636. loadingFiles: 'Chargement...',
  3637. folderIsEmpty: 'Dossier vide',
  3638. noFilesYet: 'Aucun fichier',
  3639. folderEmptyDescription: 'Téléversez ou déplacez des fichiers ici.',
  3640. noFilesDescription: 'Téléversez des fichiers pour organiser.',
  3641. noMatchingFiles: 'Aucun fichier correspondant',
  3642. noMatchingFilesDescription: 'Ajustez votre recherche.',
  3643. clearFilters: 'Effacer filtres',
  3644. printedCount: 'Imprimé {{count}}x',
  3645. uploadedBy: 'Téléversé par',
  3646. deleteFolder: 'Supprimer dossier',
  3647. deleteFile: 'Supprimer fichier',
  3648. deleteFilesCount: 'Supprimer {{count}} fichiers',
  3649. deleteFolderConfirm: 'Supprimer le dossier et son contenu ?',
  3650. deleteFileConfirm: 'Supprimer ce fichier ?',
  3651. deleteFilesConfirm: 'Supprimer {{count}} fichiers définitivement ?',
  3652. deleting: 'Suppression...',
  3653. noPermissionRenameFolder: 'Pas d\'autorisation renommage',
  3654. noPermissionLinkFolder: 'Pas d\'autorisation lien',
  3655. noPermissionDeleteFolder: 'Pas d\'autorisation suppression dossier',
  3656. onlyEmptyFoldersDeletable: 'Vous ne pouvez supprimer que les dossiers vides',
  3657. noPermissionPrint: 'Pas d\'autorisation impression',
  3658. noPermissionSlice: 'Vous n\'avez pas la permission de découper des fichiers',
  3659. noPermissionAddToQueue: 'Pas d\'autorisation file',
  3660. noPermissionDownload: 'Pas d\'autorisation téléchargement',
  3661. noPermissionRenameFile: 'Pas d\'autorisation renommage fichier',
  3662. noPermissionGenerateThumbnail: 'Pas d\'autorisation vignettes',
  3663. noPermissionDeleteFile: 'Pas d\'autorisation suppression fichier',
  3664. noPermissionCreateFolder: 'Pas d\'autorisation nouveau dossier',
  3665. noPermissionUpload: 'Pas d\'autorisation téléversement',
  3666. noPermissionMoveFiles: 'Pas d\'autorisation déplacement',
  3667. noPermissionDeleteFiles: 'Pas d\'autorisation suppression groupée',
  3668. // External folder
  3669. linkExternal: 'Lier externe',
  3670. linkExternalFolder: 'Lier un dossier externe',
  3671. linkExternalFolderDescription: 'Monter un répertoire hôte (NAS, USB, partage réseau) dans le gestionnaire de fichiers. Les fichiers ne sont pas copiés — ils sont lus directement depuis le chemin d\'origine.',
  3672. externalFolderNamePlaceholder: 'ex. Impressions NAS',
  3673. externalPath: 'Chemin hôte',
  3674. externalPathHelp: 'Chemin absolu du répertoire sur l\'hôte Docker. Doit être monté en bind dans le conteneur.',
  3675. readOnly: 'Lecture seule',
  3676. readOnlyHelp: 'empêche les téléversements et suppressions',
  3677. showHiddenFiles: 'Afficher les fichiers cachés (fichiers point)',
  3678. externalFolder: 'Dossier externe',
  3679. scanFolder: 'Scanner',
  3680. toast: {
  3681. folderCreated: 'Dossier créé',
  3682. folderDeleted: 'Dossier supprimé',
  3683. fileDeleted: 'Fichier supprimé',
  3684. filesDeleted: '{{count}} fichiers supprimés',
  3685. filesMoved: 'Fichiers déplacés',
  3686. folderLinked: 'Dossier lié',
  3687. folderUnlinked: 'Dossier délié',
  3688. externalFolderLinked: 'Dossier externe lié et scanné',
  3689. folderScanned: 'Scan terminé : {{added}} ajoutés, {{removed}} supprimés',
  3690. addedToQueue: '{{count}} fichier(s) ajouté(s)',
  3691. addedToQueuePartial: '{{added}} ajoutés, {{failed}} échecs',
  3692. failedToAddToQueue: 'Échec ajout file : {{error}}',
  3693. fileRenamed: 'Fichier renommé',
  3694. folderRenamed: 'Dossier renommé',
  3695. thumbnailsGenerated: '{{count}} vignette(s) générée(s)',
  3696. thumbnailsGeneratedPartial: '{{succeeded}} succès, {{failed}} échecs',
  3697. noStlMissingThumbnails: 'Aucun STL sans vignette',
  3698. failedToGenerateThumbnails: 'Échec vignettes : {{error}}',
  3699. thumbnailGenerated: 'Vignette générée',
  3700. failedToGenerateThumbnail: 'Échec vignette : {{error}}',
  3701. },
  3702. },
  3703. // Projects
  3704. projects: {
  3705. title: 'Projets',
  3706. subtitle: 'Suivez vos projets d\'impression 3D',
  3707. newProject: 'Nouveau Projet',
  3708. editProject: 'Modifier Projet',
  3709. deleteProject: 'Supprimer Projet',
  3710. projectName: 'Nom du Projet',
  3711. description: 'Description',
  3712. noProjects: 'Aucun projet',
  3713. noProjectsFiltered: 'Aucun projet {{status}}',
  3714. noProjectsFilteredHelp: 'Vous n\'avez aucun projet "{{status}}". Les projets apparaîtront ici lorsque leur statut changera.',
  3715. createFirst: 'Créez votre premier projet pour organiser vos builds.',
  3716. createFirstButton: 'Créer votre premier projet',
  3717. create: 'Créer',
  3718. files: 'Fichiers',
  3719. prints: 'Impressions',
  3720. plates: 'plateaux',
  3721. parts: 'pièces',
  3722. lastModified: 'Modifié le',
  3723. deleteConfirm: 'Supprimer ce projet ? Les archives seront déliées mais conservées.',
  3724. addFiles: 'Ajouter fichiers',
  3725. removeFile: 'Retirer fichier',
  3726. viewDetails: 'Détails',
  3727. // Modal fields
  3728. namePlaceholder: 'ex: Build Voron 2.4',
  3729. descriptionPlaceholder: 'Description optionnelle...',
  3730. urlLabel: 'URL',
  3731. urlPlaceholder: 'https://makerworld.com/...',
  3732. urlInvalid: "L'URL doit commencer par http:// ou https://",
  3733. openExternalUrl: 'Ouvrir l’URL du projet',
  3734. coverImageLabel: 'Photo de couverture',
  3735. coverImageAlt: 'Photo de couverture du projet',
  3736. coverImageUpload: 'Téléverser',
  3737. coverImageReplace: 'Remplacer',
  3738. coverImageRemove: 'Supprimer',
  3739. color: 'Couleur',
  3740. targetPlates: 'Plateaux cibles',
  3741. targetPlatesPlaceholder: 'ex: 25',
  3742. targetPlatesHelp: 'Nombre total de jobs',
  3743. targetParts: 'Pièces cibles',
  3744. targetPartsPlaceholder: 'ex: 150',
  3745. targetPartsHelp: 'Nombre total d\'objets',
  3746. targetSets: 'Copies par fichier',
  3747. targetSetsPlaceholder: 'ex. 10',
  3748. targetSetsHelp: 'Nombre d\'impressions de chaque fichier imprimable',
  3749. tagsLabel: 'Tags (séparés par virgules)',
  3750. tagsPlaceholder: 'ex: voron, cadeau',
  3751. dueDate: 'Échéance',
  3752. priority: 'Priorité',
  3753. priorityLow: 'Basse',
  3754. priorityNormal: 'Normale',
  3755. priorityHigh: 'Haute',
  3756. priorityUrgent: 'Urgente',
  3757. // Status
  3758. statusActive: 'Actif',
  3759. statusCompleted: 'Terminé',
  3760. statusArchived: 'Archivé',
  3761. done: 'Fait',
  3762. completed: 'terminé',
  3763. failed: 'échoué',
  3764. inQueue: 'en file',
  3765. noPrintsYet: 'Aucune impression',
  3766. // Footer stats
  3767. printJobs: 'Jobs (plateaux)',
  3768. partsPrinted: 'Pièces imprimées',
  3769. failedParts: 'Pièces échouées',
  3770. // Actions
  3771. import: 'Importer',
  3772. export: 'Exporter',
  3773. importProject: 'Importer projet',
  3774. exportAll: 'Exporter tous les projets',
  3775. loading: 'Chargement des projets...',
  3776. // Permissions
  3777. noEditPermission: 'Pas d\'autorisation de modification',
  3778. noDeletePermission: 'Pas d\'autorisation de suppression',
  3779. noCreatePermission: 'Pas d\'autorisation de création',
  3780. noImportPermission: 'Pas d\'autorisation d\'import',
  3781. noExportPermission: 'Pas d\'autorisation d\'export',
  3782. // Toast
  3783. toast: {
  3784. created: 'Projet créé',
  3785. updated: 'Projet mis à jour',
  3786. deleted: 'Projet supprimé',
  3787. imported: 'Projet importé',
  3788. multipleImported: '{{count}} projets importés',
  3789. importFailed: 'Échec d\'import',
  3790. exported: 'Projets exportés (métadonnées)',
  3791. },
  3792. },
  3793. // Project detail page
  3794. projectDetail: {
  3795. notFound: 'Projet non trouvé',
  3796. backToProjects: 'Retour aux Projets',
  3797. export: 'Exporter',
  3798. exportProject: 'Exporter projet',
  3799. noExportPermission: 'Pas d\'autorisation export',
  3800. noEditPermission: 'Pas d\'autorisation modification',
  3801. partOf: 'Fait partie de :',
  3802. priorityLabel: 'Priorité :',
  3803. noPrints: 'Aucune impression dans ce projet',
  3804. status: {
  3805. active: 'Actif',
  3806. completed: 'Terminé',
  3807. archived: 'Archivé',
  3808. },
  3809. priority: {
  3810. low: 'Basse',
  3811. normal: 'Normale',
  3812. high: 'Haute',
  3813. urgent: 'Urgente',
  3814. },
  3815. dueDate: {
  3816. overdue: 'En retard',
  3817. today: 'Aujourd\'hui',
  3818. daysLeft: '{{count}} jours restants',
  3819. },
  3820. progress: {
  3821. platesProgress: 'Progression Plateaux',
  3822. partsProgress: 'Progression Pièces',
  3823. setsProgress: 'Jeux complets',
  3824. sets: 'jeux',
  3825. setsHint: 'Un jeu est complet quand chaque fichier imprimable atteint ce nombre',
  3826. printJobs: 'jobs d\'impression',
  3827. parts: 'pièces',
  3828. percentComplete: '{{percent}}% terminé',
  3829. remaining: '{{count}} restant(s)',
  3830. },
  3831. stats: {
  3832. printJobs: 'Jobs d\'Impression',
  3833. total: 'total',
  3834. failed: '{{count}} échecs',
  3835. partsPrinted: '{{count}} pièces imprimées',
  3836. printTime: 'Temps d\'Impression',
  3837. filamentUsed: 'Filament utilisé',
  3838. },
  3839. cost: {
  3840. title: 'Suivi des coûts',
  3841. filamentCost: 'Coût Filament',
  3842. energy: 'Énergie',
  3843. totalCost: 'Coût Total',
  3844. total: 'Total',
  3845. includesBom: 'BOM incluse',
  3846. budget: 'Budget',
  3847. remaining: 'Restant',
  3848. },
  3849. subProjects: {
  3850. title: 'Sous-projets ({{count}})',
  3851. },
  3852. notes: {
  3853. title: 'Notes',
  3854. noEditPermission: 'Pas d\'autorisation modification',
  3855. placeholder: 'Ajouter des notes...',
  3856. empty: 'Aucune note. Cliquez sur modifier.',
  3857. },
  3858. files: {
  3859. title: 'Fichiers',
  3860. linkFolders: 'Liez des dossiers depuis le gestionnaire',
  3861. forQuickAccess: 'pour un accès rapide.',
  3862. fileCount: '{{count}} fichier(s)',
  3863. empty: 'Aucun dossier lié.',
  3864. printedCount: 'Imprimé {{count}} fois',
  3865. progressTooltip: '{{done}} sur {{target}} impressions terminées',
  3866. noFiles: 'Aucun fichier dans ce dossier.',
  3867. },
  3868. bom: {
  3869. title: 'BOM (Liste matériel)',
  3870. acquired: '{{completed}}/{{total}} acquis',
  3871. showAll: 'Tout afficher',
  3872. hideDone: 'Masquer acquis',
  3873. addPart: 'Ajouter matériel',
  3874. noAddPermission: 'Pas d\'autorisation ajout',
  3875. partNamePlaceholder: 'Nom (ex: Vis M3x8)',
  3876. partName: 'Nom de pièce',
  3877. qty: 'Qté',
  3878. price: 'Prix ({{currency}})',
  3879. sourcingUrlPlaceholder: 'Lien d\'achat (optionnel)',
  3880. remarksPlaceholder: 'Remarques (optionnel)',
  3881. deletePart: 'Supprimer pièce',
  3882. deleteConfirm: 'Supprimer "{{name}}" ?',
  3883. noUpdatePermission: 'Pas d\'autorisation mise à jour',
  3884. noEditPermission: 'Pas d\'autorisation modification',
  3885. noDeletePermission: 'Pas d\'autorisation suppression',
  3886. totalCost: 'Coût total :',
  3887. empty: 'BOM vide. Ajoutez du matériel ou de l\'électronique.',
  3888. },
  3889. timeline: {
  3890. title: 'Historique d\'activité',
  3891. empty: 'Aucune activité.',
  3892. },
  3893. template: {
  3894. saveAsTemplate: 'Enregistrer comme modèle',
  3895. noCreatePermission: 'Pas d\'autorisation modèle',
  3896. },
  3897. queue: {
  3898. title: 'File d\'attente',
  3899. viewAll: 'Tout voir',
  3900. printing: '{{count}} en cours',
  3901. queued: '{{count}} en file',
  3902. },
  3903. prints: {
  3904. title: 'Impressions ({{count}})',
  3905. },
  3906. toast: {
  3907. projectUpdated: 'Projet mis à jour',
  3908. partAdded: 'Pièce ajoutée',
  3909. partRemoved: 'Pièce retirée',
  3910. exportFailed: 'Échec export',
  3911. projectExported: 'Projet exporté',
  3912. templateCreated: 'Modèle créé',
  3913. },
  3914. },
  3915. // System info
  3916. system: {
  3917. title: 'Informations Système',
  3918. version: 'Version',
  3919. uptime: 'Temps de fonctionnement',
  3920. cpuUsage: 'Utilisation CPU',
  3921. memoryUsage: 'Utilisation RAM',
  3922. diskUsage: 'Utilisation Disque',
  3923. networkInfo: 'Infos Réseau',
  3924. logs: 'Journaux',
  3925. debugMode: 'Mode Débogage',
  3926. enableDebug: 'Activer débogage',
  3927. disableDebug: 'Désactiver débogage',
  3928. downloadLogs: 'Télécharger logs',
  3929. clearLogs: 'Effacer logs',
  3930. dockerInfo: 'Infos Docker',
  3931. containerName: 'Nom conteneur',
  3932. imageName: 'Nom image',
  3933. platform: 'Plateforme',
  3934. architecture: 'Architecture',
  3935. },
  3936. // Sponsor surface (System page)
  3937. sponsors: {
  3938. sectionTitle: 'Indépendant & financé par la communauté',
  3939. tagline: 'Bambuddy est gratuit et le reste parce que des personnes choisissent de le soutenir. Pas de VC, pas de verrouillage cloud.',
  3940. viewSupporters: 'Voir les soutiens',
  3941. toastPrints: 'Tu as terminé {{count}} impressions avec Bambuddy. Bambuddy reste gratuit grâce à ceux qui le soutiennent.',
  3942. toastCost: 'Tu as suivi {{total}} de filament avec Bambuddy. Vois qui garde le projet indépendant.',
  3943. toastArchives: '{{count}} impressions archivées avec Bambuddy. Vois qui le garde indépendant.',
  3944. toastAnniversary: 'Un an avec Bambuddy ! Vois qui garde le projet indépendant.',
  3945. toastVersionUpdate: 'Mis à jour vers v{{version}}. Bambuddy reste gratuit grâce à ceux qui le soutiennent.',
  3946. toastBusiness: "Vous utilisez Bambuddy sur {{count}} imprimantes ? Il existe une offre de support pour les équipes : corrections prioritaires, facturation et contact direct avec le mainteneur.",
  3947. businessCta: "Bambuddy pour les entreprises",
  3948. businessTitle: "Bambuddy pour les entreprises",
  3949. businessTagline: "Vous gérez {{count}} imprimantes. Support prioritaire, licences commerciales et facturation sont disponibles pour les équipes et les fermes d'impression.",
  3950. },
  3951. // Library (K Profiles)
  3952. library: {
  3953. title: 'Bibliothèque Filament',
  3954. addFilament: 'Ajouter Filament',
  3955. editFilament: 'Modifier Filament',
  3956. deleteFilament: 'Supprimer Filament',
  3957. vendor: 'Vendeur',
  3958. material: 'Matériau',
  3959. color: 'Couleur',
  3960. kFactor: 'Facteur K',
  3961. temperature: 'Température',
  3962. noFilaments: 'Bibliothèque vide',
  3963. deleteConfirm: 'Supprimer ce filament ?',
  3964. importFromPrinter: 'Importer de l\'imprimante',
  3965. exportToFile: 'Exporter vers fichier',
  3966. runWithPipeline: {
  3967. actionLabel: 'Exécuter avec un pipeline',
  3968. noPermission: 'Vous n\'avez pas la permission d\'exécuter des pipelines',
  3969. modalTitle: 'Exécuter avec un pipeline',
  3970. confirmTitle: 'Confirmer l\'exécution',
  3971. confirmIntro: 'Le pré-vol a trouvé des problèmes avec cette exécution',
  3972. sourceHint: 'Source',
  3973. pipelineHint: 'Pipeline',
  3974. targetHint: 'Cible',
  3975. pipelineListAria: 'Pipelines disponibles',
  3976. runAnyway: 'Exécuter quand même',
  3977. loading: 'Chargement…',
  3978. empty: 'Aucun pipeline enregistré pour le moment. Ouvrez le dialogue Trancher et cliquez sur « Enregistrer comme pipeline » pour en créer un.',
  3979. noTarget: 'Aucune imprimante cible définie',
  3980. noTargetMessage: 'Ce pipeline n\'a pas d\'imprimante cible. Ouvrez-le dans les Paramètres pour en choisir une.',
  3981. copies: 'Copies',
  3982. copiesHint: 'max {{n}}',
  3983. classTarget: 'N\'importe quel {{model}}',
  3984. toast: {
  3985. started: 'Exécution de pipeline démarrée',
  3986. failed: 'Impossible de démarrer l\'exécution',
  3987. },
  3988. issue: {
  3989. printerNotSet: 'Aucune imprimante cible définie pour ce pipeline.',
  3990. printerNotFound: 'L\'imprimante cible n\'existe plus.',
  3991. printerDisabled: 'L\'imprimante cible est désactivée.',
  3992. printerOffline: 'L\'imprimante cible est hors ligne.',
  3993. filamentType: 'Emplacement filament {{slot}} : attendu {{expected}}, AMS a {{actual}}',
  3994. filamentColor: 'Emplacement filament {{slot}} : couleur différente (attendu {{expected}}, AMS a {{actual}})',
  3995. amsSlotMissing: 'Emplacement AMS {{slot}} indisponible sur cette imprimante',
  3996. filamentUnverified: 'L\'emplacement filament {{slot}} provient d\'un préréglage cloud / standard et n\'a pas pu être vérifié statiquement.',
  3997. noClassMatches: 'Aucune imprimante de cette installation ne correspond à la classe de modèle cible du pipeline ({{expected}}).',
  3998. classNotSet: 'La cible du pipeline est une classe d\'imprimante mais aucun modèle n\'a été choisi.',
  3999. },
  4000. },
  4001. },
  4002. // Slice (slicer-API integration via SliceModal)
  4003. slice: {
  4004. title: 'Slicer le modèle',
  4005. action: 'Slicer',
  4006. actionAll: 'Slicer les {{count}} plateaux',
  4007. actionAllTitle: "Slicer tous les plateaux dans une sortie multi-plateaux (une seule archive). La sélection de filament couvre chaque emplacement défini par le projet.",
  4008. allPlatesToggle: 'Slicer les {{count}} plateaux',
  4009. slicing: 'Découpage…',
  4010. printer: 'Profil d\'imprimante',
  4011. process: 'Profil de processus',
  4012. filament: 'Profil de filament',
  4013. filamentSlot: 'Filament {{index}} – {{type}}',
  4014. selectPreset: '— Sélectionner un préréglage —',
  4015. loadingPresets: 'Chargement des préréglages…',
  4016. analyzingPlateFilaments: 'Analyse des filaments de la plaque…',
  4017. analyzingPlateFilamentsHint: 'Exécution d\'un découpage d\'aperçu pour identifier les emplacements AMS utilisés. Mis en cache après — la réouverture est instantanée.',
  4018. previewToast: 'Analyse de {{name}} – {{elapsed}}',
  4019. previewWithProgress: 'Analyse de {{name}} – {{stage}} ({{percent}} %) – {{elapsed}}',
  4020. notUsedByPlate: '— non utilisé par cette plaque',
  4021. noPresetsForSlot: 'Aucun préréglage disponible',
  4022. otherPrinters: 'Autres imprimantes',
  4023. presetsLoadFailed: 'Échec du chargement des préréglages. Ouvrez Paramètres → Profils pour les importer d\'abord.',
  4024. refreshPresets: 'Actualiser',
  4025. refreshPresetsTitle: 'Actualiser les préréglages — récupérer les dernières listes Cloud et bundle (à utiliser après avoir supprimé un préréglage dans Bambu Studio ou Bambu Handy)',
  4026. allPresetsRequired: 'Tous les préréglages doivent être sélectionnés',
  4027. useEmbedded: 'Utiliser les réglages intégrés du fichier',
  4028. useEmbeddedHint: "Slicer tel que le concepteur l'a configuré (parois, remplissage, filament) au lieu des profils ci-dessus. Proposé car votre imprimante correspond à celle du fichier.",
  4029. designSettings: 'Conserver les réglages du concepteur',
  4030. designSettingsHint: 'Ce fichier modifie {{count}} réglage(s) d\'impression par rapport au profil standard.',
  4031. designSettingsSelected: '{{selected}} sur {{total}} sélectionnés',
  4032. designSettingsPrinterCoupled: 'spécifique à l\'imprimante',
  4033. designSettingsPrinterCoupledHint: 'Réglé pour l\'imprimante visée par le fichier — peut être incorrect ou hors plage sur la vôtre.',
  4034. enqueuing: 'Envoi du travail de découpage…',
  4035. queued: 'En file d\'attente…',
  4036. failed: 'Échec du découpage. Vérifiez les journaux du sidecar.',
  4037. startedToast: 'Découpage de {{name}} en arrière-plan…',
  4038. queuedToast: 'En attente : {{name}} – {{elapsed}}',
  4039. runningToast: 'Découpage {{name}} – {{elapsed}}',
  4040. runningWithProgress: '{{name}} – {{stage}} ({{percent}} %) – {{elapsed}}',
  4041. runningWithProgressMultiPlate: 'Plateau {{plateIndex}} sur {{plateCount}} • {{name}} – {{stage}} ({{percent}} %) – {{elapsed}}',
  4042. completedToast: '{{name}} découpé',
  4043. failedTitle: 'Échec du découpage',
  4044. failedToast: 'Échec du découpage de {{name}} : {{detail}}',
  4045. tier: {
  4046. local: 'Importé',
  4047. cloud: 'Bambu Cloud',
  4048. orcaCloud: 'Orca Cloud',
  4049. standard: 'Standard',
  4050. },
  4051. cloud: {
  4052. notAuthenticated: 'Connectez-vous à Bambu Cloud (Paramètres → Profils → Bambu Cloud) pour voir vos préréglages cloud.',
  4053. expired: 'Session Bambu Cloud expirée – reconnectez-vous pour actualiser vos préréglages cloud.',
  4054. unreachable: 'Bambu Cloud est inaccessible. Les préréglages locaux et standards fonctionnent encore.',
  4055. },
  4056. orcaCloud: {
  4057. notAuthenticated: 'Connectez-vous à Orca Cloud (Profils → Orca Cloud) pour voir vos préréglages Orca.',
  4058. expired: 'Session Orca Cloud expirée — reconnectez-vous pour actualiser vos préréglages Orca.',
  4059. unreachable: 'Orca Cloud est indisponible pour le moment. Les autres préréglages fonctionnent toujours.',
  4060. },
  4061. bedType: {
  4062. label: 'Plateau d\'impression',
  4063. auto: 'Auto (utiliser le préréglage de processus)',
  4064. coolPlate: 'Cool Plate',
  4065. coolPlateSuperTack: 'Cool Plate SuperTack',
  4066. engineering: 'Engineering Plate',
  4067. highTemp: 'High Temp Plate',
  4068. texturedPEI: 'Textured PEI Plate',
  4069. smoothPEI: 'Smooth PEI Plate',
  4070. },
  4071. // Slicer Pipelines (#1425) — apply a saved bundle or save the current pick.
  4072. pipelines: {
  4073. label: 'Pipeline',
  4074. applyAria: 'Appliquer le pipeline',
  4075. applyPrompt: 'Appliquer un pipeline…',
  4076. empty: 'Aucun pipeline enregistré',
  4077. saveButton: 'Enregistrer comme pipeline',
  4078. saveTitle: 'Enregistrer la sélection actuelle des quatre emplacements comme pipeline réutilisable',
  4079. namePlaceholder: 'Nom du pipeline',
  4080. nameAria: 'Nouveau nom de pipeline',
  4081. toast: {
  4082. applied: '« {{name}} » appliqué',
  4083. saved: 'Pipeline enregistré',
  4084. saveFailed: 'Échec de l\'enregistrement',
  4085. },
  4086. },
  4087. },
  4088. // Spoolman
  4089. spoolman: {
  4090. title: 'Intégration Spoolman',
  4091. enabled: 'Spoolman Activé',
  4092. url: 'URL Spoolman',
  4093. connected: 'Connecté',
  4094. disconnected: 'Non Connecté',
  4095. testConnection: 'Tester connexion',
  4096. sync: 'Synchroniser',
  4097. syncing: 'Sync...',
  4098. lastSync: 'Dernière Sync',
  4099. linkToSpoolman: 'Lier à Spoolman',
  4100. openInSpoolman: 'Ouvrir Spoolman',
  4101. unlinkSpool: 'Délier bobine',
  4102. unlinkConfirmTitle: 'Désassigner la bobine ?',
  4103. unlinkConfirmMessage: 'Cela retirera la bobine de cet emplacement. Les données de la bobine elles-mêmes resteront inchangées.',
  4104. selectSpool: 'Choisir bobine',
  4105. noUnlinkedSpools: 'Pas de bobine libre',
  4106. linkSuccess: 'Bobine assignée avec succès',
  4107. linkFailed: 'Échec de l’assignation',
  4108. unlinkSuccess: 'Bobine désassignée avec succès',
  4109. unlinkFailed: 'Échec du désassignement',
  4110. linkedSpool: 'Bobine assignée',
  4111. spoolId: 'ID Bobine',
  4112. fillSourceLabel: '(Spoolman)',
  4113. weight: 'Poids',
  4114. remaining: 'Restant',
  4115. disableWeightSync: 'Désactiver Sync poids estimé AMS',
  4116. disableWeightSyncDesc: 'Ne pas utiliser les estimations AMS. Utile si vous préférez le suivi Spoolman.',
  4117. reportPartialUsage: 'Rapporter consommation partielle pour échecs',
  4118. reportPartialUsageDesc: 'Si l\'impression échoue, rapporte le filament consommé selon les couches.',
  4119. },
  4120. locations: {
  4121. title: 'Emplacements de stockage',
  4122. subtitle: 'Gérez étagères, tiroirs et autres emplacements physiques pour vos bobines',
  4123. add: 'Ajouter un emplacement',
  4124. addShort: 'Ajouter',
  4125. edit: 'Modifier l\'emplacement',
  4126. name: 'Nom',
  4127. spools: 'Bobines',
  4128. empty: 'Aucun emplacement de stockage. Créez votre première étagère ou tiroir.',
  4129. manage: 'Emplacements',
  4130. createPlaceholder: 'ex. Étagère A, Tiroir 1',
  4131. nameRequired: 'Le nom de l\'emplacement est requis',
  4132. created: 'Emplacement créé',
  4133. updated: 'Emplacement mis à jour',
  4134. deleted: 'Emplacement supprimé',
  4135. saveFailed: 'Échec de l\'enregistrement de l\'emplacement',
  4136. deleteFailed: 'Échec de la suppression de l\'emplacement',
  4137. deleteBlocked: 'Retirez d\'abord toutes les bobines de cet emplacement',
  4138. confirmDelete: 'Supprimer « {{name}} » ?',
  4139. confirmDeleteMessage: 'Cet emplacement sera retiré du catalogue. Déplacez d\'abord les bobines.',
  4140. },
  4141. // Inventory
  4142. inventory: {
  4143. title: 'Inventaire de Bobines',
  4144. subtitle: 'Gérez vos bobines',
  4145. addToInventory: 'Ajouter à l\'inventaire',
  4146. addToInventoryPending: 'Ajout...',
  4147. addToInventorySuccess: 'Bobine ajoutée à l\'inventaire',
  4148. addToInventoryFailed: 'Échec de l\'ajout de la bobine à l\'inventaire',
  4149. unknownSpoolTitle: 'Nouveau filament détecté',
  4150. unknownSpoolMessage: 'Une bobine avec un tag RFID inconnu a été détectée à {{location}}. L\'ajouter à votre inventaire maintenant ?',
  4151. unknownSpoolSlot: 'Emplacement',
  4152. bulk: {
  4153. selectAllVisible: 'Tout sélectionner (visible)',
  4154. selectRow: 'Sélectionner la ligne',
  4155. selectGroup: 'Sélectionner le groupe',
  4156. selectionCount: '{{count}} sélectionnée(s)',
  4157. edit: 'Modifier',
  4158. printLabels: 'Imprimer les étiquettes',
  4159. resetUsage: 'Réinitialiser l\'utilisation',
  4160. restore: 'Restaurer',
  4161. archive: 'Archiver',
  4162. delete: 'Supprimer',
  4163. clearSelection: 'Effacer la sélection',
  4164. editTitle: 'Modification groupée des bobines',
  4165. editSubtitle: 'S\'applique à {{count}} bobines sélectionnées. Seuls les champs cochés seront mis à jour.',
  4166. editHint: 'Tapez dans un champ pour le marquer comme à mettre à jour — seules les lignes cochées sont envoyées. Un champ laissé vide laisse les bobines inchangées (vider un champ se fait par bobine).',
  4167. useCustom: 'Utiliser « {{value}} »',
  4168. toggleField: 'Activer la mise à jour de ce champ',
  4169. changeCount: '{{count}} champ(s) seront mis à jour.',
  4170. applyPending: 'Application...',
  4171. applyButton: 'Appliquer à {{count}} bobines',
  4172. deleteTitle: 'Supprimer les bobines sélectionnées',
  4173. archiveTitle: 'Archiver les bobines sélectionnées',
  4174. restoreTitle: 'Restaurer les bobines sélectionnées',
  4175. resetUsageTitle: 'Réinitialiser l\'utilisation des bobines sélectionnées',
  4176. deleteMessage: 'Supprimer définitivement {{count}} bobines ? Cette action est irréversible.',
  4177. archiveMessage: 'Archiver {{count}} bobines ? Elles pourront être restaurées plus tard.',
  4178. restoreMessage: 'Restaurer {{count}} bobines archivées ?',
  4179. resetUsageMessage: 'Réinitialiser le compteur « Total consommé » sur {{count}} bobines ? Le poids restant est préservé.',
  4180. updateSuccess: '{{count}} bobines mises à jour',
  4181. updateFailed: 'Mise à jour groupée échouée',
  4182. updatePartial: '{{ok}} bobines mises à jour, {{failed}} échouées',
  4183. updateAllFailed: 'Les {{count}} mises à jour ont échoué — la sélection est conservée pour réessayer',
  4184. deleteSuccess: '{{count}} bobines supprimées',
  4185. deleteFailed: 'Suppression groupée échouée',
  4186. deletePartial: '{{ok}} bobines supprimées, {{failed}} échouées',
  4187. deleteAllFailed: 'Les {{count}} suppressions ont échoué — la sélection est conservée pour réessayer',
  4188. archiveSuccess: '{{count}} bobines archivées',
  4189. archiveFailed: 'Archivage groupé échoué',
  4190. archivePartial: '{{ok}} bobines archivées, {{failed}} échouées',
  4191. archiveAllFailed: 'Les {{count}} archivages ont échoué — la sélection est conservée pour réessayer',
  4192. restoreSuccess: '{{count}} bobines restaurées',
  4193. restoreFailed: 'Restauration groupée échouée',
  4194. restorePartial: '{{ok}} bobines restaurées, {{failed}} échouées',
  4195. restoreAllFailed: 'Les {{count}} restaurations ont échoué — la sélection est conservée pour réessayer',
  4196. invalidHex: 'Saisissez 6 caractères hex (RRVVBB) ou 8 (RRVVBBAA). Sinon le champ ne sera pas appliqué.',
  4197. },
  4198. spoolmanMixedContentTitle: 'Spoolman ne peut pas se charger en HTTPS — contenu mixte bloqué par votre navigateur',
  4199. spoolmanMixedContentBody: 'Bambuddy est servi en HTTPS (via votre reverse proxy), mais votre URL Spoolman est encore en HTTP. Les navigateurs bloquent le contenu mixte pour des raisons de sécurité, donc l\'interface Spoolman intégrée ne peut pas s\'afficher. Spoolman doit être accessible en HTTPS.',
  4200. spoolmanMixedContentFixReverseProxy: 'Placez Spoolman derrière le même reverse proxy que Bambuddy (Traefik / Nginx / Caddy) en HTTPS, puis mettez à jour l\'URL Spoolman dans les Paramètres avec la nouvelle adresse HTTPS.',
  4201. spoolmanMixedContentFixOpenNewTab: 'Alternative : ouvrez Spoolman dans un nouvel onglet en HTTP — les règles de contenu mixte ne s\'appliquent qu\'aux cadres intégrés, un onglet autonome fonctionne.',
  4202. spoolmanOpenInNewTab: 'Ouvrir Spoolman dans un nouvel onglet',
  4203. labels: {
  4204. title: 'Imprimer étiquettes de bobines',
  4205. selectedCount: '{{count}} sélectionné',
  4206. pickSpools: 'Choisissez les bobines pour lesquelles imprimer des étiquettes :',
  4207. monochrome: 'Monochrome (imprimante noir et blanc)',
  4208. monochromeHint: 'Supprime la pastille de couleur et élargit le texte',
  4209. searchPlaceholder: 'Rechercher par nom, marque ou #ID',
  4210. filterByMaterial: 'Matériau :',
  4211. allMaterials: 'Tout',
  4212. selectVisible: 'Sélectionner tout visible ({{count}})',
  4213. deselectVisible: 'Désélectionner visible',
  4214. clearAll: 'Tout effacer',
  4215. noSpoolsToShow: 'Aucune bobine à afficher. Ajustez votre filtre et réessayez.',
  4216. noMatches: 'Aucune bobine ne correspond à la recherche ou au filtre actuel.',
  4217. printOne: 'Imprimer l\'étiquette de cette bobine',
  4218. printLabels: 'Imprimer les étiquettes…',
  4219. bulkTitle: 'Choisissez les bobines à étiqueter parmi les {{count}} affichées',
  4220. noSpoolsTitle: 'Aucune bobine à étiqueter',
  4221. error: 'Impossible de générer les étiquettes : {{msg}}',
  4222. sortBy: {
  4223. label: 'Trier :',
  4224. id: 'Par ID',
  4225. color: 'Par couleur',
  4226. },
  4227. templates: {
  4228. amsHolderSmall: {
  4229. label: 'Support AMS — petit (74 × 33 mm)',
  4230. hint: 'Une étiquette par page ; correspond à l\'étiquette imprimable du modèle MakerWorld 752566 (Support d\'étiquettes pour filament AMS).',
  4231. },
  4232. amsHolderLarge: {
  4233. label: 'Support AMS — grand (75 × 55 mm)',
  4234. hint: 'Une étiquette par page ; s\'adapte à la variante carton du support d\'étiquettes pour filament AMS. Assez d\'espace pour pastille, marque, matériau, ID et QR code.',
  4235. },
  4236. box40x30: {
  4237. label: 'Étiquette boîte (40 × 30 mm)',
  4238. hint: 'Une étiquette par page ; taille de rouleau DK/Brother courante, idéale pour étiqueter sachets de filament et bacs de stockage.',
  4239. },
  4240. box: {
  4241. label: 'Box label (62 × 29 mm)',
  4242. hint: 'Une étiquette par page ; dimensionnée pour Brother PT/QL et petites étiquettes Dymo.',
  4243. },
  4244. averyL7160: {
  4245. label: 'Avery L7160 — A4 sheet (38.1 × 63.5 mm × 21)',
  4246. hint: 'Format de feuille UE ; 21 étiquettes par page A4.',
  4247. },
  4248. avery5160: {
  4249. label: 'Avery 5160 — US Letter sheet (25.4 × 66.7 mm × 30)',
  4250. hint: 'Format de feuille US ; 30 étiquettes par page Letter.',
  4251. },
  4252. },
  4253. },
  4254. csv: {
  4255. importButton: 'Importer CSV',
  4256. exportButton: 'Exporter CSV',
  4257. modalTitle: 'Importer des bobines depuis un CSV',
  4258. selectFile: 'Choisissez un fichier CSV ou glissez-le ici',
  4259. dragHint: 'En-tête : material (requis), brand, subtype, color_name, rgba, …',
  4260. parsing: 'Lecture du fichier…',
  4261. previewError: 'Impossible de lire le fichier CSV',
  4262. validCount: '{{count}} valides',
  4263. errorCount: '{{count}} en erreur',
  4264. skippedCount: '{{count}} ignorées',
  4265. colRow: 'Ligne',
  4266. colStatus: 'Statut',
  4267. colColor: 'Couleur',
  4268. colorResolved: 'Couleur remplie depuis le catalogue',
  4269. colorCrossMaterial: 'Couleur reprise d\'un autre matériau — aucune correspondance exacte dans le catalogue',
  4270. duplicateExisting: 'Une bobine avec ce matériau, cette marque et cette couleur existe déjà — elle sera tout de même importée comme une nouvelle bobine',
  4271. spoolmanHint: 'En mode Spoolman, utilisez l\'import/export CSV intégré de Spoolman.',
  4272. importValidRows: 'Importer {{count}} lignes valides',
  4273. noValidRows: 'Aucune ligne valide',
  4274. importing: 'Importation…',
  4275. importSuccess: '{{count}} bobines importées',
  4276. importError: 'Échec de l\'importation',
  4277. exportError: 'Échec de l\'exportation',
  4278. },
  4279. addSpool: 'Ajouter Bobine',
  4280. editSpool: 'Modifier Bobine',
  4281. copySpool: 'Copier Bobine',
  4282. material: 'Matériau',
  4283. selectMaterial: 'Choisir matériau...',
  4284. subtype: 'Sous-type',
  4285. brand: 'Marque',
  4286. searchBrand: 'Chercher marque...',
  4287. useCustomBrand: 'Utiliser "{{brand}}"',
  4288. useCustomMaterial: 'Utiliser un matériau personnalisé : {{material}}',
  4289. suggestedOptions: 'Suggérés',
  4290. allOptions: 'Tous',
  4291. colorName: 'Nom de couleur',
  4292. colorNamePlaceholder: 'Blanc Jade, Rouge Feu...',
  4293. color: 'Couleur',
  4294. hexColor: 'Code Hex',
  4295. pickColor: 'Choisir couleur perso',
  4296. labelWeight: 'Poids net',
  4297. coreWeight: 'Poids bobine vide',
  4298. searchSpoolWeight: 'Chercher poids bobine...',
  4299. weightUsed: 'Consommé',
  4300. currentWeight: 'Poids restant',
  4301. measuredWeight: 'Poids mesuré',
  4302. spoolName: 'Bobine',
  4303. costPerKg: 'Coût par kg',
  4304. storageLocation: 'Emplacement de stockage',
  4305. storageLocationPlaceholder: 'ex. Étagère A, Tiroir 1',
  4306. openInInventory: "Ouvrir dans l'inventaire",
  4307. measuredWeightError: 'Le poids mesuré doit être entre {{min}}g et {{max}}g.',
  4308. slicerFilament: 'Filament Slicer',
  4309. slicerFilamentName: 'Nom du Preset Slicer',
  4310. slicerPreset: 'Preset Slicer',
  4311. searchPresets: 'Chercher presets...',
  4312. selectedPreset: 'Sélectionné',
  4313. noPresetsFound: 'Aucun preset trouvé',
  4314. tempOverrides: 'Exceptions Température',
  4315. note: 'Note',
  4316. notePlaceholder: 'Notes additionnelles sur cette bobine...',
  4317. // Per-spool category + low-stock threshold override (#729)
  4318. category: 'Catégorie',
  4319. categoryPlaceholder: 'ex. Production, Prototype, Client A',
  4320. categoryNone: 'Sans catégorie',
  4321. storageLocationNone: 'Aucun emplacement défini',
  4322. lowStockThresholdOverride: 'Seuil bas (cette bobine)',
  4323. lowStockThresholdOverrideHelp: 'Laisser vide pour utiliser le seuil global ({{global}} %).',
  4324. clearRfid: 'Effacer le tag RFID',
  4325. rfidCleared: 'Tag RFID effacé',
  4326. archive: 'Archiver',
  4327. restore: 'Restaurer',
  4328. noSpools: 'Aucune bobine. Ajoutez votre première bobine pour commencer.',
  4329. noAvailableSpools: 'Aucune bobine disponible. Ajoutez une bobine à votre inventaire ou désaffectez-en une d\'un autre emplacement.',
  4330. kProfiles: 'Profils K',
  4331. addKProfile: 'Ajouter K-Profile',
  4332. assignSpool: 'Assigner Bobine',
  4333. unassignSpool: 'Désassigner',
  4334. assignSuccess: 'Bobine assignée et slot AMS configuré',
  4335. assignPendingInsert: 'Assigné. Le slot sera configuré lors de l\'insertion de la bobine.',
  4336. assignFailed: 'Échec assignation',
  4337. selectSpool: 'Choisir une bobine pour ce slot',
  4338. assigned: 'Assigné',
  4339. assigning: 'Assignation...',
  4340. searchSpools: 'Chercher bobines...',
  4341. showAllSpools: 'Afficher toutes les bobines',
  4342. spoolmanSpools: 'Bobines Spoolman',
  4343. allMaterials: 'Tous Matériaux',
  4344. filterByBrand: 'Filtrer par marque...',
  4345. showArchived: 'Afficher archivées',
  4346. quickAdd: 'Ajout rapide (Stock)',
  4347. quantity: 'Quantité',
  4348. stock: 'Stock',
  4349. configured: 'Configuré',
  4350. spoolsCreated: '{{count}} bobines créées',
  4351. spoolsPartiallyCreated: '{{created}} sur {{total}} bobines créées (certaines ont échoué)',
  4352. spoolCreated: 'Bobine créée',
  4353. spoolUpdated: 'Bobine mise à jour',
  4354. spoolDeleted: 'Bobine supprimée',
  4355. deepLinkSpoolNotFound: 'Bobine introuvable',
  4356. deepLinkFetchFailed: 'Impossible de charger la bobine — réessayez',
  4357. spoolArchived: 'Bobine archivée',
  4358. spoolRestored: 'Bobine restaurée',
  4359. kProfileSaveFailed: 'Les paramètres de profil K n\'ont pas pu être enregistrés',
  4360. syncWeightSpoolNotFound: 'Bobine introuvable — elle a peut-être été supprimée',
  4361. syncWeightSpoolmanUnreachable: 'Spoolman est inaccessible — réessayez plus tard',
  4362. syncWeightFailed: 'Échec de la synchronisation du poids',
  4363. spoolmanUnreachable: 'Spoolman est inaccessible — veuillez réessayer plus tard',
  4364. deleteSpoolNotFound: 'Bobine introuvable — elle a peut-être déjà été supprimée',
  4365. deleteFailed: 'Impossible de supprimer la bobine',
  4366. archiveSpoolNotFound: 'Bobine introuvable — elle a peut-être déjà été supprimée',
  4367. archiveFailed: 'Impossible d\'archiver la bobine',
  4368. restoreSpoolNotFound: 'Bobine introuvable — elle a peut-être déjà été supprimée',
  4369. restoreFailed: 'Impossible de restaurer la bobine',
  4370. saveFailed: 'Impossible d\'enregistrer les modifications',
  4371. tagClearFailed: 'Impossible de supprimer le tag',
  4372. deleteConfirm: 'Supprimer définitivement cette bobine ?',
  4373. archiveConfirm: 'Voulez-vous vraiment archiver cette bobine ?',
  4374. advancedSettings: 'Paramètres Avancés',
  4375. // Tabs
  4376. filamentInfoTab: 'Infos Filament',
  4377. paProfileTab: 'Profil PA',
  4378. filamentInfo: 'Filament',
  4379. additional: 'Additionnel',
  4380. // Cloud
  4381. loadingPresets: 'Chargement des presets cloud...',
  4382. cloudConnected: 'Cloud connecté',
  4383. cloudNotConnected: 'Cloud déconnecté (valeurs par défaut)',
  4384. // Colors
  4385. recentColors: 'Récentes',
  4386. searchColors: 'Chercher couleurs...',
  4387. searchResults: 'Résultats',
  4388. allColors: 'Toutes',
  4389. commonColors: 'Communes',
  4390. showLess: 'Moins',
  4391. showAll: 'Toutes',
  4392. noColorsFound: 'Aucune couleur correspondante',
  4393. noResults: 'Aucun résultat',
  4394. // Multi-color gradient + visual effect (#1154) — English fallback.
  4395. extraColorsLabel: 'Couleurs supplémentaires',
  4396. extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694',
  4397. extraColorsHint: 'Collez 2 à 8 stops hex, séparés par des virgules. Affiché en dégradé.',
  4398. extraColorsInvalid: 'Hex non valides ignorés : {{tokens}}',
  4399. colorEffectLabel: 'Effet',
  4400. colorEffect: {
  4401. none: 'Aucun',
  4402. sparkle: 'Pailleté',
  4403. wood: 'Bois',
  4404. marble: 'Marbre',
  4405. glow: 'Lueur',
  4406. matte: 'Mat',
  4407. silk: 'Soie',
  4408. galaxy: 'Galaxie',
  4409. rainbow: 'Arc-en-ciel',
  4410. metal: 'Métal',
  4411. translucent: 'Translucide',
  4412. gradient: 'Dégradé',
  4413. dualColor: 'Bicolore',
  4414. triColor: 'Tricolore',
  4415. multicolor: 'Multicolore',
  4416. },
  4417. // PA Profiles
  4418. selectMaterialFirst: 'Veuillez choisir un matériau dans l\'onglet Infos Filament.',
  4419. noPrintersConfigured: 'Ajoutez une imprimante pour utiliser les profils PA.',
  4420. matchingFilter: 'Correspondant',
  4421. anyBrand: 'Toute marque',
  4422. anyVariant: 'Toute variante',
  4423. autoSelect: 'Auto-sélection',
  4424. matches: 'correspondances',
  4425. match: 'correspondance',
  4426. noMatches: 'Aucune correspondance',
  4427. connected: 'Connecté',
  4428. offline: 'Hors ligne',
  4429. printerOffline: 'Imprimante hors ligne. Connectez-vous pour voir les profils.',
  4430. noKProfilesMatch: 'Aucun profil K ne correspond au filament.',
  4431. leftNozzle: 'Buse Gauche',
  4432. rightNozzle: 'Buse Droite',
  4433. profilesSelected: 'profil(s) de calibration sélectionné(s)',
  4434. // Stats & enhanced table
  4435. totalInventory: 'Total Inventaire',
  4436. totalConsumed: 'Total Consommé',
  4437. byMaterial: 'Par Matériau',
  4438. inPrinter: 'Dans Imprimante',
  4439. lowStock: 'Stock Bas',
  4440. sinceTracking: 'Depuis le début du suivi',
  4441. resetConsumedCounter: 'Réinitialiser le compteur',
  4442. resetConsumedCounterTooltip: 'Remettre à zéro le compteur de grammes consommés pour cette bobine. Le poids restant n\'est pas modifié.',
  4443. resetConsumedCounterConfirm: 'Remettre à 0 le compteur de grammes consommés de cette bobine ? Les futures impressions repartiront de zéro. La bobine, son calcul de poids restant et vos paramètres ne sont pas modifiés.',
  4444. resetAllConsumedCounters: 'Réinitialiser tous les compteurs',
  4445. resetAllConsumedCountersTooltip: 'Remettre à zéro le compteur de grammes consommés sur chaque bobine. Les poids restants ne sont pas modifiés.',
  4446. resetAllConsumedCountersConfirm: 'Remettre à 0 le compteur de grammes consommés sur les {{count}} bobines (archivées incluses) ? Cela efface la valeur « Total Consommé » pour que les futures impressions repartent de zéro. Les bobines et les poids restants ne sont pas modifiés.',
  4447. consumedCounterReset: 'Compteur réinitialisé',
  4448. allConsumedCountersReset: 'Compteur réinitialisé pour {{count}} bobine(s)',
  4449. resetConsumedCounterFailed: 'Échec de la réinitialisation du compteur',
  4450. loadedInAms: 'Chargé dans AMS/Ext',
  4451. remaining: 'Restant',
  4452. weightCheck: 'Vérification poids',
  4453. lastWeighed: 'Dernière pesée',
  4454. neverWeighed: 'Jamais pesé',
  4455. search: 'Chercher bobines...',
  4456. showing: 'Affichage',
  4457. to: 'à',
  4458. of: 'sur',
  4459. show: 'Voir',
  4460. spools: 'bobines',
  4461. spool: 'bobine',
  4462. page: 'Page',
  4463. noSpoolsMatch: 'Aucun résultat trouvé',
  4464. noSpoolsMatchDesc: 'Ajustez votre recherche ou vos filtres.',
  4465. active: 'Actif',
  4466. archived: 'Archivé',
  4467. all: 'Tous',
  4468. used: 'Occasion',
  4469. new: 'Neuf',
  4470. clearFilters: 'Effacer filtres',
  4471. table: 'Tableau',
  4472. cards: 'Cartes',
  4473. net: 'Réseau',
  4474. // Grouping
  4475. groupSimilar: 'Grouper',
  4476. groupedSpools: '{{count}} bobines identiques',
  4477. groupedRows: 'lignes',
  4478. // Column config
  4479. columns: 'Colonnes',
  4480. configureColumns: 'Configurer Colonnes',
  4481. configureColumnsDesc: 'Glissez pour ordonner ou utilisez les flèches. Cliquez sur l\'œil pour masquer.',
  4482. visible: 'visible',
  4483. reset: 'Réinitialiser',
  4484. cancel: 'Annuler',
  4485. applyChanges: 'Appliquer',
  4486. moveUp: 'Monter',
  4487. moveDown: 'Descendre',
  4488. hideColumn: 'Masquer',
  4489. showColumn: 'Afficher',
  4490. // Tag linking
  4491. linkToSpool: 'Lier à une Bobine',
  4492. tagLinked: 'Tag lié à la bobine',
  4493. tagLinkFailed: 'Échec lien tag',
  4494. tagAlreadyLinked: 'Tag déjà lié à une autre bobine',
  4495. unknownTag: 'Tag RFID inconnu détecté',
  4496. // Usage history
  4497. usageHistory: 'Historique de Consommation',
  4498. noUsageHistory: 'Aucune consommation enregistrée',
  4499. printName: 'Nom Impression',
  4500. weightConsumed: 'Poids consommé',
  4501. clearHistory: 'Effacer',
  4502. historyCleared: 'Historique effacé',
  4503. fillSourceLabel: '(Inv)',
  4504. lowStockThresholdError: 'Le seuil doit être compris entre 0.1 et 99.9',
  4505. assignMismatchTitle: 'Incompatibilité de matériau',
  4506. assignMismatchMessage: 'Le matériau de la bobine sélectionnée "{{spoolMaterial}}" ne correspond pas au matériau du plateau "{{trayMaterial}}" pour {{location}}. Assigner quand même ?',
  4507. assignMismatchConfirm: 'Assigner quand même',
  4508. assignPartialMismatchMessage: 'Le matériau de la bobine "{{spoolMaterial}}" est similaire, mais ne correspond pas exactement à "{{trayMaterial}}" dans {{location}}. Voulez-vous continuer ?',
  4509. assignProfileMismatchMessage: 'Le profil de la bobine "{{spoolProfile}}" ne correspond pas au profil du plateau "{{trayProfile}}" dans {{location}}. Voulez-vous continuer ?',
  4510. assignReconfigureNote: 'Le slot AMS sera reconfiguré pour utiliser le profil de la bobine.',
  4511. // Spoolman filament catalog picker
  4512. spoolmanFilamentCatalog: 'Catalogue de filaments Spoolman',
  4513. pickFromSpoolmanCatalog: 'Choisir dans le catalogue Spoolman…',
  4514. spoolmanFilamentSelected: 'Filament sélectionné depuis le catalogue Spoolman',
  4515. spoolmanFilamentUnlinked: 'Lien avec le catalogue de filaments supprimé',
  4516. noSpoolmanFilaments: 'Aucun filament trouvé dans le catalogue Spoolman',
  4517. spoolmanFilamentColorSwatch: 'Couleur du filament',
  4518. spoolWeightManagedBySpoolman: 'Le poids de la bobine vide est géré par type de filament dans Spoolman',
  4519. spoolmanCatalogLoadFailed: 'Impossible de charger le catalogue Spoolman',
  4520. },
  4521. // Timelapse
  4522. timelapse: {
  4523. title: 'Time-lapse',
  4524. create: 'Créer Timelapse',
  4525. download: 'Télécharger',
  4526. delete: 'Supprimer',
  4527. preview: 'Aperçu',
  4528. frameRate: 'Images/sec',
  4529. quality: 'Qualité',
  4530. processing: 'Traitement...',
  4531. noTimelapses: 'Aucun timelapse',
  4532. },
  4533. // AMS
  4534. ams: {
  4535. title: 'AMS',
  4536. slot: 'Emplacement',
  4537. empty: 'Vide',
  4538. emptySlot: 'Slot vide',
  4539. slotEmpty: 'Vide',
  4540. slotUnconfigured: '?',
  4541. emptySlotReset: 'Aucune bobine assignée',
  4542. unknown: 'Inconnu',
  4543. humidity: 'Humidité',
  4544. temperature: 'Température',
  4545. filamentType: 'Type filament',
  4546. filamentColor: 'Couleur',
  4547. remaining: 'Restant',
  4548. history: 'Historique AMS',
  4549. noHistory: 'Aucun historique',
  4550. configureSlot: 'Configurer Slot',
  4551. externalSpool: 'Bobine externe',
  4552. profile: 'Profil',
  4553. kFactor: 'Facteur K',
  4554. fill: 'Remplir',
  4555. configure: 'Configurer',
  4556. used: 'utilisé',
  4557. remainingUnit: 'restant',
  4558. },
  4559. // Print modal
  4560. printModal: {
  4561. selectPrinter: 'Choisir l\'imprimante',
  4562. selectPlate: 'Choisir le plateau',
  4563. filamentMapping: 'Mapping Filament',
  4564. plateN: 'Plateau {{n}}',
  4565. plateFilamentsUnreadable: 'Les filaments d\'un plateau sélectionné n\'ont pas pu être lus, il est donc impossible de l\'affecter. Désélectionnez-le pour mettre les autres en file.',
  4566. totalCost: 'Coût total :',
  4567. slotRemainingShort: ' - {{grams}}g rest.',
  4568. printSettings: 'Réglages d\'impression',
  4569. bedLeveling: 'Nivellement plateau',
  4570. flowCalibration: 'Calibration débit',
  4571. vibrationCalibration: 'Vibration (Input Shaper)',
  4572. layerInspection: 'Inspection 1ère couche',
  4573. timelapse: 'Time-lapse',
  4574. cancel: 'Annuler',
  4575. noPrintersAvailable: 'Aucune imprimante disponible',
  4576. printerBusy: 'L\'imprimante est occupée',
  4577. printerOffline: 'L\'imprimante est hors ligne',
  4578. sameTypeDifferentColor: 'Même type, couleur différente',
  4579. filamentTypeNotLoaded: 'Type de filament non chargé',
  4580. whenToPrint: 'Quand imprimer',
  4581. asap: 'Dès que possible',
  4582. queue: 'File',
  4583. schedule: 'Planifier',
  4584. dateTime: 'Date et heure',
  4585. invalidDateTime: 'Veuillez saisir une date et une heure valides',
  4586. openCalendar: 'Ouvrir calendrier',
  4587. requireManualStart: 'Démarrage manuel requis',
  4588. requirePreviousSuccess: 'Démarrer seulement si l\'impression précédente a réussi',
  4589. autoOffAfter: 'Éteindre l\'imprimante à la fin',
  4590. helpAsap: 'L\'impression sera ajoutée en haut de la file et démarrera dès qu\'une imprimante éligible sera inactive.',
  4591. helpSchedule: 'L\'impression démarrera à l\'heure planifiée si l\'imprimante est inactive. Si elle est occupée, elle attendra qu\'elle soit disponible.',
  4592. helpQueue: 'L\'impression sera ajoutée à la fin de la file.',
  4593. leftNozzle: 'G',
  4594. rightNozzle: 'D',
  4595. leftNozzleTooltip: 'Buse gauche',
  4596. rightNozzleTooltip: 'Buse droite',
  4597. filamentOverride: 'Remplacement de filament',
  4598. filamentOverrideHint: 'Remplacez optionnellement les filaments pour l\'affectation par modèle. Le planificateur utilisera vos filaments sélectionnés au lieu des valeurs 3MF d\'origine.',
  4599. originalFilament: 'Original',
  4600. overrideWith: 'Remplacer par',
  4601. resetToOriginal: 'Revenir à l\'original',
  4602. insufficientFilamentTitle: 'Filament insuffisant',
  4603. waitingForAmsStatus: 'En attente de l\'état de l\'AMS de {{printer}}…',
  4604. insufficientFilamentMessage: 'Certaines bobines assignées ont moins de filament restant que nécessaire pour cette impression :',
  4605. insufficientFilamentLine: '{{printer}} - {{slot}} : nécessite {{required}}g, restant {{remaining}}g',
  4606. printAnyway: 'Imprimer quand même',
  4607. forceColorMatch: 'Forcer correspondance des couleurs',
  4608. staggerPrinterStarts: 'Échelonner démarrages',
  4609. staggerGroupSize: 'Taille du groupe',
  4610. staggerInterval: 'Intervalle (min)',
  4611. staggerPreview: '{{printers}} imprimantes → {{groups}} groupes de {{size}}, démarrage toutes les {{interval}} min',
  4612. staggerLastGroup: 'dernier groupe : {{count}}',
  4613. staggerTotal: 'total : {{minutes}} min',
  4614. staggerToPrinters: 'Échelonner sur {{count}} imprimantes',
  4615. gcodeInjection: 'Injecter le G-code auto-impression',
  4616. },
  4617. // Backup
  4618. backup: {
  4619. includesEncryptionKey: 'Les sauvegardes locales incluent le fichier de clé de chiffrement MFA (DATA_DIR/.mfa_encryption_key), donc un ZIP de sauvegarde est autonome. Traitez le ZIP comme sensible — quiconque possède le fichier peut déchiffrer les secrets client OIDC et TOTP qu\'il contient.',
  4620. title: 'Sauvegarde & Restauration',
  4621. createBackup: 'Créer Sauvegarde',
  4622. restoreBackup: 'Restaurer Sauvegarde',
  4623. restoreDescription: 'Remplace les données par un fichier de sauvegarde',
  4624. downloadBackup: 'Télécharger Sauvegarde',
  4625. uploadBackup: 'Téléverser Sauvegarde',
  4626. lastBackup: 'Dernière sauvegarde',
  4627. autoBackup: 'Sauvegarde auto',
  4628. backupNow: 'Sauvegarder maintenant',
  4629. restoreWarning: 'Attention : Écrase TOUTES les données actuelles.',
  4630. includeArchives: 'Inclure Archives',
  4631. includeSettings: 'Inclure Paramètres',
  4632. includeProfiles: 'Inclure Profils',
  4633. backupSuccess: 'Sauvegarde réussie',
  4634. restoreSuccess: 'Restauration réussie',
  4635. backupFailed: 'Échec sauvegarde',
  4636. restoreFailed: 'Échec restauration',
  4637. restoreNote: 'L\'imprimante virtuelle sera arrêtée pendant la restauration',
  4638. // GitHub Backup
  4639. githubBackup: 'Sauvegarde GitHub',
  4640. enabled: 'Activé',
  4641. cloudLoginRequired: 'Connexion Bambu Cloud requise. Connectez-vous sous Profils → Profils Cloud pour activer la sauvegarde GitHub.',
  4642. cloudLoginRequiredShort: 'Connexion Cloud requise',
  4643. githubDescription: 'Synchronisez automatiquement vos profils vers un dépôt GitHub privé pour la sauvegarde et l\'historique des versions.',
  4644. repoIsPrivate: 'Le dépôt est privé — la sauvegarde peut s\'y faire en toute sécurité.',
  4645. repoIsPublicWarning: 'Le dépôt est PUBLIC. Les sauvegardes Bambuddy contiennent les identifiants MQTT, les jetons Home Assistant, les jetons Prometheus, votre adresse Bambu Cloud, et les codes d\'accès des imprimantes via les K-profils. L\'enregistrement est bloqué tant que le dépôt n\'est pas passé en privé dans les paramètres de votre hébergeur.',
  4646. repoVisibilityUnknown: 'Impossible de déterminer la visibilité du dépôt. Bambuddy refuse toute sauvegarde vers un dépôt non confirmé privé ; l\'enregistrement sera bloqué.',
  4647. repositoryUrl: 'URL du dépôt',
  4648. repoUrlPlaceholderGitHub: 'https://github.com/username/repo-name',
  4649. repoUrlPlaceholderGitea: 'https://gitea.example.com/username/repo-name',
  4650. repoUrlPlaceholderForgejo: 'https://forgejo.example.com/username/repo-name',
  4651. repoUrlPlaceholderGitLab: 'https://gitlab.com/username/repo-name',
  4652. allowInsecureHttp: 'Autoriser HTTP non sécurisé',
  4653. allowInsecureHttpHint: 'Activer pour les instances auto-hébergées sur des réseaux privés sans TLS',
  4654. personalAccessToken: 'Jeton d\'accès personnel',
  4655. tokenSaved: '(enregistré)',
  4656. enterNewToken: 'Entrez un nouveau jeton pour mettre à jour',
  4657. tokenHint: 'Jeton à granularité fine avec permission de lecture/écriture du contenu',
  4658. branch: 'Branche',
  4659. provider: 'Fournisseur Git',
  4660. providerGitHub: 'GitHub',
  4661. providerGitLab: 'GitLab',
  4662. providerGitea: 'Gitea',
  4663. providerForgejo: 'Forgejo',
  4664. manualOnly: 'Manuel uniquement',
  4665. hourly: 'Toutes les heures',
  4666. daily: 'Quotidien',
  4667. weekly: 'Hebdomadaire',
  4668. includeInBackup: 'Inclure dans la sauvegarde',
  4669. kProfiles: 'K-Profils',
  4670. kProfilesDescription: 'Calibration de l\'avance de pression des imprimantes connectées',
  4671. noPrintersConnected: 'Aucune imprimante connectée',
  4672. printersConnected: '{{connected}}/{{total}} connectées',
  4673. cloudProfiles: 'Profils Cloud',
  4674. cloudProfilesDescription: 'Préréglages de filament, imprimante et processus depuis Bambu Cloud',
  4675. appSettings: 'Paramètres de l\'application',
  4676. appSettingsDescription: 'Configuration Bambuddy (base de données complète)',
  4677. spoolInventory: 'Inventaire des bobines',
  4678. spoolInventoryDescription: 'Bobines de filament, historique d\'utilisation et suivi des coûts',
  4679. printArchives: 'Archives d\'impression',
  4680. printArchivesDescription: 'Métadonnées de l\'historique d\'impression (pas de fichiers gcode/3MF)',
  4681. lastBackupAt: 'Dernière sauvegarde :',
  4682. noBackupsYet: 'Aucune sauvegarde pour l\'instant',
  4683. next: 'Prochaine :',
  4684. startingBackup: 'Démarrage de la sauvegarde...',
  4685. test: 'Tester',
  4686. enableBackup: 'Activer la sauvegarde',
  4687. testConnection: 'Tester la connexion',
  4688. enterRepoUrl: 'Entrez l\'URL du dépôt',
  4689. enterRepoAndToken: 'Entrez l\'URL du dépôt et le jeton d\'accès',
  4690. repoRequired: 'L\'URL du dépôt est requise',
  4691. tokenRequired: 'Le jeton d\'accès est requis',
  4692. githubBackupEnabled: 'Sauvegarde GitHub activée',
  4693. tokenUpdated: 'Jeton mis à jour',
  4694. settingsSaved: 'Paramètres enregistrés',
  4695. failedToSave: 'Échec de l\'enregistrement : {{message}}',
  4696. backupCompleteFiles: 'Sauvegarde terminée - {{count}} fichiers mis à jour',
  4697. backupSkippedNoChanges: 'Sauvegarde ignorée - aucun changement',
  4698. backupFailed2: 'Échec de la sauvegarde : {{message}}',
  4699. clearedLogs: '{{count}} journaux supprimés',
  4700. failedToClearLogs: 'Échec de la suppression des journaux : {{message}}',
  4701. // History
  4702. history: 'Historique',
  4703. clear: 'Effacer',
  4704. date: 'Date',
  4705. status: 'Statut',
  4706. commit: 'Commit',
  4707. // Local Backup
  4708. localBackup: 'Sauvegarde locale',
  4709. localBackupDescription: 'Créez une sauvegarde complète de vos données Bambuddy incluant la base de données, les archives, les téléchargements et tous les fichiers.',
  4710. downloadBackupLabel: 'Télécharger la sauvegarde',
  4711. completeBackupZip: 'Sauvegarde complète : base de données + tous les fichiers (ZIP)',
  4712. download: 'Télécharger',
  4713. preparingBackup: 'Préparation de la sauvegarde...',
  4714. creatingArchive: 'Création de l\'archive de sauvegarde... Cela peut prendre un moment pour les archives volumineuses.',
  4715. downloadingFile: 'Téléchargement du fichier de sauvegarde...',
  4716. backupDownloaded: 'Sauvegarde téléchargée avec succès',
  4717. failedToCreateBackup: 'Échec de la création de la sauvegarde : {{message}}',
  4718. restore: 'Restaurer',
  4719. restoreReplacesAll: 'La restauration remplace toutes les données.',
  4720. restoreReplacesAllDetail: 'Votre base de données et vos fichiers actuels seront complètement remplacés. Un redémarrage est nécessaire après la restauration.',
  4721. restoreConfirmTitle: 'Restaurer la sauvegarde',
  4722. restoreConfirmMessage: 'Êtes-vous sûr de vouloir restaurer depuis "{{filename}}" ? Cela remplacera complètement votre base de données et tous vos fichiers. L\'application devra être redémarrée après la restauration.',
  4723. restoreConfirmButton: 'Restaurer la sauvegarde',
  4724. uploadingFile: 'Téléchargement du fichier de sauvegarde...',
  4725. backupRestoredRestart: 'Sauvegarde restaurée. Veuillez redémarrer Bambuddy.',
  4726. failedToRestore: 'Échec de la restauration. Veuillez vérifier le format du fichier.',
  4727. reloadNow: 'Recharger maintenant',
  4728. creatingBackup: 'Création de la sauvegarde',
  4729. restoringBackup: 'Restauration de la sauvegarde',
  4730. preparing: 'Préparation...',
  4731. processing: 'Traitement...',
  4732. doNotClosePage: 'Veuillez ne pas fermer cette page ni naviguer ailleurs. Cette opération peut prendre plusieurs minutes pour les sauvegardes volumineuses.',
  4733. // RestoreModal
  4734. restoring: 'Restauration...',
  4735. restoreComplete: 'Restauration terminée',
  4736. restoreFailed2: 'Échec de la restauration',
  4737. importSettings: 'Importer les paramètres depuis un fichier de sauvegarde',
  4738. pleaseWaitRestoring: 'Veuillez patienter pendant la restauration de vos données',
  4739. selectBackupFile: 'Cliquez pour sélectionner un fichier de sauvegarde (.json ou .zip)',
  4740. duplicateHandling: 'Comment fonctionne la gestion des doublons :',
  4741. matchPrinters: 'Imprimantes',
  4742. matchPrintersBy: 'correspondance par numéro de série',
  4743. matchSmartPlugs: 'Prises connectées',
  4744. matchSmartPlugsBy: 'correspondance par adresse IP',
  4745. matchNotificationProviders: 'Fournisseurs de notifications',
  4746. matchNotificationProvidersBy: 'correspondance par nom',
  4747. matchFilaments: 'Filaments',
  4748. matchFilamentsBy: 'correspondance par nom + type + marque',
  4749. matchArchives: 'Archives',
  4750. matchArchivesBy: 'correspondance par hash de contenu (toujours ignoré)',
  4751. matchPendingUploads: 'Téléchargements en attente',
  4752. matchPendingUploadsBy: 'correspondance par nom de fichier',
  4753. matchSettingsTemplates: 'Paramètres et modèles',
  4754. matchSettingsTemplatesBy: 'toujours écrasés',
  4755. replaceExisting: 'Remplacer les données existantes',
  4756. keepExisting: 'Conserver les données existantes',
  4757. overwriteDescription: 'Écraser les éléments qui existent déjà avec les données de sauvegarde',
  4758. keepDescription: 'Restaurer uniquement les éléments qui n\'existent pas encore',
  4759. overwriteCaution: 'Attention :',
  4760. overwriteWarning: 'L\'écrasement remplacera vos configurations actuelles par les données de la sauvegarde. Les codes d\'accès des imprimantes ne sont jamais écrasés pour des raisons de sécurité.',
  4761. cancel: 'Annuler',
  4762. processingBackup: 'Traitement du fichier de sauvegarde...',
  4763. itemsRestored: 'Éléments restaurés',
  4764. itemsSkipped: 'Éléments ignorés',
  4765. restored: 'Restaurés',
  4766. skippedAlreadyExist: 'Ignorés (existent déjà)',
  4767. filesCategory: 'Fichiers (3MF, miniatures, etc.)',
  4768. andMore: '...et {{count}} de plus',
  4769. newApiKeysGenerated: 'Nouvelles clés API générées',
  4770. keysShownOnce: 'Ces clés ne sont affichées qu\'une seule fois. Copiez-les maintenant !',
  4771. copy: 'Copier',
  4772. noDataFound: 'Aucune donnée à restaurer n\'a été trouvée dans le fichier de sauvegarde.',
  4773. close: 'Fermer',
  4774. // Scheduled local backups (#884)
  4775. scheduledBackup: 'Sauvegardes planifiées',
  4776. scheduledBackupDescription: 'Crée automatiquement des instantanés de sauvegarde selon un planning. Le répertoire de sortie peut être monté sur un NAS ou un stockage externe.',
  4777. frequency: 'Fréquence',
  4778. backupTime: 'Temps',
  4779. retention: 'Rétention',
  4780. retentionDescription: 'Nombre de sauvegardes à conserver',
  4781. outputPath: 'Chemin de sortie',
  4782. outputPathPlaceholder: 'Par défaut : {{path}}',
  4783. outputPathDescription: 'Laisser vide pour l\'emplacement par défaut',
  4784. runNow: 'Exécuter maintenant',
  4785. backupFiles: 'Fichiers de sauvegarde',
  4786. noScheduledBackups: 'Aucune sauvegarde',
  4787. deleteBackup: 'Supprimer',
  4788. deleteBackupConfirm: 'Supprimer ce fichier de sauvegarde ?',
  4789. backupRunning: 'Sauvegarde en cours...',
  4790. scheduledBackupComplete: 'Sauvegarde terminée avec succès',
  4791. scheduledBackupFailed: 'Échec de la sauvegarde',
  4792. nextBackup: 'Prochaine sauvegarde',
  4793. backupSize: 'Taille',
  4794. localTimeHint: 'Heure locale ({{tz}})',
  4795. defaultPathLabel: 'Par défaut :',
  4796. // Backup output-path probe (#2544)
  4797. pathCheck: {
  4798. title: 'Bambuddy ne peut pas écrire dans ce répertoire',
  4799. howToFix: 'Comment corriger :',
  4800. sandboxed: 'Le service Bambuddy ne peut pas écrire dans {{path}}. Son unité systemd s\'exécute avec ProtectSystem=strict, ce qui rend tout répertoire en dehors des répertoires d\'installation, de données et de journaux en lecture seule pour le service - même un répertoire dans lequel vous pouvez écrire depuis votre propre shell.',
  4801. read_only: '{{path}} se trouve sur un système de fichiers en lecture seule.',
  4802. permission_denied: 'Bambuddy n\'est pas autorisé à écrire dans {{path}}. Vérifiez le propriétaire et les permissions du répertoire.',
  4803. no_space: 'Le système de fichiers contenant {{path}} est plein.',
  4804. not_a_directory: '{{path}} existe mais n\'est pas un répertoire.',
  4805. missing: '{{path}} n\'existe pas et n\'a pas pu être créé.',
  4806. error: 'Bambuddy ne peut pas écrire dans {{path}}.',
  4807. ephemeralTitle: 'Ces sauvegardes ne survivront pas à la recréation du conteneur',
  4808. container_ephemeral: '{{path}} se trouve dans le conteneur Bambuddy, pas sur l\'hôte. Les sauvegardes qui y sont écrites sont perdues à la recréation du conteneur. Montez le répertoire depuis l\'hôte :',
  4809. },
  4810. // Category labels
  4811. categories: {
  4812. settings: 'Paramètres',
  4813. notification_providers: 'Fournisseurs de notifications',
  4814. notification_templates: 'Modèles de notifications',
  4815. smart_plugs: 'Prises connectées',
  4816. printers: 'Imprimantes',
  4817. filaments: 'Filaments',
  4818. maintenance_types: 'Types de maintenance',
  4819. archives: 'Archives',
  4820. projects: 'Projets',
  4821. pending_uploads: 'Téléchargements en attente',
  4822. external_links: 'Liens externes',
  4823. api_keys: 'Clés API',
  4824. },
  4825. },
  4826. // Tags
  4827. tags: {
  4828. title: 'Étiquettes',
  4829. addTag: 'Ajouter Tag',
  4830. editTag: 'Modifier Tag',
  4831. deleteTag: 'Supprimer Tag',
  4832. tagName: 'Nom du Tag',
  4833. tagColor: 'Couleur du Tag',
  4834. noTags: 'Aucun tag',
  4835. deleteConfirm: 'Supprimer ce tag ?',
  4836. manageTags: 'Gérer les Tags',
  4837. },
  4838. // Upload modal (archives)
  4839. uploadModal: {
  4840. title: 'Téléverser des fichiers 3MF',
  4841. dragDrop: 'Glissez les fichiers .3mf ici',
  4842. or: 'ou',
  4843. browseFiles: 'Parcourir',
  4844. extractionInfo: 'Le modèle d\'imprimante est extrait des métadonnées 3MF.',
  4845. uploaded: 'téléversé',
  4846. failed: 'échoué',
  4847. uploading: 'En cours...',
  4848. upload: 'Téléverser',
  4849. uploadFailed: 'Échec du téléversement',
  4850. },
  4851. // Edit archive modal
  4852. // Edit Archive Modal
  4853. editArchive: {
  4854. title: 'Modifier l\'archive',
  4855. name: 'Nom',
  4856. namePlaceholder: 'Nom de l\'impression',
  4857. printer: 'Imprimante',
  4858. noPrinter: 'Aucune imprimante',
  4859. project: 'Projet',
  4860. noProject: 'Aucun projet',
  4861. itemsPrinted: 'Nombre de pièces',
  4862. itemsPrintedHelp: 'Nombre d\'objets produits',
  4863. notes: 'Notes',
  4864. notesPlaceholder: 'Notes sur l\'impression...',
  4865. externalLink: 'Lien externe',
  4866. externalLinkPlaceholder: 'https://...',
  4867. externalLinkHelp: 'Lien vers Printables, Thingiverse, etc.',
  4868. tags: 'Étiquettes',
  4869. tagsPlaceholder: 'Ajouter des tags...',
  4870. addMoreTags: 'Plus de tags...',
  4871. matchingTags: 'Correspondant à "{{query}}"',
  4872. existingTags: 'Tags existants',
  4873. clickToAdd: '(cliquer pour ajouter)',
  4874. status: 'Statut',
  4875. failureReason: 'Raison de l\'échec',
  4876. selectReason: 'Choisir raison...',
  4877. photos: 'Photos du résultat',
  4878. photosHelp: 'Cliquez sur + pour ajouter des photos',
  4879. printResult: 'Résultat d\'impression',
  4880. saving: 'Enregistrement...',
  4881. // Failure reasons
  4882. failureReasons: {
  4883. adhesionFailure: 'Défaut d\'adhésion',
  4884. spaghettiDetached: 'Spaghetti / Détaché',
  4885. layerShift: 'Décalage de couche',
  4886. cloggedNozzle: 'Buse bouchée',
  4887. filamentRunout: 'Filament fini',
  4888. warping: 'Warping (Déformation)',
  4889. stringing: 'Stringing (Cheveux d\'ange)',
  4890. underExtrusion: 'Sous-extrusion',
  4891. powerFailure: 'Coupure courant',
  4892. userCancelled: 'Annulé par l\'utilisateur',
  4893. other: 'Autre',
  4894. },
  4895. // Archive statuses
  4896. statuses: {
  4897. completed: 'Réussie',
  4898. failed: 'Échouée',
  4899. aborted: 'Annulée',
  4900. printing: 'Impression',
  4901. },
  4902. },
  4903. // K-Profiles
  4904. kProfiles: {
  4905. title: 'Profils K',
  4906. noPrintersConfigured: 'Aucune imprimante configurée',
  4907. addPrinterInSettings: 'Ajoutez une imprimante pour gérer les K-profiles',
  4908. noActivePrinters: 'Aucune imprimante active',
  4909. enablePrinterConnection: 'Activez la connexion pour voir les K-profiles',
  4910. loadingProfiles: 'Chargement des K-Profiles...',
  4911. printerOffline: 'Imprimante hors ligne',
  4912. printerOfflineDesc: 'L\'imprimante doit être allumée.',
  4913. noMatchingProfiles: 'Aucun profil correspondant',
  4914. noMatchingProfilesDesc: 'Ajustez votre recherche',
  4915. noKProfiles: 'Aucun K-Profile',
  4916. noKProfilesDesc: 'Aucun profil trouvé pour une buse de {{diameter}}mm',
  4917. createFirstProfile: 'Créer le premier profil',
  4918. // Controls
  4919. printer: 'Imprimante',
  4920. nozzle: 'Buse',
  4921. refresh: 'Rafraîchir',
  4922. addProfile: 'Ajouter Profil',
  4923. export: 'Exporter',
  4924. import: 'Importer',
  4925. select: 'Choisir',
  4926. selectAll: 'Tout sélectionner',
  4927. delete: 'Supprimer',
  4928. // Filters
  4929. searchPlaceholder: 'Nom ou filament...',
  4930. allExtruders: 'Tous les extrudeurs',
  4931. leftOnly: 'Gauche uniquement',
  4932. rightOnly: 'Droite uniquement',
  4933. allFlow: 'Tout débit',
  4934. hfOnly: 'HF uniquement',
  4935. sOnly: 'S uniquement',
  4936. sortName: 'Tri : Nom',
  4937. sortKValue: 'Tri : Valeur K',
  4938. sortFilament: 'Tri : Filament',
  4939. // Dual extruder labels
  4940. leftExtruder: 'Extrudeur gauche',
  4941. rightExtruder: 'Extrudeur droit',
  4942. // Modal
  4943. modal: {
  4944. addTitle: 'Ajouter K-Profile',
  4945. editTitle: 'Modifier K-Profile',
  4946. profileName: 'Nom du profil',
  4947. profileNamePlaceholder: 'ex: Mon profil PLA',
  4948. kValue: 'Valeur K',
  4949. kValuePlaceholder: '0.020',
  4950. kValueHelp: 'Plage type : 0.01-0.06 (PLA), 0.02-0.10 (PETG)',
  4951. filament: 'Filament',
  4952. selectFilament: 'Choisir filament...',
  4953. noFilamentsHelp: 'Créez d\'abord un profil dans Bambu Studio.',
  4954. flowType: 'Type de débit',
  4955. highFlow: 'Haut Débit (HF)',
  4956. standard: 'Standard',
  4957. nozzleSize: 'Taille buse',
  4958. extruder: 'Extrudeur',
  4959. extruders: 'Extrudeurs',
  4960. left: 'Gauche',
  4961. right: 'Droite',
  4962. notes: 'Notes (locales)',
  4963. notesPlaceholder: 'Notes sur ce profil...',
  4964. notesHelp: 'Enregistré dans Bambuddy, pas sur l\'imprimante',
  4965. syncing: 'Sync avec l\'imprimante...',
  4966. savingExtruder: 'Sauvegarde extrudeur {{current}}/{{total}}...',
  4967. pleaseWait: 'Patientez...',
  4968. },
  4969. // Delete confirmation
  4970. deleteConfirm: {
  4971. title: 'Supprimer profil',
  4972. cannotUndo: 'Action irréversible',
  4973. message: 'Supprimer "{{name}}" de l\'imprimante ?',
  4974. },
  4975. // Bulk delete
  4976. bulkDelete: {
  4977. title: 'Supprimer les profils',
  4978. cannotUndo: 'Action irréversible',
  4979. message: 'Supprimer les {{count}} profils de l\'imprimante ?',
  4980. },
  4981. // Toast
  4982. toast: {
  4983. profileSaved: 'Profil K enregistré',
  4984. profilesSaved: 'Profil K enregistré sur {{count}} extrudeur(s)',
  4985. selectAtLeastOneExtruder: 'Sélectionnez un extrudeur',
  4986. profileDeleted: 'Profil K supprimé',
  4987. profilesDeleted: '{{count}} profils supprimés',
  4988. exportedProfiles: '{{count}} profils exportés',
  4989. importedProfiles: '{{count}} sur {{total}} profils importés',
  4990. noProfilesToExport: 'Rien à exporter',
  4991. invalidFileFormat: 'Format invalide',
  4992. failedToParseImport: 'Échec analyse fichier',
  4993. failedToSaveBatch: 'Échec enregistrement groupé',
  4994. noteSaved: 'Note enregistrée',
  4995. failedToSaveNote: 'Échec note',
  4996. },
  4997. // Permissions
  4998. permission: {
  4999. noRead: 'Pas d\'autorisation lecture',
  5000. noCreate: 'Pas d\'autorisation création',
  5001. noUpdate: 'Pas d\'autorisation mise à jour',
  5002. noDelete: 'Pas d\'autorisation suppression',
  5003. noExport: 'Pas d\'autorisation export',
  5004. noImport: 'Pas d\'autorisation import',
  5005. },
  5006. },
  5007. // Virtual Printer
  5008. virtualPrinter: {
  5009. title: 'Imprimante Virtuelle',
  5010. running: 'En cours',
  5011. stopped: 'Arrêtée',
  5012. description: {
  5013. default: 'Active une imprimante qui apparaît dans Bambu Studio. Les fichiers envoyés sont archivés sans impression.',
  5014. proxy: 'Active un proxy qui relaie le trafic vers une imprimante réelle, permettant l\'impression à distance.',
  5015. },
  5016. enable: {
  5017. title: 'Activer l\'imprimante virtuelle',
  5018. visibleInSlicer: 'Visible comme "Bambuddy" dans le Slicer',
  5019. proxyingTo: 'Proxy vers {{name}}',
  5020. notActive: 'Inactive',
  5021. },
  5022. model: {
  5023. title: 'Modèle d\'imprimante',
  5024. description: 'Choisissez le modèle à émuler.',
  5025. restartWarning: 'Changer le modèle redémarrera le service',
  5026. },
  5027. accessCode: {
  5028. title: 'Code d\'accès',
  5029. isSet: 'Code défini',
  5030. notSet: 'Code requis pour activer',
  5031. placeholder: 'Code 8 char',
  5032. placeholderChange: 'Entrez nouveau code',
  5033. hint: 'Exactement 8 caractères. Sert à l\'auth du Slicer.',
  5034. charCount: '({{count}}/8)',
  5035. inheritedFromTarget: 'Hérité de l\'imprimante cible',
  5036. derivedFromTargetHint: 'Utilise le code d\'accès de l\'imprimante cible. Le pont transmet l\'authentification du slicer à l\'imprimante réelle, donc les codes doivent correspondre — modifiez le code dans les paramètres de l\'imprimante.',
  5037. reveal: 'Afficher le code d\'accès',
  5038. hide: 'Masquer le code d\'accès',
  5039. },
  5040. targetPrinter: {
  5041. title: 'Imprimante cible',
  5042. configured: 'Cible configurée',
  5043. notConfigured: 'Imprimante requise pour mode Proxy',
  5044. placeholder: 'Choisir imprimante...',
  5045. hint: 'L\'imprimante doit être en mode LAN.',
  5046. noPrinters: 'Ajoutez une imprimante réelle d\'abord.',
  5047. },
  5048. remoteInterface: {
  5049. title: 'Exception Interface Réseau',
  5050. configured: 'Override actif',
  5051. optional: 'Optionnel - si IP auto est fausse (VPN, Docker, multi-NIC).',
  5052. placeholder: 'Auto (défaut)...',
  5053. hint: 'Force l\'IP annoncée via SSDP.',
  5054. },
  5055. mode: {
  5056. title: 'Mode',
  5057. archive: 'Archiver',
  5058. archiveDesc: 'Archive immédiatement',
  5059. review: 'Revue',
  5060. reviewDesc: 'Attendre revue avant archive',
  5061. queue: 'File',
  5062. queueDesc: 'Archiver et ajouter à la file',
  5063. proxy: 'Proxy',
  5064. proxyDesc: 'Relais vers imprimante réelle',
  5065. },
  5066. autoDispatch: {
  5067. title: 'Lancement automatique',
  5068. description: 'Lancer automatiquement les impressions ajoutées à la file. Désactivé, les impressions attendent un lancement manuel.',
  5069. },
  5070. queueForceColorMatch: {
  5071. title: 'Forcer la correspondance des couleurs',
  5072. description: 'Refuser l\'envoi vers une imprimante qui n\'a pas exactement le type de filament et la couleur chargés. Désactivé par défaut — sans cela, la file d\'attente utilise uniquement la correspondance par modèle et peut choisir une imprimante avec la mauvaise couleur.',
  5073. },
  5074. gcodeInjection: {
  5075. title: 'Injection G-code',
  5076. description: 'Applique les extraits de G-code configurés par modèle dans les Paramètres aux travaux de ce VP. Désactivé par défaut.',
  5077. },
  5078. tailscaleDisabled: {
  5079. title: 'Intégration Tailscale',
  5080. description: 'Activez pour marquer ce VP comme exposé via Tailscale. Affiche l\'adresse Tailscale de l\'hôte pour que vous sachiez quelle IP coller dans le slicer. L\'étape d\'import CA est inchangée — cette bascule n\'a aucun effet sur les certificats.',
  5081. },
  5082. setupRequired: {
  5083. title: 'Configuration requise',
  5084. description: 'Nécessite des réglages système (ports, pare-feu).',
  5085. readGuide: 'Lire le guide de configuration',
  5086. },
  5087. howItWorks: {
  5088. title: 'Fonctionnement',
  5089. step1: 'Sur le même LAN, les imprimantes virtuelles apparaissent automatiquement dans votre slicer (Bambu Studio / OrcaSlicer). Depuis d\'autres réseaux, ajoutez-les manuellement par adresse IP et code d\'accès.',
  5090. step2: 'En mode Archive, Revue et File d\'attente, utilisez le bouton "Envoyer" dans votre slicer pour envoyer des fichiers 3MF à Bambuddy. Le slicer affichera "Impression réussie" — le fichier est stocké, pas imprimé.',
  5091. step3: 'En mode Proxy, l\'imprimante virtuelle relaie tout le trafic vers une vraie imprimante — les impressions démarrent immédiatement comme en connexion directe.',
  5092. },
  5093. status: {
  5094. title: 'Détails du statut',
  5095. printerName: 'Nom',
  5096. model: 'Modèle',
  5097. serialNumber: 'Série',
  5098. mode: 'Mode',
  5099. pendingFiles: 'Fichiers en attente',
  5100. targetPrinter: 'Cible',
  5101. ftpPort: 'Port FTP',
  5102. mqttPort: 'Port MQTT',
  5103. ftpConnections: 'Connexions FTP',
  5104. mqttConnections: 'Connexions MQTT',
  5105. },
  5106. toast: {
  5107. updated: 'Réglages virtuels mis à jour',
  5108. failedToUpdate: 'Échec mise à jour',
  5109. copyFailed: 'Échec de la copie — veuillez sélectionner le texte manuellement',
  5110. accessCodeRequired: 'Code d\'accès requis',
  5111. targetPrinterRequired: 'Imprimante cible requise',
  5112. bindIpRequired: 'Veuillez d\'abord définir une adresse IP',
  5113. accessCodeEmpty: 'Le code ne peut pas être vide',
  5114. accessCodeLength: 'Le code doit faire 8 caractères',
  5115. targetCodeChangedRebind: 'Le code d\'accès correspond désormais à la nouvelle imprimante cible. Réajoutez cet appareil dans votre slicer pour récupérer le nouveau code.',
  5116. created: 'Imprimante virtuelle créée',
  5117. failedToCreate: 'Échec de la création de l\'imprimante virtuelle',
  5118. deleted: 'Imprimante virtuelle supprimée',
  5119. failedToDelete: 'Échec de la suppression de l\'imprimante virtuelle',
  5120. },
  5121. list: {
  5122. title: 'Imprimantes virtuelles',
  5123. add: 'Ajouter',
  5124. addFirst: 'Ajouter une imprimante virtuelle',
  5125. empty: 'Aucune imprimante virtuelle configurée. Ajoutez-en une pour commencer.',
  5126. },
  5127. bindIp: {
  5128. title: 'Interface réseau',
  5129. placeholder: 'Sélectionner interface...',
  5130. hint: 'Interface réseau sur laquelle cette imprimante virtuelle écoute. Doit être unique par imprimante.',
  5131. },
  5132. proxy: {
  5133. accessCodeHint: 'En mode proxy, utilisez le code d\'accès de l\'imprimante cible dans le slicer. La connexion est transmise de manière transparente à l\'imprimante réelle.',
  5134. },
  5135. addDialog: {
  5136. title: 'Ajouter une imprimante virtuelle',
  5137. name: 'Nom',
  5138. hint: 'Vous pourrez configurer le code d\'accès, l\'imprimante cible et d\'autres paramètres après la création.',
  5139. create: 'Créer',
  5140. },
  5141. deleteConfirm: {
  5142. title: 'Supprimer l\'imprimante virtuelle',
  5143. message: 'Êtes-vous sûr de vouloir supprimer "{{name}}" ? Cela arrêtera tous les services de cette imprimante.',
  5144. },
  5145. archiveNameSource: {
  5146. title: 'Source du nom d\'archive',
  5147. description: 'Choisissez comment les nouvelles archives sont nommées lorsque les fichiers arrivent via l\'imprimante virtuelle. "Métadonnées" utilise le titre intégré par le slicer dans le 3MF (par défaut). "Nom de fichier" utilise le nom envoyé par Bambu Studio en FTP. Note : Bambu Studio écrase le nom que vous saisissez dans la boîte "envoyer à l\'imprimante" avec le champ Titre du 3MF lorsque celui-ci est présent, les deux modes produisent donc souvent la même chaîne.',
  5148. metadata: 'Métadonnées',
  5149. filename: 'Nom de fichier',
  5150. },
  5151. caCert: {
  5152. title: 'Certificat du slicer',
  5153. description: 'Les imprimantes virtuelles utilisent un certificat TLS signé par l\'autorité de certification Bambuddy. Importez ce certificat CA dans le magasin de confiance de votre slicer une seule fois pour qu\'il accepte la connexion — plus besoin de le copier depuis la ligne de commande.',
  5154. copy: 'Copier',
  5155. copied: 'Copié',
  5156. download: 'Télécharger',
  5157. fingerprint: 'SHA-256',
  5158. },
  5159. },
  5160. // Model Viewer
  5161. modelViewer: {
  5162. openInSlicer: 'Ouvrir dans le Slicer',
  5163. tabs: {
  5164. model: 'Modèle 3D',
  5165. gcode: 'Aperçu G-code',
  5166. },
  5167. notAvailable: 'indisponible',
  5168. notSliced: 'pas découpé',
  5169. plates: 'Plateaux',
  5170. allPlates: 'Tous les plateaux',
  5171. plateNumber: 'Plateau {{number}}',
  5172. plateCount: '{{count}} plateau',
  5173. plateCount_other: '{{count}} plateaux',
  5174. objectCount: '{{count}} objet',
  5175. objectCount_other: '{{count}} objets',
  5176. filamentCount: '{{count}} filament',
  5177. filamentCount_other: '{{count}} filaments',
  5178. eta: 'Fin {{minutes}} min',
  5179. noPreview: 'Aucun aperçu pour ce fichier',
  5180. pagination: {
  5181. pageOf: 'Page {{current}} sur {{total}}',
  5182. prev: 'Préc',
  5183. next: 'Suiv',
  5184. },
  5185. errors: {
  5186. failedToLoad: 'Échec chargement fichier',
  5187. noMeshes: 'Aucun maillage trouvé dans le 3MF',
  5188. unsupportedFormat: 'Format non supporté',
  5189. },
  5190. },
  5191. // Maintenance type descriptions (built-in)
  5192. maintenanceDescriptions: {
  5193. lubricateCarbonRods: 'Appliquer du lubrifiant sur les tiges carbone pour un mouvement fluide',
  5194. lubricateRails: 'Appliquer du lubrifiant sur les rails linéaires',
  5195. cleanNozzle: 'Nettoyer buse et hotend anti-bouchage',
  5196. checkBelts: 'Tension des courroies pour la précision',
  5197. cleanBuildPlate: 'Nettoyage plateau pour l\'adhésion',
  5198. checkExtruder: 'Usure des engrenages de l\'extrudeur',
  5199. checkCooling: 'Bon fonctionnement des ventilateurs',
  5200. generalInspection: 'Inspection générale de la machine',
  5201. cleanCarbonRods: 'Nettoyer les tiges carbone (friction)',
  5202. lubricateSteelRods: 'Appliquer du lubrifiant sur les tiges en acier pour un mouvement fluide',
  5203. cleanSteelRods: 'Nettoyer les tiges en acier (friction)',
  5204. cleanLinearRails: 'Essuyer les rails linéaires (poussière/débris)',
  5205. checkPtfeTube: 'Usure ou dommage du tube PTFE',
  5206. replaceHepaFilter: 'Filtre HEPA pour la qualité de l\'air',
  5207. replaceCarbonFilter: 'Filtre charbon actif (odeurs)',
  5208. lubricateLeftNozzleRail: 'Lubrifier le rail de buse gauche (Série H2)',
  5209. },
  5210. // Smart Plugs
  5211. smartPlugs: {
  5212. offline: 'Hors ligne',
  5213. admin: 'Administrateur',
  5214. openPlugAdminPage: 'Page admin de la prise',
  5215. deleteSmartPlug: 'Supprimer la prise',
  5216. turnOnSmartPlug: 'Allumer la prise',
  5217. turnOffSmartPlug: 'Éteindre la prise',
  5218. turnOn: 'Allumer',
  5219. turnOff: 'Éteindre',
  5220. addSmartPlug: {
  5221. scanningNetwork: 'Scan réseau...',
  5222. chooseEntity: 'Choisir une entité...',
  5223. connectionFailed: 'Échec connexion',
  5224. searchEntities: 'Chercher entités...',
  5225. searchPowerSensors: 'Capteurs puissance...',
  5226. searchEnergySensors: 'Capteurs énergie...',
  5227. placeholders: {
  5228. plugName: 'Prise Salon',
  5229. mqttStateOnValue: 'ON, true, 1',
  5230. mqttSameAsPower: 'Identique au topic puissance, ou différent',
  5231. },
  5232. },
  5233. // SmartPlugCard
  5234. linkedTo: 'Lié à :',
  5235. monitorOnly: 'Surveillance uniquement',
  5236. alerts: 'Alertes',
  5237. scheduleOn: 'À {{time}}',
  5238. scheduleOff: 'Désactivé {{time}}',
  5239. on: 'On',
  5240. off: 'Désactivé',
  5241. power: 'Puissance',
  5242. kwhToday: 'kWh Aujourd\'hui',
  5243. settings: 'Paramètres',
  5244. automationSettings: 'Paramètres d\'automatisation',
  5245. showInSwitchbar: 'Afficher dans la barre de commutateurs',
  5246. quickAccessSidebar: 'Accès rapide depuis la barre latérale',
  5247. enabled: 'Activé',
  5248. enableAutomation: 'Activer l\'automatisation pour cette prise',
  5249. autoOn: 'Auto Activé',
  5250. autoOnDescription: 'Allumer au démarrage de l\'impression',
  5251. autoOff: 'Auto Désactivé',
  5252. autoOffDescription: 'Éteindre à la fin de l\'impression (unique)',
  5253. autoOffPersistent: 'Garder activé',
  5254. autoOffPersistentDescription: 'Rester activé entre les impressions au lieu d\'une seule fois',
  5255. controlsPrinterPower: 'Alimente l\'imprimante',
  5256. controlsPrinterPowerDescription: 'Désactivez si cette prise n\'alimente qu\'un accessoire (ventilateur de filtre, éclairage). Sinon, l\'éteindre marque l\'imprimante hors ligne.',
  5257. autoOffAfterDrying: 'Arrêt auto après séchage',
  5258. autoOffAfterDryingDescription: 'Éteindre à la fin du séchage de l\'AMS',
  5259. delayAfterDryingMinutes: 'Délai après séchage (minutes)',
  5260. turnOffDelayMode: 'Mode de délai d\'extinction',
  5261. time: 'Temps',
  5262. temp: 'Temp.',
  5263. delayMinutes: 'Délai (minutes)',
  5264. tempThreshold: 'Seuil de température (°C)',
  5265. tempThresholdDescription: 'S\'éteint lorsque la buse refroidit en dessous de cette température',
  5266. edit: 'Modifier',
  5267. deleteConfirm: 'Êtes-vous sûr de vouloir supprimer "{{name}}" ? Cette action est irréversible.',
  5268. turnOnConfirm: 'Êtes-vous sûr de vouloir allumer "{{name}}" ?',
  5269. turnOffConfirm: 'Êtes-vous sûr de vouloir éteindre "{{name}}" ? Cela coupera l\'alimentation de l\'appareil connecté.',
  5270. failedToTurn: 'Impossible de {{action}} "{{name}}"',
  5271. unknown: 'Inconnu',
  5272. // AddSmartPlugModal
  5273. addTitle: 'Ajouter une prise connectée',
  5274. editTitle: 'Modifier la prise connectée',
  5275. stopScanning: 'Arrêter le scan',
  5276. discoverTasmota: 'Découvrir les appareils Tasmota',
  5277. foundDevices: '{{count}} appareil(s) trouvé(s) - cliquez pour sélectionner :',
  5278. noDevicesFound: 'Aucun appareil Tasmota trouvé sur votre réseau',
  5279. haNotConfigured: 'Home Assistant n\'est pas configuré. Configurez-le dans',
  5280. haSettingsPath: 'Paramètres → Réseau → Home Assistant',
  5281. selectEntity: 'Sélectionner l\'entité *',
  5282. ipAddress: 'Adresse IP *',
  5283. nameLabel: 'Nom *',
  5284. username: 'Nom d\'utilisateur',
  5285. password: 'Mot de passe',
  5286. authHint: 'Laissez vide si votre appareil Tasmota ne nécessite pas d\'authentification',
  5287. linkToPrinter: 'Lier à l\'imprimante',
  5288. noPrinter: 'Pas d\'imprimante (contrôle manuel uniquement)',
  5289. linkingDescription: 'La liaison permet l\'allumage/extinction automatique au début/fin de l\'impression',
  5290. powerAlerts: 'Alertes de puissance',
  5291. alertAbove: 'Alerte si au-dessus (W)',
  5292. alertBelow: 'Alerte si en dessous (W)',
  5293. alertDescription: 'Recevoir une notification lorsque la consommation dépasse ces seuils. Laisser vide pour désactiver cette direction.',
  5294. dailySchedule: 'Planification quotidienne',
  5295. turnOnAt: 'Allumer à',
  5296. turnOffAt: 'Éteindre à',
  5297. scheduleDescription: 'Allumer/éteindre automatiquement la prise à ces heures chaque jour. Laisser vide pour ignorer cette action.',
  5298. showOnPrinterCard: 'Afficher sur la carte imprimante',
  5299. displayOnPrinterCard: 'Afficher le bouton sur la carte imprimante',
  5300. connectedResult: 'Connecté !',
  5301. deviceLabel: 'Appareil : {{name}} - ',
  5302. stateLabel: 'État : {{state}}',
  5303. test: 'Tester',
  5304. delete: 'Supprimer',
  5305. save: 'Enregistrer',
  5306. add: 'Ajouter',
  5307. cancel: 'Annuler',
  5308. failedToStartScan: 'Impossible de démarrer le scan',
  5309. nameRequired: 'Le nom est requis',
  5310. entityRequired: 'L\'entité est requise pour les prises Home Assistant',
  5311. mqttTopicRequired: 'Au moins un topic MQTT doit être configuré pour la puissance, l\'énergie ou la surveillance d\'état',
  5312. loadingEntities: 'Chargement des entités...',
  5313. loading: 'Chargement...',
  5314. failedToLoadEntities: 'Échec du chargement des entités : {{error}}',
  5315. noEntitiesMatching: 'Aucune entité trouvée correspondant à "{{search}}"',
  5316. noEntitiesAvailable: 'Aucune entité disponible',
  5317. searchingEntities: 'Recherche de toutes les entités ({{count}} trouvées)',
  5318. showingEntities: 'Affichage switch, light, input_boolean ({{count}} disponibles)',
  5319. energyMonitoringOptional: 'Surveillance énergétique (Optionnel)',
  5320. energyMonitoringHint: 'Recherchez et sélectionnez les capteurs fournissant des données de puissance/énergie.',
  5321. powerSensorW: 'Capteur de puissance (W)',
  5322. energyTodayKwh: 'Énergie aujourd\'hui (kWh)',
  5323. totalEnergyKwh: 'Énergie totale (kWh)',
  5324. noMatchingSensors: 'Aucun capteur correspondant',
  5325. none: 'Aucun',
  5326. mqttNotConfigured: 'Broker MQTT non configuré. Définissez l\'adresse du broker dans',
  5327. mqttSettingsPath: 'Paramètres → Réseau → Publication MQTT',
  5328. mqttNotConfiguredSuffix: '(vous n\'avez pas besoin d\'activer la publication, remplissez simplement les détails du broker).',
  5329. mqttMonitorOnlyDescription: 'Les prises MQTT reçoivent les données de puissance/énergie via un abonnement MQTT. Le contrôle on/off n\'est pas disponible - utilisez votre broker MQTT ou système domotique.',
  5330. powerMonitoring: 'Surveillance de puissance',
  5331. energyMonitoring: 'Surveillance énergétique',
  5332. stateMonitoring: 'Surveillance d\'état',
  5333. optional: 'optionnel',
  5334. topic: 'Sujet',
  5335. jsonPath: 'Chemin JSON',
  5336. multiplier: 'Multiplicateur',
  5337. onValue: 'Valeur ON',
  5338. mqttPowerHint: 'Le chemin JSON extrait la valeur du payload JSON (ex: "power_l1"). Laisser vide si le topic publie des valeurs numériques brutes.\nUtiliser le multiplicateur 0.001 pour mW→W, 1000 pour kW→W.',
  5339. mqttEnergyHint: 'Le chemin JSON extrait la valeur du payload JSON. Laisser vide pour les valeurs brutes.\nUtiliser le multiplicateur 0.001 pour Wh→kWh, 1000 pour MWh→kWh.',
  5340. mqttStateHint: 'Le chemin JSON extrait la valeur du payload JSON. Laisser vide pour les valeurs brutes.\nValeur ON : la chaîne exacte signifiant "ON". Laisser vide pour la détection auto (ON, true, 1).',
  5341. // REST smart plug
  5342. restControl: 'Contrôle',
  5343. restOnUrl: 'URL d\'activation',
  5344. restOffUrl: 'URL de désactivation',
  5345. restOnBody: 'Corps de requête ON',
  5346. restOffBody: 'Corps de requête OFF',
  5347. restMethod: 'Méthode HTTP',
  5348. restHeaders: 'Custom Headers (JSON)',
  5349. restStatusUrl: 'URL de statut',
  5350. restStatusPath: 'Chemin JSON état',
  5351. restStatusOnValue: 'Valeur ON',
  5352. restPowerUrl: 'URL de puissance',
  5353. restPowerPath: 'Chemin JSON puissance',
  5354. restPowerMultiplier: 'Multiplicateur de puissance',
  5355. restEnergyUrl: 'URL d\'énergie',
  5356. restEnergyPath: "Chemin JSON de l'énergie (aujourd'hui)",
  5357. restEnergyTotalPath: "Chemin JSON de l'énergie (compteur total)",
  5358. restEnergyTotalMultiplier: 'Multiplicateur du compteur total',
  5359. restEnergyTotalPathHint: 'ex. aenergy.total',
  5360. restEnergyTotalHint:
  5361. "Beaucoup de prises — tous les Shelly notamment — ne fournissent qu'un compteur cumulé qui ne se remet jamais à zéro. Il va ici, pas dans le champ ci-dessus : lu comme la consommation du jour, il ne repartirait jamais de zéro à minuit, et Hier et Total resteraient vides. Bambuddy en déduit Aujourd'hui et Hier, ce qui demande un à deux jours de relevés. Un Shelly renvoie des wattheures : utilisez un multiplicateur de 0.001.",
  5362. restEnergyMultiplier: 'Multiplicateur d\'énergie',
  5363. restUrlRequired: 'Au moins une URL (ON ou OFF) est requise pour les prises REST',
  5364. restHeadersHint: 'par ex. {"Authorization": "Bearer your-token"}',
  5365. restBodyHint: 'par ex. ON, {"state": "on"}',
  5366. restStatusHint: 'URL pour interroger l\'état actuel',
  5367. restPathHint: 'par ex. state ou data.power.status',
  5368. restPowerUrlHint: 'URL séparée pour les données de puissance (utilise l\'URL de statut si vide)',
  5369. restEnergyUrlHint: 'URL séparée pour les données d\'énergie (utilise l\'URL de statut si vide)',
  5370. restEnergyHint: 'Chaque valeur peut utiliser sa propre URL ou se rabattre sur l\'URL de statut. Utilisez les multiplicateurs pour la conversion d\'unités (ex : 0.001 pour convertir Wh en kWh).',
  5371. testConnection: 'Tester la connexion',
  5372. connectionSuccess: 'Connexion réussie',
  5373. noSwitchesInSwitchbar: 'Aucun commutateur dans la barre',
  5374. enableSwitchbarHint: 'Activez "Afficher dans la barre de commutateurs" dans Paramètres > Smart Plugs',
  5375. },
  5376. // Notifications
  5377. notifications: {
  5378. // Provider types
  5379. providerTypes: {
  5380. callmebot: 'CallMeBot/WhatsApp',
  5381. ntfy: 'ntfy',
  5382. pushover: 'Pushover',
  5383. telegram: 'Telegram',
  5384. email: 'E-mail',
  5385. discord: 'Discord',
  5386. webhook: 'Webhook',
  5387. homeassistant: 'Home Assistant',
  5388. bark: 'Bark',
  5389. },
  5390. // Provider descriptions
  5391. providerDescriptions: {
  5392. email: 'Notifications par e-mail SMTP',
  5393. telegram: 'Notifications via un bot Telegram',
  5394. discord: 'Envoyer vers un canal Discord via webhook',
  5395. ntfy: 'Notifications push gratuites, auto-hébergeables',
  5396. pushover: 'Notifications push simples et fiables',
  5397. callmebot: 'Notifications WhatsApp gratuites via CallMeBot',
  5398. webhook: 'POST HTTP générique vers n\'importe quelle URL',
  5399. homeassistant: 'Notifications persistantes dans le tableau de bord Home Assistant',
  5400. bark: 'Notifications push iOS via Bark (auto-hébergeable)',
  5401. },
  5402. // NotificationProviderCard
  5403. lastSuccess: 'Dernier : {{date}}',
  5404. error: 'Erreur',
  5405. printer: 'Imprimante :',
  5406. allPrinters: 'Toutes les imprimantes',
  5407. sendTestNotification: 'Envoyer une notification de test',
  5408. eventSettings: 'Paramètres des événements',
  5409. enabled: 'Activé',
  5410. sendFromProvider: 'Envoyer des notifications depuis ce fournisseur',
  5411. // Event categories
  5412. printEvents: 'Événements d\'impression',
  5413. printerStatus: 'État de l\'imprimante',
  5414. amsAlarms: 'Alarmes AMS',
  5415. amsHtAlarms: 'Alarmes AMS-HT',
  5416. printQueue: 'File d\'attente d\'impression',
  5417. // Event tags (badges)
  5418. start: 'Début',
  5419. plateCheck: 'Vérification du plateau',
  5420. complete: 'Terminé',
  5421. failed: 'Échoué',
  5422. stopped: 'Arrêté',
  5423. progress: 'Progression',
  5424. offline: 'Hors ligne',
  5425. lowFilament: 'Filament bas',
  5426. maintenance: 'Maintenance',
  5427. amsHumidity: 'Humidité AMS',
  5428. amsTemp: 'Temp. AMS',
  5429. amsHtHumidity: 'Humidité AMS-HT',
  5430. amsHtTemp: 'Temp. AMS-HT',
  5431. bedCooled: 'Plateau refroidi',
  5432. firstLayer: 'Première couche',
  5433. quiet: 'Silencieux',
  5434. digest: 'Résumé {{time}}',
  5435. // Event labels (expanded settings)
  5436. printStarted: 'Impression démarrée',
  5437. plateNotEmpty: 'Plateau non vide',
  5438. plateNotEmptyDescription: 'Objets détectés avant l\'impression',
  5439. plateClearRequired: 'Plateau à libérer',
  5440. plateClearRequiredDescription: 'Impression terminée, la file attend la confirmation',
  5441. plateClear: 'Plateau libre',
  5442. printCompleted: 'Impression terminée',
  5443. bedCooledLabel: 'Plateau refroidi',
  5444. bedCooledDescription: 'Plateau refroidi sous le seuil après l\'impression',
  5445. firstLayerCompleteLabel: 'Première couche terminée',
  5446. firstLayerCompleteDescription: 'Notification avec photo après la première couche',
  5447. missingSpoolAssignmentLabel: 'Affectation de bobine manquante',
  5448. missingSpoolAssignmentDescription: 'Notifier quand une impression démarre et que des bacs requis n\'ont pas de bobine assignée',
  5449. printFailed: 'Impression échouée',
  5450. printStopped: 'Impression arrêtée',
  5451. progressMilestones: 'Jalons de progression',
  5452. progressMilestonesDescription: 'Notifier à 25 %, 50 %, 75 %',
  5453. printerOffline: 'Imprimante hors ligne',
  5454. printerError: 'Erreur de l\'imprimante',
  5455. aiFailureDetection: 'Détection de défaillance par IA',
  5456. aiFailureDetectionDescription: 'Notifier lorsque l\'IA Obico détecte une défaillance d\'impression possible',
  5457. lowFilamentLabel: 'Filament bas',
  5458. maintenanceDue: 'Maintenance requise',
  5459. maintenanceDueDescription: 'Notifier lorsqu\'une maintenance est nécessaire',
  5460. amsHumidityHigh: 'Humidité AMS élevée',
  5461. amsHumidityHighDescription: 'L\'humidité de l\'AMS standard dépasse le seuil',
  5462. amsTemperatureHigh: 'Température AMS élevée',
  5463. amsTemperatureHighDescription: 'La température de l\'AMS standard dépasse le seuil',
  5464. amsHtHumidityHigh: 'Humidité AMS-HT élevée',
  5465. amsHtHumidityHighDescription: 'L\'humidité de l\'AMS-HT dépasse le seuil',
  5466. amsHtTemperatureHigh: 'Température AMS-HT élevée',
  5467. amsHtTemperatureHighDescription: 'La température de l\'AMS-HT dépasse le seuil',
  5468. // Inventory stock alert events
  5469. inventoryAlerts: 'Alertes de stock',
  5470. stockReorderAlert: 'Alerte de réapprovisionnement',
  5471. stockReorderAlertDescription: 'Le SKU a atteint son point de réapprovisionnement',
  5472. stockBreakAlert: 'Alerte de rupture de stock',
  5473. stockBreakAlertDescription: 'Le stock sera épuisé avant l\'arrivée du réapprovisionnement',
  5474. // Queue events
  5475. jobAdded: 'Tâche ajoutée',
  5476. jobAddedDescription: 'Tâche ajoutée à la file d\'attente',
  5477. jobAssigned: 'Tâche assignée',
  5478. jobAssignedDescription: 'Tâche basée sur le modèle assignée à l\'imprimante',
  5479. jobStarted: 'Tâche démarrée',
  5480. jobStartedDescription: 'La tâche de la file a commencé l\'impression',
  5481. jobWaiting: 'Tâche en attente',
  5482. jobWaitingDescription: 'Tâche en attente de filament ou imprimante',
  5483. jobSkipped: 'Tâche ignorée',
  5484. jobSkippedDescription: 'Tâche ignorée (échec précédent)',
  5485. jobFailed: 'Tâche échouée',
  5486. jobFailedDescription: 'La tâche n\'a pas pu démarrer',
  5487. queueComplete: 'File d\'attente terminée',
  5488. queueCompleteDescription: 'Toutes les tâches de la file sont terminées',
  5489. // Quiet hours
  5490. quietHours: 'Heures silencieuses',
  5491. noNotificationsDuring: 'Aucune notification pendant ces heures',
  5492. editProviderToChangeQuietHours: 'Modifier le fournisseur pour changer les heures silencieuses',
  5493. // Daily digest
  5494. dailyDigest: 'Résumé quotidien',
  5495. batchNotifications: 'Regrouper les notifications en un seul résumé quotidien',
  5496. sendAt: 'Envoyer à {{time}}',
  5497. editProviderToChangeDigestTime: 'Modifier le fournisseur pour changer l\'heure du résumé',
  5498. // Actions
  5499. edit: 'Modifier',
  5500. deleteProvider: 'Supprimer le fournisseur de notifications',
  5501. deleteConfirm: 'Êtes-vous sûr de vouloir supprimer « {{name}} » ? Cette action est irréversible.',
  5502. delete: 'Supprimer',
  5503. // AddNotificationModal
  5504. addTitle: 'Ajouter un fournisseur de notifications',
  5505. editTitle: 'Modifier le fournisseur de notifications',
  5506. nameLabel: 'Nom *',
  5507. namePlaceholder: 'Mes notifications',
  5508. providerTypeLabel: 'Type de fournisseur *',
  5509. configuration: 'Configuration',
  5510. testConfiguration: 'Tester la configuration',
  5511. printerFilter: 'Filtre d\'imprimante',
  5512. onlyFromPrinter: 'Envoyer uniquement les notifications pour les événements de cette imprimante',
  5513. quietHoursDnd: 'Heures silencieuses (Ne pas déranger)',
  5514. quietStart: 'Début',
  5515. quietEnd: 'Fin',
  5516. dailyDigestLabel: 'Résumé quotidien',
  5517. sendDigestAt: 'Envoyer le résumé à',
  5518. digestCollected: 'Les événements seront collectés et envoyés en un seul résumé à cette heure',
  5519. notificationEvents: 'Événements de notification',
  5520. progressPercent: '(25 %, 50 %, 75 %)',
  5521. bedCooledAfterPrint: '(après la fin de l\'impression)',
  5522. // Per-event ntfy priority (#990)
  5523. eventPriority: {
  5524. sectionTitle: 'Priorité ntfy',
  5525. helpNtfy: 'Choisissez une priorité pour chaque événement activé. ntfy l\'utilise pour faire remonter les alertes (son, visibilité, comportement push). Les niveaux non définis ici utilisent la valeur par défaut du serveur ntfy.',
  5526. min: 'Min.',
  5527. low: 'Basse',
  5528. default: 'Par défaut',
  5529. high: 'Haute',
  5530. urgent: 'Urgente',
  5531. },
  5532. cancel: 'Annuler',
  5533. save: 'Enregistrer',
  5534. add: 'Ajouter',
  5535. nameRequired: 'Le nom est requis',
  5536. fieldRequired: '{{field}} est requis',
  5537. haDataInvalid: 'Le champ Data doit être un objet JSON valide, p. ex. {"priority": "high", "ttl": 0}',
  5538. // Config field labels
  5539. phoneNumber: 'Numéro de téléphone',
  5540. apiKey: 'Clé API',
  5541. serverUrl: 'URL du serveur',
  5542. topic: 'Sujet',
  5543. authToken: 'Jeton d\'authentification',
  5544. userKey: 'Clé utilisateur',
  5545. appToken: 'Jeton d\'application',
  5546. priority: 'Priorité',
  5547. pushoverRetry: 'Réessai urgence (s)',
  5548. pushoverExpire: 'Expiration urgence (s)',
  5549. botToken: 'Jeton du bot',
  5550. chatId: 'ID du chat',
  5551. telegramThreadId: 'ID du sujet de forum',
  5552. telegramThreadIdHelp: 'Facultatif. Envoie dans un seul sujet d\'un groupe forum : le dernier nombre du lien du sujet (t.me/c/.../25). Laisser vide pour le sujet General.',
  5553. telegramThreadIdInvalid: 'L\'ID du sujet de forum doit être un nombre.',
  5554. smtpServer: 'Serveur SMTP',
  5555. smtpPort: 'Port SMTP',
  5556. security: 'Sécurité',
  5557. authentication: 'Authentification',
  5558. username: 'Nom d\'utilisateur',
  5559. password: 'Mot de passe',
  5560. fromEmail: 'E-mail expéditeur',
  5561. toEmail: 'E-mail destinataire',
  5562. webhookUrl: 'URL du webhook',
  5563. payloadFormat: 'Format du payload',
  5564. authorization: 'Autorisation',
  5565. titleFieldName: 'Nom du champ titre',
  5566. messageFieldName: 'Nom du champ message',
  5567. // NotificationTemplateEditor
  5568. editTemplate: 'Modifier le modèle : {{name}}',
  5569. titleLabel: 'Titre',
  5570. bodyLabel: 'Corps',
  5571. titlePlaceholder: 'Titre de la notification...',
  5572. bodyPlaceholder: 'Corps de la notification...',
  5573. availableVariables: 'Variables disponibles',
  5574. clickToInsert: 'Cliquer pour insérer à la position du curseur dans le corps',
  5575. livePreview: 'Aperçu en direct',
  5576. hide: 'Masquer',
  5577. show: 'Afficher',
  5578. loadingPreview: 'Chargement de l\'aperçu...',
  5579. enterTemplateContent: 'Saisir le contenu du modèle pour voir l\'aperçu',
  5580. titlePreview: 'Titre :',
  5581. bodyPreview: 'Corps :',
  5582. resetToDefault: 'Réinitialiser par défaut',
  5583. titleRequired: 'Le titre est requis',
  5584. bodyRequired: 'Le corps est requis',
  5585. // NotificationLogViewer
  5586. notificationLog: 'Journal des notifications',
  5587. showFailedOnly: 'Échecs uniquement',
  5588. last24Hours: 'Dernières 24 heures',
  5589. last7Days: '7 derniers jours',
  5590. last30Days: '30 derniers jours',
  5591. last90Days: '90 derniers jours',
  5592. justNow: 'À l\'instant',
  5593. noFailedNotifications: 'Aucune notification échouée',
  5594. noNotificationsLogged: 'Aucune notification enregistrée',
  5595. unknownProvider: 'Fournisseur inconnu',
  5596. logTitle: 'Titre',
  5597. logMessage: 'Message',
  5598. logError: 'Erreur',
  5599. logProvider: 'Fournisseur : {{type}}',
  5600. logTime: 'Heure : {{time}}',
  5601. refresh: 'Actualiser',
  5602. clearOld: 'Purger les anciens',
  5603. statsSummary: '{{days}} derniers jours :',
  5604. statsNotifications: 'notifications',
  5605. statsSent: '{{count}} envoyées',
  5606. statsFailed: '{{count}} échouées',
  5607. // Event type labels (for log viewer)
  5608. eventTypes: {
  5609. print_start: 'Impression démarrée',
  5610. print_complete: 'Impression terminée',
  5611. print_failed: 'Impression échouée',
  5612. print_stopped: 'Impression arrêtée',
  5613. print_progress: 'Progression',
  5614. printer_offline: 'Imprimante hors ligne',
  5615. printer_error: 'Erreur de l\'imprimante',
  5616. filament_low: 'Filament bas',
  5617. maintenance_due: 'Maintenance requise',
  5618. test: 'Tester',
  5619. },
  5620. // User email notification preferences
  5621. userEmail: {
  5622. title: 'Notifications',
  5623. emailNotifications: 'Notifications par e-mail',
  5624. emailNotificationsDesc: "Recevez des notifications par e-mail pour vos propres travaux d'impression. Les e-mails sont envoyés via les paramètres SMTP configurés dans l'authentification avancée.",
  5625. sendingTo: 'Les notifications seront envoyées à',
  5626. noEmailWarning: "Votre compte n'a pas d'adresse e-mail. Contactez un administrateur pour en ajouter une.",
  5627. printJobNotifications: "Notifications de travaux d'impression",
  5628. printJobNotificationsDesc: "Choisissez quels événements déclenchent des notifications par e-mail pour les travaux d'impression que vous soumettez.",
  5629. printJobStarts: "Démarrage du travail d'impression",
  5630. printJobStartsDesc: "Être notifié quand votre travail d'impression commence.",
  5631. printJobFinishes: "Fin du travail d'impression",
  5632. printJobFinishesDesc: "Être notifié quand votre travail d'impression se termine avec succès.",
  5633. printErrors: "Erreurs d'impression",
  5634. printErrorsDesc: "Être notifié quand votre travail d'impression échoue ou rencontre une erreur.",
  5635. printJobStops: "Travail d'impression arrêté",
  5636. printJobStopsDesc: "Être notifié quand votre travail d'impression est annulé ou arrêté.",
  5637. saveSuccess: 'Préférences de notification sauvegardées.',
  5638. saveError: 'Impossible de sauvegarder les préférences de notification.',
  5639. },
  5640. },
  5641. // Rich Text Editor
  5642. richTextEditor: {
  5643. bold: 'Gras',
  5644. italic: 'Italique',
  5645. underline: 'Souligné',
  5646. bulletList: 'Liste à puces',
  5647. numberedList: 'Liste numérotée',
  5648. alignLeft: 'Aligner à gauche',
  5649. alignCenter: 'Centrer',
  5650. alignRight: 'Aligner à droite',
  5651. addLink: 'Ajouter lien',
  5652. removeLink: 'Retirer lien',
  5653. },
  5654. // External Links
  5655. externalLinks: {
  5656. title: 'Liens de la barre latérale',
  5657. sidebarLayout: 'Barre latérale',
  5658. sidebarLayoutDescription: 'Affichez ou masquez les pages intégrées, ajoutez des liens externes et faites glisser les éléments pour réorganiser la navigation latérale.',
  5659. systemPages: 'Pages Bambuddy',
  5660. externalLinks: 'Liens externes',
  5661. visibleInSidebar: 'Visible dans la barre latérale',
  5662. hiddenFromSidebar: 'Masqué dans la barre latérale',
  5663. requiredInSidebar: 'Obligatoire dans la barre latérale',
  5664. hidePage: 'Masquer la page',
  5665. showPage: 'Afficher la page',
  5666. settingsCannotBeHidden: 'Les paramètres ne peuvent pas être masqués',
  5667. noLinksConfigured: 'Aucun lien externe configuré',
  5668. deleteLink: 'Supprimer lien',
  5669. removeCustomIcon: 'Retirer icône personnalisée',
  5670. openInNewTab: 'Ouvrir dans un nouvel onglet',
  5671. placeholders: {
  5672. linkName: 'Mon Lien',
  5673. },
  5674. },
  5675. // Keyboard Shortcuts Modal
  5676. keyboardShortcuts: {
  5677. title: 'Raccourcis Clavier',
  5678. navigation: 'Navigation',
  5679. archivesSection: 'Archives',
  5680. kProfilesSection: 'Profils K',
  5681. generalSection: 'Général',
  5682. shortcuts: {
  5683. goToPrinters: 'Aller aux Imprimantes',
  5684. goToArchives: 'Aller aux Archives',
  5685. goToQueue: 'Aller à la File',
  5686. goToStats: 'Aller aux Stats',
  5687. goToProfiles: 'Aller aux Profils Cloud',
  5688. goToSettings: 'Aller aux Paramètres',
  5689. focusSearch: 'Focus recherche',
  5690. openUploadModal: 'Ouvrir téléversement',
  5691. clearSelection: 'Tout déselectionner',
  5692. contextMenu: 'Menu contextuel (cartes)',
  5693. refreshProfiles: 'Rafraîchir profils',
  5694. newProfile: 'Nouveau profil',
  5695. exitSelectionMode: 'Quitter mode sélection',
  5696. showHelp: 'Afficher cette aide',
  5697. },
  5698. footer: 'Échap ou clic extérieur pour fermer',
  5699. },
  5700. // Notification Log
  5701. notificationLog: {
  5702. title: 'Journal de Notification',
  5703. events: {
  5704. printStarted: 'Début impression',
  5705. printComplete: 'Fin impression',
  5706. printFailed: 'Échec impression',
  5707. printStopped: 'Arrêt impression',
  5708. progress: 'Progression',
  5709. printerOffline: 'Hors ligne',
  5710. printerError: 'Erreur',
  5711. lowFilament: 'Filament bas',
  5712. maintenanceDue: 'Maintenance',
  5713. test: 'Tester',
  5714. },
  5715. timeAgo: {
  5716. justNow: 'À l\'instant',
  5717. minutesAgo: 'Il y a {{minutes}}m',
  5718. hoursAgo: 'Il y a {{hours}}h',
  5719. },
  5720. },
  5721. // Restore/Backup Modal
  5722. restoreBackup: {
  5723. title: 'Restaurer Sauvegarde',
  5724. restoring: 'Restauration...',
  5725. restoreComplete: 'Restauration terminée',
  5726. restoreFailed: 'Échec restauration',
  5727. importSettings: 'Importer les réglages d\'un fichier',
  5728. pleaseWait: 'Patientez pendant la restauration',
  5729. clickToSelect: 'Fichier .json ou .zip',
  5730. howDuplicateHandling: 'Gestion des doublons :',
  5731. categories: {
  5732. printers: 'Imprimantes',
  5733. smartPlugs: 'Prises',
  5734. notificationProviders: 'Fournisseurs',
  5735. filaments: 'Filaments',
  5736. archives: 'Archives',
  5737. pendingUploads: 'Téléversements en attente',
  5738. settingsTemplates: 'Réglages & Modèles',
  5739. },
  5740. matchingInfo: {
  5741. printers: 'par numéro de série',
  5742. smartPlugs: 'par adresse IP',
  5743. notificationProviders: 'par nom',
  5744. filaments: 'par nom+type+marque',
  5745. archives: 'par empreinte numérique (hash)',
  5746. pendingUploads: 'par nom de fichier',
  5747. settingsTemplates: 'toujours écrasés',
  5748. },
  5749. replaceExisting: 'Remplacer existant',
  5750. keepExisting: 'Garder existant',
  5751. replaceDescription: 'Écrase les doublons avec la sauvegarde',
  5752. keepDescription: 'Ne restaure que les éléments absents',
  5753. caution: 'Attention :',
  5754. cautionText: 'L\'écrasement remplacera vos réglages. Les codes d\'accès imprimantes sont exclus par sécurité.',
  5755. itemsRestored: 'Éléments restaurés',
  5756. itemsSkipped: 'Éléments ignorés',
  5757. restored: 'Restaurés',
  5758. skipped: 'Ignorés (déjà présents)',
  5759. filesLabel: 'Fichiers (3MF, vignettes, etc.)',
  5760. newApiKeysGenerated: 'Nouvelles clés API générées',
  5761. newApiKeysWarning: 'Copiées maintenant, elles ne seront plus visibles !',
  5762. processingBackup: 'Traitement du fichier...',
  5763. noDataFound: 'Aucune donnée trouvée dans le fichier.',
  5764. failedToRestore: 'Échec restaure. Vérifiez le format.',
  5765. },
  5766. // Backup Export Modal
  5767. backupExport: {
  5768. title: 'Exporter Sauvegarde',
  5769. selectData: 'Données à inclure',
  5770. selectAll: 'Tout sélectionner',
  5771. selectNone: 'Ne rien sélectionner',
  5772. categoryDescriptions: {
  5773. settings: 'Langue, thèmes, préférences',
  5774. notifications: 'ntfy, Pushover, Discord, etc.',
  5775. templates: 'Modèles de messages personnalisés',
  5776. smartPlugs: 'Configuration des prises Tasmota',
  5777. externalLinks: 'Liens externes de la barre latérale',
  5778. printers: 'Infos imprimantes (codes d\'accès exclus par défaut)',
  5779. plateDetection: 'Images références des plateaux vides',
  5780. filaments: 'Types et coûts filaments',
  5781. maintenance: 'Plannings de maintenance personnalisés',
  5782. archives: 'Données impressions + fichiers (3MF, vignettes, etc.)',
  5783. projects: 'Projets, BOM, pièces jointes',
  5784. pendingUploads: 'En attente revue virtuelle',
  5785. apiKeys: 'Clés Webhook (nouvelles clés générées à l\'import)',
  5786. },
  5787. requiresPrinters: 'Nécessite sélection des imprimantes',
  5788. zipFileWarning: 'Fichier ZIP créé.',
  5789. zipFileDescription: 'Contient tous les médias. Peut être volumineux.',
  5790. includeAccessCodes: 'Inclure Codes d\'accès',
  5791. includeAccessCodesDescription: 'Pour migrer vers une autre machine',
  5792. includeAccessCodesWarning: 'Codes en texte clair. Sécurisez ce fichier !',
  5793. categoriesSelected: '{{selectedCount}} catégories choisies',
  5794. },
  5795. // Pending Uploads Panel
  5796. pendingUploads: {
  5797. placeholders: {
  5798. notes: 'Notes sur l\'impression...',
  5799. },
  5800. discardUpload: 'Rejeter',
  5801. archiveAllUploads: 'Tout archiver',
  5802. discardAllUploads: 'Tout rejeter',
  5803. archive: 'Archiver',
  5804. timeAgo: {
  5805. justNow: 'À l\'instant',
  5806. minutesAgo: 'Il y a {{minutes}}m',
  5807. hoursAgo: 'Il y a {{hours}}h',
  5808. daysAgo: 'Il y a {{days}}j',
  5809. },
  5810. },
  5811. // API Browser
  5812. apiBrowser: {
  5813. placeholders: {
  5814. requestBody: 'Corps JSON...',
  5815. searchEndpoints: 'Chercher endpoints...',
  5816. },
  5817. },
  5818. // Configure AMS Slot Modal
  5819. configureAmsSlot: {
  5820. title: 'Configurer le slot AMS',
  5821. slotConfigured: 'Slot configuré !',
  5822. configuringSlot: 'Configuration du slot :',
  5823. slotLabel: '{{ams}} – Emplacement {{slot}}',
  5824. searchPresets: 'Chercher presets...',
  5825. colorPlaceholder: 'Nom couleur ou hex (ex: brown, FF8800)',
  5826. clearCustomColor: 'Effacer couleur perso',
  5827. noCloudPresets: 'Profils Cloud absents. Connectez-vous.',
  5828. noPresetsAvailable: 'Aucun preset disponible. Connectez-vous à Bambu Cloud ou importez des profils locaux.',
  5829. noMatchingPresets: 'Aucun profil trouvé.',
  5830. custom: 'Perso',
  5831. builtin: 'Inclus',
  5832. orcaCloud: 'Orca Cloud',
  5833. bambuCloud: 'Bambu Cloud',
  5834. settingsSentToPrinter: 'Réglages envoyés',
  5835. filamentProfile: 'Profil Filament',
  5836. kProfileLabel: 'Profil K (Pressure Advance)',
  5837. filteringFor: 'Filtrage pour : {{material}}',
  5838. noKProfile: 'Pas de profil K (utiliser défaut 0.020)',
  5839. noMatchingKProfiles: 'Aucun profil K trouvé. K=0.020 par défaut sera utilisé.',
  5840. selectFilamentFirst: 'Sélectionnez d\'abord un profil filament',
  5841. kFromCalibration: 'K={{value}} de la calibration imprimante',
  5842. customColorLabel: 'Couleur personnalisée (optionnel)',
  5843. presetColors: 'Couleurs {{name}} :',
  5844. showLessColors: 'Moins de couleurs',
  5845. showMoreColors: 'Plus de couleurs',
  5846. clear: 'Effacer',
  5847. hexLabel: 'Hex : #{{hex}}',
  5848. resetting: 'Réinitialisation...',
  5849. resetSlot: 'Réinitialiser le slot',
  5850. cancel: 'Annuler',
  5851. configuring: 'Configuration...',
  5852. configureSlot: 'Configurer le slot',
  5853. },
  5854. // Git Backup Settings
  5855. githubBackup: {
  5856. title: 'Sauvegarde Git',
  5857. history: 'Historique',
  5858. downloadBackup: 'Télécharger',
  5859. restoreBackup: 'Restaurer',
  5860. noBackupsYet: 'Aucune sauvegarde',
  5861. },
  5862. // Email Settings
  5863. emailSettings: {
  5864. placeholders: {
  5865. fromName: 'Bambuddy',
  5866. },
  5867. },
  5868. // Tag Management Modal
  5869. tagManagement: {
  5870. searchTags: 'Chercher tags...',
  5871. renameTag: 'Renommer tag',
  5872. deleteTag: 'Supprimer tag',
  5873. },
  5874. // Notification Template Editor
  5875. notificationTemplates: {
  5876. placeholders: {
  5877. title: 'Titre notification...',
  5878. body: 'Message notification...',
  5879. },
  5880. },
  5881. // Batch Tag Modal
  5882. batchTag: {
  5883. placeholders: {
  5884. newTag: 'Nouveau tag...',
  5885. },
  5886. },
  5887. // Photo Gallery Modal
  5888. photoGallery: {
  5889. deletePhoto: 'Supprimer photo',
  5890. },
  5891. // Filament Hover Card
  5892. filamentHoverCard: {
  5893. copySpoolUuid: 'Copier UUID bobine',
  5894. },
  5895. // K Profiles View
  5896. kProfilesView: {
  5897. hasNote: 'A une note',
  5898. copyProfile: 'Copier profil',
  5899. },
  5900. // Layout/Navigation
  5901. layout: {
  5902. openMenu: 'Ouvrir menu',
  5903. noPermissionSystemInfo: 'Pas d\'autorisation système',
  5904. },
  5905. // Dashboard
  5906. dashboard: {
  5907. dragToReorder: 'Glisser pour réorganiser',
  5908. hideWidget: 'Masquer widget',
  5909. },
  5910. // Notification Provider Card
  5911. notificationProviderCard: {
  5912. deleteNotificationProvider: 'Supprimer fournisseur',
  5913. },
  5914. // File Manager Modal
  5915. fileManagerModal: {
  5916. closeFileManager: 'Fermer gestionnaire',
  5917. sortFiles: 'Trier fichiers',
  5918. goToParentFolder: 'Dossier parent',
  5919. threeView: 'Vue 3D',
  5920. },
  5921. // Embedded Camera Viewer
  5922. embeddedCameraViewer: {
  5923. refreshStream: 'Actualiser flux',
  5924. close: 'Fermer',
  5925. zoomOut: 'Zoom -',
  5926. resetZoom: 'Réinitialiser le zoom',
  5927. zoomIn: 'Zoom +',
  5928. dragToResize: 'Glisser pour dimension',
  5929. },
  5930. // Timelapse Viewer
  5931. timelapseViewer: {
  5932. skipBack5s: '-5s',
  5933. skipForward5s: '+5s',
  5934. },
  5935. // Notification Providers
  5936. notificationProviders: {
  5937. descriptions: {
  5938. email: 'Notifications par email SMTP',
  5939. telegram: 'Via bot Telegram',
  5940. discord: 'Via webhook Discord',
  5941. ntfy: 'Push auto-hébergé (ntfy)',
  5942. pushover: 'Push fiable (Pushover)',
  5943. callmebot: 'WhatsApp gratuit via CallMeBot',
  5944. webhook: 'Requête HTTP POST personnalisée',
  5945. },
  5946. },
  5947. // Log Viewer
  5948. logViewer: {
  5949. searchPlaceholder: 'Message ou nom...',
  5950. noLogEntries: 'Aucune entrée journal',
  5951. },
  5952. // Switchbar Popover
  5953. switchbarPopover: {
  5954. noSwitchesInSwitchbar: 'Aucun interrupteur',
  5955. },
  5956. // Project Page Modal
  5957. projectPageModal: {
  5958. placeholders: {
  5959. title: 'Titre',
  5960. designer: 'Designer',
  5961. license: 'Licence',
  5962. description: 'Description...',
  5963. profileTitle: 'Titre du profil',
  5964. profileDescription: 'Description du profil...',
  5965. },
  5966. },
  5967. // Spoolman Settings
  5968. spoolmanSettings: {},
  5969. // Time
  5970. time: {
  5971. unknown: '-',
  5972. waiting: 'En attente',
  5973. justNow: 'À l\'instant',
  5974. now: 'Maintenant',
  5975. minsAgo: 'il y a {{count}}m',
  5976. inMins: 'dans {{count}}m',
  5977. hoursAgo: 'il y a {{count}}h',
  5978. inHours: 'dans {{count}}h',
  5979. daysAgo: 'il y a {{count}}j',
  5980. inDays: 'dans {{count}}j',
  5981. },
  5982. // SpoolBuddy Kiosk
  5983. spoolbuddy: {
  5984. nav: {
  5985. dashboard: 'Tableau de bord',
  5986. ams: 'AMS',
  5987. inventory: 'Inventaire',
  5988. writeTag: 'Écrire',
  5989. settings: 'Paramètres',
  5990. },
  5991. status: {
  5992. nfcReady: 'NFC prêt',
  5993. nfcOff: 'NFC désactivé',
  5994. offline: 'Hors ligne',
  5995. online: 'En ligne',
  5996. noPrinters: 'Aucune imprimante',
  5997. deviceOffline: 'Appareil hors ligne',
  5998. waitingConnection: 'En attente de connexion...',
  5999. systemReady: 'Système prêt',
  6000. status: 'Statut',
  6001. },
  6002. dashboard: {
  6003. readyToScan: 'Prêt à scanner',
  6004. idleMessage: 'Placez une bobine sur la balance pour l\'identifier',
  6005. nfcHint: 'Le tag NFC sera lu automatiquement',
  6006. device: 'Appareil',
  6007. syncWeight: 'Sync. poids',
  6008. weightSynced: 'Synchronisé !',
  6009. unknownTag: 'Tag inconnu',
  6010. newTag: 'Nouveau tag détecté',
  6011. onScale: 'sur la balance',
  6012. linkSpool: 'Lier à une bobine',
  6013. linkTagTitle: 'Lier le tag à une bobine',
  6014. linkTag: 'Lier le tag',
  6015. selectSpool: 'Sélectionnez une bobine à lier à ce tag :',
  6016. noUntagged: 'Aucune bobine sans tag trouvée',
  6017. tagDetected: 'Tag détecté',
  6018. noTag: 'Pas de tag',
  6019. tagId: 'Étiquette',
  6020. grossWeight: 'Poids brut',
  6021. spoolSize: 'Taille bobine',
  6022. close: 'Fermer',
  6023. currentSpool: 'Bobine actuelle',
  6024. plateReady: 'Plateau prêt : {{name}}',
  6025. plateReadyLabel: 'Plateaux à libérer',
  6026. plateClearAction: 'Libérer',
  6027. plateClearedToast: 'Plateau marqué comme libéré',
  6028. plateClearFailed: 'Impossible de marquer le plateau comme libéré',
  6029. },
  6030. modal: {
  6031. spoolDetected: 'Bobine détectée',
  6032. assignToAms: 'Assigner à l\'AMS',
  6033. syncWeight: 'Synchroniser le poids',
  6034. weightSynced: 'Synchronisé !',
  6035. syncing: 'Synchronisation...',
  6036. newTagDetected: 'Nouveau tag détecté',
  6037. addToInventory: 'Ajouter à l\'inventaire',
  6038. assignToAmsTitle: 'Assigner à l\'AMS',
  6039. selectSlot: 'Sélectionner un emplacement',
  6040. assign: 'Assigner',
  6041. assigning: 'Attribution...',
  6042. assignSuccess: 'Assigné !',
  6043. assignPendingInsert: 'Assigné. Le slot sera configuré lors de l\'insertion de la bobine.',
  6044. assignError: 'Échec de l\'attribution de la bobine. Veuillez réessayer.',
  6045. noPrinterSelected: 'Sélectionner une imprimante...',
  6046. noAmsDetected: 'Aucun AMS détecté sur cette imprimante',
  6047. slot: 'Emplacement',
  6048. },
  6049. weight: {
  6050. noReading: 'Pas de lecture',
  6051. stable: 'Stable',
  6052. measuring: 'Mesure...',
  6053. tare: 'Tarer',
  6054. calibrate: 'Calibrer',
  6055. },
  6056. spool: {
  6057. remaining: 'Restant',
  6058. material: 'Matériau',
  6059. brand: 'Marque',
  6060. color: 'Couleur',
  6061. coreWeight: 'Noyau',
  6062. labelWeight: 'Étiquette',
  6063. scaleWeight: 'Balance',
  6064. netWeight: 'Réseau',
  6065. lastUsed: 'Dernière utilisation',
  6066. },
  6067. ams: {
  6068. noData: 'Aucun AMS détecté',
  6069. connectAms: 'Connectez un AMS pour voir les slots',
  6070. noPrinter: 'Aucune imprimante sélectionnée',
  6071. selectPrinter: 'Sélectionnez une imprimante dans la barre supérieure',
  6072. printerDisconnected: 'Imprimante déconnectée',
  6073. humidity: 'Humidité',
  6074. level: 'Niveau',
  6075. active: 'Actif',
  6076. slot: 'Emplacement',
  6077. empty: 'Vide',
  6078. },
  6079. inventory: {
  6080. search: 'Rechercher des bobines...',
  6081. empty: 'Aucune bobine dans l\'inventaire',
  6082. noResults: 'Aucune bobine correspondante',
  6083. spools: 'bobines',
  6084. addSpool: 'Ajouter une bobine',
  6085. },
  6086. settings: {
  6087. // Tabs
  6088. tabDevice: 'Appareil',
  6089. tabDisplay: 'Affichage',
  6090. tabScale: 'Balance',
  6091. tabUpdates: 'Mises à jour',
  6092. // Device tab
  6093. nfcReader: 'Lecteur NFC',
  6094. type: 'Type',
  6095. connection: 'Connexion',
  6096. notConnected: 'N/D',
  6097. deviceInfo: 'Info appareil',
  6098. hostname: 'Hôte',
  6099. uptime: 'Temps de fonctionnement',
  6100. // Display tab
  6101. brightness: 'Luminosité',
  6102. saved: 'Enregistré',
  6103. noBacklight: 'Aucun rétroéclairage DSI détecté. Le contrôle de luminosité nécessite un écran DSI.',
  6104. screenBlank: 'Délai d\'extinction',
  6105. screenBlankDesc: 'L\'écran s\'éteint après inactivité. Touchez pour réveiller.',
  6106. displayNote: 'La luminosité est appliquée comme filtre logiciel.',
  6107. // Scale tab
  6108. scaleCalibration: 'Calibration de la balance',
  6109. currentWeight: 'Poids actuel',
  6110. tareOffset: 'Tare',
  6111. calFactor: 'Facteur',
  6112. knownWeight: 'Poids connu',
  6113. calStep1: 'Retirez tout de la balance et appuyez sur Mettre à zéro.',
  6114. calStep2: 'Placez le poids connu sur la balance.',
  6115. setZero: 'Mettre à zéro',
  6116. calibrateNow: 'Calibrer',
  6117. calibrated: 'Calibré',
  6118. tareSet: 'Commande de tare envoyée. En attente de l\'appareil...',
  6119. tareComplete: 'Tare terminée !',
  6120. tareTimedOut: 'Délai de tare dépassé — le daemon SpoolBuddy fonctionne-t-il ?',
  6121. tareFailed: 'Échec de l\'envoi de la commande de tare',
  6122. zeroSet: 'Point zéro défini. Placez le poids connu sur la balance.',
  6123. calibrationDone: 'Calibration terminée !',
  6124. calibrationFailed: 'Échec de la calibration',
  6125. lastCalibrated: 'Dernière calibration',
  6126. stable: 'Stable',
  6127. settling: 'Stabilisation...',
  6128. firmware: 'Micrologiciel',
  6129. scale: 'Balance',
  6130. noDevice: 'Aucun appareil SpoolBuddy trouvé',
  6131. // Updates tab
  6132. daemonVersion: 'Version du daemon',
  6133. currentVersion: 'Actuelle',
  6134. versionPending: 'En attente du daemon...',
  6135. checking: 'Vérification...',
  6136. checkUpdates: 'Vérifier les mises à jour',
  6137. updateAvailable: 'Mise à jour disponible',
  6138. updateInstructions: 'Mise à jour via SSH : exécutez le script d\'installation SpoolBuddy.',
  6139. upToDate: 'À jour',
  6140. includeBeta: 'Inclure les versions bêta',
  6141. systemConfig: 'Backend & authentification',
  6142. backendUrl: 'URL du backend Bambuddy',
  6143. apiToken: 'Jeton d\'API',
  6144. apiTokenPlaceholder: 'Saisir un jeton d\'API',
  6145. saveConfig: 'Enregistrer la configuration',
  6146. systemQueued: 'Configuration mise en file.',
  6147. systemFieldsRequired: 'L\'URL du backend est obligatoire.',
  6148. nfcDiagnostic: 'Diagnostic NFC',
  6149. scaleDiagnostic: 'Diagnostic balance',
  6150. readTagDiagnostic: 'Diagnostic lecture de tag',
  6151. testNfc: 'Tester le lecteur',
  6152. testScale: 'Tester la précision',
  6153. testReadTag: 'Lire un tag',
  6154. },
  6155. writeTag: {
  6156. tabExisting: 'Bobine existante',
  6157. tabNew: 'Nouvelle bobine',
  6158. tabReplace: 'Remplacer le tag',
  6159. searchPlaceholder: 'Rechercher par matériau, couleur, marque...',
  6160. noUntaggedSpools: 'Aucune bobine sans tag',
  6161. noTaggedSpools: 'Aucune bobine avec tag',
  6162. selectSpool: 'Sélectionnez une bobine, puis placez un NTAG sur le lecteur',
  6163. placeTag: 'Placez un NTAG sur le lecteur',
  6164. tagReady: 'Tag détecté — prêt à écrire',
  6165. writeTag: 'Écrire le tag',
  6166. replaceTag: 'Remplacer le tag',
  6167. writing: 'Écriture du tag...',
  6168. waiting: 'En attente de SpoolBuddy...',
  6169. writeSuccess: 'Tag écrit avec succès !',
  6170. writeFailed: 'Échec de l\'écriture',
  6171. queueFailed: 'Impossible de mettre en file la commande d\'écriture',
  6172. tryAgain: 'Réessayer',
  6173. cancel: 'Annuler',
  6174. replaceWarning: 'L\'ancien tag sera dissocié. Le nouveau tag le remplacera.',
  6175. deviceOffline: 'SpoolBuddy est hors ligne',
  6176. material: 'Matériau',
  6177. colorName: 'Nom de la couleur',
  6178. color: 'Couleur',
  6179. brand: 'Marque',
  6180. weight: 'Poids (g)',
  6181. createSpool: 'Créer la bobine',
  6182. creating: 'Création...',
  6183. spoolCreated: 'Bobine créée ! Prêt à écrire.',
  6184. createFailed: 'Impossible de créer la bobine',
  6185. incompleteDataWarning: 'Tag écrit avec des données Spoolman incomplètes',
  6186. },
  6187. quickMenu: {
  6188. printerPower: 'Alimentation imprimante',
  6189. systemControls: 'Système',
  6190. restartDaemon: 'Redémarrer le daemon',
  6191. restartBrowser: 'Redémarrer le navigateur',
  6192. reboot: 'Redémarrer',
  6193. shutdown: 'Éteindre',
  6194. swipeToClose: 'Glisser vers le bas pour fermer',
  6195. confirmTitle: 'Confirmer',
  6196. confirmShutdown: 'Êtes-vous sûr de vouloir éteindre le SpoolBuddy ? Vous aurez besoin d\'un accès physique pour le rallumer.',
  6197. confirmReboot: 'Êtes-vous sûr de vouloir redémarrer le SpoolBuddy ?',
  6198. confirmRestartDaemon: 'Redémarrer le daemon SpoolBuddy ? Le NFC et la balance seront temporairement indisponibles.',
  6199. confirmRestartBrowser: 'Redémarrer le navigateur kiosque ? L\'écran sera brièvement noir.',
  6200. confirm: 'Confirmer',
  6201. confirmPlugOn: 'Allumer {{name}} ?',
  6202. confirmPlugOff: 'Éteindre {{name}} ?',
  6203. turnOn: 'Allumer',
  6204. turnOff: 'Éteindre',
  6205. },
  6206. },
  6207. diagnostic: {
  6208. modalTitle: 'Diagnostic de connexion — {{name}}',
  6209. running: 'Diagnostic en cours...',
  6210. runningElapsed: 'Diagnostic en cours... ({{elapsed}}s)',
  6211. waitingForReportHint: 'En attente que l\'imprimante publie un rapport d\'état — cela peut prendre jusqu\'à {{max}} secondes.',
  6212. runFailed: 'Le diagnostic n\'a pas pu s\'exécuter : {{error}}',
  6213. retry: 'Relancer',
  6214. runButton: 'Lancer le diagnostic',
  6215. sectionTitle: 'Diagnostic de connexion',
  6216. sectionDescription: 'Vérifiez pourquoi une imprimante ne se connecte pas ou n\'imprime pas — accessibilité des ports, mode développeur LAN, mode réseau Docker et identifiants.',
  6217. noPrinters: 'Aucune imprimante configurée.',
  6218. overall: {
  6219. ok: 'Aucun problème détecté — la connexion de l\'imprimante semble correcte.',
  6220. warnings: 'L\'imprimante devrait fonctionner, mais certains points nécessitent votre attention.',
  6221. problems: 'Des problèmes expliquant pourquoi l\'imprimante ne se connecte pas ou n\'imprime pas ont été détectés.',
  6222. },
  6223. check: {
  6224. port_mqtt: {
  6225. title: 'Port de contrôle (MQTT 8883)',
  6226. pass: 'Accessible — l\'imprimante accepte les connexions de contrôle.',
  6227. fail: 'Le port 8883 est inaccessible. L\'imprimante est éteinte, possède une autre adresse IP, ou un pare-feu la bloque. Vérifiez l\'IP de l\'imprimante et qu\'aucun élément ne bloque le port 8883.',
  6228. },
  6229. port_ftps: {
  6230. title: 'Port de transfert de fichiers (FTPS 990)',
  6231. pass: 'Accessible — l\'envoi de fichiers d\'impression fonctionnera.',
  6232. warn: 'Le port 990 est inaccessible. La surveillance peut toujours fonctionner, mais l\'envoi d\'impressions vers l\'imprimante échouera. Assurez-vous que le port 990 n\'est pas bloqué.',
  6233. },
  6234. external_storage: {
  6235. title: 'Stocker les fichiers envoyés sur stockage externe (étape 4 de l\'installation)',
  6236. pass: 'L\'imprimante signale que cette option est activée — les fichiers envoyés seront stockés sur la carte SD et les archives auront des miniatures et des métadonnées slicer.',
  6237. fail: 'L\'imprimante signale que cette option est désactivée. Activez « Stocker les fichiers envoyés sur stockage externe » — sur les firmwares récents (P2S 01.02 / Bambu Studio 2.6+) l\'interrupteur se trouve dans les Paramètres d\'impression de l\'imprimante ; sur les versions antérieures, il est dans l\'onglet Périphérique de Bambu Studio / OrcaSlicer. Sans cette option, chaque impression archivée est dépourvue de miniature et de métadonnées slicer.',
  6238. skip: 'Non vérifié — une connexion MQTT active est requise. Sur les slicers plus anciens où ce paramètre n\'existe que dans le slicer, l\'imprimante ne le signale pas, donc cette vérification passe même si l\'option est désactivée — vérifiez l\'étape 4 de l\'installation manuellement.',
  6239. skip_unsupported_model: 'Ce modèle a un emplacement SD mais aucun moyen d\'activer l\'option — le firmware actuel de la série P1 n\'affiche pas le bouton dans Bambu Studio et l\'imprimante n\'a pas d\'écran. Il n\'y a rien à corriger ici ; les impressions archivées peuvent manquer de miniatures et de métadonnées du slicer jusqu\'à ce que Bambu Lab l\'ajoute par firmware.',
  6240. },
  6241. port_rtsps: {
  6242. title: 'Port caméra ({{protocol}} {{port}})',
  6243. pass: 'Accessible — le flux de la caméra fonctionnera.',
  6244. warn: 'Le port {{port}} est inaccessible. La vue caméra en direct ne fonctionnera pas. Cela n\'affecte pas l\'impression.',
  6245. },
  6246. network_mode: {
  6247. title: 'Mode réseau Docker',
  6248. pass: 'Fonctionne en mode réseau host.',
  6249. warn: 'Bambuddy fonctionne en réseau Docker bridge. La découverte d\'imprimantes et l\'imprimante virtuelle nécessitent le mode réseau host — recréez le conteneur avec "network_mode: host".',
  6250. skip: 'Ne fonctionne pas dans Docker — non applicable.',
  6251. },
  6252. subnet: {
  6253. title: 'Sous-réseau',
  6254. pass: 'L\'imprimante et Bambuddy sont sur le même sous-réseau.',
  6255. warn: 'L\'imprimante ({{printer_ip}}) et Bambuddy ({{host_ip}}) sont sur des sous-réseaux différents. Ils peuvent ne pas se joindre, sauf si un routage entre les sous-réseaux est configuré.',
  6256. skip: 'Le sous-réseau n\'a pas pu être déterminé — ignoré.',
  6257. },
  6258. mqtt_auth: {
  6259. title: 'Identifiants de l\'imprimante',
  6260. pass: 'L\'imprimante a accepté la connexion.',
  6261. fail: 'L\'imprimante est accessible mais Bambuddy n\'y est pas connecté. Le code d\'accès ou le numéro de série est très probablement incorrect — le code d\'accès change chaque fois que le mode LAN uniquement ou le mode développeur est activé/désactivé, recopiez-le donc depuis l\'écran de l\'imprimante. Une imprimante en cours de redémarrage, ou ayant déjà atteint sa limite de connexions simultanées, produit le même résultat.',
  6262. fail_auth_rejected: 'L\'imprimante a refusé les identifiants de Bambuddy. Le code d\'accès ou le numéro de série est incorrect — le code d\'accès change chaque fois que le mode LAN uniquement ou le mode développeur est activé/désactivé. Recopiez-le depuis l\'écran de l\'imprimante et enregistrez-le dans les paramètres de l\'imprimante.',
  6263. skip: 'Non vérifié — l\'imprimante n\'a pas pu être jointe.',
  6264. },
  6265. developer_mode: {
  6266. title: 'Mode développeur LAN',
  6267. pass: 'Le mode développeur est activé.',
  6268. fail: 'Le mode développeur est DÉSACTIVÉ sur l\'imprimante. Activez-le dans les paramètres LAN de l\'imprimante — et confirmez avec OK. Sans lui, les impressions ne démarreront pas.',
  6269. skip: 'Impossible à vérifier — nécessite une connexion active à l\'imprimante.',
  6270. },
  6271. printer_publishing: {
  6272. title: 'L\'imprimante publie son état',
  6273. pass: 'L\'imprimante publie des mises à jour d\'état — l\'AMS, les filaments et les profils K seront correctement reflétés dans le slicer.',
  6274. fail: 'Le broker MQTT a accepté la connexion mais l\'imprimante n\'a publié aucun rapport d\'état. Il s\'agit presque toujours d\'un numéro de série erroné ou mal capitalisé — le topic device/<serial>/report est sensible à la casse. Vérifiez le numéro de série dans les paramètres de l\'imprimante par rapport à l\'écran de la machine.',
  6275. skip: 'Impossible à vérifier — nécessite une connexion active à l\'imprimante.',
  6276. },
  6277. },
  6278. },
  6279. systemHealth: {
  6280. sectionTitle: 'État du système',
  6281. sectionDescription: 'Analyse les journaux récents à la recherche de problèmes connus que vous pouvez généralement résoudre vous-même, avant qu\'ils ne deviennent un ticket de support.',
  6282. rescan: 'Relancer l\'analyse',
  6283. clean: 'Aucun problème connu trouvé dans les {{times}} dernières entrées de journal.',
  6284. logUnavailable: 'La journalisation dans un fichier est désactivée, les journaux ne peuvent donc pas être analysés. Activez la journalisation dans un fichier pour utiliser cette vérification.',
  6285. learnMore: 'Comment corriger',
  6286. fixLabel: 'Correctif :',
  6287. occurrences: 'Vu {{times}}× — dernière fois à {{lastSeen}}',
  6288. category: {
  6289. layer8: 'Vous pouvez corriger ceci',
  6290. environment: 'Environnement',
  6291. bug: 'Merci de le signaler',
  6292. },
  6293. signature: {
  6294. 'ftp-auth-rejected': {
  6295. name: 'L\'imprimante a refusé le code d\'accès',
  6296. cause: 'L\'imprimante a refusé la connexion de transfert de fichiers. Le code d\'accès est incorrect, ou il a changé après l\'activation du mode développeur.',
  6297. fix: 'Recopiez le code d\'accès depuis l\'écran de l\'imprimante (paramètres LAN) et mettez-le à jour dans les paramètres de l\'imprimante dans Bambuddy.',
  6298. },
  6299. 'ftp-connection-timeout': {
  6300. name: 'Délai de connexion de transfert de fichiers dépassé',
  6301. cause: 'Bambuddy n\'a pas pu atteindre le port de transfert de fichiers de l\'imprimante (FTPS 990). Le port est bloqué, ou l\'imprimante est éteinte ou sur un autre sous-réseau.',
  6302. fix: 'Assurez-vous que rien ne bloque le port 990 entre Bambuddy et l\'imprimante, et que les deux sont sur le même réseau.',
  6303. },
  6304. 'ftp-ssl-error': {
  6305. name: 'Échec de la négociation sécurisée du transfert de fichiers',
  6306. cause: 'La négociation TLS avec le serveur de transfert de fichiers de l\'imprimante a échoué. C\'est souvent dû à un pare-feu ou à un micrologiciel d\'imprimante obsolète.',
  6307. fix: 'Mettez à jour le micrologiciel de l\'imprimante et vérifiez qu\'aucun pare-feu ou proxy n\'intercepte la connexion sur le port 990.',
  6308. },
  6309. 'mqtt-connection-flapping': {
  6310. name: 'La connexion à l\'imprimante se coupe sans cesse',
  6311. cause: 'La connexion de contrôle (MQTT 8883) se déconnecte et se reconnecte à répétition — généralement à cause d\'un réseau faible ou d\'un port partiellement bloqué.',
  6312. fix: 'Vérifiez le signal Wi-Fi près de l\'imprimante, privilégiez une connexion filaire et assurez-vous que le port 8883 est accessible de façon fiable.',
  6313. },
  6314. 'camera-connection-refused': {
  6315. name: 'Flux de la caméra inaccessible',
  6316. cause: 'La caméra en direct n\'a pas pu être atteinte sur le port RTSPS 322. Le port est bloqué, ou la caméra ou la vue en direct par LAN est désactivée sur l\'imprimante.',
  6317. fix: 'Activez la caméra et la vue en direct par LAN sur l\'imprimante, et assurez-vous que le port 322 n\'est pas bloqué. Cela n\'affecte pas l\'impression.',
  6318. },
  6319. 'database-locked': {
  6320. name: 'Conflits d\'écriture dans la base de données',
  6321. cause: 'La base de données SQLite rencontre des erreurs "database is locked" sous charge — fréquent lorsque plusieurs imprimantes sont utilisées en même temps.',
  6322. fix: 'Faites passer Bambuddy à une base de données PostgreSQL externe. Consultez le guide PostgreSQL dans la documentation.',
  6323. },
  6324. },
  6325. },
  6326. vpDiagnostic: {
  6327. title: 'Vérification de configuration — {{name}}',
  6328. runButton: 'Lancer la vérification',
  6329. running: 'Vérification de configuration en cours...',
  6330. runFailed: 'Impossible de lancer la vérification de configuration : {{error}}',
  6331. retry: 'Relancer',
  6332. overall: {
  6333. ok: 'Toutes les vérifications ont réussi — cette imprimante virtuelle est correctement configurée.',
  6334. warnings: 'L\'imprimante virtuelle devrait fonctionner, mais certains points nécessitent votre attention.',
  6335. problems: 'Des problèmes ont été trouvés qui expliquent pourquoi le slicer ne voit pas ou ne peut pas utiliser cette imprimante virtuelle.',
  6336. },
  6337. check: {
  6338. enabled: {
  6339. title: 'Imprimante virtuelle activée',
  6340. fail: 'Cette imprimante virtuelle est désactivée. Activez-la pour qu\'elle soit détectable.',
  6341. },
  6342. running: {
  6343. title: 'Services en cours d\'exécution',
  6344. fail: 'L\'imprimante virtuelle est activée mais ses services ne sont pas en cours d\'exécution. Consultez le journal Bambuddy — un conflit d\'IP de liaison ou une erreur de permission les arrête généralement.',
  6345. },
  6346. bind_interface: {
  6347. title: 'Interface réseau de liaison',
  6348. fail: 'L\'interface de liaison n\'est pas définie ou n\'existe plus sur cet hôte. Choisissez une interface actuelle dans la liste "Interface de liaison".',
  6349. },
  6350. access_code: {
  6351. title: 'Code d\'accès défini',
  6352. fail: 'Aucun code d\'accès n\'est défini. Le slicer doit recevoir le même code d\'accès à 8 caractères que celui que vous définissez ici.',
  6353. },
  6354. target_printer: {
  6355. title: 'Imprimante cible',
  6356. fail: 'Aucune imprimante cible n\'est sélectionnée. Le mode proxy a besoin d\'une vraie imprimante vers laquelle transférer.',
  6357. warn: 'L\'imprimante cible est hors ligne pour le moment — le transfert reprendra dès qu\'elle se reconnectera.',
  6358. },
  6359. port_ftps: {
  6360. title: 'Service de téléversement de fichiers (port {{port}})',
  6361. fail: 'Rien n\'écoute sur le port {{port}} de l\'IP de liaison, le slicer ne peut donc pas téléverser de fichiers. La cause habituelle est un conflit de port sur cette interface.',
  6362. },
  6363. port_mqtt: {
  6364. title: 'Service de contrôle (port {{port}})',
  6365. fail: 'Rien n\'écoute sur le port {{port}} de l\'IP de liaison, le slicer ne peut donc pas se connecter ni afficher l\'état.',
  6366. },
  6367. port_bind: {
  6368. title: 'Service de détection (port {{port}})',
  6369. fail: 'Rien n\'écoute sur le port {{port}} de l\'IP de liaison, la poignée de main de détection du slicer échoue donc.',
  6370. },
  6371. certificate: {
  6372. title: 'Certificat TLS',
  6373. pass: 'Certificat prêt. Assurez-vous que le certificat CA Bambuddy (ci-dessus) est importé dans le magasin de confiance de votre slicer.',
  6374. fail: 'Le certificat TLS de cette imprimante virtuelle est manquant. Vérifiez que le répertoire de données Bambuddy est accessible en écriture.',
  6375. },
  6376. },
  6377. },
  6378. bugReport: {
  6379. logHealthSummary: 'Problèmes connus trouvés dans vos journaux',
  6380. logHealthIntro: 'Les journaux récents correspondent à des problèmes connus. Consultez les correctifs ci-dessous — les résoudre pourrait régler votre problème sans rapport de bogue. Vous pouvez tout de même envoyer un rapport ci-dessous.',
  6381. title: 'Signaler un bug',
  6382. description: 'Description',
  6383. descriptionPlaceholder: 'Qu\'est-ce qui n\'a pas fonctionné ? Veuillez décrire le problème...',
  6384. email: 'E-mail (optionnel)',
  6385. emailPlaceholder: 'votre@email.fr',
  6386. emailPrivacy: 'Si fourni, votre e-mail sera inclus dans une section repliée de l\'issue GitHub pour que le mainteneur puisse vous contacter.',
  6387. screenshot: 'Capture d\'écran',
  6388. uploadOrPaste: 'Télécharger, coller ou glisser une image',
  6389. dataCollectedSummary: 'Quelles données sont incluses dans le rapport ?',
  6390. dataIncluded: 'Inclus :',
  6391. dataIncludedList: 'Version de l\'app, OS, architecture, version Python, statistiques de base de données (compteurs uniquement), modèles d\'imprimantes, nombre de buses, versions firmware, état de connexion, état des intégrations (Spoolman, MQTT, HA), paramètres non sensibles, nombre d\'interfaces réseau, détails Docker, versions des dépendances.',
  6392. dataNeverIncluded: 'Jamais inclus :',
  6393. dataNeverIncludedList: 'Noms d\'imprimantes, numéros de série, codes d\'accès, mots de passe, adresses IP, adresses e-mail, clés API, tokens, URLs de webhook, noms d\'hôtes ou noms d\'utilisateurs.',
  6394. submit: 'Envoyer',
  6395. startLogging: 'Lancer la journalisation',
  6396. stepEnableLogging: 'Journalisation activée',
  6397. stepReproduce: 'Reproduisez le problème',
  6398. stepStopLogging: 'Arrêter & envoyer',
  6399. stopAndSubmit: 'Arrêter & Envoyer',
  6400. maxDuration: 'Arrêt auto après {{minutes}} min',
  6401. stoppingLogs: 'Collecte des journaux & envoi...',
  6402. submitting: 'Envoi du rapport de bug...',
  6403. submittingStepConnection: 'Vérification de la connectivité des imprimantes',
  6404. submittingStepVirtualPrinters: 'Vérification de la configuration des imprimantes virtuelles',
  6405. submittingStepLogScan: 'Analyse des journaux récents pour les problèmes connus',
  6406. submittingStepSubmit: 'Envoi du rapport vers GitHub',
  6407. submitSuccess: 'Rapport de bug envoyé avec succès !',
  6408. submitFailed: 'Échec de l\'envoi du rapport de bug',
  6409. diagnosticChecking: 'Vérification des connexions des imprimantes...',
  6410. diagnosticHealthy: 'Vérification de connexion réussie — aucun problème détecté sur vos imprimantes.',
  6411. diagnosticSummary: '{{problems}} imprimante(s) sur {{total}} ont des problèmes de connexion',
  6412. diagnosticIntro: 'Une ou plusieurs imprimantes ont un problème de connexion qui pourrait être à l\'origine de votre problème. Dépliez une imprimante ci-dessous pour voir la solution — la résoudre pourrait régler le problème sans rapport de bug. Vous pouvez tout de même envoyer un rapport ci-dessous.',
  6413. thankYou: 'Merci !',
  6414. submitted: 'Votre rapport de bug a été soumis.',
  6415. viewIssue: 'Voir l\'issue',
  6416. unexpectedError: 'Une erreur inattendue est survenue',
  6417. },
  6418. failureDetection: {
  6419. title: 'Détection d\'échec par IA',
  6420. description: 'Surveille les impressions via une API ML Obico auto-hébergée et agit automatiquement sur les échecs détectés.',
  6421. mlUrl: 'URL de l\'API ML Obico',
  6422. mlUrlHint: 'URL de base de votre conteneur Obico ml_api auto-hébergé (ex. http://192.168.1.10:3333).',
  6423. test: 'Tester',
  6424. testSuccess: 'API ML accessible et fonctionnelle.',
  6425. testFailed: 'Impossible d\'atteindre l\'API ML.',
  6426. sensitivity: 'Sensibilité',
  6427. sensitivityLow: 'Basse (moins de faux positifs)',
  6428. sensitivityMedium: 'Moyenne (équilibrée)',
  6429. sensitivityHigh: 'Haute (détection précoce, plus de faux positifs)',
  6430. sensitivityHint: 'Ajuste les seuils de confiance qui déclenchent les avertissements et les échecs.',
  6431. action: 'Action sur échec détecté',
  6432. actionNotify: 'Notifier uniquement',
  6433. actionPause: 'Mettre en pause',
  6434. actionPauseOff: 'Pause et couper l\'alimentation',
  6435. pollInterval: 'Intervalle de vérification (secondes)',
  6436. pollIntervalHint: 'Fréquence de vérification de chaque imprimante pendant l\'impression. Minimum 5s, maximum 120s.',
  6437. externalUrlMissing: 'L\'URL externe n\'est pas définie.',
  6438. externalUrlHint: 'L\'API ML récupère la capture caméra par URL. Définissez l\'URL externe dans les paramètres généraux pour que le conteneur API ML puisse atteindre Bambuddy.',
  6439. perPrinterTitle: 'Imprimantes surveillées',
  6440. perPrinterHint: 'Choisissez quelles imprimantes le service de détection surveille.',
  6441. monitorAll: 'Surveiller toutes les imprimantes connectées',
  6442. statusTitle: 'Statut',
  6443. serviceRunning: 'Service en cours d\'exécution',
  6444. thresholds: 'Seuils bas / haut',
  6445. activePrinters: 'Impressions actives',
  6446. noActivePrints: 'Aucune impression en cours.',
  6447. historyTitle: 'Détections récentes',
  6448. noHistory: 'Aucune détection pour le moment.',
  6449. },
  6450. makerworld: {
  6451. title: 'MakerWorld',
  6452. description: 'Collez une URL de modèle MakerWorld pour l\'importer et l\'imprimer directement depuis Bambuddy — sans passer par l\'application Bambu Handy.',
  6453. pasteUrlHeader: 'Importer depuis MakerWorld',
  6454. pasteUrlPlaceholder: 'https://makerworld.com/en/models/… ou collez n\'importe quel lien MakerWorld',
  6455. resolveButton: 'Résoudre',
  6456. signInRequiredTitle: 'Connexion Bambu Cloud requise pour télécharger',
  6457. signInRequiredBody: 'Vous pouvez consulter les détails du modèle anonymement, mais MakerWorld nécessite un compte Bambu Cloud pour télécharger les fichiers 3MF.',
  6458. signInExpiredTitle: 'Session Bambu Cloud expirée',
  6459. signInExpiredBody: 'Vous êtes toujours connecté à Bambuddy, mais Bambu Lab n\'accepte plus le jeton enregistré : les téléchargements échoueront. Reconnectez-vous à Bambu Cloud.',
  6460. openCloudSettings: 'Ouvrir les paramètres Cloud',
  6461. untitledModel: 'Modèle sans titre',
  6462. byCreator: 'par {{name}}',
  6463. downloadsCount: '{{count}} téléchargements',
  6464. licensePrefix: 'Licence',
  6465. alreadyImported: 'Déjà dans la bibliothèque',
  6466. openOnMakerworld: 'Ouvrir sur MakerWorld',
  6467. alreadyInLibrary: 'Ce modèle est déjà dans votre bibliothèque — retrouvez-le dans Gestionnaire de fichiers → MakerWorld',
  6468. importSuccess: '{{filename}} importé — enregistré dans Gestionnaire de fichiers → MakerWorld',
  6469. platesHeader: 'Plateaux ({{count}})',
  6470. plateDefaultName: 'Plateau {{n}}',
  6471. materialCount: '{{count}} filaments',
  6472. amsRequired: 'AMS requis',
  6473. slicedFor: 'Découpé pour {{printer}}',
  6474. alsoCompatible: 'Également marqué compatible : {{printers}}',
  6475. importToLibrary: 'Enregistrer',
  6476. sliceIn: 'Enregistrer et découper dans {{slicer}}',
  6477. disclaimer: 'L\'intégration MakerWorld utilise des points de terminaison API documentés par la communauté. Bambuddy n\'est ni affilié ni approuvé par MakerWorld ou Bambu Lab.',
  6478. lastImportSuccess: 'Importé dans votre bibliothèque',
  6479. lastImportAlreadyInLibrary: 'Déjà dans votre bibliothèque',
  6480. viewInLibrary: 'Voir dans le Gestionnaire de fichiers',
  6481. openInBambuStudio: 'Ouvrir dans Bambu Studio',
  6482. openInOrcaSlicer: 'Ouvrir dans OrcaSlicer',
  6483. importTo: 'Importer dans le Gestionnaire de fichiers',
  6484. recentImportsHeader: 'Imports récents',
  6485. phaseResolving: 'Résolution',
  6486. phaseDownloading: 'Téléchargement',
  6487. folderAuto: 'MakerWorld (par défaut)',
  6488. importAll: 'Tout importer',
  6489. importAllProgress: 'Importation de {{current}}/{{total}}',
  6490. openGallery: 'Ouvrir la galerie d\'images',
  6491. galleryPrev: 'Image précédente',
  6492. galleryNext: 'Image suivante',
  6493. deleteImport: 'Retirer de la bibliothèque',
  6494. importDeleting: 'Suppression…',
  6495. importDeleted: 'Retiré de la bibliothèque',
  6496. confirmDelete: 'Retirer {{filename}} de la bibliothèque ? Le fichier local est supprimé, mais la plaque peut être ré-importée depuis MakerWorld.',
  6497. errors: {
  6498. resolveFailed: 'Impossible de résoudre cette URL MakerWorld.',
  6499. downloadFailed: 'Le téléchargement a échoué. Veuillez réessayer.',
  6500. deleteFailed: 'Impossible de retirer le fichier de la bibliothèque.',
  6501. },
  6502. },
  6503. gcodeViewer: {
  6504. back: 'Retour',
  6505. backToArchives: 'Retour aux archives d\'impression',
  6506. backToFiles: 'Retour au gestionnaire de fichiers',
  6507. },
  6508. libraryTrash: {
  6509. title: 'Corbeille',
  6510. headerButton: 'Corbeille',
  6511. headerTooltip: 'Voir les fichiers déplacés dans la corbeille',
  6512. backToFiles: 'Retour au gestionnaire de fichiers',
  6513. subtitleAdmin: 'Les fichiers supprimés restent ici pendant {{days}} jours, puis sont supprimés automatiquement. Cette vue affiche la corbeille de tous les utilisateurs.',
  6514. subtitleUser: 'Les fichiers supprimés restent ici pendant {{days}} jours, puis sont supprimés automatiquement.',
  6515. loading: 'Chargement de la corbeille…',
  6516. loadError: 'Impossible de charger la corbeille.',
  6517. empty: 'La corbeille est vide.',
  6518. summary: '{{count}} fichiers · {{size}}',
  6519. emptyTrash: 'Vider la corbeille',
  6520. restore: 'Restaurer',
  6521. purgeNow: 'Supprimer maintenant',
  6522. autoPurgeIn: 'Suppression automatique dans {{when}}',
  6523. days: 'jours',
  6524. retentionLabel: 'Supprimer automatiquement après',
  6525. selectAll: 'Tout sélectionner',
  6526. selectOne: 'Sélectionner {{filename}}',
  6527. selectionCount: '{{count}} sélectionné(s)',
  6528. bulkRestore: 'Restaurer la sélection',
  6529. bulkPurge: 'Supprimer la sélection',
  6530. col: {
  6531. filename: 'Fichier',
  6532. folder: 'Dossier',
  6533. size: 'Taille',
  6534. deleted: 'Mis à la corbeille',
  6535. autoPurge: 'Suppression auto.',
  6536. owner: 'Propriétaire',
  6537. actions: 'Actions',
  6538. },
  6539. confirm: {
  6540. purgeTitle: 'Supprimer définitivement ?',
  6541. purgeBody: '{{filename}} sera supprimé du disque et ne pourra pas être restauré.',
  6542. emptyTitle: 'Vider la corbeille ?',
  6543. emptyBody: 'Tous les {{count}} fichiers seront supprimés du disque. Cette action est irréversible.',
  6544. bulkPurgeTitle: 'Supprimer définitivement les fichiers sélectionnés ?',
  6545. bulkPurgeBody: 'Les {{count}} fichiers sélectionnés seront supprimés du disque et ne pourront pas être restaurés.',
  6546. cta: 'Supprimer définitivement',
  6547. },
  6548. toast: {
  6549. restored: 'Fichier restauré.',
  6550. restoreFailed: 'Impossible de restaurer le fichier.',
  6551. purged: 'Fichier supprimé définitivement.',
  6552. purgeFailed: 'Impossible de supprimer le fichier.',
  6553. emptied: '{{count}} fichier(s) supprimé(s) de la corbeille.',
  6554. emptyFailed: 'Impossible de vider la corbeille.',
  6555. retentionSaved: 'Suppression automatique réglée sur {{days}} jours.',
  6556. retentionFailed: 'Impossible d\'enregistrer le réglage de rétention.',
  6557. bulkRestored: '{{count}} fichier(s) restauré(s).',
  6558. bulkPurged: '{{count}} fichier(s) supprimé(s).',
  6559. },
  6560. },
  6561. libraryPurge: {
  6562. title: 'Purger les anciens fichiers',
  6563. headerButton: 'Purger',
  6564. headerTooltip: 'Déplacer en masse les anciens fichiers vers la corbeille',
  6565. description: 'Les fichiers plus anciens que le seuil seront déplacés vers la corbeille. Les dossiers externes sont ignorés. Vous pouvez restaurer depuis la corbeille avant la suppression automatique.',
  6566. ageLabel: 'Déplacer les fichiers plus anciens que',
  6567. days: 'jours',
  6568. includeNeverPrinted: 'Inclure les fichiers jamais imprimés',
  6569. effectsTitle: 'Ce qui se passe lorsque vous cliquez sur Purger',
  6570. effect1: 'Les fichiers correspondants sont déplacés vers la corbeille — pas encore supprimés du disque.',
  6571. effect2: 'Vous pouvez les restaurer depuis la corbeille jusqu\'à l\'expiration de la fenêtre de rétention.',
  6572. effect3: 'Après la période de rétention, le balayeur de corbeille les supprime définitivement.',
  6573. effect4: 'Les fichiers dans les dossiers externes (liés) sont ignorés — Bambuddy ne supprime jamais d\'octets qu\'il ne possède pas.', previewLoading: 'Vérification du nombre de fichiers concernés…',
  6574. previewFailed: 'Impossible de prévisualiser la purge.',
  6575. previewSummary: '{{count}} fichiers · {{size}} seraient déplacés vers la corbeille',
  6576. andMore: '…et {{count}} de plus',
  6577. warning: 'Les fichiers sont supprimés en douceur — vous pouvez les restaurer depuis la corbeille jusqu\'à l\'expiration de la période de rétention.',
  6578. confirmCta: 'Déplacer {{count}} vers la corbeille',
  6579. purging: 'Déplacement vers la corbeille…',
  6580. toast: {
  6581. success: '{{count}} fichier(s) déplacé(s) vers la corbeille.',
  6582. failed: 'Impossible de purger les fichiers.',
  6583. },
  6584. },
  6585. libraryAutoPurge: {
  6586. enableLabel: 'Purge automatique des anciens fichiers',
  6587. enableDescription: 'Exécute la purge administrateur une fois par jour. Les fichiers sont d\'abord déplacés vers la corbeille — ils ne sont pas supprimés immédiatement.',
  6588. ageLabel: 'Purger automatiquement les fichiers plus anciens que',
  6589. ageDescription: 'Minimum 7 jours, maximum 10 ans. Utilise la même règle d\'ancienneté que le bouton Purger manuel.',
  6590. days: 'jours',
  6591. includeNeverPrinted: 'Inclure les fichiers jamais imprimés',
  6592. saveFailed: 'Impossible d\'enregistrer les paramètres de purge automatique.',
  6593. },
  6594. archivePurge: {
  6595. headerButton: 'Purger les anciens',
  6596. headerTooltip: 'Suppression groupée d\'anciennes archives',
  6597. title: 'Purger les anciennes archives',
  6598. description: 'Effacer l\'ancien historique d\'impression. Chaque archive vieillit selon sa dernière impression terminée — réimprimer une archive remet son âge à zéro, donc le travail actif n\'est jamais purgé.',
  6599. ageLabel: 'Supprimer les archives non imprimées depuis',
  6600. days: 'jours',
  6601. effectsTitle: 'Ce qui se passe lorsque vous cliquez sur Purger',
  6602. effect1: 'Chaque archive correspondante est masquée des listes et ses fichiers sont retirés du disque (3MF, miniature, timelapse, 3MF source, F3D, photos).',
  6603. effect2: 'La ligne d\'archive reste en base pour que les statistiques rapides conservent la contribution en filament, temps, coût et énergie — même comportement que la suppression individuelle par défaut.',
  6604. effect3: 'Cochez « Aussi retirer des statistiques » ci-dessous pour également supprimer la contribution des statistiques rapides (équivalent à l\'option de la suppression individuelle). Ce chemin est irréversible.',
  6605. effect4: 'Réimprimer une archive remet son compteur à zéro, les archives actives sont donc protégées.',
  6606. purgeStatsLabel: 'Aussi retirer des statistiques',
  6607. purgeStatsHint: 'Supprime les archives correspondantes des statistiques rapides (filament, temps, coût, énergie). Sans cette option, les statistiques conservent chaque contribution et seuls les fichiers quittent le disque.',
  6608. previewLoading: 'Vérification du nombre d\'archives correspondantes…',
  6609. previewFailed: 'Impossible de prévisualiser la purge.',
  6610. previewSummary: '{{count}} archives · {{size}} seraient retirées',
  6611. andMore: '…et {{count}} de plus',
  6612. warning: 'Les fichiers sont retirés du disque et ne peuvent pas être restaurés. Téléchargez ou marquez comme favori avant de continuer.',
  6613. confirmCta: 'Retirer {{count}} archive(s)',
  6614. purging: 'Retrait en cours…',
  6615. toast: {
  6616. success: '{{count}} archive(s) retirée(s).',
  6617. failed: 'Impossible de purger les archives.',
  6618. },
  6619. },
  6620. archiveAutoPurge: {
  6621. enableLabel: 'Purger auto. les anciennes archives',
  6622. enableDescription: 'Une fois par jour, masque des listes les archives non imprimées dans le seuil et retire leurs fichiers du disque. Réimprimer remet le compteur à zéro.',
  6623. ageLabel: 'Suppression auto. des archives non imprimées depuis',
  6624. ageDescription: 'Minimum 7 jours, maximum 10 ans. Basé sur la dernière impression terminée — réimprimer remet l\'âge à zéro. Retire 3MF, miniature, timelapse, 3MF source, F3D et photos.',
  6625. days: 'jours',
  6626. purgeStatsLabel: 'Aussi retirer des statistiques',
  6627. purgeStatsDescription: 'Lorsqu\'activé, le nettoyage quotidien supprime aussi la contribution de chaque archive purgée des statistiques rapides (filament, temps, coût, énergie). Désactivé par défaut — les statistiques conservent la contribution et seuls les fichiers quittent le disque.',
  6628. runNow: 'Purger les archives maintenant',
  6629. saveFailed: 'Impossible d\'enregistrer les paramètres de purge automatique.',
  6630. },
  6631. cameraTokens: {
  6632. scope: {
  6633. camera_stream: 'Flux de caméra',
  6634. camwall: 'Mur de caméras',
  6635. overlay: 'Incrustation de streaming',
  6636. },
  6637. title: 'Jetons API caméra',
  6638. navTitle: 'Jetons API caméra',
  6639. description:
  6640. 'Jetons de longue durée pour intégrer le flux de caméra dans Home Assistant, Frigate, des écrans en mode kiosque ou tout autre outil nécessitant une adresse stable. La portée se choisit à la création ; un jeton peut être révoqué à tout moment.',
  6641. loading: 'Chargement…',
  6642. confirmRevoke: {
  6643. title: 'Révoquer ce jeton ?',
  6644. body: 'Tout appareil utilisant "{{name}}" perdra l\'accès immédiatement. Action irréversible.',
  6645. cancel: 'Annuler',
  6646. confirm: 'Révoquer',
  6647. },
  6648. create: {
  6649. scopeLabel: 'Portée',
  6650. hintCameraStream:
  6651. 'Un jeton de flux de caméra ne peut récupérer que des flux et des instantanés. À utiliser pour Home Assistant, Frigate ou tout ce qui intègre une seule caméra.',
  6652. hintCamWall:
  6653. "Un jeton Mur de caméras ouvre /camwall sur un écran sans connexion. Il voit le nom et l'état de chaque imprimante, ainsi que leurs flux de caméra. Il ne voit ni les noms de fichiers, ni les adresses, ni les codes d'accès.",
  6654. hintOverlay:
  6655. "Un jeton Incrustation de streaming ouvre /overlay/{printerId} sur un écran sans connexion — pour OBS ou tout autre flux en direct. Il voit le flux de caméra d'une imprimante ainsi que son état d'impression en direct, y compris le nom de fichier affiché à l'écran. Il ne voit ni les adresses ni les codes d'accès.",
  6656. title: 'Créer un nouveau jeton',
  6657. nameLabel: 'Nom du jeton',
  6658. namePlaceholder: 'par ex. Home Assistant',
  6659. daysLabel: 'Jours avant expiration',
  6660. submit: 'Créer',
  6661. hint:
  6662. 'Durée de vie maximale 365 jours. La valeur du jeton n\'est affichée qu\'une seule fois — copiez-la maintenant.',
  6663. },
  6664. created: {
  6665. camWallUrlTitle: 'Adresse du mur de caméras pour cet écran',
  6666. camWallUrlHint:
  6667. "Ouvrez cette adresse sur l'écran. Quiconque peut lire l'adresse peut regarder le mur : traitez-la comme une clé. Révoquez le jeton pour couper l'écran.",
  6668. overlayUrlTitle: "Adresse d'incrustation pour OBS",
  6669. overlayUrlHint:
  6670. "Ajoutez ceci comme Source navigateur dans OBS. Remplacez le numéro dans /overlay/1 par le numéro de votre imprimante (indiqué dans son adresse sur la page Imprimantes). Quiconque peut lire l'adresse peut regarder le flux : traitez-la comme une clé et révoquez le jeton pour couper l'accès.",
  6671. title: 'Jeton créé – copiez-le maintenant',
  6672. warning:
  6673. 'C\'est la seule fois où ce jeton sera visible. Après la fermeture de ce dialogue, vous ne pourrez plus jamais le voir.',
  6674. copy: 'Copier',
  6675. dismiss: 'Je l\'ai enregistré',
  6676. },
  6677. list: {
  6678. scope: 'Portée',
  6679. myTitle: 'Mes jetons',
  6680. allTitle: 'Tous les utilisateurs (vue admin)',
  6681. empty: 'Aucun jeton pour le moment.',
  6682. name: 'Nom',
  6683. owner: 'Propriétaire',
  6684. prefix: 'Préfixe',
  6685. created: 'Créé',
  6686. expires: 'Expire',
  6687. lastUsed: 'Dernière utilisation',
  6688. revoke: 'Révoquer',
  6689. expired: 'Expiré',
  6690. },
  6691. toast: {
  6692. created: 'Jeton créé',
  6693. createFailed: 'Échec de la création du jeton',
  6694. revoked: 'Jeton révoqué',
  6695. revokeFailed: 'Échec de la révocation du jeton',
  6696. loadFailed: 'Échec du chargement des jetons',
  6697. copied: 'Copié dans le presse-papiers',
  6698. copyFailed: 'Échec de la copie – sélectionnez et copiez manuellement',
  6699. },
  6700. },
  6701. // Forecast & Inventory Intelligence
  6702. forecast: {
  6703. title: 'Prévision des stocks',
  6704. noSpools: 'Aucune bobine active trouvée. Ajoutez des bobines à votre inventaire pour voir les données de prévision.',
  6705. noUsageData: 'Aucune donnée d\'utilisation disponible — impossible de projeter la chronologie des stocks.',
  6706. sku: 'SKU',
  6707. // Table headers
  6708. material: 'Matériau',
  6709. stock: 'Stock',
  6710. dailyRate: 'Cadence',
  6711. daysLeft: 'Jours restants',
  6712. emptyBy: 'Épuisé le',
  6713. reorderBy: 'Réapprovisionner avant le',
  6714. actions: 'Actions',
  6715. // Rate tier badges
  6716. trend: 'Tendance',
  6717. estimated: 'Est.',
  6718. noData: 'Aucune donnée',
  6719. // Timeframe
  6720. timeframe: 'Période',
  6721. // Chart
  6722. chartTitle: 'Prévision du stock — Top 5 matériaux',
  6723. dashedLinesROP: 'Lignes pointillées = points de réapprovisionnement',
  6724. stockLevel: 'Niveau de stock',
  6725. reorderPoint: 'Point de réapprovisionnement',
  6726. safetyMargin: 'Marge de sécurité',
  6727. trendLegend: 'Tendance (basée sur l\'historique, niveau de service 95 %)',
  6728. estimatedLegend: 'Estimée (delta de poids)',
  6729. noDataLegend: 'Aucune donnée',
  6730. ropLabel: 'PR',
  6731. ssLabel: 'SS',
  6732. safetyStockLegend: 'Stock de sécurité',
  6733. stockArrivalLegend: 'Arrivée du stock',
  6734. stockoutLegend: 'Rupture de stock',
  6735. // Alerts toolbar
  6736. alertCount_one: '{{count}} alerte',
  6737. alertCount_other: '{{count}} alertes',
  6738. order: 'Commander',
  6739. // Settings
  6740. globalLeadTime: 'Délai global',
  6741. globalLeadTimeHint: 'Délai global minimum — utilisé dans le calcul du point de réapprovisionnement pour tous les SKUs',
  6742. save: 'Enregistrer',
  6743. cancel: 'Annuler',
  6744. settingsSaved: 'Paramètres enregistrés',
  6745. failedSaveSettings: 'Échec de l\'enregistrement des paramètres',
  6746. globalLeadTimeSaved: 'Délai global enregistré',
  6747. skuLeadTimeOverride: 'Délai spécifique au SKU',
  6748. skuLeadTimeHint: '0 = utiliser le délai global. Définir >0 pour remplacer ce SKU.',
  6749. safetyMarginLabel: 'Marge de sécurité',
  6750. effectiveLeadTime: 'Délai effectif',
  6751. effectiveLeadTimeHint: 'max(global {{global}}j, SKU {{sku}}j)',
  6752. reorderPointHint: 'd̄ × LT + safety margin — commander quand le stock atteint ce niveau',
  6753. safetyMarginHint: 'Stock de sécurité statistique (z=1,65 × σ × √LT) + tampon défini par l\'utilisateur',
  6754. safetyMarginHintDays: 'Tampon ajouté par-dessus le stock de sécurité statistique.{{approx}}',
  6755. safetyMarginHintDaysApprox: ' ≈ {{g}}g au taux actuel.',
  6756. safetyMarginHintG: 'Tampon de poids fixe ajouté par-dessus le stock de sécurité statistique.{{approx}}',
  6757. safetyMarginHintGApprox: ' ≈ {{days}}j au taux actuel.',
  6758. individualSpools: 'Bobines individuelles',
  6759. labelWeight: 'Étiquette',
  6760. spoolCount_one: '{{count}} bobine',
  6761. spoolCount_other: '{{count}} bobines',
  6762. // Alerts
  6763. stockBreakRisk: 'Risque de rupture de stock',
  6764. stockBreakBefore: 'Rupture de stock avant réapprovisionnement',
  6765. stockBreakDetail: '{{days}}j restants, délai {{lt}}j.',
  6766. reorderNow: 'Réapprovisionner maintenant',
  6767. reorderTriggerPassed: 'La date de déclenchement {{date}} est passée.',
  6768. // Shopping list
  6769. shoppingList: 'Liste d\'achats',
  6770. shoppingListItems_one: '({{count}} article)',
  6771. shoppingListItems_other: '({{count}} articles)',
  6772. shoppingListEmpty: 'La liste d\'achats est vide. Cliquez sur l\'icône panier d\'une ligne pour ajouter des articles.',
  6773. addToCart: 'Ajouter à la liste d\'achats',
  6774. alertsSnoozed: 'Désactiver les alertes pour ce SKU',
  6775. alertsEnabled: 'Activer les alertes pour ce SKU',
  6776. addedToCart: 'Ajouté à la liste de courses',
  6777. failedAddItem: 'Impossible d\'ajouter l\'article',
  6778. listView: 'Liste',
  6779. logisticsView: 'Logistique',
  6780. qty: 'Qté',
  6781. weight: 'Poids',
  6782. leadTime: 'Délai',
  6783. expectedRestock: 'Réapprovisionnement prévu',
  6784. status: 'Statut',
  6785. note: 'Note',
  6786. pending: 'En attente',
  6787. purchased: 'Commandé',
  6788. received: 'Reçu',
  6789. markPurchased: 'Marquer comme commandé',
  6790. markReceived: 'Marquer comme reçu — ajoute les bobines au stock',
  6791. resetToPending: 'Remettre en attente',
  6792. remove: 'Supprimer',
  6793. clearAll: 'Tout effacer',
  6794. downloadCsv: 'CSV',
  6795. // Add to cart modal
  6796. addToCartTitle: 'Ajouter à la liste de courses',
  6797. byQuantity: 'Par quantité',
  6798. byDuration: 'Par durée',
  6799. numberOfSpools: 'Nombre de bobines',
  6800. lastHowManyDays: 'Combien de jours doit-il durer ?',
  6801. noUsageQty: 'Pas de données d\'utilisation — quantité définie à 1.',
  6802. noteOptional: 'Note (optionnel)',
  6803. notePlaceholder: 'ex. pour le projet X, urgent…',
  6804. addNSpools_one: 'Ajouter {{count}} bobine',
  6805. addNSpools_other: 'Ajouter {{count}} bobines',
  6806. // Cart logistics
  6807. onArrival: 'À la livraison',
  6808. stockBreakIn: 'Rupture de stock dans {{days}}j.',
  6809. stockRunsOutBefore: 'Le stock s\'épuise avant la fin du délai de {{lt}}j.',
  6810. atRate: 'À {{rate}}g/jour, vous avez besoin de',
  6811. moreSpools_one: '{{count}} bobine supplémentaire',
  6812. moreSpools_other: '{{count}} bobines supplémentaires',
  6813. bridgeGap: 'pour combler l\'écart.',
  6814. // Permissions
  6815. noReadAccess: 'Vous n\'avez pas la permission de consulter les prévisions de stock.',
  6816. noWriteAccess: 'Vous n\'avez pas la permission de modifier les paramètres de prévision.',
  6817. },
  6818. };