# базовые ошибки ErrInvalidParams: 'Неверный запрос: {{ .detail }}' ErrMcpGatewayArgsParse: 'Неверный формат пользовательских аргументов MCP' ErrMcpGatewayArgsConflict: 'Аргумент {{ .name }} управляется 1Panel и не может быть задан в пользовательских аргументах' ErrTokenParse: 'Ошибка токена: {{ .detail }}' ErrInitialPassword: 'Исходный пароль неверен' ErrInternalServer: 'Внутренняя ошибка: {{ .detail }}' ErrRecordExist: 'Запись уже существует' ErrRecordNotFound: 'Запись не найдена' WafLogExport: 'Экспорт журналов WAF' MonitorLogExport: 'Экспорт журналов мониторинга веб-сайтов' LogExportNoData: 'Нет журналов, соответствующих выбранным фильтрам' LogExportDiskSpace: 'Доступно менее 1 GiB; экспорт остановлен' LogExportRetentionInvalid: 'Срок хранения истории экспорта должен быть от 1 до 30 дней' ErrSystemLogKeywordFilterUnsupported: 'Текущая версия системы не поддерживает фильтрацию системных журналов по ключевым словам (требуется systemd 237 или новее)' ErrStructTransform: 'Ошибка преобразования: {{ .err }}' ErrNotSupportType: 'Тип не поддерживается: {{ .name }}' # файловый AI ErrFileAINotEnabled: 'Поиск с AI в файлах выключен или не выбран аккаунт. В управлении файлами откройте «AI-аккаунт», включите и выберите аккаунт.' ErrFileAISearchBadPattern: 'Недопустимый шаблон поиска (regex и т.п.): {{ .detail }}' FileAISearchEmptyDir: 'В этом пути нет файлов или каталогов для отображения (или все отфильтрованы).' # удаленная загрузка ErrWgetRemoteFailed: 'Неверный или недоступный URL удалённой загрузки: {{ .detail }}' ErrWgetInvalidContentType: 'Удалённый сервер вернул не файл (возможно, страницу ошибки), {{ .detail }}' ErrWgetProxyNotConfigured: 'Сначала настройте прокси-сервер в настройках панели' ErrWgetProxyInvalid: 'Недопустимый адрес прокси-сервера: {{ .detail }}' # вход и безопасность ErrNotLogin: 'Не авторизован: {{ .detail }}' ErrPasswordExpired: 'Пароль истёк: {{ .detail }}' # запрос и API ErrProxy: 'Запрос не удался: {{ .detail }}' ErrApiConfigStatusInvalid: 'API отключено: {{ .detail }}' ErrApiConfigKeyInvalid: 'Неверный API-ключ: {{ .detail }}' ErrApiConfigIPInvalid: 'IP не в списке: {{ .detail }}' ErrApiConfigDisable: 'Доступ по API запрещён: {{ .detail }}' ErrApiConfigKeyTimeInvalid: 'Неверная метка времени: {{ .detail }}' ErrCreateHttpClient: 'Не удалось создать запрос {{ .err }}' ErrHttpReqTimeOut: 'Истекло время ожидания запроса {{ .err }}' ErrHttpReqFailed: 'Запрос не выполнен {{ .err }}' ErrNoSuchHost: 'Не удалось найти запрошенный сервер {{ .err }}' ErrHttpReqNotFound: 'Запрошенный ресурс {{ .err }} не найден' # быстрый переход ErrMinQuickJump: 'Добавьте хотя бы одну быструю ссылку' ErrMaxQuickJump: 'Не более 4 быстрых ссылок' # общее ErrShutDown: 'Команда остановлена вручную' ErrUsernameIsExist: 'Имя пользователя занято' ErrNameIsExist: 'Имя уже занято' ErrDemoEnvironment: 'Недоступно в демо' ErrCmdTimeout: 'Команда завершилась по тайм-ауту' ErrCmdIllegal: 'Команда содержит недопустимые символы' ErrPortExist: 'Порт {{ .port }} занят {{ .type }} [{{ .name }}]' TYPE_APP: 'Приложение' TYPE_RUNTIME: 'Среда выполнения' TYPE_DOMAIN: 'Доменное имя' ErrTypePort: 'Формат порта {{ .name }} неверен' ErrTypePortRange: 'Диапазон портов должен быть в пределах 1-65535' Success: 'Успех' Failed: 'Не удалось' SystemRestart: 'Задача прервана из-за перезапуска системы' ErrGroupIsDefault: 'Группа по умолчанию, не может быть удалена' ErrGroupIsInWebsiteUse: 'Группа используется другим веб-сайтом и не может быть удалена.' Decrypt: 'Расшифровать' # агент ErrAgentAccountBound: 'Акаунт привязан к агенту' ErrTerminalAIAccountInUse: 'Эта учетная запись модели сейчас используется Terminal AI. Смените учетную запись в настройках Terminal AI или отключите Terminal AI и повторите попытку.' ErrFileAIAccountInUse: 'Эта учетная запись модели используется ИИ файлового менеджера. Смените учетную запись в его настройках или отключите ИИ и повторите попытку.' ErrAgentAccountUnavailable: 'Связь с аккаунтом недоступна: {{ .err }}' ErrAgentProviderNotSupported: 'Провайдер агента не поддерживается' ErrAgentAccountRequired: 'Выберите аккаунт агента' ErrAgentAccountNotVerified: 'Аккаунт не подтверждён' ErrAgentAccountModelsRequired: 'Настройте хотя бы одну модель' ErrAgentAccountSingleInitialModel: 'При создании аккаунта можно указать только одну начальную модель' ErrAgentModelNotInAccount: 'Модель не настроена в выбранном аккаунте' ErrAgentVerifyModelInUse: 'Эта модель используется для проверки аккаунта. Перед удалением выберите другую модель проверки' ErrAgentFallbackModelDuplicate: 'Резервные модели не могут дублироваться' ErrAgentFallbackModelPrimary: 'Резервная модель не может совпадать с основной' ErrAgentModelInUse: 'Эта модель всё ещё используется агентом: {{ .name }}' ErrAgentBaseURLRequired: 'Нужен базовый URL' ErrAgentApiKeyRequired: 'Нужен API-ключ' ErrAgentComposeRequired: 'Нужен compose' ErrAgentIDRequired: 'Нужен ID агента' ErrAgentAccountIDRequired: 'Нужен ID аккаунта' ErrAgentLimitReached: 'Community Edition поддерживает до {{ .max }} AI-агентов. Обновитесь до Business Edition, чтобы использовать их без ограничений' ErrAgentWebsiteBound: 'Этот агент уже связан с сайтом' ErrAgentWebsiteTypeUnsupported: 'Можно связывать только proxy- или static-сайты' ErrAgentWebsiteInUse: 'Этот сайт уже связан с другим агентом' ErrAgentWebsiteUnbindUnsupported: 'Сайты one-click deployment нельзя отвязать вручную' ErrQwenPawAuthRequest: 'Не удалось обновить учетные данные QwenPaw: {{ .err }}' ErrQwenPawAuthOutOfSync: 'Текущие учетные данные QwenPaw не совпадают с записью 1Panel. Сбросьте пароль QwenPaw или восстановите учетные данные в файле .env приложения' ErrQwenPawAuthDisabled: 'В QwenPaw не включена аутентификация при входе' ErrHermesPairingCodeUnavailable: 'Код сопряжения временно недоступен в Hermes, возможно из-за проблем с сетью. Повторите попытку позже.' ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Когда групповая политика Feishu — белый список, политика личных сообщений не может быть кодом сопряжения.' # резервное копирование и настройки оповещений Localhost: 'Локальная машина' ErrBackupInUsed: 'Аккаунт бэкапа занят задачей' ErrBackupCheck: 'Проверка подключения не удалась: {{ .err }}' ErrBackupLocalDelete: 'Нельзя удалить локальные бэкапы' ErrBackupLocalCreate: 'Нельзя создать локальные бэкапы' ErrAlertConfigInUse: 'Конфигурация оповещений используется и не может быть удалена' ErrAlertConfigPhoneExist: 'Номер телефона уже существует' # приложение ErrPortInUsed: '{{ .detail }} порт уже занят' ErrAppLimit: 'Количество установленных приложений превысило лимит' ErrNotInstall: 'Приложение не установлено' ErrPortInOtherApp: 'Порт {{ .port }} уже занят приложением {{ .apps }}' ErrDbUserNotValid: 'Существующая база данных, имя пользователя и пароль не совпадают' ErrMysqlUserUsedByApps: 'Этот пользователь базы данных используется приложениями [{{ .detail }}]; его хост нельзя изменить, а самого пользователя нельзя удалить или лишить прав' ErrUpdateBuWebsite: 'Приложение успешно обновлено, но изменение файла конфигурации веб-сайта не удалось. Пожалуйста, проверьте конфигурацию' Err1PanelNetworkFailed: 'Создание сети контейнеров по умолчанию не удалось {{ .detail }}' ErrFileParse: 'Ошибка анализа файла docker-compose приложения' ErrInstallDirNotFound: 'Каталог установки не существует. Если вам необходимо удалить, выберите Принудительное удаление.' AppStoreIsUpToDate: 'В магазине приложений уже установлена последняя версия' LocalAppVersionNull: 'Приложение {{ .name }} не синхронизировано с версией Невозможно добавить в список приложений.' LocalAppVersionErr: 'Синхронизация версии {{ .version }} {{ .name }} не удалась {{ .err }}' ErrFileNotFound: 'Файл {{ .name }} не существует' ErrFileParseApp: '{{ .name }} анализ файла не удался {{ .err }}' ErrAppDirNull: 'Папка версии не существует' LocalAppErr: 'Синхронизация приложения {{ .name }} не удалась {{ .err }}' ErrContainerName: 'Имя контейнера уже существует' ErrContainerNotFound: 'Контейнер {{ .name }} не существует' ErrContainerMsg: 'Контейнер {{ .name }} ненормален. Подробности смотрите в журнале на странице контейнера.' ErrAppBackup: '{{ .name }} резервное копирование приложения не удалось {{ .err }}' ErrVersionTooLow: 'Текущая версия 1Panel слишком низкая для обновления App Store. Пожалуйста, обновите версию перед началом работы.' ErrAppNameExist: 'Имя приложения уже существует' ErrAppInstallNameExist: 'Имя установки приложения {{ .name }} уже существует' AppStoreIsSyncing: 'App Store синхронизируется, повторите попытку позже' ErrGetCompose: 'Не удалось получить файл docker-compose.yml {{ .detail }}' ErrComposeProjectNameParse: 'Не удалось определить имя проекта из вывода конфигурации Docker Compose: {{ .detail }}' ErrComposeProjectNameEmpty: 'Не удалось получить имя проекта из конфигурации Docker Compose или родительского каталога файла. Введите имя и повторите попытку.' ErrComposeNameInvalid: 'Недопустимое имя проекта Compose: оно должно начинаться со строчной буквы или цифры, содержать только строчные буквы, цифры, дефисы и подчёркивания и иметь длину от 1 до 256 символов.' ErrAppVersionUnavailable: 'Эта версия приложения удалена из удаленного сервиса. Выберите другую версию и повторите попытку.' ErrAppWarn: 'Ненормальное состояние, проверьте журнал' ErrAppParamKey: 'Поле параметра {{ .name }} ненормально' ErrAppUpgrade: 'Обновление приложения {{ .name }} не удалось {{ .err }}' AppRecover: 'Откатить приложение {{ .name }}' PullImageStart: 'Начать извлечение изображения [{{ .name }}]' PullImageSuccess: 'Изображение извлечено успешно' AppStoreSyncSuccess: 'Синхронизация с App Store прошла успешно' SyncAppDetail: 'Синхронизировать конфигурацию приложения' AppVersionNotMatch: 'Приложению {{ .name }} требуется более высокая версия 1Panel, синхронизация пропускается' MoveSiteDir: 'Обнаружено изменение каталога сайта. Необходимо перенести каталог сайта OpenResty в {{ .name }}' MoveSiteDirSuccess: 'Успешная миграция каталога веб-сайта' DeleteRuntimePHP: 'Удалить среду выполнения PHP' CustomAppStoreFileValid: 'Пакеты магазина приложений должны быть в формате.tar.gz' PullImageTimeout: 'Истекло время ожидания извлечения изображения. Попробуйте увеличить ускорение изображения или выбрать другое ускорение изображения' ErrAppIsDown: '{{ .name }} статус приложения ненормальный, проверьте' ErrCustomApps: 'Установлено приложение. Сначала удалите его' ErrCustomRuntimes: 'Установлена среда выполнения. Сначала удалите ее' ErrAppVersionDeprecated: 'Приложение {{ .name }} несовместимо с текущей версией 1Panel, пропущено' ErrDockerFailed: 'Состояние Docker аномально, проверьте состояние сервиса' ErrDockerComposeCmdNotFound: 'Команда Docker Compose отсутствует, пожалуйста, установите эту команду на хост-машине сначала' UseExistImage: 'Образ уже существует, используется существующий образ' UpgradePrepare: 'Подготовка обновления приложения' UpgradeStop: 'Остановка исходного приложения' UpgradeWaitReady: 'Ожидание готовности приложения' UpgradeBackupDisabled: 'Резервная копия обновления отключена; изменения данных из сценариев обновления нельзя полностью откатить' UpgradeRollbackFailed: 'Ошибка отката' ErrDatabaseNotFound: 'База данных {{ .name }} не существует' # SSH ExportIP: 'IP входа' ExportArea: 'Местоположение' ExportPort: 'Порт' ExportAuthMode: 'Способ входа' ExportUser: 'Пользователь' ExportStatus: 'Статус входа' ExportDate: 'Время' # файл ErrFileCanNotRead: 'Этот файл не поддерживает предварительный просмотр' ErrSensitiveFileRead: 'Чтение конфиденциальных файлов запрещено' ErrFileToLarge: 'Файл больше 10 МБ и не может быть открыт' ErrPathNotFound: 'Каталог не существует' ErrMovePathFailed: 'Целевой путь не может содержать исходный путь' ErrLinkPathNotFound: 'Целевой путь не существует' ErrFileIsExist: 'Файл или папка уже существует' ErrFileUpload: '{{ .name }} не удалось загрузить файл {{ .detail }}' ErrFileDownloadDir: 'Папка загрузки не поддерживается' ErrFileSharePath: 'Неверный путь или цель не является файлом' ErrFileShareInvalid: 'Недействительная или просроченная ссылка' ErrFileShareExpired: 'Срок действия ссылки истёк' ErrFileSharePassword: 'Неверный пароль доступа' ErrFileShareExhausted: 'Лимит скачиваний по этой ссылке исчерпан' ErrFileSharePasswordPolicy: 'Пароль должен содержать не менее 4 символов' ErrFileShareRateLimit: 'Слишком много запросов, попробуйте позже' ErrCmdNotFound: 'Команда {{ .name }} не существует, сначала установите эту команду на хосте' ErrSourcePathNotFound: 'Исходный каталог не существует' ErrFavoriteExist: 'Этот путь уже добавлен в избранное' ErrInvalidChar: 'Недопустимые символы не допускаются' ErrPathNotDelete: 'Выбранный каталог не может быть удален' ErrLogFileToLarge: 'Файл журнала превышает 500MB и не может быть открыт' FileDropFailed: 'Не удалось очистить файл {{ .name }}: {{ .err }}' FileDropSuccess: 'Файл {{ .name }} успешно очищен, удалено {{ .count }} файлов, освобождено {{ .size }} дискового пространства' FileDropSum: 'Очистка файлов завершена успешно, всего удалено {{ .count }} файлов, освобождено {{ .size }} дискового пространства' ErrBadDecrypt: 'Ошибка пароля расшифровки сжатого пакета, распаковка не удалась, проверьте и повторите попытку' # сайт ErrAliasIsExist: 'Псевдоним уже существует' ErrBackupMatch: 'Файл резервной копии не соответствует некоторым текущим данным веб-сайта {{ .detail }}' ErrBackupExist: 'Соответствующая часть исходных данных в файле резервной копии не существует {{ .detail }}' ErrPHPResource: 'Локальная операционная среда не поддерживает переключение' ErrPathPermission: 'В каталоге index обнаружена папка с разрешениями, отличными от 1000:1000, что может привести к ошибке Отказано в доступе на веб-сайте. Пожалуйста, нажмите кнопку Сохранить выше.' ErrDomainIsUsed: 'Доменное имя уже используется веб-сайтом [{{ .name }}]' ErrDomainFormat: 'Неверный формат доменного имени {{ .name }}' ErrDefaultAlias: 'по умолчанию зарезервирован код, используйте другой код' ErrParentWebsite: 'Сначала вам необходимо удалить дочерний сайт {{ .name }}' ErrBuildDirNotFound: 'Каталог сборки не существует' ErrImageNotExist: 'Образ операционной среды {{ .name }} не существует, пожалуйста, отредактируйте операционную среду заново' ErrProxyIsUsed: 'Балансировка нагрузки используется обратным прокси, невозможно удалить' ErrSSLValid: 'Файл сертификата аномален, проверьте статус сертификата' ErrWebsiteDir: 'Пожалуйста, выберите директорию внутри директории сайта.' ErrComposerFileNotFound: 'Файл composer.json не существует' ErrRuntimeNoPort: 'Среда выполнения не настроена с портом, сначала отредактируйте среду выполнения.' ErrRuntimeProjectDirContainsCodeDir: 'Каталог среды выполнения содержит выбранный каталог проекта. Выберите другой каталог проекта и создайте его заново.' Status: 'Статус' start: 'Запустить' stop: 'Остановить' restart: 'Перезапустить' kill: 'Принудительно Остановить' pause: 'Приостановить' unpause: 'Возобновить' remove: 'Удалить' delete: 'Удалить' ErrDefaultWebsite: 'Веб-сайт по умолчанию уже установлен, отмените его перед настройкой' SSL: 'Сертификат' Set: 'Настройки' # SSL-сертификат ErrSSLCannotDelete: 'Сертификат {{ .name }} используется веб-сайтом и не может быть удален' ErrAccountCannotDelete: 'Учетная запись связана с сертификатом и не может быть удалена' ErrSSLApply: 'Обновление сертификата прошло успешно, перезагрузка OpenResty не удалась, проверьте конфигурацию' ErrEmailIsExist: 'Почтовый ящик уже существует' ErrSSLKeyNotFound: 'Файл закрытого ключа не существует' ErrSSLCertificateNotFound: 'Файл сертификата не существует' ErrSSLKeyFormat: 'Проверка файла закрытого ключа не удалась' ErrSSLCertificateFormat: 'Неверный формат файла сертификата, используйте формат pem' ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid или EabHmacKey не могут быть пустыми' ErrOpenrestyNotFound: 'Для режима HTTP требуется OpenResty' ApplySSLStart: 'Начать подачу заявки на сертификат, доменное имя [{{ .domain }}], метод подачи заявки [{{ .type }}]' dnsAccount: 'DNS Авто' dnsManual: 'Руководство по DNS' http: 'HTTP' ApplySSLFailed: 'Заявка на сертификат [{{ .domain }}] не выполнена, {{ .detail }}' ApplySSLSuccess: 'Заявка на сертификат [{{ .domain }}] успешно подана' DNSAccountName: 'DNS-аккаунт [{{ .name }}] поставщик [{{ .type }}]' PushDirLog: 'Сертификат перемещен в каталог [{{ .path }}] {{ .status }}' ErrDeleteCAWithSSL: 'Текущая организация имеет сертификат, который был выдан и не может быть удален.' ErrDeleteWithPanelSSL: 'Конфигурация SSL панели использует этот сертификат и не может быть удалена' ErrDefaultCA: 'Невозможно удалить полномочия по умолчанию' ApplyWebSiteSSLLog: 'Начинается обновление сертификата веб-сайта {{ .name }}' ErrUpdateWebsiteSSL: 'Обновление сертификата веб-сайта {{ .name }} не удалось: {{ .err }}' ApplyWebSiteSSLSuccess: 'Сертификат веб-сайта успешно обновлен' ErrExecShell: 'Не удалось выполнить скрипт {{ .err }}' ExecShellStart: 'Начать выполнение скрипта' ExecShellSuccess: 'Скрипт выполнен успешно' StartUpdateSystemSSL: 'Начать обновление системного сертификата' UpdateSystemSSLSuccess: 'Сертификат системы обновлен успешно' ErrWildcardDomain: 'Невозможно подать заявку на получение подстановочного сертификата доменного имени в режиме HTTP' ErrApplySSLCanNotDelete: 'Нельзя удалить сертификат {{ .name }}, который находится в процессе выпуска. Пожалуйста, попробуйте позже.' StartPushSSLToNode: 'Начало отправки сертификата на узел' PushSSLToNodeFailed: 'Не удалось отправить сертификат на узел: {{ .err }}' PushSSLToNodeSuccess: 'Сертификат успешно отправлен на узел' # MySQL ErrUserIsExist: 'Текущий пользователь уже существует, пожалуйста, введите еще раз' ErrDatabaseIsExist: 'Текущая база данных уже существует, пожалуйста, введите ее повторно' ErrExecTimeOut: 'Время выполнения SQL истекло, проверьте базу данных' ErrRemoteExist: 'Удаленная база данных с таким именем уже существует. Измените его и повторите попытку' ErrLocalExist: 'Имя уже существует в локальной базе данных, измените его и повторите попытку' RemoteBackup: 'Для резервного копирования удаленной базы данных необходимо сначала запустить службу базы данных локального контейнера с помощью образа {{ .name }}, пожалуйста, подождите...' RemoteRecover: 'Для восстановления удаленной базы данных необходимо сначала запустить службу базы данных локального контейнера с помощью образа {{ .name }}, пожалуйста, подождите...' Arg: 'Аргумент' # Redis ErrTypeOfRedis: 'Тип файла восстановления не соответствует текущему методу сохранения. Измените его и повторите попытку' # контейнер ErrInUsed: '{{ .detail }} используется и не может быть удалено' ErrObjectInUsed: 'Этот объект используется и не может быть удален' ErrObjectBeDependent: 'Этот образ зависит от других образов и не может быть удален' ErrPortRules: 'Номер порта не совпадает, введите заново' ErrPgImagePull: 'Время извлечения изображения истекло. Настройте ускорение изображения или вручную извлеките изображение {{ .name }} и повторите попытку' PruneHelper: 'Эта очистка {{ .name }} освободила дисковое пространство {{ .size }}' ImageRemoveHelper: 'Удалён образ {{ .name }}, освобождено {{ .size }} дискового пространства' BuildCache: 'Кэш сборки' Volume: 'Том хранилища' Network: 'Сеть' PruneStart: 'Очистка выполняется, пожалуйста, подождите...' ContainerBackupPrepare: 'Подготовить рабочую область резервной копии контейнера' ContainerBackupStop: 'Остановить контейнер перед резервным копированием' ContainerBackupInspect: 'Сделать резервную копию inspect и сети контейнера' ContainerBackupMounts: 'Сделать резервную копию точек монтирования контейнера' ContainerBackupMeta: 'Записать метаданные резервной копии контейнера' ContainerBackupStart: 'Запустить контейнер после резервного копирования' ContainerRecoverPrepare: 'Подготовить рабочую область восстановления контейнера' ContainerRecoverExtract: 'Распаковать архив резервной копии контейнера' ContainerRecoverParse: 'Загрузить метаданные резервной копии контейнера' ContainerRecoverCreate: 'Пересоздать контейнер' ContainerRecoverMounts: 'Восстановить точки монтирования контейнера' ContainerRecoverStart: 'Запустить восстановленный контейнер' ContainerRecoverCleanup: 'Очистить рабочую область восстановления контейнера' ComposeBackupPrepare: 'Подготовить рабочую область резервной копии compose' ComposeBackupStop: 'Остановить compose перед резервным копированием' ComposeBackupFiles: 'Сделать резервную копию файлов compose' ComposeBackupContainers: 'Сделать резервную копию контейнеров compose' ComposeBackupMeta: 'Записать метаданные резервной копии compose' ComposeBackupStart: 'Запустить compose после резервного копирования' ComposeBackupCleanup: 'Очистить рабочую область резервного копирования compose' ComposeRecoverPrepare: 'Подготовить рабочую область восстановления compose' ComposeRecoverExtract: 'Распаковать архив резервной копии compose' ComposeRecoverMeta: 'Загрузить метаданные резервной копии compose' ComposeRecoverMetaLogName: 'Метаданные восстановления compose: имя={{ .name }}' ComposeRecoverMetaLogPath: 'Метаданные восстановления compose: путьБэкапа={{ .backupPath }} путьНазначения={{ .targetDir }}' ComposeRecoverMetaLogCount: 'Метаданные восстановления compose: файлов={{ .files }} контейнеров={{ .containers }}' ComposeRecoverFiles: 'Восстановить файлы compose' ComposeRecoverContainers: 'Восстановить контейнеры compose' ComposeRecoverRecord: 'Сохранить запись compose' ComposeRecoverCleanup: 'Очистить рабочую область восстановления compose' # среда выполнения ErrFileNotExist: 'Файл {{ .detail }} не существует Проверьте целостность исходного файла' ErrImageBuildErr: 'Сборка образа не удалась' ErrImageExist: 'Изображение уже существует Пожалуйста, измените имя изображения.' ErrDelWithWebsite: 'Операционная среда уже связана с веб-сайтом и не может быть удалена' ErrRuntimeStart: 'Запуск не удался' ErrPackageJsonNotFound: 'файл package.json не существует' ErrScriptsNotFound: 'Элемент конфигурации скриптов не найден в package.json' ErrContainerNameNotFound: 'Не удалось получить имя контейнера, проверьте файл.env' ErrNodeModulesNotFound: 'Папка node_modules не существует Измените среду выполнения или дождитесь ее успешного запуска' ErrContainerNameIsNull: 'Имя контейнера не существует' ErrPHPPortIsDefault: 'Порт 9000 зарезервирован как стандартный. Укажите другой порт' ErrPHPRuntimePortFailed: 'Порт {{ .name }} уже используется этой средой выполнения' # инструмент ErrConfigNotFound: 'Файл конфигурации не существует' ErrConfigParse: 'Неверный формат файла конфигурации' ErrConfigIsNull: 'Файл конфигурации не может быть пустым' ErrConfigDirNotFound: 'Рабочий каталог не существует' ErrConfigAlreadyExist: 'Файл конфигурации с таким именем уже существует' ErrUserFindErr: 'Поиск пользователя {{ .name }} не удался {{ .err }}' # задание cron CutWebsiteLogSuccess: 'Журнал веб-сайта {{ .name }} успешно вырезан, путь к резервной копии {{ .path }}' HandleShell: 'Выполнить скрипт {{ .name }}' HandleCurl: 'Доступ к URL {{ .name }}' HandleNtpSync: 'Синхронизация системного времени' HandleSystemClean: 'Очистка системного кэша' SystemLog: 'Системный лог' CutWebsiteLog: 'Ротация логов сайта' FileOrDir: 'Каталог / Файл' UploadFile: 'Загрузка файла резервной копии {{ .file }} в {{ .backup }}' Upload: 'Загрузить' IgnoreBackupErr: 'Ошибка резервного копирования: {{ .detail }}, игнорируем эту ошибку...' IgnoreUploadErr: 'Ошибка загрузки: {{ .detail }}, игнорируем эту ошибку...' LoadBackupFailed: 'Не удалось получить подключение к учетной записи резервной копии, ошибка: {{ .detail }}' InExecuting: 'Текущая задача выполняется, не повторяйте выполнение' NoSuchResource: 'В базе данных не найдено содержимое резервной копии, пропускаем...' CleanLog: 'Очистить журнал' CleanLogByName: 'Очистить журнал {{ .name }}' WafIpGroupNotFound: 'Группа IP WAF не найдена. Пожалуйста, перейдите в [Расширенные функции - WAF - Черный/Белый список - Группа IP], чтобы добавить группу IP с помощью метода удаленной загрузки.' # панель инструментов ErrNotExistUser: 'Текущий пользователь не существует, измените его и повторите попытку' ErrBanAction: 'Настройка не удалась. Текущая служба {{ .name }} недоступна. Проверьте и повторите попытку' ErrClamdscanNotFound: 'Команда clamdscan не обнаружена, обратитесь к документации, чтобы установить ее' TaskSwapSet: 'Настройка Swap' SetSwap: 'Настроить Swap {{ .path }} - {{ .size }}' CreateSwap: 'Создать Файл Swap' FormatSwap: 'Форматировать Файл Swap' EnableSwap: 'Включить Swap' # защита от изменений CleanTamperSetting: 'Очистить исторические настройки защиты' SetTamperWithRules: 'Запустить защиту каталога согласно правилам' ProtectDir: 'Защитить каталог {{ .name }}' IgnoreFile: 'Защитить файл {{ .name }}' TamperSetSuccessful: 'Настройки защиты завершены, начинаю мониторинг следующих каталогов:' # WAF ErrScope: 'Изменение этой конфигурации не поддерживается' ErrStateChange: 'He удалось изменить состояние' ErrRuleExist: 'Правило уже существует' ErrRuleNotExist: 'Правило не существует' ErrParseIP: 'Неправильный формат IP' ErrDefaultIP: 'по умолчанию это зарезервированное имя, пожалуйста, измените его на другое имя' ErrGroupInUse: 'IP-группа используется черным/белым списком и не может быть удалена' ErrIPGroupAclUse: 'Группа IP используется пользовательскими правилами сайта {{ .name }}, невозможно удалить' ErrIPGroupOriginProtectionUse: 'Группа IP используется защитой источника CDN сайта {{ .name }}' ErrOriginProtectionIPGroupRequired: 'Перед включением защиты источника выберите хотя бы одну непустую группу IP' ErrOriginProtectionIPGroupInvalid: 'Группа IP {{ .name }} не существует или пуста' ErrGroupExist: 'Имя группы IP уже существует' ErrIPRange: 'Неверный диапазон IP-адресов' ErrIPExist: 'IP-адрес уже существует' urlDefense: 'Правила URL' urlHelper: 'Запрещенный URL' dirFilter: 'Фильтр каталогов' xss: 'XSS' phpExec: 'Выполнение PHP-скрипта' oneWordTrojan: 'Троян из одного слова' appFilter: 'Применить фильтрацию опасных каталогов' webShell: 'Веб-оболочка' args: 'Правила параметров' protocolFilter: 'Фильтрация протоколов' javaFilter: 'Фильтр опасных файлов Java' scannerFilter: 'Фильтр сканера' escapeFilter: 'фильтр побега' customRule: 'Пользовательское правило' httpMethod: 'Фильтрация метода HTTP' fileExt: 'Ограничения на загрузку файлов' defaultIpBlack: 'Вредоносная группа IP' cookie: 'Правила использования файлов cookie' urlBlack: 'Черный список URL' uaBlack: 'Черный список User-Agent' attackCount: 'Ограничение частоты атак' fileExtCheck: 'Ограничения на загрузку файлов' geoRestrict: 'Региональные ограничения доступа' unknownWebsite: 'Несанкционированный доступ к доменному имени' notFoundCount: 'Ограничение скорости 404' headerDefense: 'Правила заголовка' defaultUaBlack: 'Правила User-Agent' methodWhite: 'Правила HTTP' captcha: 'человеко-машинная верификация' fiveSeconds: '5 секунд проверки' vulnCheck: 'Дополнительные правила' acl: 'Пользовательские правила' sql: 'SQL-инъекция' cc: 'Ограничение частоты доступа' defaultUrlBlack: 'Правила URL' sqlInject: 'SQL-инъекция' ErrDBNotExist: 'База данных не существует' allow: 'разрешить' deny: 'отрицать' OpenrestyNotFound: 'OpenResty не установлен' remoteIpIsNull: 'Список IP пуст' OpenrestyVersionErr: 'Версия OpenResty слишком старая. Обновите до 1.27.1.2-2-2-focal' ErrFileTooLarge: 'Файл больше 1 МБ и не может быть загружен' # задача TaskStart: '{{ .name }} Задача начинается [START]' TaskEnd: '{{ .name }} Задача выполнена [ЗАВЕРШЕНО]' TaskFailed: 'Задача {{ .name }} не выполнена' TaskTimeout: '{{ .name }} истекло время ожидания' TaskSuccess: '{{ .name }} Задача выполнена успешно' TaskRetry: 'Начать {{ .name }}-ю повторную попытку' SubTaskSuccess: '{{ .name }} выполнено успешно' SubTaskFailed: '{{ .name }} не удалось: {{ .err }}' TaskInstall: 'Установить' TaskUninstall: 'Удалить' TaskCreate: 'Создать' TaskDelete: 'Удалить' TaskUpgrade: 'Обновить' TaskUpdate: 'Обновить' AgentPluginInstall: 'Установить плагин' AgentPluginEnable: 'Включить плагин' AgentPluginDisable: 'Отключить плагин' AgentPluginUpdate: 'Обновить плагин' AgentPluginUninstall: 'Удалить плагин' TaskRestart: 'Перезапуск' TaskProtect: 'Защита' TaskBackup: 'Резервное копирование' TaskRecover: 'Восстановить' TaskRollback: 'Откат' TaskPull: 'Вытянуть' TaskCommit: 'Kоммит' TaskBuild: 'Сборка' TaskPush: 'Отправить' TaskClean: 'Очистка' TaskHandle: 'Выполнить' TaskImport: 'Импорт' TaskExport: 'Экспорт' Website: 'Веб-сайт' App: 'Приложение' Runtime: 'Среда выполнения' Database: 'База данных' ConfigFTP: 'Создать пользователя FTP {{ .name }}' ConfigOpenresty: 'Создать файл конфигурации OpenResty' InstallAppSuccess: 'Приложение {{ .name }} успешно установлено' ConfigRuntime: 'Настройка среды выполнения' ConfigApp: 'Приложение конфигурации' SuccessStatus: '{{ .name }} успешно' FailedStatus: '{{ .name }} не удалось {{ .err }}' HandleLink: 'Обработка ассоциации приложений' HandleDatabaseApp: 'Обработка параметров приложения' ExecShell: 'Выполнить скрипт {{ .name }}' PullImage: 'Вытянуть изображение' Start: 'Старт' Run: 'Старт' Stop: 'Стоп' Image: 'Зеркало' Compose: 'Оркестровка' Container: 'Контейнер' AppLink: 'Связанное приложение' EnableSSL: 'Включить HTTPS' AppStore: 'Магазин приложений' Firewall: 'Межсетевой экран' FirewallSyncStep: 'Синхронизировать правила с {{ .name }}' FirewallSyncResult: 'Результат синхронизации: успешно — {{ .succeeded }}, уже существуют — {{ .existing }}, ошибок — {{ .failed }}' FirewallSyncFailed: 'Не удалось синхронизировать правил межсетевого экрана: {{ .failed }}' FirewallSyncFailedResetSkipped: 'Не удалось синхронизировать правил: {{ .failed }}; исходный межсетевой экран не был сброшен' FirewallResetSourceStep: 'Сбросить и отключить исходный межсетевой экран {{ .name }}' FirewallResetSourceResult: 'Исходный межсетевой экран сброшен; удалено правил из базы данных: {{ .removed }}' FirewallVerifyTargetStep: 'Проверить правила целевого межсетевого экрана' FirewallTargetRuleIneffective: 'Целевое правило больше не действует' FirewallVerifyRuleFailed: 'Не удалось проверить синхронизированное правило {{ .name }}: {{ .detail }}' TaskSync: 'Синхронизировать' LocalApp: 'Локальное приложение' SubTask: 'Подзадача' RuntimeExtension: 'Расширение среды выполнения' TaskIsExecuting: 'Задача выполняется' CustomAppstore: 'Хранилище пользовательских приложений' TaskExec: 'Выполнить' TaskBatch: 'Пакетная операция' FileConvert: 'Преобразование формата файла' # задача - ClamAV Clamscan: 'Сканировать {{ .name }}' TaskScan: 'Сканировать' # задача - AI OllamaModelPull: 'Вытянуть модель Ollama {{ .name }}' OllamaModelSize: 'Получить размер модели Ollama {{ .name }}' AIBenchmarkRun: "Выполнить тест производительности AI" # задача - снимок Snapshot: 'Снимок' SnapDBInfo: 'Запись информации о базе данных 1Panel' SnapCopy: 'Копировать файлы и каталоги {{ .name }}' SnapNewDB: 'Инициализировать соединение с базой данных {{ .name }}' SnapDeleteOperationLog: 'Удалить журнал операций' SnapDeleteLoginLog: 'Удалить журнал доступа' SnapDeleteMonitor: 'Удалить данные мониторинга' SnapRemoveSystemIP: 'Удалить системный IP' SnapBaseInfo: 'Записать основную информацию 1Panel' SnapInstallAppImageEmpty: 'Образы приложений не выбраны, пропускаем...' SnapInstallApp: 'Резервное копирование приложений, установленных в 1Panel' SnapDockerSave: 'Сжать установленные приложения' SnapLocalBackup: 'Резервное копирование локального каталога резервных копий 1Panel' SnapCompressBackup: 'Сжать локальный каталог резервных копий' SnapPanelData: 'Резервное копирование каталога данных 1Panel' SnapCompressPanel: 'Каталог сжатых данных' SnapWebsite: 'Резервное копирование каталога веб-сайта 1Panel' SnapCloseDBConn: 'Закрыть соединение с базой данных' SnapCompress: 'Создание файлов моментальных снимков' SnapCompressFile: 'Сжать файл моментального снимка' SnapCheckCompress: 'Проверить файл сжатия снимка' SnapCompressSize: 'Размер файла снимка {{ .name }}' SnapUpload: 'Загрузить файл снимка' SnapUploadTo: 'Загрузить файл снимка в {{ .name }}' SnapUploadRes: 'Загрузить файл снимка в {{ .name }}' SnapshotRecover: 'Восстановление моментального снимка' RecoverDownload: 'Загрузить файл снимка' Download: 'Скачать' RecoverDownloadAccount: 'Получить резервную копию учетной записи для загрузки моментального снимка {{ .name }}' RecoverDecompress: 'Распаковка сжатых файлов моментальных снимков' Decompress: 'Декомпрессия' BackupBeforeRecover: 'Резервное копирование системных данных перед созданием снимка' ReadJson: 'Прочитать файл JSON в снимке' ReadJsonPath: 'Получить путь к файлу JSON в снимке' ReadJsonContent: 'Прочитать файл Json' ReadJsonMarshal: 'Обработка Json escape' RecoverApp: 'Восстановить установленные приложения' RecoverWebsite: 'Восстановить каталог веб-сайта' RecoverAppImage: 'Восстановить резервную копию образа снимка' RecoverCompose: 'Восстановить содержимое другого композитора' RecoverComposeList: 'Восстановить всех композиторов' RecoverComposeItem: 'Восстановить сообщение {{ .name }}' RecoverAppEmpty: 'В файле снимка не найдено резервной копии образа приложения' RecoverBaseData: 'Восстановить базовые данные и файлы' RecoverDaemonJsonEmpty: 'Ни файл снимка, ни текущая машина не имеют файла конфигурации контейнера daemon.json' RecoverDaemonJson: 'Восстановить файл конфигурации контейнера daemon.json' RecoverDBData: 'Восстановить данные базы данных' RecoverBackups: 'Восстановить локальный каталог резервных копий' RecoverPanelData: 'Каталог данных восстановления' # задача - контейнер ContainerImagePull: 'Извлечь изображение контейнера {{ .name }}' ContainerRemoveOld: 'Удалить исходный контейнер {{ .name }}' ContainerImageCheck: 'Проверьте, нормально ли извлекается изображение' ContainerLoadInfo: 'Получить основную информацию о контейнере' ContainerRecreate: 'Обновление контейнера не удалось, сейчас начну восстанавливать исходный контейнер' ContainerCreate: 'Создать новый контейнер {{ .name }}' ContainerCreateFailed: 'Создание контейнера не удалось, удалите неудавшийся контейнер' ContainerStartCheck: 'Проверить, запущен ли контейнер' ContainerAcquireLock: 'Ожидание блокировки операций контейнера {{ .name }}' ContainerUpgradeItem: 'Обновление контейнера {{ .name }}' ContainerUpgradeSummary: 'Сводка результатов обновления контейнеров' ContainerCleanupWarning: 'Обновление завершено, но удалить резервный контейнер {{ .name }} не удалось. Убедитесь, что новый контейнер работает, затем удалите резервный контейнер вручную. Ошибка: {{ .err }}' ContainerStopOld: 'Остановка исходного контейнера {{ .name }}' ContainerRenameOld: 'Переименование исходного контейнера {{ .name }} для отката' ContainerDisconnectOld: 'Освобождение сетевых адресов исходного контейнера {{ .name }}' ContainerCreateReplacement: 'Создание нового контейнера {{ .name }}' ContainerStartReplacement: 'Запуск нового контейнера {{ .name }}' ContainerWaitReplacement: 'Проверка готовности нового контейнера {{ .name }}' ContainerStartupDiagnostic: 'Диагностика сбоя запуска нового контейнера {{ .name }}' ContainerRecentLogs: 'Последние журналы контейнера (200 строк)' ContainerDiagnosticLogsFailed: 'Не удалось получить журналы сбойного контейнера {{ .name }}: {{ .err }}' ContainerDiagnosticLogsEmpty: 'Журналы контейнера отсутствуют' ContainerRollbackRestartOld: 'Повторный запуск исходного контейнера {{ .name }}' ContainerRollbackRemoveReplacement: 'Удаление неудачно созданного контейнера {{ .name }}' ContainerRollbackRenameOld: 'Восстановление имени исходного контейнера {{ .name }}' ContainerRollbackReconnectOld: 'Восстановление сетей исходного контейнера {{ .name }}' # задача - образ ImageBuild: 'Создание изображения' ImagePull: 'Вытащить изображение' ImageRepoAuthFromDB: 'Получить информацию об аутентификации репозитория из базы данных' ImagePush: 'Отправить изображение' ImageRenameTag: 'Изменить тег изображения' ImageNewTag: 'Новый тег изображения {{ .name }}' ComposeCreate: 'Создать композицию' # задача - сайт BackupNginxConfig: 'Резервное копирование файла конфигурации OpenResty веб-сайта' CompressFileSuccess: 'Каталог успешно сжат, сжат в {{ .name }}' CompressDir: 'Каталог сжатия' DeCompressFile: 'Распаковать файл {{ .name }}' ErrCheckValid: 'Проверка файла резервной копии не удалась, {{ .name }}' Rollback: 'Откат' websiteDir: 'Каталог веб-сайтов' RecoverFailedStartRollBack: 'Восстановление не удалось, начать откат' AppBackupFileIncomplete: 'Файл резервной копии неполный и в нем отсутствуют файлы app.json или app.tar.gz' AppAttributesNotMatch: 'Тип или имя приложения не совпадают' # оповещение ErrAlertMethodNotSupported: 'Эта версия не поддерживает данный способ оповещения' ErrAlertSync: 'Ошибка синхронизации информации о тревоге, проверьте и повторите попытку' # задача - среда выполнения ErrInstallExtension: 'Уже выполняется задача установки, подождите, пока задача завершится' # шаблон письма оповещения PanelAlertTitle: 'Уведомление панели' TestAlertTitle: 'Тестовое письмо - проверка подключения' TestAlert: 'Это тестовое письмо для проверки правильности настройки отправки писем.' LicenseExpirationAlert: 'Ваш панель {{ .node }}{{ .ip }}, лицензия истечет через {{ .day }} дней. Войдите в панель для получения деталей.' CronJobFailedAlert: 'Ваш панель {{ .node }}{{ .ip }}, выполнение запланированной задачи {{ .name }} не удалось. Войдите в панель для получения деталей.' ClamAlert: 'Ваш панель {{ .node }}{{ .ip }}, задача сканирования на вирусы обнаружила {{ .num }} зараженных файлов. Войдите в панель для получения деталей.' WebSiteAlert: 'Ваш панель {{ .node }}{{ .ip }}, {{ .num }} веб-сайтов истечут через {{ .day }} дней. Войдите в панель для получения деталей.' SSLAlert: 'Ваш панель {{ .node }}{{ .ip }}, {{ .num }} сертификатов SSL истечут через {{ .day }} дней. Войдите в панель для получения деталей.' DiskUsedAlert: 'Ваш панель {{ .node }}{{ .ip }}, использование диска {{ .name }} достигло {{ .used }}. Войдите в панель для получения деталей.' ResourceAlert: 'Ваш панель {{ .node }}{{ .ip }}, средний уровень использования {{ .name }} за {{ .time }} минут составляет {{ .used }}. Войдите в панель для получения деталей.' PanelVersionAlert: 'Ваш панель {{ .node }}{{ .ip }}, доступна последняя версия панели для обновления. Войдите в панель для получения деталей.' PanelPwdExpirationAlert: 'Ваш панель {{ .node }}{{ .ip }}, пароль панели истечет через {{ .day }} дней. Войдите в панель для получения деталей.' CommonAlert: 'Ваш панель {{ .node }}{{ .ip }}, {{ .msg }}. Войдите в панель для получения деталей.' NodeExceptionAlert: 'Ваш панель {{ .node }}{{ .ip }}, {{ .num }} узлов работают с ошибками. Войдите в панель для получения деталей.' LicenseExceptionAlert: 'Ваш панель {{ .node }}{{ .ip }}, {{ .num }} лицензий имеют ошибки. Войдите в панель для получения деталей.' SSHAndPanelLoginAlert: 'Ваш панель {{ .node }}{{ .ip }}, вход {{ .name }} с адреса {{ .loginIp }} является аномальным. Войдите в панель для получения деталей.' # диск DeviceNotFound: 'Устройство {{ .name }} не найдено' DeviceIsMounted: 'Устройство {{ .name }} подключено, сначала отключите' PartitionDiskErr: 'Не удалось разделить, {{ .err }}' FormatDiskErr: 'Не удалось отформатировать диск, {{ .err }}' MountDiskErr: 'Не удалось подключить диск, {{ .err }}' XfsNotFound: 'Файловая система xfs не обнаружена, сначала установите xfsprogs' # терминал TerminalAIBlockedRiskyCommand: 'Опасная команда заблокирована: {{ .command }}' TerminalAIThinking: 'AI думает...' TerminalAIReadyToExecute: 'Обдумывание завершено, нажмите Enter для выполнения (время: {{ .duration }}, token: {{ .tokens }})' TerminalAIRequestFailed: 'Ошибка запроса AI: {{ .err }}' # AI-шлюз ErrAIProxyServiceNotInstalled: 'Сервис {{ .name }} не установлен' ErrAIProxyModelAccountNotFound: 'Аккаунт модели {{ .id }} не найден' ErrAIProxyModelMapRequired: 'Это поле обязательно.' ErrAIProxyModelMapInvalid: 'Сопоставление моделей должно быть допустимым JSON-объектом: {{ .err }}' ErrAIProxyModelMapEmpty: 'Сопоставление моделей не может быть пустым' ErrAIProxyModelMapEmptyExternalModel: 'Сопоставление моделей содержит пустую запрошенную модель' ErrAIProxyModelMapEmptyUpstreamModel: 'Upstream-модель для {{ .model }} не может быть пустой' AIProxyUserFallback: 'Удаленный пользователь (ID: {{ .id }})' AIProviderBailian: 'Alibaba Cloud Model Studio' AIProviderBailianCodingPlan: 'Alibaba Cloud Model Studio Coding Plan' AIProviderArk: 'Volcengine Ark' AIProviderArkCodingPlan: 'Volcengine Ark Coding Plan'