Files
1Panel/agent/i18n/lang/ru.yaml

630 lines
52 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# базовые ошибки
ErrInvalidParams: 'Неверный запрос: {{ .detail }}'
ErrMcpGatewayArgsParse: 'Неверный формат пользовательских аргументов MCP'
ErrMcpGatewayArgsConflict: 'Аргумент {{ .name }} управляется 1Panel и не может быть задан в пользовательских аргументах'
ErrTokenParse: 'Ошибка токена: {{ .detail }}'
ErrInitialPassword: 'Исходный пароль неверен'
ErrInternalServer: 'Внутренняя ошибка: {{ .detail }}'
ErrRecordExist: 'Запись уже существует'
ErrRecordNotFound: 'Запись не найдена'
WafLogExport: 'Экспорт журналов WAF'
MonitorLogExport: 'Экспорт журналов мониторинга веб-сайтов'
LogExportNoData: 'Нет журналов, соответствующих выбранным фильтрам'
LogExportDiskSpace: 'Доступно менее 1 GiB; экспорт остановлен'
LogExportRetentionInvalid: 'Срок хранения истории экспорта должен быть от 1 до 30 дней'
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 и повторите попытку.'
ErrAgentAccountUnavailable: 'Связь с аккаунтом недоступна: {{ .err }}'
ErrAgentProviderNotSupported: 'Провайдер агента не поддерживается'
ErrAgentAccountRequired: 'Выберите аккаунт агента'
ErrAgentAccountNotVerified: 'Аккаунт не подтверждён'
ErrAgentAccountModelsRequired: 'Настройте хотя бы одну модель'
ErrAgentAccountSingleInitialModel: 'При создании аккаунта можно указать только одну начальную модель'
ErrAgentModelNotInAccount: 'Модель не настроена в выбранном аккаунте'
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 нельзя отвязать вручную'
ErrHermesPairingCodeUnavailable: 'Код сопряжения временно недоступен в Hermes, возможно из-за проблем с сетью. Повторите попытку позже.'
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Когда групповая политика Feishu — белый список, политика личных сообщений не может быть кодом сопряжения.'
# резервное копирование и настройки оповещений
Localhost: 'Локальная машина'
ErrBackupInUsed: 'Аккаунт бэкапа занят задачей'
ErrBackupCheck: 'Проверка подключения не удалась: {{ .err }}'
ErrBackupLocalDelete: 'Нельзя удалить локальные бэкапы'
ErrBackupLocalCreate: 'Нельзя создать локальные бэкапы'
ErrAlertConfigInUse: 'Конфигурация оповещений используется и не может быть удалена'
ErrAlertConfigPhoneExist: 'Номер телефона уже существует'
# приложение
ErrPortInUsed: '{{ .detail }} порт уже занят'
ErrAppLimit: 'Количество установленных приложений превысило лимит'
ErrNotInstall: 'Приложение не установлено'
ErrPortInOtherApp: 'Порт {{ .port }} уже занят приложением {{ .apps }}'
ErrDbUserNotValid: 'Существующая база данных, имя пользователя и пароль не совпадают'
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 }}'
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: 'Образ уже существует, используется существующий образ'
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 }}, невозможно удалить'
ErrGroupExist: 'Имя группы IP уже существует'
ErrIPRange: 'Неверный диапазон IP-адресов'
ErrIPExist: 'IP-адрес уже существует'
urlDefense: 'Правила URL'
urlHelper: 'Запрещенный URL'
dirFilter: 'Фильтр каталогов'
xss: 'XSS'
phpExec: 'Выполнение PHP-скрипта'
oneWordTrojan: 'Троян из одного слова'
appFilter: 'Применить фильтрацию опасных каталогов'
webShell: 'Be6-оболочка'
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: 'Обновить'
TaskRestart: 'Перезапуск'
TaskProtect: 'Защита'
TaskBackup: 'Резервное копирование'
TaskRecover: 'Восстановить'
TaskRollback: 'Откат'
TaskPull: 'Вытянуть'
TaskCommit: 'Kоммит'
TaskBuild: 'Сборка'
TaskPush: 'Отправить'
TaskClean: 'Очистка'
TaskHandle: 'Выполнить'
TaskImport: 'Импорт'
TaskExport: 'Экспорт'
Website: 'Be6-сайт'
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: 'Магазин приложений'
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: 'Проверить, запущен ли контейнер'
# задача - образ
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 }})'