fr.ts 221 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310
  1. export default {
  2. // Navigation
  3. nav: {
  4. printers: 'Imprimantes',
  5. archives: 'Archives',
  6. queue: 'File d\'attente',
  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. smartSwitches: 'Interrupteurs intelligents',
  28. logout: 'Déconnexion',
  29. },
  30. // Common
  31. common: {
  32. save: 'Enregistrer',
  33. saving: 'Enregistrement...',
  34. cancel: 'Annuler',
  35. delete: 'Supprimer',
  36. edit: 'Modifier',
  37. add: 'Ajouter',
  38. close: 'Fermer',
  39. confirm: 'Confirmer',
  40. loading: 'Chargement...',
  41. error: 'Erreur',
  42. success: 'Succès',
  43. warning: 'Avertissement',
  44. enabled: 'Activé',
  45. disabled: 'Désactivé',
  46. yes: 'Oui',
  47. no: 'Non',
  48. on: 'On',
  49. off: 'Off',
  50. all: 'Tous',
  51. none: 'Aucun',
  52. search: 'Rechercher',
  53. filter: 'Filtrer',
  54. sort: 'Trier',
  55. refresh: 'Actualiser',
  56. download: 'Télécharger',
  57. upload: 'Téléverser',
  58. uploading: 'Téléversement...',
  59. uploadFailed: 'Échec du téléversement',
  60. actions: 'Actions',
  61. status: 'Statut',
  62. name: 'Nom',
  63. description: 'Description',
  64. date: 'Date',
  65. time: 'Heure',
  66. hours: 'heures',
  67. minutes: 'minutes',
  68. seconds: 'secondes',
  69. days: 'jours',
  70. enable: 'Activer',
  71. disable: 'Désactiver',
  72. permissions: 'Autorisations',
  73. noPrinters: 'Aucune imprimante configurée',
  74. noData: 'Aucune donnée disponible',
  75. linkNotFound: 'Lien non trouvé',
  76. required: 'Requis',
  77. optional: 'Optionnel',
  78. dismiss: 'Ignorer',
  79. apply: 'Appliquer',
  80. reset: 'Réinitialiser',
  81. export: 'Exporter',
  82. import: 'Importer',
  83. clear: 'Effacer',
  84. selectAll: 'Tout sélectionner',
  85. deselectAll: 'Tout désélectionner',
  86. noChange: '— Aucun changement —',
  87. unchanged: 'Inchangé',
  88. unassigned: 'Non assigné',
  89. unknown: 'Inconnu',
  90. unknownError: 'Erreur inconnue',
  91. today: 'Aujourd\'hui',
  92. tomorrow: 'Demain',
  93. asap: 'Dès que possible',
  94. overdue: 'En retard',
  95. now: 'Maintenant',
  96. collapse: 'Réduire',
  97. expand: 'Développer',
  98. viewArchive: 'Voir l\'archive',
  99. viewInFileManager: 'Voir dans le gestionnaire de fichiers',
  100. addedBy: 'Ajouté par {{username}}',
  101. prints: 'impressions',
  102. more: '+{{count}} de plus',
  103. ascending: 'Croissant',
  104. descending: 'Décroissant',
  105. back: 'Retour',
  106. copy: 'Copier',
  107. copied: 'Copié !',
  108. printer: 'Imprimante',
  109. remove: 'Retirer',
  110. type: 'Type',
  111. print: 'Imprimer',
  112. rename: 'Renommer',
  113. move: 'Déplacer',
  114. create: 'Créer',
  115. duplicate: 'Dupliquer',
  116. left: 'Gauche',
  117. right: 'Droite',
  118. },
  119. // Printers page
  120. printers: {
  121. title: 'Imprimantes',
  122. addPrinter: 'Ajouter une imprimante',
  123. editPrinter: 'Modifier l\'imprimante',
  124. deletePrinter: 'Supprimer l\'imprimante',
  125. printerName: 'Nom de l\'imprimante',
  126. serialNumber: 'Numéro de série',
  127. ipAddress: 'Adresse IP / Nom d\'hôte',
  128. accessCode: 'Code d\'accès',
  129. model: 'Modèle',
  130. nozzleCount: 'Nombre de buses',
  131. autoArchive: 'Auto-archivage',
  132. status: {
  133. available: 'Disponible',
  134. idle: 'Inactif',
  135. printing: 'Impression en cours',
  136. paused: 'En pause',
  137. offline: 'Hors ligne',
  138. problem: 'Problème',
  139. error: 'Erreur',
  140. finished: 'Terminé',
  141. unknown: 'Inconnu',
  142. },
  143. temperatures: {
  144. nozzle: 'Buse',
  145. bed: 'Plateau',
  146. chamber: 'Chambre',
  147. },
  148. progress: '{{percent}}% terminé',
  149. timeRemaining: '{{time}} restant',
  150. deleteConfirm: 'Êtes-vous sûr de vouloir supprimer "{{name}}" ?',
  151. maintenanceOk: 'Maintenance OK',
  152. maintenanceWarning: '{{count}} avertissement',
  153. maintenanceWarning_plural: '{{count}} avertissements',
  154. maintenanceDue: '{{count}} échéance',
  155. maintenanceDue_plural: '{{count}} échéances',
  156. // Sort options
  157. sort: {
  158. name: 'Nom',
  159. status: 'Statut',
  160. model: 'Modèle',
  161. location: 'Emplacement',
  162. ascending: 'Tri croissant',
  163. descending: 'Tri décroissant',
  164. },
  165. // Card size
  166. cardSize: {
  167. small: 'Petites cartes',
  168. medium: 'Cartes moyennes',
  169. large: 'Grandes cartes',
  170. extraLarge: 'Très grandes cartes',
  171. },
  172. // Controls
  173. hideOffline: 'Masquer hors ligne',
  174. nextAvailable: 'Prochaine disponible',
  175. powerOn: 'Allumer',
  176. offlinePrintersWithPlugs: 'Imprimantes hors ligne avec prises connectées',
  177. noPrintersConfigured: 'Aucune imprimante configurée pour le moment',
  178. search: 'Rechercher des imprimantes...',
  179. noSearchResults: 'Aucune imprimante ne correspond à votre recherche ou à vos filtres',
  180. filter: {
  181. allStatuses: 'Tous les statuts',
  182. allLocations: 'Tous les emplacements',
  183. },
  184. // Printer card
  185. readyToPrint: 'Prête à imprimer',
  186. external: 'Externe',
  187. extL: 'Ext-L',
  188. extR: 'Ext-R',
  189. deleteArchives: 'Supprimer les archives d\'impression',
  190. noLabel: 'Pas d\'étiquette',
  191. printPreview: 'Aperçu avant impression',
  192. width: 'Largeur',
  193. height: 'Hauteur',
  194. noObjectsFound: 'Aucun objet trouvé',
  195. objectsLoadedOnPrintStart: 'Les objets sont chargés au début de l\'impression',
  196. willBeSkipped: 'Sera sauté',
  197. name: 'Nom',
  198. serialCannotBeChanged: 'Le numéro de série ne peut pas être modifié',
  199. locationHelp: 'Utilisé pour grouper les imprimantes et filtrer la file d\'attente',
  200. // WiFi signal strength
  201. wifiSignal: {
  202. veryWeak: 'Très faible',
  203. weak: 'Faible',
  204. fair: 'Moyen',
  205. good: 'Bon',
  206. excellent: 'Excellent',
  207. },
  208. // Maintenance
  209. maintenanceUpToDate: 'Maintenance à jour - Cliquez pour voir',
  210. // Chamber light
  211. chamberLightOn: 'Allumer la lumière de la chambre',
  212. chamberLightOff: 'Éteindre la lumière de la chambre',
  213. // Files
  214. files: 'Fichiers',
  215. browseFiles: 'Parcourir les fichiers de l\'imprimante',
  216. // Smart plug
  217. autoOffAfterPrint: 'Extinction auto après impression',
  218. autoOffExecuted: 'Extinction auto exécutée - rallumez pour réinitialiser',
  219. // HMS errors
  220. hmsErrors: 'Erreurs HMS',
  221. viewHmsErrors: 'Voir {{count}} erreur(s) HMS',
  222. // Actions
  223. resume: 'Reprendre',
  224. pause: 'Pause',
  225. stop: 'Arrêter',
  226. camera: 'Caméra',
  227. skipObject: 'Sauter l\'objet',
  228. reconnect: 'Reconnecter',
  229. forceRefresh: 'Forcer l\'actualisation',
  230. forceRefreshSuccess: 'Actualisation demandée',
  231. mqttDebug: 'Débogage MQTT',
  232. printerInformation: 'Informations imprimante',
  233. copyToClipboard: 'Copier',
  234. copied: 'Copié !',
  235. state: 'État',
  236. wifiSignalLabel: 'Signal WiFi',
  237. developerMode: 'Mode développeur',
  238. enabled: 'Activé',
  239. disabled: 'Désactivé',
  240. addedOn: 'Ajoutée le',
  241. sdCard: 'Carte SD',
  242. inserted: 'Insérée',
  243. notInserted: 'Non insérée',
  244. totalPrintHours: 'Heures d\'impression',
  245. activeNozzle: 'Active : buse {{nozzle}}',
  246. nozzleRack: 'Rack à buses',
  247. nozzleDocked: 'Rangée',
  248. nozzleMounted: 'Montée',
  249. nozzleActive: 'Active',
  250. nozzleIdle: 'Inactive',
  251. nozzleDiameter: 'Diamètre',
  252. nozzleType: 'Type',
  253. nozzleStatus: 'Statut',
  254. nozzleFilament: 'Filament',
  255. nozzleWear: 'Usure',
  256. nozzleMaxTemp: 'Temp Max',
  257. nozzleSerial: 'Série',
  258. nozzleHardenedSteel: 'Acier Trempé',
  259. nozzleStainlessSteel: 'Acier Inoxydable',
  260. nozzleTungstenCarbide: 'Carbure de Tungstène',
  261. nozzleFlow: 'Débit',
  262. nozzleHighFlow: 'Haut débit',
  263. nozzleStandardFlow: 'Standard',
  264. // Firmware
  265. firmwareUpdate: 'Mise à jour Firmware',
  266. firmwareInstructions: 'Sur l\'écran de l\'imprimante, allez dans',
  267. firmwareNav: 'Naviguez vers',
  268. settings: 'Paramètres',
  269. firmware: 'Firmware',
  270. // Discovery
  271. discoverPrinters: 'Découvrir les imprimantes',
  272. searching: 'Recherche...',
  273. manualEntry: 'Saisie manuelle',
  274. addFromCloud: 'Ajouter depuis le Cloud',
  275. // Toast messages
  276. toast: {
  277. printerDeleted: 'Imprimante supprimée',
  278. missingSpoolAssignment: 'Impression démarrée sur {{printer}}. Attribution de bobine manquante pour : {{slots}}',
  279. printerAdded: 'Imprimante ajoutée',
  280. printerUpdated: 'Imprimante mise à jour',
  281. failedToDelete: 'Échec de la suppression',
  282. failedToAdd: 'Échec de l\'ajout',
  283. failedToUpdate: 'Échec de la mise à jour',
  284. commandSent: 'Commande envoyée',
  285. failedToSendCommand: 'Échec de l\'envoi de la commande',
  286. turnedOn: '{{name}} allumée',
  287. failedToPowerOn: 'Échec de l\'allumage de {{name}}',
  288. scriptTriggered: 'Script déclenché',
  289. printStopped: 'Impression arrêtée',
  290. printPaused: 'Impression en pause',
  291. printResumed: 'Impression reprise',
  292. referenceDeleted: 'Référence supprimée',
  293. detectionAreaSaved: 'Zone de détection enregistrée',
  294. failedToRunScript: 'Échec du script',
  295. failedToStopPrint: 'Échec de l\'arrêt',
  296. failedToPausePrint: 'Échec de la mise en pause',
  297. failedToResumePrint: 'Échec de la reprise',
  298. failedToControlChamberLight: 'Échec du contrôle de la lumière',
  299. failedToSetSpeed: 'Échec du réglage de la vitesse',
  300. failedToUpdateSetting: 'Échec de mise à jour du paramètre',
  301. failedToSkipObjects: 'Échec du saut d\'objets',
  302. failedToRereadRfid: 'Échec lecture RFID',
  303. failedToCheckPlate: 'Échec vérification plateau',
  304. failedToUpdateLabel: 'Échec mise à jour étiquette',
  305. failedToDeleteReference: 'Échec suppression référence',
  306. failedToSaveDetectionArea: 'Échec enregistrement zone',
  307. plateCheckEnabled: 'Vérification plateau activée',
  308. plateCheckDisabled: 'Vérification plateau désactivée',
  309. calibrationSaved: 'Calibration enregistrée !',
  310. calibrationFailed: 'Échec de la calibration',
  311. rfidRereadInitiated: 'Lecture RFID initiée',
  312. },
  313. // Connection status
  314. connection: {
  315. connected: 'Connecté',
  316. offline: 'Hors ligne',
  317. },
  318. plateStatus: {
  319. markCleared: 'Marquer le plateau comme dégagé',
  320. cleared: 'Plateau dégagé',
  321. notCleared: 'Plateau non dégagé',
  322. inUse: 'Plateau en cours d\'utilisation',
  323. },
  324. // Queue info
  325. queue: {
  326. inQueue: '{{count}} impression en file',
  327. inQueue_plural: '{{count}} impressions en file',
  328. },
  329. // Controls section
  330. controls: 'Contrôles',
  331. // RFID
  332. rfid: {
  333. reread: 'Relire RFID',
  334. },
  335. bedJog: {
  336. title: 'Déplacer le plateau',
  337. bed: 'Plateau',
  338. step: 'Pas (mm)',
  339. up: 'Monter le plateau',
  340. down: 'Descendre le plateau',
  341. disabledWhilePrinting: 'Désactivé pendant l\'impression',
  342. notHomedTitle: 'Imprimante non référencée',
  343. 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.',
  344. homeZ: 'Référence automatique',
  345. moveAnyway: 'Déplacer quand même',
  346. homingStarted: 'Référencement automatique en cours…',
  347. },
  348. // Permissions
  349. permission: {
  350. noAdd: 'Pas d\'autorisation pour ajouter',
  351. noEdit: 'Pas d\'autorisation pour modifier',
  352. noDelete: 'Pas d\'autorisation pour supprimer',
  353. noControl: 'Pas d\'autorisation pour contrôler',
  354. noFiles: 'Pas d\'autorisation pour les fichiers',
  355. noAmsRfid: 'Pas d\'autorisation pour le RFID',
  356. noSmartPlugControl: 'Pas d\'autorisation pour les prises',
  357. noCamera: 'Pas d\'autorisation pour les caméras',
  358. },
  359. // Add/Edit modal
  360. modal: {
  361. addTitle: 'Ajouter une imprimante',
  362. editTitle: 'Modifier l\'imprimante',
  363. myPrinter: 'Mon imprimante',
  364. selectModel: 'Choisir un modèle...',
  365. locationGroup: 'Emplacement / Groupe (optionnel)',
  366. locationPlaceholder: 'ex: Atelier, Bureau',
  367. autoArchiveLabel: 'Auto-archiver les impressions terminées',
  368. fromPrinterSettings: 'Depuis les paramètres imprimante',
  369. modelOptional: 'Modèle (optionnel)',
  370. saveChanges: 'Enregistrer les modifications',
  371. },
  372. // Skip objects
  373. skipObjects: {
  374. tooltip: 'Sauter des objets',
  375. onlyWhilePrinting: 'Sauter (uniquement pendant l\'impression)',
  376. requiresMultiple: 'Sauter (nécessite 2+ objets)',
  377. title: 'Sauter des objets',
  378. matchIdsInfo: 'Faites correspondre les IDs avec l\'écran de l\'imprimante',
  379. printerShowsIds: 'L\'écran affiche les IDs des objets sur le plateau',
  380. skipSelected: 'Sauter la sélection',
  381. skipping: 'Saut en cours...',
  382. noObjectsSelected: 'Aucun objet sélectionné',
  383. selectObjectsToSkip: 'Sélectionnez les objets à ignorer',
  384. skipped: 'sauté',
  385. objectsSkipped: 'Objets sautés',
  386. activeCount: '{{count}} actifs',
  387. waitForLayer: 'Attendez la couche 2 pour sauter des objets (actuelle : {{layer}})',
  388. skip: 'Sauter',
  389. confirmTitle: 'Sauter l\'objet ?',
  390. confirmMessage: 'Voulez-vous vraiment sauter "{{name}}" ? Cette action est irréversible.',
  391. },
  392. // Confirm modals
  393. confirm: {
  394. deleteTitle: 'Supprimer l\'imprimante',
  395. deleteMessage: 'Supprimer "{{name}}" ? Cela retirera tous les paramètres de connexion.',
  396. deleteArchivesNote: 'Tout l\'historique sera définitivement supprimé.',
  397. keepArchivesNote: 'L\'historique sera conservé mais plus associé à cette imprimante.',
  398. stopTitle: 'Arrêter l\'impression',
  399. stopMessage: 'Arrêter l\'impression sur "{{name}}" ?',
  400. stopButton: 'Arrêter',
  401. pauseTitle: 'Mettre en pause',
  402. pauseMessage: 'Mettre en pause l\'impression sur "{{name}}" ?',
  403. pauseButton: 'Pause',
  404. resumeTitle: 'Reprendre l\'impression',
  405. resumeMessage: 'Reprendre l\'impression sur "{{name}}" ?',
  406. resumeButton: 'Reprendre',
  407. powerOnTitle: 'Allumer l\'imprimante',
  408. powerOnMessage: 'Allumer "{{name}}" ?',
  409. powerOnButton: 'Allumer',
  410. powerOffTitle: 'Éteindre l\'imprimante',
  411. powerOffMessage: 'Éteindre "{{name}}" ?',
  412. powerOffWarning: 'ATTENTION : "{{name}}" imprime ! L\'éteindre maintenant peut endommager l\'imprimante.',
  413. powerOffButton: 'Éteindre',
  414. },
  415. // Bulk actions
  416. bulk: {
  417. select: 'Sélectionner',
  418. selectAll: 'Tout sélectionner',
  419. selectByLocation: 'Sélectionner par emplacement',
  420. selected: '{{count}} sélectionné(s)',
  421. actions: {
  422. stop: 'Arrêter',
  423. pause: 'Pause',
  424. resume: 'Reprendre',
  425. clearPlate: 'Vider le plateau',
  426. clearHMS: 'Effacer les notifications',
  427. },
  428. confirm: {
  429. stopTitle: 'Arrêter {{count}} impressions',
  430. stopMessage: 'Cela annulera les impressions actives sur {{count}} imprimante(s). Cette action est irréversible.',
  431. stopButton: 'Tout arrêter',
  432. pauseTitle: 'Mettre en pause {{count}} impressions',
  433. pauseMessage: 'Cela mettra en pause les impressions actives sur {{count}} imprimante(s).',
  434. pauseButton: 'Tout mettre en pause',
  435. clearPlateTitle: 'Vider {{count}} plateaux',
  436. clearPlateMessage: 'Cela videra le plateau sur {{count}} imprimante(s) et pourrait lancer les travaux en file d\'attente.',
  437. clearPlateButton: 'Tout vider',
  438. },
  439. success: '{{action}} terminé sur {{count}} imprimante(s)',
  440. partial: '{{succeeded}} réussi(s), {{failed}} échoué(s)',
  441. noneApplicable: 'Aucune imprimante sélectionnée n\'est dans le bon état pour cette action',
  442. selectByState: 'Sélectionner par état',
  443. },
  444. // Discovery
  445. discovery: {
  446. title: 'Découvrir les imprimantes',
  447. searching: 'Recherche...',
  448. scanning: 'Scan en cours...',
  449. scanProgress: 'Scan... {{scanned}}/{{total}}',
  450. foundPrinters: '{{count}} imprimante(s) trouvée(s)',
  451. noPrintersFound: 'Aucune imprimante trouvée',
  452. noPrintersFoundSubnet: 'Aucune imprimante dans ce sous-réseau.',
  453. noPrintersFoundNetwork: 'Aucune imprimante sur le réseau.',
  454. allConfigured: 'Toutes les imprimantes trouvées sont déjà configurées.',
  455. alreadyAdded: 'Déjà ajoutée',
  456. select: 'Sélectionner',
  457. manualEntry: 'Saisie manuelle',
  458. addFromCloud: 'Ajouter depuis le Cloud',
  459. subnetToScan: 'Sous-réseau à scanner',
  460. dockerNote: 'Docker détecté. Entrez le sous-réseau en notation CIDR. Nécessite network_mode: host.',
  461. scanSubnet: 'Scanner le sous-réseau',
  462. discoverNetwork: 'Découvrir sur le réseau',
  463. scanningSubnet: 'Scan du sous-réseau pour imprimantes Bambu...',
  464. scanningNetwork: 'Scan du réseau...',
  465. serialRequired: 'Série requis',
  466. unknown: 'Inconnu',
  467. failedToStart: 'Échec du démarrage de la découverte',
  468. },
  469. // AMS Drying
  470. drying: {
  471. start: 'Démarrer le séchage',
  472. stop: 'Arrêter le séchage',
  473. temperature: 'Température',
  474. duration: 'Durée',
  475. hours: 'heures',
  476. timeRemaining: '{{time}} restant',
  477. active: 'Séchage',
  478. notSupported: 'Séchage non pris en charge',
  479. powerRequired: 'Brancher l\'adaptateur secteur AMS pour activer le séchage',
  480. startingDrying: 'Démarrage du séchage...',
  481. stoppingDrying: 'Arrêt du séchage...',
  482. rotateTray: 'Tourner la bobine pendant le séchage',
  483. },
  484. // Filaments section
  485. filaments: 'Filaments',
  486. // Camera
  487. openCameraOverlay: 'Ouvrir la caméra en superposition',
  488. openCameraWindow: 'Ouvrir la caméra dans une fenêtre',
  489. // Firmware
  490. firmwareUpdateAvailable: 'Mise à jour firmware : {{current}} → {{latest}}',
  491. firmwareUpToDate: 'Firmware {{version}} — À jour',
  492. firmwareUpdateButton: 'Mettre à jour',
  493. // Plate detection
  494. plateDetection: {
  495. noPermission: 'Pas d\'autorisation de modification',
  496. enabledClick: 'Vérification activée - Cliquez pour désactiver',
  497. disabledClick: 'Vérification désactivée - Cliquez pour activer',
  498. manageCalibration: 'Gérer la calibration de détection',
  499. calibrationRequired: 'Calibration requise',
  500. calibrationInstructions: 'Videz le plateau, puis cliquez sur Calibrer.',
  501. calibrationDescription: 'Capture une image de référence du plateau vide.',
  502. calibrationTip: 'Conseil : Stockez jusqu\'à 5 références. Le système utilise la meilleure correspondance.',
  503. plateEmpty: 'Le plateau semble vide',
  504. objectsDetected: 'Objets détectés sur le plateau',
  505. confidence: 'Confiance',
  506. difference: 'Différence',
  507. analysisPreview: 'Aperçu de l\'analyse :',
  508. analysisLegend: 'Cadre vert = zone, Rouge = différences',
  509. savedReferences: 'Références ({{count}}/{{max}})',
  510. deleteReference: 'Supprimer la référence',
  511. labelPlaceholder: 'Étiquette...',
  512. clickToEdit: '{{label}} - Modifier',
  513. clickToAddLabel: 'Ajouter une étiquette',
  514. },
  515. // Speed
  516. speed: {
  517. title: 'Vitesse d\'impression',
  518. silent: 'Silencieux (50%)',
  519. standard: 'Standard (100%)',
  520. sport: 'Sport (124%)',
  521. ludicrous: 'Ludicrous (166%)',
  522. },
  523. airduct: {
  524. title: 'Mode conduit d\'air',
  525. cooling: 'Refroidissement',
  526. heating: 'Chauffage',
  527. },
  528. noSdCard: 'Pas de SD',
  529. door: {
  530. open: 'Ouverte',
  531. closed: 'Fermée',
  532. },
  533. // Fans
  534. fans: {
  535. partCooling: 'Ventilateur pièce',
  536. auxiliary: 'Ventilateur auxiliaire',
  537. chamber: 'Ventilateur chambre',
  538. },
  539. // HMS errors
  540. clickToViewHmsErrors: 'Cliquez pour voir les erreurs HMS',
  541. estimatedCompletion: 'Fin estimée',
  542. plateNumber: 'Plaque {{number}}',
  543. slotOptions: 'Options du slot',
  544. // AMS hover popup
  545. amsPopup: {
  546. friendlyName: 'Nom AMS',
  547. friendlyNamePlaceholder: 'ex. Nom convivial AMS',
  548. serialNumber: 'Numéro de série',
  549. firmwareVersion: 'Firmware',
  550. save: 'Enregistrer',
  551. clear: 'Effacer',
  552. noEditPermission: 'Vous n\'avez pas la permission de renommer les unités AMS',
  553. },
  554. // Firmware modal
  555. firmwareModal: {
  556. title: 'Mise à jour Firmware',
  557. titleUpToDate: 'Infos Firmware',
  558. currentVersion: 'Actuelle :',
  559. latestVersion: 'Dernière :',
  560. releaseNotes: 'Notes de version',
  561. checkingPrereqs: 'Vérification des prérequis...',
  562. sdCardReady: 'Carte SD prête. Cliquez pour téléverser.',
  563. uploadedSuccess: 'Firmware téléversé !',
  564. applyInstructions: 'Pour appliquer sur l\'imprimante :',
  565. step1: 'Sur l\'écran, allez dans Paramètres',
  566. step2: 'Allez dans Firmware',
  567. step3: 'Sélectionnez "Mettre à jour depuis carte SD"',
  568. step4: 'Prévoyez 10-20 minutes',
  569. done: 'Terminé',
  570. starting: 'Démarrage...',
  571. uploadFirmware: 'Téléverser le Firmware',
  572. uploadFailed: 'Échec du téléversement : {{error}}',
  573. uploadedToast: 'Firmware téléversé ! Lancez la mise à jour sur l\'écran.',
  574. },
  575. accessCodePlaceholder: 'Laissez vide pour garder l\'actuel',
  576. // ROI editor
  577. roi: {
  578. title: 'Zone de détection (ROI)',
  579. xStart: 'Début X',
  580. yStart: 'Début Y',
  581. width: 'Largeur',
  582. height: 'Hauteur',
  583. instruction: 'Ajustez le cadre vert pour cibler le plateau.',
  584. },
  585. developerModeWarning: 'Le mode développeur LAN n\'est pas activé sur : {{names}}. Certaines fonctionnalités peuvent ne pas fonctionner.',
  586. howToEnable: 'Comment activer',
  587. incompatibleFile: 'Ce fichier a été tranché pour {{slicedFor}}, mais cette imprimante est une {{printerModel}}',
  588. dropNotPrintable: 'Seuls les fichiers .gcode et .gcode.3mf peuvent être imprimés',
  589. dropToPrint: 'Déposer pour imprimer',
  590. cannotPrint: 'Imprimante occupée',
  591. },
  592. // Archives page
  593. archives: {
  594. title: 'Archives d\'impression',
  595. searchPlaceholder: 'Chercher dans les archives...',
  596. filterByPrinter: 'Par imprimante',
  597. filterByStatus: 'Par statut',
  598. sortBy: 'Trier par',
  599. sortNewest: 'Plus récent',
  600. sortOldest: 'Plus ancien',
  601. sortName: 'Nom',
  602. sortDuration: 'Durée',
  603. sortLargest: 'Plus volumineux',
  604. sortSmallest: 'Plus léger',
  605. sortSize: 'Taille',
  606. noArchives: 'Aucune archive trouvée',
  607. noArchivesSearch: 'Aucune archive ne correspond',
  608. originalPrintNotVisible: 'Impression d\'origine non visible - essayez d\'effacer les filtres',
  609. noArchivesYet: 'Pas encore d\'archive',
  610. prints: 'impressions',
  611. pagination: {
  612. showing: 'Affichage',
  613. to: 'à',
  614. of: 'sur',
  615. show: 'Afficher',
  616. page: 'Page',
  617. all: 'Tout',
  618. },
  619. loadingArchives: 'Chargement...',
  620. releaseToUpload: 'Relâcher pour téléverser',
  621. showAll: 'Tout afficher',
  622. showFavoritesOnly: 'Favoris uniquement',
  623. gridView: 'Grille',
  624. listView: 'Liste',
  625. calendarView: 'Calendrier',
  626. logView: 'Journal d\'impression',
  627. manageTags: 'Gérer les tags',
  628. showFailedPrints: 'Afficher les échecs',
  629. hideFailedPrints: 'Masquer les échecs',
  630. hideDuplicates: 'Masquer les doublons',
  631. viewOriginalPrint: 'Cliquez pour afficher l\'impression originale (#{{id}})',
  632. printTime: 'Temps d\'impression',
  633. filamentUsed: 'Filament utilisé',
  634. cost: 'Coût',
  635. reprint: 'Réimprimer',
  636. preview: 'Aperçu',
  637. deleteArchive: 'Supprimer l\'archive',
  638. deleteConfirm: 'Supprimer cette archive ?',
  639. favorite: 'Favori',
  640. unfavorite: 'Retirer des favoris',
  641. viewDetails: 'Détails',
  642. status: {
  643. completed: 'Réussi',
  644. failed: 'Échoué',
  645. stopped: 'Arrêté',
  646. },
  647. toast: {
  648. source3mfAttached: 'Source 3MF attachée : {{filename}}',
  649. failedUploadSource3mf: 'Échec téléversement 3MF',
  650. source3mfRemoved: 'Source 3MF retirée',
  651. failedRemoveSource3mf: 'Échec retrait 3MF',
  652. f3dAttached: 'F3D attaché : {{filename}}',
  653. failedUploadF3d: 'Échec téléversement F3D',
  654. f3dRemoved: 'F3D retiré',
  655. failedRemoveF3d: 'Échec retrait F3D',
  656. timelapseAttached: 'Timelapse attaché : {{filename}}',
  657. timelapseAlreadyAttached: 'Timelapse déjà présent',
  658. noMatchingTimelapse: 'Pas de timelapse correspondant',
  659. failedScanTimelapse: 'Échec scan timelapse',
  660. failedAttachTimelapse: 'Échec attache timelapse',
  661. timelapseRemoved: 'Timelapse supprimé',
  662. failedRemoveTimelapse: 'Échec de la suppression du timelapse',
  663. timelapseUploaded: 'Timelapse importé : {{filename}}',
  664. failedUploadTimelapse: 'Échec de l\'importation du timelapse',
  665. archiveDeleted: 'Archive supprimée',
  666. failedDeleteArchive: 'Échec suppression',
  667. addedToFavorites: 'Ajouté aux favoris',
  668. removedFromFavorites: 'Retiré des favoris',
  669. projectUpdated: 'Projet mis à jour',
  670. failedUpdateProject: 'Échec mise à jour projet',
  671. linkCopied: 'Lien copié',
  672. failedCopyLink: 'Échec copie lien',
  673. photoDeleted: 'Photo supprimée',
  674. failedDeletePhoto: 'Échec suppression photo',
  675. failedDeleteArchives: 'Échec suppression archives',
  676. failedUpdateFavorites: 'Échec mise à jour favoris',
  677. exportDownloaded: 'Export téléchargé',
  678. exportFailed: 'Échec export',
  679. },
  680. menu: {
  681. print: 'Imprimer',
  682. schedule: 'Planifier',
  683. openInBambuStudio: 'Ouvrir dans le Slicer',
  684. slice: 'Découper',
  685. externalLink: 'Lien externe',
  686. viewOnMakerWorld: 'Voir sur MakerWorld',
  687. preview3d: 'Aperçu 3D',
  688. viewTimelapse: 'Voir le Timelapse',
  689. scanForTimelapse: 'Scanner pour Timelapse',
  690. uploadTimelapse: 'Importer un timelapse',
  691. removeTimelapse: 'Supprimer le timelapse',
  692. downloadSource3mf: 'Télécharger Source 3MF',
  693. uploadSource3mf: 'Téléverser Source 3MF',
  694. replaceSource3mf: 'Remplacer Source 3MF',
  695. removeSource3mf: 'Retirer Source 3MF',
  696. uploadF3d: 'Téléverser F3D',
  697. replaceF3d: 'Remplacer F3D',
  698. downloadF3d: 'Télécharger F3D',
  699. removeF3d: 'Retirer F3D',
  700. download: 'Télécharger',
  701. copyDownloadLink: 'Copier lien de téléchargement',
  702. qrCode: 'Code QR',
  703. viewPhotos: 'Voir les photos',
  704. viewPhotosCount: 'Voir les photos ({{count}})',
  705. projectPage: 'Page du Projet',
  706. addToFavorites: 'Ajouter aux favoris',
  707. removeFromFavorites: 'Retirer des favoris',
  708. edit: 'Modifier',
  709. goToProject: 'Aller au Projet : {{name}}',
  710. addToProject: 'Ajouter au Projet',
  711. removeFromProject: 'Retirer du Projet',
  712. loading: 'Chargement...',
  713. noProjectsAvailable: 'Aucun projet disponible',
  714. select: 'Sélectionner',
  715. deselect: 'Désélectionner',
  716. delete: 'Supprimer',
  717. },
  718. permission: {
  719. noReprint: 'Pas d\'autorisation de réimpression',
  720. noAddToQueue: 'Pas d\'autorisation pour la file',
  721. noUpdateArchives: 'Pas d\'autorisation de mise à jour',
  722. noUploadFiles: 'Pas d\'autorisation de téléversement',
  723. noDownload: 'Pas d\'autorisation de téléchargement',
  724. noCopyLink: 'Pas d\'autorisation de copie lien',
  725. noDelete: 'Pas d\'autorisation de suppression',
  726. noCreate: 'Pas d\'autorisation de création',
  727. },
  728. platePicker: {
  729. title: 'Choisir une plaque à prévisualiser',
  730. hint: 'Cette archive contient plusieurs plaques. Sélectionnez-en une pour l\'ouvrir dans la visionneuse GCode.',
  731. plateLabel: 'Plaque {{index}}',
  732. objectCount: '{{count}} objet',
  733. objectCount_plural: '{{count}} objets',
  734. noGcode: 'Cette archive ne contient pas de G-code généré à prévisualiser. Ouvrez-la d\'abord dans Bambu Studio pour la trancher.',
  735. },
  736. card: {
  737. previousPlate: 'Plateau précédent',
  738. nextPlate: 'Plateau suivant',
  739. plateNumber: 'Plateau {{index}}',
  740. moreOptions: 'Clic droit pour plus d\'options',
  741. addToFavorites: 'Ajouter aux favoris',
  742. removeFromFavorites: 'Retirer des favoris',
  743. cancelled: 'annulé',
  744. failed: 'échoué',
  745. duplicate: 'doublon',
  746. duplicateTitle: 'Ce modèle a déjà été imprimé',
  747. openSource3mf: 'Ouvrir 3MF dans Bambu Studio (clic droit pour plus)',
  748. downloadF3d: 'Télécharger fichier Fusion 360',
  749. viewTimelapse: 'Voir timelapse',
  750. viewPhoto: 'Voir 1 photo',
  751. viewPhotos: 'Voir {{count}} photos',
  752. openFolder: 'Ouvrir le dossier : {{name}}',
  753. slicedFile: 'Fichier découpé - prêt',
  754. sourceFile: 'Fichier source uniquement - pas de mapping AMS',
  755. gcode: 'GCODE',
  756. source: 'SOURCE',
  757. project: 'Projet : {{name}}',
  758. estimated: 'Estimé : {{time}}',
  759. actual: 'Réel : {{time}}',
  760. accuracy: 'Précision : {{percent}}%',
  761. filament: '{{weight}}g',
  762. layer: '{{count}} couche',
  763. layers: '{{count}} couches',
  764. object: '{{count}} objet',
  765. objects: '{{count}} objets',
  766. slicedFor: 'Découpé pour {{model}}',
  767. uploadedBy: 'Téléversé par',
  768. noPermissionReprint: 'Pas d\'autorisation de réimpression',
  769. noFileForReprint: 'Aucun fichier 3MF disponible — le fichier n\'a pas pu être téléchargé depuis l\'imprimante lors de l\'enregistrement',
  770. noPermissionEdit: 'Pas d\'autorisation de modification',
  771. noPermissionDelete: 'Pas d\'autorisation de suppression',
  772. reprint: 'Réimprimer',
  773. schedulePrint: 'Planifier',
  774. schedule: 'Planifier',
  775. openInBambuStudio: 'Ouvrir dans le Slicer',
  776. openInBambuStudioToSlice: 'Ouvrir dans le Slicer pour découper',
  777. slice: 'Découper',
  778. externalLink: 'Lien externe',
  779. makerWorld: 'MakerWorld : {{designer}}',
  780. viewProject: 'Voir projet',
  781. noExternalLink: 'Aucun lien externe',
  782. preview3d: 'Aperçu 3D',
  783. download: 'Télécharger',
  784. edit: 'Modifier',
  785. delete: 'Supprimer',
  786. },
  787. modal: {
  788. deleteArchive: 'Supprimer l\'archive',
  789. deleteConfirm: 'Supprimer "{{name}}" ? Cette action est irréversible.',
  790. deleteButton: 'Supprimer',
  791. removeSource3mf: 'Retirer Source 3MF',
  792. removeSource3mfConfirm: 'Retirer le fichier 3MF de "{{name}}" ?',
  793. removeButton: 'Retirer',
  794. removeF3d: 'Retirer F3D',
  795. removeF3dConfirm: 'Retirer le fichier Fusion 360 de "{{name}}" ?',
  796. removeTimelapse: 'Supprimer le timelapse',
  797. removeTimelapseConfirm: 'Êtes-vous sûr de vouloir supprimer la vidéo timelapse de "{{name}}" ?',
  798. timelapse: '{{name}} - Timelapse',
  799. selectTimelapse: 'Choisir un Timelapse',
  800. selectTimelapseDesc: 'Sélectionnez manuellement le timelapse :',
  801. deleteArchives: 'Supprimer les archives',
  802. deleteArchivesConfirm: 'Supprimer {{count}} archive(s) ?',
  803. deleteCount: 'Supprimer {{count}}',
  804. },
  805. page: {
  806. title: 'Archives',
  807. printsCount: '{{filtered}} sur {{total}} impressions',
  808. dropFilesHere: 'Déposez les fichiers .3mf ici',
  809. releaseToUpload: 'Relâcher pour téléverser',
  810. only3mfSupported: 'Seuls les fichiers .3mf sont supportés',
  811. close: 'Fermer',
  812. selected: '{{count}} sélectionnés',
  813. selectAll: 'Tout sélectionner',
  814. tags: 'Tags',
  815. project: 'Projet',
  816. favorite: 'Favori',
  817. delete: 'Supprimer',
  818. toggledFavorites: 'Favoris mis à jour pour {{count}} archive(s)',
  819. failedUpdateFavorites: 'Échec mise à jour favoris',
  820. archivesDeleted: '{{count}} archive(s) supprimée(s)',
  821. failedDeleteArchives: 'Échec suppression',
  822. photoDeleted: 'Photo supprimée',
  823. failedDeletePhoto: 'Échec suppression photo',
  824. },
  825. list: {
  826. name: 'Nom',
  827. printer: 'Imprimante',
  828. date: 'Date',
  829. size: 'Taille',
  830. actions: 'Actions',
  831. hasTimelapse: 'A un timelapse',
  832. },
  833. log: {
  834. date: 'Date',
  835. printName: 'Nom de l\'impression',
  836. printer: 'Imprimante',
  837. user: 'Utilisateur',
  838. status: 'Statut',
  839. duration: 'Durée',
  840. filament: 'Filament',
  841. allPrinters: 'Toutes les imprimantes',
  842. allUsers: 'Tous les utilisateurs',
  843. allStatuses: 'Tous les statuts',
  844. cancelled: 'Annulé',
  845. skipped: 'Ignoré',
  846. dateFrom: 'Du',
  847. dateTo: 'Au',
  848. noEntries: 'Aucune entrée de journal trouvée',
  849. showing: '{{count}} sur {{total}} entrées',
  850. rowsPerPage: 'Lignes',
  851. page: 'Page',
  852. prev: 'Préc.',
  853. next: 'Suiv.',
  854. clearLog: 'Effacer le journal',
  855. clearLogTitle: 'Effacer le journal d\'impression',
  856. 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 ?',
  857. clearLogButton: 'Tout effacer',
  858. cleared: '{{count}} entrées de journal effacées',
  859. clearFailed: 'Échec de l\'effacement du journal d\'impression',
  860. },
  861. },
  862. // Queue page
  863. queue: {
  864. title: 'File d\'attente',
  865. subtitle: 'Gérez vos travaux d\'impression',
  866. addToQueue: 'Ajouter à la file',
  867. // Print modal
  868. print: 'Imprimer',
  869. reprint: 'Réimprimer',
  870. schedulePrint: 'Planifier',
  871. editQueueItem: 'Modifier l\'élément',
  872. printToPrinters: 'Imprimer sur {{count}} imprimantes',
  873. queueToPrinters: 'Ajouter à la file pour {{count}} imprimantes',
  874. queueSelectedPlates: 'Ajouter {{count}} plaques à la file',
  875. selectAllPlates: 'Sélectionner les {{count}} plaques',
  876. deselectAll: 'Tout désélectionner',
  877. printQueued: 'Impression ajoutée à la file',
  878. itemsQueued: '{{count}} éléments ajoutés à la file',
  879. sending: 'Envoi...',
  880. sendingProgress: 'Envoi {{current}}/{{total}}...',
  881. adding: 'Ajout...',
  882. addingProgress: 'Ajout {{current}}/{{total}}...',
  883. savingProgress: 'Enregistrement {{current}}/{{total}}...',
  884. clearQueue: 'Vider la file',
  885. clearHistory: 'Effacer l\'historique',
  886. emptyQueue: 'La file est vide',
  887. position: 'Position',
  888. scheduledTime: 'Heure prévue',
  889. moveUp: 'Monter',
  890. moveDown: 'Descendre',
  891. startNow: 'Démarrer maintenant',
  892. printingInProgress: 'Impression en cours...',
  893. viewArchive: 'Voir l\'archive',
  894. viewInFileManager: 'Voir dans le gestionnaire',
  895. itemCount: '{{count}} élément',
  896. itemCount_plural: '{{count}} éléments',
  897. dragToReorder: 'Glisser pour réordonner (ASAP uniquement)',
  898. reorderHint: 'La position n\'affecte que les éléments ASAP.',
  899. sjf: {
  900. label: 'SJF',
  901. tooltip: 'Travail le plus court en premier — le planificateur priorise les impressions plus courtes',
  902. },
  903. addedBy: 'Ajouté par {{name}}',
  904. nextInQueue: 'Prochain en file',
  905. clearPlateSuccess: 'Plateau vidé — prêt pour l\'impression suivante',
  906. plateNumber: 'Plateau {{index}}',
  907. // Batch / quantity
  908. quantity: 'Quantité',
  909. quantityHint: 'Crée {{count}} éléments de file d\'attente',
  910. activeBatches: 'Lots actifs',
  911. batchProgress: '{{completed}} sur {{total}} terminés',
  912. cancelBatch: 'Annuler les restants',
  913. batchCancelled: 'Éléments restants du lot annulés',
  914. cancelBatchConfirmTitle: 'Annuler le lot',
  915. cancelBatchConfirmMessage: 'Annuler tous les éléments en attente restants dans ce lot ?',
  916. batch: 'Lot',
  917. // Sections
  918. sections: {
  919. currentlyPrinting: 'En cours',
  920. queued: 'En attente',
  921. history: 'Historique',
  922. },
  923. // Status
  924. status: {
  925. pending: 'En attente',
  926. waiting: 'En attente',
  927. printing: 'Impression',
  928. paused: 'En pause',
  929. completed: 'Terminé',
  930. failed: 'Échoué',
  931. skipped: 'Sauté',
  932. cancelled: 'Annulé',
  933. },
  934. // Summary cards
  935. summary: {
  936. printing: 'Impressions',
  937. queued: 'En attente',
  938. totalTime: 'Temps total estimé',
  939. totalWeight: 'Poids total estimé',
  940. history: 'Historique',
  941. },
  942. // Filters
  943. filter: {
  944. allPrinters: 'Toutes les imprimantes',
  945. unassigned: 'Non assigné',
  946. allStatus: 'Tous les statuts',
  947. allLocations: 'Tous les emplacements',
  948. any: 'Tout',
  949. },
  950. // Sort
  951. sort: {
  952. byPosition: 'Par position',
  953. byName: 'Par nom',
  954. byPrinter: 'Par imprimante',
  955. bySchedule: 'Par planification',
  956. byDate: 'Par date',
  957. ascendingOldest: 'Croissant (plus vieux)',
  958. descendingNewest: 'Décroissant (plus récent)',
  959. },
  960. // Badges
  961. badges: {
  962. staged: 'Préparé',
  963. requiresPrevious: 'Nécessite succès précédent',
  964. autoPowerOff: 'Extinction auto',
  965. gcodeInjection: 'G-code',
  966. },
  967. // Empty state
  968. empty: {
  969. title: 'Aucune impression prévue',
  970. description: 'Planifiez depuis les Archives ou glissez des fichiers ici.',
  971. },
  972. // Time
  973. time: {
  974. asap: 'Dès que possible',
  975. overdue: 'En retard',
  976. now: 'Maintenant',
  977. lessThanMinute: 'Dans moins d\'une minute',
  978. inMinutes: 'Dans {{count}} min',
  979. inHours: 'Dans {{count}} heures',
  980. },
  981. // Actions
  982. actions: {
  983. stopPrint: 'Arrêter',
  984. startPrint: 'Démarrer',
  985. requeue: 'Remettre en file',
  986. },
  987. // Bulk edit
  988. bulkEdit: {
  989. title: 'Modifier {{count}} élément',
  990. title_plural: 'Modifier {{count}} éléments',
  991. description: 'Seuls les changements seront appliqués.',
  992. printer: 'Imprimante',
  993. noChange: '— Aucun changement —',
  994. queueOptions: 'Options de file',
  995. staged: 'Préparé (manuel)',
  996. autoPowerOff: 'Extinction auto après',
  997. requirePrevious: 'Requiert succès précédent',
  998. printOptions: 'Options d\'impression',
  999. bedLevelling: 'Nivellement plateau',
  1000. flowCalibration: 'Calibration débit',
  1001. vibrationCalibration: 'Vibration (Input Shaper)',
  1002. layerInspection: 'Inspection 1ère couche',
  1003. timelapse: 'Timelapse',
  1004. useAms: 'Utiliser AMS',
  1005. applyChanges: 'Appliquer',
  1006. selectAll: 'Tout sélectionner',
  1007. deselectAll: 'Tout désélectionner',
  1008. selected: '{{count}} sélectionnés',
  1009. editSelected: 'Modifier la sélection',
  1010. cancelSelected: 'Annuler la sélection',
  1011. },
  1012. // Confirmations
  1013. confirm: {
  1014. cancelTitle: 'Annuler l\'impression prévue',
  1015. cancelMessage: 'Annuler "{{name}}" ?',
  1016. stopTitle: 'Arrêter l\'impression',
  1017. stopMessage: 'Arrêter "{{name}}" sur l\'imprimante ?',
  1018. removeTitle: 'Retirer de l\'historique',
  1019. removeMessage: 'Retirer "{{name}}" de l\'historique ?',
  1020. clearHistoryTitle: 'Effacer l\'historique',
  1021. clearHistoryMessage: 'Retirer les {{count}} éléments ?',
  1022. cancelButton: 'Annuler l\'impression',
  1023. stopButton: 'Arrêter l\'impression',
  1024. thisPrint: 'cette impression',
  1025. thisItem: 'cet élément',
  1026. },
  1027. // Toast messages
  1028. toast: {
  1029. cancelled: 'Élément annulé',
  1030. cancelFailed: 'Échec annulation',
  1031. removed: 'Élément retiré',
  1032. removeFailed: 'Échec retrait',
  1033. stopped: 'Impression arrêtée',
  1034. stopFailed: 'Échec arrêt',
  1035. released: 'Libéré dans la file',
  1036. startFailed: 'Échec démarrage',
  1037. reorderFailed: 'Échec réorganisation',
  1038. historyCleared: '{{count}} éléments effacés',
  1039. clearHistoryFailed: 'Échec effacement',
  1040. updateFailed: 'Échec mise à jour',
  1041. bulkCancelled: '{{count}} éléments annulés',
  1042. bulkCancelFailed: 'Échec annulation',
  1043. },
  1044. // Timeline view
  1045. timeline: {
  1046. listView: 'Liste',
  1047. timelineView: 'Chronologie',
  1048. unassigned: 'Non attribué',
  1049. noData: 'Aucune impression planifiée pour ce jour',
  1050. allDoneBy: 'Toutes les impressions terminées vers {{time}}',
  1051. staged: 'En attente',
  1052. filterAll: 'Tout afficher',
  1053. filterPrinting: 'En cours',
  1054. filterQueued: 'En file',
  1055. time: {
  1056. anyMoment: 'imminent',
  1057. minutesLeft: '{{minutes}}m restantes',
  1058. hoursLeft: '{{hours}}h restantes',
  1059. hoursMinutesLeft: '{{hours}}h {{minutes}}m restantes',
  1060. },
  1061. day: {
  1062. previous: 'Jour précédent',
  1063. next: 'Jour suivant',
  1064. today: 'Aujourd\'hui',
  1065. },
  1066. },
  1067. // Permissions
  1068. permissions: {
  1069. noStopPrint: 'Pas d\'autorisation d\'arrêt',
  1070. noStartPrint: 'Pas d\'autorisation de démarrage',
  1071. noEdit: 'Pas d\'autorisation de modification',
  1072. noCancel: 'Pas d\'autorisation d\'annulation',
  1073. noRequeue: 'Pas d\'autorisation de remise en file',
  1074. noRemove: 'Pas d\'autorisation de retrait',
  1075. noClearHistory: 'Pas d\'autorisation historique',
  1076. noEditItems: 'Pas d\'autorisation modification groupée',
  1077. noCancelItems: 'Pas d\'autorisation annulation groupée',
  1078. },
  1079. },
  1080. backgroundDispatch: {
  1081. unknownFile: 'Unknown file',
  1082. unknownPrinter: 'Unknown printer',
  1083. startingPrints: 'Starting prints',
  1084. progressSummary: '{{complete}}/{{total}} complete • Dispatched: {{dispatched}} • Processing: {{processing}}',
  1085. expandDetails: 'Expand dispatch details',
  1086. collapseDetails: 'Collapse dispatch details',
  1087. dismissToast: 'Dismiss dispatch toast',
  1088. cancelDispatchJob: 'Cancel dispatch job',
  1089. cancel: 'Cancel',
  1090. cancelling: 'Cancelling…',
  1091. awaitingPrinter: 'En attente de l\'imprimante…',
  1092. status: {
  1093. dispatched: 'Dispatched',
  1094. processing: 'Processing',
  1095. completed: 'Completed',
  1096. failed: 'Failed',
  1097. cancelled: 'Cancelled',
  1098. },
  1099. toast: {
  1100. cancellingUpload: 'Cancelling upload...',
  1101. cancelled: 'Dispatch cancelled',
  1102. cancelFailed: 'Failed to cancel dispatch',
  1103. completeWithFailures: 'Background dispatch complete: {{completed}} succeeded, {{failed}} failed',
  1104. completeSuccess: 'Background dispatch complete: {{completed}} succeeded',
  1105. printStartedRemaining: '{{completed}} impression(s) lancée(s), {{remaining}} en cours d\'envoi...',
  1106. },
  1107. },
  1108. // Statistics page
  1109. stats: {
  1110. title: 'Tableau de bord',
  1111. subtitle: 'Glissez les widgets pour réorganiser. Cliquez sur l\'œil pour masquer.',
  1112. overview: 'Vue d\'ensemble',
  1113. totalPrints: 'Total impressions',
  1114. successRate: 'Taux de succès',
  1115. totalPrintTime: 'Temps total d\'impression',
  1116. printTime: 'Temps d\'impression',
  1117. totalFilament: 'Total filament utilisé',
  1118. filamentUsed: 'Filament utilisé',
  1119. filamentCost: 'Coût filament',
  1120. totalCost: 'Coût total',
  1121. energyUsed: 'Énergie consommée',
  1122. energyCost: 'Coût énergie',
  1123. 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.',
  1124. averagePrintTime: 'Temps moyen par impression',
  1125. printsPerDay: 'Impressions par jour',
  1126. byPrinter: 'Par imprimante',
  1127. printsByPrinter: 'Impressions par imprimante',
  1128. byMaterial: 'Par matériau',
  1129. byMonth: 'Par mois',
  1130. last7Days: '7 derniers jours',
  1131. last30Days: '30 derniers jours',
  1132. last90Days: '90 derniers jours',
  1133. allTime: 'Tout le temps',
  1134. // Widgets
  1135. quickStats: 'Stats rapides',
  1136. printActivity: 'Activité d\'impression',
  1137. filamentTypes: 'Types de filament',
  1138. filamentTrends: 'Tendances filament',
  1139. failureAnalysis: 'Analyse des échecs',
  1140. timeAccuracy: 'Précision du temps',
  1141. successful: 'Succès :',
  1142. failed: 'Échecs :',
  1143. perfectEstimate: '100% = estimation parfaite',
  1144. noTimeAccuracyData: 'Pas encore de données de précision',
  1145. noFilamentData: 'Aucune donnée de filament',
  1146. noPrinterData: 'Aucune donnée d\'imprimante',
  1147. noPrintData: 'Aucune donnée d\'impression',
  1148. noPrintDataLast30Days: 'Aucune impression ces 30 derniers jours',
  1149. failureReasons: 'Raisons des échecs',
  1150. topFailureReasons: 'Top raisons d\'échec',
  1151. failedPrintsCount: '{{failed}} / {{total}} impressions ont échoué',
  1152. lastWeekRate: 'Semaine dernière : {{rate}}%',
  1153. // Actions
  1154. resetLayout: 'Réinitialiser la mise en page',
  1155. recalculateCosts: 'Recalculer les coûts',
  1156. recalculateCostsHint: 'Recalcule les coûts avec les prix actuels des filaments',
  1157. exportStats: 'Exporter les stats',
  1158. exportAsCsv: 'Exporter en CSV',
  1159. exportAsExcel: 'Exporter en Excel',
  1160. hiddenCount: '{{count}} Masqués',
  1161. // Toast
  1162. exportDownloaded: 'Export téléchargé',
  1163. exportFailed: 'Échec export',
  1164. layoutReset: 'Mise en page réinitialisée',
  1165. recalculatedCosts: 'Coûts recalculés pour {{count}} archives',
  1166. recalculateFailed: 'Échec du calcul',
  1167. // Loading
  1168. loadingStats: 'Chargement des statistiques...',
  1169. // Permissions
  1170. noPermissionResetLayout: 'Pas d\'autorisation de réinitialisation',
  1171. noPermissionRecalculate: 'Pas d\'autorisation de recalcul',
  1172. noPrintDataInRange: 'Aucune donnée dans la période sélectionnée',
  1173. periodFilament: 'Filament utilisé',
  1174. periodCost: 'Coût',
  1175. avgPerPrint: 'Moy. par impression',
  1176. usageOverTime: 'Utilisation dans le temps',
  1177. filamentByWeight: 'Poids',
  1178. printDuration: 'Durée d\'impression',
  1179. printerUtilization: 'Utilisation imprimante',
  1180. filamentSuccess: 'Succès par matériau',
  1181. printHabits: 'Habitudes d\'impression',
  1182. printTimeOfDay: 'Heure d\'impression',
  1183. colorDistribution: 'Distribution des couleurs',
  1184. noColorData: 'Aucune donnée de couleur disponible',
  1185. records: 'Records',
  1186. longestPrint: 'Plus longue impression',
  1187. heaviestPrint: 'Plus lourde impression',
  1188. mostExpensivePrint: 'Plus chère',
  1189. busiestDay: 'Jour le plus actif',
  1190. successStreak: 'Série de succès',
  1191. streakPrint: 'impression consécutive',
  1192. streakPrints: '{{count}} impressions consécutives',
  1193. printerStats: 'Stats imprimante',
  1194. hours: 'heures',
  1195. avgPrints: 'Moy. impressions',
  1196. noArchiveData: 'Aucune donnée d\'impression disponible',
  1197. filamentByTime: 'Temps',
  1198. avgWeight: 'Moy. poids',
  1199. avgTime: 'Moy. temps',
  1200. filamentByPrints: 'Impressions',
  1201. timeframe: {
  1202. today: 'Aujourd\'hui',
  1203. 'this-week': 'Cette semaine',
  1204. 'this-month': 'Ce mois',
  1205. 'last-7': '7 derniers jours',
  1206. 'last-30': '30 derniers jours',
  1207. 'last-90': '90 derniers jours',
  1208. 'this-year': 'Cette année',
  1209. 'all-time': 'Tout',
  1210. custom: 'Personnalisé',
  1211. from: 'Du',
  1212. to: 'Au',
  1213. },
  1214. allUsers: 'Tous les utilisateurs',
  1215. noUser: 'Aucun utilisateur (Système)',
  1216. filterByUser: 'Filtrer par utilisateur',
  1217. },
  1218. // Maintenance page
  1219. maintenance: {
  1220. title: 'Maintenance',
  1221. overview: 'Vue d\'ensemble',
  1222. allOk: 'Toute la maintenance est à jour',
  1223. dueCount: '{{count}} tâche à faire',
  1224. dueCount_plural: '{{count}} tâches à faire',
  1225. warningCount: '{{count}} avertissement',
  1226. warningCount_plural: '{{count}} avertissements',
  1227. totalPrintTime: 'Temps d\'impression total',
  1228. nextMaintenance: 'Prochaine maintenance',
  1229. nothingDue: 'Rien de prévu',
  1230. tasks: 'Tâches',
  1231. lastPerformed: 'Dernière réalisation',
  1232. interval: 'Intervalle',
  1233. hoursRemaining: '{{hours}}h restantes',
  1234. hoursOverdue: '{{hours}}h de retard',
  1235. markDone: 'Marquer comme fait',
  1236. performMaintenance: 'Effectuer la maintenance',
  1237. history: 'Historique',
  1238. noHistory: 'Aucun historique',
  1239. editPrintHours: 'Modifier les heures d\'impression',
  1240. currentHours: 'Heures actuelles',
  1241. // Tabs
  1242. statusTab: 'Statut',
  1243. settingsTab: 'Paramètres',
  1244. // Status
  1245. overdueCount: '{{count}} en retard',
  1246. dueSoonCount: '{{count}} bientôt',
  1247. dueSoon: 'Bientôt',
  1248. allGood: 'Tout va bien',
  1249. overdueBy: 'Retard de {{duration}}',
  1250. dueIn: 'Dans {{duration}}',
  1251. timeLeft: '{{duration}} restant',
  1252. // Duration formats
  1253. day: '1 jour',
  1254. days: '{{count}} jours',
  1255. week: '1 semaine',
  1256. weeks: '{{count}} semaines',
  1257. month: '1 mois',
  1258. months: '{{count}} mois',
  1259. year: '1 an',
  1260. // Settings
  1261. maintenanceTypes: 'Types de maintenance',
  1262. maintenanceTypesDescription: 'Types système et tâches personnalisées',
  1263. addCustomType: 'Ajouter un type',
  1264. restoreDefaults: 'Restaurer les tâches par défaut',
  1265. intervalType: 'Type d\'intervalle',
  1266. intervalValue: 'Intervalle ({{type}})',
  1267. icon: 'Icône',
  1268. documentationLink: 'Lien documentation (optionnel)',
  1269. assignToPrinters: 'Assigner aux imprimantes',
  1270. selectAtLeastOnePrinter: 'Sélectionnez au moins une imprimante',
  1271. addType: 'Ajouter le type',
  1272. custom: 'Personnalisé',
  1273. printHours: 'Heures d\'impression',
  1274. calendarDays: 'Jours calendaires',
  1275. exampleName: 'ex: Remplacement filtre HEPA',
  1276. viewDocumentation: 'Voir documentation',
  1277. timeBasedInterval: 'Intervalle temporel',
  1278. // Interval overrides
  1279. intervalOverrides: 'Exceptions d\'intervalle',
  1280. intervalOverridesDescription: 'Intervalles spécifiques par imprimante',
  1281. // Printer assignment
  1282. assignedToPrinters: 'Assigné aux imprimantes :',
  1283. noPrintersAssigned: 'Aucune imprimante assignée',
  1284. addPrinterShort: 'Ajouter :',
  1285. printersAssignedClick: '{{count}} imprimante(s) assignée(s) - gérer',
  1286. removeFromPrinter: 'Retirer de cette imprimante',
  1287. // Types
  1288. types: {
  1289. lubricateCarbonRods: 'Lubrifier les tiges carbone',
  1290. lubricateRails: 'Lubrifier les rails linéaires',
  1291. cleanNozzle: 'Nettoyer la buse / hotend',
  1292. checkBelts: 'Vérifier la tension des courroies',
  1293. cleanBuildPlate: 'Nettoyer le plateau',
  1294. checkExtruder: 'Vérifier les engrenages de l\'extrudeur',
  1295. checkCooling: 'Vérifier les ventilateurs',
  1296. generalInspection: 'Inspection générale',
  1297. cleanCarbonRods: 'Nettoyer les tiges carbone',
  1298. lubricateSteelRods: 'Lubrifier les tiges en acier',
  1299. cleanSteelRods: 'Nettoyer les tiges en acier',
  1300. cleanLinearRails: 'Nettoyer les rails linéaires',
  1301. checkPtfeTube: 'Vérifier le tube PTFE',
  1302. replaceHepaFilter: 'Remplacer le filtre HEPA',
  1303. replaceCarbonFilter: 'Remplacer le filtre charbon',
  1304. lubricateLeftNozzleRail: 'Lubrifier le rail de buse gauche',
  1305. },
  1306. // Toast
  1307. maintenanceComplete: 'Maintenance marquée comme faite',
  1308. typeUpdated: 'Type mis à jour',
  1309. typeDeleted: 'Type supprimé',
  1310. defaultsRestored: '{{count}} tâche(s) par défaut restaurée(s)',
  1311. printHoursUpdated: 'Heures mises à jour',
  1312. printerAssigned: 'Imprimante assignée',
  1313. printerRemoved: 'Imprimante retirée',
  1314. // Confirmation
  1315. deleteTypeConfirm: 'Supprimer "{{name}}" ?',
  1316. deleteSystemTypeTitle: 'Supprimer la tâche de maintenance par défaut ?',
  1317. deleteSystemTypeMessage: 'Êtes-vous sûr de vouloir supprimer la tâche de maintenance par défaut "{{name}}" ?',
  1318. // Permissions
  1319. noPermissionUpdate: 'Pas d\'autorisation de mise à jour',
  1320. noPermissionPerform: 'Pas d\'autorisation d\'action',
  1321. noPermissionEditTypes: 'Pas d\'autorisation de modification types',
  1322. noPermissionDeleteTypes: 'Pas d\'autorisation de suppression types',
  1323. noPermissionEditHours: 'Pas d\'autorisation de modification heures',
  1324. noPermissionRemovePrinter: 'Pas d\'autorisation retrait imprimante',
  1325. noPermissionAssignPrinter: 'Pas d\'autorisation assignation',
  1326. noPermissionEditIntervals: 'Pas d\'autorisation modification intervalles',
  1327. // Configure link
  1328. configureSettings: 'Configurer types et intervalles',
  1329. },
  1330. // Settings page
  1331. settings: {
  1332. title: 'Paramètres',
  1333. general: 'Général',
  1334. // Tab names
  1335. tabs: {
  1336. general: 'Général',
  1337. smartPlugs: 'Prises connectées',
  1338. notifications: 'Notifications',
  1339. queue: 'Workflow',
  1340. filament: 'Filament',
  1341. network: 'Réseau',
  1342. apiKeys: 'Clés API',
  1343. virtualPrinter: 'Imprimante virtuelle',
  1344. failureDetection: 'Détection d\'échec',
  1345. users: 'Authentification',
  1346. backup: 'Sauvegarde',
  1347. emailAuth: 'Authentification Email',
  1348. ldap: 'LDAP',
  1349. twoFa: 'Authentification 2FA',
  1350. oidc: 'SSO / OIDC',
  1351. },
  1352. ldap: {
  1353. title: 'Authentification LDAP',
  1354. enabledDesc: "L'authentification LDAP est activée",
  1355. disabledDesc: "L'authentification LDAP est désactivée",
  1356. disabledHint: 'Configurez et enregistrez les paramètres LDAP ci-dessous, puis activez.',
  1357. enabled: 'Authentification LDAP activée',
  1358. disabled: 'Authentification LDAP désactivée',
  1359. feature1: 'Les utilisateurs peuvent se connecter avec leurs identifiants LDAP',
  1360. feature2: "Le compte administrateur local reste disponible en secours",
  1361. feature3: 'Les groupes LDAP sont associés aux groupes BamBuddy à la connexion',
  1362. serverConfig: 'Configuration du serveur LDAP',
  1363. serverUrl: 'URL du serveur',
  1364. serverUrlHint: 'Utilisez ldap:// pour standard ou ldaps:// pour les connexions SSL',
  1365. security: 'Sécurité',
  1366. securityHint: 'StartTLS met à niveau une connexion simple vers TLS. LDAPS utilise TLS dès le début.',
  1367. bindDn: 'DN de liaison (compte de service)',
  1368. bindPassword: 'Mot de passe de liaison',
  1369. searchBase: 'DN de base de recherche',
  1370. userFilter: 'Filtre de recherche utilisateur',
  1371. userFilterHint: "{username} est remplacé par le nom d'utilisateur. Utilisez (uid={username}) pour OpenLDAP.",
  1372. autoProvision: 'Provisionnement automatique',
  1373. autoProvisionHint: 'Créer automatiquement un compte BamBuddy lors de la première connexion LDAP',
  1374. defaultGroup: 'Groupe par défaut',
  1375. defaultGroupNone: '— Aucun (pas de repli) —',
  1376. 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.",
  1377. groupMapping: 'Mappage de groupes (JSON)',
  1378. groupMappingHint: 'Associer les DN de groupes LDAP aux groupes BamBuddy. Groupes disponibles : ',
  1379. testConnection: 'Tester la connexion',
  1380. settingsSaved: 'Paramètres LDAP enregistrés',
  1381. errors: {
  1382. serverRequired: "L'URL du serveur LDAP est requise",
  1383. searchBaseRequired: 'Le DN de base de recherche est requis',
  1384. enableAuthFirst: "Activez d'abord l'authentification",
  1385. configureLdapFirst: "Enregistrez d'abord les paramètres LDAP",
  1386. },
  1387. },
  1388. // Email settings
  1389. email: {
  1390. smtpSettings: 'Configuration SMTP',
  1391. smtpHost: 'Serveur SMTP',
  1392. smtpPort: 'Port SMTP',
  1393. security: 'Sécurité',
  1394. authentication: 'Authentification',
  1395. username: 'Utilisateur',
  1396. password: 'Mot de passe',
  1397. fromEmail: 'Email expéditeur',
  1398. fromName: 'Nom expéditeur',
  1399. testConnection: 'Tester la connexion SMTP',
  1400. testRecipient: 'Email test destinataire',
  1401. sendTest: 'Envoyer email test',
  1402. sending: 'Envoi...',
  1403. save: 'Enregistrer les paramètres',
  1404. saving: 'Enregistrement...',
  1405. advancedAuth: 'Authentification avancée',
  1406. advancedAuthEnabled: 'L\'authentification avancée est activée',
  1407. advancedAuthEnabledDesc: 'La gestion des utilisateurs par email est active. Les nouveaux utilisateurs recevront un mot de passe auto-généré.',
  1408. advancedAuthDisabled: 'Authentification avancée désactivée',
  1409. advancedAuthDisabledDesc: 'Activez pour les fonctionnalités liées à l\'email (mot de passe oublié, etc).',
  1410. enable: 'Activer',
  1411. disable: 'Désactiver',
  1412. feature1: 'Génération auto et envoi de mots de passe par email',
  1413. feature2: 'Connexion par utilisateur ou email',
  1414. feature3: 'Réinitialisation mot de passe oublié disponible',
  1415. feature4: 'Réinitialisation admin par email',
  1416. // Error messages
  1417. errors: {
  1418. requiredFields: 'Remplissez tous les champs requis',
  1419. usernameRequired: 'L\'utilisateur est requis pour l\'authentification',
  1420. enterTestEmail: 'Entrez une adresse email de test',
  1421. smtpServerAndEmail: 'Serveur et expéditeur requis pour le test',
  1422. usernamePasswordRequired: 'Utilisateur et mot de passe requis pour l\'auth',
  1423. configureSmtpFirst: 'Configurez et testez le SMTP d\'abord',
  1424. enableAuthFirst: 'Veuillez d\'abord activer l\'authentification pour utiliser les fonctionnalités basées sur le courrier électronique.',
  1425. },
  1426. // Success messages
  1427. success: {
  1428. settingsSaved: 'Paramètres SMTP enregistrés',
  1429. },
  1430. // Security options
  1431. securityOptions: {
  1432. starttls: 'STARTTLS (Port 587)',
  1433. ssl: 'SSL/TLS (Port 465)',
  1434. none: 'Aucun (Port 25)',
  1435. },
  1436. // Authentication options
  1437. authOptions: {
  1438. enabled: 'Activée',
  1439. disabled: 'Désactivée',
  1440. },
  1441. },
  1442. appearance: 'Apparence',
  1443. notifications: 'Notifications',
  1444. smartPlugs: 'Prises connectées',
  1445. spoolman: 'Spoolman',
  1446. updates: 'Mises à jour',
  1447. language: 'Langue',
  1448. languageDescription: 'Choisissez votre langue',
  1449. theme: 'Thème',
  1450. themeLight: 'Clair',
  1451. themeDark: 'Sombre',
  1452. themeSystem: 'Système',
  1453. defaultView: 'Vue par défaut',
  1454. defaultViewDescription: 'Page affichée au démarrage',
  1455. checkForUpdates: 'Vérifier les mises à jour',
  1456. autoUpdate: 'Mise à jour auto',
  1457. currentVersion: 'Version actuelle',
  1458. latestVersion: 'Dernière version',
  1459. upToDate: 'Bambuddy est à jour',
  1460. updateAvailable: 'Mise à jour disponible',
  1461. // Notifications
  1462. notificationLanguage: 'Langue des notifications',
  1463. notificationLanguageDescription: 'Langue pour les notifications push',
  1464. bedCooledThreshold: 'Seuil de refroidissement du plateau',
  1465. bedCooledThresholdDescription: 'Température en dessous de laquelle le plateau est considéré comme refroidi',
  1466. userNotificationsEnabled: 'Notifications utilisateur',
  1467. 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.",
  1468. userNotificationsDisabledHint: "Activez l'authentification avancée pour utiliser les notifications utilisateur.",
  1469. notificationProviders: 'Fournisseurs de notifications',
  1470. addProvider: 'Ajouter un fournisseur',
  1471. editProvider: 'Modifier le fournisseur',
  1472. providerType: 'Type de fournisseur',
  1473. testNotification: 'Tester la notification',
  1474. testSuccess: 'Notification de test envoyée',
  1475. testFailed: 'Échec de l\'envoi du test',
  1476. quietHours: 'Heures de silence',
  1477. quietHoursDescription: 'Ne pas déranger pendant ces heures',
  1478. quietHoursStart: 'Début',
  1479. quietHoursEnd: 'Fin',
  1480. events: {
  1481. title: 'Événements de notification',
  1482. printStart: 'Impression démarrée',
  1483. printComplete: 'Impression terminée',
  1484. printFailed: 'Impression échouée',
  1485. printStopped: 'Impression arrêtée',
  1486. printProgress: 'Jalons de progression',
  1487. printProgressDescription: 'Notifier à 25%, 50%, 75%',
  1488. printerOffline: 'Imprimante hors ligne',
  1489. printerError: 'Erreur imprimante',
  1490. filamentLow: 'Filament bas',
  1491. maintenanceDue: 'Maintenance due',
  1492. maintenanceDueDescription: 'Notifier quand une tâche est due',
  1493. },
  1494. // Smart Plugs
  1495. smartPlug: {
  1496. title: 'Prises connectées',
  1497. add: 'Ajouter une prise',
  1498. edit: 'Modifier la prise',
  1499. name: 'Nom',
  1500. ipAddress: 'Adresse IP',
  1501. linkedPrinter: 'Imprimante liée',
  1502. autoOn: 'Allumage auto',
  1503. autoOnDescription: 'Allumer au début de l\'impression',
  1504. autoOff: 'Extinction auto',
  1505. autoOffDescription: 'Éteindre après l\'impression',
  1506. offDelay: 'Délai d\'extinction',
  1507. offDelayMinutes: 'Minutes après fin',
  1508. offDelayTemp: 'Quand la buse est sous',
  1509. currentState: 'État actuel',
  1510. turnOn: 'Allumer',
  1511. turnOff: 'Éteindre',
  1512. },
  1513. // Filament Tracking Mode
  1514. filamentTracking: 'Suivi de Filament',
  1515. filamentTrackingDesc: 'Choisissez comment suivre vos bobines. Utilisez l\'inventaire intégré ou connectez un serveur Spoolman.',
  1516. filamentChecks: 'Vérifications du filament',
  1517. disableFilamentWarnings: 'Désactiver les avertissements de filament',
  1518. disableFilamentWarningsDesc: 'Ne pas afficher les avertissements de filament insuffisant lors de l\'impression ou de la mise en file d\'attente',
  1519. preferLowestFilament: 'Préférer le filament le plus bas',
  1520. preferLowestFilamentDesc: 'Lorsque plusieurs bobines correspondent, utiliser celle avec le moins de filament restant',
  1521. trackingModeBuiltIn: 'Inventaire Intégré',
  1522. trackingModeBuiltInDesc: 'Correspondance RFID et suivi de consommation inclus',
  1523. trackingModeSpoolmanDesc: 'Serveur de gestion externe',
  1524. builtInFeatureRfid: 'Détecte auto les bobines RFID Bambu Lab dans l\'AMS',
  1525. builtInFeatureUsage: 'Suit la consommation par impression',
  1526. builtInFeatureCatalog: 'Gère bobines, couleurs et profils facteur K',
  1527. builtInFeatureThirdParty: 'Les bobines tierces peuvent être assignées aux bobines d\'inventaire',
  1528. amsSyncButton: 'Synchroniser les poids depuis l\'AMS',
  1529. amsSyncTitle: 'Synchroniser les poids des bobines depuis l\'AMS',
  1530. 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.',
  1531. amsSyncing: 'Synchronisation...',
  1532. amsSyncSuccess: '{{synced}} bobine(s) synchronisée(s), {{skipped}} ignorée(s)',
  1533. amsSyncError: 'Échec de la synchronisation des poids depuis l\'AMS',
  1534. // Spoolman settings
  1535. spoolmanUrl: 'URL Spoolman',
  1536. spoolmanUrlHint: 'URL de votre serveur Spoolman (ex: http://localhost:7912)',
  1537. spoolmanConnected: 'Connecté',
  1538. spoolmanDisconnected: 'Déconnecté',
  1539. status: 'Statut',
  1540. connect: 'Connecter',
  1541. disconnect: 'Déconnecter',
  1542. howSyncWorks: 'Fonctionnement de la Sync',
  1543. syncInfoRfidOnly: 'Seules les bobines officielles RFID sont synchronisées',
  1544. syncInfoAutoCreate: 'Les bobines sont créées dans Spoolman à la 1ère sync',
  1545. syncInfoThirdPartySkipped: 'Les bobines tierces ou rechargées sont ignorées',
  1546. linkingExistingSpools: 'Lier des bobines existantes',
  1547. linkingExistingSpoolsDesc: 'Pour lier une bobine Spoolman, survolez un slot AMS et cliquez sur "Lier à Spoolman".',
  1548. syncMode: 'Mode de Sync',
  1549. syncModeAuto: 'Automatique',
  1550. syncModeManual: 'Manuel uniquement',
  1551. syncModeAutoDesc: 'Sync auto lors de changements AMS',
  1552. syncModeManualDesc: 'Sync uniquement sur déclenchement manuel',
  1553. syncAmsData: 'Synchroniser AMS',
  1554. syncAmsDataDesc: 'Synchroniser manuellement les données vers Spoolman',
  1555. allPrinters: 'Toutes les imprimantes',
  1556. // Default printer
  1557. noDefaultPrinter: 'Aucune par défaut (demander à chaque fois)',
  1558. // Sidebar
  1559. sidebarOrder: 'Ordre de la barre latérale',
  1560. // Camera
  1561. saveThumbnails: 'Enregistrer les vignettes',
  1562. captureFinishPhoto: 'Prendre une photo à la fin',
  1563. noPrintersConfigured: 'Aucune imprimante configurée',
  1564. // Archive settings
  1565. archiveMode: {
  1566. always: 'Toujours créer une archive',
  1567. never: 'Ne jamais créer d\'archive',
  1568. ask: 'Demander à chaque fois',
  1569. },
  1570. // Updates
  1571. checkForUpdatesLabel: 'Vérifier les mises à jour',
  1572. checkPrinterFirmware: 'Vérifier le firmware imprimante',
  1573. includeBetaUpdates: 'Inclure les versions bêta',
  1574. includeBetaUpdatesDesc: 'Notifier des versions bêta et préliminaires lors de la vérification des mises à jour',
  1575. // Queue
  1576. enableRetry: 'Activer la rétentative',
  1577. // Home Assistant
  1578. homeAssistantDescription: 'Contrôler les prises via Home Assistant',
  1579. environmentManagedLabel: '(Géré par l\'environnement)',
  1580. autoEnabledViaEnv: 'Activé via variables d\'environnement',
  1581. urlFromEnvReadOnly: 'Valeur HA_URL (lecture seule)',
  1582. tokenFromEnvReadOnly: 'Valeur HA_TOKEN (lecture seule)',
  1583. // MQTT
  1584. mqttConnectedTo: 'Connecté à',
  1585. // Prometheus
  1586. prometheusDescription: 'Exposer les données au format Prometheus',
  1587. // Smart plugs empty state
  1588. noSmartPlugsTitle: 'Aucune prise configurée',
  1589. noSmartPlugsDescription: 'Ajoutez une prise Tasmota pour suivre l\'énergie et automatiser.',
  1590. // Notifications empty state
  1591. noProvidersTitle: 'Aucun fournisseur configuré',
  1592. noProvidersDescription: 'Ajoutez un fournisseur pour recevoir des alertes.',
  1593. noTemplatesAvailable: 'Aucun modèle dispo. Redémarrez pour les générer.',
  1594. // API permissions
  1595. apiPermissionView: 'Voir statut et file',
  1596. apiPermissionEdit: 'Gérer la file d\'attente',
  1597. // API keys
  1598. apiKeysEmptyTitle: 'Aucune clé API',
  1599. apiKeysEmptyDescription: 'Créez une clé pour vos intégrations.',
  1600. // Users
  1601. noUsersFound: 'Aucun utilisateur trouvé',
  1602. noGroupsFound: 'Aucun groupe trouvé',
  1603. noGroupsAvailable: 'Aucun groupe disponible',
  1604. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  1605. systemGroupWarning: 'Les noms des groupes système sont fixes',
  1606. // Auth disabled
  1607. authDisabledTitle: 'Authentification désactivée',
  1608. authDisabledFeature1: 'Requis pour accéder au système',
  1609. authDisabledFeature2: 'Gestion multi-utilisateurs et groupes',
  1610. authDisabledFeature3: 'Plus de 50 permissions granulaires',
  1611. // User deletion
  1612. userHasCreated: 'Cet utilisateur a créé :',
  1613. userItemsQuestion: 'Que faire de ces éléments ?',
  1614. deleteUserConfirm: 'Supprimer cet utilisateur ?',
  1615. actionCannotBeUndone: 'Cette action est irréversible.',
  1616. // Smart plugs
  1617. addFirstSmartPlug: 'Ajoutez votre première prise',
  1618. // Notifications
  1619. providers: 'Fournisseurs',
  1620. log: 'Journal',
  1621. testAll: 'Tout tester',
  1622. testResults: 'Résultats du test',
  1623. testPassedCount: '{{count}} succès',
  1624. testFailedCount: '{{count}} échecs',
  1625. messageTemplates: 'Modèles de message',
  1626. messageTemplatesDescription: 'Personnalisez les messages par événement.',
  1627. // API Keys section
  1628. apiKeys: 'Clés API',
  1629. apiKeysDescription: 'Créez des clés pour webhooks et API.',
  1630. createKey: 'Créer une clé',
  1631. apiKeyCreated: 'Clé API créée avec succès',
  1632. apiKeyCopyWarning: 'Copiez cette clé maintenant - elle ne sera plus affichée !',
  1633. useInApiBrowser: 'Utiliser dans l\'explorateur API',
  1634. createNewApiKey: 'Nouvelle clé API',
  1635. keyName: 'Nom de la clé',
  1636. keyNamePlaceholder: 'ex: Home Assistant, OctoPrint',
  1637. readStatus: 'Lire le statut',
  1638. readStatusDescription: 'Voir les imprimantes et la file',
  1639. manageQueue: 'Gérer la file',
  1640. manageQueueDescription: 'Ajouter/retirer des éléments',
  1641. controlPrinter: 'Contrôler l\'imprimante',
  1642. controlPrinterDescription: 'Pause, reprise, arrêt',
  1643. unnamedKey: 'Clé sans nom',
  1644. lastUsed: 'Dernière utilisation',
  1645. read: 'Lecture',
  1646. control: 'Contrôle',
  1647. createFirstKey: 'Créez votre première clé',
  1648. webhookEndpoints: 'Points de terminaison Webhook',
  1649. webhookApiKeyHint: 'Utilisez la clé dans l\'en-tête X-API-Key.',
  1650. webhook: {
  1651. getAllStatus: 'Tous les statuts',
  1652. getSpecificStatus: 'Statut spécifique',
  1653. addToQueue: 'Ajouter à la file',
  1654. pausePrint: 'Pause',
  1655. resumePrint: 'Reprise',
  1656. stopPrint: 'Arrêt',
  1657. },
  1658. apiBrowser: 'Explorateur API',
  1659. apiBrowserDescription: 'Testez les endpoints API.',
  1660. apiKeyForTesting: 'Clé API pour test',
  1661. apiKeyPlaceholder: 'Collez votre clé pour tester...',
  1662. apiKeyHint: 'Sera envoyée via l\'en-tête X-API-Key.',
  1663. deleteApiKeyTitle: 'Supprimer la clé API',
  1664. deleteApiKeyMessage: 'Les intégrations utilisant cette clé cesseront de fonctionner.',
  1665. deleteKey: 'Supprimer la clé',
  1666. // Filament tab
  1667. amsDisplayThresholds: 'Seuils d\'affichage AMS',
  1668. amsThresholdsDescription: 'Seuils de couleur pour humidité et température.',
  1669. humidity: 'Humidité',
  1670. goodGreen: 'Bon (vert)',
  1671. fairOrange: 'Moyen (orange)',
  1672. aboveFairBad: 'Au-dessus = rouge (mauvais)',
  1673. fairAlsoDryingThreshold: 'Ce seuil est aussi utilisé pour déclencher le séchage automatique',
  1674. temperature: 'Température',
  1675. goodBlue: 'Bon (bleu)',
  1676. aboveFairHot: 'Au-dessus = rouge (chaud)',
  1677. historyRetention: 'Rétention d\'historique',
  1678. keepSensorHistory: 'Garder l\'historique pendant',
  1679. historyRetentionDescription: 'Les anciennes données seront supprimées.',
  1680. defaultPrintOptions: 'Options d\'impression par défaut',
  1681. defaultPrintOptionsDescription: 'Définir les valeurs par défaut des options d\'impression. Modifiables dans la boîte de dialogue d\'impression.',
  1682. defaultBedLevelling: 'Nivellement du lit',
  1683. defaultBedLevellingDesc: 'Niveler automatiquement le lit avant l\'impression',
  1684. defaultFlowCali: 'Calibration du flux',
  1685. defaultFlowCaliDesc: 'Calibrer le flux d\'extrusion',
  1686. defaultVibrationCali: 'Calibration des vibrations',
  1687. defaultVibrationCaliDesc: 'Réduire les artefacts de ringing',
  1688. defaultLayerInspect: 'Inspection première couche',
  1689. defaultLayerInspectDesc: 'Inspection IA de la première couche',
  1690. defaultTimelapse: 'Timelapse',
  1691. defaultTimelapseDesc: 'Enregistrer une vidéo timelapse',
  1692. staggeredStart: 'Staggered Start',
  1693. staggeredStartDescription: 'Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.',
  1694. plateClear: 'Confirmation de plateau libre',
  1695. requirePlateClear: 'Exiger la confirmation de plateau libre',
  1696. 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.',
  1697. gcodeInjection: 'Injection de G-code',
  1698. 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.',
  1699. gcodeInjectionNoPrinters: 'Aucune imprimante trouvée. Ajoutez des imprimantes pour configurer les snippets G-code.',
  1700. gcodeStartLabel: 'G-code de début',
  1701. gcodeEndLabel: 'G-code de fin',
  1702. gcodeStartPlaceholder: 'G-code ajouté avant le début de l\'impression...',
  1703. gcodeEndPlaceholder: 'G-code ajouté après la fin de l\'impression...',
  1704. staggerGroupSize: 'Group size',
  1705. staggerGroupSizeHelp: 'Printers to start simultaneously per group',
  1706. staggerInterval: 'Interval (minutes)',
  1707. staggerIntervalHelp: 'Delay between each group starting',
  1708. queueDrying: 'Séchage automatique',
  1709. queueDryingDescription: 'Sécher automatiquement le filament AMS lorsque l\'imprimante est inactive entre les impressions. Utilise le seuil d\'humidité ci-dessus.',
  1710. queueDryingEnabled: 'Activer le séchage automatique',
  1711. queueDryingEnabledDescription: 'Démarrer le séchage AMS automatiquement lorsque l\'imprimante est inactive et l\'humidité dépasse le seuil',
  1712. queueDryingBlock: 'Attendre la fin du séchage',
  1713. queueDryingBlockDescription: 'Bloquer la file d\'attente jusqu\'à la fin du séchage. Désactivé, les impressions sont prioritaires.',
  1714. ambientDryingEnabled: 'Séchage ambiant',
  1715. ambientDryingEnabledDescription: 'Sécher automatiquement le filament sur les imprimantes inactives lorsque l\'humidité dépasse le seuil, même sans impressions en file.',
  1716. dryingPresets: 'Préréglages de séchage',
  1717. 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.',
  1718. dryingFilament: 'Filament',
  1719. printModal: 'Fenêtre d\'impression',
  1720. expandCustomMapping: 'Étendre le mapping personnalisé par défaut',
  1721. expandCustomMappingDescription: 'Affiche le mapping AMS par imprimante étendu.',
  1722. // User management
  1723. authentication: 'Authentification',
  1724. authEnabledDescription: 'L\'instance est sécurisée',
  1725. authDisabledDescription: 'Activez pour restreindre l\'accès',
  1726. authDisabledMessage: 'Activez l\'authentification pour gérer comptes et permissions.',
  1727. enableAuthentication: 'Activer l\'authentification',
  1728. currentUser: 'Utilisateur actuel',
  1729. changePassword: 'Changer le mot de passe',
  1730. admin: 'Admin',
  1731. users: 'Utilisateurs',
  1732. addUser: 'Ajouter un utilisateur',
  1733. groups: 'Groupes',
  1734. addGroup: 'Ajouter un groupe',
  1735. system: 'Système',
  1736. noDescription: 'Pas de description',
  1737. userCount: '{{count}} utilisateurs',
  1738. permissionCount: '{{count}} permissions',
  1739. createUser: 'Créer un utilisateur',
  1740. username: 'Nom d\'utilisateur',
  1741. enterUsername: 'Entrez l\'utilisateur',
  1742. password: 'Mot de passe',
  1743. enterPassword: 'Mot de passe (min 6 char)',
  1744. confirmPassword: 'Confirmer le mot de passe',
  1745. confirmPasswordPlaceholder: 'Confirmez le mot de passe',
  1746. // Title tooltips
  1747. viewReleaseOnGitHub: 'Voir la version sur GitHub',
  1748. turnAllPlugsOn: 'Tout allumer',
  1749. turnAllPlugsOff: 'Tout éteindre',
  1750. // Modal: Clear logs
  1751. clearNotificationLogs: 'Effacer les journaux',
  1752. clearLogsMessage: 'Efface définitivement les logs de plus de 30 jours.',
  1753. clearLogs: 'Effacer les logs',
  1754. // Modal: Reset UI
  1755. resetUiPreferences: 'Réinitialiser l\'UI',
  1756. resetUiPreferencesMessage: 'Réinitialise l\'ordre, thème, widgets, etc. N\'affecte pas vos données.',
  1757. resetPreferences: 'Réinitialiser',
  1758. // Modal: Delete group
  1759. deleteGroupTitle: 'Supprimer le groupe',
  1760. deleteGroupMessage: 'Les utilisateurs de ce groupe perdront ces permissions.',
  1761. deleteGroup: 'Supprimer le groupe',
  1762. // Modal: Disable auth
  1763. disableAuthenticationTitle: 'Désactiver l\'authentification',
  1764. disableAuthenticationMessage: 'Instance accessible sans connexion. Les comptes sont conservés.',
  1765. disableAuthentication: 'Désactiver',
  1766. // Additional settings
  1767. configureBambuddy: 'Configurer Bambuddy',
  1768. systemDefault: 'Défaut système',
  1769. archiveSettings: 'Réglages Archives',
  1770. newWindow: 'Nouvelle fenêtre',
  1771. embeddedOverlay: 'Superposition intégrée',
  1772. preferredSlicer: 'Slicer préféré',
  1773. preferredSlicerDescription: 'Application pour ouvrir les fichiers',
  1774. useSlicerApi: 'Use Slicer API',
  1775. useSlicerApiDescription: 'When on, "Slice" actions open the in-app slicer modal and call the slicer-API sidecar. When off (default), they hand off to the desktop slicer via URI scheme.',
  1776. slicerCard: 'Slicer',
  1777. orcaslicerApiUrl: 'OrcaSlicer sidecar URL',
  1778. bambuStudioApiUrl: 'Bambu Studio sidecar URL',
  1779. slicerApiUrlDescription: 'URL of the slicer-API sidecar container. Leave blank to use the SLICER_API_URL / BAMBU_STUDIO_API_URL env var defaults.',
  1780. externalCameras: 'Caméras externes',
  1781. costTracking: 'Suivi des coûts',
  1782. printsOnly: 'Impressions uniquement',
  1783. totalConsumption: 'Consommation totale',
  1784. dataManagement: 'Gestion des données',
  1785. storageUsage: 'Utilisation du stockage',
  1786. storageUsageDescription: 'Répartition de l\'utilisation des données par catégorie',
  1787. storageUsageTotal: 'Total',
  1788. storageUsageErrors: 'Erreurs',
  1789. storageUsageOtherBreakdown: 'Autre (inclut ressources statiques, scripts et fichiers de configuration)',
  1790. storageUsageSystem: 'Système',
  1791. storageUsageData: 'Données',
  1792. storageUsageUnavailable: 'Informations d\'utilisation du stockage non disponibles',
  1793. clearNotificationLogsDescription: 'Supprimer logs de plus de 30 jours',
  1794. resetUiPreferencesDescription: 'Réinitialise thèmes et affichage sans toucher aux données.',
  1795. enableHomeAssistant: 'Activer Home Assistant',
  1796. enableMqtt: 'Activer MQTT',
  1797. useTls: 'Utiliser TLS',
  1798. enableMetricsEndpoint: 'Activer l\'endpoint Metrics',
  1799. availableMetrics: 'Metrics disponibles',
  1800. editUser: 'Modifier l\'utilisateur',
  1801. deleteUserTitle: 'Supprimer l\'utilisateur',
  1802. groupName: 'Nom du groupe',
  1803. // Placeholders
  1804. leaveEmptyForAnonymous: 'Vide pour anonyme',
  1805. leaveEmptyForNoAuth: 'Vide si pas d\'auth',
  1806. enterNewPassword: 'Nouveau mot de passe',
  1807. confirmNewPassword: 'Confirmer nouveau mdp',
  1808. enterGroupName: 'Entrez le nom du groupe',
  1809. enterDescriptionOptional: 'Description (optionnel)',
  1810. enterCurrentPassword: 'Mdp actuel',
  1811. enterNewPasswordMin6: 'Nouveau mdp (min 6 char)',
  1812. toast: {
  1813. keyCopied: 'Clé copiée',
  1814. copyFailed: 'Échec copie',
  1815. keyAddedToBrowser: 'Clé ajoutée à l\'explorateur',
  1816. clearLogsFailed: 'Échec effacement logs',
  1817. uiPreferencesReset: 'Préférences UI réinitialisées. Rafraîchissement...',
  1818. authDisabled: 'Authentification désactivée',
  1819. authDisableFailed: 'Échec désactivation',
  1820. apiKeyCreated: 'Clé API créée',
  1821. apiKeyDeleted: 'Clé API supprimée',
  1822. userCreated: 'Utilisateur créé',
  1823. userUpdated: 'Utilisateur mis à jour',
  1824. userDeleted: 'Utilisateur supprimé',
  1825. groupCreated: 'Groupe créé',
  1826. groupUpdated: 'Groupe mis à jour',
  1827. groupDeleted: 'Groupe supprimé',
  1828. fillRequiredFields: 'Remplissez les champs requis',
  1829. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  1830. passwordTooShort: 'Minimum 6 caractères',
  1831. enterGroupName: 'Entrez un nom de groupe',
  1832. settingsSaved: 'Paramètres enregistrés',
  1833. noPermissionUpdate: "Vous n'avez pas l'autorisation de modifier les paramètres",
  1834. cameraSettingsSaved: 'Réglages caméra enregistrés',
  1835. enterCameraUrl: 'Entrez une URL caméra',
  1836. passwordChanged: 'Mot de passe modifié',
  1837. connectionFailed: 'Échec connexion',
  1838. testFailed: 'Échec test',
  1839. cameraConnected: 'Caméra connectée {{resolution}}',
  1840. },
  1841. testConnection: 'Tester la connexion',
  1842. catalog: {
  1843. spoolCatalog: 'Catalogue de Bobines',
  1844. spoolCatalogDescription: 'Poids des bobines vides par marque/type. Utilisé pour le calcul auto du poids restant.',
  1845. searchCatalog: 'Chercher dans le catalogue...',
  1846. addNewEntry: 'Nouvelle Entrée',
  1847. namePlaceholder: 'Nom (ex: Bambu Lab - Plastique)',
  1848. weight: 'Poids',
  1849. type: 'Type',
  1850. default: 'Défaut',
  1851. custom: 'Perso',
  1852. noMatch: 'Aucune entrée correspondante',
  1853. empty: 'Catalogue vide',
  1854. deleteEntry: 'Supprimer l\'entrée',
  1855. deleteConfirm: 'Supprimer "{{name}}" ?',
  1856. resetCatalog: 'Réinitialiser le catalogue',
  1857. resetConfirm: 'Réinitialiser aux valeurs par défaut ? Vos entrées personnalisées seront supprimées.',
  1858. loadFailed: 'Échec chargement catalogue',
  1859. nameWeightRequired: 'Nom et poids requis',
  1860. entryAdded: 'Entrée ajoutée',
  1861. addFailed: 'Échec ajout',
  1862. entryUpdated: 'Entrée mise à jour',
  1863. updateFailed: 'Échec mise à jour',
  1864. entryDeleted: 'Entrée supprimée',
  1865. deleteFailed: 'Échec suppression',
  1866. resetSuccess: 'Catalogue réinitialisé',
  1867. resetFailed: 'Échec réinitialisation',
  1868. exported: '{{count}} entrées exportées',
  1869. imported: '{{added}} entrées importées ({{skipped}} ignorées)',
  1870. importFailed: 'Échec import : format JSON invalide',
  1871. exportTooltip: 'Exporter en JSON',
  1872. importTooltip: 'Importer depuis JSON',
  1873. resetTooltip: 'Réinitialiser par défaut',
  1874. selectedCount: '{{count}} sélectionnés',
  1875. deleteSelected: 'Supprimer la sélection',
  1876. bulkDeleteConfirm: 'Supprimer {{count}} entrées ?',
  1877. bulkDeleted: '{{count}} entrées supprimées',
  1878. bulkDeleteFailed: 'Échec de la suppression',
  1879. },
  1880. colorCatalog: {
  1881. title: 'Catalogue de Couleurs',
  1882. description: 'Couleurs de filament par fabricant. Utilisé pour la recherche auto lors de l\'ajout de bobines.',
  1883. searchColors: 'Chercher couleurs...',
  1884. allManufacturers: 'Tous les fabricants',
  1885. addNewColor: 'Nouvelle Couleur',
  1886. manufacturer: 'Fabricant',
  1887. colorName: 'Nom couleur',
  1888. hex: 'Hex',
  1889. materialOptional: 'Matériau (optionnel)',
  1890. showing: 'Affichage {{filtered}} sur {{total}} couleurs',
  1891. noMatch: 'Aucune couleur correspondante',
  1892. empty: 'Catalogue vide',
  1893. deleteColor: 'Supprimer couleur',
  1894. deleteConfirm: 'Supprimer "{{name}}" ?',
  1895. resetCatalog: 'Réinitialiser catalogue couleurs',
  1896. resetConfirm: 'Réinitialiser aux valeurs par défaut ?',
  1897. sync: 'Sync',
  1898. starting: 'Démarrage...',
  1899. syncTooltip: 'Sync depuis FilamentColors.xyz (2000+ couleurs, peut être long)',
  1900. loadFailed: 'Échec chargement catalogue couleurs',
  1901. fieldsRequired: 'Fabricant, nom et code Hex requis',
  1902. colorAdded: 'Couleur ajoutée',
  1903. addFailed: 'Échec ajout',
  1904. colorUpdated: 'Couleur mise à jour',
  1905. updateFailed: 'Échec mise à jour',
  1906. colorDeleted: 'Couleur supprimée',
  1907. deleteFailed: 'Échec suppression',
  1908. resetSuccess: 'Catalogue réinitialisé',
  1909. resetFailed: 'Échec réinitialisation',
  1910. syncUpToDate: 'Déjà à jour ({{count}} couleurs vérifiées)',
  1911. syncComplete: '{{added}} couleurs ajoutées ({{skipped}} déjà présentes)',
  1912. syncError: 'Erreur de sync',
  1913. syncFailed: 'Échec sync FilamentColors.xyz',
  1914. exported: '{{count}} couleurs exportées',
  1915. imported: '{{added}} couleurs importées ({{skipped}} ignorées)',
  1916. importFailed: 'Échec import : format JSON invalide',
  1917. selectedCount: '{{count}} sélectionnés',
  1918. deleteSelected: 'Supprimer la sélection',
  1919. bulkDeleteConfirm: 'Supprimer {{count}} couleurs ?',
  1920. bulkDeleted: '{{count}} couleurs supprimées',
  1921. bulkDeleteFailed: 'Échec de la suppression des couleurs',
  1922. },
  1923. // General tab
  1924. dateFormat: 'Format de date',
  1925. dateFormatUs: 'US (MM/JJ/AAAA)',
  1926. dateFormatEu: 'EU (JJ/MM/AAAA)',
  1927. dateFormatIso: 'ISO (AAAA-MM-JJ)',
  1928. timeFormat: 'Format horaire',
  1929. timeFormat12: '12 heures (3:30 PM)',
  1930. timeFormat24: '24 heures (15:30)',
  1931. defaultPrinter: 'Imprimante par défaut',
  1932. defaultPrinterDescription: 'Présélectionner cette imprimante pour les téléversements, réimpressions et autres opérations.',
  1933. slicerBambuStudio: 'Bambu Studio',
  1934. slicerOrcaSlicer: 'OrcaSlicer',
  1935. sidebarOrderDescription: 'Glissez les éléments dans la barre latérale pour réorganiser. Réinitialiser l\'ordre par défaut ici.',
  1936. setDefault: 'Définir par défaut',
  1937. sidebarOrderSetDefaultHint: 'Définir par défaut applique l\'ordre actuel du menu aux utilisateurs qui n\'ont pas encore personnalisé le leur.',
  1938. sidebarDefaultSet: 'L\'ordre du menu par défaut a été défini.',
  1939. sidebarDefaultCleared: 'Ordre du menu par défaut effacé.',
  1940. sidebarDefaultFailed: 'Échec de la définition de l\'ordre du menu par défaut.',
  1941. reset: 'Réinitialiser',
  1942. darkMode: 'Mode sombre',
  1943. lightMode: 'Mode clair',
  1944. active: '(actif)',
  1945. background: 'Arrière-plan',
  1946. accent: 'Accent',
  1947. style: 'Style',
  1948. bgNeutral: 'Neutre',
  1949. bgWarm: 'Chaud',
  1950. bgCool: 'Froid',
  1951. bgOled: 'OLED Noir',
  1952. bgSlate: 'Bleu ardoise',
  1953. bgForest: 'Vert forêt',
  1954. accentGreen: 'Vert',
  1955. accentTeal: 'Sarcelle',
  1956. accentBlue: 'Bleu',
  1957. accentOrange: 'Orange',
  1958. accentPurple: 'Violet',
  1959. accentRed: 'Rouge',
  1960. styleClassic: 'Classique',
  1961. styleGlow: 'Lumineux',
  1962. styleVibrant: 'Vibrant',
  1963. themeToggleHint: 'Basculer entre le mode sombre et clair avec l\'icône soleil/lune dans la barre latérale.',
  1964. autoArchivePrints: 'Archiver automatiquement les impressions',
  1965. autoArchiveDescription: 'Sauvegarder automatiquement les fichiers 3MF à la fin des impressions',
  1966. saveThumbnailsDescription: 'Extraire et sauvegarder les images d\'aperçu des fichiers 3MF',
  1967. captureFinishPhotoDescription: 'Prendre une photo avec la caméra de l\'imprimante à la fin de l\'impression',
  1968. ffmpegNotInstalled: 'ffmpeg non installé',
  1969. ffmpegRequired: 'La capture caméra nécessite ffmpeg. Installez-le via <brew>brew install ffmpeg</brew> (macOS) ou <apt>apt install ffmpeg</apt> (Linux).',
  1970. camera: 'Caméra',
  1971. cameraViewMode: 'Mode d\'affichage caméra',
  1972. cameraOverlayDescription: 'La caméra s\'ouvre dans un overlay redimensionnable sur l\'écran principal',
  1973. cameraWindowDescription: 'La caméra s\'ouvre dans une fenêtre de navigateur séparée',
  1974. 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.',
  1975. cameraPlaceholderUsb: 'Chemin du périphérique (/dev/video0)',
  1976. cameraPlaceholderUrl: 'URL caméra (rtsp://... ou http://...)',
  1977. cameraTypeMjpeg: 'Flux MJPEG',
  1978. cameraTypeRtsp: 'Flux RTSP',
  1979. cameraTypeSnapshot: 'Snapshot HTTP',
  1980. cameraTypeUsb: 'Caméra USB (V4L2)',
  1981. cameraRotation: 'Rotation',
  1982. test: 'Tester',
  1983. connected: 'Connecté',
  1984. disconnected: 'Déconnecté',
  1985. currency: 'Devise',
  1986. defaultFilamentCost: 'Coût filament par défaut (par kg)',
  1987. electricityCost: 'Coût électricité par kWh',
  1988. energyDisplayMode: 'Mode d\'affichage énergie',
  1989. energyModePrintDescription: 'Le tableau de bord affiche la somme de l\'énergie utilisée pendant les impressions',
  1990. energyModeTotalDescription: 'Le tableau de bord affiche l\'énergie totale des prises connectées',
  1991. fileManager: 'Gestionnaire de fichiers',
  1992. createArchiveEntry: 'Créer une entrée d\'archive lors de l\'impression',
  1993. createArchiveEntryDescription: 'Lors de l\'impression depuis le gestionnaire de fichiers, créer optionnellement une entrée d\'archive',
  1994. lowDiskSpaceWarning: 'Avertissement espace disque faible',
  1995. lowDiskSpaceDescription: 'Afficher un avertissement lorsque l\'espace disque libre descend sous ce seuil',
  1996. printerFirmware: 'Firmware imprimante',
  1997. checkFirmwareDescription: 'Vérifier les mises à jour firmware de Bambu Lab',
  1998. bambuddySoftware: 'Logiciel Bambuddy',
  1999. autoCheckDescription: 'Vérifier automatiquement les nouvelles versions au démarrage',
  2000. checkNow: 'Vérifier maintenant',
  2001. updateAvailableVersion: 'Mise à jour disponible : v{{version}}',
  2002. releaseNotes: 'Notes de version',
  2003. updateViaDocker: 'Mettre à jour via Docker Compose :',
  2004. installUpdate: 'Installer la mise à jour',
  2005. latestVersionRunning: 'Vous utilisez la dernière version',
  2006. failedToCheckUpdates: 'Échec de la vérification des mises à jour : {{error}}',
  2007. backupRestore: 'Sauvegarde & Restauration',
  2008. backupRestoreDescription: 'Exporter/importer les paramètres et configurer la sauvegarde GitHub',
  2009. goToBackup: 'Aller à la sauvegarde',
  2010. externalUrl: 'URL externe',
  2011. externalUrlDescription: 'L\'URL externe où Bambuddy est accessible. Utilisée pour les images de notification et les intégrations externes.',
  2012. bambuddyUrl: 'URL Bambuddy',
  2013. externalUrlHint: 'Inclure le protocole et le port (ex : http://192.168.1.100:8000)',
  2014. ftpRetry: 'Réessai FTP',
  2015. 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.',
  2016. autoRetryDescription: 'Réessayer automatiquement les opérations FTP échouées',
  2017. retryAttempts: 'Tentatives de réessai',
  2018. retryDelay: 'Délai de réessai',
  2019. connectionTimeout: 'Délai de connexion',
  2020. time_one: '{{count}} fois',
  2021. time_other: '{{count}} fois',
  2022. second_one: '{{count}} seconde',
  2023. second_other: '{{count}} secondes',
  2024. nSeconds: '{{count}} secondes',
  2025. increaseForWeakWifi: 'Augmenter pour les imprimantes avec un WiFi faible',
  2026. homeAssistant: 'Home Assistant',
  2027. 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.',
  2028. homeAssistantUrl: 'URL Home Assistant',
  2029. longLivedAccessToken: 'Token d\'accès longue durée',
  2030. haTokenHint: 'Créer un token dans HA : Profil → Tokens d\'accès longue durée → Créer un token',
  2031. connectionSuccessful: 'Connexion réussie',
  2032. connectionFailed: 'Connexion échouée',
  2033. haConnectionSuccess: 'Connexion à Home Assistant réussie.',
  2034. haConnectionFailed: 'Échec de la connexion à Home Assistant.',
  2035. mqttPublishing: 'Publication MQTT',
  2036. 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.',
  2037. mqttEnableDescription: 'Publier les événements vers un broker MQTT externe',
  2038. brokerHostname: 'Nom d\'hôte du broker',
  2039. port: 'Port',
  2040. usernameOptional: 'Nom d\'utilisateur (optionnel)',
  2041. passwordOptional: 'Mot de passe (optionnel)',
  2042. topicPrefix: 'Préfixe de topic',
  2043. topicPrefixHint: 'Les topics seront : {{prefix}}/printers/<serial>/status, etc.',
  2044. prometheusMetrics: 'Métriques Prometheus',
  2045. prometheusEndpointDescription: 'Exposer les métriques imprimante sur <code>/api/v1/metrics</code> pour la surveillance Prometheus/Grafana.',
  2046. bearerTokenOptional: 'Token Bearer (optionnel)',
  2047. bearerTokenHint: 'Si défini, les requêtes doivent inclure <code>Authorization: Bearer <token></code>',
  2048. metricsConnectionStatus: 'État de connexion',
  2049. metricsPrinterState: 'État imprimante (idle/printing/etc)',
  2050. metricsPrintProgress: 'Progression impression 0-100%',
  2051. metricsBedTemp: 'Température du plateau',
  2052. metricsNozzleTemp: 'Température de la buse',
  2053. metricsPrintsTotal: 'Total impressions par résultat',
  2054. metricsMore: '...et plus (couches, ventilateurs, file d\'attente, utilisation filament)',
  2055. 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.',
  2056. allOn: 'Tout allumer',
  2057. allOff: 'Tout éteindre',
  2058. addSmartPlug: 'Ajouter une prise',
  2059. energySummary: 'Résumé énergétique',
  2060. currentPower: 'Puissance actuelle',
  2061. plugsOnline: '{{reachable}}/{{total}} prises en ligne',
  2062. today: 'Aujourd\'hui',
  2063. yesterday: 'Hier',
  2064. total: 'Total',
  2065. enablePlugsForSummary: 'Activer les prises pour voir le résumé énergétique',
  2066. addNotificationProvider: 'Ajouter',
  2067. systemBadge: '(Système)',
  2068. creating: 'Création...',
  2069. changing: 'Modification...',
  2070. deleteUserAndItems: 'Supprimer l\'utilisateur ET ses éléments',
  2071. deleteUserKeepItems: 'Supprimer l\'utilisateur, garder les éléments (deviennent sans propriétaire)',
  2072. ok: 'OK',
  2073. // 2FA settings
  2074. twoFa: {
  2075. totpTitle: 'Application Authenticator (TOTP)',
  2076. totpDesc: 'Utilisez une application comme Google Authenticator, Aegis ou Authy.',
  2077. emailOtpTitle: 'OTP par e-mail',
  2078. emailOtpDesc: 'Envoyez un code à usage unique à {{email}} lors de la connexion.',
  2079. emailOtpNoEmail: 'Ajoutez une adresse e-mail à votre compte pour activer cette méthode.',
  2080. addEmailFirst: 'Votre compte n\'a pas d\'adresse e-mail. Demandez à un administrateur d\'en ajouter une.',
  2081. setupTotp: 'Configurer l\'application Authenticator',
  2082. setupAuthApp: 'Configurer l\'application Authenticator',
  2083. setupInstructions: 'Scannez le QR code avec votre application authenticator, puis confirmez avec un code.',
  2084. manualEntry: 'Impossible de scanner ? Entrez ce secret manuellement :',
  2085. scannedContinue: 'Code scanné — continuer',
  2086. enterCodeToConfirm: 'Entrez le code à 6 chiffres de votre application authenticator pour confirmer.',
  2087. activate: 'Activer',
  2088. disableTotp: 'Désactiver l\'Authenticator',
  2089. disableConfirmHint: 'Entrez un code TOTP valide ou un code de secours pour désactiver l\'authenticator.',
  2090. totpDisabled: 'Application Authenticator désactivée.',
  2091. emailOtpEnabled: 'OTP par e-mail activé.',
  2092. emailOtpDisabled: 'OTP par e-mail désactivé.',
  2093. smtpRequired: 'Veuillez d\'abord configurer et tester les paramètres SMTP.',
  2094. invalidCode: 'Code invalide. Veuillez réessayer.',
  2095. enableEmailOtp: 'Activer OTP par e-mail',
  2096. disableEmailOtp: 'Désactiver OTP par e-mail',
  2097. 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.',
  2098. verifyAndEnable: 'Vérifier et activer',
  2099. emailDisablePasswordHint: 'Entrez le mot de passe de votre compte pour confirmer la désactivation de l\'OTP par e-mail.',
  2100. passwordPlaceholder: 'Entrez votre mot de passe',
  2101. backupCodesTitle: 'Sauvegardez vos codes de secours',
  2102. backupCodesWarning: 'Conservez ces codes en lieu sûr. Chaque code ne peut être utilisé qu\'une seule fois et ne sera plus affiché.',
  2103. backupCodesRemaining: '{{count}} codes de secours restants',
  2104. savedCodes: 'Codes sauvegardés',
  2105. regenBackup: 'Régénérer les codes de secours',
  2106. regenBackupHint: 'Entrez votre code TOTP actuel pour générer 10 nouveaux codes de secours. Tous les codes existants seront invalidés.',
  2107. newBackupCodes: 'Nouveaux codes de secours',
  2108. linkedAccounts: 'Comptes SSO liés',
  2109. linkedAccountsDesc: 'Ces fournisseurs d\'identité externes sont liés à votre compte.',
  2110. oidcUnlinked: 'Compte dissocié.',
  2111. },
  2112. // OIDC provider settings
  2113. oidc: {
  2114. title: 'Fournisseurs SSO / OIDC',
  2115. desc: 'Configurez des fournisseurs OpenID Connect pour l\'authentification unique.',
  2116. addProvider: 'Ajouter un fournisseur',
  2117. newProvider: 'Nouveau fournisseur',
  2118. empty: 'Aucun fournisseur OIDC configuré.',
  2119. created: 'Fournisseur créé.',
  2120. updated: 'Fournisseur mis à jour.',
  2121. deleted: 'Fournisseur supprimé.',
  2122. deleteTitle: 'Supprimer le fournisseur',
  2123. deleteMessage: 'Supprimer "{{name}}" ? Tous les comptes liés seront déconnectés.',
  2124. form: {
  2125. name: 'Nom d\'affichage',
  2126. issuerUrl: 'URL de l\'émetteur',
  2127. clientId: 'ID client',
  2128. clientSecret: 'Secret client',
  2129. scopes: 'Scopes',
  2130. iconUrl: 'URL de l\'icône (optionnel)',
  2131. enabled: 'Activé',
  2132. autoCreate: 'Créer les utilisateurs automatiquement',
  2133. autoCreateDesc: 'Crée automatiquement un compte local lors de la première connexion.',
  2134. autoLink: 'Lier automatiquement les comptes existants',
  2135. autoLinkDesc: 'Lie les comptes locaux existants par e-mail lors de la première connexion.',
  2136. secretHint: 'laisser vide pour conserver',
  2137. secretPlaceholder: 'nouveau secret',
  2138. emailClaim: 'Claim e-mail',
  2139. 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.",
  2140. emailClaimPlaceholder: 'email',
  2141. requireEmailVerified: 'Exiger la vérification e-mail',
  2142. requireEmailVerifiedDesc: "N'accepter le claim e-mail que si le fournisseur le marque comme vérifié.",
  2143. requireEmailVerifiedWarning: "Avertissement : l'e-mail sera accepté sans vérification. À utiliser uniquement avec des fournisseurs de confiance.",
  2144. requireEmailVerifiedAutoLink: 'Désactiver le lien automatique d\'abord pour modifier ce paramètre.',
  2145. },
  2146. },
  2147. },
  2148. // Notifications (for push notifications)
  2149. notification: {
  2150. printStarted: {
  2151. title: 'Impression démarrée',
  2152. body: '{{printer}} : {{filename}} commence l\'impression',
  2153. },
  2154. printCompleted: {
  2155. title: 'Impression terminée',
  2156. body: '{{printer}} : {{filename}} a réussi',
  2157. },
  2158. printFailed: {
  2159. title: 'Impression échouée',
  2160. body: '{{printer}} : {{filename}} a échoué',
  2161. },
  2162. printStopped: {
  2163. title: 'Impression arrêtée',
  2164. body: '{{printer}} : {{filename}} a été arrêtée',
  2165. },
  2166. printProgress: {
  2167. title: 'Progression d\'impression',
  2168. body: '{{printer}} : {{filename}} est à {{percent}}%',
  2169. },
  2170. printerOffline: {
  2171. title: 'Imprimante hors ligne',
  2172. body: '{{printer}} est déconnectée',
  2173. },
  2174. printerError: {
  2175. title: 'Erreur imprimante',
  2176. body: '{{printer}} : {{error}}',
  2177. },
  2178. filamentLow: {
  2179. title: 'Filament bas',
  2180. body: '{{printer}} : Le filament est presque vide',
  2181. },
  2182. maintenanceDue: {
  2183. title: 'Maintenance due',
  2184. body: '{{printer}} : {{items}} demandent votre attention',
  2185. },
  2186. },
  2187. // Errors
  2188. errors: {
  2189. generic: 'Une erreur est survenue',
  2190. networkError: 'Erreur réseau. Vérifiez votre connexion.',
  2191. notFound: 'Non trouvé',
  2192. unauthorized: 'Non autorisé',
  2193. serverError: 'Erreur serveur',
  2194. validationError: 'Vérifiez vos saisies',
  2195. printerConnectionFailed: 'Échec connexion imprimante',
  2196. saveFailed: 'Échec enregistrement',
  2197. deleteFailed: 'Échec suppression',
  2198. loadFailed: 'Échec chargement',
  2199. },
  2200. // HMS Errors modal
  2201. hmsErrors: {
  2202. title: 'Erreurs - {{name}}',
  2203. noErrors: 'Aucune erreur',
  2204. viewOnWiki: 'Voir sur le Wiki Bambu Lab',
  2205. clearInstructions: 'Effacez les erreurs sur l\'imprimante pour les retirer ici.',
  2206. clearErrors: 'Effacer les erreurs',
  2207. clearSuccess: 'Erreurs HMS effacées',
  2208. clearFailed: 'Échec de l\'effacement des erreurs HMS',
  2209. },
  2210. // MQTT Debug modal
  2211. mqttDebug: {
  2212. title: 'Journal de débogage MQTT',
  2213. searchPlaceholder: 'Chercher topic ou message...',
  2214. noMessages: 'Aucun message enregistré',
  2215. startLoggingHint: 'Cliquez sur "Démarrer" pour capturer les messages MQTT',
  2216. noMessagesMatch: 'Aucun message ne correspond',
  2217. adjustFilterHint: 'Ajustez votre recherche',
  2218. incoming: 'Entrant',
  2219. outgoing: 'Sortant',
  2220. loggingStopped: 'Enregistrement arrêté',
  2221. loggingActive: 'Enregistrement actif - rafraîchissement auto',
  2222. startLogging: 'Démarrer',
  2223. stopLogging: 'Arrêter',
  2224. clearLog: 'Effacer le journal',
  2225. topic: 'Topic',
  2226. timestamp: 'Horodatage',
  2227. direction: 'Direction',
  2228. all: 'Tous',
  2229. },
  2230. // Printer File Manager modal (printer internal storage)
  2231. printerFiles: {
  2232. title: 'Gestionnaire de fichiers',
  2233. storageUsed: 'Utilisé :',
  2234. storageFree: 'Libre :',
  2235. filterPlaceholder: 'Filtrer les fichiers...',
  2236. deleteButton: 'Supprimer',
  2237. deleteFiles: 'Supprimer {{count}} fichiers',
  2238. deleteFileConfirm: 'Supprimer "{{name}}" ?',
  2239. deleteFilesConfirm: 'Supprimer les {{count}} fichiers sélectionnés ?',
  2240. noFiles: 'Aucun fichier sur l\'imprimante',
  2241. loadingFiles: 'Chargement...',
  2242. failedToLoad: 'Échec chargement fichiers',
  2243. toast: {
  2244. filesDeleted: '{{count}} fichier(s) supprimé(s)',
  2245. deleteFailed: 'Échec suppression : {{error}}',
  2246. },
  2247. },
  2248. // Confirmations
  2249. confirm: {
  2250. delete: 'Voulez-vous vraiment supprimer cet élément ?',
  2251. unsavedChanges: 'Changements non sauvegardés. Voulez-vous quitter ?',
  2252. clearQueue: 'Voulez-vous vraiment vider la file d\'attente ?',
  2253. },
  2254. // Login page
  2255. login: {
  2256. title: 'Connexion Bambuddy',
  2257. subtitle: 'Connectez-vous à votre compte',
  2258. username: 'Utilisateur',
  2259. usernamePlaceholder: 'Entrez votre utilisateur',
  2260. usernameOrEmail: 'Utilisateur ou Email',
  2261. usernameOrEmailPlaceholder: 'Utilisateur ou @ Email',
  2262. password: 'Mot de passe',
  2263. passwordPlaceholder: 'Entrez votre mot de passe',
  2264. signIn: 'Se connecter',
  2265. signingIn: 'Connexion...',
  2266. rememberMe: 'Se souvenir de moi',
  2267. forgotPassword: 'Mot de passe oublié ?',
  2268. loginSuccess: 'Connecté avec succès',
  2269. loginFailed: 'Échec de connexion',
  2270. enterCredentials: 'Entrez vos identifiants',
  2271. enterEmail: 'Veuillez entrer votre adresse e-mail',
  2272. oidcLoginFailed: 'Échec de la connexion OIDC',
  2273. oidcErrors: {
  2274. providerError: "Le fournisseur d'identité a renvoyé une erreur",
  2275. missingParameters: 'Il manque des paramètres requis dans le callback OIDC',
  2276. invalidState: "L'état OIDC est invalide ou a déjà été utilisé",
  2277. stateExpired: 'La session OIDC a expiré — veuillez réessayer',
  2278. providerNotFound: 'Fournisseur OIDC introuvable',
  2279. discoveryFailed: 'Impossible de récupérer le document de découverte OIDC',
  2280. invalidDiscovery: 'Le document de découverte OIDC est invalide',
  2281. networkError: "Erreur réseau lors de l'échange de jeton OIDC",
  2282. badResponse: "Réponse inattendue lors de l'échange de jeton OIDC",
  2283. noIdToken: "Le fournisseur OIDC n'a pas renvoyé de jeton d'identité",
  2284. validationFailed: 'La validation du jeton OIDC a échoué',
  2285. nonceMismatch: 'Le nonce OIDC ne correspond pas — possible attaque par rejeu',
  2286. missingSubClaim: 'Le jeton OIDC est dépourvu de la revendication sub',
  2287. noLinkedAccount: 'Aucun compte local est lié à cette identité OIDC',
  2288. accountInactive: 'Votre compte est inactif',
  2289. userResolutionFailed: 'Impossible de résoudre votre compte',
  2290. internalError: 'Une erreur interne est survenue lors de la connexion OIDC',
  2291. tokenExchangeFailed: "L'échange de jeton OIDC a échoué",
  2292. },
  2293. forgotPasswordTitle: 'Mot de passe oublié',
  2294. forgotPasswordMessage: 'Contactez votre administrateur pour réinitialiser votre accès.',
  2295. forgotPasswordEmailMessage: 'Entrez votre email pour recevoir un nouveau mot de passe.',
  2296. emailAddress: 'Adresse Email',
  2297. emailPlaceholder: 'votre.email@exemple.com',
  2298. cancel: 'Annuler',
  2299. sending: 'Envoi...',
  2300. sendResetEmail: 'Envoyer l\'email',
  2301. howToReset: 'Comment réinitialiser :',
  2302. resetStep1: 'Contactez votre admin Bambuddy',
  2303. resetStep2: 'Demandez une réinitialisation dans la Gestion Utilisateurs',
  2304. resetStep3: 'Il vous donnera un mot de passe temporaire',
  2305. resetStep4: 'Connectez-vous et changez-le dans les Paramètres',
  2306. gotIt: 'Compris',
  2307. twoFA: {
  2308. title: 'Authentification à deux facteurs',
  2309. subtitle: 'Votre compte est protégé par la 2FA. Saisissez le code de vérification ci-dessous.',
  2310. methodAuthenticator: "Application d'authentification",
  2311. methodEmail: 'Code par e-mail',
  2312. methodBackup: 'Code de récupération',
  2313. instructionsTotp: "Ouvrez votre application d'authentification et saisissez le code à 6 chiffres pour Bambuddy.",
  2314. instructionsEmail: 'Un code à 6 chiffres a été envoyé à votre adresse e-mail. Il est valable 10 minutes.',
  2315. instructionsEmailNotSent: 'Cliquez ci-dessous pour recevoir un code de vérification par e-mail.',
  2316. instructionsBackup: "Saisissez l'un de vos codes de récupération à 8 caractères. Chaque code ne peut être utilisé qu'une seule fois.",
  2317. sendCodeButton: 'Envoyer le code par e-mail',
  2318. sendingCode: 'Envoi en cours...',
  2319. resendCode: 'Renvoyer le code',
  2320. codeLabel: 'Code de vérification',
  2321. backupCodeLabel: 'Code de récupération',
  2322. codePlaceholder: '000000',
  2323. backupCodePlaceholder: 'XXXXXXXX',
  2324. verifyButton: 'Vérifier',
  2325. verifyingButton: 'Vérification en cours...',
  2326. backToLogin: '← Retour à la connexion',
  2327. orContinueWith: 'ou continuer avec',
  2328. signInWith: 'Se connecter avec {{provider}}',
  2329. enterCode: 'Veuillez entrer le code de vérification',
  2330. sendCodeFailed: 'Échec de l\'envoi du code de vérification',
  2331. invalidCode: 'Code invalide. Veuillez réessayer.',
  2332. },
  2333. },
  2334. // Setup page
  2335. setup: {
  2336. title: 'Configuration Bambuddy',
  2337. subtitle: 'Configurez l\'authentification',
  2338. enableAuth: 'Activer l\'authentification',
  2339. adminAccount: 'Compte Admin',
  2340. adminAccountDesc: 'Si des admins existent, ils seront utilisés. Sinon, créez-en un ci-dessous.',
  2341. adminUsername: 'Utilisateur Admin',
  2342. adminPassword: 'Mot de passe Admin',
  2343. optionalIfAdminExists: '(optionnel si admin existe)',
  2344. adminUsernamePlaceholder: 'Nom admin (optionnel)',
  2345. adminPasswordPlaceholder: 'Mdp admin (optionnel)',
  2346. confirmPassword: 'Confirmer mdp',
  2347. confirmPasswordPlaceholder: 'Confirmez mdp admin',
  2348. settingUp: 'Configuration...',
  2349. completeSetup: 'Terminer la configuration',
  2350. toast: {
  2351. authEnabledAdminCreated: 'Authentification activée et admin créé',
  2352. authEnabledExistingAdmins: 'Authentification activée avec admins existants',
  2353. setupCompleted: 'Configuration terminée',
  2354. enterBothCredentials: 'Entrez les deux ou laissez vide pour utiliser les admins existants',
  2355. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  2356. passwordTooShort: 'Minimum 6 caractères',
  2357. },
  2358. },
  2359. // Password change
  2360. changePassword: {
  2361. title: 'Changer le mot de passe',
  2362. currentPassword: 'Mot de passe actuel',
  2363. currentPasswordPlaceholder: 'Entrez mdp actuel',
  2364. newPassword: 'Nouveau mot de passe',
  2365. newPasswordPlaceholder: 'Nouveau mdp (min 6 char)',
  2366. confirmPassword: 'Confirmer nouveau mdp',
  2367. confirmPasswordPlaceholder: 'Confirmez nouveau mdp',
  2368. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  2369. passwordTooShort: 'Minimum 6 caractères',
  2370. changing: 'Changement...',
  2371. success: 'Mot de passe modifié',
  2372. failed: 'Échec modification',
  2373. },
  2374. // Plate detection alert
  2375. plateAlert: {
  2376. title: 'Impression en Pause !',
  2377. message: 'Objets détectés sur le plateau. L\'impression a été suspendue automatiquement. Videz le plateau avant de reprendre.',
  2378. understand: 'J\'ai compris',
  2379. },
  2380. // Camera page
  2381. camera: {
  2382. title: 'Vue Caméra',
  2383. invalidPrinterId: 'ID imprimante invalide',
  2384. live: 'Direct',
  2385. snapshot: 'Instantané',
  2386. restartStream: 'Redémarrer le flux',
  2387. refreshSnapshot: 'Rafraîchir l\'image',
  2388. fullscreen: 'Plein écran',
  2389. exitFullscreen: 'Quitter plein écran',
  2390. connectingToCamera: 'Connexion caméra...',
  2391. capturingSnapshot: 'Capture...',
  2392. connectionLost: 'Connexion perdue',
  2393. connectionFailed: 'Échec connexion caméra',
  2394. reconnecting: 'Reconnexion dans {{countdown}}s... (essai {{attempt}}/{{max}})',
  2395. reconnectNow: 'Reconnexion immédiate',
  2396. cameraUnavailable: 'Caméra indisponible',
  2397. cameraUnavailableDesc: 'Vérifiez que l\'imprimante est allumée.',
  2398. noCamera: 'Aucune caméra disponible',
  2399. retry: 'Réessayer',
  2400. cameraStream: 'Flux caméra',
  2401. zoomOut: 'Zoom arrière',
  2402. zoomIn: 'Zoom avant',
  2403. resetZoom: 'Réinitialiser zoom',
  2404. recording: 'Enregistrement',
  2405. startRecording: 'Démarrer l\'enregistrement',
  2406. stopRecording: 'Arrêter l\'enregistrement',
  2407. chamberLight: 'Basculer lumière chambre',
  2408. },
  2409. // Groups management
  2410. groups: {
  2411. title: 'Gestion des Groupes',
  2412. subtitle: 'Gérez les permissions pour le contrôle d\'accès',
  2413. backToSettings: 'Retour aux paramètres',
  2414. createGroup: 'Créer un groupe',
  2415. noPermission: 'Accès refusé.',
  2416. system: 'Système',
  2417. noDescription: 'Pas de description',
  2418. usersCount: '{{count}} utilisateurs',
  2419. permissionsCount: '{{count}} permissions',
  2420. edit: 'Modifier',
  2421. delete: 'Supprimer',
  2422. toast: {
  2423. created: 'Groupe créé',
  2424. updated: 'Groupe mis à jour',
  2425. deleted: 'Groupe supprimé',
  2426. enterGroupName: 'Entrez un nom de groupe',
  2427. },
  2428. modal: {
  2429. editGroup: 'Modifier le groupe',
  2430. createGroup: 'Créer un groupe',
  2431. cancel: 'Annuler',
  2432. saving: 'Enregistrement...',
  2433. creating: 'Création...',
  2434. saveChanges: 'Enregistrer',
  2435. },
  2436. form: {
  2437. groupName: 'Nom du groupe',
  2438. groupNamePlaceholder: 'Nom du groupe',
  2439. systemGroupWarning: 'Les groupes système sont fixes',
  2440. description: 'Description',
  2441. descriptionPlaceholder: 'Description (optionnel)',
  2442. permissions: 'Permissions ({{count}} sélectionnées)',
  2443. },
  2444. deleteModal: {
  2445. title: 'Supprimer le groupe',
  2446. message: 'Les utilisateurs de ce groupe perdront ces permissions.',
  2447. confirm: 'Supprimer',
  2448. },
  2449. editor: {
  2450. title: 'Modifier le groupe',
  2451. createTitle: 'Créer un groupe',
  2452. search: 'Rechercher des permissions...',
  2453. selectAll: 'Tout sélectionner',
  2454. clearAll: 'Tout désélectionner',
  2455. permissionsSelected: '{{count}} sélectionnée(s)',
  2456. noResults: 'Aucune permission ne correspond à votre recherche',
  2457. },
  2458. },
  2459. // Users management
  2460. users: {
  2461. title: 'Gestion des Utilisateurs',
  2462. subtitle: 'Gérez les accès à Bambuddy',
  2463. backToSettings: 'Retour aux paramètres',
  2464. createUser: 'Créer un utilisateur',
  2465. noPermission: 'Accès refusé.',
  2466. admin: 'Admin',
  2467. noGroups: 'Aucun groupe',
  2468. active: 'Actif',
  2469. inactive: 'Inactif',
  2470. edit: 'Modifier',
  2471. delete: 'Supprimer',
  2472. system: 'Système',
  2473. noGroupsAvailable: 'Aucun groupe disponible',
  2474. table: {
  2475. username: 'Utilisateur',
  2476. groups: 'Groupes',
  2477. status: 'Statut',
  2478. actions: 'Actions',
  2479. },
  2480. toast: {
  2481. created: 'Utilisateur créé',
  2482. updated: 'Utilisateur mis à jour',
  2483. deleted: 'Utilisateur supprimé',
  2484. fillRequired: 'Remplissez les champs requis',
  2485. passwordsDoNotMatch: 'Les mots de passe ne correspondent pas',
  2486. passwordTooShort: 'Minimum 6 caractères',
  2487. },
  2488. modal: {
  2489. createUser: 'Créer utilisateur',
  2490. editUser: 'Modifier utilisateur',
  2491. cancel: 'Annuler',
  2492. creating: 'Création...',
  2493. saving: 'Enregistrement...',
  2494. saveChanges: 'Enregistrer',
  2495. advancedAuthSubtitle: 'avec Authentification Avancée',
  2496. },
  2497. form: {
  2498. username: 'Utilisateur',
  2499. usernamePlaceholder: 'Nom utilisateur',
  2500. email: 'Email',
  2501. emailPlaceholder: 'utilisateur@exemple.com',
  2502. password: 'Mot de passe',
  2503. passwordPlaceholder: 'Mot de passe',
  2504. confirmPassword: 'Confirmer mdp',
  2505. confirmPasswordPlaceholder: 'Confirmez mdp',
  2506. newPasswordPlaceholder: 'Nouveau mdp',
  2507. confirmNewPasswordPlaceholder: 'Confirmez nouveau mdp',
  2508. leaveBlankToKeep: 'Laissez vide pour conserver l\'actuel',
  2509. groups: 'Groupes',
  2510. optional: 'optionnel',
  2511. autoGeneratedPassword: 'Un mot de passe sera généré et envoyé par email.',
  2512. passwordManagedByAdvancedAuth: 'Géré par Auth Avancée. Utilisez "Réinitialiser" pour envoyer un nouveau mdp par email.',
  2513. resetPassword: 'Réinitialiser le mot de passe',
  2514. resettingPassword: 'Réinitialisation...',
  2515. },
  2516. deleteModal: {
  2517. title: 'Supprimer utilisateur',
  2518. message: 'Cette action est irréversible.',
  2519. confirm: 'Supprimer',
  2520. },
  2521. },
  2522. // Stream overlay
  2523. streamOverlay: {
  2524. title: 'Superposition Flux',
  2525. invalidPrinterId: 'ID invalide',
  2526. cameraStream: 'Flux caméra',
  2527. progress: 'Progression',
  2528. eta: 'Fin estimée',
  2529. printerIdle: 'Imprimante inactive',
  2530. printerOffline: 'Imprimante hors ligne',
  2531. status: {
  2532. printing: 'Impression',
  2533. paused: 'En pause',
  2534. finished: 'Terminée',
  2535. failed: 'Échouée',
  2536. idle: 'Inactive',
  2537. unknown: 'Inconnue',
  2538. },
  2539. },
  2540. // Profiles
  2541. profiles: {
  2542. title: 'Profils',
  2543. subtitle: 'Gérez vos presets slicer et calibrations Pressure Advance',
  2544. tabs: {
  2545. cloud: 'Profils Cloud',
  2546. local: 'Profils Locaux',
  2547. kprofiles: 'K-Profiles',
  2548. },
  2549. localProfiles: {
  2550. title: 'Profils Locaux',
  2551. subtitle: 'Gérez vos presets OrcaSlicer',
  2552. import: 'Importer Profils',
  2553. importDesc: 'Déposez les fichiers .bbscfg, .bbsflmt, .orca_filament, .zip ou .json',
  2554. importing: 'Importation...',
  2555. search: 'Chercher un preset...',
  2556. noPresets: 'Aucun preset local',
  2557. badge: 'Local',
  2558. edit: 'Modifier',
  2559. delete: 'Supprimer',
  2560. cancel: 'Annuler',
  2561. deleteConfirmTitle: 'Supprimer Preset',
  2562. deleteConfirm: 'Supprimer définitivement ce preset ?',
  2563. source: 'Source',
  2564. inheritsFrom: 'Hérite de',
  2565. filamentType: 'Type',
  2566. vendor: 'Vendeur',
  2567. compatiblePrinters: 'Imprimantes',
  2568. nozzleTemp: 'Temp Buse',
  2569. cost: 'Coût',
  2570. density: 'Densité',
  2571. pressureAdvance: 'Pressure Advance',
  2572. filament: 'Filament',
  2573. process: 'Processus',
  2574. printer: 'Imprimante',
  2575. toast: {
  2576. importSuccess: '{{count}} profil(s) importé(s)',
  2577. importSkipped: '{{count}} profil(s) ignoré(s) (doublons)',
  2578. importError: '{{count}} erreur(s) d\'import',
  2579. deleted: 'Preset supprimé',
  2580. updated: 'Preset mis à jour',
  2581. },
  2582. },
  2583. connectedAs: 'Connecté en tant que',
  2584. logout: 'Déconnexion',
  2585. noLogoutPermission: 'Pas d\'autorisation de déconnexion',
  2586. failedToLoad: 'Échec chargement profils',
  2587. retry: 'Réessayer',
  2588. time: {
  2589. justNow: 'À l\'instant',
  2590. minsAgo: 'Il y a {{count}}m',
  2591. hoursAgo: 'Il y a {{count}}h',
  2592. daysAgo: 'Il y a {{count}}j',
  2593. },
  2594. toast: {
  2595. loggedOut: 'Déconnecté',
  2596. },
  2597. login: {
  2598. title: 'Connexion Bambu Cloud',
  2599. subtitle: 'Synchronisez vos presets slicer',
  2600. email: 'Email',
  2601. password: 'Mot de passe',
  2602. region: 'Région',
  2603. regionGlobal: 'Global',
  2604. regionChina: 'Chine',
  2605. verificationCode: 'Code de vérification',
  2606. totpCode: 'Code Authenticator',
  2607. checkEmail: 'Code envoyé à {{email}}',
  2608. enterTotpHint: 'Entrez le code 2FA',
  2609. accessToken: 'Jeton d\'accès (Access Token)',
  2610. accessTokenHint: 'Collez le jeton (depuis Bambu Studio)',
  2611. back: 'Retour',
  2612. loginButton: 'Connexion',
  2613. verifyButton: 'Vérifier',
  2614. setTokenButton: 'Définir Jeton',
  2615. useToken: 'Utiliser jeton d\'accès',
  2616. useEmail: 'Connexion par email',
  2617. toast: {
  2618. loggedIn: 'Connecté avec succès',
  2619. codeSent: 'Code envoyé par email',
  2620. enterTotp: 'Entrez le code Authenticator',
  2621. tokenSet: 'Jeton défini',
  2622. },
  2623. },
  2624. presets: {
  2625. myPreset: 'Mon preset (modifiable)',
  2626. duplicate: 'Dupliquer',
  2627. editable: 'Modifiable',
  2628. failedToLoadDetails: 'Échec détails preset',
  2629. deleteConfirm: 'Supprimer ce preset ?',
  2630. deleteWarning: 'Ceci supprimera "{{name}}" de Bambu Cloud définitivement.',
  2631. noDuplicatePermission: 'Pas d\'autorisation duplication',
  2632. noEditPermission: 'Pas d\'autorisation modification',
  2633. noDeletePermission: 'Pas d\'autorisation suppression',
  2634. types: {
  2635. filament: 'Preset filament',
  2636. printer: 'Preset imprimante',
  2637. process: 'Preset processus',
  2638. },
  2639. toast: {
  2640. deleted: 'Preset supprimé',
  2641. created: 'Preset créé',
  2642. updated: 'Preset mis à jour',
  2643. duplicated: 'Preset dupliqué',
  2644. fieldAdded: 'Champ "{{key}}" ajouté',
  2645. exported: 'Preset exporté',
  2646. },
  2647. baseLabel: 'Base : {{name}}',
  2648. currentLabel: 'Actuel : {{name}}',
  2649. newPreset: 'Nouveau Preset',
  2650. editPreset: 'Modifier Preset',
  2651. duplicatePreset: 'Dupliquer Preset',
  2652. createNewPreset: 'Créer un nouveau Preset',
  2653. customizeSettings: 'Personnalisez vos réglages',
  2654. compareWithBase: 'Comparer avec la base',
  2655. compare: 'Comparer',
  2656. // CreatePresetModal - Basic Info
  2657. basePreset: 'Preset de base',
  2658. selectBasePreset: 'Choisir preset de base...',
  2659. presetName: 'Nom du preset',
  2660. myCustomPreset: 'Mon preset personnalisé',
  2661. inheritsFrom: 'Hérite de',
  2662. dropJsonToImport: 'Glissez JSON pour importer',
  2663. // CreatePresetModal - Tabs
  2664. tabs: {
  2665. common: 'Commun',
  2666. allFields: 'Tous les champs',
  2667. },
  2668. // CreatePresetModal - All Fields Tab
  2669. availableFields: 'Champs disponibles',
  2670. searchFieldsPlaceholder: 'Chercher un champ...',
  2671. noMatchingFields: 'Aucun champ trouvé',
  2672. allFieldsAdded: 'Tous les champs sont ajoutés',
  2673. addCustomField: 'Ajouter un champ personnalisé',
  2674. yourOverrides: 'Vos modifications',
  2675. noOverridesYet: 'Aucune modification',
  2676. clickFieldsToAdd: 'Cliquez à gauche pour ajouter',
  2677. saveAsTemplate: 'Enregistrer comme modèle',
  2678. jsonTip: 'Conseil : Glissez un .json pour importer les réglages',
  2679. },
  2680. cloudView: {
  2681. searchPlaceholder: 'Chercher presets...',
  2682. templates: 'Modèles',
  2683. refresh: 'Rafraîchir',
  2684. newPreset: 'Nouveau Preset',
  2685. clearFilters: 'Effacer filtres',
  2686. // Compare mode
  2687. compareMode: 'Mode Comparaison',
  2688. selectAnotherPreset: 'Choisir un autre preset {{type}}',
  2689. clickTwoPresets: 'Choisissez deux presets de même type',
  2690. selectFirst: '1. Sélectionner premier',
  2691. selectSecond: '2. Sélectionner second',
  2692. compareNow: 'Comparer maintenant',
  2693. // Status row
  2694. lastSynced: 'Synchronisé :',
  2695. showingCount: '{{showing}} sur {{total}} presets',
  2696. noPresetsFound: 'Aucun preset trouvé',
  2697. // Column headers
  2698. columns: {
  2699. filament: 'Filament',
  2700. process: 'Processus',
  2701. printer: 'Imprimante',
  2702. },
  2703. noFilamentPresets: 'Pas de preset filament',
  2704. noProcessPresets: 'Pas de preset processus',
  2705. noPrinterPresets: 'Pas de preset imprimante',
  2706. // Filters
  2707. filters: {
  2708. type: 'Type',
  2709. owner: 'Propriétaire',
  2710. printer: 'Imprimante',
  2711. nozzle: 'Buse',
  2712. filament: 'Filament',
  2713. layer: 'Couche',
  2714. all: 'Tous',
  2715. myPresets: 'Mes Presets',
  2716. builtIn: 'Inclus',
  2717. process: 'Processus',
  2718. },
  2719. // Permissions
  2720. noTemplatesPermission: 'Pas d\'autorisation modèles',
  2721. noRefreshPermission: 'Pas d\'autorisation rafraîchissement',
  2722. noCreatePermission: 'Pas d\'autorisation création',
  2723. },
  2724. templates: {
  2725. title: 'Modèles rapides',
  2726. noTemplates: 'Aucun modèle',
  2727. createFirst: 'Créez-en depuis l\'éditeur de preset',
  2728. typeFilter: 'Type :',
  2729. deleteTitle: 'Supprimer modèle',
  2730. deleteWarning: 'Action irréversible',
  2731. deleteConfirm: 'Supprimer "{{name}}" ?',
  2732. namePlaceholder: 'Nom du modèle',
  2733. descriptionPlaceholder: 'Description',
  2734. settingsJson: 'Paramètres (JSON)',
  2735. fieldsCount: '{{count}} champs',
  2736. shownInModals: 'Visible dans fenêtres',
  2737. hiddenInModals: 'Masqué dans fenêtres',
  2738. apply: 'Appliquer',
  2739. toast: {
  2740. deleted: 'Modèle supprimé',
  2741. updated: 'Modèle mis à jour',
  2742. created: 'Modèle créé',
  2743. applied: 'Modèle appliqué',
  2744. },
  2745. },
  2746. },
  2747. // Support/Debug
  2748. support: {
  2749. debugLoggingActive: 'Débogage actif',
  2750. manageLogs: 'Gérer',
  2751. collectItem7: 'Connectivité et versions firmware',
  2752. collectItem8: 'Statut intégrations (Spoolman, MQTT, HA)',
  2753. collectItem9: 'Interfaces réseau (sous-réseaux)',
  2754. collectItem10: 'Versions packages Python',
  2755. collectItem11: 'Santé base de données',
  2756. collectItem12: 'Détails environnement Docker',
  2757. },
  2758. // File manager
  2759. fileManager: {
  2760. title: 'Gestionnaire de fichiers',
  2761. subtitle: 'Organisez vos fichiers d\'impression',
  2762. uploadFiles: 'Téléverser fichiers',
  2763. newFolder: 'Nouveau dossier',
  2764. folderName: 'Nom du dossier',
  2765. folderNamePlaceholder: 'ex: Pièces Utiles',
  2766. renameFile: 'Renommer fichier',
  2767. renameFolder: 'Renommer dossier',
  2768. moveFiles: 'Déplacer {{count}} fichier(s)',
  2769. rootNoFolder: 'Racine (aucun dossier)',
  2770. current: 'actuel',
  2771. linkFolder: 'Lier le dossier',
  2772. linkFolderDescription: 'Lier "{{name}}" à un projet ou archive.',
  2773. project: 'Projet',
  2774. archive: 'Archive',
  2775. noProjectsFound: 'Aucun projet trouvé',
  2776. noArchivesFound: 'Aucune archive trouvée',
  2777. unlink: 'Délier',
  2778. link: 'Lier',
  2779. dragDropFiles: 'Glissez les fichiers ici',
  2780. dropFilesHere: 'Déposez ici',
  2781. orClickToBrowse: 'ou cliquez pour parcourir',
  2782. allFileTypesSupported: 'Tous types supportés. ZIP extraits.',
  2783. zipFilesDetected: 'ZIP détectés',
  2784. zipExtractOptions: 'Choix de structure pour ZIP :',
  2785. preserveZipStructure: 'Garder structure ZIP',
  2786. createFolderFromZip: 'Dossier par nom du ZIP',
  2787. stlThumbnailGeneration: 'Vignettes STL',
  2788. zipMayContainStl: 'Extraction vignettes possible pour STL.',
  2789. thumbnailsCanBeGenerated: 'Génération vignettes (peut être long).',
  2790. generateThumbnailsForStl: 'Générer vignettes STL',
  2791. threemfDetected: 'Fichiers 3MF détectés',
  2792. threemfExtractionInfo: 'Réglages extraits auto du 3MF.',
  2793. willBeExtracted: 'Sera extrait',
  2794. filesExtracted: '{{count}} fichiers extraits',
  2795. uploadComplete: 'Terminé : {{succeeded}} succès',
  2796. uploadFailed: 'Échec du téléversement',
  2797. zipFilesFailed: '{{count}} fichiers échoués',
  2798. uploading: 'Téléversement...',
  2799. changeLink: 'Modifier lien...',
  2800. linkTo: 'Lier à...',
  2801. linkToProjectOrArchive: 'Lier à projet ou archive',
  2802. addToQueue: 'Ajouter à la file',
  2803. schedulePrint: 'Planifier',
  2804. generateThumbnail: 'Générer vignette',
  2805. generateThumbnails: 'Générer vignettes',
  2806. generateThumbnailsForMissing: 'Vignettes STL manquantes',
  2807. gridView: 'Grille',
  2808. listView: 'Liste',
  2809. lowDiskSpaceWarning: 'Espace disque faible',
  2810. lowDiskSpaceDetails: '{{free}} libre sur {{total}}. Seuil : {{threshold}} Go.',
  2811. files: 'Fichiers',
  2812. folders: 'Dossiers',
  2813. size: 'Taille',
  2814. free: 'Libre',
  2815. allFiles: 'Tous les fichiers',
  2816. wrap: 'Retour ligne',
  2817. enableTextWrapping: 'Activer retour ligne',
  2818. disableTextWrapping: 'Désactiver retour ligne',
  2819. collapse: 'Réduire',
  2820. collapseFoldersByDefault: 'Réduire les dossiers par défaut',
  2821. expandFoldersByDefault: 'Développer les dossiers par défaut',
  2822. dragToResizeTooltip: 'Glisser pour redimensionner, double-clic reset',
  2823. searchFiles: 'Chercher fichiers...',
  2824. allTypes: 'Tous types',
  2825. prints: 'Impressions',
  2826. ascending: 'Croissant',
  2827. descending: 'Décroissant',
  2828. resultsCount: '{{showing}} sur {{total}} fichiers',
  2829. selectAll: 'Tout sélectionner',
  2830. deselectAll: 'Tout désélectionner',
  2831. selected: '{{count}} sélectionnés',
  2832. adding: 'Ajout...',
  2833. loadingFiles: 'Chargement...',
  2834. folderIsEmpty: 'Dossier vide',
  2835. noFilesYet: 'Aucun fichier',
  2836. folderEmptyDescription: 'Téléversez ou déplacez des fichiers ici.',
  2837. noFilesDescription: 'Téléversez des fichiers pour organiser.',
  2838. noMatchingFiles: 'Aucun fichier correspondant',
  2839. noMatchingFilesDescription: 'Ajustez votre recherche.',
  2840. clearFilters: 'Effacer filtres',
  2841. printedCount: 'Imprimé {{count}}x',
  2842. uploadedBy: 'Téléversé par',
  2843. deleteFolder: 'Supprimer dossier',
  2844. deleteFile: 'Supprimer fichier',
  2845. deleteFilesCount: 'Supprimer {{count}} fichiers',
  2846. deleteFolderConfirm: 'Supprimer le dossier et son contenu ?',
  2847. deleteFileConfirm: 'Supprimer ce fichier ?',
  2848. deleteFilesConfirm: 'Supprimer {{count}} fichiers définitivement ?',
  2849. deleting: 'Suppression...',
  2850. noPermissionRenameFolder: 'Pas d\'autorisation renommage',
  2851. noPermissionLinkFolder: 'Pas d\'autorisation lien',
  2852. noPermissionDeleteFolder: 'Pas d\'autorisation suppression dossier',
  2853. noPermissionPrint: 'Pas d\'autorisation impression',
  2854. noPermissionSlice: 'You do not have permission to slice files',
  2855. noPermissionAddToQueue: 'Pas d\'autorisation file',
  2856. noPermissionDownload: 'Pas d\'autorisation téléchargement',
  2857. noPermissionRenameFile: 'Pas d\'autorisation renommage fichier',
  2858. noPermissionGenerateThumbnail: 'Pas d\'autorisation vignettes',
  2859. noPermissionDeleteFile: 'Pas d\'autorisation suppression fichier',
  2860. noPermissionCreateFolder: 'Pas d\'autorisation nouveau dossier',
  2861. noPermissionUpload: 'Pas d\'autorisation téléversement',
  2862. noPermissionMoveFiles: 'Pas d\'autorisation déplacement',
  2863. noPermissionDeleteFiles: 'Pas d\'autorisation suppression groupée',
  2864. // External folder
  2865. linkExternal: 'Lier externe',
  2866. linkExternalFolder: 'Lier un dossier externe',
  2867. 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.',
  2868. externalFolderNamePlaceholder: 'ex. Impressions NAS',
  2869. externalPath: 'Chemin hôte',
  2870. externalPathHelp: 'Chemin absolu du répertoire sur l\'hôte Docker. Doit être monté en bind dans le conteneur.',
  2871. readOnly: 'Lecture seule',
  2872. readOnlyHelp: 'empêche les téléversements et suppressions',
  2873. showHiddenFiles: 'Afficher les fichiers cachés (fichiers point)',
  2874. externalFolder: 'Dossier externe',
  2875. scanFolder: 'Scanner',
  2876. toast: {
  2877. folderCreated: 'Dossier créé',
  2878. folderDeleted: 'Dossier supprimé',
  2879. fileDeleted: 'Fichier supprimé',
  2880. filesDeleted: '{{count}} fichiers supprimés',
  2881. filesMoved: 'Fichiers déplacés',
  2882. folderLinked: 'Dossier lié',
  2883. folderUnlinked: 'Dossier délié',
  2884. externalFolderLinked: 'Dossier externe lié et scanné',
  2885. folderScanned: 'Scan terminé : {{added}} ajoutés, {{removed}} supprimés',
  2886. addedToQueue: '{{count}} fichier(s) ajouté(s)',
  2887. addedToQueuePartial: '{{added}} ajoutés, {{failed}} échecs',
  2888. failedToAddToQueue: 'Échec ajout file : {{error}}',
  2889. fileRenamed: 'Fichier renommé',
  2890. folderRenamed: 'Dossier renommé',
  2891. thumbnailsGenerated: '{{count}} vignette(s) générée(s)',
  2892. thumbnailsGeneratedPartial: '{{succeeded}} succès, {{failed}} échecs',
  2893. noStlMissingThumbnails: 'Aucun STL sans vignette',
  2894. failedToGenerateThumbnails: 'Échec vignettes : {{error}}',
  2895. thumbnailGenerated: 'Vignette générée',
  2896. failedToGenerateThumbnail: 'Échec vignette : {{error}}',
  2897. },
  2898. },
  2899. // Projects
  2900. projects: {
  2901. title: 'Projets',
  2902. subtitle: 'Suivez vos projets d\'impression 3D',
  2903. newProject: 'Nouveau Projet',
  2904. editProject: 'Modifier Projet',
  2905. deleteProject: 'Supprimer Projet',
  2906. projectName: 'Nom du Projet',
  2907. description: 'Description',
  2908. noProjects: 'Aucun projet',
  2909. noProjectsFiltered: 'Aucun projet {{status}}',
  2910. noProjectsFilteredHelp: 'Les projets apparaîtront ici quand leur statut changera.',
  2911. createFirst: 'Créez votre premier projet pour organiser vos builds.',
  2912. createFirstButton: 'Créer votre premier projet',
  2913. create: 'Créer',
  2914. files: 'Fichiers',
  2915. prints: 'Impressions',
  2916. plates: 'plateaux',
  2917. parts: 'pièces',
  2918. lastModified: 'Modifié le',
  2919. deleteConfirm: 'Supprimer ce projet ? Les archives seront déliées mais conservées.',
  2920. addFiles: 'Ajouter fichiers',
  2921. removeFile: 'Retirer fichier',
  2922. viewDetails: 'Détails',
  2923. // Modal fields
  2924. namePlaceholder: 'ex: Build Voron 2.4',
  2925. descriptionPlaceholder: 'Description optionnelle...',
  2926. color: 'Couleur',
  2927. targetPlates: 'Plateaux cibles',
  2928. targetPlatesPlaceholder: 'ex: 25',
  2929. targetPlatesHelp: 'Nombre total de jobs',
  2930. targetParts: 'Pièces cibles',
  2931. targetPartsPlaceholder: 'ex: 150',
  2932. targetPartsHelp: 'Nombre total d\'objets',
  2933. tagsLabel: 'Tags (séparés par virgules)',
  2934. tagsPlaceholder: 'ex: voron, cadeau',
  2935. dueDate: 'Échéance',
  2936. priority: 'Priorité',
  2937. priorityLow: 'Basse',
  2938. priorityNormal: 'Normale',
  2939. priorityHigh: 'Haute',
  2940. priorityUrgent: 'Urgente',
  2941. // Status
  2942. statusActive: 'Actif',
  2943. statusCompleted: 'Terminé',
  2944. statusArchived: 'Archivé',
  2945. done: 'Fait',
  2946. completed: 'terminé',
  2947. failed: 'échoué',
  2948. inQueue: 'en file',
  2949. noPrintsYet: 'Aucune impression',
  2950. // Footer stats
  2951. printJobs: 'Jobs (plateaux)',
  2952. partsPrinted: 'Pièces imprimées',
  2953. failedParts: 'Pièces échouées',
  2954. // Actions
  2955. import: 'Importer',
  2956. export: 'Exporter',
  2957. importProject: 'Importer projet',
  2958. exportAll: 'Exporter tous les projets',
  2959. loading: 'Chargement des projets...',
  2960. // Permissions
  2961. noEditPermission: 'Pas d\'autorisation de modification',
  2962. noDeletePermission: 'Pas d\'autorisation de suppression',
  2963. noCreatePermission: 'Pas d\'autorisation de création',
  2964. noImportPermission: 'Pas d\'autorisation d\'import',
  2965. noExportPermission: 'Pas d\'autorisation d\'export',
  2966. // Toast
  2967. toast: {
  2968. created: 'Projet créé',
  2969. updated: 'Projet mis à jour',
  2970. deleted: 'Projet supprimé',
  2971. imported: 'Projet importé',
  2972. multipleImported: '{{count}} projets importés',
  2973. importFailed: 'Échec d\'import',
  2974. exported: 'Projets exportés (métadonnées)',
  2975. },
  2976. },
  2977. // Project detail page
  2978. projectDetail: {
  2979. notFound: 'Projet non trouvé',
  2980. backToProjects: 'Retour aux Projets',
  2981. export: 'Exporter',
  2982. exportProject: 'Exporter projet',
  2983. noExportPermission: 'Pas d\'autorisation export',
  2984. noEditPermission: 'Pas d\'autorisation modification',
  2985. partOf: 'Fait partie de :',
  2986. priorityLabel: 'Priorité :',
  2987. noPrints: 'Aucune impression dans ce projet',
  2988. status: {
  2989. active: 'Actif',
  2990. completed: 'Terminé',
  2991. archived: 'Archivé',
  2992. },
  2993. priority: {
  2994. low: 'Basse',
  2995. normal: 'Normale',
  2996. high: 'Haute',
  2997. urgent: 'Urgente',
  2998. },
  2999. dueDate: {
  3000. overdue: 'En retard',
  3001. today: 'Aujourd\'hui',
  3002. daysLeft: '{{count}} jours restants',
  3003. },
  3004. progress: {
  3005. platesProgress: 'Progression Plateaux',
  3006. partsProgress: 'Progression Pièces',
  3007. printJobs: 'jobs d\'impression',
  3008. parts: 'pièces',
  3009. percentComplete: '{{percent}}% terminé',
  3010. remaining: '{{count}} restant(s)',
  3011. },
  3012. stats: {
  3013. printJobs: 'Jobs d\'Impression',
  3014. total: 'total',
  3015. failed: '{{count}} échecs',
  3016. partsPrinted: '{{count}} pièces imprimées',
  3017. printTime: 'Temps d\'Impression',
  3018. filamentUsed: 'Filament utilisé',
  3019. },
  3020. cost: {
  3021. title: 'Suivi des coûts',
  3022. filamentCost: 'Coût Filament',
  3023. energy: 'Énergie',
  3024. totalCost: 'Coût Total',
  3025. total: 'Total',
  3026. includesBom: 'BOM incluse',
  3027. budget: 'Budget',
  3028. remaining: 'Restant',
  3029. },
  3030. subProjects: {
  3031. title: 'Sous-projets ({{count}})',
  3032. },
  3033. notes: {
  3034. title: 'Notes',
  3035. noEditPermission: 'Pas d\'autorisation modification',
  3036. placeholder: 'Ajouter des notes...',
  3037. empty: 'Aucune note. Cliquez sur modifier.',
  3038. },
  3039. files: {
  3040. title: 'Fichiers',
  3041. linkFolders: 'Liez des dossiers depuis le gestionnaire',
  3042. forQuickAccess: 'pour un accès rapide.',
  3043. fileCount: '{{count}} fichier(s)',
  3044. empty: 'Aucun dossier lié.',
  3045. noFiles: 'Aucun fichier dans ce dossier.',
  3046. print: 'Imprimer maintenant',
  3047. addToQueue: 'Ajouter à la file',
  3048. },
  3049. bom: {
  3050. title: 'BOM (Liste matériel)',
  3051. acquired: '{{completed}}/{{total}} acquis',
  3052. showAll: 'Tout afficher',
  3053. hideDone: 'Masquer acquis',
  3054. addPart: 'Ajouter matériel',
  3055. noAddPermission: 'Pas d\'autorisation ajout',
  3056. partNamePlaceholder: 'Nom (ex: Vis M3x8)',
  3057. partName: 'Nom de pièce',
  3058. qty: 'Qté',
  3059. price: 'Prix ({{currency}})',
  3060. sourcingUrlPlaceholder: 'Lien d\'achat (optionnel)',
  3061. remarksPlaceholder: 'Remarques (optionnel)',
  3062. deletePart: 'Supprimer pièce',
  3063. deleteConfirm: 'Supprimer "{{name}}" ?',
  3064. noUpdatePermission: 'Pas d\'autorisation mise à jour',
  3065. noEditPermission: 'Pas d\'autorisation modification',
  3066. noDeletePermission: 'Pas d\'autorisation suppression',
  3067. totalCost: 'Coût total :',
  3068. empty: 'BOM vide. Ajoutez du matériel ou de l\'électronique.',
  3069. },
  3070. timeline: {
  3071. title: 'Historique d\'activité',
  3072. empty: 'Aucune activité.',
  3073. },
  3074. template: {
  3075. saveAsTemplate: 'Enregistrer comme modèle',
  3076. noCreatePermission: 'Pas d\'autorisation modèle',
  3077. },
  3078. queue: {
  3079. title: 'File d\'attente',
  3080. viewAll: 'Tout voir',
  3081. printing: '{{count}} en cours',
  3082. queued: '{{count}} en file',
  3083. },
  3084. prints: {
  3085. title: 'Impressions ({{count}})',
  3086. },
  3087. toast: {
  3088. projectUpdated: 'Projet mis à jour',
  3089. partAdded: 'Pièce ajoutée',
  3090. partRemoved: 'Pièce retirée',
  3091. exportFailed: 'Échec export',
  3092. projectExported: 'Projet exporté',
  3093. templateCreated: 'Modèle créé',
  3094. },
  3095. },
  3096. // System info
  3097. system: {
  3098. title: 'Informations Système',
  3099. version: 'Version',
  3100. uptime: 'Temps de fonctionnement',
  3101. cpuUsage: 'Utilisation CPU',
  3102. memoryUsage: 'Utilisation RAM',
  3103. diskUsage: 'Utilisation Disque',
  3104. networkInfo: 'Infos Réseau',
  3105. logs: 'Journaux',
  3106. debugMode: 'Mode Débogage',
  3107. enableDebug: 'Activer débogage',
  3108. disableDebug: 'Désactiver débogage',
  3109. downloadLogs: 'Télécharger logs',
  3110. clearLogs: 'Effacer logs',
  3111. dockerInfo: 'Infos Docker',
  3112. containerName: 'Nom conteneur',
  3113. imageName: 'Nom image',
  3114. platform: 'Plateforme',
  3115. architecture: 'Architecture',
  3116. },
  3117. // Library (K Profiles)
  3118. library: {
  3119. title: 'Bibliothèque Filament',
  3120. addFilament: 'Ajouter Filament',
  3121. editFilament: 'Modifier Filament',
  3122. deleteFilament: 'Supprimer Filament',
  3123. vendor: 'Vendeur',
  3124. material: 'Matériau',
  3125. color: 'Couleur',
  3126. kFactor: 'Facteur K',
  3127. temperature: 'Température',
  3128. noFilaments: 'Bibliothèque vide',
  3129. deleteConfirm: 'Supprimer ce filament ?',
  3130. importFromPrinter: 'Importer de l\'imprimante',
  3131. exportToFile: 'Exporter vers fichier',
  3132. },
  3133. // Slice (slicer-API integration via SliceModal)
  3134. slice: {
  3135. title: 'Slice model',
  3136. action: 'Slice',
  3137. slicing: 'Slicing…',
  3138. printer: 'Printer profile',
  3139. process: 'Process profile',
  3140. filament: 'Filament profile',
  3141. filamentSlot: 'Filament {{index}} ({{type}})',
  3142. selectPreset: '— Select a preset —',
  3143. loadingPresets: 'Loading presets…',
  3144. analyzingPlateFilaments: 'Analyzing plate filaments…',
  3145. analyzingPlateFilamentsHint: 'Running a preview slice to discover which AMS slots this plate uses. Cached after — re-opening is instant.',
  3146. notUsedByPlate: '— not used by this plate',
  3147. printerMismatch: 'This 3MF was sliced for {{source}}, but you picked {{target}}. The slicer CLI cannot re-slice a 3MF for a different printer — open the source in Bambu Studio, change the printer, and re-export.',
  3148. noPresetsForSlot: 'No presets available',
  3149. presetsLoadFailed: 'Failed to load presets. Open Settings → Profiles to import them first.',
  3150. allPresetsRequired: 'All presets must be selected',
  3151. enqueuing: 'Submitting slice job…',
  3152. queued: 'Queued…',
  3153. failed: 'Slicing failed. Check the slicer sidecar logs.',
  3154. startedToast: 'Slicing {{name}} in the background…',
  3155. queuedToast: 'Queued: {{name}} — {{elapsed}}',
  3156. runningToast: 'Slicing {{name}} — {{elapsed}}',
  3157. completedToast: 'Sliced {{name}}',
  3158. failedToast: 'Slicing {{name}} failed: {{detail}}',
  3159. tier: {
  3160. local: 'Imported',
  3161. cloud: 'Cloud',
  3162. standard: 'Standard',
  3163. },
  3164. cloud: {
  3165. notAuthenticated: 'Sign in to Bambu Cloud (Settings → Profiles → Cloud) to see your cloud presets.',
  3166. expired: 'Bambu Cloud session expired — sign in again to refresh your cloud presets.',
  3167. unreachable: 'Bambu Cloud is unreachable right now. Local and standard presets still work.',
  3168. },
  3169. },
  3170. // Spoolman
  3171. spoolman: {
  3172. title: 'Intégration Spoolman',
  3173. enabled: 'Spoolman Activé',
  3174. url: 'URL Spoolman',
  3175. connected: 'Connecté',
  3176. disconnected: 'Non Connecté',
  3177. testConnection: 'Tester connexion',
  3178. sync: 'Synchroniser',
  3179. syncing: 'Sync...',
  3180. lastSync: 'Dernière Sync',
  3181. linkToSpoolman: 'Lier à Spoolman',
  3182. openInSpoolman: 'Ouvrir Spoolman',
  3183. unlinkSpool: 'Délier bobine',
  3184. unlinkConfirmTitle: 'Dissocier la bobine?',
  3185. unlinkConfirmMessage: 'Cette opération déconnectera la bobine de Spoolman. Les données de la bobine dans Spoolman resteront inchangées.',
  3186. selectSpool: 'Choisir bobine',
  3187. noUnlinkedSpools: 'Pas de bobine libre',
  3188. linkSuccess: 'Lien réussi',
  3189. linkFailed: 'Échec lien',
  3190. unlinkSuccess: 'Bobine dissociée avec succès',
  3191. unlinkFailed: 'Échec de la dissociation de la bobine',
  3192. spoolId: 'ID Bobine',
  3193. fillSourceLabel: '(Spoolman)',
  3194. weight: 'Poids',
  3195. remaining: 'Restant',
  3196. disableWeightSync: 'Désactiver Sync poids estimé AMS',
  3197. disableWeightSyncDesc: 'Ne pas utiliser les estimations AMS. Utile si vous préférez le suivi Spoolman.',
  3198. reportPartialUsage: 'Rapporter consommation partielle pour échecs',
  3199. reportPartialUsageDesc: 'Si l\'impression échoue, rapporte le filament consommé selon les couches.',
  3200. },
  3201. // Inventory
  3202. inventory: {
  3203. title: 'Inventaire de Bobines',
  3204. spoolmanMixedContentTitle: 'Spoolman ne peut pas se charger en HTTPS — contenu mixte bloqué par votre navigateur',
  3205. 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.',
  3206. 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.',
  3207. 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.',
  3208. spoolmanOpenInNewTab: 'Ouvrir Spoolman dans un nouvel onglet',
  3209. addSpool: 'Ajouter Bobine',
  3210. editSpool: 'Modifier Bobine',
  3211. material: 'Matériau',
  3212. selectMaterial: 'Choisir matériau...',
  3213. subtype: 'Sous-type',
  3214. brand: 'Marque',
  3215. searchBrand: 'Chercher marque...',
  3216. useCustomBrand: 'Utiliser "{{brand}}"',
  3217. useCustomMaterial: 'Utiliser un matériau personnalisé : {{material}}',
  3218. colorName: 'Nom de couleur',
  3219. colorNamePlaceholder: 'Jade White, Fire Red...',
  3220. color: 'Couleur',
  3221. hexColor: 'Code Hex',
  3222. pickColor: 'Choisir couleur perso',
  3223. labelWeight: 'Poids net',
  3224. coreWeight: 'Poids bobine vide',
  3225. searchSpoolWeight: 'Chercher poids bobine...',
  3226. weightUsed: 'Consommé',
  3227. currentWeight: 'Poids restant',
  3228. measuredWeight: 'Poids mesuré',
  3229. spoolName: 'Bobine',
  3230. costPerKg: 'Coût par kg',
  3231. measuredWeightError: 'Le poids mesuré doit être entre {{min}}g et {{max}}g.',
  3232. slicerFilament: 'Filament Slicer',
  3233. slicerFilamentName: 'Nom du Preset Slicer',
  3234. slicerPreset: 'Preset Slicer',
  3235. searchPresets: 'Chercher presets...',
  3236. selectedPreset: 'Sélectionné',
  3237. noPresetsFound: 'Aucun preset trouvé',
  3238. tempOverrides: 'Exceptions Température',
  3239. note: 'Note',
  3240. notePlaceholder: 'Notes additionnelles sur cette bobine...',
  3241. // Per-spool category + low-stock threshold override (#729)
  3242. category: 'Catégorie',
  3243. categoryPlaceholder: 'ex. Production, Prototype, Client A',
  3244. categoryNone: 'Sans catégorie',
  3245. lowStockThresholdOverride: 'Seuil bas (cette bobine)',
  3246. lowStockThresholdOverrideHelp: 'Laisser vide pour utiliser le seuil global ({{global}} %).',
  3247. clearRfid: 'Effacer le tag RFID',
  3248. rfidCleared: 'Tag RFID effacé',
  3249. archive: 'Archiver',
  3250. restore: 'Restaurer',
  3251. noSpools: 'Aucune bobine. Ajoutez votre première bobine pour commencer.',
  3252. noAvailableSpools: 'Aucune bobine disponible. Ajoutez une bobine à votre inventaire ou désaffectez-en une d\'un autre emplacement.',
  3253. kProfiles: 'K-Profiles',
  3254. addKProfile: 'Ajouter K-Profile',
  3255. assignSpool: 'Assigner Bobine',
  3256. unassignSpool: 'Désassigner',
  3257. assignSuccess: 'Bobine assignée et slot AMS configuré',
  3258. assignFailed: 'Échec assignation',
  3259. selectSpool: 'Choisir une bobine pour ce slot',
  3260. assigned: 'Assigné',
  3261. assigning: 'Assignation...',
  3262. searchSpools: 'Chercher bobines...',
  3263. showAllSpools: 'Afficher toutes les bobines',
  3264. allMaterials: 'Tous Matériaux',
  3265. filterByBrand: 'Filtrer par marque...',
  3266. showArchived: 'Afficher archivées',
  3267. quickAdd: 'Ajout rapide (Stock)',
  3268. quantity: 'Quantité',
  3269. stock: 'Stock',
  3270. configured: 'Configuré',
  3271. spoolsCreated: '{{count}} bobines créées',
  3272. spoolCreated: 'Bobine créée',
  3273. spoolUpdated: 'Bobine mise à jour',
  3274. spoolDeleted: 'Bobine supprimée',
  3275. spoolArchived: 'Bobine archivée',
  3276. spoolRestored: 'Bobine restaurée',
  3277. deleteConfirm: 'Supprimer définitivement cette bobine ?',
  3278. archiveConfirm: 'Voulez-vous vraiment archiver cette bobine ?',
  3279. advancedSettings: 'Paramètres Avancés',
  3280. // Tabs
  3281. filamentInfoTab: 'Infos Filament',
  3282. paProfileTab: 'Profil PA',
  3283. filamentInfo: 'Filament',
  3284. additional: 'Additionnel',
  3285. // Cloud
  3286. loadingPresets: 'Chargement des presets cloud...',
  3287. cloudConnected: 'Cloud connecté',
  3288. cloudNotConnected: 'Cloud déconnecté (valeurs par défaut)',
  3289. // Colors
  3290. recentColors: 'Récentes',
  3291. searchColors: 'Chercher couleurs...',
  3292. searchResults: 'Résultats',
  3293. allColors: 'Toutes',
  3294. commonColors: 'Communes',
  3295. showLess: 'Moins',
  3296. showAll: 'Toutes',
  3297. noColorsFound: 'Aucune couleur correspondante',
  3298. noResults: 'Aucun résultat',
  3299. // PA Profiles
  3300. selectMaterialFirst: 'Veuillez choisir un matériau dans l\'onglet Infos Filament.',
  3301. noPrintersConfigured: 'Ajoutez une imprimante pour utiliser les profils PA.',
  3302. matchingFilter: 'Correspondant',
  3303. anyBrand: 'Toute marque',
  3304. anyVariant: 'Toute variante',
  3305. autoSelect: 'Auto-sélection',
  3306. matches: 'correspondances',
  3307. match: 'correspondance',
  3308. noMatches: 'Aucune correspondance',
  3309. connected: 'Connecté',
  3310. offline: 'Hors ligne',
  3311. printerOffline: 'Imprimante hors ligne. Connectez-vous pour voir les profils.',
  3312. noKProfilesMatch: 'Aucun profil K ne correspond au filament.',
  3313. leftNozzle: 'Buse Gauche',
  3314. rightNozzle: 'Buse Droite',
  3315. profilesSelected: 'profil(s) de calibration sélectionné(s)',
  3316. // Stats & enhanced table
  3317. totalInventory: 'Total Inventaire',
  3318. totalConsumed: 'Total Consommé',
  3319. byMaterial: 'Par Matériau',
  3320. inPrinter: 'Dans Imprimante',
  3321. lowStock: 'Stock Bas',
  3322. sinceTracking: 'Depuis le début du suivi',
  3323. loadedInAms: 'Chargé dans AMS/Ext',
  3324. remaining: 'Restant',
  3325. weightCheck: 'Vérification poids',
  3326. lastWeighed: 'Dernière pesée',
  3327. neverWeighed: 'Jamais pesé',
  3328. search: 'Chercher bobines...',
  3329. showing: 'Affichage',
  3330. to: 'à',
  3331. of: 'sur',
  3332. show: 'Voir',
  3333. spools: 'bobines',
  3334. spool: 'bobine',
  3335. page: 'Page',
  3336. noSpoolsMatch: 'Aucun résultat trouvé',
  3337. noSpoolsMatchDesc: 'Ajustez votre recherche ou vos filtres.',
  3338. active: 'Actif',
  3339. archived: 'Archivé',
  3340. all: 'Tous',
  3341. used: 'Occasion',
  3342. new: 'Neuf',
  3343. clearFilters: 'Effacer filtres',
  3344. table: 'Tableau',
  3345. cards: 'Cartes',
  3346. net: 'Net',
  3347. // Grouping
  3348. groupSimilar: 'Grouper',
  3349. groupedSpools: '{{count}} bobines identiques',
  3350. groupedRows: 'lignes',
  3351. // Column config
  3352. columns: 'Colonnes',
  3353. configureColumns: 'Configurer Colonnes',
  3354. configureColumnsDesc: 'Glissez pour ordonner ou utilisez les flèches. Cliquez sur l\'œil pour masquer.',
  3355. visible: 'visible',
  3356. reset: 'Reset',
  3357. cancel: 'Annuler',
  3358. applyChanges: 'Appliquer',
  3359. moveUp: 'Monter',
  3360. moveDown: 'Descendre',
  3361. hideColumn: 'Masquer',
  3362. showColumn: 'Afficher',
  3363. // Tag linking
  3364. linkToSpool: 'Lier à une Bobine',
  3365. tagLinked: 'Tag lié à la bobine',
  3366. tagLinkFailed: 'Échec lien tag',
  3367. tagAlreadyLinked: 'Tag déjà lié à une autre bobine',
  3368. unknownTag: 'Tag RFID inconnu détecté',
  3369. // Usage history
  3370. usageHistory: 'Historique de Consommation',
  3371. noUsageHistory: 'Aucune consommation enregistrée',
  3372. printName: 'Nom Impression',
  3373. weightConsumed: 'Poids consommé',
  3374. clearHistory: 'Effacer',
  3375. historyCleared: 'Historique effacé',
  3376. fillSourceLabel: '(Inv)',
  3377. lowStockThresholdError: 'Le seuil doit être compris entre 0.1 et 99.9',
  3378. assignMismatchTitle: 'Incompatibilité de matériau',
  3379. 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 ?',
  3380. assignMismatchConfirm: 'Assigner quand même',
  3381. assignPartialMismatchMessage: 'Le matériau de la bobine "{{spoolMaterial}}" est similaire, mais ne correspond pas exactement à "{{trayMaterial}}" dans {{location}}. Voulez-vous continuer ?',
  3382. assignProfileMismatchMessage: 'Le profil de la bobine "{{spoolProfile}}" ne correspond pas au profil du plateau "{{trayProfile}}" dans {{location}}. Voulez-vous continuer ?',
  3383. },
  3384. // Timelapse
  3385. timelapse: {
  3386. title: 'Timelapse',
  3387. create: 'Créer Timelapse',
  3388. download: 'Télécharger',
  3389. delete: 'Supprimer',
  3390. preview: 'Aperçu',
  3391. frameRate: 'Images/sec',
  3392. quality: 'Qualité',
  3393. processing: 'Traitement...',
  3394. noTimelapses: 'Aucun timelapse',
  3395. },
  3396. // AMS
  3397. ams: {
  3398. title: 'AMS',
  3399. slot: 'Slot',
  3400. empty: 'Vide',
  3401. emptySlot: 'Slot vide',
  3402. unknown: 'Inconnu',
  3403. humidity: 'Humidité',
  3404. temperature: 'Température',
  3405. filamentType: 'Type filament',
  3406. filamentColor: 'Couleur',
  3407. remaining: 'Restant',
  3408. history: 'Historique AMS',
  3409. noHistory: 'Aucun historique',
  3410. configureSlot: 'Configurer Slot',
  3411. externalSpool: 'Bobine externe',
  3412. profile: 'Profil',
  3413. kFactor: 'Facteur K',
  3414. fill: 'Remplir',
  3415. configure: 'Configurer',
  3416. used: 'utilisé',
  3417. remainingUnit: 'restant',
  3418. },
  3419. // Print modal
  3420. printModal: {
  3421. title: 'Lancer l\'impression',
  3422. selectPrinter: 'Choisir l\'imprimante',
  3423. selectPlate: 'Choisir le plateau',
  3424. filamentMapping: 'Mapping Filament',
  3425. totalCost: 'Coût total :',
  3426. slotRemainingShort: ' - {{grams}}g rest.',
  3427. printSettings: 'Réglages d\'impression',
  3428. bedLeveling: 'Nivellement plateau',
  3429. flowCalibration: 'Calibration débit',
  3430. vibrationCalibration: 'Vibration (Input Shaper)',
  3431. layerInspection: 'Inspection 1ère couche',
  3432. timelapse: 'Timelapse',
  3433. startPrint: 'Démarrer',
  3434. addToQueue: 'Ajouter à la file',
  3435. cancel: 'Annuler',
  3436. noPrintersAvailable: 'Aucune imprimante disponible',
  3437. printerBusy: 'L\'imprimante est occupée',
  3438. printerOffline: 'L\'imprimante est hors ligne',
  3439. sameTypeDifferentColor: 'Même type, couleur différente',
  3440. filamentTypeNotLoaded: 'Type de filament non chargé',
  3441. openCalendar: 'Ouvrir calendrier',
  3442. leftNozzle: 'G',
  3443. rightNozzle: 'D',
  3444. leftNozzleTooltip: 'Buse gauche',
  3445. rightNozzleTooltip: 'Buse droite',
  3446. filamentOverride: 'Remplacement de filament',
  3447. 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.',
  3448. originalFilament: 'Original',
  3449. overrideWith: 'Remplacer par',
  3450. resetToOriginal: 'Revenir à l\'original',
  3451. insufficientFilamentTitle: 'Filament insuffisant',
  3452. insufficientFilamentMessage: 'Certaines bobines assignées ont moins de filament restant que nécessaire pour cette impression :',
  3453. insufficientFilamentLine: '{{printer}} - {{slot}} : nécessite {{required}}g, restant {{remaining}}g',
  3454. printAnyway: 'Imprimer quand même',
  3455. forceColorMatch: 'Forcer correspondance des couleurs',
  3456. staggerPrinterStarts: 'Stagger printer starts',
  3457. staggerGroupSize: 'Group size',
  3458. staggerInterval: 'Interval (min)',
  3459. staggerPreview: '{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min',
  3460. staggerLastGroup: 'last group: {{count}}',
  3461. staggerTotal: 'total: {{minutes}} min',
  3462. staggerToPrinters: 'Échelonner sur {{count}} imprimantes',
  3463. gcodeInjection: 'Injecter le G-code auto-impression',
  3464. },
  3465. // Backup
  3466. backup: {
  3467. title: 'Sauvegarde & Restauration',
  3468. createBackup: 'Créer Sauvegarde',
  3469. restoreBackup: 'Restaurer Sauvegarde',
  3470. restoreDescription: 'Remplace les données par un fichier de sauvegarde',
  3471. downloadBackup: 'Télécharger Sauvegarde',
  3472. uploadBackup: 'Téléverser Sauvegarde',
  3473. lastBackup: 'Dernière sauvegarde',
  3474. autoBackup: 'Sauvegarde auto',
  3475. backupNow: 'Sauvegarder maintenant',
  3476. restoreWarning: 'Attention : Écrase TOUTES les données actuelles.',
  3477. includeArchives: 'Inclure Archives',
  3478. includeSettings: 'Inclure Paramètres',
  3479. includeProfiles: 'Inclure Profils',
  3480. backupSuccess: 'Sauvegarde réussie',
  3481. restoreSuccess: 'Restauration réussie',
  3482. backupFailed: 'Échec sauvegarde',
  3483. restoreFailed: 'Échec restauration',
  3484. restoreNote: 'L\'imprimante virtuelle sera arrêtée pendant la restauration',
  3485. // GitHub Backup
  3486. githubBackup: 'Sauvegarde GitHub',
  3487. enabled: 'Activé',
  3488. cloudLoginRequired: 'Connexion Bambu Cloud requise. Connectez-vous sous Profils → Profils Cloud pour activer la sauvegarde GitHub.',
  3489. cloudLoginRequiredShort: 'Connexion Cloud requise',
  3490. githubDescription: 'Synchronisez automatiquement vos profils vers un dépôt GitHub privé pour la sauvegarde et l\'historique des versions.',
  3491. repositoryUrl: 'URL du dépôt',
  3492. personalAccessToken: 'Jeton d\'accès personnel',
  3493. tokenSaved: '(enregistré)',
  3494. enterNewToken: 'Entrez un nouveau jeton pour mettre à jour',
  3495. tokenHint: 'Jeton à granularité fine avec permission de lecture/écriture du contenu',
  3496. branch: 'Branche',
  3497. manualOnly: 'Manuel uniquement',
  3498. hourly: 'Toutes les heures',
  3499. daily: 'Quotidien',
  3500. weekly: 'Hebdomadaire',
  3501. includeInBackup: 'Inclure dans la sauvegarde',
  3502. kProfiles: 'K-Profils',
  3503. kProfilesDescription: 'Calibration de l\'avance de pression des imprimantes connectées',
  3504. noPrintersConnected: 'Aucune imprimante connectée',
  3505. printersConnected: '{{connected}}/{{total}} connectées',
  3506. cloudProfiles: 'Profils Cloud',
  3507. cloudProfilesDescription: 'Préréglages de filament, imprimante et processus depuis Bambu Cloud',
  3508. appSettings: 'Paramètres de l\'application',
  3509. appSettingsDescription: 'Configuration Bambuddy (base de données complète)',
  3510. spoolInventory: 'Inventaire des bobines',
  3511. spoolInventoryDescription: 'Bobines de filament, historique d\'utilisation et suivi des coûts',
  3512. printArchives: 'Archives d\'impression',
  3513. printArchivesDescription: 'Métadonnées de l\'historique d\'impression (pas de fichiers gcode/3MF)',
  3514. lastBackupAt: 'Dernière sauvegarde :',
  3515. noBackupsYet: 'Aucune sauvegarde pour l\'instant',
  3516. next: 'Prochaine :',
  3517. startingBackup: 'Démarrage de la sauvegarde...',
  3518. test: 'Tester',
  3519. enableBackup: 'Activer la sauvegarde',
  3520. testConnection: 'Tester la connexion',
  3521. enterRepoUrl: 'Entrez l\'URL du dépôt',
  3522. enterRepoAndToken: 'Entrez l\'URL du dépôt et le jeton d\'accès',
  3523. repoRequired: 'L\'URL du dépôt est requise',
  3524. tokenRequired: 'Le jeton d\'accès est requis',
  3525. githubBackupEnabled: 'Sauvegarde GitHub activée',
  3526. tokenUpdated: 'Jeton mis à jour',
  3527. settingsSaved: 'Paramètres enregistrés',
  3528. failedToSave: 'Échec de l\'enregistrement : {{message}}',
  3529. backupCompleteFiles: 'Sauvegarde terminée - {{count}} fichiers mis à jour',
  3530. backupSkippedNoChanges: 'Sauvegarde ignorée - aucun changement',
  3531. backupFailed2: 'Échec de la sauvegarde : {{message}}',
  3532. clearedLogs: '{{count}} journaux supprimés',
  3533. failedToClearLogs: 'Échec de la suppression des journaux : {{message}}',
  3534. // History
  3535. history: 'Historique',
  3536. clear: 'Effacer',
  3537. date: 'Date',
  3538. status: 'Statut',
  3539. commit: 'Commit',
  3540. // Local Backup
  3541. localBackup: 'Sauvegarde locale',
  3542. 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.',
  3543. downloadBackupLabel: 'Télécharger la sauvegarde',
  3544. completeBackupZip: 'Sauvegarde complète : base de données + tous les fichiers (ZIP)',
  3545. download: 'Télécharger',
  3546. preparingBackup: 'Préparation de la sauvegarde...',
  3547. creatingArchive: 'Création de l\'archive de sauvegarde... Cela peut prendre un moment pour les archives volumineuses.',
  3548. downloadingFile: 'Téléchargement du fichier de sauvegarde...',
  3549. backupDownloaded: 'Sauvegarde téléchargée avec succès',
  3550. failedToCreateBackup: 'Échec de la création de la sauvegarde : {{message}}',
  3551. restore: 'Restaurer',
  3552. restoreReplacesAll: 'La restauration remplace toutes les données.',
  3553. 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.',
  3554. restoreConfirmTitle: 'Restaurer la sauvegarde',
  3555. 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.',
  3556. restoreConfirmButton: 'Restaurer la sauvegarde',
  3557. uploadingFile: 'Téléchargement du fichier de sauvegarde...',
  3558. backupRestoredRestart: 'Sauvegarde restaurée. Veuillez redémarrer Bambuddy.',
  3559. failedToRestore: 'Échec de la restauration. Veuillez vérifier le format du fichier.',
  3560. reloadNow: 'Recharger maintenant',
  3561. creatingBackup: 'Création de la sauvegarde',
  3562. restoringBackup: 'Restauration de la sauvegarde',
  3563. preparing: 'Préparation...',
  3564. processing: 'Traitement...',
  3565. doNotClosePage: 'Veuillez ne pas fermer cette page ni naviguer ailleurs. Cette opération peut prendre plusieurs minutes pour les sauvegardes volumineuses.',
  3566. // RestoreModal
  3567. restoring: 'Restauration...',
  3568. restoreComplete: 'Restauration terminée',
  3569. restoreFailed2: 'Échec de la restauration',
  3570. importSettings: 'Importer les paramètres depuis un fichier de sauvegarde',
  3571. pleaseWaitRestoring: 'Veuillez patienter pendant la restauration de vos données',
  3572. selectBackupFile: 'Cliquez pour sélectionner un fichier de sauvegarde (.json ou .zip)',
  3573. duplicateHandling: 'Comment fonctionne la gestion des doublons :',
  3574. matchPrinters: 'Imprimantes',
  3575. matchPrintersBy: 'correspondance par numéro de série',
  3576. matchSmartPlugs: 'Smart Plugs',
  3577. matchSmartPlugsBy: 'correspondance par adresse IP',
  3578. matchNotificationProviders: 'Fournisseurs de notifications',
  3579. matchNotificationProvidersBy: 'correspondance par nom',
  3580. matchFilaments: 'Filaments',
  3581. matchFilamentsBy: 'correspondance par nom + type + marque',
  3582. matchArchives: 'Archives',
  3583. matchArchivesBy: 'correspondance par hash de contenu (toujours ignoré)',
  3584. matchPendingUploads: 'Téléchargements en attente',
  3585. matchPendingUploadsBy: 'correspondance par nom de fichier',
  3586. matchSettingsTemplates: 'Paramètres et modèles',
  3587. matchSettingsTemplatesBy: 'toujours écrasés',
  3588. replaceExisting: 'Remplacer les données existantes',
  3589. keepExisting: 'Conserver les données existantes',
  3590. overwriteDescription: 'Écraser les éléments qui existent déjà avec les données de sauvegarde',
  3591. keepDescription: 'Restaurer uniquement les éléments qui n\'existent pas encore',
  3592. overwriteCaution: 'Attention :',
  3593. 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é.',
  3594. cancel: 'Annuler',
  3595. processingBackup: 'Traitement du fichier de sauvegarde...',
  3596. itemsRestored: 'Éléments restaurés',
  3597. itemsSkipped: 'Éléments ignorés',
  3598. restored: 'Restaurés',
  3599. skippedAlreadyExist: 'Ignorés (existent déjà)',
  3600. filesCategory: 'Fichiers (3MF, miniatures, etc.)',
  3601. andMore: '...et {{count}} de plus',
  3602. newApiKeysGenerated: 'Nouvelles clés API générées',
  3603. keysShownOnce: 'Ces clés ne sont affichées qu\'une seule fois. Copiez-les maintenant !',
  3604. copy: 'Copier',
  3605. noDataFound: 'Aucune donnée à restaurer n\'a été trouvée dans le fichier de sauvegarde.',
  3606. close: 'Fermer',
  3607. // Scheduled local backups (#884)
  3608. scheduledBackup: 'Scheduled Backups',
  3609. scheduledBackupDescription: 'Automatically create backup snapshots on a schedule. Output directory can be mounted to a NAS or external storage.',
  3610. frequency: 'Frequency',
  3611. backupTime: 'Time',
  3612. retention: 'Retention',
  3613. retentionDescription: 'Number of backups to keep',
  3614. outputPath: 'Output Path',
  3615. outputPathPlaceholder: 'Default: {{path}}',
  3616. outputPathDescription: 'Leave empty for default location',
  3617. runNow: 'Run Now',
  3618. backupFiles: 'Backup Files',
  3619. noScheduledBackups: 'No backups yet',
  3620. deleteBackup: 'Delete',
  3621. deleteBackupConfirm: 'Delete this backup file?',
  3622. backupRunning: 'Backup in progress...',
  3623. scheduledBackupComplete: 'Backup completed successfully',
  3624. scheduledBackupFailed: 'Backup failed',
  3625. nextBackup: 'Next backup',
  3626. backupSize: 'Size',
  3627. utc: 'UTC',
  3628. defaultPathLabel: 'Default:',
  3629. // Category labels
  3630. categories: {
  3631. settings: 'Paramètres',
  3632. notification_providers: 'Fournisseurs de notifications',
  3633. notification_templates: 'Modèles de notifications',
  3634. smart_plugs: 'Smart Plugs',
  3635. printers: 'Imprimantes',
  3636. filaments: 'Filaments',
  3637. maintenance_types: 'Types de maintenance',
  3638. archives: 'Archives',
  3639. projects: 'Projets',
  3640. pending_uploads: 'Téléchargements en attente',
  3641. external_links: 'Liens externes',
  3642. api_keys: 'Clés API',
  3643. },
  3644. },
  3645. // Tags
  3646. tags: {
  3647. title: 'Tags',
  3648. addTag: 'Ajouter Tag',
  3649. editTag: 'Modifier Tag',
  3650. deleteTag: 'Supprimer Tag',
  3651. tagName: 'Nom du Tag',
  3652. tagColor: 'Couleur du Tag',
  3653. noTags: 'Aucun tag',
  3654. deleteConfirm: 'Supprimer ce tag ?',
  3655. manageTags: 'Gérer les Tags',
  3656. },
  3657. // Upload modal (archives)
  3658. uploadModal: {
  3659. title: 'Téléverser des fichiers 3MF',
  3660. dragDrop: 'Glissez les fichiers .3mf ici',
  3661. or: 'ou',
  3662. browseFiles: 'Parcourir',
  3663. extractionInfo: 'Le modèle d\'imprimante est extrait des métadonnées 3MF.',
  3664. uploaded: 'téléversé',
  3665. failed: 'échoué',
  3666. uploading: 'En cours...',
  3667. upload: 'Téléverser',
  3668. uploadFailed: 'Échec du téléversement',
  3669. },
  3670. // Edit archive modal
  3671. // Edit Archive Modal
  3672. editArchive: {
  3673. title: 'Modifier l\'archive',
  3674. name: 'Nom',
  3675. namePlaceholder: 'Nom de l\'impression',
  3676. printer: 'Imprimante',
  3677. noPrinter: 'Aucune imprimante',
  3678. project: 'Projet',
  3679. noProject: 'Aucun projet',
  3680. itemsPrinted: 'Nombre de pièces',
  3681. itemsPrintedHelp: 'Nombre d\'objets produits',
  3682. notes: 'Notes',
  3683. notesPlaceholder: 'Notes sur l\'impression...',
  3684. externalLink: 'Lien externe',
  3685. externalLinkPlaceholder: 'https://...',
  3686. externalLinkHelp: 'Lien vers Printables, Thingiverse, etc.',
  3687. tags: 'Tags',
  3688. tagsPlaceholder: 'Ajouter des tags...',
  3689. addMoreTags: 'Plus de tags...',
  3690. matchingTags: 'Correspondant à "{{query}}"',
  3691. existingTags: 'Tags existants',
  3692. clickToAdd: '(cliquer pour ajouter)',
  3693. status: 'Statut',
  3694. failureReason: 'Raison de l\'échec',
  3695. selectReason: 'Choisir raison...',
  3696. photos: 'Photos du résultat',
  3697. photosHelp: 'Cliquez sur + pour ajouter des photos',
  3698. printResult: 'Résultat d\'impression',
  3699. saving: 'Enregistrement...',
  3700. // Failure reasons
  3701. failureReasons: {
  3702. adhesionFailure: 'Défaut d\'adhésion',
  3703. spaghettiDetached: 'Spaghetti / Détaché',
  3704. layerShift: 'Décalage de couche',
  3705. cloggedNozzle: 'Buse bouchée',
  3706. filamentRunout: 'Filament fini',
  3707. warping: 'Warping (Déformation)',
  3708. stringing: 'Stringing (Cheveux d\'ange)',
  3709. underExtrusion: 'Sous-extrusion',
  3710. powerFailure: 'Coupure courant',
  3711. userCancelled: 'Annulé par l\'utilisateur',
  3712. other: 'Autre',
  3713. },
  3714. // Archive statuses
  3715. statuses: {
  3716. completed: 'Réussie',
  3717. failed: 'Échouée',
  3718. aborted: 'Annulée',
  3719. printing: 'Impression',
  3720. },
  3721. },
  3722. // K-Profiles
  3723. kProfiles: {
  3724. title: 'K-Profiles',
  3725. noPrintersConfigured: 'Aucune imprimante configurée',
  3726. addPrinterInSettings: 'Ajoutez une imprimante pour gérer les K-profiles',
  3727. noActivePrinters: 'Aucune imprimante active',
  3728. enablePrinterConnection: 'Activez la connexion pour voir les K-profiles',
  3729. loadingProfiles: 'Chargement des K-Profiles...',
  3730. printerOffline: 'Imprimante hors ligne',
  3731. printerOfflineDesc: 'L\'imprimante doit être allumée.',
  3732. noMatchingProfiles: 'Aucun profil correspondant',
  3733. noMatchingProfilesDesc: 'Ajustez votre recherche',
  3734. noKProfiles: 'Aucun K-Profile',
  3735. noKProfilesDesc: 'Aucun profil trouvé pour une buse de {{diameter}}mm',
  3736. createFirstProfile: 'Créer le premier profil',
  3737. // Controls
  3738. printer: 'Imprimante',
  3739. nozzle: 'Buse',
  3740. refresh: 'Rafraîchir',
  3741. addProfile: 'Ajouter Profil',
  3742. export: 'Exporter',
  3743. import: 'Importer',
  3744. select: 'Choisir',
  3745. selectAll: 'Tout sélectionner',
  3746. delete: 'Supprimer',
  3747. // Filters
  3748. searchPlaceholder: 'Nom ou filament...',
  3749. allExtruders: 'Tous les extrudeurs',
  3750. leftOnly: 'Gauche uniquement',
  3751. rightOnly: 'Droite uniquement',
  3752. allFlow: 'Tout débit',
  3753. hfOnly: 'HF uniquement',
  3754. sOnly: 'S uniquement',
  3755. sortName: 'Tri : Nom',
  3756. sortKValue: 'Tri : Valeur K',
  3757. sortFilament: 'Tri : Filament',
  3758. // Dual extruder labels
  3759. leftExtruder: 'Extrudeur gauche',
  3760. rightExtruder: 'Extrudeur droit',
  3761. // Modal
  3762. modal: {
  3763. addTitle: 'Ajouter K-Profile',
  3764. editTitle: 'Modifier K-Profile',
  3765. profileName: 'Nom du profil',
  3766. profileNamePlaceholder: 'ex: Mon profil PLA',
  3767. kValue: 'Valeur K',
  3768. kValuePlaceholder: '0.020',
  3769. kValueHelp: 'Plage type : 0.01-0.06 (PLA), 0.02-0.10 (PETG)',
  3770. filament: 'Filament',
  3771. selectFilament: 'Choisir filament...',
  3772. noFilamentsHelp: 'Créez d\'abord un profil dans Bambu Studio.',
  3773. flowType: 'Type de débit',
  3774. highFlow: 'Haut Débit (HF)',
  3775. standard: 'Standard',
  3776. nozzleSize: 'Taille buse',
  3777. extruder: 'Extrudeur',
  3778. extruders: 'Extrudeurs',
  3779. left: 'Gauche',
  3780. right: 'Droite',
  3781. notes: 'Notes (locales)',
  3782. notesPlaceholder: 'Notes sur ce profil...',
  3783. notesHelp: 'Enregistré dans Bambuddy, pas sur l\'imprimante',
  3784. syncing: 'Sync avec l\'imprimante...',
  3785. savingExtruder: 'Sauvegarde extrudeur {{current}}/{{total}}...',
  3786. pleaseWait: 'Patientez...',
  3787. },
  3788. // Delete confirmation
  3789. deleteConfirm: {
  3790. title: 'Supprimer profil',
  3791. cannotUndo: 'Action irréversible',
  3792. message: 'Supprimer "{{name}}" de l\'imprimante ?',
  3793. },
  3794. // Bulk delete
  3795. bulkDelete: {
  3796. title: 'Supprimer les profils',
  3797. cannotUndo: 'Action irréversible',
  3798. message: 'Supprimer les {{count}} profils de l\'imprimante ?',
  3799. },
  3800. // Toast
  3801. toast: {
  3802. profileSaved: 'Profil K enregistré',
  3803. profilesSaved: 'Profil K enregistré sur {{count}} extrudeur(s)',
  3804. selectAtLeastOneExtruder: 'Sélectionnez un extrudeur',
  3805. profileDeleted: 'Profil K supprimé',
  3806. profilesDeleted: '{{count}} profils supprimés',
  3807. exportedProfiles: '{{count}} profils exportés',
  3808. importedProfiles: '{{count}} sur {{total}} profils importés',
  3809. noProfilesToExport: 'Rien à exporter',
  3810. invalidFileFormat: 'Format invalide',
  3811. failedToParseImport: 'Échec analyse fichier',
  3812. failedToSaveBatch: 'Échec enregistrement groupé',
  3813. noteSaved: 'Note enregistrée',
  3814. failedToSaveNote: 'Échec note',
  3815. },
  3816. // Permissions
  3817. permission: {
  3818. noRead: 'Pas d\'autorisation lecture',
  3819. noCreate: 'Pas d\'autorisation création',
  3820. noUpdate: 'Pas d\'autorisation mise à jour',
  3821. noDelete: 'Pas d\'autorisation suppression',
  3822. noExport: 'Pas d\'autorisation export',
  3823. noImport: 'Pas d\'autorisation import',
  3824. },
  3825. },
  3826. // Virtual Printer
  3827. virtualPrinter: {
  3828. title: 'Imprimante Virtuelle',
  3829. running: 'En cours',
  3830. stopped: 'Arrêtée',
  3831. description: {
  3832. default: 'Active une imprimante qui apparaît dans Bambu Studio. Les fichiers envoyés sont archivés sans impression.',
  3833. proxy: 'Active un proxy qui relaie le trafic vers une imprimante réelle, permettant l\'impression à distance.',
  3834. },
  3835. enable: {
  3836. title: 'Activer l\'imprimante virtuelle',
  3837. visibleInSlicer: 'Visible comme "Bambuddy" dans le Slicer',
  3838. proxyingTo: 'Proxy vers {{name}}',
  3839. notActive: 'Inactive',
  3840. },
  3841. model: {
  3842. title: 'Modèle d\'imprimante',
  3843. description: 'Choisissez le modèle à émuler.',
  3844. restartWarning: 'Changer le modèle redémarrera le service',
  3845. },
  3846. accessCode: {
  3847. title: 'Code d\'accès',
  3848. isSet: 'Code défini',
  3849. notSet: 'Code requis pour activer',
  3850. placeholder: 'Code 8 char',
  3851. placeholderChange: 'Entrez nouveau code',
  3852. hint: 'Exactement 8 caractères. Sert à l\'auth du Slicer.',
  3853. charCount: '({{count}}/8)',
  3854. },
  3855. targetPrinter: {
  3856. title: 'Imprimante cible',
  3857. configured: 'Cible configurée',
  3858. notConfigured: 'Imprimante requise pour mode Proxy',
  3859. placeholder: 'Choisir imprimante...',
  3860. hint: 'L\'imprimante doit être en mode LAN.',
  3861. noPrinters: 'Ajoutez une imprimante réelle d\'abord.',
  3862. },
  3863. remoteInterface: {
  3864. title: 'Exception Interface Réseau',
  3865. configured: 'Override actif',
  3866. optional: 'Optionnel - si IP auto est fausse (VPN, Docker, multi-NIC).',
  3867. placeholder: 'Auto (défaut)...',
  3868. hint: 'Force l\'IP annoncée via SSDP.',
  3869. },
  3870. mode: {
  3871. title: 'Mode',
  3872. archive: 'Archiver',
  3873. archiveDesc: 'Archive immédiatement',
  3874. review: 'Revue',
  3875. reviewDesc: 'Attendre revue avant archive',
  3876. queue: 'File',
  3877. queueDesc: 'Archiver et ajouter à la file',
  3878. proxy: 'Proxy',
  3879. proxyDesc: 'Relais vers imprimante réelle',
  3880. },
  3881. autoDispatch: {
  3882. title: 'Lancement automatique',
  3883. description: 'Lancer automatiquement les impressions ajoutées à la file. Désactivé, les impressions attendent un lancement manuel.',
  3884. },
  3885. tailscaleDisabled: {
  3886. title: 'Intégration Tailscale',
  3887. description: 'Lorsqu\'activé, utilise Tailscale pour des certificats TLS de confiance. Désactiver pour n\'utiliser que des certificats auto-signés.',
  3888. },
  3889. setupRequired: {
  3890. title: 'Configuration requise',
  3891. description: 'Nécessite des réglages système (ports, pare-feu).',
  3892. readGuide: 'Lire le guide de configuration',
  3893. },
  3894. howItWorks: {
  3895. title: 'Fonctionnement',
  3896. 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.',
  3897. 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é.',
  3898. 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.',
  3899. },
  3900. status: {
  3901. title: 'Détails du statut',
  3902. printerName: 'Nom',
  3903. model: 'Modèle',
  3904. serialNumber: 'Série',
  3905. mode: 'Mode',
  3906. pendingFiles: 'Fichiers en attente',
  3907. targetPrinter: 'Cible',
  3908. ftpPort: 'Port FTP',
  3909. mqttPort: 'Port MQTT',
  3910. ftpConnections: 'Connexions FTP',
  3911. mqttConnections: 'Connexions MQTT',
  3912. },
  3913. toast: {
  3914. updated: 'Réglages virtuels mis à jour',
  3915. failedToUpdate: 'Échec mise à jour',
  3916. tailscaleNotAvailable: 'Tailscale n\'est pas installé sur cet hôte. Installez Tailscale puis réessayez.',
  3917. copyFailed: 'Échec de la copie — veuillez sélectionner le texte manuellement',
  3918. accessCodeRequired: 'Code d\'accès requis',
  3919. targetPrinterRequired: 'Imprimante cible requise',
  3920. bindIpRequired: 'Veuillez d\'abord définir une adresse IP',
  3921. accessCodeEmpty: 'Le code ne peut pas être vide',
  3922. accessCodeLength: 'Le code doit faire 8 caractères',
  3923. created: 'Imprimante virtuelle créée',
  3924. failedToCreate: 'Échec de la création de l\'imprimante virtuelle',
  3925. deleted: 'Imprimante virtuelle supprimée',
  3926. failedToDelete: 'Échec de la suppression de l\'imprimante virtuelle',
  3927. },
  3928. list: {
  3929. title: 'Imprimantes virtuelles',
  3930. add: 'Ajouter',
  3931. addFirst: 'Ajouter une imprimante virtuelle',
  3932. empty: 'Aucune imprimante virtuelle configurée. Ajoutez-en une pour commencer.',
  3933. },
  3934. bindIp: {
  3935. title: 'Interface réseau',
  3936. placeholder: 'Sélectionner interface...',
  3937. hint: 'Interface réseau sur laquelle cette imprimante virtuelle écoute. Doit être unique par imprimante.',
  3938. },
  3939. proxy: {
  3940. 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.',
  3941. },
  3942. addDialog: {
  3943. title: 'Ajouter une imprimante virtuelle',
  3944. name: 'Nom',
  3945. hint: 'Vous pourrez configurer le code d\'accès, l\'imprimante cible et d\'autres paramètres après la création.',
  3946. create: 'Créer',
  3947. },
  3948. deleteConfirm: {
  3949. title: 'Supprimer l\'imprimante virtuelle',
  3950. message: 'Êtes-vous sûr de vouloir supprimer "{{name}}" ? Cela arrêtera tous les services de cette imprimante.',
  3951. },
  3952. },
  3953. // Model Viewer
  3954. modelViewer: {
  3955. openInSlicer: 'Ouvrir dans le Slicer',
  3956. tabs: {
  3957. model: 'Modèle 3D',
  3958. gcode: 'Aperçu G-code',
  3959. },
  3960. notAvailable: 'indisponible',
  3961. notSliced: 'pas découpé',
  3962. plates: 'Plateaux',
  3963. allPlates: 'Tous les plateaux',
  3964. plateNumber: 'Plateau {{number}}',
  3965. plateCount: '{{count}} plateau',
  3966. plateCount_other: '{{count}} plateaux',
  3967. objectCount: '{{count}} objet',
  3968. objectCount_other: '{{count}} objets',
  3969. filamentCount: '{{count}} filament',
  3970. filamentCount_other: '{{count}} filaments',
  3971. eta: 'Fin {{minutes}} min',
  3972. noPreview: 'Aucun aperçu pour ce fichier',
  3973. pagination: {
  3974. pageOf: 'Page {{current}} sur {{total}}',
  3975. prev: 'Préc',
  3976. next: 'Suiv',
  3977. },
  3978. errors: {
  3979. failedToLoad: 'Échec chargement fichier',
  3980. noMeshes: 'Aucun maillage trouvé dans le 3MF',
  3981. unsupportedFormat: 'Format non supporté',
  3982. },
  3983. },
  3984. // Maintenance type descriptions (built-in)
  3985. maintenanceDescriptions: {
  3986. lubricateCarbonRods: 'Appliquer du lubrifiant sur les tiges carbone pour un mouvement fluide',
  3987. lubricateRails: 'Appliquer du lubrifiant sur les rails linéaires',
  3988. cleanNozzle: 'Nettoyer buse et hotend anti-bouchage',
  3989. checkBelts: 'Tension des courroies pour la précision',
  3990. cleanBuildPlate: 'Nettoyage plateau pour l\'adhésion',
  3991. checkExtruder: 'Usure des engrenages de l\'extrudeur',
  3992. checkCooling: 'Bon fonctionnement des ventilateurs',
  3993. generalInspection: 'Inspection générale de la machine',
  3994. cleanCarbonRods: 'Nettoyer les tiges carbone (friction)',
  3995. lubricateSteelRods: 'Appliquer du lubrifiant sur les tiges en acier pour un mouvement fluide',
  3996. cleanSteelRods: 'Nettoyer les tiges en acier (friction)',
  3997. cleanLinearRails: 'Essuyer les rails linéaires (poussière/débris)',
  3998. checkPtfeTube: 'Usure ou dommage du tube PTFE',
  3999. replaceHepaFilter: 'Filtre HEPA pour la qualité de l\'air',
  4000. replaceCarbonFilter: 'Filtre charbon actif (odeurs)',
  4001. lubricateLeftNozzleRail: 'Lubrifier le rail de buse gauche (Série H2)',
  4002. },
  4003. // Smart Plugs
  4004. smartPlugs: {
  4005. offline: 'Hors ligne',
  4006. admin: 'Admin',
  4007. openPlugAdminPage: 'Page admin de la prise',
  4008. deleteSmartPlug: 'Supprimer la prise',
  4009. turnOnSmartPlug: 'Allumer la prise',
  4010. turnOffSmartPlug: 'Éteindre la prise',
  4011. turnOn: 'Allumer',
  4012. turnOff: 'Éteindre',
  4013. addSmartPlug: {
  4014. scanningNetwork: 'Scan réseau...',
  4015. chooseEntity: 'Choisir une entité...',
  4016. connectionFailed: 'Échec connexion',
  4017. searchEntities: 'Chercher entités...',
  4018. searchPowerSensors: 'Capteurs puissance...',
  4019. searchEnergySensors: 'Capteurs énergie...',
  4020. placeholders: {
  4021. plugName: 'Prise Salon',
  4022. mqttStateOnValue: 'ON, true, 1',
  4023. mqttSameAsPower: 'Identique au topic puissance, ou différent',
  4024. },
  4025. },
  4026. // SmartPlugCard
  4027. linkedTo: 'Lié à :',
  4028. monitorOnly: 'Surveillance uniquement',
  4029. alerts: 'Alertes',
  4030. scheduleOn: 'On {{time}}',
  4031. scheduleOff: 'Off {{time}}',
  4032. on: 'On',
  4033. off: 'Off',
  4034. power: 'Puissance',
  4035. kwhToday: 'kWh Aujourd\'hui',
  4036. settings: 'Paramètres',
  4037. automationSettings: 'Paramètres d\'automatisation',
  4038. showInSwitchbar: 'Afficher dans la barre de commutateurs',
  4039. quickAccessSidebar: 'Accès rapide depuis la barre latérale',
  4040. enabled: 'Activé',
  4041. enableAutomation: 'Activer l\'automatisation pour cette prise',
  4042. autoOn: 'Auto On',
  4043. autoOnDescription: 'Allumer au démarrage de l\'impression',
  4044. autoOff: 'Auto Off',
  4045. autoOffDescription: 'Éteindre à la fin de l\'impression (unique)',
  4046. autoOffPersistent: 'Garder activé',
  4047. autoOffPersistentDescription: 'Rester activé entre les impressions au lieu d\'une seule fois',
  4048. turnOffDelayMode: 'Mode de délai d\'extinction',
  4049. time: 'Temps',
  4050. temp: 'Temp',
  4051. delayMinutes: 'Délai (minutes)',
  4052. tempThreshold: 'Seuil de température (°C)',
  4053. tempThresholdDescription: 'S\'éteint lorsque la buse refroidit en dessous de cette température',
  4054. edit: 'Modifier',
  4055. deleteConfirm: 'Êtes-vous sûr de vouloir supprimer "{{name}}" ? Cette action est irréversible.',
  4056. turnOnConfirm: 'Êtes-vous sûr de vouloir allumer "{{name}}" ?',
  4057. turnOffConfirm: 'Êtes-vous sûr de vouloir éteindre "{{name}}" ? Cela coupera l\'alimentation de l\'appareil connecté.',
  4058. failedToTurn: 'Impossible de {{action}} "{{name}}"',
  4059. unknown: 'Inconnu',
  4060. // AddSmartPlugModal
  4061. addTitle: 'Ajouter une prise connectée',
  4062. editTitle: 'Modifier la prise connectée',
  4063. stopScanning: 'Arrêter le scan',
  4064. discoverTasmota: 'Découvrir les appareils Tasmota',
  4065. foundDevices: '{{count}} appareil(s) trouvé(s) - cliquez pour sélectionner :',
  4066. noDevicesFound: 'Aucun appareil Tasmota trouvé sur votre réseau',
  4067. haNotConfigured: 'Home Assistant n\'est pas configuré. Configurez-le dans',
  4068. haSettingsPath: 'Paramètres → Réseau → Home Assistant',
  4069. selectEntity: 'Sélectionner l\'entité *',
  4070. ipAddress: 'Adresse IP *',
  4071. nameLabel: 'Nom *',
  4072. username: 'Nom d\'utilisateur',
  4073. password: 'Mot de passe',
  4074. authHint: 'Laissez vide si votre appareil Tasmota ne nécessite pas d\'authentification',
  4075. linkToPrinter: 'Lier à l\'imprimante',
  4076. noPrinter: 'Pas d\'imprimante (contrôle manuel uniquement)',
  4077. linkingDescription: 'La liaison permet l\'allumage/extinction automatique au début/fin de l\'impression',
  4078. powerAlerts: 'Alertes de puissance',
  4079. alertAbove: 'Alerte si au-dessus (W)',
  4080. alertBelow: 'Alerte si en dessous (W)',
  4081. alertDescription: 'Recevoir une notification lorsque la consommation dépasse ces seuils. Laisser vide pour désactiver cette direction.',
  4082. dailySchedule: 'Planification quotidienne',
  4083. turnOnAt: 'Allumer à',
  4084. turnOffAt: 'Éteindre à',
  4085. scheduleDescription: 'Allumer/éteindre automatiquement la prise à ces heures chaque jour. Laisser vide pour ignorer cette action.',
  4086. showOnPrinterCard: 'Afficher sur la carte imprimante',
  4087. displayOnPrinterCard: 'Afficher le bouton sur la carte imprimante',
  4088. connectedResult: 'Connecté !',
  4089. deviceLabel: 'Appareil : {{name}} - ',
  4090. stateLabel: 'État : {{state}}',
  4091. test: 'Tester',
  4092. delete: 'Supprimer',
  4093. save: 'Enregistrer',
  4094. add: 'Ajouter',
  4095. cancel: 'Annuler',
  4096. failedToStartScan: 'Impossible de démarrer le scan',
  4097. nameRequired: 'Le nom est requis',
  4098. entityRequired: 'L\'entité est requise pour les prises Home Assistant',
  4099. mqttTopicRequired: 'Au moins un topic MQTT doit être configuré pour la puissance, l\'énergie ou la surveillance d\'état',
  4100. loadingEntities: 'Chargement des entités...',
  4101. loading: 'Chargement...',
  4102. failedToLoadEntities: 'Échec du chargement des entités : {{error}}',
  4103. noEntitiesMatching: 'Aucune entité trouvée correspondant à "{{search}}"',
  4104. noEntitiesAvailable: 'Aucune entité disponible',
  4105. searchingEntities: 'Recherche de toutes les entités ({{count}} trouvées)',
  4106. showingEntities: 'Affichage switch, light, input_boolean ({{count}} disponibles)',
  4107. energyMonitoringOptional: 'Surveillance énergétique (Optionnel)',
  4108. energyMonitoringHint: 'Recherchez et sélectionnez les capteurs fournissant des données de puissance/énergie.',
  4109. powerSensorW: 'Capteur de puissance (W)',
  4110. energyTodayKwh: 'Énergie aujourd\'hui (kWh)',
  4111. totalEnergyKwh: 'Énergie totale (kWh)',
  4112. noMatchingSensors: 'Aucun capteur correspondant',
  4113. none: 'Aucun',
  4114. mqttNotConfigured: 'Broker MQTT non configuré. Définissez l\'adresse du broker dans',
  4115. mqttSettingsPath: 'Paramètres → Réseau → Publication MQTT',
  4116. mqttNotConfiguredSuffix: '(vous n\'avez pas besoin d\'activer la publication, remplissez simplement les détails du broker).',
  4117. 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.',
  4118. powerMonitoring: 'Surveillance de puissance',
  4119. energyMonitoring: 'Surveillance énergétique',
  4120. stateMonitoring: 'Surveillance d\'état',
  4121. optional: 'optionnel',
  4122. topic: 'Topic',
  4123. jsonPath: 'Chemin JSON',
  4124. multiplier: 'Multiplicateur',
  4125. onValue: 'Valeur ON',
  4126. 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.',
  4127. 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.',
  4128. 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).',
  4129. // REST smart plug
  4130. restControl: 'Control',
  4131. restOnUrl: 'Turn ON URL',
  4132. restOffUrl: 'Turn OFF URL',
  4133. restOnBody: 'ON Request Body',
  4134. restOffBody: 'OFF Request Body',
  4135. restMethod: 'HTTP Method',
  4136. restHeaders: 'Custom Headers (JSON)',
  4137. restStatusUrl: 'Status URL',
  4138. restStatusPath: 'State JSON Path',
  4139. restStatusOnValue: 'ON Value',
  4140. restPowerUrl: 'URL de puissance',
  4141. restPowerPath: 'Power JSON Path',
  4142. restPowerMultiplier: 'Multiplicateur de puissance',
  4143. restEnergyUrl: 'URL d\'énergie',
  4144. restEnergyPath: 'Energy JSON Path',
  4145. restEnergyMultiplier: 'Multiplicateur d\'énergie',
  4146. restUrlRequired: 'At least one URL (ON or OFF) is required for REST plugs',
  4147. restHeadersHint: 'e.g. {"Authorization": "Bearer your-token"}',
  4148. restBodyHint: 'e.g. ON, {"state": "on"}',
  4149. restStatusHint: 'URL to poll for current state',
  4150. restPathHint: 'e.g. state or data.power.status',
  4151. restPowerUrlHint: 'URL séparée pour les données de puissance (utilise l\'URL de statut si vide)',
  4152. restEnergyUrlHint: 'URL séparée pour les données d\'énergie (utilise l\'URL de statut si vide)',
  4153. 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).',
  4154. testConnection: 'Test Connection',
  4155. connectionSuccess: 'Connection successful',
  4156. noSwitchesInSwitchbar: 'Aucun commutateur dans la barre',
  4157. enableSwitchbarHint: 'Activez "Afficher dans la barre de commutateurs" dans Paramètres > Smart Plugs',
  4158. },
  4159. // Notifications
  4160. notifications: {
  4161. // Provider types
  4162. providerTypes: {
  4163. callmebot: 'CallMeBot/WhatsApp',
  4164. ntfy: 'ntfy',
  4165. pushover: 'Pushover',
  4166. telegram: 'Telegram',
  4167. email: 'E-mail',
  4168. discord: 'Discord',
  4169. webhook: 'Webhook',
  4170. homeassistant: 'Home Assistant',
  4171. },
  4172. // Provider descriptions
  4173. providerDescriptions: {
  4174. email: 'Notifications par e-mail SMTP',
  4175. telegram: 'Notifications via un bot Telegram',
  4176. discord: 'Envoyer vers un canal Discord via webhook',
  4177. ntfy: 'Notifications push gratuites, auto-hébergeables',
  4178. pushover: 'Notifications push simples et fiables',
  4179. callmebot: 'Notifications WhatsApp gratuites via CallMeBot',
  4180. webhook: 'POST HTTP générique vers n\'importe quelle URL',
  4181. homeassistant: 'Notifications persistantes dans le tableau de bord Home Assistant',
  4182. },
  4183. // NotificationProviderCard
  4184. lastSuccess: 'Dernier : {{date}}',
  4185. error: 'Erreur',
  4186. printer: 'Imprimante :',
  4187. allPrinters: 'Toutes les imprimantes',
  4188. sendTestNotification: 'Envoyer une notification de test',
  4189. eventSettings: 'Paramètres des événements',
  4190. enabled: 'Activé',
  4191. sendFromProvider: 'Envoyer des notifications depuis ce fournisseur',
  4192. // Event categories
  4193. printEvents: 'Événements d\'impression',
  4194. printerStatus: 'État de l\'imprimante',
  4195. amsAlarms: 'Alarmes AMS',
  4196. amsHtAlarms: 'Alarmes AMS-HT',
  4197. printQueue: 'File d\'attente d\'impression',
  4198. // Event tags (badges)
  4199. start: 'Début',
  4200. plateCheck: 'Vérification du plateau',
  4201. complete: 'Terminé',
  4202. failed: 'Échoué',
  4203. stopped: 'Arrêté',
  4204. progress: 'Progression',
  4205. offline: 'Hors ligne',
  4206. lowFilament: 'Filament bas',
  4207. maintenance: 'Maintenance',
  4208. amsHumidity: 'Humidité AMS',
  4209. amsTemp: 'Temp. AMS',
  4210. amsHtHumidity: 'Humidité AMS-HT',
  4211. amsHtTemp: 'Temp. AMS-HT',
  4212. bedCooled: 'Plateau refroidi',
  4213. firstLayer: 'Première couche',
  4214. quiet: 'Silencieux',
  4215. digest: 'Résumé {{time}}',
  4216. // Event labels (expanded settings)
  4217. printStarted: 'Impression démarrée',
  4218. plateNotEmpty: 'Plateau non vide',
  4219. plateNotEmptyDescription: 'Objets détectés avant l\'impression',
  4220. printCompleted: 'Impression terminée',
  4221. bedCooledLabel: 'Plateau refroidi',
  4222. bedCooledDescription: 'Plateau refroidi sous le seuil après l\'impression',
  4223. firstLayerCompleteLabel: 'Première couche terminée',
  4224. firstLayerCompleteDescription: 'Notification avec photo après la première couche',
  4225. missingSpoolAssignmentLabel: 'Affectation de bobine manquante',
  4226. missingSpoolAssignmentDescription: 'Notifier quand une impression démarre et que des bacs requis n\'ont pas de bobine assignée',
  4227. printFailed: 'Impression échouée',
  4228. printStopped: 'Impression arrêtée',
  4229. progressMilestones: 'Jalons de progression',
  4230. progressMilestonesDescription: 'Notifier à 25 %, 50 %, 75 %',
  4231. printerOffline: 'Imprimante hors ligne',
  4232. printerError: 'Erreur de l\'imprimante',
  4233. lowFilamentLabel: 'Filament bas',
  4234. maintenanceDue: 'Maintenance requise',
  4235. maintenanceDueDescription: 'Notifier lorsqu\'une maintenance est nécessaire',
  4236. amsHumidityHigh: 'Humidité AMS élevée',
  4237. amsHumidityHighDescription: 'L\'humidité de l\'AMS standard dépasse le seuil',
  4238. amsTemperatureHigh: 'Température AMS élevée',
  4239. amsTemperatureHighDescription: 'La température de l\'AMS standard dépasse le seuil',
  4240. amsHtHumidityHigh: 'Humidité AMS-HT élevée',
  4241. amsHtHumidityHighDescription: 'L\'humidité de l\'AMS-HT dépasse le seuil',
  4242. amsHtTemperatureHigh: 'Température AMS-HT élevée',
  4243. amsHtTemperatureHighDescription: 'La température de l\'AMS-HT dépasse le seuil',
  4244. // Queue events
  4245. jobAdded: 'Tâche ajoutée',
  4246. jobAddedDescription: 'Tâche ajoutée à la file d\'attente',
  4247. jobAssigned: 'Tâche assignée',
  4248. jobAssignedDescription: 'Tâche basée sur le modèle assignée à l\'imprimante',
  4249. jobStarted: 'Tâche démarrée',
  4250. jobStartedDescription: 'La tâche de la file a commencé l\'impression',
  4251. jobWaiting: 'Tâche en attente',
  4252. jobWaitingDescription: 'Tâche en attente de filament ou imprimante',
  4253. jobSkipped: 'Tâche ignorée',
  4254. jobSkippedDescription: 'Tâche ignorée (échec précédent)',
  4255. jobFailed: 'Tâche échouée',
  4256. jobFailedDescription: 'La tâche n\'a pas pu démarrer',
  4257. queueComplete: 'File d\'attente terminée',
  4258. queueCompleteDescription: 'Toutes les tâches de la file sont terminées',
  4259. // Quiet hours
  4260. quietHours: 'Heures silencieuses',
  4261. noNotificationsDuring: 'Aucune notification pendant ces heures',
  4262. editProviderToChangeQuietHours: 'Modifier le fournisseur pour changer les heures silencieuses',
  4263. // Daily digest
  4264. dailyDigest: 'Résumé quotidien',
  4265. batchNotifications: 'Regrouper les notifications en un seul résumé quotidien',
  4266. sendAt: 'Envoyer à {{time}}',
  4267. editProviderToChangeDigestTime: 'Modifier le fournisseur pour changer l\'heure du résumé',
  4268. // Actions
  4269. edit: 'Modifier',
  4270. deleteProvider: 'Supprimer le fournisseur de notifications',
  4271. deleteConfirm: 'Êtes-vous sûr de vouloir supprimer « {{name}} » ? Cette action est irréversible.',
  4272. delete: 'Supprimer',
  4273. // AddNotificationModal
  4274. addTitle: 'Ajouter un fournisseur de notifications',
  4275. editTitle: 'Modifier le fournisseur de notifications',
  4276. nameLabel: 'Nom *',
  4277. namePlaceholder: 'Mes notifications',
  4278. providerTypeLabel: 'Type de fournisseur *',
  4279. configuration: 'Configuration',
  4280. testConfiguration: 'Tester la configuration',
  4281. printerFilter: 'Filtre d\'imprimante',
  4282. onlyFromPrinter: 'Envoyer uniquement les notifications pour les événements de cette imprimante',
  4283. quietHoursDnd: 'Heures silencieuses (Ne pas déranger)',
  4284. quietStart: 'Début',
  4285. quietEnd: 'Fin',
  4286. dailyDigestLabel: 'Résumé quotidien',
  4287. sendDigestAt: 'Envoyer le résumé à',
  4288. digestCollected: 'Les événements seront collectés et envoyés en un seul résumé à cette heure',
  4289. notificationEvents: 'Événements de notification',
  4290. progressPercent: '(25 %, 50 %, 75 %)',
  4291. bedCooledAfterPrint: '(après la fin de l\'impression)',
  4292. // Per-event ntfy priority (#990)
  4293. eventPriority: {
  4294. sectionTitle: 'Priorité ntfy',
  4295. 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.',
  4296. min: 'Min',
  4297. low: 'Basse',
  4298. default: 'Par défaut',
  4299. high: 'Haute',
  4300. urgent: 'Urgente',
  4301. },
  4302. cancel: 'Annuler',
  4303. save: 'Enregistrer',
  4304. add: 'Ajouter',
  4305. nameRequired: 'Le nom est requis',
  4306. fieldRequired: '{{field}} est requis',
  4307. // Config field labels
  4308. phoneNumber: 'Numéro de téléphone',
  4309. apiKey: 'Clé API',
  4310. serverUrl: 'URL du serveur',
  4311. topic: 'Sujet',
  4312. authToken: 'Jeton d\'authentification',
  4313. userKey: 'Clé utilisateur',
  4314. appToken: 'Jeton d\'application',
  4315. priority: 'Priorité',
  4316. botToken: 'Jeton du bot',
  4317. chatId: 'ID du chat',
  4318. smtpServer: 'Serveur SMTP',
  4319. smtpPort: 'Port SMTP',
  4320. security: 'Sécurité',
  4321. authentication: 'Authentification',
  4322. username: 'Nom d\'utilisateur',
  4323. password: 'Mot de passe',
  4324. fromEmail: 'E-mail expéditeur',
  4325. toEmail: 'E-mail destinataire',
  4326. webhookUrl: 'URL du webhook',
  4327. payloadFormat: 'Format du payload',
  4328. authorization: 'Autorisation',
  4329. titleFieldName: 'Nom du champ titre',
  4330. messageFieldName: 'Nom du champ message',
  4331. // NotificationTemplateEditor
  4332. editTemplate: 'Modifier le modèle : {{name}}',
  4333. titleLabel: 'Titre',
  4334. bodyLabel: 'Corps',
  4335. titlePlaceholder: 'Titre de la notification...',
  4336. bodyPlaceholder: 'Corps de la notification...',
  4337. availableVariables: 'Variables disponibles',
  4338. clickToInsert: 'Cliquer pour insérer à la position du curseur dans le corps',
  4339. livePreview: 'Aperçu en direct',
  4340. hide: 'Masquer',
  4341. show: 'Afficher',
  4342. loadingPreview: 'Chargement de l\'aperçu...',
  4343. enterTemplateContent: 'Saisir le contenu du modèle pour voir l\'aperçu',
  4344. titlePreview: 'Titre :',
  4345. bodyPreview: 'Corps :',
  4346. resetToDefault: 'Réinitialiser par défaut',
  4347. titleRequired: 'Le titre est requis',
  4348. bodyRequired: 'Le corps est requis',
  4349. // NotificationLogViewer
  4350. notificationLog: 'Journal des notifications',
  4351. showFailedOnly: 'Échecs uniquement',
  4352. last24Hours: 'Dernières 24 heures',
  4353. last7Days: '7 derniers jours',
  4354. last30Days: '30 derniers jours',
  4355. last90Days: '90 derniers jours',
  4356. justNow: 'À l\'instant',
  4357. noFailedNotifications: 'Aucune notification échouée',
  4358. noNotificationsLogged: 'Aucune notification enregistrée',
  4359. unknownProvider: 'Fournisseur inconnu',
  4360. logTitle: 'Titre',
  4361. logMessage: 'Message',
  4362. logError: 'Erreur',
  4363. logProvider: 'Fournisseur : {{type}}',
  4364. logTime: 'Heure : {{time}}',
  4365. refresh: 'Actualiser',
  4366. clearOld: 'Purger les anciens',
  4367. statsSummary: '{{days}} derniers jours :',
  4368. statsNotifications: 'notifications',
  4369. statsSent: '{{count}} envoyées',
  4370. statsFailed: '{{count}} échouées',
  4371. // Event type labels (for log viewer)
  4372. eventTypes: {
  4373. print_start: 'Impression démarrée',
  4374. print_complete: 'Impression terminée',
  4375. print_failed: 'Impression échouée',
  4376. print_stopped: 'Impression arrêtée',
  4377. print_progress: 'Progression',
  4378. printer_offline: 'Imprimante hors ligne',
  4379. printer_error: 'Erreur de l\'imprimante',
  4380. filament_low: 'Filament bas',
  4381. maintenance_due: 'Maintenance requise',
  4382. test: 'Test',
  4383. },
  4384. // User email notification preferences
  4385. userEmail: {
  4386. title: 'Notifications',
  4387. emailNotifications: 'Notifications par e-mail',
  4388. 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.",
  4389. sendingTo: 'Les notifications seront envoyées à',
  4390. noEmailWarning: "Votre compte n'a pas d'adresse e-mail. Contactez un administrateur pour en ajouter une.",
  4391. printJobNotifications: "Notifications de travaux d'impression",
  4392. printJobNotificationsDesc: "Choisissez quels événements déclenchent des notifications par e-mail pour les travaux d'impression que vous soumettez.",
  4393. printJobStarts: "Démarrage du travail d'impression",
  4394. printJobStartsDesc: "Être notifié quand votre travail d'impression commence.",
  4395. printJobFinishes: "Fin du travail d'impression",
  4396. printJobFinishesDesc: "Être notifié quand votre travail d'impression se termine avec succès.",
  4397. printErrors: "Erreurs d'impression",
  4398. printErrorsDesc: "Être notifié quand votre travail d'impression échoue ou rencontre une erreur.",
  4399. printJobStops: "Travail d'impression arrêté",
  4400. printJobStopsDesc: "Être notifié quand votre travail d'impression est annulé ou arrêté.",
  4401. saveSuccess: 'Préférences de notification sauvegardées.',
  4402. saveError: 'Impossible de sauvegarder les préférences de notification.',
  4403. },
  4404. },
  4405. // Rich Text Editor
  4406. richTextEditor: {
  4407. bold: 'Gras',
  4408. italic: 'Italique',
  4409. underline: 'Souligné',
  4410. bulletList: 'Liste à puces',
  4411. numberedList: 'Liste numérotée',
  4412. alignLeft: 'Aligner à gauche',
  4413. alignCenter: 'Centrer',
  4414. alignRight: 'Aligner à droite',
  4415. addLink: 'Ajouter lien',
  4416. removeLink: 'Retirer lien',
  4417. },
  4418. // External Links
  4419. externalLinks: {
  4420. noLinksConfigured: 'Aucun lien externe configuré',
  4421. deleteLink: 'Supprimer lien',
  4422. removeCustomIcon: 'Retirer icône personnalisée',
  4423. openInNewTab: 'Ouvrir dans un nouvel onglet',
  4424. placeholders: {
  4425. linkName: 'Mon Lien',
  4426. },
  4427. },
  4428. // Keyboard Shortcuts Modal
  4429. keyboardShortcuts: {
  4430. title: 'Raccourcis Clavier',
  4431. navigation: 'Navigation',
  4432. archivesSection: 'Archives',
  4433. kProfilesSection: 'K-Profiles',
  4434. generalSection: 'Général',
  4435. shortcuts: {
  4436. goToPrinters: 'Aller aux Imprimantes',
  4437. goToArchives: 'Aller aux Archives',
  4438. goToQueue: 'Aller à la File',
  4439. goToStats: 'Aller aux Stats',
  4440. goToProfiles: 'Aller aux Profils Cloud',
  4441. goToSettings: 'Aller aux Paramètres',
  4442. focusSearch: 'Focus recherche',
  4443. openUploadModal: 'Ouvrir téléversement',
  4444. clearSelection: 'Tout déselectionner',
  4445. contextMenu: 'Menu contextuel (cartes)',
  4446. refreshProfiles: 'Rafraîchir profils',
  4447. newProfile: 'Nouveau profil',
  4448. exitSelectionMode: 'Quitter mode sélection',
  4449. showHelp: 'Afficher cette aide',
  4450. },
  4451. footer: 'Échap ou clic extérieur pour fermer',
  4452. },
  4453. // Notification Log
  4454. notificationLog: {
  4455. title: 'Journal de Notification',
  4456. events: {
  4457. printStarted: 'Début impression',
  4458. printComplete: 'Fin impression',
  4459. printFailed: 'Échec impression',
  4460. printStopped: 'Arrêt impression',
  4461. progress: 'Progression',
  4462. printerOffline: 'Hors ligne',
  4463. printerError: 'Erreur',
  4464. lowFilament: 'Filament bas',
  4465. maintenanceDue: 'Maintenance',
  4466. test: 'Test',
  4467. },
  4468. timeAgo: {
  4469. justNow: 'À l\'instant',
  4470. minutesAgo: 'Il y a {{minutes}}m',
  4471. hoursAgo: 'Il y a {{hours}}h',
  4472. },
  4473. },
  4474. // Restore/Backup Modal
  4475. restoreBackup: {
  4476. title: 'Restaurer Sauvegarde',
  4477. restoring: 'Restauration...',
  4478. restoreComplete: 'Restauration terminée',
  4479. restoreFailed: 'Échec restauration',
  4480. importSettings: 'Importer les réglages d\'un fichier',
  4481. pleaseWait: 'Patientez pendant la restauration',
  4482. clickToSelect: 'Fichier .json ou .zip',
  4483. howDuplicateHandling: 'Gestion des doublons :',
  4484. categories: {
  4485. printers: 'Imprimantes',
  4486. smartPlugs: 'Prises',
  4487. notificationProviders: 'Fournisseurs',
  4488. filaments: 'Filaments',
  4489. archives: 'Archives',
  4490. pendingUploads: 'Téléversements en attente',
  4491. settingsTemplates: 'Réglages & Modèles',
  4492. },
  4493. matchingInfo: {
  4494. printers: 'par numéro de série',
  4495. smartPlugs: 'par adresse IP',
  4496. notificationProviders: 'par nom',
  4497. filaments: 'par nom+type+marque',
  4498. archives: 'par empreinte numérique (hash)',
  4499. pendingUploads: 'par nom de fichier',
  4500. settingsTemplates: 'toujours écrasés',
  4501. },
  4502. replaceExisting: 'Remplacer existant',
  4503. keepExisting: 'Garder existant',
  4504. replaceDescription: 'Écrase les doublons avec la sauvegarde',
  4505. keepDescription: 'Ne restaure que les éléments absents',
  4506. caution: 'Attention :',
  4507. cautionText: 'L\'écrasement remplacera vos réglages. Les codes d\'accès imprimantes sont exclus par sécurité.',
  4508. itemsRestored: 'Éléments restaurés',
  4509. itemsSkipped: 'Éléments ignorés',
  4510. restored: 'Restaurés',
  4511. skipped: 'Ignorés (déjà présents)',
  4512. filesLabel: 'Fichiers (3MF, vignettes, etc.)',
  4513. newApiKeysGenerated: 'Nouvelles clés API générées',
  4514. newApiKeysWarning: 'Copiées maintenant, elles ne seront plus visibles !',
  4515. processingBackup: 'Traitement du fichier...',
  4516. noDataFound: 'Aucune donnée trouvée dans le fichier.',
  4517. failedToRestore: 'Échec restaure. Vérifiez le format.',
  4518. },
  4519. // Backup Export Modal
  4520. backupExport: {
  4521. title: 'Exporter Sauvegarde',
  4522. selectData: 'Données à inclure',
  4523. selectAll: 'Tout sélectionner',
  4524. selectNone: 'Ne rien sélectionner',
  4525. categoryDescriptions: {
  4526. settings: 'Langue, thèmes, préférences',
  4527. notifications: 'ntfy, Pushover, Discord, etc.',
  4528. templates: 'Modèles de messages personnalisés',
  4529. smartPlugs: 'Configuration des prises Tasmota',
  4530. externalLinks: 'Liens externes de la barre latérale',
  4531. printers: 'Infos imprimantes (codes d\'accès exclus par défaut)',
  4532. plateDetection: 'Images références des plateaux vides',
  4533. filaments: 'Types et coûts filaments',
  4534. maintenance: 'Plannings de maintenance personnalisés',
  4535. archives: 'Données impressions + fichiers (3MF, vignettes, etc.)',
  4536. projects: 'Projets, BOM, pièces jointes',
  4537. pendingUploads: 'En attente revue virtuelle',
  4538. apiKeys: 'Clés Webhook (nouvelles clés générées à l\'import)',
  4539. },
  4540. requiresPrinters: 'Nécessite sélection des imprimantes',
  4541. zipFileWarning: 'Fichier ZIP créé.',
  4542. zipFileDescription: 'Contient tous les médias. Peut être volumineux.',
  4543. includeAccessCodes: 'Inclure Codes d\'accès',
  4544. includeAccessCodesDescription: 'Pour migrer vers une autre machine',
  4545. includeAccessCodesWarning: 'Codes en texte clair. Sécurisez ce fichier !',
  4546. categoriesSelected: '{{selectedCount}} catégories choisies',
  4547. },
  4548. // Pending Uploads Panel
  4549. pendingUploads: {
  4550. placeholders: {
  4551. notes: 'Notes sur l\'impression...',
  4552. },
  4553. discardUpload: 'Rejeter',
  4554. archiveAllUploads: 'Tout archiver',
  4555. discardAllUploads: 'Tout rejeter',
  4556. archive: 'Archiver',
  4557. timeAgo: {
  4558. justNow: 'À l\'instant',
  4559. minutesAgo: 'Il y a {{minutes}}m',
  4560. hoursAgo: 'Il y a {{hours}}h',
  4561. daysAgo: 'Il y a {{days}}j',
  4562. },
  4563. },
  4564. // API Browser
  4565. apiBrowser: {
  4566. placeholders: {
  4567. requestBody: 'Corps JSON...',
  4568. searchEndpoints: 'Chercher endpoints...',
  4569. },
  4570. },
  4571. // Configure AMS Slot Modal
  4572. configureAmsSlot: {
  4573. title: 'Configurer le slot AMS',
  4574. slotConfigured: 'Slot configuré !',
  4575. configuringSlot: 'Configuration du slot :',
  4576. slotLabel: '{{ams}} Slot {{slot}}',
  4577. searchPresets: 'Chercher presets...',
  4578. colorPlaceholder: 'Nom couleur ou hex (ex: brown, FF8800)',
  4579. clearCustomColor: 'Effacer couleur perso',
  4580. noCloudPresets: 'Profils Cloud absents. Connectez-vous.',
  4581. noPresetsAvailable: 'Aucun preset disponible. Connectez-vous à Bambu Cloud ou importez des profils locaux.',
  4582. noMatchingPresets: 'Aucun profil trouvé.',
  4583. custom: 'Perso',
  4584. builtin: 'Inclus',
  4585. settingsSentToPrinter: 'Réglages envoyés',
  4586. filamentProfile: 'Profil Filament',
  4587. kProfileLabel: 'Profil K (Pressure Advance)',
  4588. filteringFor: 'Filtrage pour : {{material}}',
  4589. noKProfile: 'Pas de profil K (utiliser défaut 0.020)',
  4590. noMatchingKProfiles: 'Aucun profil K trouvé. K=0.020 par défaut sera utilisé.',
  4591. selectFilamentFirst: 'Sélectionnez d\'abord un profil filament',
  4592. kFromCalibration: 'K={{value}} de la calibration imprimante',
  4593. customColorLabel: 'Couleur personnalisée (optionnel)',
  4594. presetColors: 'Couleurs {{name}} :',
  4595. showLessColors: 'Moins de couleurs',
  4596. showMoreColors: 'Plus de couleurs',
  4597. clear: 'Effacer',
  4598. hexLabel: 'Hex : #{{hex}}',
  4599. resetting: 'Réinitialisation...',
  4600. resetSlot: 'Réinitialiser le slot',
  4601. cancel: 'Annuler',
  4602. configuring: 'Configuration...',
  4603. configureSlot: 'Configurer le slot',
  4604. },
  4605. // GitHub Backup Settings
  4606. githubBackup: {
  4607. title: 'Sauvegarde GitHub',
  4608. history: 'Historique',
  4609. downloadBackup: 'Télécharger',
  4610. restoreBackup: 'Restaurer',
  4611. noBackupsYet: 'Aucune sauvegarde',
  4612. },
  4613. // Email Settings
  4614. emailSettings: {
  4615. placeholders: {
  4616. fromName: 'BamBuddy',
  4617. },
  4618. },
  4619. // Tag Management Modal
  4620. tagManagement: {
  4621. searchTags: 'Chercher tags...',
  4622. renameTag: 'Renommer tag',
  4623. deleteTag: 'Supprimer tag',
  4624. },
  4625. // Notification Template Editor
  4626. notificationTemplates: {
  4627. placeholders: {
  4628. title: 'Titre notification...',
  4629. body: 'Message notification...',
  4630. },
  4631. },
  4632. // Batch Tag Modal
  4633. batchTag: {
  4634. placeholders: {
  4635. newTag: 'Nouveau tag...',
  4636. },
  4637. },
  4638. // Photo Gallery Modal
  4639. photoGallery: {
  4640. deletePhoto: 'Supprimer photo',
  4641. },
  4642. // Filament Hover Card
  4643. filamentHoverCard: {
  4644. copySpoolUuid: 'Copier UUID bobine',
  4645. },
  4646. // K Profiles View
  4647. kProfilesView: {
  4648. hasNote: 'A une note',
  4649. copyProfile: 'Copier profil',
  4650. },
  4651. // Layout/Navigation
  4652. layout: {
  4653. openMenu: 'Ouvrir menu',
  4654. noPermissionSystemInfo: 'Pas d\'autorisation système',
  4655. },
  4656. // Dashboard
  4657. dashboard: {
  4658. dragToReorder: 'Glisser pour réorganiser',
  4659. hideWidget: 'Masquer widget',
  4660. },
  4661. // Notification Provider Card
  4662. notificationProviderCard: {
  4663. deleteNotificationProvider: 'Supprimer fournisseur',
  4664. },
  4665. // File Manager Modal
  4666. fileManagerModal: {
  4667. closeFileManager: 'Fermer gestionnaire',
  4668. sortFiles: 'Trier fichiers',
  4669. goToParentFolder: 'Dossier parent',
  4670. threeView: 'Vue 3D',
  4671. },
  4672. // Embedded Camera Viewer
  4673. embeddedCameraViewer: {
  4674. refreshStream: 'Actualiser flux',
  4675. close: 'Fermer',
  4676. zoomOut: 'Zoom -',
  4677. resetZoom: 'Reset zoom',
  4678. zoomIn: 'Zoom +',
  4679. dragToResize: 'Glisser pour dimension',
  4680. },
  4681. // Timelapse Viewer
  4682. timelapseViewer: {
  4683. skipBack5s: '-5s',
  4684. skipForward5s: '+5s',
  4685. },
  4686. // Notification Providers
  4687. notificationProviders: {
  4688. descriptions: {
  4689. email: 'Notifications par email SMTP',
  4690. telegram: 'Via bot Telegram',
  4691. discord: 'Via webhook Discord',
  4692. ntfy: 'Push auto-hébergé (ntfy)',
  4693. pushover: 'Push fiable (Pushover)',
  4694. callmebot: 'WhatsApp gratuit via CallMeBot',
  4695. webhook: 'Requête HTTP POST personnalisée',
  4696. },
  4697. },
  4698. // Log Viewer
  4699. logViewer: {
  4700. searchPlaceholder: 'Message ou nom...',
  4701. noLogEntries: 'Aucune entrée journal',
  4702. },
  4703. // Switchbar Popover
  4704. switchbarPopover: {
  4705. noSwitchesInSwitchbar: 'Aucun interrupteur',
  4706. },
  4707. // Project Page Modal
  4708. projectPageModal: {
  4709. placeholders: {
  4710. title: 'Titre',
  4711. designer: 'Designer',
  4712. license: 'Licence',
  4713. description: 'Description...',
  4714. profileTitle: 'Titre du profil',
  4715. profileDescription: 'Description du profil...',
  4716. },
  4717. },
  4718. // Spoolman Settings
  4719. spoolmanSettings: {},
  4720. // Time
  4721. time: {
  4722. unknown: '-',
  4723. waiting: 'En attente',
  4724. justNow: 'À l\'instant',
  4725. now: 'Maintenant',
  4726. minsAgo: 'il y a {{count}}m',
  4727. inMins: 'dans {{count}}m',
  4728. hoursAgo: 'il y a {{count}}h',
  4729. inHours: 'dans {{count}}h',
  4730. daysAgo: 'il y a {{count}}j',
  4731. inDays: 'dans {{count}}j',
  4732. },
  4733. // SpoolBuddy Kiosk
  4734. spoolbuddy: {
  4735. nav: {
  4736. dashboard: 'Tableau de bord',
  4737. ams: 'AMS',
  4738. inventory: 'Inventaire',
  4739. writeTag: 'Écrire',
  4740. settings: 'Paramètres',
  4741. },
  4742. status: {
  4743. nfcReady: 'NFC prêt',
  4744. nfcOff: 'NFC désactivé',
  4745. offline: 'Hors ligne',
  4746. online: 'En ligne',
  4747. noPrinters: 'Aucune imprimante',
  4748. deviceOffline: 'Appareil hors ligne',
  4749. waitingConnection: 'En attente de connexion...',
  4750. systemReady: 'Système prêt',
  4751. status: 'Statut',
  4752. },
  4753. dashboard: {
  4754. readyToScan: 'Prêt à scanner',
  4755. idleMessage: 'Placez une bobine sur la balance pour l\'identifier',
  4756. nfcHint: 'Le tag NFC sera lu automatiquement',
  4757. device: 'Appareil',
  4758. syncWeight: 'Sync. poids',
  4759. weightSynced: 'Synchronisé !',
  4760. unknownTag: 'Tag inconnu',
  4761. newTag: 'Nouveau tag détecté',
  4762. onScale: 'sur la balance',
  4763. linkSpool: 'Lier à une bobine',
  4764. linkTagTitle: 'Lier le tag à une bobine',
  4765. linkTag: 'Lier le tag',
  4766. selectSpool: 'Sélectionnez une bobine à lier à ce tag :',
  4767. noUntagged: 'Aucune bobine sans tag trouvée',
  4768. tagDetected: 'Tag détecté',
  4769. noTag: 'Pas de tag',
  4770. tagId: 'Tag',
  4771. grossWeight: 'Poids brut',
  4772. spoolSize: 'Taille bobine',
  4773. close: 'Fermer',
  4774. currentSpool: 'Bobine actuelle',
  4775. plateReady: 'Plateau prêt : {{name}}',
  4776. plateReadyLabel: 'Plateaux à libérer',
  4777. plateClearAction: 'Libérer',
  4778. plateClearedToast: 'Plateau marqué comme libéré',
  4779. plateClearFailed: 'Impossible de marquer le plateau comme libéré',
  4780. },
  4781. modal: {
  4782. spoolDetected: 'Bobine détectée',
  4783. assignToAms: 'Assigner à l\'AMS',
  4784. syncWeight: 'Synchroniser le poids',
  4785. weightSynced: 'Synchronisé !',
  4786. syncing: 'Synchronisation...',
  4787. newTagDetected: 'Nouveau tag détecté',
  4788. addToInventory: 'Ajouter à l\'inventaire',
  4789. assignToAmsTitle: 'Assigner à l\'AMS',
  4790. selectSlot: 'Sélectionner un emplacement',
  4791. assign: 'Assigner',
  4792. assigning: 'Attribution...',
  4793. assignSuccess: 'Assigné !',
  4794. assignError: 'Échec de l\'attribution de la bobine. Veuillez réessayer.',
  4795. noPrinterSelected: 'Sélectionner une imprimante...',
  4796. noAmsDetected: 'Aucun AMS détecté sur cette imprimante',
  4797. slot: 'Emplacement',
  4798. },
  4799. weight: {
  4800. noReading: 'Pas de lecture',
  4801. stable: 'Stable',
  4802. measuring: 'Mesure...',
  4803. tare: 'Tarer',
  4804. calibrate: 'Calibrer',
  4805. },
  4806. spool: {
  4807. remaining: 'Restant',
  4808. material: 'Matériau',
  4809. brand: 'Marque',
  4810. color: 'Couleur',
  4811. coreWeight: 'Noyau',
  4812. labelWeight: 'Étiquette',
  4813. scaleWeight: 'Balance',
  4814. netWeight: 'Net',
  4815. lastUsed: 'Dernière utilisation',
  4816. },
  4817. ams: {
  4818. noData: 'Aucun AMS détecté',
  4819. connectAms: 'Connectez un AMS pour voir les slots',
  4820. noPrinter: 'Aucune imprimante sélectionnée',
  4821. selectPrinter: 'Sélectionnez une imprimante dans la barre supérieure',
  4822. printerDisconnected: 'Imprimante déconnectée',
  4823. humidity: 'Humidité',
  4824. level: 'Niveau',
  4825. active: 'Actif',
  4826. slot: 'Slot',
  4827. empty: 'Vide',
  4828. },
  4829. inventory: {
  4830. search: 'Rechercher des bobines...',
  4831. empty: 'Aucune bobine dans l\'inventaire',
  4832. noResults: 'Aucune bobine correspondante',
  4833. spools: 'bobines',
  4834. addSpool: 'Ajouter une bobine',
  4835. },
  4836. settings: {
  4837. // Tabs
  4838. tabDevice: 'Appareil',
  4839. tabDisplay: 'Affichage',
  4840. tabScale: 'Balance',
  4841. tabUpdates: 'Mises à jour',
  4842. // Device tab
  4843. nfcReader: 'Lecteur NFC',
  4844. type: 'Type',
  4845. connection: 'Connexion',
  4846. notConnected: 'N/A',
  4847. deviceInfo: 'Info appareil',
  4848. hostname: 'Hôte',
  4849. uptime: 'Temps de fonctionnement',
  4850. // Display tab
  4851. brightness: 'Luminosité',
  4852. saved: 'Enregistré',
  4853. noBacklight: 'Aucun rétroéclairage DSI détecté. Le contrôle de luminosité nécessite un écran DSI.',
  4854. screenBlank: 'Délai d\'extinction',
  4855. screenBlankDesc: 'L\'écran s\'éteint après inactivité. Touchez pour réveiller.',
  4856. displayNote: 'La luminosité est appliquée comme filtre logiciel.',
  4857. // Scale tab
  4858. scaleCalibration: 'Calibration de la balance',
  4859. currentWeight: 'Poids actuel',
  4860. tareOffset: 'Tare',
  4861. calFactor: 'Facteur',
  4862. knownWeight: 'Poids connu',
  4863. calStep1: 'Retirez tout de la balance et appuyez sur Mettre à zéro.',
  4864. calStep2: 'Placez le poids connu sur la balance.',
  4865. setZero: 'Mettre à zéro',
  4866. calibrateNow: 'Calibrer',
  4867. calibrated: 'Calibré',
  4868. tareSet: 'Commande de tare envoyée. En attente de l\'appareil...',
  4869. tareFailed: 'Échec de l\'envoi de la commande de tare',
  4870. zeroSet: 'Point zéro défini. Placez le poids connu sur la balance.',
  4871. calibrationDone: 'Calibration terminée !',
  4872. calibrationFailed: 'Échec de la calibration',
  4873. lastCalibrated: 'Dernière calibration',
  4874. stable: 'Stable',
  4875. settling: 'Stabilisation...',
  4876. firmware: 'Firmware',
  4877. scale: 'Balance',
  4878. noDevice: 'Aucun appareil SpoolBuddy trouvé',
  4879. // Updates tab
  4880. daemonVersion: 'Version du daemon',
  4881. currentVersion: 'Actuelle',
  4882. versionPending: 'En attente du daemon...',
  4883. checking: 'Vérification...',
  4884. checkUpdates: 'Vérifier les mises à jour',
  4885. updateAvailable: 'Mise à jour disponible',
  4886. updateInstructions: 'Mise à jour via SSH : exécutez le script d\'installation SpoolBuddy.',
  4887. upToDate: 'À jour',
  4888. includeBeta: 'Inclure les versions bêta',
  4889. },
  4890. writeTag: {
  4891. tabExisting: 'Bobine existante',
  4892. tabNew: 'Nouvelle bobine',
  4893. tabReplace: 'Remplacer le tag',
  4894. searchPlaceholder: 'Rechercher par matériau, couleur, marque...',
  4895. noUntaggedSpools: 'Aucune bobine sans tag',
  4896. noTaggedSpools: 'Aucune bobine avec tag',
  4897. selectSpool: 'Sélectionnez une bobine, puis placez un NTAG sur le lecteur',
  4898. placeTag: 'Placez un NTAG sur le lecteur',
  4899. tagReady: 'Tag détecté — prêt à écrire',
  4900. writeTag: 'Écrire le tag',
  4901. replaceTag: 'Remplacer le tag',
  4902. writing: 'Écriture du tag...',
  4903. waiting: 'En attente de SpoolBuddy...',
  4904. writeSuccess: 'Tag écrit avec succès !',
  4905. writeFailed: 'Échec de l\'écriture',
  4906. queueFailed: 'Impossible de mettre en file la commande d\'écriture',
  4907. tryAgain: 'Réessayer',
  4908. cancel: 'Annuler',
  4909. replaceWarning: 'L\'ancien tag sera dissocié. Le nouveau tag le remplacera.',
  4910. deviceOffline: 'SpoolBuddy est hors ligne',
  4911. material: 'Matériau',
  4912. colorName: 'Nom de la couleur',
  4913. color: 'Couleur',
  4914. brand: 'Marque',
  4915. weight: 'Poids (g)',
  4916. createSpool: 'Créer la bobine',
  4917. creating: 'Création...',
  4918. spoolCreated: 'Bobine créée ! Prêt à écrire.',
  4919. createFailed: 'Impossible de créer la bobine',
  4920. },
  4921. quickMenu: {
  4922. printerPower: 'Alimentation imprimante',
  4923. systemControls: 'Système',
  4924. restartDaemon: 'Redémarrer le daemon',
  4925. restartBrowser: 'Redémarrer le navigateur',
  4926. reboot: 'Redémarrer',
  4927. shutdown: 'Éteindre',
  4928. swipeToClose: 'Glisser vers le bas pour fermer',
  4929. confirmTitle: 'Confirmer',
  4930. confirmShutdown: 'Êtes-vous sûr de vouloir éteindre le SpoolBuddy ? Vous aurez besoin d\'un accès physique pour le rallumer.',
  4931. confirmReboot: 'Êtes-vous sûr de vouloir redémarrer le SpoolBuddy ?',
  4932. confirmRestartDaemon: 'Redémarrer le daemon SpoolBuddy ? Le NFC et la balance seront temporairement indisponibles.',
  4933. confirmRestartBrowser: 'Redémarrer le navigateur kiosque ? L\'écran sera brièvement noir.',
  4934. confirm: 'Confirmer',
  4935. confirmPlugOn: 'Allumer {{name}} ?',
  4936. confirmPlugOff: 'Éteindre {{name}} ?',
  4937. turnOn: 'Allumer',
  4938. turnOff: 'Éteindre',
  4939. },
  4940. },
  4941. bugReport: {
  4942. title: 'Signaler un bug',
  4943. description: 'Description',
  4944. descriptionPlaceholder: 'Qu\'est-ce qui n\'a pas fonctionné ? Veuillez décrire le problème...',
  4945. email: 'E-mail (optionnel)',
  4946. emailPlaceholder: 'votre@email.fr',
  4947. emailPrivacy: 'Si fourni, votre e-mail sera inclus dans une section repliée de l\'issue GitHub pour que le mainteneur puisse vous contacter.',
  4948. screenshot: 'Capture d\'écran',
  4949. uploadOrPaste: 'Télécharger, coller ou glisser une image',
  4950. dataCollectedSummary: 'Quelles données sont incluses dans le rapport ?',
  4951. dataIncluded: 'Inclus :',
  4952. 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.',
  4953. dataNeverIncluded: 'Jamais inclus :',
  4954. 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.',
  4955. submit: 'Envoyer',
  4956. startLogging: 'Lancer la journalisation',
  4957. stepEnableLogging: 'Journalisation activée',
  4958. stepReproduce: 'Reproduisez le problème',
  4959. stepStopLogging: 'Arrêter & envoyer',
  4960. stopAndSubmit: 'Arrêter & Envoyer',
  4961. maxDuration: 'Arrêt auto après {{minutes}} min',
  4962. stoppingLogs: 'Collecte des journaux & envoi...',
  4963. submitting: 'Envoi du rapport de bug...',
  4964. submitSuccess: 'Rapport de bug envoyé avec succès !',
  4965. submitFailed: 'Échec de l\'envoi du rapport de bug',
  4966. thankYou: 'Merci !',
  4967. submitted: 'Votre rapport de bug a été soumis.',
  4968. viewIssue: 'Voir l\'issue',
  4969. unexpectedError: 'Une erreur inattendue est survenue',
  4970. },
  4971. failureDetection: {
  4972. title: 'Détection d\'échec par IA',
  4973. description: 'Surveille les impressions via une API ML Obico auto-hébergée et agit automatiquement sur les échecs détectés.',
  4974. mlUrl: 'URL de l\'API ML Obico',
  4975. mlUrlHint: 'URL de base de votre conteneur Obico ml_api auto-hébergé (ex. http://192.168.1.10:3333).',
  4976. test: 'Tester',
  4977. testSuccess: 'API ML accessible et fonctionnelle.',
  4978. testFailed: 'Impossible d\'atteindre l\'API ML.',
  4979. sensitivity: 'Sensibilité',
  4980. sensitivityLow: 'Basse (moins de faux positifs)',
  4981. sensitivityMedium: 'Moyenne (équilibrée)',
  4982. sensitivityHigh: 'Haute (détection précoce, plus de faux positifs)',
  4983. sensitivityHint: 'Ajuste les seuils de confiance qui déclenchent les avertissements et les échecs.',
  4984. action: 'Action sur échec détecté',
  4985. actionNotify: 'Notifier uniquement',
  4986. actionPause: 'Mettre en pause',
  4987. actionPauseOff: 'Pause et couper l\'alimentation',
  4988. pollInterval: 'Intervalle de vérification (secondes)',
  4989. pollIntervalHint: 'Fréquence de vérification de chaque imprimante pendant l\'impression. Minimum 5s, maximum 120s.',
  4990. externalUrlMissing: 'External URL is not set.',
  4991. externalUrlHint: 'The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.',
  4992. perPrinterTitle: 'Imprimantes surveillées',
  4993. perPrinterHint: 'Choisissez quelles imprimantes le service de détection surveille.',
  4994. monitorAll: 'Surveiller toutes les imprimantes connectées',
  4995. statusTitle: 'Statut',
  4996. serviceRunning: 'Service en cours d\'exécution',
  4997. thresholds: 'Seuils bas / haut',
  4998. activePrinters: 'Impressions actives',
  4999. noActivePrints: 'Aucune impression en cours.',
  5000. historyTitle: 'Détections récentes',
  5001. noHistory: 'Aucune détection pour le moment.',
  5002. },
  5003. makerworld: {
  5004. title: 'MakerWorld',
  5005. description: 'Collez une URL de modèle MakerWorld pour l\'importer et l\'imprimer directement depuis Bambuddy — sans passer par l\'application Bambu Handy.',
  5006. pasteUrlHeader: 'Importer depuis MakerWorld',
  5007. pasteUrlPlaceholder: 'https://makerworld.com/en/models/… ou collez n\'importe quel lien MakerWorld',
  5008. resolveButton: 'Résoudre',
  5009. signInRequiredTitle: 'Connexion Bambu Cloud requise pour télécharger',
  5010. 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.',
  5011. openCloudSettings: 'Ouvrir les paramètres Cloud',
  5012. untitledModel: 'Modèle sans titre',
  5013. byCreator: 'par {{name}}',
  5014. downloadsCount: '{{count}} téléchargements',
  5015. licensePrefix: 'Licence',
  5016. alreadyImported: 'Déjà dans la bibliothèque',
  5017. openOnMakerworld: 'Ouvrir sur MakerWorld',
  5018. alreadyInLibrary: 'Ce modèle est déjà dans votre bibliothèque — retrouvez-le dans Gestionnaire de fichiers → MakerWorld',
  5019. importSuccess: '{{filename}} importé — enregistré dans Gestionnaire de fichiers → MakerWorld',
  5020. platesHeader: 'Plateaux ({{count}})',
  5021. plateDefaultName: 'Plateau {{n}}',
  5022. materialCount: '{{count}} filaments',
  5023. amsRequired: 'AMS requis',
  5024. slicedFor: 'Sliced for {{printer}}',
  5025. alsoCompatible: 'Also marked compatible: {{printers}}',
  5026. importToLibrary: 'Enregistrer',
  5027. sliceIn: 'Enregistrer et découper dans {{slicer}}',
  5028. 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.',
  5029. lastImportSuccess: 'Importé dans votre bibliothèque',
  5030. lastImportAlreadyInLibrary: 'Déjà dans votre bibliothèque',
  5031. viewInLibrary: 'Voir dans le Gestionnaire de fichiers',
  5032. openInBambuStudio: 'Ouvrir dans Bambu Studio',
  5033. openInOrcaSlicer: 'Ouvrir dans OrcaSlicer',
  5034. importTo: 'Importer dans le Gestionnaire de fichiers',
  5035. recentImportsHeader: 'Imports récents',
  5036. phaseResolving: 'Résolution',
  5037. phaseDownloading: 'Téléchargement',
  5038. folderAuto: 'MakerWorld (par défaut)',
  5039. importAll: 'Tout importer',
  5040. importAllProgress: 'Importation de {{current}}/{{total}}',
  5041. openGallery: 'Ouvrir la galerie d\'images',
  5042. galleryPrev: 'Image précédente',
  5043. galleryNext: 'Image suivante',
  5044. deleteImport: 'Retirer de la bibliothèque',
  5045. importDeleting: 'Suppression…',
  5046. importDeleted: 'Retiré de la bibliothèque',
  5047. confirmDelete: 'Retirer {{filename}} de la bibliothèque ? Le fichier local est supprimé, mais la plaque peut être ré-importée depuis MakerWorld.',
  5048. errors: {
  5049. resolveFailed: 'Impossible de résoudre cette URL MakerWorld.',
  5050. downloadFailed: 'Le téléchargement a échoué. Veuillez réessayer.',
  5051. deleteFailed: 'Impossible de retirer le fichier de la bibliothèque.',
  5052. },
  5053. },
  5054. libraryTrash: {
  5055. title: 'Corbeille',
  5056. headerButton: 'Corbeille',
  5057. headerTooltip: 'Voir les fichiers déplacés dans la corbeille',
  5058. backToFiles: 'Retour au gestionnaire de fichiers',
  5059. subtitleAdmin: 'Les fichiers supprimés restent ici pendant {{days}} jours, puis sont supprimés automatiquement. Cette vue affiche la corbeille de tous les utilisateurs.',
  5060. subtitleUser: 'Les fichiers supprimés restent ici pendant {{days}} jours, puis sont supprimés automatiquement.',
  5061. loading: 'Chargement de la corbeille…',
  5062. loadError: 'Impossible de charger la corbeille.',
  5063. empty: 'La corbeille est vide.',
  5064. summary: '{{count}} fichiers · {{size}}',
  5065. emptyTrash: 'Vider la corbeille',
  5066. restore: 'Restaurer',
  5067. purgeNow: 'Supprimer maintenant',
  5068. autoPurgeIn: 'Suppression automatique dans {{when}}',
  5069. days: 'jours',
  5070. retentionLabel: 'Supprimer automatiquement après',
  5071. selectAll: 'Tout sélectionner',
  5072. selectOne: 'Sélectionner {{filename}}',
  5073. selectionCount: '{{count}} sélectionné(s)',
  5074. bulkRestore: 'Restaurer la sélection',
  5075. bulkPurge: 'Supprimer la sélection',
  5076. col: {
  5077. filename: 'Fichier',
  5078. folder: 'Dossier',
  5079. size: 'Taille',
  5080. deleted: 'Mis à la corbeille',
  5081. autoPurge: 'Suppression auto.',
  5082. owner: 'Propriétaire',
  5083. actions: 'Actions',
  5084. },
  5085. confirm: {
  5086. purgeTitle: 'Supprimer définitivement ?',
  5087. purgeBody: '{{filename}} sera supprimé du disque et ne pourra pas être restauré.',
  5088. emptyTitle: 'Vider la corbeille ?',
  5089. emptyBody: 'Tous les {{count}} fichiers seront supprimés du disque. Cette action est irréversible.',
  5090. bulkPurgeTitle: 'Supprimer définitivement les fichiers sélectionnés ?',
  5091. bulkPurgeBody: 'Les {{count}} fichiers sélectionnés seront supprimés du disque et ne pourront pas être restaurés.',
  5092. cta: 'Supprimer définitivement',
  5093. },
  5094. toast: {
  5095. restored: 'Fichier restauré.',
  5096. restoreFailed: 'Impossible de restaurer le fichier.',
  5097. purged: 'Fichier supprimé définitivement.',
  5098. purgeFailed: 'Impossible de supprimer le fichier.',
  5099. emptied: '{{count}} fichier(s) supprimé(s) de la corbeille.',
  5100. emptyFailed: 'Impossible de vider la corbeille.',
  5101. retentionSaved: 'Suppression automatique réglée sur {{days}} jours.',
  5102. retentionFailed: 'Impossible d\'enregistrer le réglage de rétention.',
  5103. bulkRestored: '{{count}} fichier(s) restauré(s).',
  5104. bulkPurged: '{{count}} fichier(s) supprimé(s).',
  5105. },
  5106. },
  5107. libraryPurge: {
  5108. title: 'Purger les anciens fichiers',
  5109. headerButton: 'Purger',
  5110. headerTooltip: 'Déplacer en masse les anciens fichiers vers la corbeille',
  5111. 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.',
  5112. ageLabel: 'Déplacer les fichiers plus anciens que',
  5113. days: 'jours',
  5114. includeNeverPrinted: 'Inclure les fichiers jamais imprimés',
  5115. effectsTitle: 'What happens when you click Purge',
  5116. effect1: 'Matching files are moved to Trash — they are not deleted from disk yet.',
  5117. effect2: 'You can restore them from Trash at any time until the retention window expires.',
  5118. effect3: 'After retention, the trash sweeper permanently removes them from disk.',
  5119. effect4: 'Files in external (linked) folders are skipped — Bambuddy never deletes bytes it does not own.', previewLoading: 'Vérification du nombre de fichiers concernés…',
  5120. previewFailed: 'Impossible de prévisualiser la purge.',
  5121. previewSummary: '{{count}} fichiers · {{size}} seraient déplacés vers la corbeille',
  5122. andMore: '…et {{count}} de plus',
  5123. 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.',
  5124. confirmCta: 'Déplacer {{count}} vers la corbeille',
  5125. purging: 'Déplacement vers la corbeille…',
  5126. toast: {
  5127. success: '{{count}} fichier(s) déplacé(s) vers la corbeille.',
  5128. failed: 'Impossible de purger les fichiers.',
  5129. },
  5130. },
  5131. libraryAutoPurge: {
  5132. enableLabel: 'Purge automatique des anciens fichiers',
  5133. 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.',
  5134. ageLabel: 'Purger automatiquement les fichiers plus anciens que',
  5135. ageDescription: 'Minimum 7 jours, maximum 10 ans. Utilise la même règle d\'ancienneté que le bouton Purger manuel.',
  5136. days: 'jours',
  5137. includeNeverPrinted: 'Inclure les fichiers jamais imprimés',
  5138. saveFailed: 'Impossible d\'enregistrer les paramètres de purge automatique.',
  5139. },
  5140. archivePurge: {
  5141. headerButton: 'Purge old',
  5142. headerTooltip: 'Bulk-delete old archives',
  5143. title: 'Purge old archives',
  5144. description: 'Clear out old print history. Each archive is aged by its most recent print completion — reprinting an archive refreshes its age, so active work is never purged.',
  5145. ageLabel: 'Delete archives not printed in the last',
  5146. days: 'days',
  5147. effectsTitle: 'What happens when you click Purge',
  5148. effect1: 'Each matching archive is permanently removed from the database.',
  5149. effect2: 'The 3MF, thumbnail, timelapse, source 3MF, F3D design file, and photo folder are all deleted from disk.',
  5150. effect3: 'There is no trash bin for archives — deletion is immediate and cannot be undone.',
  5151. effect4: 'Reprinting an archive refreshes its age clock, so archives you still use are safe.',
  5152. previewLoading: 'Checking how many archives match…',
  5153. previewFailed: 'Could not preview the purge.',
  5154. previewSummary: '{{count}} archives · {{size}} would be deleted',
  5155. andMore: '…and {{count}} more',
  5156. warning: 'This is permanent. Download or favourite anything you want to keep before continuing.',
  5157. confirmCta: 'Delete {{count}} archive(s)',
  5158. purging: 'Deleting…',
  5159. toast: {
  5160. success: 'Deleted {{count}} archive(s).',
  5161. failed: 'Could not purge archives.',
  5162. },
  5163. },
  5164. archiveAutoPurge: {
  5165. enableLabel: 'Auto-purge old archives',
  5166. enableDescription: 'Once per day, permanently deletes archives that have not been printed within the threshold. Reprinting an archive resets the clock. No trash bin — deletion is immediate.',
  5167. ageLabel: 'Auto-delete archives not printed in the last',
  5168. ageDescription: 'Minimum 7 days, maximum 10 years. Based on the most recent print completion — reprinting an archive refreshes its age. Deletes the archive, 3MF, thumbnail, timelapse, and photos.',
  5169. days: 'days',
  5170. runNow: 'Purge archives now',
  5171. saveFailed: 'Could not save auto-purge settings.',
  5172. },
  5173. cameraTokens: {
  5174. title: 'Camera API Tokens',
  5175. navTitle: 'Camera API tokens',
  5176. description:
  5177. 'Long-lived tokens for embedding the camera stream into Home Assistant, Frigate, kiosks, or any other tool that needs a stable URL. Each token is camera-stream-only and can be revoked at any time.',
  5178. loading: 'Loading…',
  5179. confirmRevoke: {
  5180. title: 'Revoke this token?',
  5181. body: 'Any device using "{{name}}" will lose access immediately. This cannot be undone.',
  5182. cancel: 'Cancel',
  5183. confirm: 'Revoke',
  5184. },
  5185. create: {
  5186. title: 'Create new token',
  5187. nameLabel: 'Token name',
  5188. namePlaceholder: 'e.g. Home Assistant',
  5189. daysLabel: 'Days until expiry',
  5190. submit: 'Create',
  5191. hint:
  5192. 'Maximum lifetime is 365 days. The token value is shown only once on creation — copy it now.',
  5193. },
  5194. created: {
  5195. title: 'Token created — copy it now',
  5196. warning:
  5197. 'This is the only time this token will be visible. After you close this dialog you can never view it again.',
  5198. copy: 'Copy',
  5199. dismiss: "I've saved it",
  5200. },
  5201. list: {
  5202. myTitle: 'My tokens',
  5203. allTitle: 'All users (admin view)',
  5204. empty: 'No tokens yet.',
  5205. name: 'Name',
  5206. owner: 'Owner',
  5207. prefix: 'Prefix',
  5208. created: 'Created',
  5209. expires: 'Expires',
  5210. lastUsed: 'Last used',
  5211. revoke: 'Revoke',
  5212. expired: 'Expired',
  5213. },
  5214. toast: {
  5215. created: 'Token created',
  5216. createFailed: 'Failed to create token',
  5217. revoked: 'Token revoked',
  5218. revokeFailed: 'Failed to revoke token',
  5219. loadFailed: 'Failed to load tokens',
  5220. copied: 'Copied to clipboard',
  5221. copyFailed: 'Copy failed — select and copy manually',
  5222. },
  5223. },
  5224. };