diff --git a/dashboard/public/translation/en.json b/dashboard/public/translation/en.json index 5d83fe3d7..311067f69 100644 --- a/dashboard/public/translation/en.json +++ b/dashboard/public/translation/en.json @@ -63,7 +63,10 @@ "groups": "Groups" }, "statusEnabled": "Enabled", - "loadingPlaceholder": "Loading" + "loadingPlaceholder": "Loading", + "platform": { + "startupFailed": "Platform startup failed" + } }, "appstore": { "title": "App Store", diff --git a/dashboard/public/translation/nl.json b/dashboard/public/translation/nl.json index a973c53ea..d737e92e2 100644 --- a/dashboard/public/translation/nl.json +++ b/dashboard/public/translation/nl.json @@ -44,7 +44,8 @@ "edit": "Bewerk", "add": "Toevoegen", "next": "Volgende", - "configure": "Configureer" + "configure": "Configureer", + "restart": "Herstart" }, "rebootDialog": { "title": "Herstart Server", @@ -1074,7 +1075,8 @@ "unlinkDialog": { "title": "Ontkoppel Cloudron.io Account", "description": "Ontkoppel deze Cloudron van het huidige Cloudron.io-account. Het kan daarna gelinkt worden aan een ander account." - } + }, + "expired": "Abonnement verlopen" }, "timezone": { "title": "Systeem tijdzone", diff --git a/dashboard/public/translation/ru.json b/dashboard/public/translation/ru.json index 5a9bfd62e..3778f1346 100644 --- a/dashboard/public/translation/ru.json +++ b/dashboard/public/translation/ru.json @@ -50,7 +50,8 @@ "edit": "Редактировать", "add": "Добавить", "next": "Следующий", - "configure": "Настроить" + "configure": "Настроить", + "restart": "Перезапуск" }, "searchPlaceholder": "Поиск", "multiselect": { @@ -343,13 +344,13 @@ "app": { "uninstallDialog": { "uninstallAction": "Удалить", - "title": "Удалить {{ app }}", + "title": "Удалить приложение", "description": "Удалить \"{{ app }}\" и все его данные?" }, "updates": { "info": { "customAppUpdateInfo": "Для сторонних приложений автообновления недоступны.", - "description": "Название и версия приложения", + "description": "Название & версия приложения", "appId": "ID приложения", "packageVersion": "Версия контейнера", "lastUpdated": "Обновлен", @@ -360,12 +361,12 @@ "description": "Обновления приложения применяются периодически, в соответствии с расписанием обновлений" }, "updates": { - "description": "Cloudron периодически проверяет Магазин приложений на наличие обновлений." + "description": "Cloudron автоматически проверяет Магазин приложений на наличие обновлений. Вы также можете проверить их вручную." } }, "backups": { "backups": { - "description": "Резервные копии - это полные снимки ваших приложений. Вы можете использовать резервные копии для восстановления работы приложения или для его клонирования.", + "description": "Создать полный снимок приложения.", "title": "Резервные копии", "time": "Создан", "downloadConfigTooltip": "Скачать конфигурацию", @@ -377,8 +378,8 @@ "checkIntegrity": "Проверить целостность" }, "import": { - "title": "Импортировать из внешней резервной копии", - "description": "Используйте данную опцию для переноса приложения с другого Cloudron. Другое приложение должно иметь ту же версию контейнера и настройки контроля доступа, что и это." + "title": "Импортировать", + "description": "Импортировать приложение из внешней резервной копии." }, "auto": { "title": "Автоматические резервные копии", @@ -520,7 +521,7 @@ "email": { "from": { "saveAction": "Сохранить", - "enable": "Использовать электронную почту Cloudron для отправки писем", + "enable": "Использовать электронную почту Cloudron для отправки email", "mailboxPlaceholder": "Имя почтового ящика", "title": "Адрес исходящей почты", "disable": "Не настраивайте отправку электронной почты в приложении", @@ -555,7 +556,7 @@ "repair": { "recovery": { "title": "Режим восстановления", - "description": "Чтобы исправить сломанные плагины или неправильно внесённые изменения в конфигурацию, поместите приложение в Режим восстановления.", + "description": "Чтобы исправить сломанные плагины или неправильно внесённые изменения в конфигурацию, поместите приложение в режим восстановления.", "restartAction": "Запустить повторно", "disableAction": "Деактивировать режим восстановления", "enableAction": "Активировать режим восстановления" @@ -608,7 +609,7 @@ "unstableWarning": "Данное обновление является пред-релизным и не может гарантировать полную стабильность. Применяйте его на свой страх и риск." }, "restoreDialog": { - "title": "Восстановить {{ app }}", + "title": "Восстановить приложение", "restoreAction": "Восстановить", "description": "Восстановить \"{{ fqdn }}\" из резервной копии, созданной {{ creationTime }}?", "warning": "Любые данные, созданные между настоящим моментом и последней известной резервной копией будут безвозвратно утеряны. Рекомендуем создать резервную копию текущих данных перед восстановлением.", @@ -616,7 +617,7 @@ "cloneActionOverwrite": "Клонировать и перезаписать DNS" }, "cloneDialog": { - "title": "Клонировать {{ app }}", + "title": "Клонировать приложение", "location": "Расположение", "description": "Используется резервная копия версии v{{ packageVersion }} от {{ creationTime }}" }, @@ -632,11 +633,11 @@ }, "servicesTabTitle": "Службы", "turn": { - "title": "Настроить TURN", + "title": "Автонастройка TURN", "info": "Включите эту опцию, чтобы настроить приложение на использование встроенного TURN сервера. Если отключено, настройки TURN приложения остаются неизменными." }, "redis": { - "title": "Настроить Redis", + "title": "Автонастройка Redis", "info": "Если включено, приложение будет использовать встроенную службу Redis. Если отключено, настройки Redis приложения остаются неизменными." }, "infoTabTitle": "Информация", @@ -653,7 +654,7 @@ "noBackup": "Приложение не имеет резервных копий. Архивирование требует по крайней мере одну резервную копию." }, "archiveDialog": { - "title": "Архивирование {{app}}", + "title": "Архивировать приложение", "description": "Это действие удалит приложение и поместит его последнюю резервную копию от {{date}} в Архив." }, "updateAvailableTooltip": "Доступно обновление", @@ -984,7 +985,8 @@ "unlinkDialog": { "title": "Отвязать Аккаунт Cloudron.io", "description": "Данное действие отвяжет этот Cloudron от действующего аккаунта Cloudron.io. После он может быть привязан к другому аккаунту." - } + }, + "expired": "Подписка истекла" }, "timezone": { "title": "Системный часовой пояс", @@ -1460,7 +1462,7 @@ "title": "Сброс пароля", "resetAction": "Сбросить", "backToLoginAction": "Вернуться к входу в систему", - "usernameOrEmail": "Имя пользователя или адрес электронной почты", + "usernameOrEmail": "Имя пользователя или email", "passwordChanged": { "submitAction": "Отправить" }, @@ -1470,7 +1472,7 @@ }, "newPassword": { "password": "Новый пароль", - "passwordRepeat": "Повторите пароль", + "passwordRepeat": "Повторить пароль", "title": "Установить новый пароль" }, "emailSent": { @@ -1482,7 +1484,7 @@ "openFileManagerActionTooltip": "Файловый менеджер", "addVolumeDialog": { "title": "Добавить том", - "server": "IP сервера или Имя хоста", + "server": "IP сервера / Имя хоста", "remoteDirectory": "Удалённый каталог", "username": "Имя пользователя", "password": "Пароль", @@ -1510,9 +1512,9 @@ "username": "Имя пользователя", "welcomeTo": "Добро пожаловать в", "description": "Пожалуйста, настройте Ваш аккаунт", - "fullName": "Полное Имя", + "fullName": "Полное имя", "password": "Новый пароль", - "passwordRepeat": "Повторите пароль", + "passwordRepeat": "Повторить пароль", "errorPassword": "Пароль должен содержать не менее 8 символов", "errorPasswordNoMatch": "Пароли не совпадают", "setupAction": "Настроить", @@ -1526,7 +1528,7 @@ }, "noUsername": { "title": "Не получается установить аккаунт", - "description": "Аккаунт не может быть без имени пользователя." + "description": "Аккаунт не может быть настроен без имени пользователя." } }, "welcomeEmail": { @@ -1564,12 +1566,12 @@ "title": "Добавить клиента OIDC" }, "client": { - "name": "Имя", + "name": "Имя клиента", "id": "ID Клиента", - "secret": "Секрет", + "secret": "Секрет клиента", "signingAlgorithm": "Метод подписи", "loginRedirectUri": "URLs обратного вызова", - "loginRedirectUriPlaceholder": "URLs адреса, разделённые запятой" + "loginRedirectUriPlaceholder": "URLs, разделённые запятой" }, "description": "Провайдер OpenID Cloudron может быть использован для единого входа во внешние приложения.", "editClientDialog": { @@ -1603,7 +1605,7 @@ }, "backup": { "target": { - "label": "Локация резервных копий", + "label": "Локация", "size": "Размер", "fileCount": "Файлы" }, @@ -1615,7 +1617,7 @@ "site": { "removeDialog": { "description": "Это действие также удалить любые резервные копии, находящиеся в данной локации.", - "title": "Вы точно хотите удалить эту локацию резервных копий?" + "title": "Удалить локацию резервных копий" } } }, @@ -1649,7 +1651,7 @@ }, "externallinks": { "label": "Внешние ссылки", - "description": "Добавляет ярлык на внешние сервисы в панель управления." + "description": "Добавляет ярлык на внешние сервисы в панель управления" }, "server": { "title": "Сервер" diff --git a/dashboard/src/components/Headerbar.vue b/dashboard/src/components/Headerbar.vue index d63528845..00c3f4064 100644 --- a/dashboard/src/components/Headerbar.vue +++ b/dashboard/src/components/Headerbar.vue @@ -7,12 +7,12 @@ const t = i18n.t; import { onMounted, onUnmounted, ref, useTemplateRef, inject } from 'vue'; import { marked } from 'marked'; import { eachLimit } from 'async'; -import { Button, Popover, Icon, Spinner } from '@cloudron/pankow'; +import { Button, Popover, Icon, InputDialog, Spinner } from '@cloudron/pankow'; import { prettyDate, prettyLongDate } from '@cloudron/pankow/utils'; import NotificationsModel from '../models/NotificationsModel.js'; import ServicesModel from '../models/ServicesModel.js'; -const props = defineProps(['config', 'subscription']); +defineProps(['config', 'subscription']); const profile = inject('profile'); @@ -98,6 +98,15 @@ async function trackPlatformStatus() { if (result.state === 'starting') platformTimeoutId = setTimeout(trackPlatformStatus, 5000); } +const inputDialog = useTemplateRef('inputDialog'); +function onShowPlatformError() { + inputDialog.value.info({ + confirmLabel: t('main.dialog.close'), + title: t('main.platform.startupFailed'), + message: platformStatus.value.message, + }); +} + const description = marked.parse(t('support.help.description', { docsLink: 'https://docs.cloudron.io', packagingLink: 'https://docs.cloudron.io/packaging/tutorial', @@ -119,6 +128,7 @@ onUnmounted(() => {