# базовые ошибки
ErrInvalidParams: 'Неверный запрос: {{ .detail }}'
ErrTokenParse: 'Ошибка токена: {{ .detail }}'
ErrInitialPassword: 'Исходный пароль неверен'
ErrInternalServer: 'Внутренняя ошибка: {{ .detail }}'
ErrInternalServerKey: "Внутренняя ошибка сервера:"
ErrRecordExist: 'Запись уже существует'
ErrRecordNotFound: 'Запись не найдена'
ErrStructTransform: 'Ошибка преобразования: {{ .detail }}'
ErrNotSupportType: 'Тип не поддерживается: {{ .name }}'
ErrDemoEnvironment: 'Недоступно в демо'
ErrCmdTimeout: 'Команда завершилась по тайм-ауту'
ErrPortInUsed: "Порт {{ .name }} уже используется"
ErrFileNotFound: "Файл {{ .name }} не найден"
ErrReqFailed: "{{.name}} запрос не удался: {{ .err }}"

# запрос и вход безопасности
ErrNoSuchHost: "Не удалось найти запрашиваемый сервер {{ .err }}"
ErrHttpReqNotFound: "Не удалось найти запрашиваемый ресурс {{ .err }}"
ErrHttpReqFailed: "Ошибка запроса {{ .err }}"
ErrHttpReqTimeOut: "Время ожидания запроса истекло {{ .err }}"
ErrCreateHttpClient: "Ошибка создания запроса {{ .err }}"
ErrProxy: 'Запрос не удался: {{ .detail }}'
ErrProxySetting: "Информация о прокси-сервере недоступна {{ .err }}, проверьте и повторите попытку"
ErrEntrance: "Ошибка информации о безопасном входе, проверьте и повторите попытку"
ErrEntranceFormat: "Защищенный вход {{ .name }} в настоящее время не поддерживается. Пожалуйста, проверьте и повторите попытку"

# вход и безопасность
ErrNotLogin: 'Не авторизован: {{ .detail }}'
ErrSessionDataNotFound: "Текущая сессия истекла"
ErrSessionDataFormat: "Ненормальный формат данных текущей сессии"
ErrPasswordExpired: 'Пароль истёк: {{ .detail }}'
ErrLoginLocked: "Слишком много неудачных попыток. Вход временно заблокирован на 5 минут."
ErrApiConfigStatusInvalid: 'API отключено: {{ .detail }}'
ErrApiConfigKeyInvalid: 'Неверный API-ключ: {{ .detail }}'
ErrApiConfigIPInvalid: 'IP не в списке: {{ .detail }}'
ErrApiConfigDisable: 'Доступ по API запрещён: {{ .detail }}'
ErrApiConfigKeyTimeInvalid: 'Неверная метка времени: {{ .detail }}'
ErrPasskeyDisabled: "Для Passkey требуется включить HTTPS"
ErrPasskeyNotConfigured: "Passkey не настроен"
ErrPasskeyLimit: "Достигнут лимит Passkey (максимум 5)"
ErrPasskeySession: "Сеанс Passkey истек или недействителен"
ErrPasskeyDuplicate: "Passkey уже существует"
ErrPasskeyVerify: "Не удалось проверить Passkey"
ErrOIDCNotEnabled: "Аутентификация OIDC не включена"
ErrOIDCConfigInvalid: "Конфигурация OIDC недействительна"
ErrOIDCConfigChanged: "Конфигурация OIDC изменилась; запустите аутентификацию заново"
ErrOIDCDiscoveryFailed: "Не удалось обнаружить конфигурацию Provider OIDC"
ErrOIDCIssuerMismatch: "Issuer OIDC не совпадает с настроенным Issuer"
ErrOIDCUnsupportedPKCE: "Provider OIDC не поддерживает требуемый метод PKCE"
ErrOIDCUnsupportedSigningAlgorithm: "Алгоритм подписи OIDC не поддерживается"
ErrOIDCInvalidState: "Состояние входа OIDC недействительно или уже использовано"
ErrOIDCLoginExpired: "Срок действия запроса на вход OIDC истёк; повторите попытку"
ErrOIDCTokenExchange: "Не удалось обменять код авторизации OIDC"
ErrOIDCTokenValidation: "Не удалось проверить Token OIDC"
ErrOIDCUserInfoValidation: "Не удалось проверить сведения о пользователе OIDC"
ErrOIDCNameClaimMissing: "Настроенный Claim имени пользователя OIDC отсутствует или недействителен"
ErrOIDCNameConflictLocal: "Имя пользователя OIDC конфликтует с локальным пользователем"
ErrOIDCNameConflictLDAP: "Имя пользователя OIDC конфликтует с пользователем LDAP"
ErrOIDCNameConflictOIDC: "Имя пользователя OIDC конфликтует с другой идентичностью OIDC"
ErrOIDCDefaultRoleInvalid: "Роль по умолчанию, настроенная для OIDC, недоступна"
ErrOIDCPrivateAddressDenied: "Адрес Endpoint OIDC запрещён политикой сетевой безопасности"
ErrOIDCTLSValidation: "Не удалось проверить сертификат TLS OIDC"
ErrOIDCTestExpired: "Срок действия браузерного теста OIDC истёк; запустите тест снова"
ErrOIDCLocalCredentialsReadonly: "Имена пользователей и пароли OIDC управляются Provider идентификации и не могут быть изменены локально."
ErrOIDCPasswordExpirationUnsupported: "Для пользователей OIDC не применяется локальная политика истечения срока действия пароля."
ErrOIDCInternal: "Во время аутентификации OIDC произошла внутренняя ошибка. Повторите попытку позже."

# пользователь и права
ErrNoSuchUser: "Информация о пользователе не найдена. Проверьте и повторите попытку."
ErrToMaster: "У этого пользователя нет прав для выполнения этой операции на основном узле. Проверьте и повторите попытку."
ErrToNode: "У этого пользователя нет прав для выполнения этой операции на этом узле. Проверьте и повторите попытку."
ErrRBAC: "Недостаточно прав пользователя. Операция не может быть выполнена. Проверьте и повторите попытку."
ErrNoneNode: "У этого пользователя нет прав ни на один узел. Обратитесь к администратору или проверьте и повторите попытку."
ErrOnlySuperAdmin: "Эта функция доступна только супер администраторам."
ErrRolePresetCannotDelete: "Системные предустановленные роли нельзя удалять"
ErrRolePresetCannotUpdate: "Системные предустановленные роли нельзя обновлять"
ErrRoleBoundToUser: "Эта роль уже привязана к пользователям и не может быть удалена"
ErrRolePresetCannotBind: "Системные предустановленные роли нельзя назначать пользователям"
ErrNodeAdminMasterForbidden: "Права администратора узла нельзя добавить к главному узлу"
ErrSuperAdminCannotDelete: "Пользователей супер-администратора нельзя удалять"
ErrGroupIsDefault: "Группу по умолчанию нельзя удалить"
ErrGroupIsInUse: "Группа используется и не может быть удалена."

# лицензия
LicenseCheck: 'Проверить доступность лицензии'
ErrLicenseInUsed: 'Лицензия уже привязана. Пожалуйста, проверьте и повторите попытку'
ErrLicenseExpired: 'Срок действия лицензии истек. Пожалуйста, проверьте и повторите попытку'
ErrLicense: "Неверный формат лицензии, проверьте и повторите попытку"
ErrLicenseCheck: "Ошибка проверки лицензии, проверьте и повторите попытку"
ErrXpackVersion: "Ошибка проверки лицензии, лицензия ограничена по версии, проверьте и повторите попытку"
ErrLicenseSave: "Ошибка сохранения информации о лицензии {{ .err }}, повторите попытку"
ErrLicenseSync: "Ошибка синхронизации информации о лицензии, информация не найдена в базе данных"
ErrLicenseExist: "Данная лицензия уже существует. Вы можете перейти на страницу лицензий для привязки узлов."
ErrXpackNotFound: "Этот раздел доступен в Business Edition. Импортируйте лицензию в Настройки панели > Лицензия"
ErrXpackExceptional: "Этот раздел доступен в Business Edition. Синхронизируйте статус лицензии в Настройки панели > Лицензия"
ErrXpackLost: "Достигнут лимит повторных попыток по лицензии. Перейдите в Настройки панели > Лицензия и выполните ручную синхронизацию"
ErrEnterpriseLicenseRequired: "Лицензия Enterprise Edition не импортирована. Сначала импортируйте лицензию."
ErrDeviceLost: "Необходимые файлы для проверки лицензии отсутствуют, пожалуйста, проверьте и попробуйте снова"
ErrDeviceErr: "Текущая среда не соответствует среде импорта лицензии. Отредактируйте лицензию и повторите импорт"
ErrXpackTimeout: "Время ожидания запроса истекло, возможно нестабильное сетевое соединение, повторите попытку позже"
ErrUnbindMaster: "В управлении узлами обнаружены узлы, сначала удалите их и повторите попытку"
ErrFreeNodeLimit: "Достигнут лимит количества узлов, которые можно добавить. Приобретите лицензию и повторите попытку."
ErrNodeBound: "Эта лицензия уже связана с другим узлом, проверьте и повторите попытку"
ErrNodeBoundDelete: "Эта лицензия привязана и не поддерживает операции удаления. Пожалуйста, проверьте и попробуйте снова"
ErrNodeBoundLimit: "Текущий бесплатный узел достиг предела, пожалуйста, проверьте и попробуйте снова"
ErrLicenseFree: "Бесплатные узлы доступны только при правильной привязке лицензии к узлу. Проверьте и повторите попытку"
ErrLicenseUnbind: "К этой лицензии всё ещё привязаны узлы Community Edition. Отвяжите их в Настройки панели > Лицензия и повторите попытку"
ErrLicenseBindCount: "Количество бесплатных узлов в новой лицензии меньше текущего количества привязанных узлов Community Edition. Проверьте и повторите попытку"
ErrNoSuchNode: "Информация об узле не найдена, проверьте и повторите попытку"
ErrNodeUnbind: "Обнаружен узел вне области действия лицензии, проверьте и повторите попытку"
ErrNodeBind: "Этот узел уже связан с лицензией, проверьте и повторите попытку"
ErrNodeLocalRollback: "Прямой откат на основном узле не поддерживается. Выполните '1pctl restore' вручную для отката"
ErrIntlLicense: "Текущая версия пока не поддерживает импорт международной лицензии. Скоро будет доступно"
InvalidRequestBodyType: "Неверный формат тела запроса. Проверьте, соответствует ли содержимое требуемому формату, и повторите попытку"
InvalidLicenseCodeType: "Указан неверный формат лицензионного кода. Проверьте и повторите попытку"
LicenseNotFoundType: "Лицензия не найдена. В системе нет записей, соответствующих указанной лицензии. Проверьте и повторите попытку"
LicenseRevokedType: "Запрошенная лицензия аннулирована и больше не может быть использована. Проверьте и повторите попытку"
LicenseExpiredType: "Срок действия лицензии истек. Продлите ее или повторно импортируйте в разделе Настройки панели - Лицензия перед повторной попыткой"
LicenseProductMismatchType: "Лицензия не соответствует запрошенному продукту или услуге"
InvalidAssigneeType: "Некорректная информация о целевом пользователе или устройстве для назначения лицензии. Проверьте и повторите попытку"
LicenseUsageNotFoundType: "Записи об использовании отсутствуют. Эта лицензия еще не активирована или не использовалась. Проверьте и повторите попытку"
LicenseUsageLimitExceededType: "Эта лицензия уже привязана к другому узлу. Проверьте и повторите попытку"

# узел и кластер
MasterNode: "Главный узел"
Node: "Узел"
ErrLocalDelete: "Локальный узел нельзя удалить"
ErrMasterDelete: "Невозможно удалить основной узел, сначала удалите подчиненные узлы."
ClusterNameIsExist: "Имя кластера уже существует."
AppStatusUnHealthy: "Получение статуса приложения аномально, пожалуйста, проверьте статус узлов установки в списке узлов."
MasterNodePortNotAvailable: "Проверка подключения порта {{ .port }} узла {{ .name }} не удалась, пожалуйста, проверьте настройки брандмауэра/группы безопасности и статус главного узла."
ClusterMasterNotExist: "Основной узел кластера отключен, пожалуйста, удалите дочерние узлы."

# виртуальная машина
ErrVMNotFound: "Виртуальная машина не существует"
ErrVMAlreadyExists: "Виртуальная машина уже существует"
ErrVMImageAlreadyExists: "Файл образа виртуальной машины уже существует: {{ .detail }}"
ErrVMStoragePathInUse: "Путь пула хранения уже используется [{{ .name }}]"
ErrVMHelperNotFound: "1panel-kvm не найден"
ErrVMBridgeManaged: "Имя моста уже управляется libvirt или Docker"
ErrVMNetworkInUse: "Сеть используется и не может быть удалена"
ErrVMStorageInUse: "Пул хранилища используется и не может быть удалён"
ErrVMStorageNameCannotChange: "Имя пула хранилища нельзя изменить"
ErrVMStoragePathCannotChange: "Путь к пулу хранилища нельзя изменить"
ErrVMRunning: "Виртуальная машина запущена"
ErrVMLibvirtConnect: "Не удалось подключиться к libvirt: {{ .detail }}"
ErrVMPermission: "Нет разрешения на операцию с виртуальной машиной: {{ .detail }}"
ErrVMNetworkNotFound: "Сеть виртуальной машины не существует: {{ .detail }}"
ErrVMInvalidPath: "Недопустимый путь виртуальной машины: {{ .detail }}"
ErrVMInvalidInput: "Недопустимые параметры виртуальной машины: {{ .detail }}"
ErrVMCommandFailed: "Ошибка выполнения команды виртуальной машины: {{ .err }}"
VMCreateTask: "Создать виртуальную машину [{{ .name }}]"
VMCreateFromTemplateTask: "Создать виртуальную машину [{{ .name }}] из шаблона"
VMUpdateTask: "Обновить виртуальную машину [{{ .name }}]"
VMRenameTask: "Переименовать виртуальную машину [{{ .name }}] в [{{ .newName }}]"
VMDeleteTask: "Удалить виртуальную машину [{{ .name }}]"
VMTemplateCreateTask: "Сохранить виртуальную машину [{{ .name }}] как шаблон [{{ .template }}]"
VMTemplateDeleteTask: "Удалить шаблон виртуальной машины [{{ .name }}]"
VMForceDeleteMetadataOnly: "1panel-kvm не найден, принудительно удаляются только метаданные виртуальной машины [{{ .name }}]"
VMForceDeleteMetadataAfterLibvirtFailed: "Не удалось удалить виртуальную машину [{{ .name }}] из libvirt, принудительно удаляются метаданные: {{ .err }}"
VMForceDeleteDiskFailed: "Не удалось принудительно удалить файл диска виртуальной машины [{{ .path }}]: {{ .err }}"
VMForceDeleteDiskSuccess: "Файл диска виртуальной машины [{{ .path }}] принудительно удален"
VMSnapshotCreateTask: "Создать снимок [{{ .snapshot }}] для виртуальной машины [{{ .vm }}]"
VMSnapshotCreateStep: "Создать снимок виртуальной машины [{{ .snapshot }}]"
VMSnapshotRecoverTask: "Восстановить снимок [{{ .snapshot }}] виртуальной машины [{{ .vm }}]"
VMSnapshotRecoverStep: "Восстановить снимок виртуальной машины [{{ .snapshot }}]"
VMSnapshotDeleteTask: "Удалить снимок [{{ .snapshot }}] виртуальной машины [{{ .vm }}]"
VMSnapshotDeleteStep: "Удалить снимок виртуальной машины [{{ .snapshot }}]"

# приложение
CustomAppStoreFileValid: "Пакет магазина приложений должен быть в формате .tar.gz"
AppBackup: 'Резервная копия приложения'
AppBackupPush: 'Передать файл резервной копии приложения {{.file}} на узел {{ .name }}'
ErrSourceTargetSame: 'Исходный узел и целевой узел не могут быть одинаковыми'
AppInstall: 'Установить приложение {{ .name }} на узел {{ .targetNode }}'
AppInstallCheck: 'Проверить среду установки приложения'

# резервное копирование
ErrBackupInUsed: 'Аккаунт бэкапа занят задачей'
ErrBackupCheck: 'Проверка подключения не удалась: {{ .err }}'
ErrBackupLocal: "Локальная учетная запись резервного копирования не поддерживает эту операцию"
ErrBackupPublic: "Обнаружено, что эта учетная запись резервного копирования не является публичной, проверьте и повторите попытку"
ErrOSSConn: "Не удалось получить последнюю версию, проверьте подключение сервера к внешней сети."
MvBackup: "Переместить данные в резервный каталог"

# оповещение
ErrAlertSync: "Ошибка синхронизации информации об оповещениях, пожалуйста, проверьте и повторите попытку"

# AI-шлюз
ErrAIProxyUserGroupIsDefault: "Группу пользователей по умолчанию нельзя удалить."
ErrAIProxyUserGroupInUse: "Группа пользователей используется и не может быть удалена."
ErrAIProxyUserGroupExists: "Имя группы пользователей уже существует."
ErrAIProxyBackendAccountExists: "Эта учетная запись модели уже импортирована в пул аккаунтов AI Gateway."
ErrAIProxyModelGroupInUse: "Группа моделей используется и не может быть удалена."
ErrAIProxyModelGroupExists: "Имя группы моделей уже существует."
ErrAIProxySensitiveGroupInUse: "Группа чувствительных слов используется и не может быть удалена."
ErrAIProxySensitiveGroupExists: "Имя группы чувствительных слов уже существует."
AIProxyContentPolicyViolation: "К сожалению, я не могу обработать этот запрос: его содержимое может не соответствовать политике в отношении контента. Измените запрос и повторите попытку."
AIBenchmarkRun: "Выполнить тест производительности AI"

# задача
TaskStart: "{{ .name }} задача начата [START]"
TaskEnd: "{{ .name }} задача завершена [COMPLETED]"
TaskFailed: "{{ .name }} задача не выполнена"
TaskTimeout: "{{ .name }} истекло время"
TaskSuccess: "{{ .name }} задача выполнена успешно"
TaskRetry: "Начало повторной попытки {{ .name }}"
SubTaskSuccess: "{{ .name }} успешно"
SubTaskFailed: "{{ .name }} не удалось: {{ .err }}"
TaskInstall: "Установить"
TaskUpgrade: "Обновить"
TaskSync: 'Синхронизация'
TaskSyncForNode: "Синхронизировать Данные Узла"
TaskBackup: "Резервная копия"
TaskPush: "Отправить"
TaskRsync: "Синхронизация"
SuccessStatus: "{{ .name }} успешно"
FailedStatus: "{{ .name }} не удалось {{ .err }}"
Start: "Начать"
SubTask: "Подзадача"
Skip: "Пропустить ошибки и продолжить..."
Success: "Успешно"

# задачи умной маршрутизации AI-шлюза
AIProxySmartRouteCreateTask: "Создание образцов умной маршрутизации AI-шлюза"
AIProxySmartRouteCreateSubTask: "Создание образцов и генерация векторов"
AIProxySmartRouteCreateStart: "Начато создание образцов, всего: {{ .total }}"
AIProxySmartRouteCreateFailed: "[{{ .current }}/{{ .total }}] Ошибка создания: type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteCreateSuccess: "[{{ .current }}/{{ .total }}] Создано: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteCreateComplete: "Создание завершено: успешно {{ .success }}, с ошибкой {{ .failed }}"
AIProxySmartRouteCreateError: "Не удалось создать образцы: ошибок {{ .failed }}, последняя ошибка"
AIProxySmartRouteRebuildTask: "Перестроение векторов образцов умной маршрутизации AI-шлюза"
AIProxySmartRouteRebuildSubTask: "Перестроение векторов образцов"
AIProxySmartRouteEmbeddingRequired: "Требуются endpoint и модель Embedding"
AIProxySmartRouteRebuildStart: "Начато перестроение векторов образцов, всего: {{ .total }}"
AIProxySmartRouteRebuildFailed: "[{{ .current }}/{{ .total }}] Ошибка перестроения: sampleID={{ .id }} type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteRebuildSuccess: "[{{ .current }}/{{ .total }}] Перестроено: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteRebuildComplete: "Перестроение завершено: успешно {{ .success }}, с ошибкой {{ .failed }}"
AIProxySmartRouteRebuildError: "Не удалось перестроить векторы образцов: ошибок {{ .failed }}, последняя ошибка"

# пакетная задача агента
BatchInstallAgent: "Пакетная установка агентов"
DispatchAgentInstallTasks: "Отправить задачи установки агентов"
BatchUpgradeAgent: "Пакетное обновление агентов"
DispatchAgentUpgradeTasks: "Отправить задачи обновления агентов"
BatchAgentInstallDispatchFailed: "Узел {{ .node }} не смог отправить задачу установки {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Узел {{ .node }} успешно отправил задачу установки {{ .agentType }}!"
BatchAgentUpgradeDispatchFailed: "Узел {{ .node }} не смог отправить задачу обновления {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Узел {{ .node }} {{ .agent }} уже на целевой версии, пропущено"
BatchAgentUpgradeSubmitted: "Узел {{ .node }} успешно отправил задачу обновления {{ .agent }}!"
BatchAgentUpgradeFailed: "Узел {{ .node }} не смог отправить задачу обновления {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Пакетная отправка Skill"
DispatchAgentSkillInstallTasks: "Отправить задачи установки Skill"
BatchAgentSkillDispatchFailed: "Узел {{ .node }} не смог отправить {{ .skill }} в {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Узел {{ .node }} не нашел агентов {{ .agentType }}, пропущено"
BatchAgentSkillSkipped: "Узел {{ .node }} {{ .agent }} пропущен Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Узел {{ .node }} успешно отправил задачу установки {{ .skill }} в {{ .agent }}!"
BatchAgentSkillInstallFailed: "Узел {{ .node }} не смог отправить задачу установки {{ .skill }} в {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Узел {{ .node }} не смог отправить задачу {{ .operate }} для {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Узел {{ .node }} {{ .agent }} пропущен Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Узел {{ .node }} успешно отправил задачу {{ .operate }} для {{ .agent }}!"
BatchAgentOperateFailed: "Узел {{ .node }} не смог отправить задачу {{ .operate }} для {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Пакетный запуск агентов"
DispatchAgentStartTasks: "Отправить задачи запуска агентов"
BatchStopAgent: "Пакетная остановка агентов"
DispatchAgentStopTasks: "Отправить задачи остановки агентов"
BatchRestartAgent: "Пакетный перезапуск агентов"
DispatchAgentRestartTasks: "Отправить задачи перезапуска агентов"
BatchDeleteAgent: "Пакетное удаление агентов"
DispatchAgentDeleteTasks: "Отправить задачи удаления агентов"
AgentOperateStart: "Запустить"
AgentOperateStop: "Остановить"
AgentOperateRestart: "Перезапустить"
AgentOperateDelete: "Удалить"

# задача приложения и навыка
PushAppInstallTaskToNode: "Отправить задачу установки приложения на узел [{{ .name }}]"
AppInstallTask: "Задача установки приложения"
PushAppFailed: "Не удалось отправить задачу установки приложения"
SkillHubInstallTask: "Установить навык [{{ .name }}]"
SkillHubInstallToTarget: "Установить навык [{{ .name }}] в цель [{{ .target }}]"

# библиотека скриптов
ScriptLibrary: "Библиотека скриптов"
RemoteScriptLibrary: "Удаленная Библиотека Скриптов"
ScriptSyncSkip: "Текущая библиотека скриптов уже является последней версией"
DownloadData: "Загрузка файла библиотеки скриптов data.yaml"
DownloadPackage: "Загрузка архива библиотеки скриптов"
AnalyticCompletion: "Анализ завершён, начинается синхронизация с базой данных..."

# синхронизация узла
SyncNode: "Синхронизировать данные с узлом {{ .name }}"
LocalName: "Имя 'local' используется только для локальной идентификации в системе"
SyncPackageData: "Упаковка данных синхронизации"
SyncPackageEncrypt: "Шифрование пакета данных"
SyncRequest: "Запрос API синхронизации узла"
SyncFailedRetry: "Таймаут синхронизации данных узла (попытка {{ .index }}), повторная попытка..."
SyncFailed: "Ошибка синхронизации, выполните ручную синхронизацию в списке узлов"
SyncSystemProxy: "Настройки системного прокси"
SyncScripts: "Библиотека скриптов"
SyncBackupAccounts: "Резервные аккаунты"
SyncAlertSetting: "Настройки оповещений"
SyncCustomApp: "Пользовательское приложение"
SyncLanguage: "Язык системы"
SyncEdition: "Регион работы"

# обновление узла
NodeUpgrade: "Обновление узла {{ .name }}"
UpgradeCheck: "Проверить обновления узла"
UpgradeCheckLocal: "Локальные узлы не поддерживают массовое обновление, пропуск..."
UpgradeCheckLatest: "Узел уже имеет последнюю версию, пропуск..."
NewSSHClient: "Инициализация SSH-соединения"
BackupBeforeUpgrade: "Резервное копирование данных перед обновлением"
UploadUpgradeFile: "Распределение файлов обновления"
RestartAfterUpgrade: "Запуск службы после обновления"
LoadAutoUpgradeNodesFailed: "Не удалось загрузить узлы автообновления, ошибка: {{ .err }}"
AutoUpgradeNodes: "Узлы автообновления: {{ .nodes }}"
UpdateAutoUpgradeNodesStatusFailed: "Не удалось обновить статус узлов автообновления, ошибка: {{ .err }}"

# добавление узла
MasterData: "Данные главного узла"
LoadSftpClient: "Загрузить SFTP-клиент"
PackageMasterData: "Создать архив резервной копии главного узла"
UploadBackup: "Загрузить резервные данные"
TaskAddNode: "Добавить узел"
LoadNodeArch: "Получить информацию об архитектуре узла"
LoadNodeArchDetail: "Обнаружена архитектура главного узла: {{ .local }}, архитектура дочернего узла: {{ .node }}"
LoadNodeUpgradeDetail: "Используется каталог установки исторической версии v1: {{ .baseDir }}, порт прослушивания службы: {{ .port }}"
SyncAgentBaseInfo: "Синхронизировать базовую информацию узла"
GenerateSSLInfo: "Сгенерировать SSL информацию узла"
ConnInfoNotMatch: "Информация о соединении не совпадает"
MakeAgentPackage: "Сгенерировать установочный пакет узла"
SendAgent: "Отправить установочный пакет узла"
StartService: "Запустить сервис"
NoBackupNode: "Резервный узел в настоящее время пуст. Выберите резервный узел для сохранения и повторите попытку"

# синхронизация файлов и образов узла
LocalNodeIpFailed: "Не удалось получить IP главного узла. Измените главный узел и добавьте IP-адрес и данные аутентификации SSH."
HandlePrivateKey: "Обработать закрытый ключ узла"
HandlePublicKey: "Обработать открытый ключ узла"
ExchangeFile: "Начать синхронизацию {{ .sourcePath }} с узла {{ .source }} на узел {{ .dest }}:{{ .destPath }}"
NodeFile: "Файл узла"
ImageSyncTaskName: "Синхронизировать образы: {{ .count }}"
SSLSyncTaskName: "Синхронизировать сертификаты: {{ .count }}"
AppSyncTaskName: "Синхронизировать приложение {{ .name }}"
SSLSyncToNode: "Отправить сертификат [{{ .cert }}] на узел [{{ .node }}]"
ImageSyncSave: "Сохранить образ {{ .image }}"
ImageSyncSaveTags: "Сохранить теги образа {{ .tags }}"
ImageSyncToNode: "Синхронизировать образ {{ .image }} с узлом {{ .node }}"
ImageSyncLoad: "Загрузить образ {{ .image }} на узел {{ .node }}"
ImageSyncClean: "Очистить временные файлы образа {{ .image }}"
ImageSyncNoTag: "У образа {{ .image }} нет тега, поэтому он будет сохранён по ID образа"
ImageSyncFrontendTagsIgnored: "На исходном узле не найдены теги образа {{ .image }}. Теги из frontend проигнорированы."
ImageSyncHandlePrivateKey: "Обработать закрытый ключ узла синхронизации образов"
ImageSyncHandlePublicKey: "Обработать открытый ключ узла синхронизации образов"
ImageSyncTransfer: "Начать передачу временного файла образа: {{ .source }}:{{ .sourcePath }} -> {{ .dest }}:{{ .destPath }}"

# командная строка
SudoHelper: "Пожалуйста, используйте {{ .cmd }} или переключитесь на пользователя root"
UsernameNeed: "Для Enterprise-версии необходимо указать --username"
DBConnErr: "Ошибка: не удалось инициализировать соединение с базой данных, {{ .err }}"
SystemVersion: "Версия:"
SystemMode: "Режим:"

# командная строка - приложение
AppVersion: "Версия приложения"
AppCommands: "Команды приложения"
AppInit: "Инициализация приложения"
AppKeyVal: "Ключ приложения (поддерживаются только английские символы)"
AppCreateFileErr: "Не удалось создать файл {{ .name }} {{ .err }}"
AppCreateDirErr: "Не удалось создать папку {{ .name }} {{ .err }}"
AppMissKey: "Отсутствует ключ приложения, используйте -k для указания"
AppMissVersion: "Отсутствует версия приложения, используйте -v для указания"
AppVersionExist: "Версия уже существует"
AppCreateSuccessful: "Успешно создано"
AppWriteErr: "Не удалось записать файл {{ .name }} {{ .err }}"

# командная строка - IP прослушивания
ListenIPCommands: "Переключить IP для прослушивания"
ListenIPv4: "Прослушивание IPv4"
ListenIPv6: "Прослушивание IPv6"
ListenChangeSuccessful: "Переключено успешно Теперь прослушиваем {{ .value }}"

# командная строка - сброс
ResetCommands: "Сбросить информацию о системе"
ResetMFA: "Отменить двухфакторную аутентификацию 1Panel"
ResetHttps: "Отменить вход в 1Panel через https"
ResetEntrance: "Отменить безопасный вход 1Panel"
ResetIPs: "Отменить ограничения авторизованных IP для 1Panel"
ResetDomain: "Отменить привязку домена доступа 1Panel"
ResetPasskey: "Сбросить passkey 1Panel"

# командная строка - пользователь
UserList: "Получить список пользователей 1Panel"
UserTableName: "Имя"
UserTableMFAStatus: "Статус MFA"
UserTableSuperAdmin: "Суперадмин"
UserTableCreatedAt: "Создано"
UserEmptyList: "Пользователи не найдены"
UserInfo: "Получить информацию о панели"
UserInfoAddr: "Адрес панели:"
UserInfoPassHelp: "Подсказка: для изменения пароля можно выполнить команду:"

# командная строка - восстановление
RestoreCommands: "Откатить сервис и данные 1Panel"
RestoreNoSuchFile: "Файлы для отката не найдены"
RestoreStep1: "(1/5) Начинаем откат сервиса и данных 1Panel из каталога {{ .name }}..."
RestoreStep2: "(2/5) Откат бинарного файла 1Panel завершён"
RestoreStep3: "(3/5) Откат скриптов 1Panel завершён"
RestoreStep4: "(4/5) Откат сервиса 1Panel завершён"
RestoreStep5: "(5/5) Откат данных 1Panel завершён"
RestoreSuccessful: "Откат завершён. Возвращено к версии {{ .version }}. Перезапускаем сервис..."

# командная строка - обновление
UpdateCommands: "Изменить информацию панели"
UpdateUser: "Изменить информацию пользователя"
UpdatePassword: "Изменить пароль пользователя"
UpdatePort: "Изменить порт панели"
UpdateUserNull: "Ошибка: введён пустой пользователь"
UpdateUserBlank: "Ошибка: введённый пользователь содержит пробелы"
UpdateUserFormat: "Ошибка: неверный формат имени пользователя Поддерживаются только английские, китайские символы, цифры и _ , длина 3-30 символов"
UpdateUserErr: "Ошибка: не удалось изменить пользователя, {{ .err }}"
UpdateSuccessful: "Успешно изменено"
UpdateUserResult: "Пользователь: {{ .name }}"
UpdatePasswordRead: "Ошибка: не удалось прочитать информацию о пароле пользователя, {{ .err }}"
UpdatePasswordNull: "Ошибка: введён пароль пуст"
UpdateUPasswordBlank: "Ошибка: введён пароль с пробелами"
UpdatePasswordFormat: "Ошибка: пароль пользователя должен содержать только буквы, цифры и специальные символы (@#$%*_,.?) и иметь длину 8-30 символов."
UpdatePasswordLen: "Ошибка: пароль должен быть длиной не менее 6 символов"
UpdatePasswordRe: "Подтверждение пароля:"
UpdatePasswordErr: "Ошибка: не удалось изменить пароль пользователя, {{ .err }}"
UpdatePasswordSame: "Ошибка: пароли не совпадают, пожалуйста, проверьте и попробуйте снова"
UpdatePasswordResult: "Пароль пользователя: {{ .name }}"
UpdatePortFormat: "Ошибка: введённый порт должен быть в пределах от 1 до 65535"
UpdatePortUsed: "Ошибка: этот порт уже занят, пожалуйста, проверьте и попробуйте снова"
UpdatePortErr: "Ошибка: не удалось изменить порт панели, {{ .err }}"
UpdatePortResult: "Порт панели: {{ .name }}"
UpdatePortFirewallAdd: "Не удалось добавить правило фаервола для порта, {{ .err }}, пожалуйста, вручную добавьте порт {{ .name }} в правила фаервола."
UpdatePortFirewallDel: "Ошибка: не удалось удалить правило фаервола для порта, {{ .err }}"
UpdatePortFirewallReload: "Не удалось перезагрузить фаервол, {{ .err }}, пожалуйста, вручную перезагрузите фаервол."

# мобильное приложение
ErrVerifyToken: 'шибка проверки токена, пожалуйста, сбросьте и отсканируйте снова.'
ErrInvalidToken: 'Неверный токен, пожалуйста, сбросьте и отсканируйте снова.'
ErrExpiredToken: 'Токен истек, пожалуйста, сбросьте и отсканируйте снова.'

# экспорт команд
Name: "Название"
Command: "Команда"

# LDAP
ErrLDAPConnectionTest: "Не удалось выполнить проверку подключения LDAP. Проверьте адрес сервера, учетную запись привязки и настройки сети."
ErrLDAPLoginTest: "Не удалось выполнить проверку входа LDAP. Проверьте имя пользователя и пароль."
LDAPConnectionTestSuccess: "Проверка подключения LDAP выполнена успешно."
ErrLDAPDirectorySearch: "Не удалось прочитать пользователей LDAP. Проверьте подключение и настройки поиска."
ErrLDAPConfigLoad: "Не удалось загрузить конфигурацию LDAP."
ErrLDAPConfigSave: "Не удалось сохранить конфигурацию LDAP."
ErrLDAPURLInvalid: "Адрес сервера LDAP должен использовать ldap:// или ldaps:// и содержать допустимый хост."
ErrLDAPBindDNRequired: "Требуется DN привязки."
ErrLDAPBindPasswordRequired: "Требуется пароль привязки."
ErrLDAPUserOURequired: "Требуется OU пользователей."
ErrLDAPConnectTimeoutRange: "Время ожидания подключения должно быть от 1 до 120 секунд."
ErrLDAPSearchPageSizeRange: "Размер страницы запроса LDAP должен быть от 1 до 10000."
ErrLDAPResultPageSizeRange: "Размер страницы результатов не может превышать 200."
ErrLDAPAttributeMapOnlyName: "Сопоставление атрибутов поддерживает только поле name."
ErrLDAPNameAttributeRequired: "Требуется атрибут LDAP, сопоставленный с name."
ErrLDAPAttributeNameInvalid: "Сопоставление содержит недопустимое имя атрибута LDAP."
ErrLDAPUserFilterRequired: "Требуется фильтр пользователей."
ErrLDAPUserFilterInvalid: "Фильтр пользователей не является допустимым фильтром LDAP."
ErrLDAPAttributeMapObject: "Сопоставление атрибутов должно быть допустимым объектом JSON."
ErrLDAPImportModeInvalid: "Режим импорта должен включать выбранных или всех пользователей."
ErrLDAPImportSelectionRequired: "Выберите хотя бы одного пользователя LDAP для импорта."
ErrLDAPImportSelectionInvalid: "Выбранные пользователи LDAP недействительны или больше не существуют. Повторно прочитайте каталог."
ErrLDAPConfigChanged: "Конфигурация LDAP изменилась. Повторно прочитайте каталог и просмотрите импорт."
ErrLDAPRoleRequired: "Выберите роль для новых пользователей LDAP."
ErrLDAPImportPlanIncomplete: "Неполный план импорта LDAP нельзя выполнить."
ErrLDAPQueryTokenInvalid: "Результат запроса LDAP истек. Повторно прочитайте каталог."
ErrLDAPPlanTokenInvalid: "Предварительный просмотр импорта LDAP истек. Выполните его повторно."
ErrLDAPOperationFailed: "Операция LDAP завершилась ошибкой. Повторите попытку."
ErrLDAPEntryIdentityMissing: "В записи LDAP отсутствует стабильный идентификатор или имя пользователя."
ErrLDAPDuplicateExternalID: "LDAP вернул повторяющиеся идентификаторы пользователей."
ErrLDAPUsernameConflict: "Имя пользователя уже используется другим пользователем."
ErrLDAPUsernameSourceConflict: "Имя пользователя уже используется локальным пользователем или другим источником аутентификации."
ErrLDAPUsernameConcurrentConflict: "Во время импорта имя пользователя было занято другим пользователем."
ErrLDAPLocalCredentialsReadonly: "Имена и пароли пользователей LDAP управляются LDAP и не могут быть изменены локально."
ErrLDAPPasswordExpirationUnsupported: "Для пользователей LDAP не применяется локальная политика срока действия пароля."
ErrLDAPSyncSourceDisabled: "Включите AD/LDAP перед включением или запуском синхронизации."
ErrLDAPSyncConfigSave: "Не удалось сохранить настройки синхронизации LDAP."
ErrLDAPSyncSchedule: "Не удалось обновить расписание синхронизации LDAP."
ErrLDAPSyncCronInvalid: "Введите корректное пятикомпонентное выражение Cron."
ErrLDAPSyncWeekdayInvalid: "Выберите корректный день недели."
ErrLDAPSyncCronRequired: "Введите выражение Cron."
ErrLDAPSyncScheduleTypeInvalid: "Выберите корректный тип расписания синхронизации."
ErrLDAPSyncTimeInvalid: "Введите корректное время выполнения."
ErrLDAPSyncRunning: "Задача синхронизации LDAP уже выполняется."
ErrLDAPSyncDirectoryIncomplete: "LDAP вернул неполный результат полного запроса. Статусы пользователей не были изменены."
ErrLDAPSyncFailed: "Не удалось синхронизировать пользователей LDAP."
LDAPSyncSuccess: "Синхронизация пользователей LDAP успешно завершена."
ErrSAML2NotEnabled: "Аутентификация SAML2 не включена."
ErrSAML2ConfigInvalid: "Конфигурация SAML2 недействительна."
ErrSAML2ConfigChanged: "Конфигурация SAML2 изменилась. Запустите аутентификацию заново."
ErrSAML2PanelOriginMissing: "Введите корректный публичный URL 1Panel, содержащий только схему, хост и необязательный порт."
ErrSAML2MetadataInvalid: "Метаданные IdP отсутствуют или недействительны."
ErrSAML2MetadataURLInvalid: "URL метаданных IdP или одна из конечных точек в метаданных не разрешены."
ErrSAML2MetadataFetch: "Не удалось загрузить метаданные IdP."
ErrSAML2MetadataCertificate: "Метаданные IdP не содержат подходящего сертификата подписи."
ErrSAML2KeyPairInvalid: "Закрытый ключ и сертификат SP недействительны или не соответствуют друг другу."
ErrSAML2NameAttributeMissing: "Настроенный атрибут имени пользователя SAML2 отсутствует или недействителен."
ErrSAML2DefaultRoleInvalid: "Роль по умолчанию, настроенная для SAML2, недоступна."
ErrSAML2SLOUnavailable: "IdP не предоставляет поддерживаемую службу единого выхода."
ErrSAML2TestExpired: "Срок действия теста SAML2 истек. Запустите его снова."
ErrSAML2LoginExpired: "Срок действия запроса на вход SAML2 истек. Повторите попытку."
ErrSAML2InvalidState: "Состояние входа SAML2 недействительно или уже использовано."
ErrSAML2RequestBuild: "Не удалось сформировать запрос SAML2."
ErrSAML2ResponseInvalid: "Ответ SAML2 недействителен."
ErrSAML2SignatureInvalid: "Подпись SAML2 недействительна."
ErrSAML2Replay: "Сообщение SAML2 уже было использовано."
ErrSAML2NameIDMissing: "NameID SAML2 отсутствует или недействителен."
ErrSAML2SessionIndexMissing: "SessionIndex SAML2 отсутствует или недействителен."
ErrSAML2NameConflictLocal: "Имя пользователя SAML2 конфликтует с локальным пользователем."
ErrSAML2NameConflictLDAP: "Имя пользователя SAML2 конфликтует с пользователем LDAP."
ErrSAML2NameConflictOIDC: "Имя пользователя SAML2 конфликтует с пользователем OIDC."
ErrSAML2NameConflictSAML2: "Имя пользователя SAML2 конфликтует с другой учетной записью SAML2."
ErrSAML2Internal: "Во время аутентификации SAML2 произошла внутренняя ошибка. Повторите попытку позже."
ErrSAML2LogoutExpired: "Срок действия запроса на выход SAML2 истек."
ErrSAML2LogoutInvalid: "Сообщение выхода SAML2 недействительно."
ErrSAML2LocalCredentialsReadonly: "Имена пользователей и пароли SAML2 управляются поставщиком удостоверений и не могут быть изменены локально."
ErrSAML2PasswordExpirationUnsupported: "Для пользователей SAML2 не применяется локальная политика срока действия паролей."
