From 14b066d3cdc5219404cc348149ab87efc1234cf6 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Wed, 8 Apr 2026 13:04:03 +0200 Subject: [PATCH] rename mountpoint to 'User-managed Mount Point' this makes it clear that the user has to manage this --- CHANGES | 1 + dashboard/public/translation/cs.json | 3 +- dashboard/public/translation/en.json | 3 +- dashboard/public/translation/fr.json | 497 ++++++++++++++++-- dashboard/public/translation/id.json | 3 +- dashboard/public/translation/nl.json | 3 +- .../src/components/BackupProviderForm.vue | 2 +- dashboard/src/constants.js | 2 +- dashboard/src/models/VolumesModel.js | 2 +- dashboard/src/views/VolumesView.vue | 1 + 10 files changed, 453 insertions(+), 64 deletions(-) diff --git a/CHANGES b/CHANGES index e146922ea..a04584085 100644 --- a/CHANGES +++ b/CHANGES @@ -3222,4 +3222,5 @@ [9.2.0] * apppasswords: generate easier to type passwords * logs: escape and unescape new lines +* backups/volumes: rename 'mountpoint' to 'User-managed Mount Point' diff --git a/dashboard/public/translation/cs.json b/dashboard/public/translation/cs.json index 5d1397e3f..170be1001 100644 --- a/dashboard/public/translation/cs.json +++ b/dashboard/public/translation/cs.json @@ -972,7 +972,8 @@ "saveAction": "Uložit", "aliases": "Aliasy", "addAliasAction": "Přidat alias", - "noAliases": "Žádné aliasy pro domény" + "noAliases": "Žádné aliasy pro domény", + "overwriteDns": "Přepsat existující DNS záznamy pro {domains}" }, "accessControl": { "userManagement": { diff --git a/dashboard/public/translation/en.json b/dashboard/public/translation/en.json index 4e14f9f17..4ba29505f 100644 --- a/dashboard/public/translation/en.json +++ b/dashboard/public/translation/en.json @@ -1634,7 +1634,8 @@ "editVolumeDialog": { "title": "Edit Volume" }, - "emptyPlaceholder": "No volumes" + "emptyPlaceholder": "No volumes", + "mountPointDescription": "The mount point has to be set up manually. See docs." }, "newLoginEmail": { "subject": "[<%= cloudron %>] New login on your account", diff --git a/dashboard/public/translation/fr.json b/dashboard/public/translation/fr.json index 4dba94d53..bce778f2f 100644 --- a/dashboard/public/translation/fr.json +++ b/dashboard/public/translation/fr.json @@ -15,7 +15,8 @@ "email": "Se connecter avec une adresse email", "sso": "Se connecter avec vos identifiants Cloudron", "openid": "Se connecter avec Cloudron OpenID" - } + }, + "noMatchesPlaceholder": "Aucune application correspondante" }, "main": { "offline": "Cloudron est hors ligne. Reconnexion…", @@ -26,14 +27,26 @@ "save": "Sauvegarder", "no": "Non", "yes": "Oui", - "delete": "Supprimer" + "delete": "Supprimer", + "edit": "Editer", + "done": "Terminer" }, "username": "Nom d'utilisateur", "actions": "Actions", "displayName": "Nom affiché", "action": { "logs": "Journaux", - "reboot": "Redémarrer" + "reboot": "Redémarrer", + "remove": "Supprimer", + "edit": "Editer", + "add": "Ajouter", + "next": "Suivant", + "configure": "Configurer", + "restart": "Redémarrer", + "reset": "Réinitialiser", + "loadMore": "Charger plus", + "setup": "Installer", + "disable": "Désactiver" }, "rebootDialog": { "rebootAction": "Redémarrer maintenant", @@ -47,9 +60,20 @@ }, "statusEnabled": "Activé", "navbar": { - "users": "Utilisateurs" + "users": "Utilisateurs", + "groups": "Groupes" }, - "loadingPlaceholder": "Chargement" + "loadingPlaceholder": "Chargement", + "table": { + "version": "Version", + "created": "Créé" + }, + "sidebar": { + "collapseAction": "Réduire la barre latérale" + }, + "platform": { + "startupFailed": "Échec du démarrage de la plateforme" + } }, "users": { "users": { @@ -64,17 +88,22 @@ "externalLdapTooltip": "Depuis un annuaire LDAP externe", "setGhostTooltip": "Emprunter l'identité", "invitationTooltip": "Inviter", - "mailmanagerTooltip": "Cet utilisateur peut gérer les utilisateurs et les boîtes mail" + "mailmanagerTooltip": "Cet utilisateur peut gérer les utilisateurs et les boîtes mail", + "noMatchesPlaceholder": "Aucun utilisateur correspondant", + "emptyPlaceholder": "Aucun utilisateur" }, "groups": { "name": "Nom", "users": "Utilisateurs", - "externalLdapTooltip": "Depuis un annuaire LDAP externe" + "externalLdapTooltip": "Depuis un annuaire LDAP externe", + "emptyPlaceholder": "Aucun groupe", + "noMatchesPlaceholder": "Aucun groupe correspondant" }, "settings": { "allowProfileEditCheckbox": "Autoriser les utilisateurs à modifier leur nom et leur adresse email", "saveAction": "Enregistrer", - "require2FACheckbox": "Demander aux utilisateurs une authentification à deux facteurs (2FA)" + "require2FACheckbox": "Demander aux utilisateurs une authentification à deux facteurs (2FA)", + "title": "Paramètres" }, "externalLdap": { "configureAction": "Paramétrer", @@ -128,7 +157,8 @@ "group": { "users": "Utilisateurs", "name": "Nom", - "addGroupAction": "Ajouter un groupe" + "addGroupAction": "Ajouter un groupe", + "allowedApps": "Applications autorisées" }, "deleteGroupDialog": { "title": "Supprimer le groupe {{ name }}", @@ -191,7 +221,14 @@ "placeholder": "Adresse IP séparée par ligne ou sous-réseau", "label": "Accès restreint" }, - "cloudflarePortWarning": "Le proxy Cloudflare doit être désactivé sur le domaine du tableau de bord pour accéder au service LDAP" + "cloudflarePortWarning": "Le proxy Cloudflare doit être désactivé sur le domaine du tableau de bord pour accéder au service LDAP", + "enable": "Activer le serveur LDAP", + "title": "Serveur LDAP", + "enabled": "Activer le serveur LDAP" + }, + "title": "Utilisateurs", + "2FAResetDialog": { + "title": "Réinitialiser l'authentification à deux facteurs de l'utilisateur" } }, "profile": { @@ -216,7 +253,8 @@ "name": "Nom", "noPasswordsPlaceholder": "Aucun mot de passe d'application créé", "title": "Mots de passe d'application", - "description": "Les mots de passe d'application sont une mesure de sécurité pour protéger votre compte utilisateur Cloudron. Si vous avez besoin d'accéder à une application Cloudron depuis une application mobile ou un client auquel vous ne faites pas confiance, vous pouvez vous connecter avec votre nom d'utilisateur et le mot de passe alternatif généré ici." + "description": "Les mots de passe d'application sont une mesure de sécurité pour protéger votre compte utilisateur Cloudron. Si vous avez besoin d'accéder à une application Cloudron depuis une application mobile ou un client auquel vous ne faites pas confiance, vous pouvez vous connecter avec votre nom d'utilisateur et le mot de passe alternatif généré ici.", + "expires": "Date d'expiration" }, "changeEmail": { "title": "Modifier l'adresse email principale", @@ -228,7 +266,8 @@ "app": "Application", "name": "Nom du mot de passe", "title": "Créer un mot de passe d'application", - "description": "Utilisez le mot de passe suivant pour vous authentifier auprès de l'application :" + "description": "Utilisez le mot de passe suivant pour vous authentifier auprès de l'application :", + "expiresAt": "Date d'expiration" }, "changeFallbackEmail": { "title": "Modifier l'adresse email de récupération du mot de passe" @@ -237,14 +276,20 @@ "token": "Jeton", "title": "Activer l'authentification à deux facteurs (2FA)", "enable": "Activer", - "authenticatorAppDescription": "Scannez le code avec Google Authenticator (Android, iOS), FreeOTP (Android, iOS) ou une application d'authentification similaire." + "authenticatorAppDescription": "Scannez le code avec Google Authenticator (Android, iOS), FreeOTP (Android, iOS) ou une application d'authentification similaire.", + "mandatorySetup": "L'authentification à deux facteurs (2FA) est requise pour accéder au tableau de bord. Veuillez terminer la configuration pour continuer.", + "passkeyOption": "Clé d'accès", + "totpOption": "TOTP", + "registerPasskey": "Installer une clé d'accès", + "passkeyDescription": "Le navigateur vous invitera à créer une clé d'accès à l'aide des données biométriques de votre appareil ou d'un gestionnaire de mots de passe." }, "createApiToken": { "name": "Nom du jeton API", "description": "Nouveau jeton API :", "title": "Créer un jeton API", "copyNow": "Veillez à copier le jeton API maintenant. Il ne s'affichera plus pour des raisons de sécurité.", - "access": "Accès API" + "access": "Accès API", + "allowedIpRanges": "Plage(s) d'adresses IP autorisées" }, "changePasswordAction": "Modifier le mot de passe", "apiTokens": { @@ -256,7 +301,9 @@ "lastUsed": "Dernière utilisation", "scope": "Portée", "readonly": "Lecture seule", - "readwrite": "Lecture et écriture" + "readwrite": "Lecture et écriture", + "allowedIpRangesPlaceholder": "Adresses IP ou sous-réseaux séparés par des virgules", + "allowedIpRanges": "Adresses IP autorisées" }, "loginTokens": { "logoutAll": "Déconnecter de tous", @@ -265,6 +312,32 @@ }, "passwordResetNotification": { "body": "Email envoyé à {{ email }}" + }, + "removeApiToken": { + "title": "Supprimer le jeton API" + }, + "removeAppPassword": { + "title": "Supprimer le mot de passe de l'application" + }, + "twoFactorAuth": { + "title": "Authentification à deux facteurs", + "totpEnabled": "Activé", + "passkeyEnabled": "Activé", + "totpTitle": "TOTP", + "passkeyTitle": "Clé d'accès" + }, + "notSet": "Non défini", + "enablePasskey": { + "title": "Activer la clé d'accès" + }, + "enableTotp": { + "title": "Activer le TOTP" + }, + "disableTotp": { + "title": "Désactiver le TOTP" + }, + "disablePasskey": { + "title": "Désactiver la clé d'accès" } }, "backups": { @@ -276,7 +349,9 @@ "days": "Jours", "hours": "Heures", "title": "Paramétrer la planification et la conservation des sauvegardes", - "retentionPolicy": "Politique de conservation" + "retentionPolicy": "Politique de conservation", + "disable": "Désactiver les sauvegardes automatiques", + "enable": "Activer les sauvegardes automatiques" }, "schedule": { "title": "Planification et conservation", @@ -324,13 +399,36 @@ "port": "Port", "cifsSealSupport": "Utilisez le cryptage du sceau. Nécessite au moins SMB v3", "chown": "Le système de fichiers distant prend en charge chown", - "encryptFilenames": "Chiffré les nom de fichiers" + "encryptFilenames": "Chiffré les nom de fichiers", + "preserveAttributesLabel": "Conserver les attributs du fichier", + "name": "Nom", + "encryptionHint": "Indice pour le mot de passe de chiffrement", + "usesEncryption": "La sauvegarde est chiffrée", + "useForUpdates": "Enregistrer ici les sauvegardes des mises à jour automatiques", + "backupContents": { + "title": "Contenu de la sauvegarde", + "description": "Choisissez les éléments à sauvegarder sur ce site.", + "everything": "Tout", + "excludeSelected": "Exclure les éléments sélectionnés", + "includeOnlySelected": "N'inclure que les éléments sélectionnés" + }, + "automaticUpdates": { + "title": "Sauvegardes des mises à jour automatiques" + }, + "useEncryption": "Chiffrer les sauvegardes", + "regionHelperText": "Par défaut \"us-east-1\" si laissé vide", + "prefixHelperText": "Les sauvegardes sont stockées dans ce sous-dossier" }, "backupDetails": { "title": "Informations sur la sauvegarde", "id": "ID", "date": "Date", - "version": "Version" + "version": "Version", + "size": "Taille", + "duration": "Durée de la sauvegarde", + "lastIntegrityCheck": "Dernier contrôle d'intégrité", + "integrityNever": "Jamais", + "integrityInProgress": "En cours" }, "listing": { "title": "Liste", @@ -352,12 +450,45 @@ "tooltip": "Cela préservera également le courrier et les sauvegardes d'application {{ appsLength }}." }, "remotePath": "Chemin d'accès à distance" - } + }, + "archives": { + "title": "Archive de l'application", + "info": "Information" + }, + "deleteArchiveDialog": { + "title": "Supprimer l'archive" + }, + "deleteArchive": { + "deleteAction": "Supprimer" + }, + "restoreArchiveDialog": { + "title": "Restaurer à partir de l'archive", + "restoreAction": "Restaurer", + "restoreActionOverwrite": "Restaurer et écraser le DNS" + }, + "sites": { + "title": "Sites" + }, + "site": { + "addDialog": { + "title": "Ajouter un site de sauvegarde" + } + }, + "configAction": "Configuration", + "contentAction": "Contenu", + "configureContent": { + "title": "Configurer le contenu de la sauvegarde" + }, + "useFileAndFileNameEncryption": "Chiffrement des fichiers et des noms de fichiers utilisé", + "useFileEncryption": "Chiffrement des fichiers utilisé", + "checkIntegrity": "Vérifier l'intégrité", + "stopIntegrity": "Arrêter le contrôle d'intégrité" }, "emails": { "title": "Messagerie", "changeDomainDialog": { - "description": "Cela déplacera le serveur IMAP et SMTP vers l'emplacement choisi." + "description": "Cela déplacera le serveur IMAP et SMTP vers l'emplacement choisi.", + "setAction": "Définir l'emplacement" }, "eventlog": { "details": "Détails", @@ -378,7 +509,9 @@ "bounceInfo": "Notification d'email non distribué", "underQuotaInfo": "La boîte mail {{ mailbox }} est passée sous le quota de {{ quotaPercent }}%", "overQuotaInfo": "La boîte mail {{ mailbox }} est pleine à {{ quotaPercent }}%", - "quota": "Quota de boîte mail" + "quota": "Quota de boîte mail", + "savedInfo": "Enregistré", + "sentInfo": "Envoyé" }, "title": "Journal des événements de la messagerie", "mailFrom": "De", @@ -400,7 +533,8 @@ "title": "Domaines", "outbound": "Sortant uniquement", "stats": "{{ mailboxCount }} adresse(s) de messagerie / utilisation : {{ usage }}", - "testEmailTooltip": "Envoyer un email test" + "testEmailTooltip": "Envoyer un email test", + "inbound": "Entrant et sortant" }, "testMailDialog": { "title": "Envoyer un email test pour {{ domain }}", @@ -494,7 +628,12 @@ "setupAction": "Créer un compte", "description": "Un compte Cloudron.io permet d'accéder à l'App Store et de gérer votre abonnement.", "title": "Compte Cloudron.io", - "emailNotVerified": "Adresse email pas encore confirmée" + "emailNotVerified": "Adresse email pas encore confirmée", + "account": "Compte", + "unlinkAction": "Dissocier le compte", + "unlinkDialog": { + "title": "Désassocier le compte Cloudron.io" + } }, "registryConfig": { "provider": "Fournisseur du registre Docker", @@ -523,11 +662,24 @@ "stopUpdateAction": "Interrompre la mise à jour", "updateAvailableAction": "Mise à jour disponible", "checkForUpdatesAction": "Rechercher les mises à jour disponibles", - "title": "Mises à jour" + "title": "Mises à jour", + "disabled": "Désactivé", + "onLatest": "dernier", + "config": "Mises à jour automatiques", + "appsOnly": "Applications uniquement", + "platformAndApps": "Plateforme et applications" }, "timezone": { "title": "Fuseau horaire", "description": "Le fuseau horaire défini actuellement est le suivant : {{ timeZone }}.\nCe paramètre est utilisé pour la planification des opérations de sauvegarde et de mise à jour." + }, + "configureUpdates": { + "title": "Configurer les mises à jour automatiques", + "policy": "Stratégie", + "policyDescription": "Choisissez ce qui doit être mis à jour automatiquement", + "days": "Jours", + "hours": "Heures", + "schedule": "Planifier" } }, "support": { @@ -538,7 +690,28 @@ }, "notifications": { "dismissTooltip": "Supprimer", - "markAllAsRead": "Tout marquer comme lu" + "markAllAsRead": "Tout marquer comme lu", + "settings": { + "title": "Paramètres de notification", + "backupFailed": "Échec de la sauvegarde", + "certificateRenewalFailed": "Échec du renouvellement du certificat", + "appOutOfMemory": "L'application manque de mémoire", + "appUp": "L'application est de nouveau disponible", + "appDown": "L'application est hors service", + "rebootRequired": "Un redémarrage du serveur est nécessaire", + "cloudronUpdateFailed": "Échec de la mise à jour de Cloudron", + "diskSpace": "Espace disque faible", + "appAutoUpdateFailed": "Échec de la mise à jour automatique de l'application", + "manualUpdateRequired": "La plateforme ou l'application nécessite une mise à jour manuelle" + }, + "settingsDialog": { + "description": "Un e-mail contenant les événements sélectionnés vous sera envoyé à votre adresse e-mail principale." + }, + "title": "Notifications", + "showAll": "Tout", + "showUnread": "Non lu", + "markUnread": "Marquer comme non lu", + "markRead": "Marquer comme lu" }, "appstore": { "category": { @@ -568,10 +741,14 @@ "userManagementLeaveToApp": "Laisser la gestion des utilisateurs à l'application", "locationPlaceholder": "Laisser vide pour utiliser le nom de domaine nu", "cloudflarePortWarning": "Le proxy Cloudflare doit être désactivé pour que le domaine de l'application puisse accéder à ce port", - "portReadOnly": "lecture seule" + "portReadOnly": "lecture seule", + "ephemeralPortWarning": "L'utilisation de ports éphémères peut entraîner des conflits imprévisibles." }, "unstable": "Instable", - "searchPlaceholder": "Rechercher des solutions alternatives telles que GitHub, Dropbox, Slack, Trello…" + "searchPlaceholder": "Rechercher des solutions alternatives telles que GitHub, Dropbox, Slack, Trello…", + "action": { + "addCustomApp": "Ajouter une application personnalisée" + } }, "app": { "updatesTabTitle": "Mises à jour", @@ -581,7 +758,14 @@ "lastUpdated": "Dernière mise à jour", "packageVersion": "Version du package", "appId": "ID de l'application", - "description": "Nom et version de l'application" + "description": "Nom et version de l'application", + "installedAt": "Installé" + }, + "auto": { + "title": "Mises à jour automatiques" + }, + "updates": { + "description": "Cloudron vérifie automatiquement si des mises à jour sont disponibles pour les applications. Vous pouvez également les vérifier manuellement." } }, "backupsTabTitle": "Sauvegardes", @@ -609,10 +793,27 @@ "csp": { "saveAction": "Enregistrer", "description": "Le paramétrage de cette option écrasera tous les en-têtes CSP générés par l'application elle-même.", - "title": "Politique de sécurité du contenu (CSP)" + "title": "Politique de sécurité du contenu (CSP)", + "insertCommonCsp": "Insérer un CSP standard", + "commonPattern": { + "allowEmbedding": "Autoriser l'intégration", + "sameOriginEmbedding": "Autoriser l'intégration (uniquement les sous-domaines)", + "allowCdnAssets": "Autoriser les ressources CDN", + "reportOnly": "Signaler les violations du CSP", + "strictBaseline": "Référence stricte" + } }, "robots": { - "title": "Robots.txt" + "title": "Robots.txt", + "description": "Par défaut, les robots peuvent indexer cette application", + "commonPattern": { + "allowAll": "Tout autoriser (par défaut)", + "disallowAll": "Tout interdire", + "disallowCommonBots": "Bloquer les robots courants", + "disallowAdminPaths": "Interdire les chemins d'accès à l'administration", + "disallowApiPaths": "Interdire les chemins d'accès à l'API" + }, + "insertCommonRobotsTxt": "Insérer un fichier robots.txt standard" }, "hstsPreload": "Activer HSTS pour ce site et tous les sous-domaines" }, @@ -642,18 +843,27 @@ "operators": { "title": "Opérateurs", "description": "Les opérateurs peuvent configurer et assurer la maintenance de cette application." + }, + "dashboardVisibility": { + "description": "Définissez qui peut voir cette application sur le tableau de bord." } }, "repair": { "recovery": { "description": "Si l'application ne répond pas, essayez de redémarrer l'application. Si l'application redémarre sans arrêt à cause d'un plugin défectueux ou d'une anomalie de paramétrage, mettez l'application en mode récupération pour avoir accès à la console. \nSuivez les instructions suivantes pour faire fonctionner l'application à nouveau.", "restartAction": "Redémarrer l'application", - "title": "Récupération après un crash" + "title": "Récupération après un crash", + "disableAction": "Désactiver le mode de récupération", + "enableAction": "Activer le mode de récupération" }, "taskError": { "retryAction": "Relancer l'opération {{ task }}", "description": "Si une action de paramétrage, de mise à jour, de restauration ou de sauvegarde échoue, vous pouvez relancer l'opération.", "title": "Erreur de tâche" + }, + "restart": { + "title": "Redémarrer", + "description": "Si l'application ne répond pas, essayez de la redémarrer." } }, "email": { @@ -685,13 +895,18 @@ "warning": "Toutes les données créées depuis la dernière sauvegarde connue seront définitivement perdues. Il est fortement recommandé de sauvegarder les données actuelles avant de lancer une restauration.", "description": "Cette action entraînera la restauration de l'application à partir des données de {{ creationTime }}.", "title": "Restaurer {{ app }}", - "restoreAction": "Restaurer" + "restoreAction": "Restaurer", + "cloneAction": "Cloner", + "cloneActionOverwrite": "Cloner et écraser le DNS" }, "importBackupDialog": { "uploadAction": "Charger le fichier de configuration de la sauvegarde", "title": "Importer la sauvegarde", "importAction": "Importer", - "remotePath": "Chemin de la sauvegarde" + "remotePath": "Chemin de la sauvegarde", + "provideBackupInfo": "Indiquez les informations de sauvegarde à partir desquelles effectuer la restauration, ou", + "warning": "Toutes les données créées depuis la dernière sauvegarde seront définitivement perdues. Il est recommandé de créer une nouvelle sauvegarde avant l'importation.", + "versionMustMatchInfo": "La sauvegarde doit avoir été créée à l'aide de la même version du package et des mêmes paramètres de contrôle d'accès que cette application." }, "repairTabTitle": "Réparation", "uninstallDialog": { @@ -701,7 +916,10 @@ }, "appInfo": { "package": "Package", - "openAction": "Ouvrir {{ app }}" + "openAction": "Ouvrir {{ app }}", + "checklist": "Liste de contrôle pour l'administrateur", + "checklistShow": "Afficher la liste de contrôle", + "checklistHide": "Cacher la liste de contrôle" }, "firstTimeSetupAction": "Initialisation", "uninstall": { @@ -728,7 +946,8 @@ "downloadConfigTooltip": "Télécharger le fichier de configuration de la sauvegarde", "description": "Les sauvegardes sont des instantanés complets de l'application. Vous pouvez utiliser les sauvegardes pour restaurer ou cloner l'application.", "title": "Sauvegardes", - "downloadBackupTooltip": "Télécharger la sauvegarde" + "downloadBackupTooltip": "Télécharger la sauvegarde", + "checkIntegrity": "Vérifier l'intégrité" } }, "graphs": { @@ -737,7 +956,9 @@ "7d": "7 jours", "24h": "24 heures", "12h": "12 heures", - "6h": "6 heures" + "6h": "6 heures", + "live": "En direct", + "1h": "1 heure" }, "diskIOTotal": "total: lecture {{ read }} / écriture {{ write }}", "networkIOTotal": "total : entrant {{ inbound }} / sortant {{ outbound }}" @@ -752,6 +973,10 @@ "description": "Taux limite d'utilisation du microprocesseur lorsque le système est très sollicité.", "title": "Utilisation du microprocesseur", "setAction": "Valider" + }, + "devices": { + "label": "Appareils", + "description": "Liste des appareils connectés à l'application, séparés par des virgules" } }, "location": { @@ -821,10 +1046,42 @@ }, "servicesTabTitle": "Services", "turn": { - "title": "Configuration de TURN" + "title": "Configuration de TURN", + "info": "Utilisez le serveur TURN intégré. Si cette option est désactivée, les paramètres TURN de l'application restent inchangés." }, "redis": { - "title": "Configuration de Redis" + "title": "Configuration de Redis", + "info": "Utilisez le service Redis intégré. Si cette option est désactivée, les paramètres Redis de l'application restent inchangés." + }, + "infoTabTitle": "Informations", + "info": { + "notes": { + "title": "Notes de l'administrateur" + } + }, + "archive": { + "title": "Archives", + "action": "Archives", + "noBackup": "Cette application ne dispose pas de sauvegarde. L'archivage nécessite une sauvegarde récente." + }, + "archiveDialog": { + "title": "Application d'archivage" + }, + "updateAvailableTooltip": "Mise à jour disponible", + "configureTooltip": "Configurer", + "forumAction": "Forum", + "appLink": { + "title": "Lien externe" + }, + "start": { + "title": "Démarrer", + "description": "Lancez l'application pour qu'elle soit à nouveau disponible.", + "action": "Démarrer" + }, + "stop": { + "action": "Arrêter", + "title": "Arrêter", + "description": "Fermez l'application pour économiser les ressources. Sauvegardez vos données avant de fermer l'application afin de conserver les modifications récentes." } }, "logs": { @@ -836,7 +1093,8 @@ "name": "Nom", "description": "Les volumes sont des systèmes de fichiers locaux ou distants. Ils peuvent être utilisés comme stockage de données principal d'une application ou comme emplacement de stockage partagé entre les applications.", "removeVolumeDialog": { - "removeAction": "Supprimer" + "removeAction": "Supprimer", + "title": "Supprimer le volume" }, "addVolumeDialog": { "title": "Ajouter un volume", @@ -863,7 +1121,9 @@ "description": "Le texte ci-dessous s'affichera dans tous les emails sortants de ce domaine.", "plainTextFormat": "Format texte", "htmlFormat": "Format HTML (optionnel)", - "title": "Signature" + "title": "Signature", + "customSignatureSet": "Signature personnalisée configurée", + "noSignatureSet": "Aucune signature configurée" }, "incoming": { "catchall": { @@ -876,7 +1136,9 @@ "title": "Listes de diffusion", "name": "Nom", "everyoneTooltip": "Utilisation de la liste autorisée aux non-membres", - "membersOnlyTooltip": "Utilisation de la liste limitée à ses membres" + "membersOnlyTooltip": "Utilisation de la liste limitée à ses membres", + "emptyPlaceholder": "Pas de listes de diffusion", + "noMatchesPlaceholder": "Aucune liste de diffusion correspondante" }, "mailboxes": { "usage": "Utilisation", @@ -884,7 +1146,9 @@ "title": "Messageries", "owner": "Propriétaire", "name": "Nom", - "addAction": "Ajouter" + "addAction": "Ajouter", + "emptyPlaceholder": "Pas de boîtes aux lettres", + "noMatchesPlaceholder": "Aucune boîte aux lettres correspondante" }, "sieveServerInfo": "ManageSieve", "incomingServerInfo": "Réception (IMAP)", @@ -895,7 +1159,8 @@ "howToConnectDescription": "Utilisez les paramètres ci-dessous pour configurer les clients de messagerie.", "incomingUserInfo": "Identifiant", "incomingPasswordInfo": "Mot de passe", - "incomingPasswordUsage": "Mot de passe du propriétaire de la boîte mail" + "incomingPasswordUsage": "Mot de passe du propriétaire de la boîte mail", + "description": "Recevoir les e-mails entrants pour ce domaine" }, "addMailinglistDialog": { "members": "Liste des membres", @@ -911,7 +1176,8 @@ }, "addMailboxDialog": { "title": "Ajouter une adresse de messagerie", - "name": "Nom" + "name": "Nom", + "incomingDisabledWarning": "La réception des e-mails pour ce domaine n'est pas activée" }, "editMailboxDialog": { "title": "Paramétrer l'adresse de messagerie {{ name }}@{{ domain }}", @@ -937,7 +1203,9 @@ }, "smtpStatus": { "notBlacklisted": "L'adresse IP de ce serveur {{ ip }} n'est pas sur liste noire.", - "blacklisted": "L'adresse IP de ce serveur {{ ip }} est sur liste noire." + "blacklisted": "L'adresse IP de ce serveur {{ ip }} est sur liste noire.", + "outboundSmtp": "SMTP sortant", + "rblCheck": "Vérification de la liste noire DNS" }, "dnsStatus": { "recordNotSet": "non défini", @@ -972,7 +1240,13 @@ }, "config": { "title": "Configuration de la messagerie {{ domain }}", - "clientConfiguration": "Configuration des clients de messagerie" + "clientConfiguration": "Configuration des clients de messagerie", + "sending": { + "title": "Envoi" + }, + "receiving": { + "title": "Réception" + } }, "editMailinglistDialog": { "title": "Modifier la liste de diffusion {{ name }}@{{ domain }}" @@ -984,7 +1258,11 @@ "enablePop3": "Activer l'accès POP3", "activeCheckbox": "L'adresse de messagerie est active" }, - "howToConnectInfoModal": "Configuration des clients de messagerie" + "howToConnectInfoModal": "Configuration des clients de messagerie", + "customFrom": { + "title": "Autoriser les adresses d'expéditeur personnalisées", + "description": "Autoriser les utilisateurs et les applications authentifiés à utiliser n'importe quelle adresse d'expéditeur" + } }, "domains": { "syncDns": { @@ -1040,12 +1318,24 @@ "bunnyAccessKey": "Bunny Access Key", "ovhConsumerKey": "Consumer Key", "ovhAppKey": "Application Key", - "ovhAppSecret": "Application Secret" + "ovhAppSecret": "Application Secret", + "deSecToken": "jeton deSEC", + "gandiTokenType": "Type de jeton", + "gandiTokenTypeApiKey": "Clé API (obsolète)", + "gandiTokenTypePAT": "Jeton d'accès personnel (PAT)", + "inwxUsername": "Nom d'utilisateur INWX", + "inwxPassword": "Mot de passe INWX", + "customNameservers": "Le domaine utilise des serveurs de noms personnalisés (vanity)", + "zoneNamePlaceholder": "Facultatif. Si ce paramètre n'est pas fourni, la valeur par défaut est le domaine racine.", + "carddavLocation": "Emplacement du serveur CardDAV", + "caldavLocation": "Emplacement du serveur CalDAV" }, "changeDashboardDomain": { "description": "Cette action entraînera le déplacement du tableau de bord vers le sous-domaine my du domaine sélectionné.", "changeAction": "Changer le domaine", - "title": "Changer le domaine du tableau de bord" + "title": "Changer le domaine du tableau de bord", + "confirmMessage": "Cela invalidera toutes les clés d'accès des utilisateurs.", + "confirmTitle": "Voulez-vous vraiment modifier le domaine du tableau de bord ?" }, "removeDialog": { "removeAction": "Supprimer", @@ -1058,7 +1348,14 @@ }, "provider": "Fournisseur", "domain": "Domaine", - "title": "Domaines et Certificats" + "title": "Domaines et Certificats", + "emptyPlaceholder": "Aucun domaine", + "noMatchesPlaceholder": "Aucun domaine correspondant", + "description": "L'ajout d'un domaine vous permet d'installer des applications sur ses sous-domaines.", + "wellknown": { + "editAction": "URI courants", + "title": "URI courants" + } }, "branding": { "footer": { @@ -1066,7 +1363,8 @@ }, "title": "Affichage", "cloudronName": "Nom du Cloudron", - "logo": "Logo" + "logo": "Logo", + "backgroundImage": "Arrière-plan de la page de connexion" }, "passwordResetEmail": { "subject": "Réinitialisation du mot de passe [<%= cloudron %>]", @@ -1115,7 +1413,8 @@ "new": "Nouveau", "uploadFolder": "Charger un dossier", "openTerminal": "Ouvrir le terminal", - "openLogs": "Afficher les journaux" + "openLogs": "Afficher les journaux", + "refresh": "Actualiser" }, "renameDialog": { "reallyOverwrite": "Un fichier portant ce nom existe déjà. Écraser le fichier existant ?", @@ -1209,7 +1508,9 @@ "downloadAction": "Télécharger", "scheduler": "Planificateur/Cron", "download": { - "download": "Télécharger" + "download": "Télécharger", + "title": "Télécharger le fichier", + "description": "Indiquez le chemin d'accès d'un fichier ou d'un répertoire à télécharger depuis le système de fichiers de l'application." }, "title": "Terminal" }, @@ -1235,10 +1536,19 @@ "product": "Produit", "memory": "Mémoire", "uptime": "Durée de fonctionnement", - "activationTime": "Heure de création de Cloudron" + "activationTime": "Heure de création de Cloudron", + "cloudronVersion": "Version de Cloudron", + "ubuntuVersion": "Version de Ubuntu" }, "graphs": { "title": "Graphiques" + }, + "locale": { + "title": "Paramètres régionaux" + }, + "title": "Système", + "settings": { + "title": "Paramètres" } }, "services": { @@ -1274,7 +1584,8 @@ "noUsername": { "title": "Impossible de configurer le compte", "description": "Le compte ne peut pas être configuré sans nom d'utilisateur." - } + }, + "welcome": "Bienvenue" }, "login": { "resetPasswordAction": "Réinitialiser le mot de passe", @@ -1283,7 +1594,11 @@ "username": "Nom d'utilisateur", "errorIncorrectCredentials": "Nom d'utilisateur ou mot de passe incorrect", "errorIncorrect2FAToken": "Le jeton 2FA n'est pas valide", - "errorInternal": "Erreur interne, réessayer ultérieurement" + "errorInternal": "Erreur interne, réessayer ultérieurement", + "loginAction": "Se connecter", + "usePasskeyAction": "Utiliser une clé d'accès", + "errorPasskeyFailed": "Échec de la connexion avec la clé d'accès", + "passkeyAction": "Se connecter avec la clé d'accès" }, "newLoginEmail": { "salutation": "Bonjour <%= user %>,", @@ -1303,7 +1618,8 @@ "name": "Nom", "id": "ID du client", "secret": "Secret du client", - "loginRedirectUri": "Url de retour post connexion (séparées par des virgules s'il y en a plus d'une)" + "loginRedirectUri": "Url de retour post connexion (séparées par des virgules s'il y en a plus d'une)", + "loginRedirectUriPlaceholder": "URL séparées par des virgules" }, "description": "Cloudron peut agir en tant que fournisseur OpenID Connect pour les applications internes et les services externes.", "deleteClientDialog": { @@ -1319,6 +1635,73 @@ }, "env": { "discoveryUrl": "URL de découverte" + }, + "clients": { + "title": "Clients OpenID", + "empty": "Aucun client OpenID" + }, + "clientCredentials": { + "title": "Identifiants du client" } + }, + "userdirectory": { + "settings": { + "title": "Paramètres" + } + }, + "archives": { + "listing": { + "placeholder": "Aucune application archivée" + }, + "description": "Les applications archivées conservent la dernière sauvegarde effectuée au moment de leur archivage. Ces sauvegardes sont conservées de manière permanente et peuvent être restaurées." + }, + "backup": { + "target": { + "label": "Site", + "size": "Taille", + "fileCount": "Fichiers" + }, + "sites": { + "title": "Sites de secours", + "emptyPlaceholder": "Pas de sites de secours", + "lastRun": "Dernier lancement", + "description": "Les emplacements de sauvegarde indiquent où sont stockées les sauvegardes du système et des applications. Les sauvegardes des applications peuvent être restaurées individuellement.", + "noAutomaticUpdateBackupWarning": "Aucun site de sauvegarde n'est configuré pour stocker les sauvegardes des mises à jour automatiques. Activez l'option « Stocker ici les sauvegardes des mises à jour automatiques » sur au moins un site de sauvegarde pour permettre les mises à jour automatiques." + }, + "site": { + "removeDialog": { + "title": "Supprimer le site de secours" + } + } + }, + "dockerRegistries": { + "server": "Adresse du serveur", + "provider": "Fournisseur", + "username": "Nom d'utilisateur", + "title": "Registres Docker", + "description": "Configurer l'accès aux registres Docker privés pour l'installation d'applications personnalisées.", + "removeDialog": { + "title": "Supprimer le registre Docker" + }, + "email": "E-mail", + "passwordToken": "Mot de passe/Jeton", + "emptyPlaceholder": "Pas de registres Docker", + "dialog": { + "addTitle": "Ajouter un registre Docker", + "editTitle": "Modifier le registre Docker" + } + }, + "appearance": { + "title": "Apparence" + }, + "dashboard": { + "title": "Tableau de bord" + }, + "server": { + "title": "Serveur" + }, + "communityapp": { + "installwarning": "Les applications de la communauté ne sont pas vérifiées par Cloudron. N'installez que des applications provenant de développeurs de confiance. Le code tiers peut compromettre la sécurité de votre système.", + "unstablewarning": "Cette application est signalée comme instable par son développeur." } } diff --git a/dashboard/public/translation/id.json b/dashboard/public/translation/id.json index c75401dc2..b6460ca41 100644 --- a/dashboard/public/translation/id.json +++ b/dashboard/public/translation/id.json @@ -1207,7 +1207,8 @@ "saveAction": "Simpan", "aliases": "Alias", "addAliasAction": "Tambahkan alias", - "noAliases": "Tidak ada domain alias" + "noAliases": "Tidak ada domain alias", + "overwriteDns": "Menimpa catatan DNS yang ada pada {domains}" }, "accessControl": { "userManagement": { diff --git a/dashboard/public/translation/nl.json b/dashboard/public/translation/nl.json index 9b5055a0a..8919d3bf2 100644 --- a/dashboard/public/translation/nl.json +++ b/dashboard/public/translation/nl.json @@ -785,7 +785,8 @@ "noRedirections": "Geen domein-omleidingen", "noAliases": "Geen alias-domeinen", "addAliasAction": "Alias toevoegen", - "aliases": "Aliassen" + "aliases": "Aliassen", + "overwriteDns": "Overschrijf bestaande DNS records van {domains}" }, "accessControl": { "userManagement": { diff --git a/dashboard/src/components/BackupProviderForm.vue b/dashboard/src/components/BackupProviderForm.vue index 538417f21..cfd927d4c 100644 --- a/dashboard/src/components/BackupProviderForm.vue +++ b/dashboard/src/components/BackupProviderForm.vue @@ -135,7 +135,7 @@ onMounted(async () => { - + diff --git a/dashboard/src/constants.js b/dashboard/src/constants.js index 044906e19..2f86978db 100644 --- a/dashboard/src/constants.js +++ b/dashboard/src/constants.js @@ -296,7 +296,6 @@ const STORAGE_PROVIDERS = [ { name: 'EXT4 Disk', value: 'ext4' }, { name: 'Exoscale SOS', value: 'exoscale-sos', regions: REGIONS_EXOSCALE }, { name: 'Filesystem', value: 'filesystem' }, - { name: 'Filesystem (Mount point)', value: 'mountpoint' }, // legacy { name: 'Google Cloud Storage', value: 'gcs' }, { name: 'Hetzner Object Storage', value: 'hetzner-objectstorage', regions: REGIONS_HETZNER }, { name: 'IDrive e2', value: 'idrive-e2' }, @@ -313,6 +312,7 @@ const STORAGE_PROVIDERS = [ { name: 'Vultr Object Storage', value: 'vultr-objectstorage', regions: REGIONS_VULTR }, { name: 'Wasabi', value: 'wasabi', regions: REGIONS_WASABI }, { name: 'XFS Disk', value: 'xfs' }, + { name: 'User-managed Mount Point', value: 'mountpoint' }, ]; const BACKUP_FORMATS = [ diff --git a/dashboard/src/models/VolumesModel.js b/dashboard/src/models/VolumesModel.js index 290685365..039f23698 100644 --- a/dashboard/src/models/VolumesModel.js +++ b/dashboard/src/models/VolumesModel.js @@ -6,10 +6,10 @@ const mountTypes = [ { name: 'CIFS', value: 'cifs' }, { name: 'EXT4', value: 'ext4' }, { name: 'Filesystem', value: 'filesystem' }, - { name: 'Filesystem (Mount point)', value: 'mountpoint' }, { name: 'NFS', value: 'nfs' }, { name: 'SSHFS', value: 'sshfs' }, { name: 'XFS', value: 'xfs' }, + { name: 'User-managed Mount Point', value: 'mountpoint' }, ]; function filterConfigForMountType(mountType, config) { diff --git a/dashboard/src/views/VolumesView.vue b/dashboard/src/views/VolumesView.vue index 5bd99d3ef..ca4ccf54c 100644 --- a/dashboard/src/views/VolumesView.vue +++ b/dashboard/src/views/VolumesView.vue @@ -267,6 +267,7 @@ onMounted(async () =>{ +