diff --git a/dashboard/public/translation/en.json b/dashboard/public/translation/en.json index 38cd58dab..b649aa12f 100644 --- a/dashboard/public/translation/en.json +++ b/dashboard/public/translation/en.json @@ -1711,7 +1711,7 @@ }, "taskError": { "title": "Task Error", - "description": "If a configuration, update, restore or backup action resulted in an error, you can retry the task.", + "description": "If an installation, configuration, update, restore or backup action resulted in an error, you can retry the task.", "retryAction": "Retry {{ task }} task" }, "appIsBusyTooltip": "App is busy" diff --git a/dashboard/public/translation/pt.json b/dashboard/public/translation/pt.json index 239394ce6..7d5bba497 100644 --- a/dashboard/public/translation/pt.json +++ b/dashboard/public/translation/pt.json @@ -443,7 +443,10 @@ "mailmanager": "Gestor de E-mails e Utilizadores" }, "transferOwnershipDialog": { - "newOwner": "Novo Proprietário" + "newOwner": "Novo Proprietário", + "title": "Deseja transferir a propriedade?", + "transferAction": "Transferir Propriedade", + "description": "Isto tornará o utilizador selecionado o proprietário e o administrador deste Cloudron e removerá os direitos de administrador do proprietário atual." }, "setGhostDialog": { "password": "Palavra-passe", @@ -836,7 +839,12 @@ "subscriptionChangeAction": "Gerir Subscrição", "subscriptionReactivateAction": "Reativar Subscrição", "emailNotVerified": "E-mail ainda não foi verificado", - "subscriptionSetupAction": "Atualizar para Premium" + "subscriptionSetupAction": "Atualizar para Premium", + "resetDialog": { + "title": "Deseja redefinir a Id. do Cloudron", + "description": "Isto desligará o Cloudron da conta Cloudron.io atual." + }, + "resetAction": "Reiniciar Registo" }, "updates": { "checkForUpdatesAction": "Procurar por Atualizações", diff --git a/dashboard/public/translation/ru.json b/dashboard/public/translation/ru.json index b437a6759..25c4ef357 100644 --- a/dashboard/public/translation/ru.json +++ b/dashboard/public/translation/ru.json @@ -15,7 +15,7 @@ "description": "После открытия доступа приложения отобразятся здесь.", "title": "У Вас ещё нет доступа к каким-либо приложениям." }, - "configActionTooltip": "Настройки", + "configActionTooltip": "Конфигурация", "logsActionTooltip": "Логи", "infoActionTooltip": "Подробнее", "adminPageActionTooltip": "Панель администратора", @@ -148,7 +148,7 @@ "lowOnResources": "Недостаточно системных ресурсов.", "subscriptionRequired": "Для установки дополнительных приложений требуется платная подписка.", "setupSubscriptionAction": "Настроить подписку", - "manualWarning": "Вручную добавьте A запись для {{ location }}, указав публичный IP Вашего Cloudron", + "manualWarning": "Вручную добавьте A (IPv4) и AAAA (IPv6) запись DNS для {{ location }}, указав публичный IP вашего сервера", "userManagementMailbox": "Все пользователи этого Cloudron с почтовым ящиком имеют доступ.", "installAction": "Установить", "titleAndVersion": "Приложение {{ title }} {{ version }}", @@ -524,10 +524,10 @@ }, "enable2FANotAvailable": "Недоступно для пользователей из удалённых источников", "removeApiToken": { - "title": "Вы точно хотите удалить этот токен?" + "title": "Вы точно хотите удалить токен {{ name }}?" }, "removeAppPassword": { - "title": "Вы точно хотите удалить этот пароль?" + "title": "Вы точно хотите удалить пароль {{ name }}?" } }, "app": { @@ -602,7 +602,8 @@ "saveAction": "Сохранить", "aliases": "Псевдонимы", "addAliasAction": "Добавить псевдоним", - "noAliases": "Не настроено ни одного домена-псевдонима." + "noAliases": "Не настроено ни одного домена-псевдонима.", + "dnsoverwrite": "Некоторые DNS записи уже существуют. Подтвердите перезапись." }, "accessControl": { "sftp": { @@ -724,7 +725,9 @@ "7d": "7 дней", "30d": "30 дней", "24h": "24 часа", - "6h": "6 часов" + "6h": "6 часов", + "live": "Онлайн", + "1h": "1 час" }, "memoryTitle": "Память (RAM + Swap) в МБ", "diskTitle": "Использование диска", @@ -869,12 +872,14 @@ "turn": { "title": "Настроить TURN", "enable": "Настроить использование встроенного TURN сервера в приложении", - "disable": "Не настраивать TURN сервер для данного приложения. Вы можете настроить его самостоятельно внутри самого приложения." + "disable": "Не настраивать TURN сервер для данного приложения. Вы можете настроить его самостоятельно внутри самого приложения.", + "info": "Включите эту опцию, чтобы настроить приложение на использование встроенного TURN сервера. Если отключено, настройки TURN приложения остаются неизменными." }, "redis": { "title": "Настроить Redis", "enable": "Настроить использование Redis в приложении", - "disable": "Отключить Redis" + "disable": "Отключить Redis", + "info": "Если включено, приложение будет использовать встроенную службу Redis. Если отключено, настройки Redis приложения остаются неизменными." }, "infoTabTitle": "Информация", "info": { @@ -893,7 +898,8 @@ "title": "Архивирование {{app}}", "description": "Это действие удалит приложение и поместит его последнюю резервную копию от {{date}} в Архив." }, - "updateAvailableTooltip": "Доступно обновление" + "updateAvailableTooltip": "Доступно обновление", + "configureTooltip": "Настроить" }, "backups": { "location": { @@ -1045,7 +1051,7 @@ } }, "branding": { - "title": "Брендинг", + "title": "Внешний вид", "cloudronName": "Имя Cloudron", "logo": "Логотип", "footer": { @@ -1099,8 +1105,8 @@ "bounce": "Возвращено", "spamFilterTrained": "Спам фильтр обучен", "deferredInfo": "Ошибка доставки, повторная попытка через {{ delay }}сек.", - "inboundInfo": "Получено", - "outboundInfo": "Поставлен в очередь на доставку", + "inboundInfo": "Поставлено во входящую очередь", + "outboundInfo": "Поставлено в исходящую очередь", "outgoing": "Исходящие", "incoming": "Входящие", "deferred": "Отсрочено", @@ -1109,7 +1115,9 @@ "spamFilterTrainedInfo": "Спам фильтр обучен с использованием содержимого почтового ящика", "overQuotaInfo": "Почтовый ящик {{ mailbox }} использует {{ quotaPercent }}% квоты", "underQuotaInfo": "Почтовый ящик {{ mailbox }} превысил квоту на {{ quotaPercent }}%", - "quota": "Квота почтового ящика" + "quota": "Квота почтового ящика", + "sentInfo": "Отправлено", + "savedInfo": "Сохранено" }, "searchPlaceholder": "Поиск", "from": "От", @@ -1121,7 +1129,7 @@ "description": "Данное действие перенесёт IMAP и SMTP сервер в указанное расположение.", "location": "Расположение", "locationPlaceholder": "Оставьте пустым, чтобы использовать основной домен", - "manualInfo": "Вручную добавьте A запись для {{ domain }}, указав публичный IP Вашего Cloudron" + "manualInfo": "Вручную добавьте A (IPv4) и AAAA (IPv6) DNS запись для {{ domain }}, указав публичный IP вашего сервера" }, "changeMailSizeDialog": { "title": "Изменить максимальный размер письма", @@ -1251,7 +1259,7 @@ "refresh": "Обновить" }, "settings": { - "title": "Настройки", + "title": "Система", "appstoreAccount": { "title": "Учётная запись Cloudron.io", "description": "Учётная запись Cloudron.io открывает доступ к Магазину приложений и управлению подпиской.", @@ -1263,7 +1271,12 @@ "subscriptionSetupAction": "Обновить до Premium", "subscriptionChangeAction": "Управление подпиской", "subscriptionReactivateAction": "Реактивировать подписку", - "emailNotVerified": "Электронная почта не подтверждена" + "emailNotVerified": "Электронная почта не подтверждена", + "resetDialog": { + "title": "Полностью сбросить Cloudron ID", + "description": "Это действие отвяжет настоящий аккаунт cloudron.io от данного Cloudron." + }, + "resetAction": "Сбросить регистрацию" }, "timezone": { "title": "Системный часовой пояс", @@ -1290,7 +1303,8 @@ "username": "Имя пользователя", "configureAction": "Настроить реестр", "serverNotSet": "Не настроено", - "usernameNotSet": "Не настроено" + "usernameNotSet": "Не настроено", + "deleteQuestion": "Вы действительно хотите удалить этот реестр?" }, "privateDockerRegistryDialog": { "title": "Настройка частного реестра", @@ -1379,7 +1393,7 @@ "graphSubtext": "Отображаются приложения, использующие более {{ threshold }} памяти" }, "cpuUsage": { - "title": "Использование CPU", + "title": "CPU", "graphTitle": "Процент", "graphSubtext": "Отображаются приложения, использующие более {{ threshold }} CPU" }, @@ -1395,6 +1409,9 @@ }, "graphs": { "title": "Графики" + }, + "locale": { + "title": "Настройки локализации" } }, "eventlog": { @@ -1457,7 +1474,7 @@ "addDescription": "Добавление домена даст возможность устанавливать приложения на его поддомены. Настроить электронную почту для выбранного домена можно в специальном разделе.", "linodeToken": "Токен Linode", "namecheapInfo": "IP-адрес сервера должен быть разрешён для этого ключа API.", - "wildcardInfo": "Настройте A записи для *.{{ domain }}. и {{ domain }}. на IP-адрес данного сервера.", + "wildcardInfo": "Вручную настройте A (IPv4) и AAAA (IPv6) DNS записи для *.{{ domain }}. и {{ domain }}. на IP-адрес данного сервера", "fallbackCert": "Резервный сертификат (необязательно)", "fallbackCertCustomCert": "Сторонний сертификат", "fallbackCertCustomCertInfo": "Этот wildcard-сертификат будет использоваться для всех приложений на данном домене. В случае его отсутствия будет использован автоматически сгенерированный самоподписанный сертификат.", @@ -1522,11 +1539,12 @@ "certificateRenewalFailed": "Сбой обновления сертификата", "appOutOfMemory": "Приложению не хватило памяти", "appUp": "Приложение снова в онлайне", - "appDown": "Приложение не работает" + "appDown": "Приложение не работает", + "diskSpace": "Мало места на диске" }, "allCaughtUp": "Уведомления отсутствуют", "settingsDialog": { - "description": "Здесь вы можете управлять вашими личными настройками уведомлений. Cloudron будет отправлять электронные письма для выбранных событий на главный адрес электронной почты." + "description": "Для выбранных событий будут отправляться уведомления на главный адрес электронной почты." } }, "logs": { @@ -1769,7 +1787,7 @@ "title": "Подпись", "subscriptionRequired": "Данная функция доступна только в платной подписке. Настроить подписку", "plainTextFormat": "Обычный текст", - "htmlFormat": "Текст HTML (Необязательно)", + "htmlFormat": "Формат HTML", "saveAction": "Сохранить", "description": "Данный текст будет прикреплён ко всем письмам, отправляемым с выбранного домена." }, @@ -1779,7 +1797,9 @@ "smtpStatus": { "title": "Статус SMTP", "notBlacklisted": "IP-адрес сервера {{ ip }} не обнаружен в списках заблокированных.", - "blacklisted": "IP-адрес сервера {{ ip }} обнаружен в списке заблокированных." + "blacklisted": "IP-адрес сервера {{ ip }} обнаружен в списке заблокированных.", + "outboundSmtp": "Исходящий SMTP", + "rblCheck": "Проверка чёрного списка DNS" }, "subscriptionDialog": { "title": "Требуется подписка", @@ -2036,5 +2056,10 @@ "authEndpoint": "Конечная точка аутентификации" } }, - "automation": "Автоматизация" + "automation": "Автоматизация", + "userdirectory": { + "settings": { + "title": "Настройки" + } + } } diff --git a/dashboard/public/translation/vi.json b/dashboard/public/translation/vi.json index 290a76092..2c31fb8ca 100644 --- a/dashboard/public/translation/vi.json +++ b/dashboard/public/translation/vi.json @@ -1122,7 +1122,7 @@ "uninstalledApp": "App đã xoá", "diskSpeed": "Tốc độ: {{ speed }} MB/s" }, - "title": "Chỉ số đo lường", + "title": "Hệ thống", "info": { "activationTime": "Ngày tạo Cloudron", "platformVersion": "Phiên bản hệ thống", @@ -1247,7 +1247,12 @@ "setupAction": "Cài đặt tài khoản", "description": "Tài khoản Cloudron.io được dùng để truy cập Cửa hàng App và quản lý gói đăng ký.", "title": "Tài khoản Cloudron.io", - "emailNotVerified": "Địa chỉ email chưa được xác minh" + "emailNotVerified": "Địa chỉ email chưa được xác minh", + "resetDialog": { + "title": "Chắc chắn cài đặt lại Cloudron ID", + "description": "Việc này sẽ ngắt kết nối Cloudron khỏi tài khoản cloudron.io hiện tại." + }, + "resetAction": "Cài đặt lại Đăng ký" }, "title": "Hệ thống" }, @@ -1829,7 +1834,7 @@ }, "uninstallDialog": { "uninstallAction": "Xoá", - "description": "Lựa chọn này sẽ ngay lập tức xoá app {{ app }} và xoá toàn bộ dữ liệu trong đó.", + "description": "Lựa chọn này sẽ xoá {{ app }} và xoá toàn bộ dữ liệu trong đó.", "title": "Xoá {{ app }}" }, "stopDialog": { @@ -1898,7 +1903,9 @@ "archiveDialog": { "title": "Lưu trữ {{app}}", "description": "Việc này sẽ xóa app và đặt bản sao lưu app mới nhất được tạo ra lúc {{date}} trong Kho lưu trữ App." - } + }, + "updateAvailableTooltip": "Có phiên bản cập nhật mới", + "configureTooltip": "Cấu hình" }, "volumes": { "name": "Tên volume", @@ -2049,5 +2056,10 @@ "tokenEndpoint": "Điểm cuối token" } }, - "automation": "Tự động hoá" + "automation": "Tự động hoá", + "userdirectory": { + "settings": { + "title": "Cài đặt" + } + } } diff --git a/dashboard/src/views/AppConfigureView.vue b/dashboard/src/views/AppConfigureView.vue index f6ae721de..e4594c64f 100644 --- a/dashboard/src/views/AppConfigureView.vue +++ b/dashboard/src/views/AppConfigureView.vue @@ -52,6 +52,12 @@ const isAppStopped = computed(() => { }); function onSetView(newView) { + if (!isViewEnabled(newView, app.value.error?.details?.installationState)) { + currentView.value = 'info'; + window.location.hash = `/app/${id.value}/info`; + return; + } + currentView.value = newView; window.location.hash = `/app/${id.value}/${newView}`; } @@ -151,16 +157,18 @@ async function refresh() { function isViewEnabled(view, errorState) { if (!errorState) return true; - if (view === 'info' - || view === 'display' - || view === 'uninstall' + if (view === 'info' || view === 'uninstall' || view === 'eventlog') return true; + + if (errorState === ISTATES.PENDING_INSTALL) return view === 'repair'; + if (errorState === ISTATES.PENDING_UNINSTALL) return false; + + if (view === 'display' || view === 'backups' || view === 'access' || view === 'proxy' || view === 'graphs' || view === 'security' || view === 'cron' - || view === 'eventlog' ) return true; if (view === 'location') {