@abtnode/blocklet-services 1.17.8-beta-20260116-080047-9fdd00d3 → 1.17.8-beta-20260119-102944-6ba93a16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AdapterDayjs-BI3dme25.js → AdapterDayjs-CYW0YvmK.js} +1 -1
- package/dist/assets/{Google-BMSeyXdi.js → Google-DKRt92nm.js} +1 -1
- package/dist/assets/{access-control-CSfPgD_B.js → access-control-RI6LQbSm.js} +1 -1
- package/dist/assets/{actions-Ng-YRTer.js → actions-BlWED76c.js} +2 -2
- package/dist/assets/{actions-Dktj9pEF.js → actions-DydkTgA0.js} +1 -1
- package/dist/assets/{add-component-core-DOIm-W83.js → add-component-core-nc1ps0ni.js} +32 -32
- package/dist/assets/{add-resource-_wuuBiJJ.js → add-resource-BVOdOQSW.js} +1 -1
- package/dist/assets/{addon-N_sS-Sx6.js → addon-DfWedLEC.js} +1 -1
- package/dist/assets/{advanced-BhbxG-_n.js → advanced-CuKHqbLO.js} +2 -2
- package/dist/assets/{aigne-DElJAbjP.js → aigne-6nMSoyeQ.js} +1 -1
- package/dist/assets/{appearance-D71HSeGD.js → appearance-C9TkbSjV.js} +1 -1
- package/dist/assets/{ar-BHqjWgUQ.js → ar-DOhYGTlW.js} +1 -1
- package/dist/assets/{audit-logs-Ci_HlT4m.js → audit-logs-DKGke9hI.js} +2 -2
- package/dist/assets/{authorize-DQERA3Vv.js → authorize-DkSqywe8.js} +1 -1
- package/dist/assets/{base-chart-DWXZOkNE.js → base-chart-DcZV4ZCI.js} +1 -1
- package/dist/assets/{base32-Cpvj2sD4.js → base32-7iZvvdX8.js} +1 -1
- package/dist/assets/{bind-account-BIzFrnLk.js → bind-account-DOwM9Nhe.js} +1 -1
- package/dist/assets/branding-Cak2s8bn.js +1 -0
- package/dist/assets/{branding-BHJqY7Mz.js → branding-CwSyd5WC.js} +1 -1
- package/dist/assets/{branding-DAdwbyWZ.js → branding-lcfxmmPp.js} +1 -1
- package/dist/assets/{bundle-avatar-sDqev1Fh.js → bundle-avatar-DwiOyeMO.js} +1 -1
- package/dist/assets/button-uUU4Wycr.js +1 -0
- package/dist/assets/{click-to-copy-RBTqACSW.js → click-to-copy-BgIYUMoo.js} +1 -1
- package/dist/assets/{collapse-DWmyzfnW.js → collapse-RMuUWnK3.js} +1 -1
- package/dist/assets/{complete-D6XDZtnV.js → complete-Udiv_yFp.js} +1 -1
- package/dist/assets/{component-B2qSKMGx.js → component-CuKviNC8.js} +2 -2
- package/dist/assets/{config-oF-A1tKe.js → config-6IwEgT3b.js} +1 -1
- package/dist/assets/{config-Ca5tnO9j.js → config-CJwxv2uK.js} +1 -1
- package/dist/assets/{config-fYkZxdEr.js → config-D1OcHGlN.js} +4 -4
- package/dist/assets/{config-navigation-BEYJ5bSz.js → config-navigation-hDihVsjx.js} +2 -2
- package/dist/assets/{config-space-HmsYCb6s.js → config-space-DfstlHnF.js} +1 -1
- package/dist/assets/{confirm-DQYDHHdS.js → confirm-CdVn5WdC.js} +1 -1
- package/dist/assets/{connect-COLwEMSx.js → connect-CT2vMz6l.js} +3 -3
- package/dist/assets/{connect-ydb7rKXe.js → connect-DA7RO2yv.js} +1 -1
- package/dist/assets/{connect-BeWeBwCA.js → connect-Dy0Y8HRB.js} +1 -1
- package/dist/assets/{connect-to-C3ac4B-g.js → connect-to-CQMUbQkH.js} +1 -1
- package/dist/assets/{content-layout-CanSZTqf.js → content-layout-Dlmn5DW6.js} +1 -1
- package/dist/assets/{create-passport-svg-De1vqcmo.js → create-passport-svg-hldNORaB.js} +1 -1
- package/dist/assets/{createClass-CRUn7w67.js → createClass-CgfWUrk8.js} +1 -1
- package/dist/assets/{dashboard-BZiea8Z_.js → dashboard-BvI3ii8Z.js} +2 -2
- package/dist/assets/{de-QUGQFv2K.js → de-CtKPdGk6.js} +1 -1
- package/dist/assets/{delete-confirm-CpaOkuin.js → delete-confirm-CkiUXocp.js} +1 -1
- package/dist/assets/{did-address-DRYM96gB.js → did-address-CG36eCOx.js} +1 -1
- package/dist/assets/{domain-D9Kc4Rgt.js → domain-CDTeLbkZ.js} +1 -1
- package/dist/assets/{domain-action-card-ugKl692S.js → domain-action-card-kMPYS2Nj.js} +1 -1
- package/dist/assets/domains-TI6o1CvX.js +1 -0
- package/dist/assets/{email-DDyG3qPR.js → email-DHRHueET.js} +2 -2
- package/dist/assets/{empty-spinner-ChYvCNCV.js → empty-spinner-DB1GKIOS.js} +1 -1
- package/dist/assets/engine-D_fEFx9_.js +1 -0
- package/dist/assets/{es-C4w6cL07.js → es-BSYtSZPg.js} +1 -1
- package/dist/assets/{exchange-passport-DoiXZo5M.js → exchange-passport-Cc872mjQ.js} +1 -1
- package/dist/assets/{fallback-CZRO9TTQ.js → fallback-D-IHOW-7.js} +1 -1
- package/dist/assets/{form--iZWaH7Y.js → form-Co-tgocU.js} +1 -1
- package/dist/assets/{form-text-input-Cs-LuCu0.js → form-text-input-CPLafaTk.js} +1 -1
- package/dist/assets/{form-wrapper-EixE0Jkw.js → form-wrapper-kWYD3nZz.js} +1 -1
- package/dist/assets/{fr-Bq3UipEu.js → fr-C35fi7h9.js} +1 -1
- package/dist/assets/{fuel-C85y6XSK.js → fuel-BFx1ShM2.js} +1 -1
- package/dist/assets/{gen-access-key-DxF-VBeV.js → gen-access-key-DrgLVRbm.js} +1 -1
- package/dist/assets/{gen-simple-access-key-Cxq1_uy6.js → gen-simple-access-key-B24d6k7g.js} +1 -1
- package/dist/assets/get-safe-url-beob4f2C.js +1 -0
- package/dist/assets/{hi-DGZy0DLh.js → hi-5fpYJkiW.js} +1 -1
- package/dist/assets/{home-EzPPxjBW.js → home-Dw18IODa.js} +1 -1
- package/dist/assets/{id-DOzDilAf.js → id-DoVb0JYr.js} +1 -1
- package/dist/assets/{iframe-C5nvJ0m0.js → iframe-DUzp97tk.js} +1 -1
- package/dist/assets/{index-B3ArnS-X.js → index--WQuhwJL.js} +1 -1
- package/dist/assets/{index-Cw8Yly1u.js → index-2M4w6J9r.js} +1 -1
- package/dist/assets/{index-D3fA5iF-.js → index-3H6a5edM.js} +1 -1
- package/dist/assets/{index-_uJPC7_n.js → index-8RHrVCC6.js} +1 -1
- package/dist/assets/{index-BM9QepzF.js → index-B-8044Gs.js} +22 -11
- package/dist/assets/{index-Ba_SJ3UV.js → index-B6l4xGy5.js} +2 -2
- package/dist/assets/{index-CbZQvtgh.js → index-B9FojAjj.js} +1 -1
- package/dist/assets/{index-BQFgfBFX.js → index-BOPR4Iyc.js} +2 -2
- package/dist/assets/{index-VlFqUdI2.js → index-BUhEyicQ.js} +1 -1
- package/dist/assets/{index-DGU5RA0-.js → index-BeunkI-Z.js} +3 -3
- package/dist/assets/{index-_bvucGkF.js → index-Bo9KtpTY.js} +1 -1
- package/dist/assets/{index-r7svI4rK.js → index-Bpic07NM.js} +7 -7
- package/dist/assets/{index-BuucS_rQ.js → index-C1fKsLzf.js} +1 -1
- package/dist/assets/{index-D_ymA2Th.js → index-C4ZzROeE.js} +5 -5
- package/dist/assets/{index-sb6EjUcD.js → index-CEJb82tA.js} +1 -1
- package/dist/assets/{index-Ca33rdd_.js → index-CXp5SI_f.js} +82 -82
- package/dist/assets/{index-zkaWHEAS.js → index-C_kNXHsF.js} +1 -1
- package/dist/assets/{index-DvQIPWQ6.js → index-Cax1AxL9.js} +1 -1
- package/dist/assets/{index-Ca5zgzpl.js → index-CfvGuvbD.js} +1 -1
- package/dist/assets/{index-BbO4pSmm.js → index-CqCXPf7W.js} +1 -1
- package/dist/assets/{index-p0MfrvgW.js → index-Cx0E03Bs.js} +1 -1
- package/dist/assets/{index-CL5ZGYlc.js → index-D3BuekEe.js} +3 -3
- package/dist/assets/{index-D4_8N2le.js → index-D6pCyJv8.js} +1 -1
- package/dist/assets/{index-Ddl9fWMP.js → index-DFUM0Pvk.js} +1 -1
- package/dist/assets/{index-B3fG443w.js → index-DH4rC-7M.js} +1 -1
- package/dist/assets/{index-B2PeJoug.js → index-DKzBOJCu.js} +2 -2
- package/dist/assets/index-DL0wTcgx.js +1 -0
- package/dist/assets/{index-C9V4aWeM.js → index-DWHFecw2.js} +4 -4
- package/dist/assets/{index-Dxb3MonW.js → index-DcW3jqfL.js} +1 -1
- package/dist/assets/{index-CxOxF1pg.js → index-Di2nSesc.js} +1 -1
- package/dist/assets/{index-CiCryHDZ.js → index-DqcciDRh.js} +2 -2
- package/dist/assets/{index-DCxNOCc2.js → index-VKjWmvRV.js} +1 -1
- package/dist/assets/{index-DVOweIMx.js → index-Vf51dp11.js} +1 -1
- package/dist/assets/{index-2AyCotIy.js → index-ZzcJ7eKO.js} +1 -1
- package/dist/assets/{index-Bwibx9MU.js → index-bEFOmVth.js} +1 -1
- package/dist/assets/{info-outline-rounded-DVdLJtdi.js → info-outline-rounded-DlgANjBB.js} +1 -1
- package/dist/assets/{invitation-CUluW5mi.js → invitation-BP8hOEFv.js} +1 -1
- package/dist/assets/invitations-C8aZLxdl.js +3 -0
- package/dist/assets/{invite-zC3nU84H.js → invite-Cd5zEHFb.js} +1 -1
- package/dist/assets/{issue-passport-B_pYDft0.js → issue-passport-D7zqv3Al.js} +1 -1
- package/dist/assets/{item-DoUn7xhc.js → item-DNj7ORqk.js} +1 -1
- package/dist/assets/{ja-DMq-YXDX.js → ja-DZPUwZ9l.js} +1 -1
- package/dist/assets/{ko-BrYbXurh.js → ko-q4i4r9g6.js} +1 -1
- package/dist/assets/{landing-page-BJAji-kI.js → landing-page-JLA-ZD1t.js} +1 -1
- package/dist/assets/{launch-result-message-B2nhmkKt.js → launch-result-message-DJqF-slD.js} +1 -1
- package/dist/assets/{layout-CydCBGqn.js → layout-Cwvm7lmD.js} +1 -1
- package/dist/assets/{list-BIwaCPhs.js → list-3MUy-8Ol.js} +2 -2
- package/dist/assets/{list-CO8Xp7iX.js → list-BSXHuqLM.js} +1 -1
- package/dist/assets/{list-header-DQZTNnUc.js → list-header-BEZSwSji.js} +1 -1
- package/dist/assets/localization-Dond4H78.js +1 -0
- package/dist/assets/{log-JZXyzrRA.js → log-Bq445Z1e.js} +1 -1
- package/dist/assets/logger-CCAAJ2Xo.js +1 -0
- package/dist/assets/{login-CU5Tw5QB.js → login-dc2t9Qyo.js} +1 -1
- package/dist/assets/{login-method-item-KhJ672kA.js → login-method-item-CyTsqz88.js} +1 -1
- package/dist/assets/{login-oauth-callback-Bz7N73Sg.js → login-oauth-callback-Bext19kc.js} +1 -1
- package/dist/assets/{logo-uploader-DjKJkvts.js → logo-uploader-CyZuvhwV.js} +1 -1
- package/dist/assets/{lost-passport-CyJVtH1V.js → lost-passport-BiYg3QQI.js} +1 -1
- package/dist/assets/{metadata-CkzdOpl3.js → metadata-B2-Ltdko.js} +1 -1
- package/dist/assets/{nav-menu-5M0Q4jYU.js → nav-menu-DSdXRbfg.js} +1 -1
- package/dist/assets/{open-window-DphH3aTv.js → open-window-Dyu79ome.js} +1 -1
- package/dist/assets/over-due-invoice-payment-DzUsy6q0.js +1 -0
- package/dist/assets/{overview-CGIG2I_w.js → overview-0TBmi-_i.js} +1 -1
- package/dist/assets/{page-header-B0HpJClf.js → page-header-qdK3sAJh.js} +1 -1
- package/dist/assets/{passport-DKYg_d4G.js → passport-BhEaZ-sr.js} +1 -1
- package/dist/assets/{passport-item-CjcqN_g-.js → passport-item-DHwif94N.js} +1 -1
- package/dist/assets/{permission-DhyiLNfC.js → permission-CvrrGfG6.js} +1 -1
- package/dist/assets/preferences-BBSWzZiT.js +1 -0
- package/dist/assets/profile-embed-shcOdRUI.js +1 -0
- package/dist/assets/{provider-icon-DX-QfJQN.js → provider-icon-DO2PqSth.js} +1 -1
- package/dist/assets/{pt-Dl6732JN.js → pt-BFCHl6F1.js} +1 -1
- package/dist/assets/{publish-resource-vCC9AfJK.js → publish-resource-CMuHIOUf.js} +1 -1
- package/dist/assets/{react-beautiful-dnd.esm-bkXlrjYw.js → react-beautiful-dnd.esm-CWJ5I9Zv.js} +1 -1
- package/dist/assets/{react-stripe.esm-BBCEegrE.js → react-stripe.esm-B-FTN8ep.js} +1 -1
- package/dist/assets/{required-11pmtzQr.js → required-DnQpCGsD.js} +1 -1
- package/dist/assets/{ru-CVUeN9AX.js → ru-CSTl62kK.js} +1 -1
- package/dist/assets/{runtime-BjKYEBG_.js → runtime-B_ZLP4FF.js} +1 -1
- package/dist/assets/sdk-CktKu_IW.js +1 -0
- package/dist/assets/{section-ewv0pNWr.js → section-CZylgxjz.js} +1 -1
- package/dist/assets/{security-Xrnc8Gqe.js → security-DHRU8k0u.js} +1 -1
- package/dist/assets/{session-lE2gmzzF.js → session-Bp3LV7zJ.js} +1 -1
- package/dist/assets/{setup-p5LUFpYK.js → setup-B6-Ei_3X.js} +1 -1
- package/dist/assets/{shorten-label-1iJcvGQT.js → shorten-label-CuBHsWUR.js} +1 -1
- package/dist/assets/{simple-select-BKXEgxog.js → simple-select-nI-W90c_.js} +1 -1
- package/dist/assets/{spaces-Ckljlc4d.js → spaces-ix8u0ZiI.js} +1 -1
- package/dist/assets/{start-BE-C9MhV.js → start-oRp78RMQ.js} +1 -1
- package/dist/assets/{starting-progress-DC-J-5Os.js → starting-progress-CWp5fTY0.js} +1 -1
- package/dist/assets/{status-DR5t3VVx.js → status-Dn_LKaNp.js} +1 -1
- package/dist/assets/{step-actions-CArEuzNw.js → step-actions-DIZRcnXf.js} +1 -1
- package/dist/assets/{studio-BEzAGvQT.js → studio-CVIa8-XY.js} +1 -1
- package/dist/assets/{switch-CmVFEdik.js → switch-BbyTGEOo.js} +1 -1
- package/dist/assets/{switch-control-DbLHF-NB.js → switch-control-BRjXGc1d.js} +1 -1
- package/dist/assets/{table-tips-DQIh1EQR.js → table-tips-Dvmdodc5.js} +1 -1
- package/dist/assets/{team-7-48iuwj.js → team-BTz28XqK.js} +1 -1
- package/dist/assets/{th-32eBNQes.js → th-D75Dlluo.js} +1 -1
- package/dist/assets/theme-mode-toggle-D3bcd10D.js +1 -0
- package/dist/assets/{traffic-Dwd2RNqG.js → traffic-Cea69sMW.js} +1 -1
- package/dist/assets/{transfer-BwnSX6wY.js → transfer-BydXCVCg.js} +1 -1
- package/dist/assets/unsubscribe-BjAjx-Fl.js +1 -0
- package/dist/assets/{use-app-logo-BzsLZwwK.js → use-app-logo-IRizt64R.js} +1 -1
- package/dist/assets/{use-blocklet-logo-BWPJOOVd.js → use-blocklet-logo-Cf1j7pQz.js} +1 -1
- package/dist/assets/{use-mobile-DgmmfWdl.js → use-mobile-CyUZDIaX.js} +1 -1
- package/dist/assets/{use-mobile-BSL5RsRd.js → use-mobile-DFkQ5N0b.js} +1 -1
- package/dist/assets/{use-mobile-TAIHvgoJ.js → use-mobile-DwGMuJlg.js} +1 -1
- package/dist/assets/{use-server-logo-BLcfNvrR.js → use-server-logo-KZn9RrZd.js} +1 -1
- package/dist/assets/{use-window-close-D2_118dJ.js → use-window-close-Dpj5UcYT.js} +1 -1
- package/dist/assets/{useAsyncRetry-B-Txlvk6.js → useAsyncRetry-C4R9ufi-.js} +1 -1
- package/dist/assets/{useLocalStorage-D6axLnAi.js → useLocalStorage-BQfIniHX.js} +1 -1
- package/dist/assets/{user-center-DBscV1le.js → user-center-6K47tx8j.js} +5 -5
- package/dist/assets/{user-follower-Di51icra.js → user-follower-BwzTutxU.js} +1 -1
- package/dist/assets/{util-DCHBQZpP.js → util-DkTwHdRu.js} +1 -1
- package/dist/assets/{util-ad0rjUA1.js → util-DySzCymV.js} +1 -1
- package/dist/assets/{vendor-arcblock-ivFYo5vP.js → vendor-arcblock-Dll6qxMT.js} +1 -1
- package/dist/assets/{vendor-mui-core-D7t4vMS5.js → vendor-mui-core-CV-FnYH_.js} +1 -1
- package/dist/assets/{vendor-mui-x-BpPw6UfF.js → vendor-mui-x-DwN6dcQH.js} +1 -1
- package/dist/assets/{vendor-ux-Dl3wVbv_.js → vendor-ux-CLT2i3Pv.js} +2 -2
- package/dist/assets/{vi-DF8IinAc.js → vi-D1mKYrmb.js} +1 -1
- package/dist/assets/{wait-connect-DOIonmAv.js → wait-connect-q0_7mz_u.js} +1 -1
- package/dist/assets/wallet-hidden-topbar-joIVZ1nl.js +68 -0
- package/dist/assets/{wizard-CrkxQgBY.js → wizard-C5Kl-g70.js} +1 -1
- package/dist/assets/{wizard-components-BzPyRFRt.js → wizard-components-DQrlaeeW.js} +1 -1
- package/dist/assets/wrap-locale-5DJTJTXP.js +1 -0
- package/dist/assets/{zh-DQQBhbva.js → zh-CJ9vCpmv.js} +1 -1
- package/dist/assets/{zh-ByJkLAV1.js → zh-G2I44gfs.js} +1 -1
- package/dist/assets/{zh-tw-34G9tsUP.js → zh-tw-C4Juvs-i.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +31 -31
- package/dist/assets/branding-D-ShZ8m2.js +0 -1
- package/dist/assets/button-B_Qd9K_t.js +0 -1
- package/dist/assets/domains-B9b2gmbn.js +0 -1
- package/dist/assets/engine-L1SEogaX.js +0 -1
- package/dist/assets/get-safe-url-D4zRnTpF.js +0 -1
- package/dist/assets/index-BoJbHOhC.js +0 -1
- package/dist/assets/invitations-gJ3uAWGN.js +0 -3
- package/dist/assets/localization-BYdi6ljV.js +0 -1
- package/dist/assets/logger-BMHd-C1S.js +0 -1
- package/dist/assets/over-due-invoice-payment-DD_j5vb4.js +0 -1
- package/dist/assets/preferences-DHjRWgwZ.js +0 -1
- package/dist/assets/profile-embed-Gc79_Dhj.js +0 -1
- package/dist/assets/sdk-CXEy5Pgp.js +0 -1
- package/dist/assets/theme-mode-toggle-BltDSXhy.js +0 -1
- package/dist/assets/unsubscribe-CP0mTwWi.js +0 -1
- package/dist/assets/wallet-hidden-topbar-DKISAPb3.js +0 -68
- package/dist/assets/wrap-locale-BJF_SaOe.js +0 -1
|
@@ -2,6 +2,6 @@ const e={setup:{connect:{title:"Configurer le serveur Blocklet",scan:"Utilisez l
|
|
|
2
2
|
Mode portrait :
|
|
3
3
|
Ratio : 9:16
|
|
4
4
|
Mode paysage :
|
|
5
|
-
Ratio : 16:9`,copyrightDesc:"Utilisé dans : pied de page du site web",appUrlDesc:"Utilisé dans : plan du site et partage social",advanced:"Configuration avancée",errorReason:"Le démarrage de Blocklet a échoué, mais vous pouvez y accéder en cliquant sur le bouton ci-dessous.",nameValidateError:"Invalide : commence par une lettre/chiffre, 3–129 caractères, uniquement a–z, 0–9, - et _."},overview:{source:"Source",deployedFrom:"Déployé depuis",accessControl:"Contrôle d'accès",viewInStore:"Voir en magasin"},diskInfo:{empty:"Informations sur le disque non disponibles actuellement !",appDir:"Répertoire des applications",dataDir:"Répertoire des données",logDir:"Répertoire des journaux",cacheDir:"Répertoire de cache"},runtimeInfo:{noRunning:"Les informations d'exécution seront disponibles lorsque le blocklet sera en cours d'exécution !",memoryUsage:"Utilisation de la mémoire",cpuUsage:"Utilisation du CPU",uptime:"Temps de fonctionnement",port:"Port",processId:"Identifiant de processus",dataStorage:"Stockage de données"},dist:{downloadLink:"Lien de téléchargement",verify:"Vérifier"},status:{added:"Ajouté",waiting:"Attente",downloading:"Téléchargement",extracting:"Extraction",installing:"Installation",upgrading:"Mise à niveau",installed:"Installé",created:"Créé",starting:"Commencement",running:"Courir",stopping:"Arrêt",stopped:"Arrêté",error:"Erreur",deleting:"Suppression",corrupted:"Corrompu",purchasing:"En attente d'achat",purchased:"Acheté",verifying:"Vérification de l'achat",resource:"Ressource",failWithOldVersion:"La nouvelle version n'a pas pu démarrer, Blocklet fonctionne sur l'ancienne version.",hasSomeErrors:"{blocklets} ne sont pas entièrement opérationnels, peut-être en raison de problèmes ou d'un démarrage en attente."},list:{download:"Télécharger",star:"Étoile",searchPlaceholder:"Rechercher par nom de Blocklet ou DID"},component:{container:"Configuration globale",showContainer:"Afficher la configuration globale",didSpaceConfig:"Configurer les espaces DID",didSpaceConfigTip:"Veuillez remplir le processus d'autorisation suivant pour stocker les données de l'application dans les espaces DID",didSpaceConnected:"Autorisation de stockage pour: {endpoint}",checkUpdateTitle:"Vérifier les mises à jour",updateTitle:"Mise à jour des composants",noUpdate:"Aucun composant à mettre à jour",add:"Ajouter un composant",selectComponent:"Sélectionnez un Blocklet",selectRegistry:"Sélectionnez le Blocklet Store",selectRegistryTip:"Vous pouvez passer au magasin de blocs pour voir plus de composants",selectInstance:"Sélectionnez une instance",selectInstanceTip:"Vous pouvez sélectionner une instance existante ou créer une nouvelle instance. Les instances existantes utiliseront les configurations et les données préalablement enregistrées.",newInstance:"Créer une nouvelle instance",noComponent:"Aucun composant",mountPoint:"Quel est le point de montage?",mountPointTip:"Si vous définissez le point de montage sur '/mon-préfixe', alors toutes les requêtes commençant par ce point de montage seront routées vers le composant sélectionné.",delete:"Supprimer le composant",deleteDescription:"Ce composant ne sera pas accessible après sa suppression. Confirmer la suppression?",purchase:"Paiement requis",tip:{stopBlocklet:"Veuillez arrêter d'abord l'exécution de Blocklet",requiredBy:"Le composant est requis par {name}"},choose:"Choisir",addWithName:"Ajouter Blocklet à {name}",installingCanCloseWindowTip:"Installation du composant en arrière-plan, vous pouvez fermer cette fenêtre en toute sécurité",installSuccessTip:"Félicitations, le composant a été installé avec succès !",missDownloadTokenTip:"Impossible d'ajouter de composant payant sans jeton de téléchargement valide",purchaseComponentSecondCheckTip:"Veuillez présenter votre achat de blocklet NFT pour continuer",installComponentError:"Une erreur s'est produite lors de l'installation du composant, veuillez réessayer",downloadComponentError:"Une erreur s'est produite lors du téléchargement du composant, veuillez réessayer",addComponentTip:{introduction:"Bienvenue dans l'Assistant Ajouter un composant",isPurchase:"Vous devez vérifier le NFT avant d'utiliser <b>{name}</b> en tant que composant",belowInformation:"Ci-dessous se trouvent les informations pour le composant:",verifyNFT:"Veuillez sélectionner la méthode de vérification NFT",config:"Veuillez remplir la configuration du composant",environment:"Veuillez remplir l'environnement du composant",fromUrl:"Ajouter un blocklet à partir d'une URL",fromUpload:"Ajouter un Blocklet depuis un téléchargement",uploadFailed:"Échec du téléchargement",allowedFileTypes:"Types de fichiers autorisés pour le téléchargement : {types}"},addNext:"Ajouter {name}",upgradeNext:"Mise à niveau de {name}",setting:"Paramètres",noDependencies:"{name} n'a aucune dépendance",relatedComponents:"Blocklets associés",required:"Obligatoire",installed:"Installé",installingTip:"Installation du composant, veuillez patienter...",upgrade:"Mise à niveau",upgradeAvailable:"Mise à jour disponible",needBuy:"Achat nécessaire",isOfficial:"Officiellement certifié"},router:{urlPath:"Chemin d'URL",noRunning:"Le blocklet n'est pas actuellement démarré. Impossible d'y accéder via l'adresse suivante!",securitySetting:"Paramètre de sécurité",checkUrlAccessible:"Vérifiez l'accessibilité de l'adresse",urlInaccessible:"Cela peut être dû à des problèmes de réseau, l'adresse est temporairement inaccessible",noAccessibleUrl:"Aucune URL accessible",domainLockTooltip:"Le domaine généré par le système ne peut pas être modifié.",urlLockTooltip:"Le chemin d'URL généré par le système ne peut pas être modifié.",showAllDomains:"Afficher tous les domaines",showAllDIDs:"Afficher tous les DIDs",currentDomainTip:"Vous accédez à la page actuelle via ce domaine"},export:{title:"Exporter le bloclet",name:"Nom du bundle",nameTip:'par exemple : "mon-nom-de-blocklet" ou "@mon-scope/nom-de-blocklet"',result:"Qu'est-ce qui vient ensuite",exportSource:"Source d'exportation",success:"Blocklet exporté avec succès",resultTipStart:"Avec",resultTipEnd:"Vous pouvez construire et publier ce blocklet en quelques minutes",uploadedComponentTip:"Les composants directement téléchargés ne peuvent pas être exportés:"},migrate:{title:"Migrer l'application",scan:"Connectez votre portefeuille DID pour générer une paire de clés pour cette application",confirm:"Veuillez examiner cette opération sur votre portefeuille DID",success:"Votre application a été migrée avec succès, la page sera rafraîchie dans {sec} secondes.",intro:{l1:"Cliquez ici",l2:"Veuillez migrer votre application vers la nouvelle version (les modifications sont désactivées avant la fin de la migration)",l3:"L'application DID sera entièrement contrôlée depuis votre portefeuille DII.",l4:"Les données de l'application seront migrées et aucune autre modification ne sera nécessaire.",l5:"La nouvelle structure de l'application vous donnera plus de flexibilité lors du changement des composants.",l6:"4. Veuillez ne pas modifier les points de montage des composants avant que la nouvelle version du composant ne soit disponible."},tip:{duplicate:"Trouvez le composant en double {name}, veuillez supprimer les composants inutiles et migrer à nouveau",running:"Veuillez arrêter le blocklet avant la migration"}},error:{isRunning:"Blocklet est en cours d'exécution, veuillez l'arrêter d'abord",isInProgress:"Le Blocklet est en cours, veuillez attendre qu'il se termine"},publish:{createResource:"Créer une ressource",addResource:"Ajouter une publication",productTitle:"Produit",versionTitle:"Versionnage",imgTitle:"Images",resourceTitle:"Contenu",blockletEmptyTip:"Aucun Blocklet ici",createBlockletTip:"Vous pouvez créer un nouveau blocklet à partir des ressources, composants et configurations existants dans cette application",createBlocklet:"Nouvelle blocklet",componentNotRunning:"Le bloc {name} ne fonctionne pas, veuillez le démarrer d'abord",releaseEmptyTip:"Il n'y a pas de sorties ici",createReleaseTip:"Vous pouvez créer une version du blocklet, ainsi que des notes de version et des ressources, pour que d'autres personnes puissent les utiliser.",createRelease:"Créer une version",deleteReleaseTip:"La version ne peut pas être récupérée après la suppression",createBlockletDid:"Créez à partir du portefeuille DID",createReleaseSuccess:"Création de la version réussie",saveDraftSuccess:"Brouillon enregistré avec succès",connect:{title:"Créer un DID Blocklet",scan:"Utilisez les méthodes suivantes pour générer Blocklet DID",confirm:"Confirmez l'utilisation de DID Wallet",success:"L'identifiant Blocklet DID a été généré, veuillez poursuivre votre opération"},saveDraft:"Sauvegarder le brouillon",releaseNote:"Note de version",errorTip:{noDid:"Le Blocklet DID est requis",noTitle:"Le titre du bloclet est requis",noVersion:"La version Blocklet est obligatoire",noDescription:"La description du Blocklet est requise",noNote:"La note de version est requise",inValidVersion:"Version de Blocklet invalide",noResource:"Veuillez sélectionner les ressources à télécharger à inclure dans le blocklet",noFirstDid:"Veuillez créer d'abord un DID de Blocklet",invalidUrl:"Veuillez entrer une URL valide",invalidUrlOrEmail:"Veuillez saisir une URL ou une adresse e-mail valide"},packTip:"Actuellement, les bloclets peuvent être installés directement en tant qu'applications. Les composants et les configurations d'application seront automatiquement inclus dans le bloclet.",resourceChangedWarning:"Vous avez modifié la ressource, veuillez l'enregistrer à temps",installResourceTip:"URL d'installation:",installResourceTip2:"Si vous souhaitez voir plus de conseils, veuillez visiter",installResourceHelp:"Document d'aide",componentIncluded:"Inclus",componentForceRequired:"Requis",download:"Télécharger {name}",delete:"Supprimez {name}",copyInstallUrl:"Copier l'URL d'installation",install:"Installer {name}",publishToStoreSuccess:"Blocklet publié avec succès sur le Store",connectStoreSuccess:"Connexion réussie au Blocklet Store",uploadToStoreSuccess:"Blocklet téléchargé avec succès dans le Store, vous devez le publier dans le Store",viewLastRelease:"Voir la dernière version",reconnectStoreTip:"Après la reconnexion, un nouveau développeur sera lié. Êtes-vous sûr de vouloir vous reconnecter ?",deleteProject:{title:"Supprimez {name}",scan:"Utilisez les méthodes suivantes pour supprimer {name}",confirm:"Veuillez confirmer l'utilisation du portefeuille DID",success:"Le projet Blocklet a été supprimé, veuillez poursuivre votre opération.",tip1:"Le projet Blocklet ne pourra pas être récupéré après sa suppression",tip2:"Vous ne pourrez plus publier de nouvelles versions du bloc supprimé, ce qui signifie que le bloc ne sera plus mis à jour dans le Store.",tip3:"La suppression du Blocklet n'affectera pas sa version actuellement publiée dans le Store.",description:"Après avoir supprimé le Blocklet, vous rencontrerez les problèmes suivants. Êtes-vous sûr de vouloir le supprimer ?"},resourceTip:"Actuellement, en tant que bloc de ressources, il ne peut pas être installé directement depuis le Store.",whyCantSeeInStore:"Vous pouvez publier le Blocklet actuel sur le store, et il pourra être utilisé partout dans le monde.",whyCantSeeResourceBlockletInStore:"Vous pouvez publier le Blocklet actuel sur le store, et il pourra être utilisé partout dans le monde. Les Blocklets sont masqués par défaut de la page de liste du store.",tenantScope:"Locataire",blockletStudio:"Blocklet Studio",allComponentsNotRunning:"Blocklets ne fonctionne pas, veuillez le démarrer d'abord",resourceEmptyTip:"Aucune ressource disponible",steps:{resources:"Veuillez sélectionner les ressources qui doivent être associées à le Blocklet actuel, car ces ressources seront installées avec le Blocklet.",blocklets:"Sélectionnez les bloclets à associer.",version:"Définir la version de sortie et le journal des modifications.",introduction:"Une introduction claire peut mettre en valeur efficacement votre Blocklet. Vous pouvez utiliser la syntaxe Markdown pour l'écrire et le prévisualiser.",branding:"Décrivez les informations de base de votre Blocklet. Ces informations seront présentées aux utilisateurs dans le magasin."},branding:"Branding",brandingHelp:"Plus d'informations sur le blocklet seront affichées dans le magasin",resourceSelect:"Sélectionnez une ressource des blocklets",resourceUpload:"Téléchargez la ressource depuis votre disque (index.html est requis dans l'archive)",deleteStoreTip:"Êtes-vous sûr de vouloir supprimer {name} de la liste du magasin Connect?",disconnectStoreTip:"Le bloclet sera supprimé du store après sa déconnexion. Êtes-vous sûr de vouloir le déconnecter ?",connectOrUpload:"Connecter ou Télécharger",developerInfo:"Informations sur le développeur",autoUploadTip:"Uploader automatiquement le blocklet dans le Store après sa création",possibleSameStoreTip:"Essayez de résoudre les blocs de dépendance dans le même magasin de blocs avant chaque téléchargement si possible",needProjectId:"Veuillez créer un projet d'abord",projectSettings:"Paramètres du projet",noStoreSelected:"Veuillez sélectionner l'un des magasins existants ou ajouter un nouveau magasin pour continuer",installToThisServer:"Installer sur ce serveur",forceResourceBlocklet:"Force définie comme un blocklet basé sur les ressources",resourceDocker:"Construire Blocklet à partir de Docker",resourceSelectTitle:"Ressource",resourceUploadTitle:"Télécharger",resourceDockerTitle:"Docker",resourceDockerInputTip:"Veuillez entrer la commande docker run",docker:{pleaseInputDockerCommand:"Veuillez entrer la commande docker run",volumeTip:"Le volume doit commencer par $BLOCKLET_DATA_DIR ou $BLOCKLET_APP_DIR",volumeTip2:'Le volume ne peut pas contenir ".."',noAllowTheArg:"L'argument ne peut pas être utilisé dans la commande docker run",needCustomInput:"Configurez la valeur lors de l'installation de Blocklet",dockerParams:"Paramètres Docker",dockerCommand:"Commande Docker",dockerImageName:"Nom de l'image Docker",addItem:"Ajouter un paramètre Docker Run",envKey:"Clé de variable d'environnement",publishTips:"Le port externe final sera automatiquement attribué par le Blocklet",volumeTips:"Le volume doit commencer par $BLOCKLET_DATA_DIR ou $BLOCKLET_APP_DIR",modifyParam:"Modifier le paramètre Docker Run",modifyEnv:"Modifier la variable d'environnement",paramDetail:"Détail du paramètre",description:"Description",secure:"Sécuriser",shared:"Partagé",required:"Requis",prefix:"Préfixe",path:"Chemin",name:"Nom",portType:"Type de port",dockerImageNameError:"Le nom de l'image Docker ne peut pas contenir d'espaces",autoGenerated:"Généré automatiquement",dockerCMDError:"Docker CMD ne supporte que les caractères simples",proxyBehavior:"Comportement du proxy",serviceProxy:"Service",directProxy:"Direct",nextTab:"Analyser la commande"},storeRule:{maxImageCount:"Le store autorise au maximum {max} captures d'écran.",minImageCount:"Le magasin nécessite au moins {min} {unit}.",minImageSize:"La taille de l'image écran de {name} doit être d'au moins {width}x{height}.",logoFormat:"Le format d'image du logo ne prend en charge que [{format}].",warning:"Avertissement",screenshot:"Capture d'écran",screenshots:"Captures d'écran",first:"1.",second:"2.",third:"3."},store:"Blocklet Store",endpoint:{tab:"Blocklet distant",uploadToEndpoint:"Vous pouvez télécharger le Blocklet actuel vers le Blocklet spécifié.",addEndpoint:"Ajouter un point de terminaison Blocklet",urlEmpty:"L'URL du point de terminaison ne peut pas être vide",addFailed:"Échec de l'ajout du point de terminaison Blocklet :",deleteEndpoint:"Supprimer le point de terminaison Blocklet",deleteDesc:"Confirmer la suppression du point de terminaison Blocklet {name} ?",confirmDesc:"Veuillez saisir {name} pour supprimer",visitEndpoint:"Visiter Blocklet",disconnectEndpointTip:"Êtes-vous sûr de vouloir déconnecter {url} ? Après la déconnexion, le Blocklet ne sera plus téléchargé sur ce point de terminaison.",deleteFailed:"Échec de la suppression du point de terminaison Blocklet",publishToEndpointSuccess:"Blocklet publié avec succès sur Endpoint",uploadToEndpointSuccess:"Blocklet téléchargé avec succès sur le point de terminaison"},autoPublishErrorTip:"Publication automatique vers {storeName} échouée : {error}",singleton:"Une seule instance",singletonTip:"Lorsque le mode singleton est activé, l’application ne peut pas exécuter plusieurs instances en même temps. Comme votre application utilise le mode singleton, le déploiement blue-green ne peut pas être utilisé pour les mises à jour ou les redémarrages."},titleValidationError:"La longueur du titre doit être comprise entre 3 et 20 caractères",descriptionValidationError:"La longueur de la description doit être comprise entre 3 et 80 caractères",whyNeedAppPid:"Si votre application a été migrée, le DID permanent est le DID généré lors de l'installation initiale de ce Blocklet.",usingDocker:"Ce Blocklet fonctionnera en utilisant Docker.",gotoVisitError:"Impossible d'accéder à l'URL de Blocklet, veuillez réessayer plus tard",usingIsolation:"Ce Blocklet s'exécutera en utilisant l'isolation réseau",dockerImage:"Supporte Docker",mountPoint:{description1:"Ce changement peut casser les URLs contenant l'ancien point de montage, ce qui peut entraîner :",case1:"Références de ressources rompues entre les Blocklets dans cette application",case2:"URL cassée si vous les avez partagées publiquement",description2:"Vous pouvez configurer une redirection de l'ancien point de montage vers le nouveau afin de minimiser les changements potentiellement disruptifs."},skSourceMigratedTip:"Cette application a été lancée avec un wallet géré par un serveur et a migré vers DID Wallet pour une meilleure sécurité.",skSourceManagedTip:"Cette application fonctionne avec un portefeuille géré par un serveur. Veuillez migrer vers un portefeuille DID dès que possible pour une meilleure sécurité.",zeroDowntime:"Zéro temps d'arrêt"},dashboard:{nodeDid:"Noeud",ownerDid:"Propriétaire",routingEngine:"Moteur de routage",ownerNftURL:"Propriétaire NFT",expirationLeft:"Expiration restante",startFromCrashTip:"Le serveur Blocklet ne s'est pas arrêté normalement la dernière fois, veuillez démarrer manuellement les Blocklets qui doivent être exécutés.",runtimeConfig:{blockletMaxMemoryLimit:"Limite maximale de mémoire pour le blocklet",daemonMaxMemoryLimit:"Limite maximale de mémoire du serveur"},document:"En savoir plus dans notre documentation",database:"Base de données"},store:{nameSort:"Nom",popularSort:"Popularité",headerDescription:"Trouvez et installez vos Blocklets",detail:{purchase:"Acheter {name}",open:"Ouvrez {name}",install:"Installer {name}",upgrade:"Améliorez {name}",empty:"Pas d'introduction"},blockletRegistry:{changeFailed:"Échec de la modification du magasin de blocs :",addFailed:"Échec de l'ajout du Blocklet Store",editFailed:"Échec de l'édition du Blocklet Store",switchRegistry:"Passer au Blocklet Store",addRegistry:"Ajouter Blocklet Store",editRegistry:"Modifier le Blocklet Store",deleteRegistry:"Supprimer le Blocklet Store",haveSameRegistry:"Le même Blocklet Store existe",registryName:"Nom du magasin de Blocklet",registryUrl:"URL du Blocklet Store",registryNameEmpty:"Le nom du Blocklet Store ne peut pas être vide",registryUrlEmpty:"L'URL du magasin Blocklet ne peut pas être vide",deleteDesc:"Confirmer la suppression du magasin de bloclets {name} ?",confirmDesc:"Veuillez entrer {name} pour supprimer"},purchase:{title:"Acheter {name}",confirmed:"Votre achat de bloclet NFT est vérifié",declined:"Vous n'avez pas fourni d'achat de Blocklet NFT valide",waiting:"En attente de l'achèvement de l'achat...",purchase:{title:"Acheter NFT",description:"Payez un jeton avant d'installer ce bloclet si vous n'avez pas acheté ce bloclet."},verify:{title:"Vérifier NFT",description:"Votre NFT sera vérifié avant l'installation de ce blocklet si vous avez acheté et conservez le NFT d'achat dans votre portefeuille DID.",auth:{title:"Achat de la preuve d'identité nécessaire",scan:"Connectez le portefeuille DID pour fournir l'achat de bloclets NFT",confirm:"Veuillez passer en revue cette opération sur votre portefeuille DID",success:"Votre NFT d'achat est vérifié et l'installation a commencé."}},auth:{title:"Acheter {name}",scan:"Scannez le QRCode suivant avec votre portefeuille DID",confirm:"Confirmez dans votre compte",success:"Achat d'un NFT envoyé dans votre portefeuille DID"},launch:"Lancer {name}",autoLaunch:"{name} a acheté avec succès, redirection vers la page de lancement..."},tooltip:{upgradeServer:"Blocklet a besoin du Blocklet Server version {version}, le Blocklet Server version actuel est {serverVersion}"}},setting:{saveSuccess:"Paramètres enregistrés avec succès",unSavedTip:'Il y a des modifications non enregistrées, veuillez cliquer sur "Enregistrer les modifications" pour les sauvegarder.',unSavedLeaveTip:"Il y a des modifications non enregistrées, êtes-vous sûr de vouloir quitter la page?",form:{name:"Nom de votre serveur",nameRequired:"La description du serveur est requise",namePlaceholder:"Nom du serveur",description:"Décrivez votre serveur",descriptionHolder:"Description du serveur",descriptionRequired:"Une description de serveur est requise",domain:"Votre nom de domaine du serveur",domainPlaceholder:"Nom de domaine du serveur",domainRequired:"Le domaine du serveur est requis",ipPlaceholder:"IP",ipRequired:"L'adresse IP est requise",registry:"Blocklet Store",registryPlaceholder:"Magasin de Blocklets pour récupérer des Blocklets",registryRequired:"Le Blocklet Store est requis",registerUrl:"URL du lanceur Blocklet",registerUrlPlaceholder:"Entrez l'URL de votre lanceur Blocklet préféré, vous pouvez utiliser celui officiel en toute sécurité.",webWalletUrl:"URL du portefeuille DID",webWalletUrlPlaceholder:"Veuillez entrer l'URL de votre « DID Wallet » hébergé, vous pouvez utiliser en toute sécurité celui officiel",nftDomainUrl:"URL de domaine NFT",nftDomainUrlPlaceholder:"Veuillez saisir l'URL de votre domaine NFT hébergé, vous pouvez utiliser celui officiel en toute sécurité",enableWelcomePage:"Activer la page de bienvenue",welcome:{switchLabel:"Page d'accueil"},upgrade:{title:"Mettez à jour le serveur Blocklet vers {version}",description:"Pendant la mise à niveau, votre serveur Blocklet entrera en mode maintenance pendant quelques minutes le temps de la mise à jour.",dialog:"Cliquez sur 'Confirmer' pour installer la mise à jour. Le serveur Blocklet entrera en mode de maintenance jusqu'à ce que la mise à jour soit terminée et reviendra automatiquement en mode production.",confirm:"Mise à niveau",switchLabel:"Vérification automatique des mises à jour",enableBetaRelease:"Activer la version bêta",setup:"Préparation de la mise à niveau",installing:"Installation de Blocklet Server v{version}",restarting:"Redémarrage du serveur Blocklet",cleanup:"Migration des données du serveur Blocklet",verifying:"Vérification du serveur Blocklet v{version}",rollback:"Serveur de blocs de retour en arrière",complete:"Mise à niveau terminée !",progress:"Mise à niveau de {name}",check:"Vérifier les mises à jour",latest:"Vous utilisez la dernière version."},restart:{title:"Redémarrer le serveur Blocklet",description:"Pendant le redémarrage, votre serveur Blocklet passera en mode maintenance jusqu'à ce que le redémarrage soit terminé.",dialog:`Cliquez sur "Confirmer" pour redémarrer. Le serveur Blocklet passera en mode de maintenance jusqu'à ce que le redémarrage soit terminé et reviendra automatiquement en mode de production.`,confirm:"Redémarrer",setup:"Préparation du redémarrage",verifying:"Vérification du serveur Blocklet",restarting:"Redémarrage du serveur Blocklet",cleanup:"Assurez-vous que tout va bien",rollback:"Nettoyez l'état sale",complete:"Maintenance complète!",progress:"Redémarrage de {name}"},register:{title:"Inscrivez-vous à Blocklet Launcher",description:"Une fois ajouté, vous pouvez lancer des blocklets vers ce serveur de blocklets depuis {url}.",button:"S'inscrire"},monitor:{diskThreshold:"Envoyer une alerte lorsque l'utilisation du disque dépasse (%)",diskThresholdPlaceholder:"Veuillez définir le seuil d'alerte d'utilisation du disque"},security:{switchLabel:"Isolation du système de fichiers",switchTips:"Après avoir désactivé cette option, le système de fichiers du Blocklet ne sera plus isolé, ce qui pourrait présenter un risque de dommages causés par un logiciel malveillant au système de fichiers.",warningTips:"La fonction d'isolation du système de fichiers ne peut pas prendre effet. Veuillez mettre à niveau la version de node.js (la version actuelle est {version}) vers la version 21.6.0 ou supérieure."},docker:{switchLabel:"Exécuter des blocs dans des conteneurs",switchTips:"Après avoir activé cette option, les blocs seront exécutés à l'aide de conteneurs, ce qui peut améliorer la sécurité globale du serveur.",notInstalled:"Impossible d'activer l'exécution du conteneur car Docker n'est pas installé ou manque des autorisations nécessaires pour s'exécuter",needCloseFileSystemIsolation:"L'isolation du système de fichiers et le mode d'exécution du conteneur docker ne peuvent pas être activés en même temps"},dockerNetwork:{switchLabel:"Isolement du réseau de conteneurs",switchTips:"Après avoir activé cette option, les blocklets fonctionnent de manière plus sûre : un blocklet ne peut pas accéder au serveur de blocklets ou à d'autres blocklets dans d'autres applications.",needEnableDocker:"Le mode conteneur doit être activé pour activer l'isolation du réseau"},restartAllContainers:{title:"Redémarrer tous les conteneurs",description:"Redémarrer tous les conteneurs et garder les blocklets en marche.",dialog:`Cliquez sur "Confirmer" pour redémarrer tous les Blocklets conteneurs et maintenir l'état des Blocklets en cours d'exécution.`,confirm:"Redémarrer",setup:"Préparation du redémarrage",verifying:"Vérification du serveur Blocklet",restarting:"Redémarrage de tous les conteneurs en arrière-plan",cleanup:"Assurez-vous que tout est OK",rollback:"Nettoyer l'état sale",complete:"Conservez l'intégralité !",progress:"Redémarrage de tous les conteneurs en arrière-plan"},restartAllBlocklet:{title:"Redémarrer tous les Blocklets",description:"Redémarrer tous les Blocklets en cours d'exécution ou en erreur sur ce serveur",dialog:'Cliquez sur "confirmer" pour redémarrer tous les blocklets en arrière-plan.',confirm:"Redémarrer",setup:"Préparation du redémarrage",verifying:"Vérification du serveur Blocklet",restarting:"Redémarrage de tous les Blocklets en cours ou en erreur en arrière-plan",cleanup:"Assurez-vous que tout est OK",rollback:"Nettoyer l'état sale",complete:"Maintenance terminée !",progress:"Redémarrage de tous les Blocklets en cours d'exécution ou en erreur en arrière-plan"},enableSessionHardening:{switchLabel:"Activer le renforcement de session",switchTips:"Après avoir activé cette option, les opérations de mutation nécessiteront une vérification stricte, ce qui peut améliorer la sécurité globale du serveur."}},accessKey:{accessKeyId:"ID de clé d'accès",lastUsed:"Dernière utilisation à",tip:"Veuillez entrer un nom pour cette clé d'accès",saveSecretTip:"C'est la seule fois où votre clé secrète d'accès peut être consultée et ne peut pas être récupérée. Cependant, vous pouvez créer de nouvelles clés d'accès à tout moment.",iKnow:"J'ai copié et enregistré le secret d'accès",showSecret:"Afficher la clé d'accès secrète",hideSecret:"Cacher le secret",title:"Supprimer la clé d'accès",descriptionNoTime:"Cela supprimera définitivement la clé d'accès {key} avec le nom {name}, qui (n'a jamais été utilisée auparavant)",description:"Cela supprimera définitivement la clé d'accès {key} avec le nom {name}, qui a été utilisée pour la dernière fois le {time}, {timeAge}).",confirm_desc:"Veuillez entrer {name} pour supprimer",remark:"Nom de clé d'accès",remarkInvalid:"Le nom de la clé d'accès est requis",passport:"Sélectionnez un passeport pour la clé d'accès afin d'accorder ou de limiter les permissions",expireTime:"Définissez une date d'expiration pour la clé d'accès pour une meilleure sécurité",authType:"Type d'authentification",resourceType:"Type de ressource",resourceId:"ID de ressource",component:"Composant",expired:"{time} expiré",accessKeySecret:"Secret de clé d'accès",simple:"Simple",signature:"Signature",signatureDesc:"Norme de sécurité de niveau entreprise utilisant la cryptographie. Nécessite l'intégration de code avec le SDK (@blocklet/server-js), idéal pour les scénarios avec des exigences de sécurité élevées et la transmission de données critiques",simpleDesc:"Mécanisme de jeton Bearer léger, similaire à une clé OpenAPI, prend en charge les appels d'API RESTful et l'intégration de services tiers. Aucune programmation requise, intégration rapide via l'en-tête HTTP, parfait pour le développement rapide",viewSecret:"Vous pourrez accéder à la clé secrète ultérieurement dans la page de détails de la clé d'accès.",usage:"Utilisation",listTitle:"Gérez l'accès API sécurisé avec des clés d'accès",tooltipTitle:"Générez et gérez des identifiants permettant aux systèmes de confiance d'interagir programmatiquement avec votre application. Les clés d'accès permettent une automatisation sécurisée et une intégration transparente entre vos outils et services."},webhook:{add:"Ajouter une intégration",delTitle:"Supprimer l'intégration",requiredError:"Veuillez fournir un {type} valide",confirm_desc:"Veuillez entrer {name} pour supprimer",test:"Test",description:"Cela supprimera définitivement l'intégration avec l'ID {id}.",columns:{description:"ID",params:"Paramètres",createdAt:"Créé le"},testSuccess:"Message de test envoyé avec succès",duplicateError:"L'URL existe déjà",updateSuccess:"Statut mis à jour avec succès"},dns:{step1Title:"Connectez-vous à votre bureau d'enregistrement de domaine",step1Desc1:"Connectez-vous à votre bureau d'enregistrement de domaine, trouvez la page de gestion de domaine et la page des paramètres du serveur de noms. Vous pouvez rechercher votre bureau d'enregistrement de domaine à",step2Title:"2. Trouver les paramètres DNS pour {url}",step2Desc:`Cela peut s'appeler "Gestion DNS", "Paramètres avancés", ou similaire.`,step3Title:"3. Ajoutez les enregistrements DNS suivants",step3Desc:'Le nom peut être appelé "host", "hostname" ou "alias"'},domain:{addingDomain:"Ajout du domaine...",checkingResolvable:"Vérification de l'état du domaine...",cannotResolve:"{domain} ne peut pas être résolu, veuillez vérifier votre configuration DNS",resolvedAddressError:"{domain} n'est pas correctement configuré avec un enregistrement CNAME pointant vers {curDomain}",invalidDNSReminder:"{error}. Cependant, vous pouvez continuer à ajouter le domaine, mais la génération automatique de certificats n'est pas disponible.",continueAdd:"Continuer l'ajout",conflictTitle:"{domain} est déjà utilisé",conflictDescription:'{domain} est déjà utilisé par "{title}". En cliquant sur confirmer, le domaine sera supprimé de "{from}" et ajouté à "{to}".'},aigne:{modelAdapter:"Fournisseur de modèle",modelName:"Nom du modèle",desc:{modelAdapter:"La plateforme qui fournit un service de modèle AI",modelName:"La version spécifique du modèle ou le nom du modèle",key:"La clé API {provider} utilisée pour l'authentification",baseUrl:"Entrez l’URL de votre instance AIGNE Hub (par ex. https://hub.aigne.io). Utilisez la vôtre si vous auto-hébergez.",accessKeyId:"L'ID clé unique pour accéder au modèle",secretAccessKey:"La clé secrète associée à l’Access Key ID",docLink:"Voir la documentation officielle pour plus de détails et la référence API"},failed:"Échec de l’enregistrement de la configuration AIGNE",authorizeAigneHub:"Se connecter à {name}",baseUrl:"URL du Hub AIGNE",disconnect:"Déconnecter",disconnectConfirm:"Êtes-vous sûr de vouloir vous déconnecter de AIGNE Hub ? Cela supprimera la configuration IA actuelle.",disconnectSuccess:"Déconnecté avec succès de AIGNE Hub",disconnectFailed:"Échec de la déconnexion de AIGNE Hub",testConnection:"Tester la connexion {provider}",invalidUrl:"L'URL de {provider} est invalide",description:"La configuration actuelle prendra effet lorsque {name} sera en cours d'exécution. Il faut enregistrer et redémarrer le Blocklet pour que cela prenne effet.",revokeUrlAuthTitle:"Confirmer le changement de {url} ?",revokeUrlAuth:"Êtes-vous sûr de vouloir modifier le {url} ? Après modification, votre autorisation sera invalide et devra être réautorisée !",testSuccess:"Connecté avec succès à AIGNE Hub",check:"Vérifier",apiKeyNotAuthorized:"La clé API n'est pas autorisée. Veuillez cliquer sur le bouton Connect to AIGNE Hub pour l'autoriser",switchUser:"Changer d'utilisateur",connectTimeOut:"Connexion à {provider} expirée, veuillez réessayer plus tard",restart:{title:"Redémarrer Blocklet",connectedContent:"Votre Blocklet est actuellement connecté à {provider}. La configuration prendra effet après le redémarrage. Voulez-vous redémarrer maintenant ?",notConnectedContent:"Votre Blocklet est actuellement déconnecté de {provider}. La configuration prendra effet après le redémarrage. Voulez-vous redémarrer maintenant ?",confirm:"Redémarrer maintenant",cancel:"Redémarrer plus tard"},testFailed:"Impossible de se connecter au AIGNE Hub. Veuillez vérifier l'URL ou votre réseau.",addCredits:"Acheter des crédits",transaction:"Transactions",connected:"Connecté avec succès",account:"Informations du compte",pendingCredit:"Frais exceptionnels",infinite:"Illimité",config:"Config AIGNE Hub"}},notification:{title:"Notifications",history:"Historique",channelSettings:"Paramètres du canal",empty:"Aucune activité pour le moment",viewAll:"Tout afficher",showRead:"Afficher Lecture",markAllAsRead:"Tout marquer comme lu",markAsRead:"Marquer comme lu",proceed:"Procéder",checkingForUpdates:"Recherche des mises à jour...",email:{enable:"Activer les notifications",from:"Expéditeur d'e-mail",host:"Hôte du serveur SMTP",port:"Port du serveur SMTP",user:"Nom d'utilisateur SMTP",secure:"Connexion sécurisée",password:"Mot de passe SMTP",fromRequired:"L'expéditeur du courrier électronique est obligatoire",fromInvalid:"L'expéditeur de l'email est invalide",receiverRequired:"Le destinataire de l'e-mail est requis",receiverInvalid:"Le destinataire de l'e-mail est invalide",hostRequired:"L'hôte du serveur SMTP est requis",hostInvalid:"L'hôte du serveur SMTP est invalide",portRequired:"Le port du serveur SMTP est requis",portInvalid:"Le port du serveur SMTP est invalide, le port doit être compris entre 1 et 65535.",userRequired:"Le nom d'utilisateur du serveur SMTP est requis",passwordRequired:"Mot de passe utilisateur du serveur SMTP requis",testSuccess:"Envoi de l'e-mail de test réussi",testFailed:"Échec de l'envoi du courrier de test",testReceiver:"Destinataire de l'email",testSendEmail:"Envoyer un e-mail de test",inputTestReceiver:"Veuillez saisir l'adresse e-mail du destinataire du test",disable:"Se désabonner des notifications par email",disableDescription:"Après la désinscription, vous ne recevrez plus de notifications par e-mail. Pour recevoir à nouveau les notifications par e-mail, vous pouvez vous y réabonner sur cette page.",unsubscribe:"Se désabonner de la notification par e-mail",unsubscribeDescription:"Après désabonnement, vous ne recevrez plus aucune notification par email.",subscribe:"S'abonner",subscribeDescription:"Pour recevoir des notifications par e-mail, vous pouvez vous y abonner à nouveau sur la page des paramètres.",companyName:"Nom de la société",companyLink:"Lien de la société",companyAddress:"Adresse de la société",supportEmail:"Email de support",emailInvalid:"Adresse e-mail invalide",linkInvalid:"Lien invalide, doit commencer par http ou https",signature:"Signature",signatureTooltip:"La signature électronique est utilisée en bas pour fournir au destinataire des informations clés sur l'expéditeur."},wallet:{description:"Les notifications de portefeuille DID sont toujours activées pour tous les utilisateurs."},webhooks:{description:"Les notifications envoyées via webhooks sont toujours activées pour tous les utilisateurs."},comingSoon:"Plus de canaux de notification sont en cours de construction",unsubscribe:"Se désabonner",unsubscribeSucceed:"Désinscription réussie",unsubscribeFailed:"Échec de désinscription",unsubscribeTokenRequired:"Jeton de désabonnement requis",unsubscribeTokenExpired:"Le jeton de désabonnement a expiré",unsubscribeTokenInvalid:"Le jeton de désabonnement est invalide",installComponentError:"Composant désinstallé {name} non trouvé",installingComponent:"Installation du composant {name}",pushKit:{enable:"Activer les notifications",endpoint:"Point d'extrémité PushKit",endpointInvalid:"Le point de terminaison PushKit est une URL non valide",testSuccess:"Le test d'envoi du PushKit a réussi",testFailed:"Test PushKit envoyer a échoué",testReceiver:"Récepteur PushKit",testSend:"Tester l'envoi du kit push",inputTestReceiver:"Veuillez saisir le destinataire du test",receiverRequired:"Récepteur PushKit requis",pushPath:"Chemin API pour push-kit (par défaut /api/push)",did:"PushKit Blocklet DID",customOptions:"Options personnalisées"},notificationDetails:"Détails de la notification",receiver:"Destinataire",sendStatus:{success:"Envoyé",failed:"Échoué",sentTime:"Heure d'envoi: {date}",pending:"En attente",reason:{enabled:"L'utilisateur a activé la notification {channel}",disabled:"L'utilisateur n'a pas activé la notification {channel}",unavailable:"Le Blocklet actuel n'a pas configuré la notification {channel}",available:"Le Blocklet actuel a configuré la notification {channel}",notSent:"Le message actuel n'a pas été envoyé à {channel}",offline:"Utilisateur est hors ligne"},count:"{count}",total:"Total"},filter:"Filtre",notificationPreview:"Aperçu de notification",resend:"Renvoyer",resendLimit:"Vous pouvez renvoyer une notification jusqu'à trois fois par jour.",from:"De",to:"À",body:"Corps",notificationTitle:"Titre",createdAt:"Créé le",status:"Statut",system:"Système",severity:"Gravité",config:"Configurations",selectChannels:"Sélectionner les canaux",selectChannelsTip:"Sélectionner les canaux à renvoyer",resendFailedOnly:"Renvoyer uniquement aux canaux ayant échoué",statistics:"Statistiques",allSender:"Tous les expéditeurs",allSeverity:"Toutes les sévérités",severityType:{info:"Info",success:"Succès",warning:"Avertissement",error:"Erreur"},clear:"Effacer",allDone:"Terminé",filterType:{all:"Tous",unread:"Non lu"},viewMore:"Voir plus"},router:{routerSetting:"Domaines et URLs",certSetting:"Certificats SSL",defaultSite:"Par défaut",urlHelperText:"Les URL qui ne commencent pas par HTTP/HTTPS sont considérées comme des chemins relatifs",empty:"Cliquez sur Actions pour configurer la mise en correspondance des URL",healthy:{ok:"Le blocklet ou le service fonctionne",error:"Le bloc ou le service ne fonctionne pas ou n'est pas installé"},service:{select:"Sélectionnez les services Blocklet (facultatif)",what:"Les services Blocklet sont des pipelines exécutés avant de rediriger vers le Blocklet amont."},nonProvider:{title:"Avertissement de changement de moteur",description:"Si vous changez de moteur pour aucun, votre page actuelle risque de ne pas fonctionner correctement car le moteur précédent sera arrêté. Êtes-vous sûr de vouloir continuer?",confirm:"Je comprends, continuez"},validation:{urlRequired:"L'URL est requise",redirectCodeRequired:"Le code de redirection est requis",didRequired:"Blocklet est requis",pathPrefixTooLong:"Le préfixe d'URL ne peut pas dépasser {length} caractères",pathPrefixCannotBeEmpty:"Le préfixe d'URL ne peut pas être vide",domainRequired:"Le domaine du serveur est requis",invalidUrl:"Veuillez fournir une URL valide",pathPrefixRequired:"Le préfixe d'URL est requis",redirectUrlRequired:"L'URL de redirection est requise",rewriteUrlRequired:"La réécriture de l'URL est requise"},domain:{addSite:"Ajouter un site",validate:{emptyTip:"Le domaine du site ne peut pas être vide",suffixTip:"Le domaine du site ne peut pas inclure {suffix}"},add:{title:"Ajouter un nom de domaine",description:"Veuillez fournir un nom de domaine valide",confirm:"Ajouter",cancel:"Annuler",blocklet:"Sélectionner Blocklet",redirect:"Où rediriger le trafic ?",port:"Sur quel port votre gestionnaire de requêtes doit-il écouter ?",portTip:"Ceci est la valeur par défaut du port principal du gestionnaire de requêtes. Vous pouvez personnaliser cela",type:"Gestionnaire de trafic",component:"Sélectionner le composant",pageGroup:"Groupe de page",pageGroupTip:"Ce composant peut afficher n'importe quel groupe de pages répertoriées ci-dessus, laissez vide pour afficher toutes les pages"},update:{title:"Mise à jour du domaine du site",label:"Domaine du site",description:"Veuillez fournir un domaine de site valide"},setup:{tipStart:"Ajoutez les enregistrements DNS pour le domaine",tipEnd:"Selon les directives suivantes",recordType:"Type d'enregistrement",recordValue:"Valeur d'enregistrement"},verify:{ok:"La résolution de domaine est normale",notResolved:"Ce domaine n'est ni résolu ni accessible, veuillez vérifier votre configuration DNS."},https:{ok:"Ce domaine a HTTPS activé",bad:"Ce domaine n'a pas activé https"},delete:{title:"Supprimer le site",description:'En confirmant, vous supprimerez votre site existant "{name}". Tapez "{name}" ci-dessous et sélectionnez Supprimer pour effectuer le changement, ou sélectionnez Annuler si vous souhaitez conserver votre site.',confirm_desc:"Veuillez entrer {name} pour confirmer"}},domainAlias:{nftDomain:"Configuration automatique avec noms DID",showTipHint:"Comment configurer la résolution des noms de domaine ?",add:{title:"Ajouter un domaine supplémentaire",domainDescription:"Veuillez fournir un nom de domaine valide",forceTip:"Forcer l'ajout si le nom de domaine existe déjà",helperText:"Si une URL HTTP ou HTTPS est saisie, elle sera automatiquement convertie en un nom de domaine.",isDidDomainError:"Ce domaine est un domaine DID. Veuillez l'ajouter en utilisant la méthode de configuration automatique du domaine.",tips:"Vous pouvez saisir un nom de domaine acheté auprès de DID Names ou de tout autre fournisseur. S'il s'agit d'un domaine DID, vous devez présenter le NFT de domaine DID pour continuer."},addCustomDomain:{name:"Domaine personnalisé"},addDomainNFT:{showNFT:"Configurer le domaine automatiquement",tips:"Vous pouvez saisir un domaine acheté auprès de DID Names. Si un domaine DID est détecté, vous devez présenter le NFT du domaine DID pour continuer.",connect:{scan:"Utilisez l'une des méthodes suivantes pour connecter {domain} à {appName}",confirm:"Confirmez dans votre compte",success:"Autorisation réussie",title:"Connecter les noms DID à {appName}"},buyTip:"Les noms DID effectueront la résolution de nom de domaine automatiquement, pas besoin de configurer manuellement, et le Blocklet mettra à jour l'enregistrement de résolution du nom de domaine automatiquement si nécessaire. Si vous n'avez pas encore de DID Domain NFT,",buy:"Acheter un domaine DID",topLevelDidDomainHint:"Pour les domaines DID, si vous saisissez un domaine de premier niveau (par ex. example.com), il sera automatiquement configuré en www.example.com.",authorizeFailed:"Échec de la récupération des informations NFT du domaine, veuillez réessayer !"},delete:{title:"Supprimer",description:`Après la suppression de "{domain}", l'accès à cet alias peut ne pas être correctement géré.`,confirmPlaceholder:'Veuillez saisir "{domain}" pour supprimer'},custom:"Domaine personnalisé",noCustom:"Pas de domaine personnalisé",noCustomTip:"Aucun domaine personnalisé n'est configuré avec votre site web. Pour une sécurité accrue et une meilleure expérience utilisateur, nous vous recommandons de configurer votre propre domaine personnalisé. Cliquez ci-dessous pour commencer."},domainSecurity:{title:"Sécurité de domaine",cors:{title:"Domaines CORS autorisés",description:`Liste de domaines pouvant envoyer des requêtes cross-origin à {name}, séparés par des virgules. Utilisez "*" pour autoriser n'importe qui, ce qui n'est pas recommandé.`,domainInvalid:"Veuillez entrer une liste valide de noms de domaine"}},rule:{add:{title:"Ajouter une correspondance d'URL",confirm:"Ajouter",pathPrefix:"Quel est le préfixe de l'URL ?",pathPrefixTip:"Si vous définissez le préfixe sur '/mon-préfixe', alors toutes les demandes commençant par ce préfixe seront routées vers le blocklet configuré",blocklet:"Quel Blocklet gérera ces demandes ?",port:"Quel port du blocklet gérera les requêtes ?",portTip:"Par défaut, cela correspond au port principal du blocklet. Si votre blocklet écoute sur plusieurs ports, vous pouvez personnaliser cela.",responseType:"Type de réponse",responseBody:"Contenu de la réponse",responseBodyTip:"Veuillez coller votre contenu de réponse ici, ne doit pas dépasser 4096 caractères.",responseBodyRequired:"Le contenu de la réponse ne peut pas être vide"},delete:{title:"Supprimer la correspondance d'URL",description:`En confirmant, vous supprimerez votre correspondance d'URL existante pour "{name}". Tapez "{name}" ci-dessous et sélectionnez Supprimer pour effectuer le changement, ou sélectionnez Annuler si vous souhaitez conserver votre correspondance d'URL.`,confirm_desc:"Veuillez entrer {name} pour supprimer",cancel:"Annuler"},update:{title:"Mise à jour du mappage URL",confirm:"Oui, Mettre à jour",cancel:"Annuler"}},cert:{name:"Nom du certificat",domain:"Nom de domaine",action:"Action",commonName:"Nom commun",boundDomains:"Domaines",source:"Source",expired:"Expiré",leftDays:"jours restants",issuedOn:"Délivré le",expiryOn:"Date d'expiration le",fingerprintAlg:"Algorithme d'empreinte digitale",validityPeriod:"Période de validité",matchedSites:"Sites correspondants",upload:"Téléchargement manuel",publicCertHelperText:"Les certificats publics peuvent être téléchargés",nonPublicCertHelperText:"Les certificats non-publics ne peuvent pas être téléchargés",protectedCertHelperText:"Les certificats protégés ne peuvent pas être modifiés",unprotectedCertHelperText:"Les certificats non protégés peuvent être modifiés",issuing:"Certificat en cours de génération",sourceTypes:{upload:"Téléchargement manuel",lets_encrypt:"Chiffrons"},table:{nodata:"Pas de données"},delete:{title:"Supprimer certificat",description:"Confirmer la suppression du certificat du domaine {domain} ? Cela peut avoir un impact sur les services associés. Veuillez confirmer que cela est sans risque avant de procéder à la suppression.",confirm:"Confirmer"},nginx:{title:"Mettre à jour le certificat",titleAdd:"Ajouter un certificat",pem:"Fichier de certificat SSL",pemTip:'Veuillez déposer votre fichier de certificat de serveur ici. Il doit se terminer par ".pem" ou ".crt".',key:"Fichier de clé privée",keyTip:'Veuillez déposer votre fichier de clé privée du serveur ici, il doit se terminer par ".pem" ou ".key".',confirm:"Enregistrer",cancel:"Annuler",invalidFile:"Vous avez sélectionné un fichier invalide",empty:"Aucun fichier sélectionné pour le moment",source:"Source",sourceTypes:{upload:"Téléchargement manuel",lets_encrypt:"Chiffrons"}},detail:{title:"Détails du certificat"},genLetsEncryptCert:{title:"Générer un certificat Let's Encrypt",dnsTip:"Veuillez vous assurer que le nom de domaine pointe vers le serveur Blocklet actuel.",description:"L'ajout d'un certificat rendra le service plus sécurisé et Blocklet Server renouvellera automatiquement le certificat avant son expiration."}},gateway:{reqLimit:{switchLabel:"Activer la limitation des requêtes concurrentes pour des performances fiables",rate:"Limitez les requêtes simultanées par IP à {rate} par seconde (limite par IP)",title:"Limitation des demandes",global:"Limitez les requêtes concurrentes traitées par la passerelle à {global} par seconde (limite globale)",burstFactor:"Facteur de burst pour la limitation de débit, appliqué aux limites globales et par IP (global : {global}, par IP : {rate})",methods:"Limiter les requêtes simultanées par IP pour les méthodes suivantes",burstDelay:"Délai lorsque les requêtes explosent et dépassent la limite par IP ({delay} secondes)"},cacheEnabled:{switchLabel:"Activer le cache de la passerelle pour améliorer les performances",title:"Cache de la passerelle"},blockPolicy:{switchLabel:"Blocage de la demande",addItem:"Ajouter un élément",blacklistDesc:"Les demandes provenant de ces adresses IP seront bloquées pour accéder à ce serveur et à tous les Blocklets",inputPlaceholder:"Entrez l'adresse IP, la plage CIDR ou l'URL",invalidItem:"Adresse IP, plage CIDR ou URL non valide",title:"Blocage de la demande",autoBlocking:{switchLabel:"Bloquez les mauvaises demandes par détection en temps réel",windowSize:"La taille de la fenêtre temporelle pour compter les requêtes (secondes)",windowQuota:"Le nombre maximum de requêtes (par IP) autorisé dans la fenêtre",blockDuration:"La durée pour bloquer l'utilisateur par IP lorsque le quota est dépassé dans la fenêtre (secondes)",statusCodes:"Les codes de statut à vérifier"}},proxyPolicy:{switchLabel:"Courir derrière des proxies",trustRecursive:"Faites confiance aux mandataires de manière récursive",trustRecursiveDesc:"Utilisez l'IP la plus à gauche dans la chaîne X-Forwarded-For",trustedProxies:"Proxies de confiance",trustedProxiesDesc:"Les demandes de ces adresses IP seront considérées comme fiables pour obtenir l'IP réelle du client",realIpHeaderLabel:"En-tête IP client",realIpHeaderDesc:"Si le serveur de Blocklet fonctionne derrière des proxies tels que CloudFront, vous pouvez définir ici l'en-tête de l'IP réelle du client.",addItem:"Ajouter un élément",inputPlaceholder:"Entrez l'adresse IP, la plage CIDR",invalidItem:"Adresse IP non valide, plage CIDR",title:"Politique de proxy"},wafPolicy:{switchLabel:"Détectez et bloquez les mauvaises requêtes avec ModSecurity",modeDesc:"Le mode de modsecurity (module modsecurity requis)",mode:{detectOnly:"Détecter seulement (ne bloquera pas les demandes)",on:"Activé (bloquera les demandes)"},logLevelDesc:"Le niveau de journalisation pour ModSecurity (0-9), 0 signifie désactiver le journal d'audit",inboundAnomalyScoreThresholdDesc:"Le seuil de score d'anomalie entrant (1-100), une valeur plus basse signifie plus strict",outboundAnomalyScoreThresholdDesc:"Le seuil du score d'anomalie sortante (1-100), une valeur plus basse signifie plus strict",docDesc:"Consultez la documentation pour savoir comment configurer modsecurity",title:"Pare-feu d'application Web"}}},noMatch:{desc:"Nous ne pouvons pas trouver la page que vous recherchez"},health:{connectionErrorTip:"Le serveur de blocs ne peut pas se connecter au réseau, veuillez vérifier si le serveur de blocs a été arrêté ou s'il y a un problème réseau.",connectionRecoveryTip:"La connectivité du serveur Blocklet a été rétablie",connectionStoppedTip:"Le serveur Blocklet a été arrêté",wrongAccessUrlTip:"L'adresse d'accès au serveur Blocklet est incorrecte, veuillez utiliser l'adresse d'accès correcte."},debug:{title:"Votre serveur Blocklet est en ligne et fonctionne !"},team:{invite:{action:"Inviter Nouveau",setting:"Paramètres d'invitation",enabled:"Désactivez ce paramètre pour restreindre les nouvelles invitations utilisateurs aux propriétaires/administrateurs uniquement",disabled:"Activez ce paramètre pour permettre à tout utilisateur d'inviter de nouveaux utilisateurs",inviter:"Invité par"},add:"Ajouter nouveau",member:{name:"Nom",passport:"Passeport",passports:"Passeports",lastLogin:"Dernière connexion",lastLoginIp:"Dernière adresse IP de connexion",source:"Source d'inscription",source_derived:"Dérivé de OAuth",source_wallet:"Portefeuille DID",filter:"Filtrer par",blockAccess:"Interdire la connexion",blockAccessDescription:"L'utilisateur ne pourra pas se connecter à cette application",allowAccess:"Autoriser la connexion",allowAccessDescription:"L'utilisateur pourra se connecter à cette application",updateRole:"Mettre à jour le rôle",removeUser:"Supprimer l'utilisateur",removeUserDescription:"Confirmer la suppression de l'utilisateur '{name}' ?",revokePassport:"Révoquer le passeport",revokePassportDescription:"Une fois que le passeport est révoqué, le titulaire du passeport ne peut plus l'utiliser pour se connecter, êtes-vous sûr de vouloir continuer?",enablePassport:"Activer le passeport",enablePassportDescription:"Une fois que le passeport révoqué est à nouveau activé, le titulaire du passeport peut l'utiliser pour se connecter à nouveau, êtes-vous sûr de vouloir continuer?",passportPermissionTitle:"Le passeport a les autorisations suivantes:",search:"Rechercher un membre",onlyApprovedMember:"Afficher approuvé uniquement",inviteDialog:{createInviteLink:"Générer un lien d'invitation",createSuccessTip:"Le lien d'invitation a été créé avec succès. Cliquez pour copier et envoyer le lien au membre invité, veuillez noter que ce lien d'invitation ne peut pas être réutilisé et expirera le {expireDate}."},error:{passportEmpty:"Le passeport ne doit pas être vide"},connectedAccounts:"Comptes Connectés",connections:"Connexions",federated:"Fédéré",switch:{did:"Passer à DID",profile:"Changer de profil",passport:"Changer de passeport"},settings:{notification:"Notifications",email:"Envoyez-moi un e-mail lorsque certains événements se produisent",wallet:"Envoyez une notification à mon portefeuille lorsque des événements se produisent",phone:"Envoyez-moi un message texte lorsque certains événements se produisent",webhook:"Points de terminaison en temps réel",add:"Ajouter un nouveau webhook",url:"URL personnalisée",slack:"Webhook Slack",tested:"Message de test envoyé"},activeUserSessions:"Sessions d'utilisateurs actives",forceLogout:"Déconnexion forcée",forceLogoutDescription:"Confirmez-vous la déconnexion forcée de cet utilisateur?",openProfile:"Voir le profil",removeUserSuccess:"Utilisateur supprimé avec succès",forceLogoutRemoveDescription:"Confirmer pour forcer la déconnexion de cet utilisateur (Supprimer également toutes les sessions utilisateur) ?"},transferNode:{name:"Transfert de propriété",inviteDialog:{title:"Serveur de blocs de transfert",tips:{progress:"Le serveur doit être accepté par le destinataire pour terminer l'opération de transfert, et une fois que le destinataire l'a accepté, vous ne pouvez plus vous connecter au serveur avec le passeport actuel.",newOwnerPermissions:"Le nouveau propriétaire aura le droit de gérer toutes les opérations telles que les membres, les passeports et les Blocklets.",revoke:`Si vous souhaitez retirer l'invitation de transfert, vous pouvez supprimer le lien d'invitation sur la page "Équipe -> Membres -> Invitation".`},createInviteLink:"Générer le lien d'invitation",createSuccessTip:"Le lien d'invitation a été créé avec succès. Cliquez pour copier et envoyez le lien au membre invité. Veuillez noter que ce lien d'invitation ne peut pas être réutilisé et expirera le {expireDate}."},delegateDialog:{title:"Autorisation requise",scan:"Utilisez les méthodes suivantes pour autoriser le serveur à transférer le NFT de propriété du serveur.",confirm:"Confirmez dans votre compte",success:"Autorisation réussie"}},transferApp:{name:"Transfert de propriété",transferDialog:{title:"Demande de transfert",tips:{progress:"La demande doit être acceptée par le destinataire pour finaliser l'opération de transfert, et une fois que le destinataire l'a acceptée, vous ne pouvez plus vous connecter à l'application avec le passeport actuel.",newOwnerPermissions:"Le nouveau propriétaire aura le droit de gérer toutes les opérations telles que les membres, les passeports et les paramètres."},createTransferLink:"Générer un lien de transfert",createSuccessTip1:`Le lien de transfert est créé avec succès, l'invité doit utiliser <a style="color: rgb(29, 193, 199)" target="_blank" href="https://www.didwallet.io/">DID Wallet</a> pour recevoir la propriété de l'application.`,createSuccessTip2:"Veuillez cliquer pour copier et envoyer le lien au membre invité, veuillez noter que ce lien de transfert ne peut pas être réutilisé et expirera le {expireDate}. Votre lien de transfert ne sera affiché qu'une seule fois et ne sera plus visible après la fermeture de cette boîte de dialogue.",createSuccessTip3:"Après la réussite du transfert, l'application redémarrera automatiquement pour que les modifications prennent effet",link:"Lien de transfert",iKnow:"J'ai copié et enregistré le lien"},connectDialog:{title:"Autorisation requise",scan:"Utilisez les méthodes suivantes pour autoriser l'application à transférer la propriété.",confirm:"Confirmez dans votre compte",success:"Autorisation réussie"},receiveDialog:{title:"Recevoir la propriété de l'application",scan:"Utilisez les méthodes suivantes pour recevoir la propriété de l'application.",confirm:"Confirmer dans votre compte",success:"Réception de la propriété avec succès"},successTitle:"Vous êtes devenu le nouveau propriétaire de cette application",visitDashboard:"Visitez le tableau de bord de l'application",description:"Vous pouvez transférer la propriété de votre application à un autre portefeuille ou à une autre personne."},permission:{create:{title:"Créer une autorisation",description:"Format: <action>_<ressource>"},delete:{title:"Supprimer l'autorisation",description:"Confirmer la suppression de {name} ?"},error:{actionEmpty:"L'action ne peut pas être vide",resourceEmpty:"La ressource ne peut pas être vide",permissionTooLong:"La permission ne peut pas dépasser {length} caractères",descriptionTooLong:"La description ne peut pas dépasser {length} caractères"}},passport:{create:{title:"Créez un passeport",titleTip:"Le titre ne peut pas être modifié après sa création, il est recommandé de le limiter à 14 lettres"},bind:{title:"Autorisation de lier",roleTip:"Vous obtiendrez toutes les autorisations du passeport sélectionné après la liaison.",permissionTip:"Vous recevrez les autorisations sélectionnées après la liaison",transferLeftTitle:"Toutes les autorisations",transferRightTitle:"Permissions accordées"},delete:{title:"Supprimer passeport",description:"Les passeports détenus par l'utilisateur perdent toutes leurs autorisations une fois supprimés. Êtes-vous sûr de vouloir continuer?"},error:{titleEmpty:"Le titre ne peut pas être vide",titleTooLong:"Le titre ne peut pas dépasser {length} caractères",descriptionEmpty:"La description ne peut pas être vide"},issuance:{pending:"En attente",create:{title:"Générer le lien"},delete:{title:"Supprimer le lien de réception",description:"Confirmez la suppression de {link} ?"}},issue:"Émettre un passeport",disableIssuance:"Désactiver l'émission de passeports",enableIssuance:"Activer l'émission de passeport",disableIssuanceTip:'"Émettre un passeport", "Inviter un membre" et autres opérations seront désactivées.',enableIssuanceTip:"Émettre un passeport",trustedPassportIssuers:"Émetteurs de passeports de confiance",trustedIssuers:"Émetteurs de confiance",trustedFactories:"Collections de NFT de confiance",trustedFactoriesTip:"Gérez des collections NFT de confiance qui peuvent être utilisées pour l'échange d'un passeport",searchFactoryAddress:"Rechercher Collection DID",configFactories:"Configurer les collections NFT de confiance",configFactoriesTip:"Permettre aux utilisateurs d'échanger des NFT contre des passeports",factoryAddress:"Adresse de collection NFT",factory404:"Collection NFT introuvable",factoryAddressTip:"L'adresse de collection NFT doit exister sur la chaîne principale d'ArcBlock",role:"Type de passeport",ttl:"Politique d'expiration du passeport",ttlNever:"Jamais expirer",ttlMint:"Depuis l'achat de NFT",ttlExchange:"En raison de l'échange de passeports",ttlNeverTip:"Le passeport sera valide jusqu'à révocation",ttlMintTip:"Le passeport sera valide tant que le NFT est acheté jusqu'à ce que vous spécifiez ttl ou révoquiez",ttlExchangeTip:"Le passeport sera valide à partir du moment où l'utilisateur a échangé avec succès jusqu'à ce que vous ayez spécifié ttl ou révoqué",ttlTip:'"365d" signifie 365 jours, vous pouvez également utiliser "30 jours" ou "24h"',validUntil:"Valable jusqu'au: {date}",externalPassport:"Passeport externe",notTrustedIssuerTip:"Le passeport ne peut pas être utilisé car l'émetteur ne figure pas sur la liste des émetteurs de confiance",issuerDid:"Identifiant de l'émetteur",addNodeToTrustedIssuers:"Ajouter le serveur actuel en tant qu'émetteur de passeports de confiance",revoked:"Révoqué",noPermission:"Pas de permission pour effectuer cette opération",shouldNotDeleteCurrent:"Vous ne pouvez pas révoquer votre passeport actuellement utilisé",mappingRule:"Règle de mappage",defaultRule:"Règle par défaut",search:"Rechercher passeport",searchIssuerDid:"Recherchez l'ID d'émetteur",issueBy:"Problème par {name}",configColor:"Configurer la couleur du passeport",configColorTip:"Personnalisez la couleur du passeport",color:"Couleur du passeport",description:"Utilisez ce passeport pour connecter {teamName} en tant que {title}",displayBuiltin:"Builtin",displayCustom:"Personnalisé",typesTip:"Personnaliser les types de passeport, séparés par des virgules",issuanceDate:"Date de délivrance : {date}",sourceMaps:{recover:"Récupéré",issue:"Émis",invite:"Invité",trusted:"Fiable"},related:"Passeports associés",operationLogs:"Logs d'opération",owner:"Propriétaire",status:"Statut",statusMap:{valid:"Valide",revoked:"Révoqué",expired:"Expiré"},view:"Gérer les passeports",trustedPassportIssuersTip:"Gérez les émetteurs de passeports de confiance pouvant être utilisés pour délivrer des passeports",issuanceTime:"Date d'émission",relatedDescription:"Le passeport actuel est dérivé du passeport suivant",passportExpireTime:"Définir une date d'expiration pour le Passport",customExpireTime:"Durée d'expiration personnalisée",customExpireTimeIsInvalid:"Le délai d'expiration personnalisé n'est pas valide"},inviting:{link:"Lien d'invitation",inviter:"Inviter",delete:{title:"Supprimer le lien d'invitation",description:"Confirmer la suppression de {link}?"},disabledTip:"L'invitation n'est pas activée"},whoCanAccess:{all:{title:"Accessible à tous"},owner:{title:"Propriétaire uniquement"},invited:{title:"Utilisateur invité seulement"}},userFollowers:{follow:"Suivre",unfollow:"Ne plus suivre",followersOnly:"Visible uniquement par les abonnés",followers:"Abonnés",following:"Suivant",emptyFollowing:"Vous ne suivez encore aucun utilisateur.",emptyFollowers:"Pas encore de followers",title:"Suivre",invitees:"Invités",emptyInvitees:"Vous n'avez invité personne pour le moment."},orgs:{explain:"Permet aux utilisateurs de créer et de rejoindre des organisations, d'attribuer des rôles et de gérer des ressources.",description:"Description",deleteConfirm:"Confirmer la suppression de {name} ?",members:"Membres",myCreated:"Mes Créations",myJoined:"Mes Adhésions",myCreatedEmpty:"Vous n'avez pas encore créé d'organisations.",myJoinedEmpty:"Vous n'avez rejoint aucune organisation pour le moment.",deleteConfirmDescription:"La suppression de cette organisation supprimera tous les rôles et ressources qui y sont liés. Les utilisateurs resteront dans le système mais perdront leurs rôles dans cette organisation. Cette action est irréversible.",active:"Actif",deleteOrg:"Supprimer l'organisation actuelle",invitedAt:"Invité à : {time}",joinedAt:"Rejoint le : {time}",createNew:"Créer une nouvelle organisation",viewAll:"Voir toutes les organisations",validate:{nameEmpty:"Le nom ne peut pas être vide",nameTooLong:"Le nom ne peut pas dépasser {length} caractères",descriptionTooLong:"La description ne peut pas dépasser {length} caractères"},mutate:{title:"{mode} Organisation",name:"Nom de l'organisation",createSuccess:"Organisation créée avec succès",updateSuccess:"Organisation mise à jour avec succès",orgNotEnabled:"L'organisation n'est pas activée",maxMemberPerOrg:"L'organisation peut inviter jusqu'à {maxMemberPerOrg} membres.",maxOrgPerUser:"Vous pouvez créer jusqu'à {maxOrgPerUser} organisations"},invite:{chooseUsersToInvite:"Choisir les utilisateurs à inviter",success:"Invitation envoyée aux utilisateurs",pleaseSelectUsers:"Veuillez sélectionner des utilisateurs",pleaseSelectRole:"Veuillez sélectionner un rôle",inviteExternalUsers:"Inviter des utilisateurs externes",failed:"Invitation de {count} utilisateurs échouée, veuillez réessayer plus tard",remove:"Supprimer l'utilisateur",removeSuccess:"Utilisateur supprimé avec succès",limit:"Limite",limitTip:"Limiter les membres de l'organisation et les organisations par utilisateur.",maxMembers:"Membres max par organisation",maxOrgs:"Max orgs par utilisateur",maxMembersTip:"Le nombre maximal d'utilisateurs pouvant être invités pour cette organisation",inviteLinkSendToEmail:"Le lien d'invitation a été envoyé à l'e-mail ({email}), veuillez vérifier",enterEmailAddress:"Veuillez saisir l'adresse e-mail",inviteTitle:"Inviter des utilisateurs à rejoindre {orgName}"},member:{removeMemberConfirm:"Confirmer la suppression de {name}?",removeMemberConfirmDescription:"Après suppression, l'utilisateur perdra les rôles et les permissions dans l'organisation. Cette action est irréversible.",removeInvitingMember:"Confirmer ou annuler l'invitation de {name} ?",removeInvitingMemberDescription:"Après suppression, l'utilisateur ne pourra pas rejoindre l'organisation et doit être réinvité. Cette action est irréversible."}}},launcher:{provider:"Fournisseur",adminUrl:"URL"},session:{blockAccess:"Vous avez été bloqué d'accéder à ce serveur"},launchBlocklet:{appInfo:"Informations sur l'application",appInfoDesc:"Confirmez les informations de demande",author:"Auteur de l'application : {author}",setup:"Configuration Blocklet",redirect:"Rediriger",alreadyRunning:"L'application {name} est déjà en cours d'exécution sur ce serveur de blocs",alreadyInstalled:"L'application {name} est déjà installée sur ce serveur Blocklet.",alreadyExists:"Cette application existe déjà, redirection en cours...",purchased:"Déjà acheté",purchase:"Achat",nextStep:"Étape suivante",agreement:"Contrat de licence",agreeAll:"Accepter et continuer",installing:"Installation de {appName} sur {serverName}, cela peut prendre quelques minutes pour terminer, veuillez rester à l'écoute...",redirecting:"{appName} est installé avec succès, démarrage en cours...",start:"Lancement",launch:"Installer Blocklet sur le serveur",launchSuccess:"{appName} a été lancé avec succès !",installSuccess:"Blocklet est installé et lancé avec succès sur {serverName}",openInRegistry:"Voir dans le Blocklet Store",subTitle:"Prêt à installer le Blocklet {appName} sur {serverName}",installingSubTitle:"Installation de {appName}",access:"Ouvrez l'application",viewApplication:"Voir la candidature",newVersion:"Nouvelle version",newVersionDesc:"L'application existe déjà, mais la version actuelle peut être mise à niveau",upgradeNow:"Mise à niveau maintenant",later:"Plus tard",introduction:"Introduction",welcome:"Bienvenue dans l'assistant de lancement de Blocklet",accept:"J'accepte les conditions de l'accord de licence Blocklet",license:"Licence d'application",next:"Acceptez l'EULA et continuez",purchaseApp:"Acheter Blocklet",setupAppDesc:"Initialisez votre Blocklet",launched:"Complet",confirmInstall:"Confirmer l'installation",dialog:{title:"Devenez propriétaire d'application",nftFreeDescription:"Veuillez présenter l'espace d'application NFT et créer un compte d'application pour continuer.",nftPaidDescription:"Veuillez présenter l'espace d'application NFT et l'achat d'application NFT pour continuer",freeDescription:"Veuillez créer un compte d'application pour continuer",paidDescription:"Veuillez présenter l'achat NFT de l'application et créer un compte d'application pour continuer.",confirm:"Confirmez dans votre compte",success:"Autorisation réussie",authorizationTimeout:"Délai d'autorisation"},waiting:{verifying:"Vérification des métadonnées de l'application ...",downloading:"Téléchargement du bundle d'application en cours...",downloadingComponent:"Téléchargement de {name}",extractingComponent:"Extraction de {name}",extracting:"Extraction du bundle d'application...",installing:"Installation des composants de l'application...",installed:"Installé",starting:"Démarrage de l'application...",done:"Votre application se lance...",parsing:"Analyse des métadonnées de l'application...",initializing:"Initialisation de la configuration de l'application...",initializingOwner:"Initialisation du propriétaire de l'application...",creatingSecurityRules:"Création des règles de sécurité par défaut...",assigningDomain:"Attribution du domaine par défaut...",waitingForDomain:"Attente de la prise d'effet du domaine par défaut..."},error:{loadMetaFailed:"Échec du chargement des informations de l'application",appMetaNotFound:"Aucune information trouvée pour cette application",downloadFailed:"Échec du téléchargement de l'application, veuillez réessayer.",installFailed:"Échec de l'installation de l'application, veuillez réessayer",startFailed:"Échec du démarrage de l'application, veuillez réessayer",launchFailed:"Échec du lancement de l'application, veuillez réessayer",installedButStopped:"L'application a été installée avec succès, mais ne peut pas être démarrée. Vous pouvez la démarrer manuellement après avoir résolu les problèmes de blocage.",installedButError:"L'application est installée avec succès, mais n'a pas réussi à démarrer",restoreFailed:"Échec de la restauration de l'application, veuillez réessayer",resourceBlocklet:"Ce blocklet ne peut pas être lancé directement. Cependant, vous pouvez l'ajouter à une application existante."},steps:{introduction:"Introduction",installApp:"Installer l'application",purchaseSpace:"Acheter de l'espace",prepareSpace:"Préparez l'espace"},installRelatedComponents:"Installer les Blocklets liés",canNotInstall:"Ne peut pas installer",dockerBlockletCantInstall:"Impossible d'installer le Blocklet, car le serveur Blocklet n'a pas activé Docker ou le réseau Docker",nav:{myApps:"Mes apps",viewMyApps:"Voir mes applications"},withoutWallet:"Ignorer la connexion du portefeuille DID",nwFailed:"Échec de la récupération du workflow.",alreadyConsumed:"La session de lancement a été consommée",redirectToLauncherBlocklet:"Redirection vers Launcher Blocklet"},issuePassport:{title:"Recevoir le passeport",description:"Utilisez les méthodes suivantes pour recevoir le passeport délivré par {name}",dialog:{scan:"Utilisez les méthodes suivantes pour demander le passeport",confirm:"Confirmez dans votre compte",success:"Le passeport a été ajouté avec succès à votre portefeuille",loginWithPassport:"Connectez-vous avec ce passeport",autoClose:"La page se fermera automatiquement dans {seconds}s",autoJump:"La page sera automatiquement sautée dans {seconds}s."}},lostPassport:{title:"Passeport perdu",description:"Le propriétaire de {name} peut utiliser les méthodes suivantes pour récupérer le passeport. Les membres doivent contacter le propriétaire pour une réédition du passeport.",return:"Annuler l'opération de récupération, retour à la page d'accueil",receivePassport:"Recevoir le passeport",recoverDialog:{title:"Récupérer le passeport",scan:"Utilisez les méthodes suivantes pour récupérer votre passeport",confirm:"Confirmez sur votre DID wallet",success:"Récupération réussie"},receiveDialog:{title:"Recevoir le passeport",scan:"Utilisez les méthodes suivantes pour recevoir le passeport",confirm:"Confirmez sur votre portefeuille DID",success:"Reçu avec succès"},recoverPassport:"Récupérer le passeport"},invite:{message:"{name} vous invite à être le {role} de {dapp}",success:"Vous avez réussi à rejoindre {dapp}",receive:"Recevoir avec",validUntil:"Valable jusqu'à:",viewPermission:"Permission d'affichage",emptyPermission:"Permission vide",open:"Ouvrir",description:{step1:"Téléchargez et configurez votre {wallet}",step2:"Cliquez sur le bouton ci-dessus pour recevoir le passeport",step3:"Connectez-vous à {dapp} avec le passeport reçu"},transferNFTDialog:{title:"Acceptez le serveur Blocklet {name}",scan:"Connectez le Launcher pour compléter la réception du serveur Blocklet.",confirm:"Veuillez passer en revue cette opération sur votre portefeuille DID",success:"Connecté avec succès, en attente de confirmation de la réception du serveur"}},receive:{dialog:{title:"Recevoir le passeport",scan:"Après réception du passeport, vous pouvez l'utiliser pour vous connecter à l'application.",confirm:"Confirmer dans votre compte",success:"Vous êtes connecté avec succès",scanWithDid:"Veuillez utiliser le compte {did} pour recevoir ce passeport. Après réception du passeport, vous pouvez l'utiliser pour vous connecter à l'application."}},navigation:{navigation:"Navigation",actionFailed:"Action échouée",form:{themeConfig:"Configuration du thème",contentConfig:"Configuration du contenu",title:"Titre",titlePlaceholder:"Veuillez saisir le titre de navigation",titleTooLong:"La longueur du titre doit être inférieure à {len}",description:"Description",descriptionPlaceholder:"Veuillez saisir la description de navigation",descriptionTooLong:"La longueur de la description doit être inférieure à {len}",icon:"Icône par défaut",iconPlaceholder:"Veuillez sélectionner une icône",invalidIcon:"L'icône n'est pas valide",findMoreIcon:"Trouver plus d'icônes",link:"Lien",linkPlaceholder:"Veuillez saisir le lien de navigation",invalidLink:"Le lien est invalide",component:"Composant",componentPlaceholder:"Veuillez sélectionner le composant de navigation",role:"Rôle",rolePlaceholder:"Veuillez sélectionner le rôle de navigation",locale:"Locale",localePlaceholder:"Veuillez entrer la localisation à ajouter",localeExists:"{value} existe déjà",activeIcon:"Icône active",activeColor:"Couleur active",color:"Couleur par défaut",colorPlaceholder:"p. ex. #FF0000",invalidColor:"Couleur invalide",searchIcons:"Rechercher un icône",searchIconsPlaceholder:"Exemple: mdi:home"},action:{add:"Ajouter la navigation",addSub:"Ajouter une sous-navigation",edit:"Modifier la navigation",hide:"Masquer la navigation",show:"Afficher la navigation",del:"Supprimer la navigation",new:"Nouveau",noAddSub:"Le composant désinstallé ne peut pas ajouter de sous-navigation",noEdit:"Le composant désinstallé ne peut pas être modifié",noDel:"Supprimer la navigation intégrée n'est pas autorisé",reset:"Réinitialiser",restConfirmTitle:"Réinitialiser la navigation {section} par défaut ?",restConfirmDesc:"Votre navigation personnalisée sera effacée et rétablie aux éléments par défaut.",resetSuccessful:"Réinitialisation réussie",delTabBarTitle:"Voulez-vous supprimer cette navigation ?",delTabBarDesc:"Après la suppression, la navigation sera supprimée de la barre de navigation."},system:"Système",services:"Services",access:"Accès",members:"Membres",passport:"Passeport",analytics:"Analytique",dashboard:"Tableau de bord",studio:"Blocklet Studio",aigne:"Connexions IA",blockletService:"Service Blocklet",didConnect:"Identité & Accès",didSpaces:"Stockage & Sauvegarde",website:"Site Web Studio",notification:"Centre de notifications",operations:"Observabilité",integration:"Intégrations",developer:"Développeurs",overviewDesc:"Surveillez la santé et les détails de l'application, et installez, démarrez ou supprimez facilement les Blocklets en un seul endroit.",didConnectDesc:"Ajoutez des membres de l'équipe, définissez les options de connexion et gérez l'accès sécurisé pour une collaboration fluide.",aigneDesc:`Configurez les connexions liées à l'IA pour votre blocklet, y compris <a href="{aigneHubUrl}" target="_blank">AIGNE Hub</a> et <a href="{mcpUrl}" target="_blank">les serveurs compatibles MCP</a>.`,websiteDesc:"Gérez le domaine, ajustez le thème, affinez la marque et personnalisez la navigation pour un look de site unique.",operationsDesc:"Consultez les analyses, vérifiez les journaux d'activité, recevez des alertes et ajustez les paramètres avancés selon les besoins.",integrationsDesc:"Liez les services externes via Webhooks, clés d'accès et serveurs MCP pour étendre les capacités de l'application.",developersDesc:"Utilisez les journaux, le suivi des performances et la documentation pour créer, déboguer et optimiser votre application.",didSpacesDesc:"Stockez et sauvegardez les données de votre application Blocklet en toute sécurité pour garantir une protection fiable et une récupération facile.",publishDesc:"Publiez votre application dans les magasins ou partagez-la via des liens pour que plus de personnes puissent l'utiliser."},storage:{spaces:{title:"DID Spaces",tips:"Conseils",label:"Veuillez entrer la passerelle DID Spaces",connected:{title:"Espaces DID connectés",tag:"Connecté(e)"},connectedWithName:"Vous vous êtes connecté avec succès à {name}",addedWithName:"Vous avez ajouté {name} avec succès",connects:"Connecter",reconnect:"Reconnecter",addressCannotEmpty:"L'adresse ne peut pas être vide",addressNotValid:"{url} n'est pas une adresse valide",authorize:{title:"Connectez {appName} à DID Spaces",scan:"Utilisez les méthodes suivantes pour permettre à l'application {appName} de se connecter à DID Spaces",success:"Connecté avec succès"},provideNFT:{title:"Veuillez montrer le DID Spaces NFT pour {appName}",scan:"Utilisez les méthodes suivantes pour permettre à l'application {appName} d'afficher les NFT DID Space",success:"Connecté avec succès"},backup:{title:"Sauvegarde",records:"Sauvegardes des enregistrements",without:"Sans sauvegarde",succeeded:"Sauvegarde réussie",failed:"Sauvegarde échouée",lastBackup:"Dernier temps de sauvegarde",lastBackupTip:`Il y a {time} depuis votre dernière sauvegarde réussie. Veuillez vérifier vos paramètres de sauvegarde dans l'onglet "DID Spaces".`,noBackup:"Pas de sauvegarde",noBackupTip:"Aucune sauvegarde n'a encore été créée. Nous recommandons de configurer des sauvegardes régulières pour protéger vos données et paramètres.",pending:"Sauvegarde en cours",timeout:"Délai d’attente de sauvegarde"},autoBackup:{title:"Sauvegarde automatique",enabled:"La sauvegarde automatique est activée",disabled:"La sauvegarde automatique est désactivée"},autoCheckUpdate:{title:"Vérification automatique des notifications de nouvelles versions",enabled:"La vérification automatique des nouvelles versions est activée",disabled:"La vérification automatique des nouvelles versions est désactivée"},backupSuccessfully:"Sauvegarde effectuée avec succès",restore:"Restaurer",restoreSuccessfully:"Restauration réussie",gateway:{title:"Passerelle",select:"Sélectionnez un espace DID",add:{title:"Ajouter des espaces DID",label:"Entrez l'URL des DID Spaces",failed:"Échec de l'ajout des espaces DID",invalidUrl:"URL de passerelle DID Spaces invalide",duplicate:"{name} est déjà connecté à ce Blocklet"},delete:{title:"Déconnecter",succeeded:"Déconnecté de DID Spaces {name}",failed:"Erreur lors de la déconnexion de la passerelle",failedForSelected:"Impossible de déconnecter du DID Space sélectionné",descForBackup:`Après la déconnexion de {name}, vous ne pourrez plus faire de sauvegarde de Blocklet à ce DID Space. Êtes-vous sûr de vouloir déconnecter ?
|
|
5
|
+
Ratio : 16:9`,copyrightDesc:"Utilisé dans : pied de page du site web",appUrlDesc:"Utilisé dans : plan du site et partage social",advanced:"Configuration avancée",errorReason:"Le démarrage de Blocklet a échoué, mais vous pouvez y accéder en cliquant sur le bouton ci-dessous.",nameValidateError:"Invalide : commence par une lettre/chiffre, 3–129 caractères, uniquement a–z, 0–9, - et _."},overview:{source:"Source",deployedFrom:"Déployé depuis",accessControl:"Contrôle d'accès",viewInStore:"Voir en magasin"},diskInfo:{empty:"Informations sur le disque non disponibles actuellement !",appDir:"Répertoire des applications",dataDir:"Répertoire des données",logDir:"Répertoire des journaux",cacheDir:"Répertoire de cache"},runtimeInfo:{noRunning:"Les informations d'exécution seront disponibles lorsque le blocklet sera en cours d'exécution !",memoryUsage:"Utilisation de la mémoire",cpuUsage:"Utilisation du CPU",uptime:"Temps de fonctionnement",port:"Port",processId:"Identifiant de processus",dataStorage:"Stockage de données"},dist:{downloadLink:"Lien de téléchargement",verify:"Vérifier"},status:{added:"Ajouté",waiting:"Attente",downloading:"Téléchargement",extracting:"Extraction",installing:"Installation",upgrading:"Mise à niveau",installed:"Installé",created:"Créé",starting:"Commencement",running:"Courir",stopping:"Arrêt",stopped:"Arrêté",error:"Erreur",deleting:"Suppression",corrupted:"Corrompu",purchasing:"En attente d'achat",purchased:"Acheté",verifying:"Vérification de l'achat",resource:"Ressource",failWithOldVersion:"La nouvelle version n'a pas pu démarrer, Blocklet fonctionne sur l'ancienne version.",hasSomeErrors:"{blocklets} ne sont pas entièrement opérationnels, peut-être en raison de problèmes ou d'un démarrage en attente."},list:{download:"Télécharger",star:"Étoile",searchPlaceholder:"Rechercher par nom de Blocklet ou DID"},component:{container:"Configuration globale",showContainer:"Afficher la configuration globale",didSpaceConfig:"Configurer les espaces DID",didSpaceConfigTip:"Veuillez remplir le processus d'autorisation suivant pour stocker les données de l'application dans les espaces DID",didSpaceConnected:"Autorisation de stockage pour: {endpoint}",checkUpdateTitle:"Vérifier les mises à jour",updateTitle:"Mise à jour des composants",noUpdate:"Aucun composant à mettre à jour",add:"Ajouter un composant",selectComponent:"Sélectionnez un Blocklet",selectRegistry:"Sélectionnez le Blocklet Store",selectRegistryTip:"Vous pouvez passer au magasin de blocs pour voir plus de composants",selectInstance:"Sélectionnez une instance",selectInstanceTip:"Vous pouvez sélectionner une instance existante ou créer une nouvelle instance. Les instances existantes utiliseront les configurations et les données préalablement enregistrées.",newInstance:"Créer une nouvelle instance",noComponent:"Aucun composant",mountPoint:"Quel est le point de montage?",mountPointTip:"Si vous définissez le point de montage sur '/mon-préfixe', alors toutes les requêtes commençant par ce point de montage seront routées vers le composant sélectionné.",delete:"Supprimer le composant",deleteDescription:"Ce composant ne sera pas accessible après sa suppression. Confirmer la suppression?",purchase:"Paiement requis",tip:{stopBlocklet:"Veuillez arrêter d'abord l'exécution de Blocklet",requiredBy:"Le composant est requis par {name}"},choose:"Choisir",addWithName:"Ajouter Blocklet à {name}",installingCanCloseWindowTip:"Installation du composant en arrière-plan, vous pouvez fermer cette fenêtre en toute sécurité",installSuccessTip:"Félicitations, le composant a été installé avec succès !",missDownloadTokenTip:"Impossible d'ajouter de composant payant sans jeton de téléchargement valide",purchaseComponentSecondCheckTip:"Veuillez présenter votre achat de blocklet NFT pour continuer",installComponentError:"Une erreur s'est produite lors de l'installation du composant, veuillez réessayer",downloadComponentError:"Une erreur s'est produite lors du téléchargement du composant, veuillez réessayer",addComponentTip:{introduction:"Bienvenue dans l'Assistant Ajouter un composant",isPurchase:"Vous devez vérifier le NFT avant d'utiliser <b>{name}</b> en tant que composant",belowInformation:"Ci-dessous se trouvent les informations pour le composant:",verifyNFT:"Veuillez sélectionner la méthode de vérification NFT",config:"Veuillez remplir la configuration du composant",environment:"Veuillez remplir l'environnement du composant",fromUrl:"Ajouter un blocklet à partir d'une URL",fromUpload:"Ajouter un Blocklet depuis un téléchargement",uploadFailed:"Échec du téléchargement",allowedFileTypes:"Types de fichiers autorisés pour le téléchargement : {types}"},addNext:"Ajouter {name}",upgradeNext:"Mise à niveau de {name}",setting:"Paramètres",noDependencies:"{name} n'a aucune dépendance",relatedComponents:"Blocklets associés",required:"Obligatoire",installed:"Installé",installingTip:"Installation du composant, veuillez patienter...",upgrade:"Mise à niveau",upgradeAvailable:"Mise à jour disponible",needBuy:"Achat nécessaire",isOfficial:"Officiellement certifié"},router:{urlPath:"Chemin d'URL",noRunning:"Le blocklet n'est pas actuellement démarré. Impossible d'y accéder via l'adresse suivante!",securitySetting:"Paramètre de sécurité",checkUrlAccessible:"Vérifiez l'accessibilité de l'adresse",urlInaccessible:"Cela peut être dû à des problèmes de réseau, l'adresse est temporairement inaccessible",noAccessibleUrl:"Aucune URL accessible",domainLockTooltip:"Le domaine généré par le système ne peut pas être modifié.",urlLockTooltip:"Le chemin d'URL généré par le système ne peut pas être modifié.",showAllDomains:"Afficher tous les domaines",showAllDIDs:"Afficher tous les DIDs",currentDomainTip:"Vous accédez à la page actuelle via ce domaine"},export:{title:"Exporter le bloclet",name:"Nom du bundle",nameTip:'par exemple : "mon-nom-de-blocklet" ou "@mon-scope/nom-de-blocklet"',result:"Qu'est-ce qui vient ensuite",exportSource:"Source d'exportation",success:"Blocklet exporté avec succès",resultTipStart:"Avec",resultTipEnd:"Vous pouvez construire et publier ce blocklet en quelques minutes",uploadedComponentTip:"Les composants directement téléchargés ne peuvent pas être exportés:"},migrate:{title:"Migrer l'application",scan:"Connectez votre portefeuille DID pour générer une paire de clés pour cette application",confirm:"Veuillez examiner cette opération sur votre portefeuille DID",success:"Votre application a été migrée avec succès, la page sera rafraîchie dans {sec} secondes.",intro:{l1:"Cliquez ici",l2:"Veuillez migrer votre application vers la nouvelle version (les modifications sont désactivées avant la fin de la migration)",l3:"L'application DID sera entièrement contrôlée depuis votre portefeuille DII.",l4:"Les données de l'application seront migrées et aucune autre modification ne sera nécessaire.",l5:"La nouvelle structure de l'application vous donnera plus de flexibilité lors du changement des composants.",l6:"4. Veuillez ne pas modifier les points de montage des composants avant que la nouvelle version du composant ne soit disponible."},tip:{duplicate:"Trouvez le composant en double {name}, veuillez supprimer les composants inutiles et migrer à nouveau",running:"Veuillez arrêter le blocklet avant la migration"}},error:{isRunning:"Blocklet est en cours d'exécution, veuillez l'arrêter d'abord",isInProgress:"Le Blocklet est en cours, veuillez attendre qu'il se termine"},publish:{createResource:"Créer une ressource",addResource:"Ajouter une publication",productTitle:"Produit",versionTitle:"Versionnage",imgTitle:"Images",resourceTitle:"Contenu",blockletEmptyTip:"Aucun Blocklet ici",createBlockletTip:"Vous pouvez créer un nouveau blocklet à partir des ressources, composants et configurations existants dans cette application",createBlocklet:"Nouvelle blocklet",componentNotRunning:"Le bloc {name} ne fonctionne pas, veuillez le démarrer d'abord",releaseEmptyTip:"Il n'y a pas de sorties ici",createReleaseTip:"Vous pouvez créer une version du blocklet, ainsi que des notes de version et des ressources, pour que d'autres personnes puissent les utiliser.",createRelease:"Créer une version",deleteReleaseTip:"La version ne peut pas être récupérée après la suppression",createBlockletDid:"Créez à partir du portefeuille DID",createReleaseSuccess:"Création de la version réussie",saveDraftSuccess:"Brouillon enregistré avec succès",connect:{title:"Créer un DID Blocklet",scan:"Utilisez les méthodes suivantes pour générer Blocklet DID",confirm:"Confirmez l'utilisation de DID Wallet",success:"L'identifiant Blocklet DID a été généré, veuillez poursuivre votre opération"},saveDraft:"Sauvegarder le brouillon",releaseNote:"Note de version",errorTip:{noDid:"Le Blocklet DID est requis",noTitle:"Le titre du bloclet est requis",noVersion:"La version Blocklet est obligatoire",noDescription:"La description du Blocklet est requise",noNote:"La note de version est requise",inValidVersion:"Version de Blocklet invalide",noResource:"Veuillez sélectionner les ressources à télécharger à inclure dans le blocklet",noFirstDid:"Veuillez créer d'abord un DID de Blocklet",invalidUrl:"Veuillez entrer une URL valide",invalidUrlOrEmail:"Veuillez saisir une URL ou une adresse e-mail valide"},packTip:"Actuellement, les bloclets peuvent être installés directement en tant qu'applications. Les composants et les configurations d'application seront automatiquement inclus dans le bloclet.",resourceChangedWarning:"Vous avez modifié la ressource, veuillez l'enregistrer à temps",installResourceTip:"URL d'installation:",installResourceTip2:"Si vous souhaitez voir plus de conseils, veuillez visiter",installResourceHelp:"Document d'aide",componentIncluded:"Inclus",componentForceRequired:"Requis",download:"Télécharger {name}",delete:"Supprimez {name}",copyInstallUrl:"Copier l'URL d'installation",install:"Installer {name}",publishToStoreSuccess:"Blocklet publié avec succès sur le Store",connectStoreSuccess:"Connexion réussie au Blocklet Store",uploadToStoreSuccess:"Blocklet téléchargé avec succès dans le Store, vous devez le publier dans le Store",viewLastRelease:"Voir la dernière version",reconnectStoreTip:"Après la reconnexion, un nouveau développeur sera lié. Êtes-vous sûr de vouloir vous reconnecter ?",deleteProject:{title:"Supprimez {name}",scan:"Utilisez les méthodes suivantes pour supprimer {name}",confirm:"Veuillez confirmer l'utilisation du portefeuille DID",success:"Le projet Blocklet a été supprimé, veuillez poursuivre votre opération.",tip1:"Le projet Blocklet ne pourra pas être récupéré après sa suppression",tip2:"Vous ne pourrez plus publier de nouvelles versions du bloc supprimé, ce qui signifie que le bloc ne sera plus mis à jour dans le Store.",tip3:"La suppression du Blocklet n'affectera pas sa version actuellement publiée dans le Store.",description:"Après avoir supprimé le Blocklet, vous rencontrerez les problèmes suivants. Êtes-vous sûr de vouloir le supprimer ?"},resourceTip:"Actuellement, en tant que bloc de ressources, il ne peut pas être installé directement depuis le Store.",whyCantSeeInStore:"Vous pouvez publier le Blocklet actuel sur le store, et il pourra être utilisé partout dans le monde.",whyCantSeeResourceBlockletInStore:"Vous pouvez publier le Blocklet actuel sur le store, et il pourra être utilisé partout dans le monde. Les Blocklets sont masqués par défaut de la page de liste du store.",tenantScope:"Locataire",blockletStudio:"Blocklet Studio",allComponentsNotRunning:"Blocklets ne fonctionne pas, veuillez le démarrer d'abord",resourceEmptyTip:"Aucune ressource disponible",steps:{resources:"Veuillez sélectionner les ressources qui doivent être associées à le Blocklet actuel, car ces ressources seront installées avec le Blocklet.",blocklets:"Sélectionnez les bloclets à associer.",version:"Définir la version de sortie et le journal des modifications.",introduction:"Une introduction claire peut mettre en valeur efficacement votre Blocklet. Vous pouvez utiliser la syntaxe Markdown pour l'écrire et le prévisualiser.",branding:"Décrivez les informations de base de votre Blocklet. Ces informations seront présentées aux utilisateurs dans le magasin."},branding:"Branding",brandingHelp:"Plus d'informations sur le blocklet seront affichées dans le magasin",resourceSelect:"Sélectionnez une ressource des blocklets",resourceUpload:"Téléchargez la ressource depuis votre disque (index.html est requis dans l'archive)",deleteStoreTip:"Êtes-vous sûr de vouloir supprimer {name} de la liste du magasin Connect?",disconnectStoreTip:"Le bloclet sera supprimé du store après sa déconnexion. Êtes-vous sûr de vouloir le déconnecter ?",connectOrUpload:"Connecter ou Télécharger",developerInfo:"Informations sur le développeur",autoUploadTip:"Uploader automatiquement le blocklet dans le Store après sa création",possibleSameStoreTip:"Essayez de résoudre les blocs de dépendance dans le même magasin de blocs avant chaque téléchargement si possible",needProjectId:"Veuillez créer un projet d'abord",projectSettings:"Paramètres du projet",noStoreSelected:"Veuillez sélectionner l'un des magasins existants ou ajouter un nouveau magasin pour continuer",installToThisServer:"Installer sur ce serveur",forceResourceBlocklet:"Force définie comme un blocklet basé sur les ressources",resourceDocker:"Construire Blocklet à partir de Docker",resourceSelectTitle:"Ressource",resourceUploadTitle:"Télécharger",resourceDockerTitle:"Docker",resourceDockerInputTip:"Veuillez entrer la commande docker run",docker:{pleaseInputDockerCommand:"Veuillez entrer la commande docker run",volumeTip:"Le volume doit commencer par $BLOCKLET_DATA_DIR ou $BLOCKLET_APP_DIR",volumeTip2:'Le volume ne peut pas contenir ".."',noAllowTheArg:"L'argument ne peut pas être utilisé dans la commande docker run",needCustomInput:"Configurez la valeur lors de l'installation de Blocklet",dockerParams:"Paramètres Docker",dockerCommand:"Commande Docker",dockerImageName:"Nom de l'image Docker",addItem:"Ajouter un paramètre Docker Run",envKey:"Clé de variable d'environnement",publishTips:"Le port externe final sera automatiquement attribué par le Blocklet",volumeTips:"Le volume doit commencer par $BLOCKLET_DATA_DIR ou $BLOCKLET_APP_DIR",modifyParam:"Modifier le paramètre Docker Run",modifyEnv:"Modifier la variable d'environnement",paramDetail:"Détail du paramètre",description:"Description",secure:"Sécuriser",shared:"Partagé",required:"Requis",prefix:"Préfixe",path:"Chemin",name:"Nom",portType:"Type de port",dockerImageNameError:"Le nom de l'image Docker ne peut pas contenir d'espaces",autoGenerated:"Généré automatiquement",dockerCMDError:"Docker CMD ne supporte que les caractères simples",proxyBehavior:"Comportement du proxy",serviceProxy:"Service",directProxy:"Direct",nextTab:"Analyser la commande"},storeRule:{maxImageCount:"Le store autorise au maximum {max} captures d'écran.",minImageCount:"Le magasin nécessite au moins {min} {unit}.",minImageSize:"La taille de l'image écran de {name} doit être d'au moins {width}x{height}.",logoFormat:"Le format d'image du logo ne prend en charge que [{format}].",warning:"Avertissement",screenshot:"Capture d'écran",screenshots:"Captures d'écran",first:"1.",second:"2.",third:"3."},store:"Blocklet Store",endpoint:{tab:"Blocklet distant",uploadToEndpoint:"Vous pouvez télécharger le Blocklet actuel vers le Blocklet spécifié.",addEndpoint:"Ajouter un point de terminaison Blocklet",urlEmpty:"L'URL du point de terminaison ne peut pas être vide",addFailed:"Échec de l'ajout du point de terminaison Blocklet :",deleteEndpoint:"Supprimer le point de terminaison Blocklet",deleteDesc:"Confirmer la suppression du point de terminaison Blocklet {name} ?",confirmDesc:"Veuillez saisir {name} pour supprimer",visitEndpoint:"Visiter Blocklet",disconnectEndpointTip:"Êtes-vous sûr de vouloir déconnecter {url} ? Après la déconnexion, le Blocklet ne sera plus téléchargé sur ce point de terminaison.",deleteFailed:"Échec de la suppression du point de terminaison Blocklet",publishToEndpointSuccess:"Blocklet publié avec succès sur Endpoint",uploadToEndpointSuccess:"Blocklet téléchargé avec succès sur le point de terminaison"},autoPublishErrorTip:"Publication automatique vers {storeName} échouée : {error}",singleton:"Une seule instance",singletonTip:"Lorsque le mode singleton est activé, l’application ne peut pas exécuter plusieurs instances en même temps. Comme votre application utilise le mode singleton, le déploiement blue-green ne peut pas être utilisé pour les mises à jour ou les redémarrages."},titleValidationError:"La longueur du titre doit être comprise entre 3 et 20 caractères",descriptionValidationError:"La longueur de la description doit être comprise entre 3 et 80 caractères",whyNeedAppPid:"Si votre application a été migrée, le DID permanent est le DID généré lors de l'installation initiale de ce Blocklet.",usingDocker:"Ce Blocklet fonctionnera en utilisant Docker.",gotoVisitError:"Impossible d'accéder à l'URL de Blocklet, veuillez réessayer plus tard",usingIsolation:"Ce Blocklet s'exécutera en utilisant l'isolation réseau",dockerImage:"Supporte Docker",mountPoint:{description1:"Ce changement peut casser les URLs contenant l'ancien point de montage, ce qui peut entraîner :",case1:"Références de ressources rompues entre les Blocklets dans cette application",case2:"URL cassée si vous les avez partagées publiquement",description2:"Vous pouvez configurer une redirection de l'ancien point de montage vers le nouveau afin de minimiser les changements potentiellement disruptifs."},skSourceMigratedTip:"Cette application a été lancée avec un wallet géré par un serveur et a migré vers DID Wallet pour une meilleure sécurité.",skSourceManagedTip:"Cette application fonctionne avec un portefeuille géré par un serveur. Veuillez migrer vers un portefeuille DID dès que possible pour une meilleure sécurité.",zeroDowntime:"Zéro temps d'arrêt"},dashboard:{nodeDid:"Noeud",ownerDid:"Propriétaire",routingEngine:"Moteur de routage",ownerNftURL:"Propriétaire NFT",expirationLeft:"Expiration restante",startFromCrashTip:"Le serveur Blocklet ne s'est pas arrêté normalement la dernière fois, veuillez démarrer manuellement les Blocklets qui doivent être exécutés.",runtimeConfig:{blockletMaxMemoryLimit:"Limite maximale de mémoire pour le blocklet",daemonMaxMemoryLimit:"Limite maximale de mémoire du serveur"},document:"En savoir plus dans notre documentation",database:"Base de données"},store:{nameSort:"Nom",popularSort:"Popularité",headerDescription:"Trouvez et installez vos Blocklets",detail:{purchase:"Acheter {name}",open:"Ouvrez {name}",install:"Installer {name}",upgrade:"Améliorez {name}",empty:"Pas d'introduction"},blockletRegistry:{changeFailed:"Échec de la modification du magasin de blocs :",addFailed:"Échec de l'ajout du Blocklet Store",editFailed:"Échec de l'édition du Blocklet Store",switchRegistry:"Passer au Blocklet Store",addRegistry:"Ajouter Blocklet Store",editRegistry:"Modifier le Blocklet Store",deleteRegistry:"Supprimer le Blocklet Store",haveSameRegistry:"Le même Blocklet Store existe",registryName:"Nom du magasin de Blocklet",registryUrl:"URL du Blocklet Store",registryNameEmpty:"Le nom du Blocklet Store ne peut pas être vide",registryUrlEmpty:"L'URL du magasin Blocklet ne peut pas être vide",deleteDesc:"Confirmer la suppression du magasin de bloclets {name} ?",confirmDesc:"Veuillez entrer {name} pour supprimer"},purchase:{title:"Acheter {name}",confirmed:"Votre achat de bloclet NFT est vérifié",declined:"Vous n'avez pas fourni d'achat de Blocklet NFT valide",waiting:"En attente de l'achèvement de l'achat...",purchase:{title:"Acheter NFT",description:"Payez un jeton avant d'installer ce bloclet si vous n'avez pas acheté ce bloclet."},verify:{title:"Vérifier NFT",description:"Votre NFT sera vérifié avant l'installation de ce blocklet si vous avez acheté et conservez le NFT d'achat dans votre portefeuille DID.",auth:{title:"Achat de la preuve d'identité nécessaire",scan:"Connectez le portefeuille DID pour fournir l'achat de bloclets NFT",confirm:"Veuillez passer en revue cette opération sur votre portefeuille DID",success:"Votre NFT d'achat est vérifié et l'installation a commencé."}},auth:{title:"Acheter {name}",scan:"Scannez le QRCode suivant avec votre portefeuille DID",confirm:"Confirmez dans votre compte",success:"Achat d'un NFT envoyé dans votre portefeuille DID"},launch:"Lancer {name}",autoLaunch:"{name} a acheté avec succès, redirection vers la page de lancement..."},tooltip:{upgradeServer:"Blocklet a besoin du Blocklet Server version {version}, le Blocklet Server version actuel est {serverVersion}"}},setting:{saveSuccess:"Paramètres enregistrés avec succès",unSavedTip:'Il y a des modifications non enregistrées, veuillez cliquer sur "Enregistrer les modifications" pour les sauvegarder.',unSavedLeaveTip:"Il y a des modifications non enregistrées, êtes-vous sûr de vouloir quitter la page?",form:{name:"Nom de votre serveur",nameRequired:"La description du serveur est requise",namePlaceholder:"Nom du serveur",description:"Décrivez votre serveur",descriptionHolder:"Description du serveur",descriptionRequired:"Une description de serveur est requise",domain:"Votre nom de domaine du serveur",domainPlaceholder:"Nom de domaine du serveur",domainRequired:"Le domaine du serveur est requis",ipPlaceholder:"IP",ipRequired:"L'adresse IP est requise",registry:"Blocklet Store",registryPlaceholder:"Magasin de Blocklets pour récupérer des Blocklets",registryRequired:"Le Blocklet Store est requis",registerUrl:"URL du lanceur Blocklet",registerUrlPlaceholder:"Entrez l'URL de votre lanceur Blocklet préféré, vous pouvez utiliser celui officiel en toute sécurité.",webWalletUrl:"URL du portefeuille DID",webWalletUrlPlaceholder:"Veuillez entrer l'URL de votre « DID Wallet » hébergé, vous pouvez utiliser en toute sécurité celui officiel",nftDomainUrl:"URL de domaine NFT",nftDomainUrlPlaceholder:"Veuillez saisir l'URL de votre domaine NFT hébergé, vous pouvez utiliser celui officiel en toute sécurité",enableWelcomePage:"Activer la page de bienvenue",welcome:{switchLabel:"Page d'accueil"},upgrade:{title:"Mettez à jour le serveur Blocklet vers {version}",description:"Pendant la mise à niveau, votre serveur Blocklet entrera en mode maintenance pendant quelques minutes le temps de la mise à jour.",dialog:"Cliquez sur 'Confirmer' pour installer la mise à jour. Le serveur Blocklet entrera en mode de maintenance jusqu'à ce que la mise à jour soit terminée et reviendra automatiquement en mode production.",confirm:"Mise à niveau",switchLabel:"Vérification automatique des mises à jour",enableBetaRelease:"Activer la version bêta",setup:"Préparation de la mise à niveau",installing:"Installation de Blocklet Server v{version}",restarting:"Redémarrage du serveur Blocklet",cleanup:"Migration des données du serveur Blocklet",verifying:"Vérification du serveur Blocklet v{version}",rollback:"Serveur de blocs de retour en arrière",complete:"Mise à niveau terminée !",progress:"Mise à niveau de {name}",check:"Vérifier les mises à jour",latest:"Vous utilisez la dernière version."},restart:{title:"Redémarrer le serveur Blocklet",description:"Pendant le redémarrage, votre serveur Blocklet passera en mode maintenance jusqu'à ce que le redémarrage soit terminé.",dialog:`Cliquez sur "Confirmer" pour redémarrer. Le serveur Blocklet passera en mode de maintenance jusqu'à ce que le redémarrage soit terminé et reviendra automatiquement en mode de production.`,confirm:"Redémarrer",setup:"Préparation du redémarrage",verifying:"Vérification du serveur Blocklet",restarting:"Redémarrage du serveur Blocklet",cleanup:"Assurez-vous que tout va bien",rollback:"Nettoyez l'état sale",complete:"Maintenance complète!",progress:"Redémarrage de {name}"},register:{title:"Inscrivez-vous à Blocklet Launcher",description:"Une fois ajouté, vous pouvez lancer des blocklets vers ce serveur de blocklets depuis {url}.",button:"S'inscrire"},monitor:{diskThreshold:"Envoyer une alerte lorsque l'utilisation du disque dépasse (%)",diskThresholdPlaceholder:"Veuillez définir le seuil d'alerte d'utilisation du disque"},security:{switchLabel:"Isolation du système de fichiers",switchTips:"Après avoir désactivé cette option, le système de fichiers du Blocklet ne sera plus isolé, ce qui pourrait présenter un risque de dommages causés par un logiciel malveillant au système de fichiers.",warningTips:"La fonction d'isolation du système de fichiers ne peut pas prendre effet. Veuillez mettre à niveau la version de node.js (la version actuelle est {version}) vers la version 21.6.0 ou supérieure."},docker:{switchLabel:"Exécuter des blocs dans des conteneurs",switchTips:"Après avoir activé cette option, les blocs seront exécutés à l'aide de conteneurs, ce qui peut améliorer la sécurité globale du serveur.",notInstalled:"Impossible d'activer l'exécution du conteneur car Docker n'est pas installé ou manque des autorisations nécessaires pour s'exécuter",needCloseFileSystemIsolation:"L'isolation du système de fichiers et le mode d'exécution du conteneur docker ne peuvent pas être activés en même temps"},dockerNetwork:{switchLabel:"Isolement du réseau de conteneurs",switchTips:"Après avoir activé cette option, les blocklets fonctionnent de manière plus sûre : un blocklet ne peut pas accéder au serveur de blocklets ou à d'autres blocklets dans d'autres applications.",needEnableDocker:"Le mode conteneur doit être activé pour activer l'isolation du réseau"},restartAllContainers:{title:"Redémarrer tous les conteneurs",description:"Redémarrer tous les conteneurs et garder les blocklets en marche.",dialog:`Cliquez sur "Confirmer" pour redémarrer tous les Blocklets conteneurs et maintenir l'état des Blocklets en cours d'exécution.`,confirm:"Redémarrer",setup:"Préparation du redémarrage",verifying:"Vérification du serveur Blocklet",restarting:"Redémarrage de tous les conteneurs en arrière-plan",cleanup:"Assurez-vous que tout est OK",rollback:"Nettoyer l'état sale",complete:"Conservez l'intégralité !",progress:"Redémarrage de tous les conteneurs en arrière-plan"},restartAllBlocklet:{title:"Redémarrer tous les Blocklets",description:"Redémarrer tous les Blocklets en cours d'exécution ou en erreur sur ce serveur",dialog:'Cliquez sur "confirmer" pour redémarrer tous les blocklets en arrière-plan.',confirm:"Redémarrer",setup:"Préparation du redémarrage",verifying:"Vérification du serveur Blocklet",restarting:"Redémarrage de tous les Blocklets en cours ou en erreur en arrière-plan",cleanup:"Assurez-vous que tout est OK",rollback:"Nettoyer l'état sale",complete:"Maintenance terminée !",progress:"Redémarrage de tous les Blocklets en cours d'exécution ou en erreur en arrière-plan"},enableSessionHardening:{switchLabel:"Activer le renforcement de session",switchTips:"Après avoir activé cette option, les opérations de mutation nécessiteront une vérification stricte, ce qui peut améliorer la sécurité globale du serveur."}},accessKey:{accessKeyId:"ID de clé d'accès",lastUsed:"Dernière utilisation à",tip:"Veuillez entrer un nom pour cette clé d'accès",saveSecretTip:"C'est la seule fois où votre clé secrète d'accès peut être consultée et ne peut pas être récupérée. Cependant, vous pouvez créer de nouvelles clés d'accès à tout moment.",iKnow:"J'ai copié et enregistré le secret d'accès",showSecret:"Afficher la clé d'accès secrète",hideSecret:"Cacher le secret",title:"Supprimer la clé d'accès",descriptionNoTime:"Cela supprimera définitivement la clé d'accès {key} avec le nom {name}, qui (n'a jamais été utilisée auparavant)",description:"Cela supprimera définitivement la clé d'accès {key} avec le nom {name}, qui a été utilisée pour la dernière fois le {time}, {timeAge}).",confirm_desc:"Veuillez entrer {name} pour supprimer",remark:"Nom de clé d'accès",remarkInvalid:"Le nom de la clé d'accès est requis",passport:"Sélectionnez un passeport pour la clé d'accès afin d'accorder ou de limiter les permissions",expireTime:"Définissez une date d'expiration pour la clé d'accès pour une meilleure sécurité",authType:"Type d'authentification",resourceType:"Type de ressource",resourceId:"ID de ressource",component:"Composant",expired:"{time} expiré",accessKeySecret:"Secret de clé d'accès",simple:"Simple",signature:"Signature",signatureDesc:"Norme de sécurité de niveau entreprise utilisant la cryptographie. Nécessite l'intégration de code avec le SDK (@blocklet/server-js), idéal pour les scénarios avec des exigences de sécurité élevées et la transmission de données critiques",simpleDesc:"Mécanisme de jeton Bearer léger, similaire à une clé OpenAPI, prend en charge les appels d'API RESTful et l'intégration de services tiers. Aucune programmation requise, intégration rapide via l'en-tête HTTP, parfait pour le développement rapide",viewSecret:"Vous pourrez accéder à la clé secrète ultérieurement dans la page de détails de la clé d'accès.",usage:"Utilisation",listTitle:"Gérez l'accès API sécurisé avec des clés d'accès",tooltipTitle:"Générez et gérez des identifiants permettant aux systèmes de confiance d'interagir programmatiquement avec votre application. Les clés d'accès permettent une automatisation sécurisée et une intégration transparente entre vos outils et services."},webhook:{add:"Ajouter une intégration",delTitle:"Supprimer l'intégration",requiredError:"Veuillez fournir un {type} valide",confirm_desc:"Veuillez entrer {name} pour supprimer",test:"Test",description:"Cela supprimera définitivement l'intégration avec l'ID {id}.",columns:{description:"ID",params:"Paramètres",createdAt:"Créé le"},testSuccess:"Message de test envoyé avec succès",duplicateError:"L'URL existe déjà",updateSuccess:"Statut mis à jour avec succès"},dns:{step1Title:"Connectez-vous à votre bureau d'enregistrement de domaine",step1Desc1:"Connectez-vous à votre bureau d'enregistrement de domaine, trouvez la page de gestion de domaine et la page des paramètres du serveur de noms. Vous pouvez rechercher votre bureau d'enregistrement de domaine à",step2Title:"2. Trouver les paramètres DNS pour {url}",step2Desc:`Cela peut s'appeler "Gestion DNS", "Paramètres avancés", ou similaire.`,step3Title:"3. Ajoutez les enregistrements DNS suivants",step3Desc:'Le nom peut être appelé "host", "hostname" ou "alias"'},domain:{addingDomain:"Ajout du domaine...",checkingResolvable:"Vérification de l'état du domaine...",cannotResolve:"{domain} ne peut pas être résolu, veuillez vérifier votre configuration DNS",resolvedAddressError:"{domain} n'est pas correctement configuré avec un enregistrement CNAME pointant vers {curDomain}",invalidDNSReminder:"{error}. Cependant, vous pouvez continuer à ajouter le domaine, mais la génération automatique de certificats n'est pas disponible.",continueAdd:"Continuer l'ajout",conflictTitle:"{domain} est déjà utilisé",conflictDescription:'{domain} est déjà utilisé par "{title}". En cliquant sur confirmer, le domaine sera supprimé de "{from}" et ajouté à "{to}".'},aigne:{modelAdapter:"Fournisseur de modèle",modelName:"Nom du modèle",desc:{modelAdapter:"La plateforme qui fournit un service de modèle AI",modelName:"La version spécifique du modèle ou le nom du modèle",key:"La clé API {provider} utilisée pour l'authentification",baseUrl:"Entrez l’URL de votre instance AIGNE Hub (par ex. https://hub.aigne.io). Utilisez la vôtre si vous auto-hébergez.",accessKeyId:"L'ID clé unique pour accéder au modèle",secretAccessKey:"La clé secrète associée à l’Access Key ID",docLink:"Voir la documentation officielle pour plus de détails et la référence API"},failed:"Échec de l’enregistrement de la configuration AIGNE",authorizeAigneHub:"Se connecter à {name}",baseUrl:"URL du Hub AIGNE",disconnect:"Déconnecter",disconnectConfirm:"Êtes-vous sûr de vouloir vous déconnecter de AIGNE Hub ? Cela supprimera la configuration IA actuelle.",disconnectSuccess:"Déconnecté avec succès de AIGNE Hub",disconnectFailed:"Échec de la déconnexion de AIGNE Hub",testConnection:"Tester la connexion {provider}",invalidUrl:"L'URL de {provider} est invalide",description:"La configuration actuelle prendra effet lorsque {name} sera en cours d'exécution. Il faut enregistrer et redémarrer le Blocklet pour que cela prenne effet.",revokeUrlAuthTitle:"Confirmer le changement de {url} ?",revokeUrlAuth:"Êtes-vous sûr de vouloir modifier le {url} ? Après modification, votre autorisation sera invalide et devra être réautorisée !",testSuccess:"Connecté avec succès à AIGNE Hub",check:"Vérifier",apiKeyNotAuthorized:"La clé API n'est pas autorisée. Veuillez cliquer sur le bouton Connect to AIGNE Hub pour l'autoriser",switchUser:"Changer d'utilisateur",connectTimeOut:"Connexion à {provider} expirée, veuillez réessayer plus tard",restart:{title:"Redémarrer Blocklet",connectedContent:"Votre Blocklet est actuellement connecté à {provider}. La configuration prendra effet après le redémarrage. Voulez-vous redémarrer maintenant ?",notConnectedContent:"Votre Blocklet est actuellement déconnecté de {provider}. La configuration prendra effet après le redémarrage. Voulez-vous redémarrer maintenant ?",confirm:"Redémarrer maintenant",cancel:"Redémarrer plus tard"},testFailed:"Impossible de se connecter au AIGNE Hub. Veuillez vérifier l'URL ou votre réseau.",addCredits:"Acheter des crédits",transaction:"Transactions",connected:"Connecté avec succès",account:"Informations du compte",pendingCredit:"Frais exceptionnels",infinite:"Illimité",config:"Config AIGNE Hub"}},notification:{title:"Notifications",history:"Historique",channelSettings:"Paramètres du canal",empty:"Aucune activité pour le moment",viewAll:"Tout afficher",showRead:"Afficher Lecture",markAllAsRead:"Tout marquer comme lu",markAsRead:"Marquer comme lu",proceed:"Procéder",checkingForUpdates:"Recherche des mises à jour...",email:{enable:"Activer les notifications",from:"Expéditeur d'e-mail",host:"Hôte du serveur SMTP",port:"Port du serveur SMTP",user:"Nom d'utilisateur SMTP",secure:"Connexion sécurisée",password:"Mot de passe SMTP",fromRequired:"L'expéditeur du courrier électronique est obligatoire",fromInvalid:"L'expéditeur de l'email est invalide",receiverRequired:"Le destinataire de l'e-mail est requis",receiverInvalid:"Le destinataire de l'e-mail est invalide",hostRequired:"L'hôte du serveur SMTP est requis",hostInvalid:"L'hôte du serveur SMTP est invalide",portRequired:"Le port du serveur SMTP est requis",portInvalid:"Le port du serveur SMTP est invalide, le port doit être compris entre 1 et 65535.",userRequired:"Le nom d'utilisateur du serveur SMTP est requis",passwordRequired:"Mot de passe utilisateur du serveur SMTP requis",testSuccess:"Envoi de l'e-mail de test réussi",testFailed:"Échec de l'envoi du courrier de test",testReceiver:"Destinataire de l'email",testSendEmail:"Envoyer un e-mail de test",inputTestReceiver:"Veuillez saisir l'adresse e-mail du destinataire du test",disable:"Se désabonner des notifications par email",disableDescription:"Après la désinscription, vous ne recevrez plus de notifications par e-mail. Pour recevoir à nouveau les notifications par e-mail, vous pouvez vous y réabonner sur cette page.",unsubscribe:"Se désabonner de la notification par e-mail",unsubscribeDescription:"Après désabonnement, vous ne recevrez plus aucune notification par email.",subscribe:"S'abonner",subscribeDescription:"Pour recevoir des notifications par e-mail, vous pouvez vous y abonner à nouveau sur la page des paramètres.",companyName:"Nom de la société",companyLink:"Lien de la société",companyAddress:"Adresse de la société",supportEmail:"Email de support",emailInvalid:"Adresse e-mail invalide",linkInvalid:"Lien invalide, doit commencer par http ou https",signature:"Signature",signatureTooltip:"La signature électronique est utilisée en bas pour fournir au destinataire des informations clés sur l'expéditeur."},wallet:{description:"Les notifications de portefeuille DID sont toujours activées pour tous les utilisateurs."},webhooks:{description:"Les notifications envoyées via webhooks sont toujours activées pour tous les utilisateurs."},comingSoon:"Plus de canaux de notification sont en cours de construction",unsubscribe:"Se désabonner",unsubscribeSucceed:"Désinscription réussie",unsubscribeFailed:"Échec de désinscription",unsubscribeTokenRequired:"Jeton de désabonnement requis",unsubscribeTokenExpired:"Le jeton de désabonnement a expiré",unsubscribeTokenInvalid:"Le jeton de désabonnement est invalide",installComponentError:"Composant désinstallé {name} non trouvé",installingComponent:"Installation du composant {name}",pushKit:{enable:"Activer les notifications",endpoint:"Point d'extrémité PushKit",endpointInvalid:"Le point de terminaison PushKit est une URL non valide",testSuccess:"Le test d'envoi du PushKit a réussi",testFailed:"Test PushKit envoyer a échoué",testReceiver:"Récepteur PushKit",testSend:"Tester l'envoi du kit push",inputTestReceiver:"Veuillez saisir le destinataire du test",receiverRequired:"Récepteur PushKit requis",pushPath:"Chemin API pour push-kit (par défaut /api/push)",did:"PushKit Blocklet DID",customOptions:"Options personnalisées"},notificationDetails:"Détails de la notification",receiver:"Destinataire",sendStatus:{success:"Envoyé",failed:"Échoué",sentTime:"Heure d'envoi: {date}",pending:"En attente",reason:{enabled:"L'utilisateur a activé la notification {channel}",disabled:"L'utilisateur n'a pas activé la notification {channel}",unavailable:"Le Blocklet actuel n'a pas configuré la notification {channel}",available:"Le Blocklet actuel a configuré la notification {channel}",notSent:"Le message actuel n'a pas été envoyé à {channel}",offline:"Utilisateur est hors ligne"},count:"{count}",total:"Total"},filter:"Filtre",notificationPreview:"Aperçu de notification",resend:"Renvoyer",resendLimit:"Vous pouvez renvoyer une notification jusqu'à trois fois par jour.",from:"De",to:"À",body:"Corps",notificationTitle:"Titre",createdAt:"Créé le",status:"Statut",system:"Système",severity:"Gravité",config:"Configurations",selectChannels:"Sélectionner les canaux",selectChannelsTip:"Sélectionner les canaux à renvoyer",resendFailedOnly:"Renvoyer uniquement aux canaux ayant échoué",statistics:"Statistiques",allSender:"Tous les expéditeurs",allSeverity:"Toutes les sévérités",severityType:{info:"Info",success:"Succès",warning:"Avertissement",error:"Erreur"},clear:"Effacer",allDone:"Terminé",filterType:{all:"Tous",unread:"Non lu"},viewMore:"Voir plus"},router:{routerSetting:"Domaines et URLs",certSetting:"Certificats SSL",defaultSite:"Par défaut",urlHelperText:"Les URL qui ne commencent pas par HTTP/HTTPS sont considérées comme des chemins relatifs",empty:"Cliquez sur Actions pour configurer la mise en correspondance des URL",healthy:{ok:"Le blocklet ou le service fonctionne",error:"Le bloc ou le service ne fonctionne pas ou n'est pas installé"},service:{select:"Sélectionnez les services Blocklet (facultatif)",what:"Les services Blocklet sont des pipelines exécutés avant de rediriger vers le Blocklet amont."},nonProvider:{title:"Avertissement de changement de moteur",description:"Si vous changez de moteur pour aucun, votre page actuelle risque de ne pas fonctionner correctement car le moteur précédent sera arrêté. Êtes-vous sûr de vouloir continuer?",confirm:"Je comprends, continuez"},validation:{urlRequired:"L'URL est requise",redirectCodeRequired:"Le code de redirection est requis",didRequired:"Blocklet est requis",pathPrefixTooLong:"Le préfixe d'URL ne peut pas dépasser {length} caractères",pathPrefixCannotBeEmpty:"Le préfixe d'URL ne peut pas être vide",domainRequired:"Le domaine du serveur est requis",invalidUrl:"Veuillez fournir une URL valide",pathPrefixRequired:"Le préfixe d'URL est requis",redirectUrlRequired:"L'URL de redirection est requise",rewriteUrlRequired:"La réécriture de l'URL est requise"},domain:{addSite:"Ajouter un site",validate:{emptyTip:"Le domaine du site ne peut pas être vide",suffixTip:"Le domaine du site ne peut pas inclure {suffix}"},add:{title:"Ajouter un nom de domaine",description:"Veuillez fournir un nom de domaine valide",confirm:"Ajouter",cancel:"Annuler",blocklet:"Sélectionner Blocklet",redirect:"Où rediriger le trafic ?",port:"Sur quel port votre gestionnaire de requêtes doit-il écouter ?",portTip:"Ceci est la valeur par défaut du port principal du gestionnaire de requêtes. Vous pouvez personnaliser cela",type:"Gestionnaire de trafic",component:"Sélectionner le composant",pageGroup:"Groupe de page",pageGroupTip:"Ce composant peut afficher n'importe quel groupe de pages répertoriées ci-dessus, laissez vide pour afficher toutes les pages"},update:{title:"Mise à jour du domaine du site",label:"Domaine du site",description:"Veuillez fournir un domaine de site valide"},setup:{tipStart:"Ajoutez les enregistrements DNS pour le domaine",tipEnd:"Selon les directives suivantes",recordType:"Type d'enregistrement",recordValue:"Valeur d'enregistrement"},verify:{ok:"La résolution de domaine est normale",notResolved:"Ce domaine n'est ni résolu ni accessible, veuillez vérifier votre configuration DNS."},https:{ok:"Ce domaine a HTTPS activé",bad:"Ce domaine n'a pas activé https"},delete:{title:"Supprimer le site",description:'En confirmant, vous supprimerez votre site existant "{name}". Tapez "{name}" ci-dessous et sélectionnez Supprimer pour effectuer le changement, ou sélectionnez Annuler si vous souhaitez conserver votre site.',confirm_desc:"Veuillez entrer {name} pour confirmer"}},domainAlias:{nftDomain:"Configuration automatique avec noms DID",showTipHint:"Comment configurer la résolution des noms de domaine ?",add:{title:"Ajouter un domaine supplémentaire",domainDescription:"Veuillez fournir un nom de domaine valide",forceTip:"Forcer l'ajout si le nom de domaine existe déjà",helperText:"Si une URL HTTP ou HTTPS est saisie, elle sera automatiquement convertie en un nom de domaine.",isDidDomainError:"Ce domaine est un domaine DID. Veuillez l'ajouter en utilisant la méthode de configuration automatique du domaine.",tips:"Vous pouvez saisir un nom de domaine acheté auprès de DID Names ou de tout autre fournisseur. S'il s'agit d'un domaine DID, vous devez présenter le NFT de domaine DID pour continuer."},addCustomDomain:{name:"Domaine personnalisé"},addDomainNFT:{showNFT:"Configurer le domaine automatiquement",tips:"Vous pouvez saisir un domaine acheté auprès de DID Names. Si un domaine DID est détecté, vous devez présenter le NFT du domaine DID pour continuer.",connect:{scan:"Utilisez l'une des méthodes suivantes pour connecter {domain} à {appName}",confirm:"Confirmez dans votre compte",success:"Autorisation réussie",title:"Connecter les noms DID à {appName}"},buyTip:"Les noms DID effectueront la résolution de nom de domaine automatiquement, pas besoin de configurer manuellement, et le Blocklet mettra à jour l'enregistrement de résolution du nom de domaine automatiquement si nécessaire. Si vous n'avez pas encore de DID Domain NFT,",buy:"Acheter un domaine DID",topLevelDidDomainHint:"Pour les domaines DID, si vous saisissez un domaine de premier niveau (par ex. example.com), il sera automatiquement configuré en www.example.com.",authorizeFailed:"Échec de la récupération des informations NFT du domaine, veuillez réessayer !"},delete:{title:"Supprimer",description:`Après la suppression de "{domain}", l'accès à cet alias peut ne pas être correctement géré.`,confirmPlaceholder:'Veuillez saisir "{domain}" pour supprimer'},custom:"Domaine personnalisé",noCustom:"Pas de domaine personnalisé",noCustomTip:"Aucun domaine personnalisé n'est configuré avec votre site web. Pour une sécurité accrue et une meilleure expérience utilisateur, nous vous recommandons de configurer votre propre domaine personnalisé. Cliquez ci-dessous pour commencer."},domainSecurity:{title:"Sécurité de domaine",cors:{title:"Domaines CORS autorisés",description:`Liste de domaines pouvant envoyer des requêtes cross-origin à {name}, séparés par des virgules. Utilisez "*" pour autoriser n'importe qui, ce qui n'est pas recommandé.`,domainInvalid:"Veuillez entrer une liste valide de noms de domaine"}},rule:{add:{title:"Ajouter une correspondance d'URL",confirm:"Ajouter",pathPrefix:"Quel est le préfixe de l'URL ?",pathPrefixTip:"Si vous définissez le préfixe sur '/mon-préfixe', alors toutes les demandes commençant par ce préfixe seront routées vers le blocklet configuré",blocklet:"Quel Blocklet gérera ces demandes ?",port:"Quel port du blocklet gérera les requêtes ?",portTip:"Par défaut, cela correspond au port principal du blocklet. Si votre blocklet écoute sur plusieurs ports, vous pouvez personnaliser cela.",responseType:"Type de réponse",responseBody:"Contenu de la réponse",responseBodyTip:"Veuillez coller votre contenu de réponse ici, ne doit pas dépasser 4096 caractères.",responseBodyRequired:"Le contenu de la réponse ne peut pas être vide"},delete:{title:"Supprimer la correspondance d'URL",description:`En confirmant, vous supprimerez votre correspondance d'URL existante pour "{name}". Tapez "{name}" ci-dessous et sélectionnez Supprimer pour effectuer le changement, ou sélectionnez Annuler si vous souhaitez conserver votre correspondance d'URL.`,confirm_desc:"Veuillez entrer {name} pour supprimer",cancel:"Annuler"},update:{title:"Mise à jour du mappage URL",confirm:"Oui, Mettre à jour",cancel:"Annuler"}},cert:{name:"Nom du certificat",domain:"Nom de domaine",action:"Action",commonName:"Nom commun",boundDomains:"Domaines",source:"Source",expired:"Expiré",leftDays:"jours restants",issuedOn:"Délivré le",expiryOn:"Date d'expiration le",fingerprintAlg:"Algorithme d'empreinte digitale",validityPeriod:"Période de validité",matchedSites:"Sites correspondants",upload:"Téléchargement manuel",publicCertHelperText:"Les certificats publics peuvent être téléchargés",nonPublicCertHelperText:"Les certificats non-publics ne peuvent pas être téléchargés",protectedCertHelperText:"Les certificats protégés ne peuvent pas être modifiés",unprotectedCertHelperText:"Les certificats non protégés peuvent être modifiés",issuing:"Certificat en cours de génération",sourceTypes:{upload:"Téléchargement manuel",lets_encrypt:"Chiffrons"},table:{nodata:"Pas de données"},delete:{title:"Supprimer certificat",description:"Confirmer la suppression du certificat du domaine {domain} ? Cela peut avoir un impact sur les services associés. Veuillez confirmer que cela est sans risque avant de procéder à la suppression.",confirm:"Confirmer"},nginx:{title:"Mettre à jour le certificat",titleAdd:"Ajouter un certificat",pem:"Fichier de certificat SSL",pemTip:'Veuillez déposer votre fichier de certificat de serveur ici. Il doit se terminer par ".pem" ou ".crt".',key:"Fichier de clé privée",keyTip:'Veuillez déposer votre fichier de clé privée du serveur ici, il doit se terminer par ".pem" ou ".key".',confirm:"Enregistrer",cancel:"Annuler",invalidFile:"Vous avez sélectionné un fichier invalide",empty:"Aucun fichier sélectionné pour le moment",source:"Source",sourceTypes:{upload:"Téléchargement manuel",lets_encrypt:"Chiffrons"}},detail:{title:"Détails du certificat"},genLetsEncryptCert:{title:"Générer un certificat Let's Encrypt",dnsTip:"Veuillez vous assurer que le nom de domaine pointe vers le serveur Blocklet actuel.",description:"L'ajout d'un certificat rendra le service plus sécurisé et Blocklet Server renouvellera automatiquement le certificat avant son expiration."}},gateway:{reqLimit:{switchLabel:"Activer la limitation des requêtes concurrentes pour des performances fiables",rate:"Limitez les requêtes simultanées par IP à {rate} par seconde (limite par IP)",title:"Limitation des demandes",global:"Limitez les requêtes concurrentes traitées par la passerelle à {global} par seconde (limite globale)",burstFactor:"Facteur de burst pour la limitation de débit, appliqué aux limites globales et par IP (global : {global}, par IP : {rate})",methods:"Limiter les requêtes simultanées par IP pour les méthodes suivantes",burstDelay:"Délai lorsque les requêtes explosent et dépassent la limite par IP ({delay} secondes)"},cacheEnabled:{switchLabel:"Activer le cache de la passerelle pour améliorer les performances",title:"Cache de la passerelle"},blockPolicy:{switchLabel:"Blocage de la demande",addItem:"Ajouter un élément",blacklistDesc:"Les demandes provenant de ces adresses IP seront bloquées pour accéder à ce serveur et à tous les Blocklets",inputPlaceholder:"Entrez l'adresse IP, la plage CIDR ou l'URL",invalidItem:"Adresse IP, plage CIDR ou URL non valide",title:"Blocage de la demande",autoBlocking:{switchLabel:"Bloquez les mauvaises demandes par détection en temps réel",windowSize:"La taille de la fenêtre temporelle pour compter les requêtes (secondes)",windowQuota:"Le nombre maximum de requêtes (par IP) autorisé dans la fenêtre",blockDuration:"La durée pour bloquer l'utilisateur par IP lorsque le quota est dépassé dans la fenêtre (secondes)",statusCodes:"Les codes de statut à vérifier"}},proxyPolicy:{switchLabel:"Courir derrière des proxies",trustRecursive:"Faites confiance aux mandataires de manière récursive",trustRecursiveDesc:"Utilisez l'IP la plus à gauche dans la chaîne X-Forwarded-For",trustedProxies:"Proxies de confiance",trustedProxiesDesc:"Les demandes de ces adresses IP seront considérées comme fiables pour obtenir l'IP réelle du client",realIpHeaderLabel:"En-tête IP client",realIpHeaderDesc:"Si le serveur de Blocklet fonctionne derrière des proxies tels que CloudFront, vous pouvez définir ici l'en-tête de l'IP réelle du client.",addItem:"Ajouter un élément",inputPlaceholder:"Entrez l'adresse IP, la plage CIDR",invalidItem:"Adresse IP non valide, plage CIDR",title:"Politique de proxy"},wafPolicy:{switchLabel:"Détectez et bloquez les mauvaises requêtes avec ModSecurity",modeDesc:"Le mode de modsecurity (module modsecurity requis)",mode:{detectOnly:"Détecter seulement (ne bloquera pas les demandes)",on:"Activé (bloquera les demandes)"},logLevelDesc:"Le niveau de journalisation pour ModSecurity (0-9), 0 signifie désactiver le journal d'audit",inboundAnomalyScoreThresholdDesc:"Le seuil de score d'anomalie entrant (1-100), une valeur plus basse signifie plus strict",outboundAnomalyScoreThresholdDesc:"Le seuil du score d'anomalie sortante (1-100), une valeur plus basse signifie plus strict",docDesc:"Consultez la documentation pour savoir comment configurer modsecurity",title:"Pare-feu d'application Web"}}},noMatch:{desc:"Nous ne pouvons pas trouver la page que vous recherchez"},health:{connectionErrorTip:"Le serveur de blocs ne peut pas se connecter au réseau, veuillez vérifier si le serveur de blocs a été arrêté ou s'il y a un problème réseau.",connectionRecoveryTip:"La connectivité du serveur Blocklet a été rétablie",connectionStoppedTip:"Le serveur Blocklet a été arrêté",wrongAccessUrlTip:"L'adresse d'accès au serveur Blocklet est incorrecte, veuillez utiliser l'adresse d'accès correcte."},debug:{title:"Votre serveur Blocklet est en ligne et fonctionne !"},team:{invite:{action:"Inviter Nouveau",setting:"Paramètres d'invitation",enabled:"Désactivez ce paramètre pour restreindre les nouvelles invitations utilisateurs aux propriétaires/administrateurs uniquement",disabled:"Activez ce paramètre pour permettre à tout utilisateur d'inviter de nouveaux utilisateurs",inviter:"Invité par"},add:"Ajouter nouveau",member:{name:"Nom",passport:"Passeport",passports:"Passeports",lastLogin:"Dernière connexion",lastLoginIp:"Dernière adresse IP de connexion",source:"Source d'inscription",source_derived:"Dérivé de OAuth",source_wallet:"Portefeuille DID",filter:"Filtrer par",blockAccess:"Interdire la connexion",blockAccessDescription:"L'utilisateur ne pourra pas se connecter à cette application",allowAccess:"Autoriser la connexion",allowAccessDescription:"L'utilisateur pourra se connecter à cette application",updateRole:"Mettre à jour le rôle",removeUser:"Supprimer l'utilisateur",removeUserDescription:"Confirmer la suppression de l'utilisateur '{name}' ?",revokePassport:"Révoquer le passeport",revokePassportDescription:"Une fois que le passeport est révoqué, le titulaire du passeport ne peut plus l'utiliser pour se connecter, êtes-vous sûr de vouloir continuer?",enablePassport:"Activer le passeport",enablePassportDescription:"Une fois que le passeport révoqué est à nouveau activé, le titulaire du passeport peut l'utiliser pour se connecter à nouveau, êtes-vous sûr de vouloir continuer?",passportPermissionTitle:"Le passeport a les autorisations suivantes:",search:"Rechercher un membre",onlyApprovedMember:"Afficher approuvé uniquement",inviteDialog:{createInviteLink:"Générer un lien d'invitation",createSuccessTip:"Le lien d'invitation a été créé avec succès. Cliquez pour copier et envoyer le lien au membre invité, veuillez noter que ce lien d'invitation ne peut pas être réutilisé et expirera le {expireDate}."},error:{passportEmpty:"Le passeport ne doit pas être vide"},connectedAccounts:"Comptes Connectés",connections:"Connexions",federated:"Fédéré",switch:{did:"Passer à DID",profile:"Changer de profil",passport:"Changer de passeport"},settings:{notification:"Notifications",email:"Envoyez-moi un e-mail lorsque certains événements se produisent",wallet:"Envoyez une notification à mon portefeuille lorsque des événements se produisent",phone:"Envoyez-moi un message texte lorsque certains événements se produisent",webhook:"Points de terminaison en temps réel",add:"Ajouter un nouveau webhook",url:"URL personnalisée",slack:"Webhook Slack",tested:"Message de test envoyé"},activeUserSessions:"Sessions d'utilisateurs actives",forceLogout:"Déconnexion forcée",forceLogoutDescription:"Confirmez-vous la déconnexion forcée de cet utilisateur?",openProfile:"Voir le profil",removeUserSuccess:"Utilisateur supprimé avec succès",forceLogoutRemoveDescription:"Confirmer pour forcer la déconnexion de cet utilisateur (Supprimer également toutes les sessions utilisateur) ?",currentOwner:"Propriétaire actuel"},transferNode:{name:"Transfert de propriété",inviteDialog:{title:"Serveur de blocs de transfert",tips:{progress:"Le serveur doit être accepté par le destinataire pour terminer l'opération de transfert, et une fois que le destinataire l'a accepté, vous ne pouvez plus vous connecter au serveur avec le passeport actuel.",newOwnerPermissions:"Le nouveau propriétaire aura le droit de gérer toutes les opérations telles que les membres, les passeports et les Blocklets.",revoke:`Si vous souhaitez retirer l'invitation de transfert, vous pouvez supprimer le lien d'invitation sur la page "Équipe -> Membres -> Invitation".`},createInviteLink:"Générer le lien d'invitation",createSuccessTip:"Le lien d'invitation a été créé avec succès. Cliquez pour copier et envoyez le lien au membre invité. Veuillez noter que ce lien d'invitation ne peut pas être réutilisé et expirera le {expireDate}."},delegateDialog:{title:"Autorisation requise",scan:"Utilisez les méthodes suivantes pour autoriser le serveur à transférer le NFT de propriété du serveur.",confirm:"Confirmez dans votre compte",success:"Autorisation réussie"}},transferApp:{name:"Transfert de propriété",transferDialog:{title:"Demande de transfert",tips:{progress:"La demande doit être acceptée par le destinataire pour finaliser l'opération de transfert, et une fois que le destinataire l'a acceptée, vous ne pouvez plus vous connecter à l'application avec le passeport actuel.",newOwnerPermissions:"Le nouveau propriétaire aura le droit de gérer toutes les opérations telles que les membres, les passeports et les paramètres."},createTransferLink:"Générer un lien de transfert",createSuccessTip1:`Le lien de transfert est créé avec succès, l'invité doit utiliser <a style="color: rgb(29, 193, 199)" target="_blank" href="https://www.didwallet.io/">DID Wallet</a> pour recevoir la propriété de l'application.`,createSuccessTip2:"Veuillez cliquer pour copier et envoyer le lien au membre invité, veuillez noter que ce lien de transfert ne peut pas être réutilisé et expirera le {expireDate}. Votre lien de transfert ne sera affiché qu'une seule fois et ne sera plus visible après la fermeture de cette boîte de dialogue.",createSuccessTip3:"Après la réussite du transfert, l'application redémarrera automatiquement pour que les modifications prennent effet",link:"Lien de transfert",iKnow:"J'ai copié et enregistré le lien"},connectDialog:{title:"Autorisation requise",scan:"Utilisez les méthodes suivantes pour autoriser l'application à transférer la propriété.",confirm:"Confirmez dans votre compte",success:"Autorisation réussie"},receiveDialog:{title:"Recevoir la propriété de l'application",scan:"Utilisez les méthodes suivantes pour recevoir la propriété de l'application.",confirm:"Confirmer dans votre compte",success:"Réception de la propriété avec succès"},successTitle:"Vous êtes devenu le nouveau propriétaire de cette application",visitDashboard:"Visitez le tableau de bord de l'application",description:"Vous pouvez transférer la propriété de votre application à un autre portefeuille ou à une autre personne."},permission:{create:{title:"Créer une autorisation",description:"Format: <action>_<ressource>"},delete:{title:"Supprimer l'autorisation",description:"Confirmer la suppression de {name} ?"},error:{actionEmpty:"L'action ne peut pas être vide",resourceEmpty:"La ressource ne peut pas être vide",permissionTooLong:"La permission ne peut pas dépasser {length} caractères",descriptionTooLong:"La description ne peut pas dépasser {length} caractères"}},passport:{create:{title:"Créez un passeport",titleTip:"Le titre ne peut pas être modifié après sa création, il est recommandé de le limiter à 14 lettres"},bind:{title:"Autorisation de lier",roleTip:"Vous obtiendrez toutes les autorisations du passeport sélectionné après la liaison.",permissionTip:"Vous recevrez les autorisations sélectionnées après la liaison",transferLeftTitle:"Toutes les autorisations",transferRightTitle:"Permissions accordées"},delete:{title:"Supprimer passeport",description:"Les passeports détenus par l'utilisateur perdent toutes leurs autorisations une fois supprimés. Êtes-vous sûr de vouloir continuer?"},error:{titleEmpty:"Le titre ne peut pas être vide",titleTooLong:"Le titre ne peut pas dépasser {length} caractères",descriptionEmpty:"La description ne peut pas être vide"},issuance:{pending:"En attente",create:{title:"Générer le lien"},delete:{title:"Supprimer le lien de réception",description:"Confirmez la suppression de {link} ?"}},issue:"Émettre un passeport",disableIssuance:"Désactiver l'émission de passeports",enableIssuance:"Activer l'émission de passeport",disableIssuanceTip:'"Émettre un passeport", "Inviter un membre" et autres opérations seront désactivées.',enableIssuanceTip:"Émettre un passeport",trustedPassportIssuers:"Émetteurs de passeports de confiance",trustedIssuers:"Émetteurs de confiance",trustedFactories:"Collections de NFT de confiance",trustedFactoriesTip:"Gérez des collections NFT de confiance qui peuvent être utilisées pour l'échange d'un passeport",searchFactoryAddress:"Rechercher Collection DID",configFactories:"Configurer les collections NFT de confiance",configFactoriesTip:"Permettre aux utilisateurs d'échanger des NFT contre des passeports",factoryAddress:"Adresse de collection NFT",factory404:"Collection NFT introuvable",factoryAddressTip:"L'adresse de collection NFT doit exister sur la chaîne principale d'ArcBlock",role:"Type de passeport",ttl:"Politique d'expiration du passeport",ttlNever:"Jamais expirer",ttlMint:"Depuis l'achat de NFT",ttlExchange:"En raison de l'échange de passeports",ttlNeverTip:"Le passeport sera valide jusqu'à révocation",ttlMintTip:"Le passeport sera valide tant que le NFT est acheté jusqu'à ce que vous spécifiez ttl ou révoquiez",ttlExchangeTip:"Le passeport sera valide à partir du moment où l'utilisateur a échangé avec succès jusqu'à ce que vous ayez spécifié ttl ou révoqué",ttlTip:'"365d" signifie 365 jours, vous pouvez également utiliser "30 jours" ou "24h"',validUntil:"Valable jusqu'au: {date}",externalPassport:"Passeport externe",notTrustedIssuerTip:"Le passeport ne peut pas être utilisé car l'émetteur ne figure pas sur la liste des émetteurs de confiance",issuerDid:"Identifiant de l'émetteur",addNodeToTrustedIssuers:"Ajouter le serveur actuel en tant qu'émetteur de passeports de confiance",revoked:"Révoqué",noPermission:"Pas de permission pour effectuer cette opération",shouldNotDeleteCurrent:"Vous ne pouvez pas révoquer votre passeport actuellement utilisé",mappingRule:"Règle de mappage",defaultRule:"Règle par défaut",search:"Rechercher passeport",searchIssuerDid:"Recherchez l'ID d'émetteur",issueBy:"Problème par {name}",configColor:"Configurer la couleur du passeport",configColorTip:"Personnalisez la couleur du passeport",color:"Couleur du passeport",description:"Utilisez ce passeport pour connecter {teamName} en tant que {title}",displayBuiltin:"Builtin",displayCustom:"Personnalisé",typesTip:"Personnaliser les types de passeport, séparés par des virgules",issuanceDate:"Date de délivrance : {date}",sourceMaps:{recover:"Récupéré",issue:"Émis",invite:"Invité",trusted:"Fiable"},related:"Passeports associés",operationLogs:"Logs d'opération",owner:"Propriétaire",status:"Statut",statusMap:{valid:"Valide",revoked:"Révoqué",expired:"Expiré"},view:"Gérer les passeports",trustedPassportIssuersTip:"Gérez les émetteurs de passeports de confiance pouvant être utilisés pour délivrer des passeports",issuanceTime:"Date d'émission",relatedDescription:"Le passeport actuel est dérivé du passeport suivant",passportExpireTime:"Définir une date d'expiration pour le Passport",customExpireTime:"Durée d'expiration personnalisée",customExpireTimeIsInvalid:"Le délai d'expiration personnalisé n'est pas valide"},inviting:{link:"Lien d'invitation",inviter:"Inviter",delete:{title:"Supprimer le lien d'invitation",description:"Confirmer la suppression de {link}?"},disabledTip:"L'invitation n'est pas activée"},whoCanAccess:{all:{title:"Accessible à tous"},owner:{title:"Propriétaire uniquement"},invited:{title:"Utilisateur invité seulement"}},userFollowers:{follow:"Suivre",unfollow:"Ne plus suivre",followersOnly:"Visible uniquement par les abonnés",followers:"Abonnés",following:"Suivant",emptyFollowing:"Vous ne suivez encore aucun utilisateur.",emptyFollowers:"Pas encore de followers",title:"Suivre",invitees:"Invités",emptyInvitees:"Vous n'avez invité personne pour le moment."},orgs:{explain:"Permet aux utilisateurs de créer et de rejoindre des organisations, d'attribuer des rôles et de gérer des ressources.",description:"Description",deleteConfirm:"Confirmer la suppression de {name} ?",members:"Membres",myCreated:"Mes Créations",myJoined:"Mes Adhésions",myCreatedEmpty:"Vous n'avez pas encore créé d'organisations.",myJoinedEmpty:"Vous n'avez rejoint aucune organisation pour le moment.",deleteConfirmDescription:"La suppression de cette organisation supprimera tous les rôles et ressources qui y sont liés. Les utilisateurs resteront dans le système mais perdront leurs rôles dans cette organisation. Cette action est irréversible.",active:"Actif",deleteOrg:"Supprimer l'organisation actuelle",invitedAt:"Invité à : {time}",joinedAt:"Rejoint le : {time}",createNew:"Créer une nouvelle organisation",viewAll:"Voir toutes les organisations",validate:{nameEmpty:"Le nom ne peut pas être vide",nameTooLong:"Le nom ne peut pas dépasser {length} caractères",descriptionTooLong:"La description ne peut pas dépasser {length} caractères"},mutate:{title:"{mode} Organisation",name:"Nom de l'organisation",createSuccess:"Organisation créée avec succès",updateSuccess:"Organisation mise à jour avec succès",orgNotEnabled:"L'organisation n'est pas activée",maxMemberPerOrg:"L'organisation peut inviter jusqu'à {maxMemberPerOrg} membres.",maxOrgPerUser:"Vous pouvez créer jusqu'à {maxOrgPerUser} organisations"},invite:{chooseUsersToInvite:"Choisir les utilisateurs à inviter",success:"Invitation envoyée aux utilisateurs",pleaseSelectUsers:"Veuillez sélectionner des utilisateurs",pleaseSelectRole:"Veuillez sélectionner un rôle",inviteExternalUsers:"Inviter des utilisateurs externes",failed:"Invitation de {count} utilisateurs échouée, veuillez réessayer plus tard",remove:"Supprimer l'utilisateur",removeSuccess:"Utilisateur supprimé avec succès",limit:"Limite",limitTip:"Limiter les membres de l'organisation et les organisations par utilisateur.",maxMembers:"Membres max par organisation",maxOrgs:"Max orgs par utilisateur",maxMembersTip:"Le nombre maximal d'utilisateurs pouvant être invités pour cette organisation",inviteLinkSendToEmail:"Le lien d'invitation a été envoyé à l'e-mail ({email}), veuillez vérifier",enterEmailAddress:"Veuillez saisir l'adresse e-mail",inviteTitle:"Inviter des utilisateurs à rejoindre {orgName}"},member:{removeMemberConfirm:"Confirmer la suppression de {name}?",removeMemberConfirmDescription:"Après suppression, l'utilisateur perdra les rôles et les permissions dans l'organisation. Cette action est irréversible.",removeInvitingMember:"Confirmer ou annuler l'invitation de {name} ?",removeInvitingMemberDescription:"Après suppression, l'utilisateur ne pourra pas rejoindre l'organisation et doit être réinvité. Cette action est irréversible."}}},launcher:{provider:"Fournisseur",adminUrl:"URL"},session:{blockAccess:"Vous avez été bloqué d'accéder à ce serveur"},launchBlocklet:{appInfo:"Informations sur l'application",appInfoDesc:"Confirmez les informations de demande",author:"Auteur de l'application : {author}",setup:"Configuration Blocklet",redirect:"Rediriger",alreadyRunning:"L'application {name} est déjà en cours d'exécution sur ce serveur de blocs",alreadyInstalled:"L'application {name} est déjà installée sur ce serveur Blocklet.",alreadyExists:"Cette application existe déjà, redirection en cours...",purchased:"Déjà acheté",purchase:"Achat",nextStep:"Étape suivante",agreement:"Contrat de licence",agreeAll:"Accepter et continuer",installing:"Installation de {appName} sur {serverName}, cela peut prendre quelques minutes pour terminer, veuillez rester à l'écoute...",redirecting:"{appName} est installé avec succès, démarrage en cours...",start:"Lancement",launch:"Installer Blocklet sur le serveur",launchSuccess:"{appName} a été lancé avec succès !",installSuccess:"Blocklet est installé et lancé avec succès sur {serverName}",openInRegistry:"Voir dans le Blocklet Store",subTitle:"Prêt à installer le Blocklet {appName} sur {serverName}",installingSubTitle:"Installation de {appName}",access:"Ouvrez l'application",viewApplication:"Voir la candidature",newVersion:"Nouvelle version",newVersionDesc:"L'application existe déjà, mais la version actuelle peut être mise à niveau",upgradeNow:"Mise à niveau maintenant",later:"Plus tard",introduction:"Introduction",welcome:"Bienvenue dans l'assistant de lancement de Blocklet",accept:"J'accepte les conditions de l'accord de licence Blocklet",license:"Licence d'application",next:"Acceptez l'EULA et continuez",purchaseApp:"Acheter Blocklet",setupAppDesc:"Initialisez votre Blocklet",launched:"Complet",confirmInstall:"Confirmer l'installation",dialog:{title:"Devenez propriétaire d'application",nftFreeDescription:"Veuillez présenter l'espace d'application NFT et créer un compte d'application pour continuer.",nftPaidDescription:"Veuillez présenter l'espace d'application NFT et l'achat d'application NFT pour continuer",freeDescription:"Veuillez créer un compte d'application pour continuer",paidDescription:"Veuillez présenter l'achat NFT de l'application et créer un compte d'application pour continuer.",confirm:"Confirmez dans votre compte",success:"Autorisation réussie",authorizationTimeout:"Délai d'autorisation"},waiting:{verifying:"Vérification des métadonnées de l'application ...",downloading:"Téléchargement du bundle d'application en cours...",downloadingComponent:"Téléchargement de {name}",extractingComponent:"Extraction de {name}",extracting:"Extraction du bundle d'application...",installing:"Installation des composants de l'application...",installed:"Installé",starting:"Démarrage de l'application...",done:"Votre application se lance...",parsing:"Analyse des métadonnées de l'application...",initializing:"Initialisation de la configuration de l'application...",initializingOwner:"Initialisation du propriétaire de l'application...",creatingSecurityRules:"Création des règles de sécurité par défaut...",assigningDomain:"Attribution du domaine par défaut...",waitingForDomain:"Attente de la prise d'effet du domaine par défaut..."},error:{loadMetaFailed:"Échec du chargement des informations de l'application",appMetaNotFound:"Aucune information trouvée pour cette application",downloadFailed:"Échec du téléchargement de l'application, veuillez réessayer.",installFailed:"Échec de l'installation de l'application, veuillez réessayer",startFailed:"Échec du démarrage de l'application, veuillez réessayer",launchFailed:"Échec du lancement de l'application, veuillez réessayer",installedButStopped:"L'application a été installée avec succès, mais ne peut pas être démarrée. Vous pouvez la démarrer manuellement après avoir résolu les problèmes de blocage.",installedButError:"L'application est installée avec succès, mais n'a pas réussi à démarrer",restoreFailed:"Échec de la restauration de l'application, veuillez réessayer",resourceBlocklet:"Ce blocklet ne peut pas être lancé directement. Cependant, vous pouvez l'ajouter à une application existante."},steps:{introduction:"Introduction",installApp:"Installer l'application",purchaseSpace:"Acheter de l'espace",prepareSpace:"Préparez l'espace"},installRelatedComponents:"Installer les Blocklets liés",canNotInstall:"Ne peut pas installer",dockerBlockletCantInstall:"Impossible d'installer le Blocklet, car le serveur Blocklet n'a pas activé Docker ou le réseau Docker",nav:{myApps:"Mes apps",viewMyApps:"Voir mes applications"},withoutWallet:"Ignorer la connexion du portefeuille DID",nwFailed:"Échec de la récupération du workflow.",alreadyConsumed:"La session de lancement a été consommée",redirectToLauncherBlocklet:"Redirection vers Launcher Blocklet"},issuePassport:{title:"Recevoir le passeport",description:"Utilisez les méthodes suivantes pour recevoir le passeport délivré par {name}",dialog:{scan:"Utilisez les méthodes suivantes pour demander le passeport",confirm:"Confirmez dans votre compte",success:"Le passeport a été ajouté avec succès à votre portefeuille",loginWithPassport:"Connectez-vous avec ce passeport",autoClose:"La page se fermera automatiquement dans {seconds}s",autoJump:"La page sera automatiquement sautée dans {seconds}s."}},lostPassport:{title:"Passeport perdu",description:"Le propriétaire de {name} peut utiliser les méthodes suivantes pour récupérer le passeport. Les membres doivent contacter le propriétaire pour une réédition du passeport.",return:"Annuler l'opération de récupération, retour à la page d'accueil",receivePassport:"Recevoir le passeport",recoverDialog:{title:"Récupérer le passeport",scan:"Utilisez les méthodes suivantes pour récupérer votre passeport",confirm:"Confirmez sur votre DID wallet",success:"Récupération réussie"},receiveDialog:{title:"Recevoir le passeport",scan:"Utilisez les méthodes suivantes pour recevoir le passeport",confirm:"Confirmez sur votre portefeuille DID",success:"Reçu avec succès"},recoverPassport:"Récupérer le passeport"},invite:{message:"{name} vous invite à être le {role} de {dapp}",success:"Vous avez réussi à rejoindre {dapp}",receive:"Recevoir avec",validUntil:"Valable jusqu'à:",viewPermission:"Permission d'affichage",emptyPermission:"Permission vide",open:"Ouvrir",description:{step1:"Téléchargez et configurez votre {wallet}",step2:"Cliquez sur le bouton ci-dessus pour recevoir le passeport",step3:"Connectez-vous à {dapp} avec le passeport reçu"},transferNFTDialog:{title:"Acceptez le serveur Blocklet {name}",scan:"Connectez le Launcher pour compléter la réception du serveur Blocklet.",confirm:"Veuillez passer en revue cette opération sur votre portefeuille DID",success:"Connecté avec succès, en attente de confirmation de la réception du serveur"}},receive:{dialog:{title:"Recevoir le passeport",scan:"Après réception du passeport, vous pouvez l'utiliser pour vous connecter à l'application.",confirm:"Confirmer dans votre compte",success:"Vous êtes connecté avec succès",scanWithDid:"Veuillez utiliser le compte {did} pour recevoir ce passeport. Après réception du passeport, vous pouvez l'utiliser pour vous connecter à l'application."}},navigation:{navigation:"Navigation",actionFailed:"Action échouée",form:{themeConfig:"Configuration du thème",contentConfig:"Configuration du contenu",title:"Titre",titlePlaceholder:"Veuillez saisir le titre de navigation",titleTooLong:"La longueur du titre doit être inférieure à {len}",description:"Description",descriptionPlaceholder:"Veuillez saisir la description de navigation",descriptionTooLong:"La longueur de la description doit être inférieure à {len}",icon:"Icône par défaut",iconPlaceholder:"Veuillez sélectionner une icône",invalidIcon:"L'icône n'est pas valide",findMoreIcon:"Trouver plus d'icônes",link:"Lien",linkPlaceholder:"Veuillez saisir le lien de navigation",invalidLink:"Le lien est invalide",component:"Composant",componentPlaceholder:"Veuillez sélectionner le composant de navigation",role:"Rôle",rolePlaceholder:"Veuillez sélectionner le rôle de navigation",locale:"Locale",localePlaceholder:"Veuillez entrer la localisation à ajouter",localeExists:"{value} existe déjà",activeIcon:"Icône active",activeColor:"Couleur active",color:"Couleur par défaut",colorPlaceholder:"p. ex. #FF0000",invalidColor:"Couleur invalide",searchIcons:"Rechercher un icône",searchIconsPlaceholder:"Exemple: mdi:home"},action:{add:"Ajouter la navigation",addSub:"Ajouter une sous-navigation",edit:"Modifier la navigation",hide:"Masquer la navigation",show:"Afficher la navigation",del:"Supprimer la navigation",new:"Nouveau",noAddSub:"Le composant désinstallé ne peut pas ajouter de sous-navigation",noEdit:"Le composant désinstallé ne peut pas être modifié",noDel:"Supprimer la navigation intégrée n'est pas autorisé",reset:"Réinitialiser",restConfirmTitle:"Réinitialiser la navigation {section} par défaut ?",restConfirmDesc:"Votre navigation personnalisée sera effacée et rétablie aux éléments par défaut.",resetSuccessful:"Réinitialisation réussie",delTabBarTitle:"Voulez-vous supprimer cette navigation ?",delTabBarDesc:"Après la suppression, la navigation sera supprimée de la barre de navigation."},system:"Système",services:"Services",access:"Accès",members:"Membres",passport:"Passeport",analytics:"Analytique",dashboard:"Tableau de bord",studio:"Blocklet Studio",aigne:"Connexions IA",blockletService:"Service Blocklet",didConnect:"Identité & Accès",didSpaces:"Stockage & Sauvegarde",website:"Site Web Studio",notification:"Centre de notifications",operations:"Observabilité",integration:"Intégrations",developer:"Développeurs",overviewDesc:"Surveillez la santé et les détails de l'application, et installez, démarrez ou supprimez facilement les Blocklets en un seul endroit.",didConnectDesc:"Ajoutez des membres de l'équipe, définissez les options de connexion et gérez l'accès sécurisé pour une collaboration fluide.",aigneDesc:`Configurez les connexions liées à l'IA pour votre blocklet, y compris <a href="{aigneHubUrl}" target="_blank">AIGNE Hub</a> et <a href="{mcpUrl}" target="_blank">les serveurs compatibles MCP</a>.`,websiteDesc:"Gérez le domaine, ajustez le thème, affinez la marque et personnalisez la navigation pour un look de site unique.",operationsDesc:"Consultez les analyses, vérifiez les journaux d'activité, recevez des alertes et ajustez les paramètres avancés selon les besoins.",integrationsDesc:"Liez les services externes via Webhooks, clés d'accès et serveurs MCP pour étendre les capacités de l'application.",developersDesc:"Utilisez les journaux, le suivi des performances et la documentation pour créer, déboguer et optimiser votre application.",didSpacesDesc:"Stockez et sauvegardez les données de votre application Blocklet en toute sécurité pour garantir une protection fiable et une récupération facile.",publishDesc:"Publiez votre application dans les magasins ou partagez-la via des liens pour que plus de personnes puissent l'utiliser."},storage:{spaces:{title:"DID Spaces",tips:"Conseils",label:"Veuillez entrer la passerelle DID Spaces",connected:{title:"Espaces DID connectés",tag:"Connecté(e)"},connectedWithName:"Vous vous êtes connecté avec succès à {name}",addedWithName:"Vous avez ajouté {name} avec succès",connects:"Connecter",reconnect:"Reconnecter",addressCannotEmpty:"L'adresse ne peut pas être vide",addressNotValid:"{url} n'est pas une adresse valide",authorize:{title:"Connectez {appName} à DID Spaces",scan:"Utilisez les méthodes suivantes pour permettre à l'application {appName} de se connecter à DID Spaces",success:"Connecté avec succès"},provideNFT:{title:"Veuillez montrer le DID Spaces NFT pour {appName}",scan:"Utilisez les méthodes suivantes pour permettre à l'application {appName} d'afficher les NFT DID Space",success:"Connecté avec succès"},backup:{title:"Sauvegarde",records:"Sauvegardes des enregistrements",without:"Sans sauvegarde",succeeded:"Sauvegarde réussie",failed:"Sauvegarde échouée",lastBackup:"Dernier temps de sauvegarde",lastBackupTip:`Il y a {time} depuis votre dernière sauvegarde réussie. Veuillez vérifier vos paramètres de sauvegarde dans l'onglet "DID Spaces".`,noBackup:"Pas de sauvegarde",noBackupTip:"Aucune sauvegarde n'a encore été créée. Nous recommandons de configurer des sauvegardes régulières pour protéger vos données et paramètres.",pending:"Sauvegarde en cours",timeout:"Délai d’attente de sauvegarde"},autoBackup:{title:"Sauvegarde automatique",enabled:"La sauvegarde automatique est activée",disabled:"La sauvegarde automatique est désactivée"},autoCheckUpdate:{title:"Vérification automatique des notifications de nouvelles versions",enabled:"La vérification automatique des nouvelles versions est activée",disabled:"La vérification automatique des nouvelles versions est désactivée"},backupSuccessfully:"Sauvegarde effectuée avec succès",restore:"Restaurer",restoreSuccessfully:"Restauration réussie",gateway:{title:"Passerelle",select:"Sélectionnez un espace DID",add:{title:"Ajouter des espaces DID",label:"Entrez l'URL des DID Spaces",failed:"Échec de l'ajout des espaces DID",invalidUrl:"URL de passerelle DID Spaces invalide",duplicate:"{name} est déjà connecté à ce Blocklet"},delete:{title:"Déconnecter",succeeded:"Déconnecté de DID Spaces {name}",failed:"Erreur lors de la déconnexion de la passerelle",failedForSelected:"Impossible de déconnecter du DID Space sélectionné",descForBackup:`Après la déconnexion de {name}, vous ne pourrez plus faire de sauvegarde de Blocklet à ce DID Space. Êtes-vous sûr de vouloir déconnecter ?
|
|
6
6
|
Vous pouvez restaurer les opérations de sauvegarde en vous reconnectant à {name}.`,descForStorage:`Après la déconnexion de {name}, vous ne pourrez plus faire de sauvegarde de Blocklet à ce DID Space. Êtes-vous sûr de vouloir déconnecter ?
|
|
7
7
|
Vous pouvez restaurer les opérations de sauvegarde en vous reconnectant à {name}.`},connect:{title:"Connectez-vous à DID Spaces",add:"Connectez-vous maintenant aux espaces DID",addTips:"Vous n'êtes pas encore connecté à un DID Space",switch:"Changer d'espaces DID",switchTips:"Vous êtes connecté à {name}",connected:"Connecté"},switch:{failedForMismatchSpace:"Veuillez vous connecter au bon DID Space {name}"},connectTo:"Connectez-vous à DID Spaces"},strategy:{title:"Stratégie de sauvegarde",autoBackup:"Sauvegarde automatique",backupNow:"Faites une sauvegarde maintenant",viewBackupFiles:"Afficher les fichiers de sauvegarde"},progress:{title:"Progression de sauvegarde"},record:{title:"Dossiers de sauvegarde",emptyData:"Aucun enregistrement"},notYet:"Vous n'avez pas encore de sauvegarde en cours...",connect:{now:"Se connecter maintenant",title:"Connecter DID Spaces",provider:"Fournissez votre DID Space pour commencer les sauvegardes",providerForStorage:"Fournissez votre DID Space pour le stockage de données",useWallet:"Se connecter avec DID Wallet",useWalletReconnect:"Se reconnecter avec DID Wallet",useSpaceGateway:"Se connecter via DID Space Gateway",useSpaceGatewayReconnect:"Se reconnecter via DID Space Gateway",switchToSpace:"Basculer vers DID Space",switchToSpaceSucceeded:"Passé à DID Space {name}",succeeded:"Connecté avec succès à DID Space",disconnect:"Déconnecter",abortBlockletBackup:"Annuler la sauvegarde"},disconnected:{tag:"Déconnecté",reconnectNow:"Reconnectez maintenant"}},appLevel:{title:"Stockage au niveau de l'application",description:"Tous les données générées par l'application sont stockées dans ce DID Space"}},log:{lastDays:{1:"Dernier 1 jour",7:"La dernière semaine"}},oauth:{authorize:"Autorisation OAuth",client:{tab:"Applications OAuth",name:"Nom de l'app",clientId:"ID client",clientSecret:"Secret client",scope:"Portée",redirectUris:"URI de redirection",grantTypes:"Types d'octroi",responseTypes:"Types de réponses",tokenEndpointAuthMethod:"Méthode d'authentification de l'endpoint Token",actions:"Actions",grantResponse:"Octroi & Réponse",metaContact:"Meta & Contact",clientUri:"URI client",logoUri:"URI du logo",contacts:"Contacts",tosUri:"URL des conditions d'utilisation",policyUri:"URI de la politique",jwksSoftware:"JWKS & Software",jwksUri:"JWKS URI",jwks:"JWKS",softwareId:"ID logiciel",softwareVersion:"Version du logiciel",clientSecretExpiresAt:"Secret client expire à",clientIdIssuedAt:"ID client Émis le",oauthAppDetails:"Détails de l'application OAuth",oauthEndpoints:"Points de terminaison OAuth",authorizationEndpoint:"Point de terminaison d'autorisation",tokenEndpoint:"Point de terminaison du jeton",userinfoEndpoint:"Point de terminaison des informations utilisateur",registrationEndpoint:"Point de terminaison d'inscription",endSessionEndpoint:"Point de terminaison de session",validate:{clientName:"Le nom de l'application est requis",clientNameMinLength:"Le nom de l'application doit comporter au moins 3 caractères",clientUri:"URL de la page d'accueil requise",clientUriInvalid:"Veuillez saisir une URL valide commençant par http:// ou https://",redirectUris:"URL de rappel d'autorisation requise",redirectUrisInvalid:"Veuillez saisir des URL valides commençant par http:// ou https://",contacts:"Veuillez saisir des adresses e-mail valides séparées par des virgules",tosUri:"URL des conditions d'utilisation requise",tosUriInvalid:"Veuillez saisir une URL valide",policyUri:"URL de la politique requise",policyUriInvalid:"Veuillez entrer une URL valide",jwksUri:"URI JWKS requis",jwksUriInvalid:"Veuillez saisir une URL valide",jwks:"JWKS requis",jwksInvalid:"Veuillez saisir un JWKS valide"},input:{clientName:"Nom de l'app",clientNamePlaceholder:"Quelque chose que les utilisateurs reconnaîtront et en qui ils auront confiance",clientUri:"URL de la page d'accueil",clientUriPlaceholder:"https://your-app.com",redirectUris:"URL de rappel d'autorisation",redirectUrisPlaceholder:"https://your-app.com/callback",contacts:"Emails de contact",contactsPlaceholder:"admin@your-app.com, support@your-app.com",permissions:"Sélectionnez les autorisations nécessaires",tosUri:"URL des conditions d'utilisation",tosUriPlaceholder:"https://your-app.com/terms",policyUri:"URL de la politique",policyUriPlaceholder:"https://your-app.com/policy",jwksUri:"JWKS URI",jwksUriPlaceholder:"https://your-app.com/jwks",jwks:"JWKS",jwksPlaceholder:"Ensemble de clés Web JSON",expireTime:"Définissez une date d'expiration pour le secret client pour une meilleure sécurité"},helperText:{clientName:"Quelque chose que les utilisateurs reconnaîtront et en qui ils auront confiance.",clientUri:"L'URL complète de la page d'accueil de votre application",redirectUris:"L'URL de rappel de votre application.",contacts:"L'adresse e-mail de la personne responsable de l'application.",tosUri:"L'URL des conditions d'utilisation de votre application.",policyUri:"L'URL de la politique de confidentialité de votre application.",read:"Lisez notre",document:"Documentation OAuth",more:"Pour plus d'informations."},delete:{title:"Supprimer le client OAuth",description:"Êtes-vous sûr de vouloir supprimer ce client OAuth {clientName} ?"},register:"Créer une nouvelle application OAuth",requiredInformation:"Informations requises",optionalInformation:"Informations optionnelles",registerButton:"Créer",logo:"Logo",openRegistration:"Inscription ouverte",openidConfiguration:"Configuration OpenID",createUser:"Créé par",update:"Mettre à jour l'application OAuth",listTitle:"Activer l'accès sécurisé tiers avec les applications OAuth",tooltipTitle:"Utilisez le serveur OAuth intégré de votre application pour autoriser les applications externes avec des protocoles standards. Donnez aux utilisateurs une authentification sécurisée et transparente, ainsi qu'un contrôle d'accès délégué.",empty:"Aucune donnée ajoutée"}},expiration:{mobile:{tips:{success:"{validity}",warning:"{validity}",error:"Expiré"},loadFailed:"Réessayer !"},desktop:{tips:{success:"L'abonnement expirera après {validity}",warning:"L'abonnement expirera après {validity}",error:"Abonnement expiré"},loading:"Chargement de l'abonnement...",loadFailed:"Échec du chargement des informations d'abonnement, veuillez réessayer !",nextInvoice:"Prochaine facture: {date}"}},analytics:{trend:"Tendances",detail:"Panne",traffic:{totalRequests:"Total des demandes",validRequests:"Demandes réussies",failedRequests:"Demandes échouées",uniqueVisitors:"Visiteurs uniques",uniqueFiles:"URL uniques",uniqueReferrers:"Référents uniques",uniqueNotFound:"Erreur 404 unique",uniqueStaticFiles:"Fichiers statiques uniques",logSize:"Taille du journal",bandwidth:"Bande passante"},runtime:"Runtime"},federated:{inviteJoinFederatedLogin:"Invitation à rejoindre la connexion fédérée",inviteJoinFederatedLoginDescription:"Copiez l'adresse suivante et remplissez-la dans l'application où vous devez vous joindre pour postuler à une connexion fédérée.",federatedLogin:"Connexion fédérée",joinFederatedLogin:"Rejoindre la connexion fédérée",joinFederatedLoginDescription:"Veuillez saisir l'adresse de connexion fédérée fournie par Master Blocklet pour rejoindre la connexion fédérée",quitFederatedLogin:"Quitter la connexion fédérée",quitFederatedLoginDescription:"Après la déconnexion de la connexion fédérée, la connexion normale est toujours disponible.",federatedJoinAppUrl:"Rejoignez l'URL de l'application de connexion fédérée",federatedJoinAppUrlRequired:"Veuillez saisir l'URL de connexion fédérée",failedToGetFederatedLoginAppUrl:"Impossible d'obtenir la connexion fédérée pour rejoindre l'URL de l'application",federatedJoinAppUrlInvalid:"L'appUrl de la connexion fédérée est invalide.",siteDetail:"Détails du site",approveToJoinLogin:"Approuver pour rejoindre la connexion fédérée",approve:"Activer la connexion",revoke:"Désactiver la connexion",enableFederatedLogin:"Activer la connexion fédérée",disableFederatedLogin:"Désactiver la connexion fédérée",enableFederatedLoginDescription:"Après avoir activé la connexion fédérée, ce site se connectera automatiquement.",disableFederatedLoginDescription:"Après avoir désactivé la connexion fédérée, ce site ne se connectera pas automatiquement",enableFederatedAutoLogin:"Activer la connexion automatique",enableFederatedAutoLoginDescription:"Après avoir activé la connexion automatique, si un statut de connexion unifiée est actuellement en place, le site se connectera automatiquement avec l'identité de la connexion fédérée.",disableFederatedAutoLogin:"Désactiver la connexion automatique",disableFederatedAutoLoginDescription:"Après la désactivation de la connexion automatique, le site ne se connectera pas automatiquement avec les informations d'identification de la connexion unifiée, et vous pouvez toujours choisir de vous connecter manuellement en cliquant.",info:{appId:"L'APPLICATION A FAIT",appPid:"Identifiant permanent",migratedFrom:"Également connu sous le nom de",appName:"Nom de blocklet",appDescription:"Description du bloclet",appUrl:"URL de Blocklet",appLogo:"Logo Blocklet",did:"Blocklet DID",serverId:"Identifiant du serveur Blocklet",serverVersion:"Version du serveur Blocklet",version:"Version Blocklet",appliedAt:"Postulez chez",status:"Statut"},status:{pending:"En attente",approved:"Approuvé",rejected:"Rejeté",revoked:"Révoqué"},disbandFederatedLogin:"Désactiver la connexion fédérée",disbandFederatedLoginDescription:"Après la dissolution de la connexion fédérée, tous les sites membres abandonneront automatiquement la connexion fédérée.",syncConfig:"Synchroniser la configuration des sites fédérés",quitMember:"Supprimer",quitMemberDescription:"Supprimer les membres spécifiés du groupe de site",removeFederatedLogin:"Supprimer le membre",removeFederatedLoginDescription:"Après avoir supprimé les membres spécifiés du groupe du site, les membres ne peuvent utiliser que la connexion normale",title:"Qu'est-ce que la connexion fédérée ?",description:"La connexion fédérée peut être réalisée via l'authentification unique sur plusieurs systèmes. Vous pouvez inviter d'autres équipes à rejoindre la connexion fédérée, ou rejoindre proactivement la plateforme de connexion fédérée d'autres organisations.",link:"Voir le document"},optionsOrder:{1:"Option Un",2:"Option Deux"},securityRule:{title:"Règle de sécurité",sortByDescription:"Trier par priorité de correspondance",add:"Ajouter une règle de sécurité",edit:"Modifier la règle de sécurité",view:"Afficher la règle de sécurité",form:{precede:"Faire précéder",pathPattern:"Motif de chemin",pathPatternPlaceholder:"Veuillez saisir le modèle de chemin",pathPatternErrorText:"Modèle de chemin non valide",accessPolicyOrResponseHeaderPolicyRequired:"Politique d'accès ou politique d'en-tête de réponse est requise",accessPolicy:"Accés",accessPolicyPlaceholder:"Sélectionner une politique d'accès",accessPolicyHelperText:"Veuillez sélectionner une politique d'accès",responseHeaderPolicy:"Stratégie d'en-tête de réponse",responseHeaderPolicyPlaceholder:"Veuillez sélectionner la politique d'en-tête de réponse",responseHeaderPolicyHelperText:"Sélectionnez une stratégie d'en-tête de réponse",remark:"Remarque",remarkPlaceholder:"Veuillez saisir une remarque",component:"Composant",componentPlaceholder:"Veuillez choisir le composant"},delete:{title:"Supprimer la règle de sécurité ?",description:"Après avoir supprimé une règle de sécurité, la règle ne sera plus appliquée"},useless:"Règle de sécurité inutile"},responseHeaderPolicy:{title:"Politique d'en-tête de réponse",add:"Ajouter une politique d'en-tête de réponse",edit:"Modifier la politique relative aux en-têtes de réponse",view:"Afficher la politique d'en-tête de réponse",form:{name:"Nom",namePlaceholder:"Veuillez entrer un nom",description:"Description",descriptionPlaceholder:"Veuillez entrer une description",cors:{origin:"Origine",originPlaceholder:"Les formats de domaine suivants sont pris en charge : http://www.example.com, http://*.example.com, http://www.example.com:8080, * (les caractères génériques ne sont pas recommandés)",originHelperText:"Le nom de domaine commence par http:// ou https://, un par ligne, un caractère générique * par ligne",methods:"Méthodes",allowedHeaders:"En-têtes autorisés",allowedHeadersPlaceholder:"Il est recommandé de remplir *, prend en charge une entrée multiligne",allowedHeadersHelperText:"Indiquez au serveur quels en-têtes HTTP personnalisés de requête peuvent être utilisés dans la prochaine requête lors de l'envoi d'une requête OPTIONS, comme : x-blocklet-version",exposedHeaders:"En-têtes exposés",exposedHeadersPlaceholder:"Prise en charge de la saisie multiligne",exposedHeadersHelperText:"Configurer les en-têtes accessibles, par exemple : X-Content-Range",maxAge:"Âge maximal (secondes)",maxAgeHelperText:"La durée de validité du résultat obtenu à partir d'une requête OPTIONS doit être un entier positif",optionsSuccessStatus:"Statut d'options réussies",preflightContinue:"Continuer",credentials:"Identifiants",smartModeHelperText:"Ajouter automatiquement tous les noms de domaine de l'application actuelle, ainsi que tous les noms de domaine du groupe de sites de connexion fédérée",smartMode:"Mode intelligent"},originOverride:"Dérogation à l'origine",originOverrideHelperText:"Définir si la logique de l'application doit remplacer cet en-tête de réponse"},delete:{title:"Supprimer la politique d'en-tête de réponse ?",description:"Après suppression d'une stratégie d'en-tête de réponse, la stratégie ne prendra plus effet"}},accessPolicy:{title:"Politique d'accès",add:"Ajouter une stratégie d'accès",edit:"Modifier la politique d'accès",view:"Afficher la politique d'accès",form:{name:"Nom",namePlaceholder:"Veuillez saisir un nom",description:"Description",descriptionPlaceholder:"Veuillez saisir une description",roles:"Rôles d'accès",accessType:"Type d'accès"},delete:{title:"Supprimer la stratégie d'accès ?",description:"Après avoir supprimé une politique d'accès, la politique ne prendra plus d'effet"}},didConnect:{genKeyPair:{title:"Générer Blocklet DID",scan:"Utilisez les méthodes suivantes pour générer un Blocklet DID",success:"Blocklet DID généré avec succès",successDesc:"La Blocklet DID a été générée avec succès (Les publications suivantes nécessitent le portefeuille qui a généré la DID pour fonctionner)"},common:{invalidSession:"Session invalide",invalidSessionDesc:"La session n'existe pas ou a expiré",connectionError:"Échec de la connexion"}},pagination:{next:"Page suivante",previous:"Page précédente",rowsPerPage:"Par page :",displayRows:"de",jumpToPage:"Aller à la page :"},webhookEndpoint:{createWebhook:"Créer un webhook",createWebhookTitle:"Créer un Webhook",selectAllEvents:"Sélectionner tous les événements",selectAllEventsTooltip:"Sélectionner tous les événements disponibles",selectedEventsCount:"{count} événements sélectionnés",selectedCount:"{count} sélectionnés",eventsCount:"{count} événements",saveWebhook:"Créer un webhook",noAvailableEvents:"Aucun événement disponible",loadingEvents:"Chargement des événements...",loadingError:"Échec du chargement des événements : {message}",title:"Webhooks",noWebhooksAdded:"Aucun webhook ajouté",validation:{urlRequired:"URL requise",urlInvalid:"Veuillez saisir une URL valide",descriptionRequired:"Description requise",eventRequired:"Veuillez sélectionner au moins un événement"},hosted:"Points de terminaison hébergés",add:"Créer un webhook",addTip:"Configurer votre point de terminaison webhook pour recevoir les événements en direct",listen:"Écouter",version:"Version de l'API",attempts:"Tentatives de webhook",url:{label:"URL",description:"URL de l'endpoint Webhook"},description:{label:"Description",description:"Une description facultative de l'utilisation de ce point de terminaison"},events:{label:"Sélectionner les événements",description:"Bonjour, {name}."},disabled:"Désactivé",enabled:"Activé",disable:"Désactiver",enable:"Activer",editWebhookTitle:"Mettre à jour le webhook",updateWebhook:"Mettre à jour le Webhook",waitingForEvents:"En attente d'événements...",loadingMore:"Chargement en cours...",loadMore:"Charger plus",response:"Réponse",request:"Demande",eventData:"Données d'événement",deleteWebhook:{title:"Supprimer le Webhook ?",description:"Après la suppression d'un webhook, celui-ci ne recevra plus d'événements."},success:"Succès",listTitle:"Envoyer des données d'événements en temps réel avec Webhooks",tooltipTitle:"Connectez votre application de manière transparente aux systèmes externes en envoyant des notifications d'événements en temps réel. Les webhooks permettent des intégrations puissantes et des workflows automatisés à travers vos outils et services.",triggeredFrom:"Ce webhook a été déclenché par une tentative"},description:{environment:"Les variables actuelles prendront effet lorsque {name} sera en cours d'exécution. Un redémarrage de l'application est nécessaire pour que les modifications prennent effet.",preferences:"Les variables actuelles prendront effet lorsque {name} sera en cours d'exécution. Les modifications seront appliquées après l'enregistrement, aucun redémarrage de l'application n'est nécessaire."},preferencesFor:"Préférences pour {name}",environmentFor:"Environnements pour {name}",accessKey:"Clé d'accès",embed:{iconTip:"Cliquez pour afficher les détails de l'abonnement"},command:"Commande",mcp:{listTitle:"Accédez à votre Blocklet depuis les clients MCP",tooltipTitle:"Explorez la liste des serveurs MCP compatibles avec ce Blocklet, sélectionnez un serveur pour afficher instantanément les commandes de connexion dont vous avez besoin pour vous connecter depuis votre client.",endpoint:"Point de terminaison MCP",available:"Serveurs MCP disponibles",noServer:"Aucun serveur MCP disponible"},installCommand:"Commande d'installation",label:{add:"Ajouter",apply:"Appliquer les étiquettes",manage:"Gérer les étiquettes",title:"Étiquettes",description:"Description",systemLabel:"Étiquette système",create:"Créer un libellé",edit:"Modifier l'étiquette",name:"Nom",slug:"Slug",parentLabel:"Libellé parent",color:"Couleur",search:"Rechercher des labels",saveSuccess:"Label enregistré avec succès",delete:"Supprimer",deleteTip:"Supprimer « {name} » ?",deleteSuccess:"Label supprimé avec succès",reassignTip:"Si ce label est utilisé, réaffectez ses éléments à un autre label.",reassignTo:"Choisir une nouvelle étiquette",recently:"Récent",noMatching:"Aucune étiquette trouvée",noLabels:"Aucune étiquette créée",filter:"Filtrer les étiquettes",createNewLabel:'Créer un nouveau label "{name}"',actionLabel:"Attribuer des étiquettes en masse",selectLabels:"Sélectionner les étiquettes",deleteDesc:`Après la suppression d'un libellé, le libellé ne sera plus utilisé. Voulez-vous vraiment supprimer "{name}"?`,nameRequired:"Titre est requis",nameMinLength:"Le titre doit comporter au moins 1 caractère.",nameMaxLength:"Le titre doit contenir moins de 64 caractères",slugRequired:"Le slug est requis",slugMinLength:"Slug doit comporter au moins 1 caractère.",slugMaxLength:"Slug doit comporter moins de 128 caractères.",descriptionMaxLength:"La description doit contenir moins de 255 caractères.",colorRequired:"La couleur est requise",colorInvalid:"La couleur est invalide"},environmentTips:{delete:"Êtes-vous sûr de vouloir supprimer cette ligne?",deleteForbidden:"Seule la clé de l'environnement personnalisé peut être modifiée."},authentication:{emailLoginDescription:"La connexion par e-mail utilisera les paramètres de notification pour envoyer des liens de connexion ou des codes de connexion aux utilisateurs.",emailNotificationRequired:"Assurez-vous d'avoir activé la notification par e-mail.",chooseProvider:"Méthode de connexion",chooseProviderPlaceholder:"Sélectionnez une méthode de connexion à configurer",addLoginProvider:"Ajouter une méthode de connexion",updateLoginProvider:"Mettre à jour la méthode de connexion : {provider}",alreadyBindOAuth:"Déjà lier la connexion tiers",alreadyBindWallet:"DID Wallet déjà lié",didConnectSettings:"Affichage & Branding",commonSettings:"Paramètres communs",sessionSettings:"Sécurité de session",federated:"Connexion fédérée",loginProviders:"Méthodes de connexion",oauth:"Connexion tiers",save:"Sauvegarder",thirdPartyLogin:"Connexion tiers",viewDocument:"Voir la documentation",oauthCallbackUrl:"URL de rappel",gotoEmailNotification:"Ouvrir les paramètres de notification par e-mail",deleteLoginProvider:"Supprimer le fournisseur de connexion {provider}",deleteLoginProviderDescription:"Après la suppression du fournisseur de connexion, les utilisateurs ne pourront plus se connecter avec {provider}. Êtes-vous sûr de vouloir continuer ?",auth0:{title:"Auth0",enable:"Activer la connexion Auth0",domain:"Domaine",domainDescription:"Le domaine d'Auth0 est requis",clientId:"ID client",clientIdDescription:"L'ID client de l'application Auth0 OAuth est requis",clientSecret:"Client Secret",clientSecretDescription:"Le Client Secret de l'application Auth0 OAuth est requis"},github:{title:"Github",enable:"Activer la connexion Github",clientId:"ID client",clientIdDescription:"L'ID client de l'application Github OAuth est requis",clientSecret:"Client Secret",clientSecretDescription:"Le secret du client de l'application Github OAuth est requis"},twitter:{title:"X",enable:"Activer la connexion X",clientId:"ID client",clientIdDescription:"L'ID client de l'application OAuth X est requise",clientSecret:"Client Secret",clientSecretDescription:"Le secret client de l'application X OAuth est requis"},google:{title:"Google",enable:"Activer la connexion Google",clientId:"ID client",clientIdDescription:"L'identifiant de client de l'application Google OAuth est requis",clientSecret:"Client Secret",clientSecretDescription:"Le client secret de l'application Google OAuth est requis"},apple:{title:"Pomme",enable:"Activer la connexion Apple",teamId:"ID d'équipe",teamIdDescription:"L'ID de l'équipe de l'application Apple OAuth est requis",serviceId:"ID de service",serviceIdDescription:"L'ID de service de l'application Apple OAuth est requis",keyId:"Identifiant de clé",keyIdDescription:"L'ID de clé de l'application Apple OAuth est requis",authKey:"Clé d'authentification",authKeyDescription:"La clé d'authentification de l'application Apple OAuth est requise",bundleId:"ID de bundle",bundleIdDescription:"L'identifiant de bundle de l'application Apple OAuth est requis"},wallet:{showQrcode:"Afficher le code QR"},didConnect:{showDidColor:"Afficher la couleur DID Connect",showAppInfo:"Afficher les informations du Blocklet",basicSettings:"Paramètres de base",customSettings:"Paramètres personnalisés",configDialogTitle:"Texte du popup d’authentification de configuration",addNewAction:"Ajouter une action",addLanguage:"Ajouter une langue",selectLanguage:"Choisissez une langue...",actionNameError:"Seules les lettres minuscules et les tirets sont autorisés; il ne peut pas commencer par un tiret.",actionNameDuplicate:"Le nom de l’action existe déjà"}}};export{e as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as e,al as s,a7 as B,bb as W,cB as N,aT as I,X as d}from"./vendor-mui-core-
|
|
1
|
+
import{j as e,al as s,a7 as B,bb as W,cB as N,aT as I,X as d}from"./vendor-mui-core-CV-FnYH_.js";import{r as l}from"./vendor-react-DX7tU9aY.js";import{z as v}from"./vendor-utils-BzQg432x.js";import{b4 as L}from"./vendor-ux-CLT2i3Pv.js";import{x as $,u as z,w as E}from"./index-CXp5SI_f.js";import{W as T}from"./did-address-CG36eCOx.js";import{a as A}from"./page-header-qdK3sAJh.js";import{S as D}from"./layout-Cwvm7lmD.js";import{S as F}from"./step-actions-DIZRcnXf.js";import{S as m}from"./button-uUU4Wycr.js";import"./vendor-hooks-DAZ1H6Va.js";import"./vendor-arcblock-Dll6qxMT.js";import"./content-layout-Dlmn5DW6.js";import"./use-mobile-DFkQ5N0b.js";function P({onNext:n=()=>{},onPrevious:x=()=>{}}){const{locale:u,t}=l.useContext(L),{blocklet:a,gas:c,tokenInfo:f,actions:h}=$(),{api:j}=z(),[y,o]=l.useState(!1),{need:p="",current:g="",owe:r=99999,deficiency:b,symbol:k="",endpoint:i}=c||{},{origin:S="/"}=i?new URL(i):{};l.useEffect(()=>{const w=setInterval(()=>{h.refreshFuel()},2e3);return()=>{clearInterval(w)}},[]);const C=()=>{o(!1)};return c?e.jsxs(R,{children:[e.jsx("div",{className:"header",children:e.jsx(A,{title:t("setup.fuel.title"),onClickBack:x})}),e.jsxs(s,{className:"qr-body",children:[e.jsxs(s,{className:"tip",sx:{mb:6},children:[t("setup.fuel.tipStart").replace("slot",""),e.jsx("span",{className:"amount",children:`${p} ${k}`}),t("setup.fuel.tipEnd")]}),e.jsx(s,{sx:{fontSize:16,fontWeight:"fontWeightBold",mb:.5},children:t("setup.fuel.addressTitle")}),e.jsxs(s,{sx:{display:"flex",alignItems:"center"},children:[e.jsx(T,{className:"address",did:a.appDid}),e.jsx(W,{style:{lineHeight:1},target:"_blank",href:v(S,"/explorer/accounts/",a.appDid),underline:"hover",children:e.jsx(N,{className:"icon-launch"})})]}),e.jsx(s,{sx:{my:2},children:e.jsx(m,{color:"primary",onClick:()=>o(!0),disabled:!r,children:t("setup.fuel.fuelApp")})}),e.jsx(E,{popup:!0,open:y,action:"fuel",checkFn:j.get,checkTimeout:600*1e3,onSuccess:C,onClose:()=>o(!1),locale:u,messages:{title:t("setup.connect.title"),scan:t("setup.connect.scan"),confirm:t("setup.connect.confirm"),success:t("setup.connect.success")},extraParams:{amount:b,...f,endpoint:i}}),e.jsxs(s,{sx:{display:"flex",color:"text.secondary"},children:[e.jsxs(s,{sx:{display:"flex"},children:[e.jsxs(s,{children:[t("setup.fuel.need"),":"]}),e.jsx(s,{sx:{ml:.5,color:"primary.main",fontWeight:"fontWeightBold"},children:p})]}),e.jsxs(s,{sx:{display:"flex",ml:3},children:[e.jsxs(s,{children:[t("setup.fuel.current"),":"]}),e.jsx(s,{sx:{ml:.5,color:r>0?"error.main":"primary.main",fontWeight:"fontWeightBold"},children:g})]})]})]}),e.jsx(F,{mt:8,children:e.jsx(m,{disabled:r>0,onClick:()=>n(),children:t("setup.next")})})]}):e.jsx(s,{sx:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%"},children:e.jsx(B,{})})}P.propTypes={onNext:d.func,onPrevious:d.func};const R=I(D)`
|
|
2
2
|
.qr-body {
|
|
3
3
|
width: 580px;
|
|
4
4
|
${n=>n.theme.breakpoints.down("md")} {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as E,j as e,R as S,
|
|
1
|
+
import{G as E,j as e,R as S,ci as P,bg as R,al as r,T as c,a7 as _}from"./vendor-mui-core-CV-FnYH_.js";import{u as I,s as L,c as N,U as p,j as U,aH as W}from"./index-CXp5SI_f.js";import{o as z}from"./vendor-arcblock-Dll6qxMT.js";import{b4 as A}from"./vendor-ux-CLT2i3Pv.js";import{i as T,b as y}from"./vendor-hooks-DAZ1H6Va.js";import{u as D,r as i,j as F}from"./vendor-react-DX7tU9aY.js";import{K as a}from"./landing-page-JLA-ZD1t.js";import{z as H}from"./vendor-utils-BzQg432x.js";import{u as K}from"./use-window-close-Dpj5UcYT.js";import"./use-blocklet-logo-Cf1j7pQz.js";function Z(){const m=D(),l=i.useRef(null),{t:s,locale:d}=i.useContext(A),{api:x,connectApi:f}=I(),[h]=F(),w=E(),b=K(),n=T({ready:!1,success:!1,error:null,invalidSession:!1}),k=()=>{try{const o=new URL(window.location.href);if(o.hash.includes("invalid")){n.invalidSession=!0;return}const u=o.searchParams.get("__connect_url__"),v=U(u);if(!W(v))throw new Error("No token");n.ready=!0}catch{n.invalidSession=!0,m("#invalid",{replace:!0})}};i.useLayoutEffect(()=>k(),[]);const C=y(o=>{n.error=o.message,window.opener?.postMessage({type:"connect-endpoint-message",error:n.error},"*"),m("#invalid",{replace:!0})}),g=y(()=>{window.opener?.postMessage({type:"connect-endpoint-message",success:!0},"*"),n.success=!0}),t=h.get("source")||"Generate Access Key";i.useEffect(()=>{l.current&&n.ready&&f.open({locale:d,containerEl:l.current,action:"gen-access-key",extraParams:{remark:t},checkFn:x.get,saveConnect:!1,forceConnected:!1,className:"connect",popup:!1,baseUrl:window.location.origin,prefix:H(window.location.origin,N.WELLKNOWN_SERVICE_PATH_PREFIX,L),messages:{title:s("connectCli.title"),scan:s("connectCli.scan"),confirm:s("auth.confirm"),success:s("connectCli.success")},onSuccess:g,onError:C},{locale:d})},[f,n.ready,x,C,g,d,s,t]);const j=e.jsx(S,{variant:"outlined",color:"primary",size:"small",startIcon:e.jsx(P,{}),href:"/",style:{borderRadius:4},children:s("connectCli.home")});if(n.invalidSession)return e.jsx(a,{did:window.blocklet?.appPid,standalone:!0,children:e.jsx(p,{style:{backgroundColor:"transparent"},status:"error",title:s("connectCli.invalidSession"),description:s("connectCli.invalidSessionDesc"),extra:j})},"invalid");if(n.error){const o=n.error,u=j;return e.jsx(a,{did:window.blocklet?.appPid,standalone:!0,children:e.jsx(p,{style:{backgroundColor:"transparent"},status:"error",title:s("connectCli.connectionError"),description:o,extra:u})},"error")}return n.success?(h.has("closeOnSuccess")&&b(),e.jsx(a,{did:window.blocklet?.appPid,standalone:!0,children:e.jsx(p,{style:{backgroundColor:"transparent"},status:"info",icon:e.jsx(R,{style:{color:w.palette.success.main,fontSize:72}}),title:s("connectCli.success",{source:t}),description:`${s("connectCli.successDesc",{source:t})} ${s("connectCli.upload")}`})},"success")):n.ready?e.jsx(a,{did:window.blocklet?.appPid,standalone:!0,children:e.jsxs(r,{sx:{maxWidth:"100%",height:"100%"},children:[e.jsxs(r,{sx:{mb:5},children:[e.jsx(c,{variant:"h4",component:"h1",sx:{mb:1,fontWeight:"bold",textAlign:"center"},children:s("connectCli.tips.title")}),e.jsxs(r,{sx:{display:"flex",flexDirection:"column",gap:1,alignItems:"center"},children:[e.jsx(c,{sx:{color:"text.secondary"},children:s("connectCli.tips.item1")}),e.jsx(c,{sx:{color:"text.secondary"},children:s("connectCli.tips.item2")}),e.jsx(c,{sx:{color:"text.secondary"},children:s("connectCli.tips.item3")})]})]}),e.jsx(r,{sx:{display:"inline-block"},ref:l})]})},"ready"):e.jsx(z,{children:e.jsx(_,{})})}export{Z as default};
|