diff --git a/CHANGES b/CHANGES
index 8651b2200..00b36cbac 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2777,4 +2777,5 @@
* dashboard: set '/' as keyboard shortcut
* app: memory limit is redefined to be just RAM and unlimited swap
* dashboard: rework filter UI
+* cpu: rework cpu shares into cpu quota
diff --git a/dashboard/src/js/client.js b/dashboard/src/js/client.js
index 413639d5e..435b35a3f 100644
--- a/dashboard/src/js/client.js
+++ b/dashboard/src/js/client.js
@@ -3705,6 +3705,8 @@ angular.module('Application').service('Client', ['$http', '$interval', '$timeout
return 'Memory limit ' + appName('of', app) + ' was set to ' + data.memoryLimit;
} else if (data.cpuShares) {
return 'CPU shares ' + appName('of', app) + ' was set to ' + Math.round((data.cpuShares * 100)/1024) + '%';
+ } else if (data.cpuQuota) {
+ return 'CPU quota ' + appName('of', app) + ' was set to ' + data.cupQuota + '%';
} else if (data.env) {
return 'Env vars ' + appName('of', app) + ' was changed';
} else if ('debugMode' in data) { // since it can be null
diff --git a/dashboard/src/translation/en.json b/dashboard/src/translation/en.json
index 3021242ed..fb0d3fc13 100644
--- a/dashboard/src/translation/en.json
+++ b/dashboard/src/translation/en.json
@@ -1500,8 +1500,8 @@
},
"cpu": {
"setAction": "Set",
- "title": "CPU Shares",
- "description": "Percent of CPU time when system is under heavy load."
+ "title": "CPU Limit",
+ "description": "Maximum percent of CPU app can use"
}
},
"storage": {
diff --git a/dashboard/src/translation/fr.json b/dashboard/src/translation/fr.json
index fe5370e55..68291da41 100644
--- a/dashboard/src/translation/fr.json
+++ b/dashboard/src/translation/fr.json
@@ -156,7 +156,8 @@
"description": "Cloudron va importer les utilisateurs et les groupes depuis un annuaire LDAP externe ou Active Directory. La vérification du mot de passe pour l'authentification de ces utilisateurs se fait via le serveur externe. La synchronisation ne s'exécute pas automatiquement, elle doit être lancée manuellement.",
"subscriptionRequiredAction": "Paramétrer mon abonnement maintenant",
"providerOther": "Autre",
- "providerDisabled": "Désactivé"
+ "providerDisabled": "Désactivé",
+ "disableWarning": "La source d'authentification de tous les utilisateurs existants sera réinitialisée pour utiliser la base de données locale."
},
"role": {
"usermanager": "Gestionnaire",
@@ -188,7 +189,9 @@
"errorInvalidEmail": "Cette adresse email est invalide",
"usernamePlaceholder": "Optionnel. Si laissé vide, l'utilisateur peut en choisir un lors de la première connexion",
"fallbackEmailPlaceholder": "Optionnel. Si laissé vide, ce sera l'adresse email principale qui sera utilisée",
- "displayNamePlaceholder": "Optionnel. Si laissé vide, l'utilisateur peut en choisir un lors de la création du compte"
+ "displayNamePlaceholder": "Optionnel. Si laissé vide, l'utilisateur peut en choisir un lors de la création du compte",
+ "external2FA": "La configuration multi-facteur est gérée par une source externe",
+ "ldapGroups": "Groupes LDAP"
},
"group": {
"errorNameRequired": "Un nom est nécessaire",
@@ -271,7 +274,7 @@
},
"exposedLdap": {
"secret": {
- "label": "Mot de passe de liaison",
+ "label": "Mot de passe Bind",
"description": "Toutes les requêtes LDAP doivent être authentifiées avec ce secret et le DN utilisateur {{ userDN }}",
"url": "URL du serveur"
},
@@ -282,7 +285,8 @@
"placeholder": "Adresse IP séparée par ligne ou sous-réseau",
"label": "Accès restreint"
},
- "title": "Serveur d'annuaire"
+ "title": "Serveur d'annuaire",
+ "cloudflarePortWarning": "Le proxy Cloudflare doit être désactivé sur le domaine du tableau de bord pour accéder au service LDAP"
},
"userImportDialog": {
"title": "Importer des utilisateurs",
@@ -345,7 +349,10 @@
"changeEmail": {
"errorEmailInvalid": "Cette adresse email est invalide",
"title": "Modifier l'adresse email principale",
- "errorEmailRequired": "Une adresse email valide est nécessaire"
+ "errorEmailRequired": "Une adresse email valide est nécessaire",
+ "email": "Nouvelle adresse e-mail",
+ "password": "Mot de passe pour confirmation",
+ "errorWrongPassword": "Mauvais mot de passe"
},
"createAppPassword": {
"copyNow": "Veillez à copier le mot de passe maintenant. Il ne s'affichera plus pour des raisons de sécurité.",
@@ -416,7 +423,8 @@
},
"changeBackgroundImage": {
"title": "Définir l'image d'arrière-plan"
- }
+ },
+ "enable2FANotAvailable": "Non disponible pour les utilisateurs provenant d'une source d'authentification externe"
},
"backups": {
"title": "Sauvegardes",
@@ -500,7 +508,7 @@
"cifsSealSupport": "Utilisez le cryptage du sceau. Nécessite au moins SMB v3",
"chown": "Le système de fichiers distant prend en charge chown",
"encryptedFilenames": "Crypter les noms de fichiers",
- "encryptFilenames": "Fichiers Cryptés"
+ "encryptFilenames": "Chiffré les nom de fichiers"
},
"backupDetails": {
"title": "Informations sur la sauvegarde",
@@ -543,7 +551,7 @@
"description": "Sauvegarde persistante quelle que soit la politique de rétention",
"tooltip": "Cela préservera également le courrier et les sauvegardes d'application {{ appsLength }}."
},
- "remotePath": "Répertoire Distant"
+ "remotePath": "Chemin d'accès à distance"
}
},
"emails": {
@@ -553,7 +561,7 @@
"location": "Emplacement",
"title": "Changer l'emplacement du serveur de messagerie",
"locationPlaceholder": "Laisser vide pour utiliser le nom de domaine nu",
- "description": "Cloudron effectuera les modifications DNS nécessaires pour l'ensemble des domaines et redémarrera le serveur de messagerie. Les clients de messagerie sur ordinateur et sur mobile doivent être reconfigurés pour que ce nouvel emplacement soit utilisé comme serveur IMAP et SMTP."
+ "description": "Cela déplacera le serveur IMAP et SMTP vers l'emplacement choisi."
},
"eventlog": {
"details": "Détails",
@@ -663,6 +671,10 @@
},
"action": {
"queue": "File d'attente"
+ },
+ "changeVirtualAllMailDialog": {
+ "title": "Dossier \"Tout les Emails\"",
+ "description": "Le dossier \"Tout les E-mails\" est un dossier contenant tout les e-mails de votre boite de réception. Ce dossier peut être utile pour les clients e-mails ne supportant pas les dossiers imbriqués."
}
},
"network": {
@@ -679,7 +691,8 @@
},
"dyndns": {
"title": "DNS dynamique",
- "description": "Activez cette option pour conserver tous vos enregistrements DNS synchronisés avec une adresse IP dynamique. Cette option est utile lorsque Cloudron fonctionne avec un réseau dont l'adresse IP publique change fréquemment, comme dans le cas d'une connexion domestique."
+ "description": "Activez cette option pour conserver tous vos enregistrements DNS synchronisés avec une adresse IP dynamique. Cette option est utile lorsque Cloudron fonctionne avec un réseau dont l'adresse IP publique change fréquemment, comme dans le cas d'une connexion domestique.",
+ "showLogsAction": "Afficher les journaux"
},
"ip": {
"configure": "Paramétrer",
@@ -705,7 +718,13 @@
"address": "Adresse IPv6",
"title": "IPv6",
"description": "Cloudron utilise cette adresse IPv6 pour configurer les enregistrements DNS AAAA.\n"
- }
+ },
+ "trustedIps": {
+ "description": "Les en-têtes HTTP provenant d'adresses IP correspondantes seront considérés comme sûrs",
+ "title": "Configurer les adresses IP de Confiance",
+ "summary": "{{ trustCount }} adresses IP de confiance"
+ },
+ "trustedIpRanges": "Adresses et plages d'IP de confiance. "
},
"settings": {
"title": "Paramètres",
@@ -809,7 +828,12 @@
"subscriptionRequiredDescription": "Vous devriez trouver votre réponse dans notre documentation, vous pouvez également poser votre question sur le forum.",
"title": "Ticket",
"emailVerifyAction": "Confirmer maintenant",
- "emailNotVerified": "L'adresse email de votre compte Cloudron.io {{ email }} n'a pas encore été confirmée. Veuillez la valider pour ouvrir des tickets d'incident."
+ "emailNotVerified": "L'adresse email de votre compte Cloudron.io {{ email }} n'a pas encore été confirmée. Veuillez la valider pour ouvrir des tickets d'incident.",
+ "typeBilling": "Problème de facturation"
+ },
+ "help": {
+ "description": "Veuillez utiliser les ressources suivantes pour obtenir de l'aide\n* [Forum Cloudron]({{ forumLink }}) - Veuillez utiliser les catégories d'assistance et d'applications spécifiques pour vos questions.\n* [Documentation et base de connaissances de Cloudron]({{ docsLink }})\n* [Packaging d'applications personnalisées et API]({{ packagingLink }})\n",
+ "title": "Aide"
}
},
"notifications": {
@@ -917,7 +941,8 @@
"packageVersion": "Version du package",
"appId": "ID de l'application",
"description": "Nom et version de l'application",
- "title": "Informations sur l'application"
+ "title": "Informations sur l'application",
+ "repository": "Dépot de paquets"
},
"auto": {
"title": "Mises à jour automatiques",
@@ -926,7 +951,8 @@
"disabled": "Les mises à jour automatiques sont actuellement désactivées.",
"enabled": "Les mises à jour automatiques sont actuellement activées.",
"description": "Cloudron vérifie régulièrement les mises à jour disponibles dans l'App Store. Si vous désactivez les mises à jour automatiques, veillez à les faire manuellement."
- }
+ },
+ "noUpdates": "Aucune nouvelle mise à jour disponible"
},
"backupsTabTitle": "Sauvegardes",
"storage": {
@@ -936,13 +962,20 @@
"noMounts": "Aucun volume n'est monté.",
"volume": "Volume",
"readOnly": "En lecture seule",
- "title": "Montages"
+ "title": "Montages",
+ "permissions": {
+ "label": "Permissions",
+ "readOnly": "Lecture seule",
+ "readWrite": "Lecture et écriture"
+ }
},
"appdata": {
"moveAction": "Déplacer les données",
"dataDirPlaceholder": "Laisser vide pour utiliser la plateforme par défaut",
"description": "Si le serveur manque d'espace disque, utilisez-le pour déplacer les données de l'application vers un volume. Toutes les données ici font partie de la sauvegarde de l'application.",
- "title": "Données de l'application"
+ "title": "Données de l'application",
+ "diskUsage": "L'application utilise actuellement {{ size }} de stockage (en date du {{ date }}).",
+ "mountTypeWarning": "Le système de fichiers de destination doit prendre en charge les autorisations et la propriété des fichiers pour que le transfert fonctionne"
}
},
"security": {
@@ -955,7 +988,8 @@
"disableIndexingAction": "Désactiver l'indexation",
"txtPlaceholder": "Laisser vide pour autoriser les robots à indexer cette application",
"title": "Robots.txt"
- }
+ },
+ "hstsPreload": "Activer HSTS pour ce site et tous les sous-domaines"
},
"updateDialog": {
"updateAction": "Mettre à jour",
@@ -1049,7 +1083,8 @@
"uploadAction": "Charger le fichier de configuration de la sauvegarde",
"description": "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 un import.",
"title": "Importer la sauvegarde",
- "importAction": "Importer"
+ "importAction": "Importer",
+ "remotePath": "Chemin de la sauvegarde"
},
"repairDialog": {
"fromBackup": "Restaurer depuis la sauvegarde :",
@@ -1120,7 +1155,8 @@
"time": "Créée le",
"packageVersion": "Version du package",
"description": "Les sauvegardes sont des instantanés complets de l'application. Vous pouvez utiliser les sauvegardes pour restaurer ou cloner l'application.",
- "title": "Sauvegardes"
+ "title": "Sauvegardes",
+ "downloadBackupTooltip": "Télécharger la sauvegarde"
}
},
"graphs": {
@@ -1132,7 +1168,9 @@
"12h": "12 heures",
"6h": "6 heures"
},
- "diskTitle": "Utilisation du disque"
+ "diskTitle": "Utilisation du disque",
+ "diskIOTotal": "total: lecture {{ read }} / écriture {{ write }}",
+ "networkIOTotal": "total : entrant {{ inbound }} / sortant {{ outbound }}"
},
"resources": {
"memory": {
@@ -1221,12 +1259,25 @@
"label": "Étiquette",
"clearIconAction": "Effacer Icône",
"clearIconDescription": "Cela récupérera le favicon de l'application."
+ },
+ "servicesTabTitle": "Services",
+ "turn": {
+ "enable": "Configurer l'application pour utiliser le serveur TURN intégré",
+ "disable": "Ne pas configurer les paramètres TURN de l'application. Les paramètres TURN de l'application sont laissés à leur valeurs par défaut. Vous pouvez les configurer à l'intérieur de l'application.",
+ "title": "Configuration de TURN"
+ },
+ "redis": {
+ "title": "Configuration de Redis",
+ "enable": "Configurer l'application pour utiliser Redis",
+ "disable": "Désactiver Redis"
}
},
"logs": {
"title": "Journaux",
"download": "Télécharger l'ensemble des journaux",
- "clear": "Nettoyer"
+ "clear": "Nettoyer",
+ "notFoundError": "Aucune tâche ou application de ce type",
+ "logsGoneError": "Fichier(s) journal(s) introuvable(s)"
},
"volumes": {
"name": "Nom",
@@ -1263,7 +1314,11 @@
"title": "Mettre à jour le volume {{ volume }}"
},
"mountStatus": "Statut du montage",
- "type": "Type"
+ "type": "Type",
+ "editVolumeDialog": {
+ "title": "Modifier le volume {{ name }}"
+ },
+ "editActionTooltip": "Modifier le volume"
},
"lang": {
"en": "Anglais",
@@ -1277,7 +1332,8 @@
"zh_Hans": "Chinois (Simplifié)",
"es": "Espagnol",
"ru": "Russe",
- "pt": "Portugais"
+ "pt": "Portugais",
+ "da": "Danois"
},
"email": {
"mailboxboxDialog": {
@@ -1522,10 +1578,19 @@
"vultrToken": "Token Vultr",
"wellKnownDescription": "Les valeurs seront utilisées par Cloudron pour répondre aux URL /.well-known/. Notez qu'une application doit être disponible sur le domaine nu {{ domaine }} pour que cela fonctionne. Consultez la documentation pour plus d'informations.",
"hetznerToken": "Token Hetzner",
- "jitsiHostname": "Emplacement de Jitsi"
+ "jitsiHostname": "Emplacement de Jitsi",
+ "cloudflareDefaultProxyStatus": "Activer le proxy pour les nouveaux enregistrements DNS",
+ "porkbunApikey": "Clé API",
+ "porkbunSecretapikey": "Clé API secrète",
+ "dnsimpleAccessToken": "Jeton d'accès",
+ "ovhEndpoint": "Point de terminaison",
+ "bunnyAccessKey": "Bunny Access Key",
+ "ovhConsumerKey": "Consumer Key",
+ "ovhAppKey": "Application Key",
+ "ovhAppSecret": "Application Secret"
},
"changeDashboardDomain": {
- "description": "Cette action entraînera le déplacement du tableau de bord et du serveur de messagerie vers le sous-domaine my du domaine sélectionné.",
+ "description": "Cette action entraînera le déplacement du tableau de bord vers le sous-domaine my du domaine sélectionné.",
"showLogsAction": "Afficher les journaux",
"cancelAction": "Annuler",
"changeAction": "Changer le domaine",
@@ -1551,7 +1616,8 @@
"domainWellKnown": {
"title": "Emplacements Well-Known de {{ domain }}"
},
- "tooltipWellKnown": "Définir des emplacements Well-Known"
+ "tooltipWellKnown": "Définir des emplacements Well-Known",
+ "count": "Nombre de domaines: {{ count }}"
},
"branding": {
"footer": {
@@ -1632,7 +1698,8 @@
"download": "Télécharger",
"extract": "Extraire ici",
"chown": "Modifier la propriété",
- "rename": "Renommer"
+ "rename": "Renommer",
+ "open": "Ouvrir"
},
"symlink": "Symlink vers {{ target }}",
"empty": "Aucun fichier",
@@ -1678,7 +1745,8 @@
"renameDialog": {
"rename": "Renommer",
"newName": "Nouveau nom",
- "title": "Renommer {{ fileName }}"
+ "title": "Renommer {{ fileName }}",
+ "reallyOverwrite": "Un fichier portant ce nom existe déjà. Écraser le fichier existant ?"
},
"newFileDialog": {
"create": "Créer",
@@ -1691,7 +1759,19 @@
"removeDialog": {
"reallyDelete": "Voulez-vous vraiment supprimer ces fichiers ?"
},
- "title": "Gestionnaire de fichiers"
+ "title": "Gestionnaire de fichiers",
+ "uploader": {
+ "uploading": "Téléversement",
+ "exitWarning": "Téléversement toujours en cours. Voulez-vous vraiment fermer cette page ?"
+ },
+ "deleteInProgress": "Suppression en cours",
+ "textEditor": {
+ "undo": "Annuler",
+ "redo": "Refaire",
+ "save": "Enregistrer"
+ },
+ "extractionInProgress": "Décompression en cours",
+ "pasteInProgress": "Collage en cours"
},
"terminal": {
"contextmenu": {
@@ -1732,7 +1812,8 @@
"selectPeriodLabel": "Période sélectionnée",
"cpuUsage": {
"graphTitle": "Pourcentage",
- "title": "Utilisation du microprocesseur"
+ "title": "Utilisation du microprocesseur",
+ "graphSubtext": "Seules les applications utilisant plus de {{ threshold }} de processeur sont affichées"
},
"systemMemory": {
"graphSubtext": "Seules les applications utilisant plus de 1GB de mémoire sont affichées",
@@ -1746,9 +1827,22 @@
"title": "Utilisation du disque",
"usedInfo": "{{ used }} utilisé de {{ size }}",
"uninstalledApp": "Désinstaller App",
- "diskSpeed": "Vitesse : {{ speed }} MB/sec"
+ "diskSpeed": "Vitesse : {{ speed }} MB/sec",
+ "volumeContent": "Ce disque est le volume {{ name }}"
},
- "title": "Info système"
+ "title": "Info système",
+ "info": {
+ "platformVersion": "Version de la Plate-forme",
+ "vendor": "Vendeur",
+ "product": "Produit",
+ "memory": "Mémoire",
+ "uptime": "Durée de fonctionnement",
+ "activationTime": "Heure de création de Cloudron",
+ "title": "Informations"
+ },
+ "graphs": {
+ "title": "Graphiques"
+ }
},
"services": {
"refresh": "Rafraîchir",
@@ -1803,7 +1897,9 @@
"password": "Mot de passe",
"username": "Nom d'utilisateur",
"errorIncorrectCredentials": "Nom d'utilisateur ou mot de passe incorrect",
- "loginTo": "Se connecter à"
+ "loginTo": "Se connecter à",
+ "errorIncorrect2FAToken": "Le jeton 2FA n'est pas valide",
+ "errorInternal": "Erreur interne, réessayer ultérieurement"
},
"newLoginEmail": {
"salutation": "Bonjour <%= user %>,",
@@ -1819,5 +1915,43 @@
"mounts": {
"description": "Les applications peuvent accéder aux volumes montés via le répertoire /media/{volume name}. Ces données ne sont pas incluses dans la sauvegarde de l'application."
}
- }
+ },
+ "oidc": {
+ "client": {
+ "signingAlgorithm": "Algorithme de signature",
+ "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)",
+ "logoutRedirectUri": "Url de retour après déconnexion (facultatif)"
+ },
+ "description": "Cloudron peut agir en tant que fournisseur OpenID Connect pour les applications internes et les services externes.",
+ "deleteClientDialog": {
+ "description": "Cela déconnectera toutes les applications OpenID externes de ce Cloudron utilisant cet identifiant client.",
+ "title": "Supprimer définitivement le client {{ client }} ?"
+ },
+ "newClientDialog": {
+ "title": "Ajouter un client",
+ "description": "Ajouter de nouveaux paramètres pour le client OpenID connect.",
+ "createAction": "Créer"
+ },
+ "title": "OpenID Connect Provider",
+ "editClientDialog": {
+ "title": "Modifier le client {{ client }}"
+ },
+ "env": {
+ "discoveryUrl": "URL de découverte",
+ "logoutUrl": "URL de déconnexion",
+ "profileEndpoint": "Point de terminaison pour le profil",
+ "keysEndpoint": "Point de terminaison pour les clés",
+ "tokenEndpoint": "Point de terminaison pour les jetons",
+ "authEndpoint": "Point de terminaison pour l'authentification"
+ },
+ "clients": {
+ "title": "Clients",
+ "newClient": "Nouveau client",
+ "empty": "Aucun client pour le moment"
+ }
+ },
+ "automation": "Automatisation"
}
diff --git a/dashboard/src/translation/nl.json b/dashboard/src/translation/nl.json
index a6dbfe9d4..b5e963409 100644
--- a/dashboard/src/translation/nl.json
+++ b/dashboard/src/translation/nl.json
@@ -274,7 +274,8 @@
"usernamePlaceholder": "Optioneel. Indien niet ingevuld mag de gebruiker bij registratie zelf kiezen",
"fallbackEmailPlaceholder": "Optioneel. Indien niet ingevoerd zal de primaire e-mail gebruikt worden",
"displayNamePlaceholder": "Optioneel. Indien niet ingevoerd kan de gebruiker het kiezen tijdens eerste aanmelding",
- "external2FA": "2FA instellingen worden beheerd door een externe authenticatie bron"
+ "external2FA": "2FA instellingen worden beheerd door een externe authenticatie bron",
+ "ldapGroups": "LDAP Groepen"
},
"deleteUserDialog": {
"deleteAction": "Verwijder",
diff --git a/dashboard/src/translation/ru.json b/dashboard/src/translation/ru.json
index c00158b89..8a74fe2ed 100644
--- a/dashboard/src/translation/ru.json
+++ b/dashboard/src/translation/ru.json
@@ -162,7 +162,10 @@
"loginAction": "Логин",
"switchToSignUpAction": "Ещё нет учётной записи? Зарегистрироваться",
"createAccountAction": "Создать учётную запись",
- "switchToLoginAction": "Уже есть учётная запись? Войти"
+ "switchToLoginAction": "Уже есть учётная запись? Войти",
+ "setupWithTokenAction": "Настройка",
+ "setupToken": "Настроить Токен",
+ "titleToken": "Войти с Настроенным Токеном"
},
"title": "Магазин приложений",
"noAppsFound": "Приложения не найдены.",
@@ -217,7 +220,7 @@
"require2FAWarning": "Сперва настройте 2FA, чтобы иметь доступ к аккаунту в будущем."
},
"externalLdap": {
- "description": "Cloudron будет синхронизировать пользователей и группы с внешнего сервера LDAP или ActiveDirectory. Проверка пароля для аутентификации таких пользователей выполняется на внешнем сервере. Синхронизация не запускается автоматически, ее нужно активировать вручную.",
+ "description": "Эта настройка будет сихронизировать и идентифицировать пользователй и группы из внешнего сервера LDAP или AcriveDirectory. Синхронизация запускается с периодичностью, но также может быть запущена вручную.",
"bindPassword": "Привязать пароль (необязательно)",
"bindUsername": "Привязать Уникальное имя (DN)/Имя пользователя (необязательно)",
"title": "Подключиться к удалённому каталогу",
@@ -234,13 +237,14 @@
"groupFilter": "Фильтр группы",
"groupnameField": "Поле с именем группы",
"auth": "Авторизоваться",
- "autocreateUsersOnLogin": "Автоматически создавать пользователей после их входа в Cloudron",
+ "autocreateUsersOnLogin": "Автоматически создавать пользователей после их входа",
"showLogsAction": "Показать логи",
"syncAction": "Синхронизировать",
"configureAction": "Настроить",
"errorSelfSignedCert": "Сервер использует недействительный или самоподписанный сертификат.",
"providerOther": "Другое",
- "providerDisabled": "Отключить"
+ "providerDisabled": "Отключить",
+ "disableWarning": "Источник аутентификации будет сброшен до локальных паролей для всех активных пользователей."
},
"subscriptionDialog": {
"title": "Требуется подписка",
@@ -269,7 +273,9 @@
"errorDisplayNameRequired": "Требуется имя",
"activeCheckbox": "Пользователь активен",
"fallbackEmailPlaceholder": "Необязательно. Если не указано, будет использоваться основной почтовый ящик",
- "displayNamePlaceholder": "Необязательно. Если не указано, пользователь может указать во время регистрации"
+ "displayNamePlaceholder": "Необязательно. Если не указано, пользователь может указать во время регистрации",
+ "external2FA": "Настройка 2FA осуществляется внешним ресурсом аутентификации",
+ "ldapGroups": "Группы LDAP"
},
"deleteUserDialog": {
"title": "Удалить пользователя {{ username }}",
@@ -356,7 +362,7 @@
"exposedLdap": {
"title": "Сервер LDAP",
"ipRestriction": {
- "description": "Сервер каталогов может быть ограничен для определённого круга IP адресов.",
+ "description": "Ограничьте доступ к серверу каталогов только для определённого круга IP-адресов и диапазонов. Строки, начинающиеся с #, будут считаться комментарием.",
"placeholder": "IP-адреса или подсети, разделённые строками",
"label": "Ограничить доступ"
},
@@ -366,7 +372,8 @@
"label": "Привязать пароль",
"description": "Все запросы LDAP должны быть идентифицированы при помощи данного секрета и уникального имени пользователя (DN) {{ userDN }}",
"url": "URL сервера"
- }
+ },
+ "cloudflarePortWarning": "Для доступа к LDAP серверу через домен панели управления проксирование Cloudflare должно быть выключено"
},
"userImportDialog": {
"title": "Импорт пользователей",
@@ -456,7 +463,10 @@
"changeEmail": {
"title": "Изменить главный адрес электронной почты",
"errorEmailInvalid": "Неверный адрес электронной почты",
- "errorEmailRequired": "Требуется действительный адрес электронной почты"
+ "errorEmailRequired": "Требуется действительный адрес электронной почты",
+ "email": "Новый адрес электронной почты",
+ "password": "Пароль для подтверждения",
+ "errorWrongPassword": "Неверный пароль"
},
"changeFallbackEmail": {
"title": "Изменить пароль электронной почты восстановления",
@@ -1190,7 +1200,7 @@
"cloudronId": "Cloudron ID",
"subscriptionEndsAt": "Отменена и завершена",
"subscriptionSetupAction": "Обновить до Premium",
- "subscriptionChangeAction": "Изменить подписку",
+ "subscriptionChangeAction": "Управление подпиской",
"subscriptionReactivateAction": "Реактивировать подписку",
"emailNotVerified": "Электронная почта не подтверждена"
},
@@ -1283,6 +1293,10 @@
"enableAction": "Включить SSH доступ",
"title": "Удалённая поддержка",
"description": "Выберите эту опцию, чтобы позволить сотрудникам поддержки подключиться к Вашему серверу через SSH."
+ },
+ "help": {
+ "title": "Помощь",
+ "description": "Для поддержки и помощи, пожалуйста, воспользуйтесь следующими ресурсами:\n* [Форум Cloudron]({{ forumLink }}) - пожалуйста, задавайте вопросы в соответствующих темах Поддержки или конкретных приложений.\n* [Документация Cloudron & База знаний]({{ docsLink }})\n* [Создание сторонних приложений и API]({{ packagingLink }})\n"
}
},
"system": {
@@ -1307,7 +1321,19 @@
"graphTitle": "Процент",
"graphSubtext": "Отображаются приложения, использующие более {{ threshold }} CPU"
},
- "selectPeriodLabel": "Выберите период"
+ "selectPeriodLabel": "Выберите период",
+ "info": {
+ "platformVersion": "Версия Платформы",
+ "product": "Продукт",
+ "vendor": "Поставщик",
+ "memory": "Память",
+ "uptime": "Аптайм",
+ "activationTime": "Время создания Cloudron",
+ "title": "Информация"
+ },
+ "graphs": {
+ "title": "Графики"
+ }
},
"eventlog": {
"title": "Журнал",
@@ -1467,7 +1493,8 @@
"renameDialog": {
"newName": "Новое имя",
"rename": "Переименовать",
- "title": "Переименовать {{ fileName }}"
+ "title": "Переименовать {{ fileName }}",
+ "reallyOverwrite": "Файл с таким именем уже существует. Хотите перезаписать его?"
},
"chownDialog": {
"newOwner": "Новый владелец",
diff --git a/dashboard/src/views/app.html b/dashboard/src/views/app.html
index cf422bf67..5336ef138 100644
--- a/dashboard/src/views/app.html
+++ b/dashboard/src/views/app.html
@@ -1014,18 +1014,16 @@