import { getFuLocaleMessage } from '@/lang/fu';

const message = {
    commons: {
        true: 'Да',
        false: 'Нет',
        colon: ': ',
        example: 'например, ',
        fit2cloud: 'FIT2CLOUD',
        lingxia: 'LXware',
        button: {
            run: 'Запустить',
            add: 'Добавить',
            select: 'Выбрать',
            save: 'Сохранить',
            set: 'Настройки',
            sync: 'Синхронизировать',
            delete: 'Удалить',
            edit: 'Редактировать',
            enable: 'Включить',
            disable: 'Отключить',
            confirm: 'Подтвердить',
            cancel: 'Отмена',
            reset: 'Сбросить',
            restart: 'Перезапустить',
            conn: 'Подключить',
            disConn: 'Отключить',
            clean: 'Очистить',
            cleanAll: 'Очистить все',
            selectAll: 'Выбрать все',
            login: 'Войти',
            close: 'Закрыть',
            stop: 'Остановить',
            start: 'Запустить',
            view: 'Просмотр',
            watch: 'Следить',
            handle: 'Запустить',
            expand: 'Развернуть',
            clone: 'Клонировать',
            collapse: 'Свернуть',
            log: 'Логи',
            back: 'Назад',
            backup: 'Резервное копирование',
            recover: 'Восстановить',
            retry: 'Повторить попытку',
            upload: 'Загрузить',
            download: 'Скачать',
            init: 'Инициализировать',
            verify: 'Проверить',
            saveAndEnable: 'Сохранить и включить',
            import: 'Импорт',
            importAll: 'Импортировать все',
            export: 'Экспорт',
            power: 'Отправить',
            search: 'Поиск',
            refresh: 'Обновить',
            reconnect: 'Переподключиться',
            get: 'Получить',
            upgrade: 'Обновить',
            update: 'Обновить',
            ignore: 'Игнорировать обновление',
            install: 'Установить',
            copy: 'Копировать',
            random: 'Сгенерировать',
            uninstall: 'Удалить',
            fullscreen: 'Полный экран',
            quitFullscreen: 'Выйти из полного экрана',
            showAll: 'Показать все',
            hideSome: 'Скрыть некоторые',
            agree: 'Согласен',
            notAgree: 'Не согласен',
            preview: 'Предпросмотр',
            open: 'Открыть',
            notSave: 'Не сохранять',
            createNewFolder: 'Создать новую папку',
            createNewFile: 'Создать новый файл',
            helpDoc: 'Документация',
            unbind: 'Отвязать',
            cover: 'Заменить',
            skip: 'Пропустить',
            fix: 'Исправить',
            down: 'Остановить',
            up: 'Запустить',
            sure: 'Подтвердить',
            show: 'Показать',
            hide: 'Скрыть',
            visit: 'Открыть',
            migrate: 'Мигрировать',
            prev: 'Назад',
            next: 'Далее',
            create: 'Создать',
            setDefault: 'Сбросить по умолчанию',
            bind: 'Привязать',
            tip: 'Подсказка',
        },
        operate: {
            start: 'Запустить',
            stop: 'Остановить',
            restart: 'Перезапустить',
            reload: 'Перезагрузить',
            rebuild: 'Перестроить',
            sync: 'Синхронизировать',
            up: 'Запустить',
            down: 'Остановить',
            delete: 'Удалить',
        },
        search: {
            timeStart: 'Время начала',
            timeEnd: 'Время окончания',
            timeRange: 'До',
            dateStart: 'Дата начала',
            dateEnd: 'Дата окончания',
            date: 'Дата',
        },
        table: {
            all: 'Все',
            total: 'Всего {0}',
            name: 'Имя',
            type: 'Тип',
            card: 'Карточка',
            table: 'Таблица',
            status: 'Статус',
            statusSuccess: 'Успешно',
            statusFailed: 'Ошибка',
            statusWaiting: 'Ожидание...',
            records: 'Записи',
            group: 'Группа',
            createdAt: 'Время создания',
            publishedAt: 'Время публикации',
            date: 'Дата',
            updatedAt: 'Время обновления',
            operate: 'Операции',
            message: 'Сообщение',
            description: 'Описание',
            interval: 'Интервал',
            user: 'Владелец',
            title: 'Заголовок',
            port: 'Порт',
            forward: 'Переадресация',
            protocol: 'Протокол',
            tableSetting: 'Настройки таблицы',
            refreshRate: 'Частота обновления',
            selectColumn: 'Выбрать столбец',
            local: 'локальный',
            serialNumber: 'Серийный номер',
            manageGroup: 'Управление группами',
            backToList: 'Вернуться к списку',
            keepEdit: 'Продолжить редактирование',
            pin: 'Закрепить сверху',
            unpin: 'Открепить',
            default: 'По умолчанию',
            noRefresh: 'Без автообновления',
            creator: 'Создатель',
            updater: 'Обновил',
        },
        loadingText: {
            Upgrading: 'Обновление системы, пожалуйста, подождите...',
            Restarting: 'Перезагрузка системы, пожалуйста, подождите...',
            Recovering: 'Восстановление из снапшота, пожалуйста, подождите...',
            Rollbacking: 'Откат из снапшота, пожалуйста, подождите...',
        },
        msg: {
            noneData: 'Нет данных',
            delete: 'Эта операция удаления не может быть отменена. Хотите продолжить?',
            clean: 'Эта операция очистки не может быть отменена. Хотите продолжить?',
            closeDrawerHelper: 'Система может не сохранить внесённые вами изменения. Продолжить?',
            deleteSuccess: 'Успешно удалено',
            loginSuccess: 'Успешный вход',
            operationSuccess: 'Операция выполнена успешно',
            operationFailed: 'Не удалось выполнить операцию',
            copySuccess: 'Успешно скопировано',
            notSupportOperation: 'Эта операция не поддерживается',
            requestTimeout: 'Время запроса истекло, попробуйте позже',
            infoTitle: 'Подсказка',
            notRecords: 'Для текущей задачи не создано записей выполнения',
            sureLogOut: 'Вы уверены, что хотите выйти?',
            createSuccess: 'Успешно создано',
            updateSuccess: 'Успешно обновлено',
            uploadSuccess: 'Успешно загружено',
            operateConfirm: 'Если вы уверены в операции, введите её вручную: ',
            inputOrSelect: 'Пожалуйста, выберите или введите',
            selectOne: 'Пожалуйста, выберите один элемент: {0}',
            copyFailed: 'Не удалось скопировать',
            operatorHelper: 'Операция "{1}" будет выполнена над "{0}" и не может быть отменена. Хотите продолжить?',
            notFound: 'Извините, запрошенная страница не существует.',
            unSupportType: 'Текущий тип файла не поддерживается.',
            unSupportSize: 'Загруженный файл превышает {0}M, пожалуйста, подтвердите!',
            fileExist: 'Файл уже существует в текущей папке. Повторная загрузка не поддерживается.',
            fileNameErr:
                'Вы можете загружать только файлы, имя которых содержит от 1 до 256 символов, включая английские буквы, китайские иероглифы, цифры или точки (.-_)',
            confirmNoNull: 'Убедитесь, что значение {0} не пустое.',
            errPort: 'Неверная информация о порте, пожалуйста, проверьте!',
            remove: 'Удалить',
            backupHelper: 'Текущая операция создаст резервную копию {0}. Хотите продолжить?',
            recoverHelper: 'Восстановление из файла {0}. Эта операция необратима. Хотите продолжить?',
            refreshSuccess: 'Обновление успешно',
            rootInfoErr: 'Это уже корневой каталог',
            resetSuccess: 'Сброс успешен',
            creatingInfo: 'Создание, эта операция не нужна',
            offlineTips: 'Офлайн версия не поддерживает эту операцию',
            errImportFormat: 'Данные импорта или формат ненормальны, проверьте и повторите попытку!',
            importHelper:
                'При импорте конфликтующих или дублирующихся данных импортированное содержимое будет использоваться в качестве стандарта для обновления исходных данных базы данных.',
            errImport: 'Содержимое файла ненормально:',
            backupSuccess: 'Резервное копирование выполнено',
            restoreSuccess: 'Восстановление выполнено',
            installSuccess: 'Установка выполнена',
            uninstallSuccess: 'Удаление выполнено',
        },
        login: {
            username: 'пользователя',
            password: 'Пароль',
            passkey: 'Вход по passkey',
            otherLoginMethods: 'Другие способы входа',
            welcome: 'Добро пожаловать, введите имя пользователя и пароль для входа!',
            errorAuthInfo: 'Введенное имя пользователя или пароль неверны, пожалуйста, введите заново!',
            errorMfaInfo: 'Неверная информация аутентификации, попробуйте еще раз!',
            captchaHelper: 'Капча',
            errorCaptcha: 'Ошибка кода капчи!',
            codeInput: 'Пожалуйста, введите 6-значный код подтверждения MFA',
            mfaTitle: 'MFA Сертификация',
            mfaCode: 'MFA код подтверждения',
            title: 'Панель управления Linux сервером',
            licenseHelper: '<Лицензионное соглашение сообщества>',
            errorAgree: 'Нажмите, чтобы согласиться с Лицензией программного обеспечения сообщества',
            logout: 'Выход',
            agreeTitle: 'Соглашение',
            agreeContent:
                'Для лучшей защиты ваших законных прав и интересов, пожалуйста, прочитайте и согласитесь со следующим соглашением &laquo; <a href = "https://www.fit2cloud.com/legal/licenses.html" target = "_blank" > Лицензионное соглашение сообщества </a> &raquo;',
            passkeyFailed: 'Вход по passkey не удался, попробуйте снова',
            passkeyNotSupported: 'Текущий браузер или среда не поддерживает passkey',
            passkeyToPassword: 'Не получается использовать passkey? Войдите по паролю',
        },
        rule: {
            username: 'Введите имя пользователя',
            password: 'Введите пароль',
            rePassword: 'Подтверждение пароля не совпадает с паролем.',
            requiredInput: 'Это поле обязательно для заполнения.',
            requiredSelect: 'Выберите элемент из списка',
            illegalChar: 'В настоящее время не поддерживается вставка символов & ; $ \' ` ( ) " > < ｜',
            illegalInput: 'Это поле не должно содержать недопустимых символов.',
            duplicate: 'Значение должно быть уникальным.',
            commonName:
                'Это поле должно начинаться с неспециальных символов и должно состоять из английских букв, китайских иероглифов, цифр, ".", "-" и "_" длиной 1-128.',
            userName: 'Поддерживает начало без специальных символов, английский, китайский, цифры и _, длина 3-30',
            simpleName:
                'Это поле не должно начинаться с подчеркивания и должно состоять из английских букв, цифр и "_" длиной 3-30.',
            simplePassword:
                'Это поле не должно начинаться с подчеркивания и должно состоять из английских букв, цифр и "_" длиной 1-30.',
            dbName: 'Это поле не должно начинаться с подчеркивания и должно состоять из английских букв, цифр и "_" длиной 1-64.',
            imageName: 'Поддерживает начало без специальных символов, английский, цифры, :@/.-_, длина 1-256',
            composeName: 'Поддерживаются неспециальные символы в начале, строчные буквы, цифры, - и _, длина 1-256',
            volumeName: 'Это поле должно состоять из английских букв, цифр, ".", "-" и "_" длиной 2-30.',
            supervisorName:
                'Это поле должно начинаться с неспециальных символов и должно состоять из английских букв, цифр, "-" и "_" длиной 1-128.',
            complexityPassword:
                'Поддерживаются комбинации пароля длиной 8-30 символов, содержащие как минимум два типа из следующих: буквы, цифры и специальные символы.',
            commonPassword: 'Длина этого поля должна быть больше 6.',
            linuxName:
                'Длина этого поля должна быть от 1 до 128. Поле не должно содержать эти специальные символы: "{0}".',
            email: 'Это поле должно быть действительным адресом электронной почты.',
            number: 'Это поле должно быть числом.',
            integer: 'Это поле должно быть положительным целым числом.',
            ip: 'Это поле должно быть действительным IP-адресом.',
            host: 'Это поле должно быть действительным IP-адресом или доменным именем.',
            hostHelper: 'Поддерживается ввод IP-адреса или доменного имени',
            port: 'Это поле должно быть действительным номером порта.',
            selectHelper: 'Пожалуйста, выберите правильный файл {0}',
            domain: 'Это поле должно быть в формате: example.com или example.com:8080.',
            databaseName: 'Это поле должно состоять из английских букв, цифр и "_" длиной 1-30.',
            ipErr: 'Это поле должно быть действительным IP-адресом.',
            numberRange: 'Это поле должно быть числом между {0} и {1}.',
            paramName: 'Это поле должно состоять из английских букв, цифр, ".", "-" и "_" длиной 2-30.',
            paramComplexity:
                'Это поле не должно начинаться и заканчиваться специальными символами и должно состоять из английских букв, цифр, "{0}" длиной 6-128.',
            paramUrlAndPort: 'Это поле должно быть в формате "http(s)://(доменное имя/ip):(порт)".',
            nginxDoc: 'Это поле должно состоять из английских букв, цифр и ".".',
            appName:
                'Это поле не должно начинаться и заканчиваться символами "-" и "_" и должно состоять из английских букв, цифр, "-" и "_" длиной 2-30.',
            containerName: 'Поддерживаются буквы, цифры, -, _ и .; не может начинаться с - _ или .; длина: 2-128',
            mirror: 'Адрес ускорения зеркала должен начинаться с http(s)://, поддерживает английские буквы (как заглавные, так и строчные), цифры, . / и -, и не должен содержать пустых строк.',
            disableFunction: 'Поддерживаются только буквы, подчеркивания и запятые',
            leechExts: 'Поддерживаются только буквы, цифры и запятые',
            paramSimple: 'Поддерживаются строчные буквы и цифры, длина 1-128',
            filePermission: 'Ошибка прав доступа к файлу',
            formatErr: 'Ошибка формата, пожалуйста, проверьте и повторите попытку',
            phpExtension: 'Поддерживаются только запятые, подчеркивания, строчные английские буквы и цифры',
            paramHttp: 'Должно начинаться с http:// или https://',
            phone: 'Неверный формат номера телефона',
            authBasicPassword: 'Поддерживает буквы, цифры и общие специальные символы, длина 1-72',
            length128Err: 'Длина не может превышать 128 символов',
            maxLength: 'Длина не может превышать {0} символов',
            alias: 'Поддерживает английский, цифры, - и _, длина 1-128, и не может начинаться или заканчиваться на -_.',
            vmName: 'Допустимы латинские буквы, цифры, ".", "-" и "_"; длина: 1-64; значение должно начинаться с буквы или цифры.',
            vmNetwork:
                'Допустимы латинские буквы, цифры, ".", ":", "-" и "_"; длина: 1-64; значение должно начинаться с буквы или цифры.',
        },
        res: {
            paramError: 'Запрос не удался, попробуйте позже!',
            forbidden: 'У текущего пользователя нет прав',
            serverError: 'Ошибка сервиса',
            notFound: 'Ресурс не существует',
            commonError: 'Запрос не удался',
        },
        service: {
            serviceNotStarted: 'Сервис {0} не запущен.',
        },
        status: {
            running: 'Работает',
            done: 'Завершено',
            scanFailed: 'Неполный',
            success: 'Успешно',
            waiting: 'Ожидание',
            waitForUpgrade: 'Ожидание Обновления',
            failed: 'Ошибка',
            stopped: 'Остановлен',
            error: 'Ошибка',
            created: 'Создан',
            restarting: 'Перезапуск',
            uploading: 'Загрузка',
            unhealthy: 'Нездоровый',
            removing: 'Удаление',
            paused: 'Приостановлен',
            exited: 'Вышел',
            partial: 'Частично',
            dead: 'Мертв',
            installing: 'Установка',
            enabled: 'Включен',
            disabled: 'Отключен',
            normal: 'Нормально',
            building: 'Сборка',
            upgrading: 'Обновление',
            pending: 'Ожидает редактирования',
            rebuilding: 'Пересборка',
            deny: 'Отказано',
            accept: 'Принято',
            used: 'Используется',
            starting: 'Запуск',
            recreating: 'Пересоздание',
            creating: 'Создание',
            init: 'Ожидание приложения',
            ready: 'нормально',
            applying: 'Применение',
            uninstalling: 'Удаление',
            lost: 'Потеряно',
            bound: 'Привязано',
            unbind: 'Не привязано',
            exceptional: 'Исключение',
            free: 'Свободно',
            enable: 'Включено',
            disable: 'Отключено',
            deleted: 'Удалено',
            notfound: 'Не найдено',
            inactive: 'Не запущено',
            degraded: 'Деградировано',
            inaccessible: 'Недоступно',
            unknown: 'Неизвестно',
            downloading: 'Загрузка',
            packing: 'Упаковка',
            sending: 'Отправка',
            healthy: 'Нормально',
            executing: 'Выполнение',
            installerr: 'Ошибка установки',
            applyerror: 'Ошибка применения',
            systemrestart: 'Прервано',
            starterr: 'Ошибка запуска',
            uperr: 'Ошибка запуска',
            new: 'Новый',
            conflict: 'Конфликт',
            duplicate: 'Дубликат',
            unexecuted: 'Не Выполнено',
            canceled: 'Отменено',
            unused: 'Не используется',
        },
        units: {
            second: ' секунда | секунда | секунд',
            minute: 'минута | минута | минут',
            hour: 'час | час | часов',
            day: 'день | день | дней',
            week: 'неделя | неделя | недель',
            month: 'месяц | месяц | месяцев',
            year: 'год | год | лет',
            time: 'раз',
            core: 'ядро | ядро | ядер',
            secondUnit: 'с',
            minuteUnit: 'мин',
            hourUnit: 'ч',
            dayUnit: 'д',
            millisecond: 'Миллисекунда',
            semicolon: ';',
        },
        log: {
            noLog: 'Нет доступных логов',
        },
    },
    menu: {
        home: 'Панель',
        apps: 'Приложения',
        website: 'Сайт | Сайты',
        project: 'Проект | Проекты',
        config: 'Конфигурация | Конфигурации',
        ssh: 'Настройки SSH',
        firewall: 'Firewall',
        ssl: 'Сертификат | Сертификаты',
        database: 'База данных | Базы данных',
        aiTools: 'AI',
        mcp: 'MCP',
        container: 'Контейнер | Контейнеры',
        cronjob: 'Cron | Задачи Cron',
        system: 'Система',
        security: 'Безопасность',
        files: 'Файлы',
        monitor: 'Мониторинг',
        terminal: 'Терминалы',
        settings: 'Настройки',
        toolbox: 'Инструменты',
        logs: 'Лог | Логи',
        runtime: 'Среда исполнения | Среды исполнения',
        processManage: 'Процесс | Процессы',
        process: 'Процесс | Процессы',
        network: 'Сеть | Сети',
        supervisor: 'Супервизор',
        tamper: 'Защита от несанкционированного доступа',
        app: 'Приложение',
        msgCenter: 'Задачи',
        disk: 'Диск',
        template: 'Шаблон',
        filter: 'Фильтр',
    },
    home: {
        recommend: 'Рекомендуемое',
        dir: 'Каталог',
        alias: 'Псевдоним',
        quickDir: 'Быстрый доступ',
        minQuickJump: 'Добавьте хотя бы одну запись быстрого доступа',
        maxQuickJump: 'Вы можете добавить до четырех записей быстрого доступа',
        database: 'База данных - Все',
        restart_1panel: 'Перезапустить панель',
        restart_system: 'Перезапустить сервер',
        operationSuccess: 'Готово. Перезагрузка. Обновите браузер позже.',
        entranceHelper: 'Безопасный вход не включен. Включите его в "Настройки -> Безопасность" для повышения защиты.',
        appInstalled: 'Приложения',
        systemInfo: 'Системная информация',
        hostname: 'Имя хоста',
        platformVersion: 'Операционная система',
        kernelVersion: 'Ядро',
        kernelArch: 'Архитектура',
        network: 'Сеть',
        io: 'Диск I/O',
        ip: 'Локальный IP',
        proxy: 'Системный прокси',
        baseInfo: 'Базовая информация',
        totalSend: 'Всего отправлено',
        totalRecv: 'Всего получено',
        rwPerSecond: 'Операции ввода/вывода',
        ioDelay: 'Задержка ввода/вывода',
        uptime: 'Работает с',
        runningTime: 'Время работы',
        mem: 'Системная Память',
        swapMem: 'Раздел подкачки',
        runSmoothly: 'Низкая нагрузка',
        runNormal: 'Средняя нагрузка',
        runSlowly: 'Высокая нагрузка',
        runJam: 'Тяжелая нагрузка',
        core: 'Физических ядер',
        logicCore: 'Логических ядер',
        corePercent: 'Использование Ядра',
        cpuFrequency: 'Частота CPU',
        cpuDetailedPercent: 'Распределение Времени CPU',
        cpuUser: 'Пользователь',
        cpuSystem: 'Система',
        cpuIdle: 'Простой',
        cpuIrq: 'IRQ',
        cpuSoftirq: 'Soft IRQ',
        cpuSteal: 'Steal',
        cpuTop: 'Топ 5 Процессов по Использованию ЦПУ',
        memTop: 'Топ 5 Процессов по Использованию Памяти',
        loadAverage: 'Средняя нагрузка за последние {0} мин.',
        load: 'Нагрузка',
        mount: 'Точка монтирования',
        fileSystem: 'Файловая система',
        total: 'Всего',
        used: 'Использовано',
        cache: 'Кэш',
        free: 'Свободно',
        shard: 'Шардированный',
        available: 'Доступно',
        percent: 'Утилизация',
        goInstall: 'Установить',
        networkCard: 'Интерфейс',
        disk: 'Диск',
        memo: 'Заметка',
        memoPlaceholder: 'Нажмите кнопку редактирования, чтобы включить редактирование.',
        carouselSetting: 'Настройки карусели',
        tooltipSensitiveInfo: 'Показать/скрыть конфиденциальную информацию',
    },
    tabs: {
        more: 'Больше',
        hide: 'Скрыть',
        closeLeft: 'Закрыть слева',
        closeRight: 'Закрыть справа',
        closeCurrent: 'Закрыть текущую',
        closeOther: 'Закрыть другие',
        closeAll: 'Закрыть все',
    },
    header: {
        logout: 'Выход',
    },
    database: {
        manage: 'Управление',
        deleteBackupHelper: 'Удалить резервные копии базы данных одновременно',
        delete: 'Операция удаления не может быть отменена, пожалуйста, введите "',
        deleteHelper: '" для удаления этой базы данных',
        deleteUserHelper: '" для удаления этого пользователя',
        userBoundDatabases: 'имеет доступ к следующим базам данных:',
        noMysql: 'Сервис базы данных (MySQL или MariaDB)',
        noPostgresql: 'Сервис базы данных PostgreSQL',
        goUpgrade: 'Обновить',
        goInstall: 'Установить',
        isDelete: 'Удалено',
        permission: 'Разрешения',
        format: 'Набор Символов',
        collation: 'Сопоставление',
        collationHelper: 'Если пусто, используйте сопоставление по умолчанию для набора символов {0}',
        permissionForIP: 'IP',
        permissionAll: 'Все (%)',
        databaseConnInfo: 'Подключение',
        rootPassword: 'Пароль root',
        serviceName: 'Имя сервиса',
        serviceNameHelper: 'Доступ между контейнерами в одной сети.',
        backupList: 'Резервное копирование',
        loadBackup: 'Импорт',
        localUpload: 'Локальная загрузка',
        hostSelect: 'Выбор сервера',
        selectHelper: 'Вы уверены, что хотите импортировать файл резервной копии {0}?',
        remoteAccess: 'Удаленный доступ',
        remoteHelper: 'Несколько IP через запятую, например: 172.16.10.111,172.16.10.112',
        remoteConnHelper:
            'Удаленное подключение к MySQL как пользователь root может иметь риски безопасности. Поэтому выполняйте эту операцию с осторожностью.',
        changePassword: 'Пароль',
        changePasswordHelper:
            'База данных была связана с приложением. Изменение пароля изменит пароль базы данных приложения одновременно. Изменение вступит в силу после перезапуска приложения.',
        recoverTimeoutHelper: '-1 означает отсутствие ограничения по времени ожидания',
        confChange: 'Конфигурация',
        confNotFound:
            'Файл конфигурации не найден. Пожалуйста, обновите приложение до последней версии в магазине приложений и попробуйте снова!',
        portHelper:
            'Этот порт является открытым портом контейнера. Вам нужно сохранить изменение отдельно и перезапустить контейнер!',
        loadFromRemote: 'Синхронизировать',
        userBind: 'Привязать пользователя',
        userAuthorization: 'Доступ пользователя',
        noUserAuthorization: 'Не предоставлять доступ',
        authorizedDatabaseCount: 'Доступных баз данных: {0}',
        authorizationManagement: 'Управление доступом',
        authorizedUsers: 'Авторизованные пользователи',
        authorizedUserCount: 'Пользователей: {0}',
        addUserAuthorization: 'Добавить доступ пользователю',
        revokeAuthorization: 'Отозвать доступ',
        revokeAuthorizationHelper: 'Отозвать у пользователя {0} доступ к базе данных {1}?',
        supplementPassword: 'Добавить пароль',
        supplementPasswordHelper: 'Сохраняет текущий пароль только в 1Panel и не изменяет пароль в MySQL.',
        noUserBind: 'Нет привязки',
        pgBindHelper:
            'Эта операция используется для создания нового пользователя и привязки его к целевой базе данных. В настоящее время выбор уже существующих пользователей в базе данных не поддерживается.',
        pgSuperUser: 'Суперпользователь',
        loadFromRemoteHelper: 'Синхронизировать базы данных, пользователей и права доступа с сервера в 1Panel?',
        passwordHelper: 'Не удается получить, нажмите для изменения',
        remote: 'Удаленный',
        remoteDB: 'Удаленный сервер | Удаленные серверы',
        createRemoteDB: 'Привязать @.lower:database.remoteDB',
        unBindRemoteDB: 'Отвязать @.lower:database.remoteDB',
        unBindForce: 'Принудительная отвязка',
        unBindForceHelper:
            'Игнорировать все ошибки во время процесса отвязки, чтобы обеспечить успешное завершение операции',
        unBindRemoteHelper:
            'Отвязка удаленной базы данных только удалит связь привязки и не будет напрямую удалять удаленную базу данных',
        editRemoteDB: 'Редактировать удаленный сервер',
        localDB: 'Локальная база данных',
        address: 'Адрес базы данных',
        version: 'Версия базы данных',
        userHelper:
            'Пользователь root или пользователь базы данных с привилегиями root может получить доступ к удаленной базе данных.',
        mongodbPermissionDbOwner: 'Владелец базы данных',
        mongodbPermissionRead: 'Чтение данных',
        mongodbPermissionReadWrite: 'Чтение и запись данных',
        mongodbPermissionUserAdmin: 'Администратор пользователей',
        pgUserHelper: 'Пользователь базы данных с привилегиями суперпользователя.',
        ssl: 'Использовать SSL',
        clientKey: 'Приватный ключ клиента',
        clientCert: 'Сертификат клиента',
        caCert: 'Сертификат CA',
        hasCA: 'Есть сертификат CA',
        skipVerify: 'Игнорировать проверку действительности сертификата',
        initialDB: 'Исходная База Данных',
        formatHelper:
            'Текущая кодировка базы данных - {0}, несоответствие кодировок может привести к ошибке восстановления',
        dropHelper: 'Вы можете перетащить загружаемый файл сюда или',
        clickHelper: 'нажмите для загрузки',
        supportUpType:
            'Поддерживаются только форматы файлов sql, sql.gz, tar.gz, .zip. Импортируемый сжатый файл должен содержать только один файл .sql или включать test.sql',
        currentStatus: 'Текущее состояние',
        baseParam: 'Базовые параметры',
        performanceParam: 'Параметры производительности',
        runTime: 'Время запуска',
        connections: 'Всего подключений',
        bytesSent: 'Отправлено байт',
        bytesReceived: 'Получено байт',
        queryPerSecond: 'Запросов в секунду',
        txPerSecond: 'Транзакций в секунду',
        connInfo: 'активные/пиковые подключения',
        connInfoHelper: 'Если значение слишком большое, увеличьте "max_connections".',
        threadCacheHit: 'Попадания в кэш потоков',
        threadCacheHitHelper: 'Если значение слишком низкое, увеличьте "thread_cache_size".',
        indexHit: 'Попадания в индекс',
        indexHitHelper: 'Если значение слишком низкое, увеличьте "key_buffer_size".',
        innodbIndexHit: 'Попадания в индекс InnoDB',
        innodbIndexHitHelper: 'Если значение слишком низкое, увеличьте "innodb_buffer_pool_size".',
        cacheHit: 'Попадания в кэш запросов',
        cacheHitHelper: 'Если значение слишком низкое, увеличьте "query_cache_size".',
        tmpTableToDB: 'Временные таблицы на диске',
        tmpTableToDBHelper: 'Если значение слишком большое, попробуйте увеличить "tmp_table_size".',
        openTables: 'Открытые таблицы',
        openTablesHelper: 'Значение конфигурации "table_open_cache" должно быть больше или равно этому значению.',
        selectFullJoin: 'Полные соединения',
        selectFullJoinHelper: 'Если значение не 0, проверьте правильность индексов таблиц данных.',
        selectRangeCheck: 'Количество соединений без индекса',
        selectRangeCheckHelper: 'Если значение не 0, проверьте правильность индексов таблиц данных.',
        sortMergePasses: 'Количество сортировок слиянием',
        sortMergePassesHelper: 'Если значение слишком большое, увеличьте "sort_buffer_size".',
        tableLocksWaited: 'Количество блокировок таблиц',
        tableLocksWaitedHelper:
            'Если значение слишком большое, рассмотрите возможность увеличения производительности базы данных.',
        performanceTuning: 'Настройка производительности',
        optimizationScheme: 'Схема оптимизации',
        keyBufferSizeHelper: 'Размер буфера для индексов',
        queryCacheSizeHelper: 'Кэш запросов. Если эта функция отключена, установите этот параметр в 0.',
        tmpTableSizeHelper: 'Размер кэша временных таблиц',
        innodbBufferPoolSizeHelper: 'Размер буфера InnoDB',
        innodbLogBufferSizeHelper: 'Размер буфера журнала InnoDB',
        sortBufferSizeHelper: '* подключений, размер буфера сортировки на поток',
        readBufferSizeHelper: '* подключений, размер буфера чтения',
        readRndBufferSizeHelper: '* подключений, размер буфера случайного чтения',
        joinBufferSizeHelper: '* подключений, размер кэша таблиц соединений',
        threadStackelper: '* подключений, размер стека на поток',
        binlogCacheSizeHelper: '* подключений, размер кэша бинарного журнала (кратно 4096)',
        threadCacheSizeHelper: 'Размер пула потоков',
        tableOpenCacheHelper: 'Кэш таблиц',
        maxConnectionsHelper: 'Максимум подключений',
        restart: 'Перезапустить',
        slowLog: 'Медленные запросы',
        noData: 'Пока нет медленных запросов.',
        isOn: 'Включено',
        longQueryTime: 'порог (сек)',
        thresholdRangeHelper: 'Пожалуйста, введите корректный порог (1 - 600).',
        timeout: 'Таймаут(сек)',
        timeoutHelper: 'Период таймаута неактивного подключения. 0 означает, что подключение постоянно активно.',
        maxclients: 'Макс. клиентов',
        requirepassHelper:
            'Оставьте пустым, если пароль не установлен. Изменения нужно сохранить отдельно и перезапустить контейнер!',
        databases: 'Количество баз данных',
        maxmemory: 'Максимальное использование памяти',
        maxmemoryHelper: '0 означает без ограничений.',
        tcpPort: 'Текущий порт прослушивания.',
        uptimeInDays: 'Дней в работе.',
        connectedClients: 'Количество подключенных клиентов.',
        usedMemory: 'Текущее использование памяти Redis.',
        usedMemoryRss: 'Размер памяти, запрошенный у операционной системы.',
        usedMemoryPeak: 'Пиковое потребление памяти Redis.',
        memFragmentationRatio: 'Коэффициент фрагментации памяти.',
        totalConnectionsReceived: 'Общее количество подключенных клиентов с момента запуска.',
        totalCommandsProcessed: 'Общее количество выполненных команд с момента запуска.',
        instantaneousOpsPerSec: 'Количество команд, выполняемых сервером в секунду.',
        keyspaceHits: 'Количество успешных поисков ключа в базе данных.',
        keyspaceMisses: 'Количество неудачных попыток найти ключ в базе данных.',
        hit: 'Коэффициент попаданий при поиске ключей.',
        latestForkUsec: 'Количество микросекунд, затраченных на последнюю операцию fork().',
        redisCliHelper: 'Сервис "redis-cli" не обнаружен. Сначала включите сервис.',
        redisQuickCmd: 'Быстрые команды Redis',
        recoverHelper: 'Это перезапишет данные с [{0}]. Хотите продолжить?',
        mongodbRecoverDropAllCollections: 'Очистить текущую базу данных перед восстановлением',
        mongodbRecoverDropAllCollectionsHelper:
            'По умолчанию перезаписываются только существующие коллекции, а новые коллекции сохраняются. При включении текущая база данных очищается, а затем восстанавливается из резервной копии.',
        submitIt: 'Перезаписать данные',
        baseConf: 'Базовая',
        allConf: 'Все',
        restartNow: 'Перезапустить сейчас',
        restartNowHelper1:
            'Необходимо перезапустить систему после вступления изменений конфигурации в силу. Если ваши данные требуют сохранения, сначала выполните операцию сохранения.',
        restartNowHelper: 'Это вступит в силу только после перезапуска системы.',
        persistence: 'Сохранение',
        rdbHelper1: 'секунд(ы), вставить',
        rdbHelper2: 'элементов данных',
        rdbHelper3: 'Выполнение любого из условий запустит сохранение RDB.',
        rdbInfo: 'Убедитесь, что значение в списке правил находится в диапазоне от 1 до 100000',
        containerConn: 'Подключение контейнера',
        copyConnURL: 'Копировать URL подключения',
        connAddress: 'Адрес',
        containerConnHelper:
            'Этот адрес подключения может использоваться приложениями, работающими в среде выполнения веб-сайта (PHP и т.д.) или контейнере.',
        remoteConn: 'Внешнее подключение',
        remoteConnHelper2: 'Используйте этот адрес для неконтейнерных сред или внешних подключений.',
        remoteConnHelper3:
            'Адрес доступа по умолчанию - это IP хоста. Для изменения перейдите к пункту конфигурации "Адрес доступа по умолчанию" на странице настроек панели.',
        localIP: 'Локальный IP',
        localhostHelper:
            'Если для БД в контейнере указать "localhost", внешний доступ будет недоступен. Выбирайте внимательно!',
        changeConnHelper: 'Это изменит базу данных {0}. Продолжить?',
    },
    aiTools: {
        agents: {
            agent: 'Агент',
            account: 'Аккаунт модели',
            batchOperation: 'Пакетная операция',
            operationType: 'Тип операции',
            batchAction: 'Пакетно {0}',
            installSkillAction: 'Отправить Skill',
            batchAgentTask: 'Пакетно {0} агентов',
            dispatchAgentTask: 'Отправить задачи для действия {0} агентов',
            dispatchTask: 'Отправить задачи {0}',
            taskSubmitted: 'Задача {0} отправлена',
            allNodes: 'Все узлы',
            targetVersion: 'Целевая версия',
            skillSource: 'Источник Skill',
            skillKeyword: 'Ключевое слово Skill',
            clawHubSkillPlaceholder: 'Сначала найдите и выберите Skill',
            noAccountHint: 'Выберите существующий аккаунт модели или добавьте новый.',
            accountCount: '{0} аккаунтов модели',
            syncAgents: 'Синхронизировать связанные агенты',
            syncAgentsHelper: 'Обновите openclaw.json для агентов, использующих этот аккаунт модели',
            appVersion: 'Версия приложения',
            webuiPort: 'Порт WebUI',
            tokenOrAuth: 'Token/Аутентификация',
            allowedOrigins: 'Адреса доступа',
            allowedOriginsRequired: 'Укажите хотя бы один адрес доступа',
            allowedOriginsInvalid: 'Используйте формат http(s)://host-or-ip[:port]',
            provider: 'Поставщик моделей',
            accountModelsHelper: 'Настройте модели, которые этот аккаунт предоставляет OpenClaw для выбора и настройки',
            accountModelsRequired: 'Выберите хотя бы одну модель',
            verifyModel: 'Модель проверки',
            verifyModelHelper:
                'Выберите модель, доступную этому аккаунту. При сохранении будет отправлен минимальный запрос для проверки подключения.',
            verifyModelRequired: 'Выберите модель проверки',
            discoverModels: 'Получить модели',
            automaticModelDiscovery: 'Получить автоматически',
            manualModelConfiguration: 'Настроить вручную',
            discoverModelsHelper: 'Получить модели через API /v1/models поставщика и добавить их все в каталог моделей',
            discoverModelsFailedFallback: 'Не удалось получить модели. Настройте модель вручную.',
            discoverModelsFailedUseDefaults: 'Не удалось получить модели. Используются модели по умолчанию.',
            accountModelsDuplicate: 'В каталоге обнаружены повторяющиеся модели',
            modelPool: 'Каталог моделей',
            fallbackModels: 'Резервные модели',
            addFallbackModel: 'Добавить резервную модель',
            fallbackModelsEmpty: 'Резервные модели не настроены',
            modelInputTypes: 'Типы ввода',
            reasoning: 'Модель рассуждений',
            verified: 'Проверено',
            verifySkipped: 'Без проверки',
            skillsTab: 'Навыки',
            pluginsTab: 'Плагины',
            pluginsInstalled: 'Установленные',
            pluginsMarket: 'Каталог плагинов',
            pluginsMarketHint: 'Введите ключевое слово для поиска плагинов',
            pluginSearchPlaceholder: 'Поиск плагинов...',
            pluginOrigin: 'Источник',
            pluginOriginAll: 'Все источники',
            pluginOriginBundled: 'Встроенный',
            pluginOriginExternal: 'Внешний',
            pluginStatusAll: 'Все статусы',
            pluginEnabled: 'Включён',
            pluginDisabled: 'Отключён',
            pluginCategory: 'Категория',
            pluginVerification: 'Проверка',
            pluginOfficial: 'Официальный',
            pluginCommunity: 'Сообщество',
            pluginDownloads: 'Загрузки',
            pluginEnable: 'Включить',
            pluginDisable: 'Отключить',
            pluginListEmpty: 'Плагины отсутствуют',
            pluginSearchEmpty: 'Подходящие плагины не найдены',
            pluginInstallConfirm: 'Установить плагин {0}?',
            pluginDisableConfirm: 'Отключить плагин {0}?',
            pluginUninstallConfirm: 'Удалить плагин {0}?',
            securityTab: 'Безопасность',
            otherTab: 'Другое',
            timeZone: 'Часовой пояс',
            browserEnabled: 'Браузер включен',
            npmRegistry: 'Реестр NPM',
            npmRegistryHelper:
                'Используется для установки плагинов OpenClaw. Вы можете выбрать предустановленный реестр или указать свой.',
            npmRegistryInvalid: 'Введите корректный URL реестра NPM, начинающийся с http:// или https://',
            pluginInstallNPMRegistryHelper:
                'Перейдите в Настройки -> Другое, чтобы настроить реестр NPM и ускорить установку плагинов',
            skillsSearchPlaceholder: 'Поиск навыков...',
            skillsEmpty: 'Нет навыков',
            skillsMarket: 'Рынок навыков',
            skillsMarketHint: 'Выберите источник и выполните поиск навыков',
            skillsMarketEmpty: 'Подходящие навыки не найдены',
            skillsMarketSourceClawhubGlobal: 'ClawHub (Глобальный)',
            skillsMarketSourceClawhubChina: 'ClawHub (Китай)',
            skillsMarketSourceSkillhub: 'SkillHub (Tencent)',
            skillsMarketSourceLocalHub: 'Локальный магазин Skills',
            skillsScore: 'Оценка',
            skillsMarketSourceOfficial: 'Официальный',
            versionUnsupportedTitle: 'Эта функция не поддерживается в текущей версии',
            versionUnsupportedHelper: 'Пожалуйста, обновите OpenClaw до версии {0} или выше.',
            skillsGroupBuiltIn: 'Встроенные',
            skillsGroupExternal: 'Внешние',
            skillsGroupWorkspace: 'Рабочая область',
            switchModelSuccess: 'Модель успешно переключена',
            channelsTab: 'Каналы',
            agentRoleTab: 'Агенты',
            agentRoleUnsupported: 'Управление ролями в настоящее время поддерживается только для OpenClaw.',
            workspace: 'Каталог рабочей области',
            agentDir: 'Каталог агента',
            roleMarkdownDescriptions: {
                'AGENTS.md': [
                    'Операционные инструкции для агента и правила использования памяти.',
                    'Загружается в начале каждой сессии.',
                    'Подходит для правил, приоритетов и деталей поведения.',
                ],
                'SOUL.md': ['Персона, тон и границы.', 'Загружается в каждой сессии.'],
                'USER.md': ['Кто такой пользователь и как к нему обращаться.', 'Загружается в каждой сессии.'],
                'IDENTITY.md': ['Имя агента, стиль и эмодзи.', 'Создаётся или обновляется во время bootstrap-ритуала.'],
                'TOOLS.md': [
                    'Заметки о локальных инструментах и соглашениях.',
                    'Не управляет доступностью инструментов; это только подсказка.',
                ],
                'HEARTBEAT.md': [
                    'Необязательный короткий чек-лист для heartbeat-запусков.',
                    'Держите его коротким, чтобы не тратить токены.',
                ],
                'BOOT.md': [
                    'Необязательный стартовый чек-лист, выполняемый при перезапуске gateway, если включены внутренние hooks.',
                    'Держите его коротким; для внешних отправок используйте инструмент message.',
                ],
                'BOOTSTRAP.md': [
                    'Одноразовый ритуал первого запуска.',
                    'Создаётся только для совершенно нового рабочего пространства.',
                    'Удалите после завершения ритуала.',
                ],
            },
            duplicateBinding: 'Комбинация канала и ID аккаунта должна быть уникальной',
            accountIdOptional: 'ID аккаунта (необязательно)',
            saveAllMd: 'Сохранить все',
            roleMarkdownRestartHelper:
                'Сохранение всех текущих markdown-файлов требует перезапуска контейнера для применения. Выберите, перезапустить сейчас или позже.',
            configFileRestartHelper:
                'Сохранение файла конфигурации требует немедленного перезапуска контейнера для применения.',
            overviewSnapshot: 'Сводка',
            primaryModel: 'Основная модель',
            defaultModel: 'Модель по умолчанию',
            channelCount: 'Настроенные каналы',
            skillCount: 'Навыки',
            jobCount: 'Запланированные задачи',
            sessionCount: 'Сессии',
            hermesChatAction: 'Диалог',
            hermesChatTitle: 'Диалог Hermes',
            hermesChatDialogTitle: 'Диалог Hermes - {0}',
            hermesChatNewChat: 'Новый диалог',
            hermesChatNoSessions: 'Нет сессий',
            hermesChatMessageCount: '{0} сообщений',
            hermesChatEmptyHint: 'Выберите сессию слева или нажмите «Новый диалог»',
            hermesChatTitlePlaceholder: 'Введите название сессии',
            hermesChatRenameSuccess: 'Название сессии обновлено',
            hermesChatDeleteConfirm: 'Удалить сессию {0}?',
            hermesChatDeleteSuccess: 'Сессия удалена',
            weixin: 'Weixin',
            wecom: 'WeCom',
            dingtalk: 'DingTalk',
            feishu: 'Feishu',
            pluginNotInstalled: 'Плагин не установлен. Сначала установите его.',
            dmPolicy: 'Политика DM',
            threadSession: 'Сеанс в треде',
            replyMode: 'Режим ответа',
            requireMention: 'Требовать упоминание',
            requireMentionTrue: "Требуется {'@'}",
            requireMentionFalse: "{'@'} не требуется",
            requireMentionOpen: 'По конфигурации группы',
            groupPolicy: 'Групповая политика',
            policyAllowlist: 'Белый список',
            policyOpen: 'Открыто',
            policyDisabled: 'Отключено',
            bots: 'Боты',
            addBot: 'Добавить бота',
            accountId: 'ID аккаунта',
            accountIdPlaceholder:
                'Уникальный ID для различения ботов, который после сохранения используется в настройке и маршрутизации.',
            setDefaultBot: 'Сделать по умолчанию',
            botDuplicateField: '{field} уже существует',
            botRequired: 'Добавьте хотя бы одного бота',
            botId: 'ID бота',
            allowFrom: 'Белый список DM',
            allowFromPlaceholder: 'Один ID отправителя на строку',
            allowlistPolicyHelper: '{0}. Используется только когда {1} — Белый список.',
            systemPrompt: 'Системный промпт',
            groupAllowFrom: 'Белый список групп',
            groupAllowFromPlaceholder: 'Один ID группы на строку',
            separateSessionByConversation: 'Разделять сессии по диалогам',
            groupSessionScope: 'Область групповой сессии',
            groupSessionScopeGroup: 'Общая для группы',
            groupSessionScopeGroupSender: 'По отправителю',
            sharedMemoryAcrossConversations: 'Общая память между диалогами',
            asyncMode: 'Асинхронный режим',
            ackText: 'Текст подтверждения',
            ackTextDefault: 'Задача получена, выполняется...',
            streaming: 'Потоковая передача',
            streamingOff: 'Выкл',
            streamingPartial: 'Частично',
            streamingBlock: 'Блокирующий',
            streamingProgress: 'Прогресс',
            allowFromRequired: 'Введите хотя бы одну запись белого списка',
            pairingCode: 'Код сопряжения',
            pairingCodePlaceholder: 'Введите код сопряжения',
            approvePairing: 'Одобрить сопряжение',
            saveSuccess: 'Успешно сохранено',
            successAndRestart: '{0}. Контейнер автоматически перезапускается.',
            pairingApproveSuccess: 'Сопряжение успешно одобрено',
            scanConnect: 'Сканировать для подключения',
            scanConnectHelper:
                'Нажмите, чтобы запустить задачу входа по QR-коду. QR-код появится в журнале задач, а после успешного сканирования контейнер будет автоматически перезапущен.',
            channelAutoRestartHelper:
                'После сохранения контейнер будет автоматически перезапущен, чтобы настройки вступили в силу.',
            dashboardAuthAutoRebuildHelper:
                'После сохранения имени пользователя или пароля контейнер будет автоматически пересобран, чтобы изменения вступили в силу.',
            dashboardAuthImmediateHelper:
                'После сохранения учетные данные QwenPaw обновляются сразу, без перезапуска контейнера.',
            channelDeleteConfirm: 'Удалить конфигурацию канала {0}?',
            apiTypeBaseURLHelper: 'Этот тип отправляет запросы в {0}. Рекомендуемый Base URL: {1}',
            customImageURLHelper:
                'Для аккаунта Custom укажите полный URL интерфейса генерации изображений. Путь не добавляется автоматически. Пример: {0}',
            apiTypeBaseURLMismatch: 'Текущий Base URL похож на путь {0}, но выбран {1}. Рекомендуемый URL: {2}',
            validateAvailability: 'Проверять доступность аккаунта',
            validateAvailabilityHelper: 'Перед сохранением отправляется минимальное сообщение для проверки API',
            validateImageAvailabilityHelper:
                'Перед сохранением создаётся одно минимальное изображение; возможна оплата',
        },
        model: {
            model: 'Модель',
            localModel: 'Локальные модели',
            create_helper: 'Загрузить "{0}"',
            ollama_doc: 'Вы можете посетить официальный сайт Ollama, чтобы искать и находить больше моделей.',
            container_conn_helper: 'Используйте этот адрес для доступа или подключения между контейнерами',
            ollama_sync:
                'Синхронизация модели Ollama обнаружила, что следующие модели не существуют, хотите удалить их?',
            from_remote: 'Эта модель не была загружена через 1Panel, нет связанных журналов извлечения.',
            no_logs: 'Журналы извлечения для этой модели были удалены и не могут быть просмотрены.',
            vllmVersionHelper: 'Для серверов FusionXpark GB 10 выберите версию -cu130.',
            vllmCommandPortHelper: 'Команда запуска должна использовать порт {0}, иначе сервис будет недоступен.',
            syncModelAccount: 'Синхронизировать с аккаунтом модели',
            modelAccountAddressHelper:
                'Адрес контейнера подходит для контейнеров агентов; 127.0.0.1, системный IP или пользовательский адрес подходит для AI Gateway или внешних сервисов.',
            containerAddress: 'Адрес контейнера',
            customAddress: 'Пользовательский адрес',
            downloader: 'Загрузчик',
            modelDir: 'Каталог модели',
            manualDownload: 'Ручная загрузка',
            modelSource: 'Источник модели',
            repoID: 'ID репозитория',
            endpointLabel: 'Endpoint {0}',
            acceleratedEndpointLabel: 'Endpoint ускорения {0}',
            tokenOptionalLabel: '{0} Token (необязательно)',
            searchSource: 'Поиск в {0}',
            hfEndpointHelper:
                'Настройте endpoint ускорения, если доступ к HuggingFace нестабилен. Он будет использоваться для поиска, деталей и загрузок.',
            sortTrending: 'Популярное',
            sortLikes: 'Больше всего лайков',
            sortDownloads: 'Больше всего загрузок',
            sortUpdated: 'Недавно обновлено',
            sortCreated: 'Недавно создано',
            downloadsCount: 'Загрузки',
            likes: 'Лайки',
            taskQueue: 'Очередь загрузок',
            progress: 'Прогресс',
            localDownloaded: 'Загружено',
            modelInfo: 'Сведения о модели',
            downloading: 'Загрузка',
            canceled: 'Отменено',
            downloadQueued: 'Добавлено в очередь загрузок',
            cancelTaskConfirm: 'Отменить эту задачу загрузки?',
            deleteLocalModelConfirm: 'Удалить локальную модель {0}?',
        },
        proxy: {
            proxy: 'Усиление AI-шлюза',
            proxyHelper1: 'Привяжите домен и включите HTTPS для повышения безопасности передачи данных',
            proxyHelper2: 'Ограничьте доступ по IP, чтобы предотвратить утечку данных в публичной сети',
            proxyHelper3: 'Включите потоковую передачу',
            proxyHelper4: 'После создания вы можете просматривать и управлять этим в списке сайтов',
            proxyHelper5:
                'После включения вы можете отключить внешний доступ к порту в Магазине приложений - Установленные - Ollama - Параметры для повышения безопасности.',
            proxyHelper6: 'Чтобы отключить настройку прокси, вы можете удалить её из списка сайтов.',
            whiteListHelper: 'Ограничить доступ только для IP-адресов из белого списка',
        },
        aiProxy: {
            title: 'AI-шлюз',
            apiReference: 'Справочник API',
            notInstalled: 'Не установлен',
            usage: 'Использование',
            accountPool: 'Пул аккаунтов',
            importModelAccount: 'Импортировать аккаунт модели',
            editModelAccount: 'Редактировать аккаунт модели',
            selectModelAccount: 'Выберите существующий аккаунт модели',
            upstreamApiAddress: 'Адрес API upstream',
            priority: 'Приоритет',
            healthStatus: 'Состояние',
            failureCount: 'Ошибки',
            lastError: 'Последняя ошибка',
            modelMap: 'Сопоставление моделей',
            qpsLimit: 'Лимит QPS',
            tokenLimit: 'Лимит Token',
            tokenUsed: 'Использовано Token',
            tokenRemaining: 'Осталось Token',
            resetToken: 'Сбросить Token',
            resetTokenConfirm: 'Сбросить использование Token для {0}?',
            unlimited: 'Без ограничений',
            unlimitedWithAuto: 'Без ограничений, включая auto',
            lastUsedAt: 'Последнее использование',
            validityPeriod: 'Срок действия',
            keepCurrentValidity: 'Сохранить текущий срок',
            neverExpires: 'Без срока действия',
            validForDays: 'Действителен {0} дней',
            customDays: 'Указать дни',
            enterValidityDays: 'Введите срок действия в днях',
            currentExpiresAt: 'Текущий срок действия: {0}',
            currentNeverExpires: 'Срок действия не ограничен',
            expiresAt: 'Истекает',
            expired: 'Истёк',
            reactivate: 'Повторно активировать',
            settingTitle: 'Настройки AI-шлюза',
            basicSetting: 'Основные настройки',
            performanceSetting: 'Настройки производительности',
            logSetting: 'Настройки журналов',
            lbPolicy: 'Политика балансировки',
            protocolConversion: 'Преобразование протокола',
            protocolConversionDesc:
                'Разрешает поддерживаемое прямое преобразование между Chat Completions, Responses и Anthropic Messages. Нативный протокол всегда имеет приоритет.',
            protocolConversionRisk:
                'Преобразование протоколов не гарантирует отсутствие потерь. Специфичные поля, вызовы инструментов, рассуждения или мультимодальные данные могут быть упрощены или потеряны. Используйте после оценки рисков.',
            visionEnhancement: 'Визуальное расширение',
            visionEnhancementRisk: 'Изображения могут отправляться отдельному поставщику визуальной модели.',
            visionModelGroup: 'Группа визуальных моделей',
            visionModelGroupDesc:
                'Выберите модель с поддержкой изображений из этой группы генерации текста. Все изображения запроса используют одну модель.',
            visionTargetModelGroup: 'Целевая группа моделей',
            visionTargetModelGroupDesc:
                'Включает расширение только для моделей этой группы, не изменяя итоговую модель запроса.',
            visionEnhancementDesc:
                'Изображения преобразуются в текст и могут потерять детали, увеличивая задержку и стоимость. Шлюз не определяет встроенную поддержку изображений. Сохранение перезапускает шлюз; используйте после оценки рисков.',
            visionPreprocess: 'Визуальная предобработка',
            cacheHit: 'Попадание в кэш',
            apiType: 'Тип API',
            lbPolicyRoundRobin: 'Round Robin',
            lbPolicyRoundRobinDesc:
                'Выбирает доступные аккаунты моделей по очереди. Подходит, когда бэкенды имеют схожую производительность.',
            lbPolicyWeightedRoundRobin: 'Взвешенный Round Robin',
            lbPolicyWeightedRoundRobinDesc:
                'Распределяет запросы по весу аккаунта модели. Чем выше вес, тем больше трафика он получает.',
            lbPolicyFailover: 'Failover',
            lbPolicyFailoverDesc:
                'Сначала использует аккаунт модели с наивысшим приоритетом, затем переключается на следующий доступный после ошибки или cooldown.',
            maxConcurrency: 'Максимальная параллельность',
            queueSize: 'Размер очереди',
            queueTimeoutSeconds: 'Тайм-аут ожидания в очереди (с)',
            requestTimeoutSeconds: 'Тайм-аут non-stream запроса (с)',
            streamIdleTimeoutSeconds: 'Тайм-аут простоя stream (с)',
            maxBodyMb: 'Максимальный размер тела (MB)',
            runtimeRefreshSeconds: 'Интервал обновления runtime (с)',
            logRetentionDays: 'Хранение журналов AI-шлюза (дни)',
            clearLogs: 'Очистить журналы',
            clearLogsConfirm:
                'Будут очищены статистика использования AI-шлюза, аудит соответствия контента, решения маршрутизации, журналы тела запросов и сервисные журналы. Продолжить?',
            usageRetentionDays: 'Хранение статистики использования (дни)',
            contentAuditRetentionDays: 'Хранение аудита соответствия контента (дни)',
            logCleanupIntervalHours: 'Интервал очистки журналов (часы)',
            requestBodyLog: 'Журнал тела запроса',
            requestBodyLogDesc:
                'Записывает тела запросов и ответов AI Gateway в Elasticsearch для поиска, аудита и диагностики.',
            requestBodyLogIndexPrefix: 'Префикс индекса',
            requestBodyLogRetentionDays: 'Хранение журнала тела запроса (дни)',
            requestBodyLogMaxBodyKb: 'Максимальный размер тела запроса (KB)',
            requestBody: 'Тело запроса',
            requestBodySize: 'Размер тела запроса',
            requestBodyTruncated: 'Обрезано',
            responseBody: 'Тело ответа',
            responseBodySize: 'Размер тела ответа',
            responseBodyTruncated: 'Тело ответа обрезано',
            readableContent: 'Читаемое содержимое',
            rawResponse: 'Исходный ответ',
            replyContent: 'Содержимое ответа',
            reasoningContent: 'Содержимое рассуждений',
            statusTitle: 'Статус AI-шлюза',
            serviceEnabled: 'Автозапуск сервиса',
            proxyEnabled: 'Шлюз включен',
            statusMessage: 'Сообщение статуса',
            esLogDropped: 'Отброшенные ES логи',
            esLogLastSuccessAt: 'Последняя запись ES',
            esLogCircuitOpen: 'Цепь разомкнута',
            esLogCircuitUntil: 'ES разомкнута до',
            serviceOperateConfirm: 'Подтвердить {0} сервис AI-шлюза?',
            deleteTargetConfirm: 'Удалить {0} {1}?',
            deleteBackendTitle: 'Удалить аккаунт модели',
            userFallback: 'Удаленный пользователь (ID: {0})',
            requestModel: 'Запрошенная модель',
            upstreamModel: 'Upstream-модель',
            upstreamDuration: 'Время upstream',
            requestModelPlaceholder: 'например: qwen2.5-coder',
            upstreamModelPlaceholder: 'например: Qwen/Qwen2.5-Coder-32B-Instruct',
            addMapping: 'Добавить сопоставление',
            overview: 'Обзор',
            distribution: 'Распределение',
            usageTrend: 'Тренд использования',
            distributionBy: 'Распределение по {0}',
            unmatched: 'Не сопоставлено',
            modelAccount: 'Аккаунт модели',
            serviceProvider: 'Провайдер',
            tokenUsage: 'Использование Token',
            percent: 'Доля',
            ranking: 'Рейтинг',
            rank: 'Место',
            promptToken: 'Входные Token',
            completionToken: 'Выходные Token',
            totalToken: 'Всего Token',
            cachedToken: 'Кэшированные Token',
            cacheHitRate: 'Попадания в кэш',
            activeUsers: 'Активные пользователи',
            activeModels: 'Активные модели',
            failedRequests: 'Неуспешные запросы',
            averageTokenPerRequest: 'Среднее Token/запрос',
            callLogs: 'Журнал вызовов',
            usageKeywordPlaceholder: 'Поиск по Request ID / модели / upstream-модели / сообщению об ошибке',
            attemptChain: 'Цепочка попыток',
            attemptIndex: 'Порядок вызова',
            clientProtocol: 'API клиента',
            upstreamProtocol: 'Вышестоящий API',
            conversionPath: 'Путь преобразования',
            noAttemptDetails: 'Нет записей цепочки попыток',
            input: 'Вход',
            output: 'Выход',
            total: 'Итого',
            healthHealthy: 'Исправен',
            healthCooldown: 'Cooldown',
            healthUnhealthy: 'Неисправен',
            healthDeleted: 'Удален',
            healthUnknown: 'Неизвестно',
            validationModelMapEmpty: 'Имена моделей в сопоставлении не могут быть пустыми',
            validationModelMapDuplicate: 'Запрошенная модель {0} дублируется',
            modelGroup: 'Группа моделей',
            modelCapability: 'Возможность модели',
            textGeneration: 'Генерация текста',
            imageGeneration: 'Генерация изображений',
            textModels: 'Текстовые модели',
            textToImageModels: 'Модели генерации изображений по тексту',
            unauthorized: 'Нет доступа',
            imageCount: 'Количество изображений',
            availableModels: 'Доступные модели',
            modelGroupModels: 'Запрошенные модели',
            modelGroupModelsPlaceholder: 'Выберите или введите имена запрошенных моделей',
            modelGroupModelsHelper:
                'Указывайте имена моделей, которые клиенты используют при обращении к AI-шлюзу; умная маршрутизация пробует модели по порядку и не балансирует нагрузку между моделями.',
            modelGroupGuide:
                'Группы моделей содержат имена моделей, доступные клиентам AI-шлюза. Upstream-модели настраиваются в сопоставлении моделей пула аккаунтов. auto — виртуальное имя и не добавляется в группу моделей.',
            modelGroupModelCount: '{0} моделей',
            contentCompliance: 'Соответствие содержимого',
            contentAction: 'Действие',
            actionBlock: 'Блокировать',
            actionAuditOnly: 'Только аудит',
            actionDropHistory: 'Удалить историю',
            severity: 'Серьёзность',
            severityHigh: 'Высокая',
            severityMedium: 'Средняя',
            severityLow: 'Низкая',
            sensitiveWord: 'Чувствительное слово',
            sensitiveGroup: 'Группа чувствительных слов',
            sensitiveWordCount: 'Слова',
            normalizedWord: 'Нормализованное слово',
            matchedWords: 'Совпавшие слова',
            matchedGroups: 'Совпавшие группы',
            importResult: 'Импортировано: {0}, дубликатов: {1}, недействительных: {2}',
            auditLogs: 'Журнал аудита',
            smartRoute: 'Умная маршрутизация',
            smartRouteGuideTitle: 'Используйте model=auto на клиенте для умной маршрутизации',
            smartRouteGuideReady:
                'model=auto выбирает простую или сложную группу моделей по сложности запроса. Любая другая модель пересылается обычным AI-шлюзом.',
            smartRouteGuideNotReady:
                'Сначала включите умную маршрутизацию и настройте простую/сложную группы моделей. Затем используйте model=auto на клиенте.',
            copyAutoModel: 'Копировать auto',
            goSmartRouteSetting: 'К настройкам',
            smartRoutePolicy: 'Политика маршрутизации',
            routeConfig: 'Настройка маршрутизации',
            embeddingConfig: 'Настройки Embedding',
            embeddingConfigDesc:
                'Используется для умной маршрутизации и семантического сопоставления образцов контент-контроля. Рекомендуется: llama.cpp + Qwen3-Embedding-0.6B. Настройте перед пересозданием векторов.',
            decisionConfig: 'Параметры решения',
            simpleModelGroup: 'Группа простых моделей',
            complexModelGroup: 'Группа сложных моделей',
            embeddingEndpoint: 'Endpoint',
            embeddingModel: 'Модель',
            embeddingApiKey: 'API Key',
            routeThreshold: 'Порог маршрутизации',
            routeThresholdHelper:
                'Для Smart Route: использовать сэмплы только когда сходство запроса достигает этого значения.',
            auditThreshold: 'Порог аудита',
            auditThresholdHelper:
                'Для Content Compliance: считать аудит-сэмпл совпавшим только когда сходство достигает этого значения.',
            topK: 'TopK',
            topKHelper: 'Количество самых похожих сэмплов для сравнения.',
            members: 'Участники',
            samples: 'Образцы',
            routeSamplesGuide:
                'Образцы — это примеры простых/сложных запросов для сопоставления по Embedding-сходству. Используйте реальные запросы пользователей, затем создайте или пересоздайте векторы.',
            rebuildVectors: 'Пересоздать векторы',
            rebuildVectorsConfirm:
                'Пересоздание векторов снова отправит образцы Smart Route и проверки контента в сервис Embedding. Продолжить?',
            createVectorOnImport: 'Создать векторы после импорта',
            createVectorOnImportHelper:
                'Включено по умолчанию. Если Embedding настроен, векторы создаются фоновой задачей; иначе создаются только образцы.',
            route: 'Маршрут',
            audit: 'Аудит',
            auditSamples: 'Образцы аудита',
            sampleText: 'Текст',
            sampleLabel: 'Метка',
            vectorModel: 'Векторная модель',
            vectorDim: 'Размерность',
            threshold: 'Порог',
            preview: 'Предпросмотр',
            previewGuide:
                'Предпросмотр проверяет, будет ли запрос простым или сложным, без вызова upstream-модели. Источник — совпадение образцов или правила.',
            previewPlaceholder: 'Введите текст запроса',
            confidence: 'Уверенность',
            bestSampleSimilarity: 'Макс. сходство образца',
            source: 'Источник',
            sourceHeuristic: 'Правила',
            sourceEmbedding: 'Совпадение образцов',
            sourceContext: 'Наследование контекста',
            latency: 'Задержка',
            decisionLogs: 'Логи решений',
            requestID: 'ID запроса',
            simple: 'Простой',
            complex: 'Сложный',
            sampleLabelSafe: 'Безопасно',
            sampleLabelReview: 'Проверка',
            sampleLabelBlock: 'Блокировать',
            latencyMs: 'Задержка(ms)',
            smartRouteSettingGuide:
                'После включения только запросы с model=auto запускают умную маршрутизацию. Простая группа — для дешевых задач, сложная — для анализа кода, проектирования архитектуры и диагностики.',
            sampleLabelPlaceholder: 'simple / complex / high',
            sampleImportPlaceholder: 'Один образец на строку',
            apiKeyCount: 'Количество',
        },
        skillsHub: {
            title: 'Skills Hub',
            upload: 'Загрузить Skill',
            importSkill: 'Импортировать Skill',
            repositoryAddress: 'Адрес репозитория',
            repositoryGithubOnly: 'Поддерживаются только адреса репозиториев GitHub',
            repositoryRef: 'Ветка или Tag',
            repositoryRefPlaceholder: 'По умолчанию main; при ошибке будет попытка master',
            repositoryDownloadPreview: 'Целевой URL загрузки:',
            packageURL: 'URL пакета',
            packageURLPlaceholder: 'Введите адрес пакета .zip',
            importSuccess: 'Skill успешно импортирован и ожидает проверки.',
            source: 'Источник',
            applicableAgent: 'Применимый агент',
            overview: 'Обзор',
            versionHistory: 'История версий',
            publishedAt: 'Опубликовано',
            versionMarker: 'Метка',
            currentVersion: 'Текущая',
            latestVersion: 'Последняя версия',
            latestPublished: 'Последняя опубликованная',
            riskLevel: 'Уровень риска',
            riskReferenceHint:
                'Уровень риска автоматически определяется по содержимому пакета Skill и служит только справкой для проверки.\nНизкий: явные риски не найдены\nСредний: скрипты, зависимости, внешние URL или переменные окружения\nВысокий: удаленное выполнение, чувствительные данные или опасные команды',
            riskCheckResult: 'Результат проверки безопасности',
            noRiskFound: 'Явные риски не обнаружены.',
            riskFilePath: 'Путь к файлу',
            riskKeyword: 'Совпавшее ключевое слово или правило',
            riskDescription: 'Описание риска',
            publishHighRiskConfirm:
                'Этот Skill содержит элементы высокого риска: выполнение скриптов, внешние загрузки или доступ к чувствительной информации. Все равно опубликовать?',
            approve: 'Одобрить',
            reject: 'Отклонить',
            publish: 'Опубликовать',
            disable: 'Снять с публикации',
            customTarget: 'Пользовательский агент',
            addCustomTarget: 'Добавить агента',
            installToTarget: 'Установить в пользовательский агент',
            hostSkillDir: 'Каталог Skills',
            hostSkillDirHelper: 'Введите путь к каталогу Skills на узле.',
            installMethod: 'Способ установки',
            copy: 'Копировать',
            extract: 'Распаковать',
            postInstallCommand: 'Команда после установки',
            localSource: 'Локальная загрузка',
            uploadDragTitle: 'Перетащите пакет Skill сюда или нажмите для загрузки',
            uploadFormatLabel: 'Форматы:',
            uploadFormatValue: '.zip, .7z, .tar, .tar.gz',
            uploadSizeLabel: 'Размер файла:',
            uploadSizeValue: 'Не более 5 MB на файл',
            uploadRequirementLabel: 'Требование:',
            uploadRequirementPrefix: 'Пакет Skill должен содержать',
            onlySupportedArchive: 'Можно загружать только пакеты Skill форматов .zip, .7z, .tar и .tar.gz',
            uploadSizeExceeded: 'Один пакет Skill не должен превышать 5 MB',
            uploadSuccess: 'Skill успешно загружен и ожидает проверки.',
            versionAutoFillPlaceholder:
                'Автоматически определяется по имени файла, если возможно. Подтвердите или введите вручную',
            metadataOverwriteConfirm: 'Версия в пакете Skill отличается от текущего ввода. Использовать текущий ввод?',
            metadataOverwriteConfirmWithVersions:
                'Версия в пакете Skill отличается от текущего ввода. Версия в пакете: {packageVersion}; введенная версия: {inputVersion}. Использовать текущий ввод?',
            offlineNotice: 'Текущая среда офлайн. Можно устанавливать только Skills из локального магазина.',
            publishConfirm:
                'Опубликовать этот Skill? После публикации его можно установить из локального магазина Skills.',
            disableConfirm: 'Снять этот Skill с публикации? Уже установленные в агентах Skills не будут затронуты.',
            deleteConfirm:
                'Удалить этот Skill? Это действие нельзя отменить. Уже установленные в агентах Skills не будут затронуты.',
            rejectConfirm: 'Отклонить проверку этого Skill? Он перейдет в статус отклоненного.',
            downloadPublishedOnly: 'Можно скачать только опубликованные пакеты Skill.',
            deleteTargetConfirm:
                'Удалить этого пользовательского агента? Пользователи больше не смогут выбрать эту цель установки.',
            noInstallTarget: 'Нет доступных пользовательских агентов. Сначала настройте цель установки.',
            postInstallConfirm:
                'Для этой цели настроена команда после установки. Перед выполнением убедитесь, что команда надежна.',
            status: {
                pending: 'Ожидает проверки',
                approved: 'Одобрен',
                published: 'Опубликован',
                disabled: 'Снят с публикации',
                rejected: 'Отклонен',
                deleted: 'Удален',
            },
            agent: {
                common: 'Общий',
            },
            risk: {
                low: 'Низкий',
                medium: 'Средний',
                high: 'Высокий',
            },
            riskType: {
                script_file: 'Файл скрипта',
                dependency_manifest: 'Манифест зависимостей',
                external_url: 'Внешний URL',
                environment_variable: 'Переменная окружения',
                dockerfile: 'Dockerfile',
                command_execution: 'Выполнение команды',
                remote_script_execution: 'Выполнение удаленного скрипта',
                eval_execution: 'Динамическое выполнение',
                base64_execution: 'Выполнение после декодирования Base64',
                privileged_command: 'Привилегированная команда',
                dangerous_delete: 'Опасное удаление',
                world_writable_permission: 'Права высокого риска',
                credential: 'Подозрительные учетные данные',
                sensitive_path: 'Чувствительный путь',
                suspicious_download_execute: 'Подозрительная загрузка и выполнение',
                binary_content: 'Двоичное содержимое',
                scan_truncated: 'Проверка усечена',
            },
            riskDescriptionText: {
                script_file: 'Содержит файлы скриптов, которые могут выполнять локальные команды.',
                dependency_manifest: 'Содержит манифесты зависимостей, которые могут загружать внешние зависимости.',
                external_url: 'Содержит внешние URL. Проверьте, что исходящие адреса надежны.',
                environment_variable:
                    'Объявляет переменные окружения. Проверьте их назначение и значения по умолчанию.',
                dockerfile: 'Содержит Dockerfile, который может задавать сборку образа или логику выполнения.',
                command_execution: 'Содержит вызовы, связанные с выполнением команд. Проверьте эту логику.',
                remote_script_execution: 'Содержит логику загрузки и прямого выполнения удаленного скрипта.',
                eval_execution: 'Содержит динамическое выполнение через eval.',
                base64_execution: 'Содержит логику выполнения содержимого после декодирования Base64.',
                privileged_command: 'Содержит команды sudo для повышения привилегий.',
                dangerous_delete: 'Содержит опасные команды удаления.',
                world_writable_permission: 'Содержит изменение прав chmod 777.',
                credential: 'Содержит возможный API Key, Token, Secret или Password.',
                sensitive_path: 'Содержит доступ к чувствительным каталогам или файлам.',
                suspicious_download_execute:
                    'Содержит подозрительную внешнюю загрузку или логику загрузки и выполнения.',
                binary_content: 'Файл содержит байты NUL и может скрывать исполняемое или двоичное содержимое.',
                scan_truncated: 'Файл превышает лимит проверки. Непроверенное содержимое требует ручной проверки.',
            },
        },
        benchmark: {
            title: 'Бенчмарк',
            launchCommand: 'Команда запуска',
            retest: 'Повторить тест',
            statusRunning: 'Выполняется',
            statusWaiting: 'Ожидание',
            base: 'Основная информация',
            backend: 'Backend',
            baseUrl: 'Base URL',
            endpoint: 'Endpoint',
            tokenizer: 'Токенизатор',
            tokenizerPlaceholder:
                'Выберите или введите локальный каталог токенизатора, например /opt/1panel/tokenizers/DeepSeek-V3',
            runConfig: 'Конфигурация запуска',
            rawResult: 'Исходный результат',
            resultMetrics: 'Метрики результата',
            contextTokens: 'Длина контекста',
            contextTokensHelper: 'Лимит входных токенов плюс лимит выходных токенов для этого бенчмарка.',
            outputThroughput: 'Выходная пропускная способность',
            outputThroughputHelper:
                'Выходные токены, генерируемые в секунду. Чем выше значение, тем быстрее генерация.',
            totalThroughput: 'Общая пропускная способность',
            totalThroughputHelper:
                'Входные и выходные токены, обработанные в секунду. Используется для оценки общей емкости.',
            firstTokenLatency: 'Задержка первого токена',
            firstTokenLatencyHelper:
                'Время от отправки запроса до получения первого токена. Чем ниже значение, тем быстрее ответ.',
            tokenValueHelper: 'Введите положительное целое число или значение с k, например 512, 1k, 32k',
            numPrompts: 'Промпты',
            concurrency: 'Параллелизм',
            mean: 'Среднее',
            median: 'Медиана',
            requestRate: 'Частота запросов',
            requestRateUnlimited: 'Без ограничений (макс. пропускная способность)',
            requestRateCustom: 'Пользовательский QPS',
            requestRateCustomPlaceholder: 'Запросов в секунду, например 2.5',
            successfulRequests: 'Успешные запросы',
            requestThroughput: 'Пропускная способность запросов',
            timeout: 'Тайм-аут (секунды)',
            image: 'Образ vLLM',
            ignoreEos: 'Игнорировать EOS',
            extraHeaders: 'Дополнительные заголовки',
        },
        gpu: {
            gpu: 'Мониторинг GPU',
            gpuHelper: 'Система не обнаружила команды NVIDIA-SMI или XPU-SMI. Проверьте и повторите попытку!',
            process: 'Информация о Процессе',
            type: 'Тип',
            typeG: 'Графика',
            typeC: 'Вычисления',
            typeCG: 'Вычисления+Графика',
            processName: 'Имя Процесса',
            shr: 'Общая Память',
            temperatureHelper: 'Высокая температура GPU может вызвать снижение частоты GPU',
            gpuUtil: 'Использование GPU',
            temperature: 'Температура',
            performanceState: 'Состояние Производительности',
            powerUsage: 'Потребление Мощности',
            memoryUsage: 'Использование Памяти',
            fanSpeed: 'Скорость Вентилятора',
            power: 'Мощность',
            powerCurrent: 'Текущая Мощность',
            powerLimit: 'Лимит Мощности',
            memory: 'Память',
            memoryUsed: 'Использованная Память',
            memoryTotal: 'Общая Память',
            percent: 'Использование',
            base: 'Основная Информация',
            driverVersion: 'Версия Драйвера',
            cudaVersion: 'Версия CUDA',
            processMemoryUsage: 'Использование Памяти',
            performanceStateHelper: 'От P0 (максимальная производительность) до P12 (минимальная производительность)',
            busID: 'Адрес Шины',
            persistenceMode: 'Режим Постоянства',
            enabled: 'Включено',
            disabled: 'Выключено',
            persistenceModeHelper:
                'Режим постоянства быстрее реагирует на задачи, но потребление энергии в режиме ожидания соответственно увеличивается',
            displayActive: 'Инициализация GPU',
            displayActiveT: 'Да',
            displayActiveF: 'Нет',
            ecc: 'Технология Обнаружения и Исправления Ошибок',
            computeMode: 'Режим Вычислений',
            default: 'По Умолчанию',
            exclusiveProcess: 'Эксклюзивный Процесс',
            exclusiveThread: 'Эксклюзивный Поток',
            prohibited: 'Запрещено',
            defaultHelper: 'По умолчанию: Процессы могут выполняться параллельно',
            exclusiveProcessHelper:
                'Эксклюзивный Процесс: Только один контекст CUDA может использовать GPU, но он может быть разделен несколькими потоками',
            exclusiveThreadHelper: 'Эксклюзивный Поток: Только один поток в контексте CUDA может использовать GPU',
            prohibitedHelper: 'Запрещено: Параллельное выполнение процессов не разрешено',
            migModeHelper:
                'Используется для создания экземпляров MIG, реализуя физическую изоляцию GPU на пользовательском уровне.',
            migModeNA: 'Не Поддерживается',
            current: 'Мониторинг в Реальном Времени',
            history: 'Исторические Записи',
            notSupport: 'Текущая версия или драйвер не поддерживает отображение этого параметра.',
            processCount: 'Кол-во процессов',
        },
        mcp: {
            server: 'Сервер MCP',
            baseUrl: 'Внешний путь доступа',
            baseUrlHelper: 'Например: http://192.168.1.2:8000',
            ssePath: 'Путь SSE',
            ssePathHelper: 'Например: /sse, будьте осторожны, чтобы не дублировать с другими серверами',
            environment: 'Переменные среды',
            envKey: 'Имя переменной',
            envValue: 'Значение переменной',
            externalUrl: 'Внешний адрес подключения',
            operatorHelper: 'Будет выполнена операция {1} на {0}, продолжить?',
            domain: 'Адрес доступа по умолчанию',
            domainHelper: 'Например: 192.168.1.1 или example.com',
            bindDomain: 'Привязать сайт',
            commandPlaceHolder: 'В настоящее время поддерживаются только команды запуска npx и двоичных файлов',
            importMcpJson: 'Импортировать конфигурацию сервера MCP',
            importMcpJsonError: 'Структура mcpServers некорректна',
            bindDomainHelper:
                'После привязки веб-сайта он изменит адрес доступа для всех установленных серверов MCP и закроет внешний доступ к портам',
            outputTransport: 'Тип вывода',
            streamableHttpPath: 'Путь потоковой передачи',
            streamableHttpPathHelper: 'Например: /mcp, обратите внимание, чтобы не перекрывать другие серверы',
            npxHelper: 'Подходит для mcp, запущенного с помощью npx или бинарного файла',
            uvxHelper: 'Подходит для mcp, запущенного с помощью uvx',
            protocolVersion: 'Версия протокола',
            protocolVersionHelper:
                'Используется только Streamable HTTP без состояния для автоматической инициализации нижестоящего stdio MCP Server',
            gatewayArgsHelper:
                'Аргументы добавляются к команде supergateway. Параметры транспорта, порта, пути и протокола, управляемые 1Panel, изменить нельзя',
            testConnection: 'Проверить подключение',
            connectionSuccess: 'Подключение успешно',
            connectionFailed: 'Ошибка подключения',
        },
        tensorRT: {
            llm: 'TensorRT LLM',
            modelDir: 'Каталог модели',
            commandHelper: 'Если требуется внешний доступ, установите порт в команде таким же, как порт приложения',
            imageAlert:
                'Из-за большого размера образа рекомендуется вручную загрузить образ на сервер перед установкой',
            modelSpeedup: 'Включить ускорение модели',
            modelType: 'Тип модели',
        },
    },
    container: {
        createByCommand: 'Создать с помощью команды',
        importContainerBackupTip: 'Импорт файла резервной копии контейнера, поддерживается только .tar.gz',
        importComposeBackupTip: 'Импорт файла резервной копии compose, поддерживается только .tar.gz',
        stopContainerBeforeBackup: 'Остановить контейнер перед резервным копированием',
        stopComposeBeforeBackup: 'Остановить compose перед резервным копированием',
        stopBeforeBackupHelper:
            'При включении контейнер или сервис compose будет остановлен перед резервным копированием и автоматически восстановлен после завершения для обеспечения целостности данных.',
        commandInput: 'Ввод команды',
        commandRule: 'Введите корректную команду docker run для создания контейнера.',
        commandHelper: 'Эта команда будет выполнена на сервере для создания контейнера. Продолжить?',
        updateHelper1:
            'Обнаружено, что этот контейнер происходит из магазина приложений. Обратите внимание на следующие два пункта:',
        updateHelper2:
            '1. Текущие изменения не будут синхронизированы с установленными приложениями в магазине приложений.',
        updateHelper3:
            '2. Если вы измените приложение на странице установки, текущее отредактированное содержимое станет недействительным.',
        updateHelper4:
            'Редактирование контейнера требует пересборки, и все непостоянные данные будут потеряны. Хотите продолжить?',
        containerList: 'Список контейнеров',
        operatorHelper: 'Действие {0} будет выполнено для следующего контейнера. Хотите продолжить?',
        operatorAppHelper:
            'Операция "{0}" будет выполнена для следующего(-их) контейнера(-ов) и может повлиять на работающие сервисы. Хотите продолжить?',
        containerDeleteHelper:
            "Обнаружено, что контейнер создан из Магазина приложений. Удаление контейнера не удалит его полностью из 1Panel. Для полного удаления перейдите в Магазин приложений -> меню 'Установленные' или 'Среда выполнения'. Продолжить?",
        start: 'Запустить',
        stop: 'Остановить',
        restart: 'Перезапустить',
        kill: 'Завершить',
        pause: 'Приостановить',
        unpause: 'Возобновить',
        rename: 'Переименовать',
        remove: 'Удалить',
        removeAll: 'Удалить все',
        containerPrune: 'Очистить',
        containerPruneHelper1: 'Это удалит все контейнеры, которые находятся в остановленном состоянии.',
        containerPruneHelper2:
            'Если контейнеры из магазина приложений, вам нужно перейти в "Магазин приложений -> Установленные" и нажать кнопку "Пересобрать" для их переустановки после выполнения очистки.',
        containerPruneHelper3: 'Это действие нельзя отменить. Хотите продолжить?',
        imagePrune: 'Очистить',
        imagePruneSome: 'Очистить непомеченные',
        imagePruneSomeEmpty: 'Нет образов с тегом "none" для очистки.',
        imagePruneSomeHelper: 'Очистить образы с тегом "none", которые не используются никакими контейнерами.',
        imagePruneAll: 'Очистить неиспользуемые',
        imagePruneAllEmpty: 'Нет неиспользуемых образов для очистки.',
        imagePruneAllHelper: 'Очистить образы, которые не используются никакими контейнерами.',
        networkPrune: 'Очистить',
        networkPruneHelper: 'Это удалит все неиспользуемые сети. Хотите продолжить?',
        volumePrune: 'Очистить',
        volumePruneHelper: 'Это удалит все неиспользуемые локальные тома. Хотите продолжить?',
        cleanSuccess: 'Операция успешна, количество очищенных элементов: {0}!',
        cleanSuccessWithSpace:
            'Операция успешна. Количество очищенных дисков: {0}. Освобождено дискового пространства: {1}!',
        unExposedPort: 'Текущий адрес сопоставления портов - 127.0.0.1, что не позволяет внешний доступ.',
        upTime: 'Время работы',
        fetch: 'Получить',
        lines: 'Строки',
        linesHelper: 'Пожалуйста, введите правильное количество логов для получения!',
        downloadLinesHelper: 'Выберите или введите количество строк логов для скачивания.',
        lastDay: 'Последний день',
        last4Hour: 'Последние 4 часа',
        lastHour: 'Последний час',
        last10Min: 'Последние 10 минут',
        cleanLog: 'Очистить лог',
        cleanLogscope: 'Тип очистки',
        downLogHelper1: 'Это загрузит все логи из контейнера {0}. Хотите продолжить?',
        downLogHelper2: 'Это загрузит последние {1} записей журнала из контейнера {0}. Продолжить?',
        cleanLogHelper: 'Это потребует перезапуска контейнера и не может быть отменено. Хотите продолжить?',
        newName: 'Новое имя',
        source: 'Использование ресурсов',
        cpuUsage: 'Использование CPU',
        cpuTotal: 'Всего CPU',
        core: 'Ядро',
        memUsage: 'Использование памяти',
        memTotal: 'Лимит памяти',
        memCache: 'Кэш памяти',
        loadSize: 'Получить Размер Контейнера',
        ip: 'IP-адрес',
        cpuShare: 'Доли CPU',
        cpuShareHelper:
            'Движок контейнера использует базовое значение 1024 для долей CPU. Вы можете увеличить его, чтобы дать контейнеру больше времени CPU.',
        inputIpv4: 'Пример: 192.168.1.1',
        inputIpv6: 'Пример: 2001:0db8:85a3:0000:0000:8a2e:0370:7334',
        diskUsage: 'Использование Диска',
        localVolume: 'Локальный Том Хранилища',
        buildCache: 'Кэш Сборки',
        usage: 'Использовано: {0}, Можно освободить: {1}',
        clean: 'Освободить',
        imageClean: 'Очистка образов удалит все неиспользуемые образы. Это действие нельзя отменить. Продолжить?',
        containerClean:
            'Очистка контейнеров удалит все остановленные контейнеры (включая остановленные приложения из Магазина приложений). Это действие нельзя отменить. Продолжить?',
        sizeRw: 'Размер Слоя Контейнера',
        sizeRwHelper: 'Размер записываемого слоя, уникального для контейнера',
        sizeRootFs: 'Виртуальный Размер',
        sizeRootFsHelper: 'Общий размер всех слоев образа, от которых зависит контейнер + слой контейнера',
        containerFromAppHelper:
            'Обнаружено, что этот контейнер происходит из магазина приложений. Операции с приложением могут привести к недействительности текущих изменений.',
        containerFromAppHelper1:
            'Нажмите кнопку [Параметры] в списке установленных приложений, чтобы перейти на страницу редактирования и изменить имя контейнера.',
        command: 'Команда',
        console: 'Взаимодействие с контейнером',
        tty: 'Выделить псевдо-TTY (-t)',
        openStdin: 'Держать STDIN открытым, даже если не подключен (-i)',
        custom: 'Пользовательский',
        emptyUser: 'Если пусто, вы войдете как пользователь по умолчанию',
        privileged: 'Привилегированный',
        privilegedHelper:
            'Разрешить контейнеру выполнять определенные привилегированные операции на хосте, что может повысить риски контейнера. Используйте с осторожностью!',
        upgradeHelper: 'Имя репозитория/Имя образа: Версия образа',
        upgradeWarning2:
            'Операция обновления требует пересборки контейнера, все несохраненные данные будут потеряны. Хотите продолжить?',
        oldImage: 'Текущий образ',
        sameImageContainer: 'Контейнеры с одинаковым образом',
        sameImageHelper: 'Контейнеры, использующие один образ, можно массово обновить после выбора',
        targetImage: 'Целевой образ',
        imageLoadErr: 'Не обнаружено имя образа для контейнера',
        imageUpdateTagEmpty: 'Не обнаружены теги образов, доступные для обновления',
        appHelper: 'Контейнер происходит из магазина приложений, и обновление может сделать сервис недоступным.',
        input: 'Ручной ввод',
        forcePull: 'Всегда загружать образ',
        forcePullHelper:
            'Это будет игнорировать существующие образы на сервере и загружать последний образ из реестра.',
        imageUpdateHelper:
            'Проверить одноимённый тег в реестре и, если есть обновление, загрузить и обновить локальный образ.',
        server: 'Хост',
        serverExample: '80, 80-88, ip:80 или ip:80-88',
        containerExample: '80 или 80-88',
        exposePort: 'Открыть порт',
        exposeAll: 'Открыть все',
        cmdHelper: 'Пример: nginx -g "daemon off;"',
        entrypointHelper: 'Пример: docker-entrypoint.sh',
        autoRemove: 'Автоудаление',
        cpuQuota: 'Количество ядер CPU',
        memoryLimit: 'Память',
        limitHelper: 'Если установлено 0, это означает отсутствие ограничений. Максимальное значение {0}',
        mount: 'Монтирование',
        volumeOption: 'Том',
        hostOption: 'Хост',
        serverPath: 'Путь на сервере',
        containerDir: 'Путь в контейнере',
        volumeHelper: 'Убедитесь, что содержимое тома хранения корректно',
        networkEmptyHelper: 'Пожалуйста, подтвердите, что выбор сети контейнера правильный',
        modeRW: 'Чтение-Запись',
        modeR: 'Только чтение',
        sharedLabel: 'Режим Распространения',
        private: 'Приватный',
        privateHelper: 'Изменения монтирования в контейнере и хосте не влияют друг на друга',
        rprivate: 'Рекурсивный Приватный',
        rprivateHelper: 'Все монтирования в контейнере полностью изолированы от хоста',
        shared: 'Общий',
        sharedHelper: 'Изменения монтирования в хосте и контейнере видны друг другу',
        rshared: 'Рекурсивный Общий',
        rsharedHelper: 'Все изменения монтирования в хосте и контейнере видны друг другу',
        slave: 'Подчиненный',
        slaveHelper:
            'Контейнер может видеть изменения монтирования хоста, но его собственные изменения не влияют на хост',
        rslave: 'Рекурсивный Подчиненный',
        rslaveHelper: 'Все монтирования в контейнере могут видеть изменения хоста, но не влияют на хост',
        mode: 'Режим',
        env: 'Переменные окружения',
        restartPolicy: 'Политика перезапуска',
        always: 'всегда',
        unlessStopped: 'если не остановлен',
        onFailure: 'при сбое (по умолчанию пять раз)',
        no: 'никогда',
        refreshTime: 'Интервал обновления',
        cache: 'Кэш',
        image: 'Образ | Образы',
        imagePull: 'Загрузить',
        imagePullHelper:
            'Поддерживает выбор нескольких образов для загрузки, нажмите Enter после ввода каждого образа для продолжения',
        imagePush: 'Отправить',
        imagePushHelper:
            'Обнаружено, что у этого образа несколько тегов. Подтвердите, что имя образа, используемое для отправки: {0}',
        imageDelete: 'Удалить образ',
        repoName: 'Реестр контейнеров',
        imageName: 'Имя образа',
        pull: 'Загрузить',
        path: 'Путь',
        importImage: 'Импорт',
        buildArgs: 'Аргументы Сборки',
        imageBuild: 'Сборка',
        pathSelect: 'Путь',
        label: 'Метка',
        imageTag: 'Тег образа',
        imageTagHelper:
            'Поддерживает установку нескольких тегов образов, нажмите Enter после ввода каждого тега для продолжения',
        push: 'Отправить',
        fileName: 'Имя файла',
        export: 'Экспорт',
        exportImage: 'Экспорт образа',
        size: 'Размер',
        tag: 'Теги',
        tagHelper: 'По одному в строке. Например,\nkey1=value1\nkey2=value2',
        imageNameHelper: 'Имя образа и тег, например: nginx:latest',
        cleanBuildCache: 'Очистить кэш сборки',
        delBuildCacheHelper:
            'Это удалит все кэшированные артефакты, созданные во время сборки, и не может быть отменено. Хотите продолжить?',
        urlWarning: 'Префикс URL не должен включать http:// или https://. Пожалуйста, измените.',
        network: 'Сеть | Сети',
        networkHelper:
            'Это может привести к неправильной работе некоторых приложений и сред выполнения. Хотите продолжить?',
        networkName: 'Имя',
        driver: 'Драйвер',
        option: 'Опция',
        attachable: 'Подключаемая',
        parentNetworkCard: 'Родительская Сетевая Карта',
        subnet: 'Подсеть',
        scope: 'Диапазон IP',
        gateway: 'Шлюз',
        auxAddress: 'Исключить IP',
        volume: 'Том | Тома',
        volumeDir: 'Директория тома',
        nfsEnable: 'Включить NFS хранилище',
        nfsAddress: 'Адрес',
        mountpoint: 'Точка монтирования',
        mountpointNFSHelper: 'например, /nfs, /nfs-share',
        options: 'Опции',
        repo: 'Реестры',
        httpRepoHelper: 'Работа с репозиторием HTTP-типа требует перезапуска службы Docker.',
        httpRepo: 'Выбор HTTP протокола требует перезапуска службы Docker для добавления в небезопасные реестры.',
        delInsecure: 'Удаление учетных данных',
        delInsecureHelper: 'Это перезапустит службу Docker для удаления из небезопасных реестров. Хотите продолжить?',
        downloadUrl: 'Сервер',
        imageRepo: 'Репозиторий образов',
        repoHelper: 'Включает ли зеркало репозитория/организации/проекта?',
        auth: 'Требуется аутентификация',
        mirrorHelper:
            'Если есть несколько зеркал, они должны быть разделены новой строкой, например:\nhttp://xxxxxx.m.daocloud.io \nhttps://xxxxxx.mirror.aliyuncs.com',
        registrieHelper:
            'Если существует несколько частных репозиториев, они должны быть разделены новой строкой, например:\n172.16.10.111:8081 \n172.16.10.112:8081',
        compose: 'Compose | Composes',
        composeFile: 'Файл Оркестрации',
        fromChangeHelper: 'Переключение источника очистит текущее отредактированное содержимое. Хотите продолжить?',
        composePathHelper:
            'Путь сохранения файла Compose: {0}; если имя проекта указано в Docker Compose, оно имеет приоритет; иначе используется {1}.',
        composeNamePriorityHelper:
            'Приоритет имени проекта: имя из конфигурации Docker Compose > родительский каталог файла > имя, введённое здесь.',
        composeHelper:
            'Композиция, созданная через редактор 1Panel или шаблон, будет сохранена в директории {0}/docker/compose.',
        deleteFile: 'Удалить файл',
        deleteComposeHelper:
            'Удалить все файлы, связанные с compose контейнера, включая файлы конфигурации и постоянные файлы. Пожалуйста, действуйте с осторожностью!',
        deleteCompose: '" Удалить эту композицию.',
        composeDirectory: 'Директория',
        template: 'Шаблон',
        composeTemplate: 'Шаблон Compose | Шаблоны Compose',
        content: 'Содержимое',
        contentEmpty: 'Содержимое Compose не может быть пустым, пожалуйста, введите и попробуйте снова!',
        containerNumber: 'Количество контейнеров',
        containerStatus: 'Статус контейнера',
        exited: 'Завершен',
        running: 'Работает ( {0} / {1} )',
        composeDetailHelper: 'Compose создан вне 1Panel. Операции запуска и остановки не поддерживаются.',
        composeOperatorHelper: 'Операция {1} будет выполнена для {0}. Хотите продолжить?',
        composeDownHelper: 'Это остановит и удалит все контейнеры и сети под compose {0}. Хотите продолжить?',
        composeEnvHelper2:
            'Эта оркестрация создана Магазином приложений 1Panel. Измените переменные среды в установленных приложениях.',
        composeContentPlaceholder: 'Введите или вставьте здесь содержимое вашего файла docker-compose',
        setting: 'Настройка | Настройки',
        restartHelper: 'Изменения конфигурации вступят в силу после перезапуска службы Docker',
        operatorStatusHelper: 'Это выполнит "{0}" службы Docker. Хотите продолжить?',
        dockerStatus: 'Служба Docker',
        daemonJsonPathHelper: 'Убедитесь, что путь конфигурации совпадает с указанным в docker.service.',
        mirrors: 'Зеркала реестра',
        mirrorsHelper:
            'Сначала используйте URL зеркал реестра для операций с образами. Оставьте поле пустым, чтобы отключить зеркала реестра.',
        mirrorsHelper2: 'Подробности см. в официальной документации. ',
        registries: 'Небезопасные реестры',
        ipv6Helper:
            'При включении IPv6 необходимо добавить сеть контейнера IPv6. Конкретные шаги настройки см. в официальной документации.',
        ipv6CidrHelper: 'Диапазон пула IPv6-адресов для контейнеров',
        ipv6TablesHelper: 'Автоматическая настройка Docker IPv6 для правил iptables.',
        experimentalHelper:
            'Включение ip6tables требует включения этой конфигурации; в противном случае ip6tables будет игнорироваться',
        cutLog: 'Опция логирования',
        cutLogHelper1: 'Текущая конфигурация будет влиять только на вновь созданные контейнеры.',
        cutLogHelper2: 'Существующие контейнеры необходимо пересоздать для применения конфигурации.',
        cutLogHelper3:
            'Обратите внимание, что пересоздание контейнеров может привести к потере данных. Если ваши контейнеры содержат важные данные, обязательно сделайте резервную копию перед выполнением операции пересборки.',
        maxSize: 'Максимальный размер',
        maxFile: 'Максимум файлов',
        liveHelper:
            'По умолчанию, когда демон Docker завершает работу, он останавливает работающие контейнеры. Вы можете настроить демон так, чтобы контейнеры продолжали работать, если демон становится недоступным. Эта функциональность называется live restore. Опция live restore помогает уменьшить время простоя контейнера из-за сбоев демона, плановых простоев или обновлений.',
        liveWithSwarmHelper: 'Конфигурация демона live-restore несовместима с режимом swarm.',
        iptablesDisable: 'Отключить iptables',
        iptablesHelper1: 'Автоматическая настройка правил iptables для Docker.',
        iptablesHelper2:
            'Отключение iptables приведет к тому, что контейнеры не смогут взаимодействовать с внешними сетями.',
        daemonJsonPath: 'Путь конфигурации',
        serviceUnavailable: 'Служба Docker в настоящее время не запущена.',
        startIn: ' для запуска',
        sockPath: 'Unix domain socket',
        sockPathHelper: 'Канал связи между демоном Docker и клиентом.',
        sockPathHelper1: 'Путь по умолчанию: /var/run/docker-x.sock',
        sockPathMsg:
            'Сохранение настройки Socket Path может привести к недоступности службы Docker. Хотите продолжить?',
        sockPathErr: 'Пожалуйста, выберите или введите правильный путь к файлу Docker sock',
        related: 'Связанные',
        includeAppstore: 'Показывать контейнеры из магазина приложений',
        excludeAppstore: 'Скрыть контейнер магазина приложений',
        cleanDockerDiskZone: 'Очистить дисковое пространство, используемое Docker',
        cleanImagesHelper: '(Очистить все образы, не используемые контейнерами)',
        cleanContainersHelper: '(Очистить все остановленные контейнеры)',
        cleanVolumesHelper: '(Очистить все неиспользуемые локальные тома)',
        makeImage: 'Создать образ',
        newImageName: 'Новое имя образа',
        commitMessage: 'Сообщение коммита',
        author: 'Автор',
        ifPause: 'Приостановить контейнер во время создания',
        ifMakeImageWithContainer: 'Создать новый образ из этого контейнера?',
        finishTime: 'Время последней остановки',
        workingDir: 'Рабочий каталог',
        composeFileMissing: 'Файл Compose не обнаружен',
        resource: 'Ресурс',
        macAddr: 'MAC-адрес',
        exportHelper: 'Экспортировать выбранные образы в один tar-файл.',
        goSetting: 'Перейти в настройки',
    },
    cronjob: {
        importHelper:
            'Повторяющиеся запланированные задачи будут автоматически пропущены при импорте. По умолчанию задачи устанавливаются в статус 【Отключено】, а при аномальной ассоциации данных - в статус 【Ожидает редактирования】.',
        changeStatus: 'Изменить статус',
        disableMsg: 'Это остановит автоматическое выполнение запланированной задачи. Хотите продолжить?',
        enableMsg: 'Это позволит запланированной задаче автоматически выполняться. Хотите продолжить?',
        taskType: 'Тип',
        record: 'Записи',
        viewRecords: 'Записи',
        shell: 'Shell',
        stop: 'Ручная Остановка',
        stopHelper: 'Эта операция принудительно остановит выполнение текущей задачи. Продолжить?',
        log: 'Логи резервного копирования',
        logHelper: 'Резервное копирование системного лога',
        logHelper2: '2. Лог SSH-входов на сервер',
        logHelper3: '3. Все логи сайта',
        containerCheckBox: 'В контейнере (не нужно вводить команду контейнера)',
        containerName: 'Имя контейнера',
        ntp: 'Синхронизация времени',
        ntp_helper: 'Вы можете настроить NTP сервер на странице Быстрой настройки в Инструментах.',
        app: 'Резервное копирование приложения',
        website: 'Резервное копирование сайта',
        rulesHelper: 'Поддерживает несколько правил исключения, разделяются английскими запятыми , напр.: *.log,*.sql',
        lastRecordTime: 'Время последнего выполнения',
        all: 'Все',
        failedRecord: 'Неудачные записи',
        successRecord: 'Успешные записи',
        database: 'Резервное копирование базы данных',
        backupArgs: 'Аргументы Резервного Копирования',
        backupArgsHelper:
            'Неперечисленные аргументы резервного копирования могут быть введены и выбраны вручную. Например: Введите --no-data и выберите первый вариант из выпадающего списка.',
        singleTransaction:
            'Резервное копирование таблиц InnoDB с использованием одной транзакции, подходит для резервного копирования данных большого объема',
        quick: 'Чтение данных построчно вместо загрузки всей таблицы в память, подходит для резервного копирования данных большого объема и машин с низкой памятью',
        skipLockTables: 'Резервное копирование без блокировки всех таблиц, подходит для высококонкурентных баз данных',
        setGtidPurgedOff:
            'Не экспортировать информацию GTID, подходит для восстановления базы данных в среде Group Replication',
        missBackupAccount: 'Не удалось найти учетную запись резервного копирования',
        syncDate: 'Время синхронизации',
        clean: 'Очистка кэша',
        curl: 'Доступ к URL',
        taskName: 'Имя',
        cronSpec: 'Цикл запуска',
        cronSpecDoc:
            'Пользовательское расписание поддерживает только формат [минута час день месяц неделя], например, 0 0 * * *. Подробности см. в официальной документации.',
        cronSpecHelper: 'Введите правильный период выполнения',
        cleanHelper:
            'Эта операция записывает все записи выполнения задач, файлы резервных копий и файлы логов. Хотите продолжить?',
        directory: 'Директория резервного копирования',
        sourceDir: 'Директория резервного копирования',
        snapshot: 'Снапшот системы',
        allOptionHelper:
            'Текущий план задачи - резервное копирование всех [{0}]. Прямое скачивание сейчас не поддерживается. Вы можете проверить список резервных копий в меню [{0}].',
        exclusionRules: 'Правило исключения',
        exclusionRulesHelper:
            'Выберите или введите правила исключения, нажмите Enter после каждого набора для продолжения. Правила исключения будут применяться ко всем операциям сжатия в этой резервной копии',
        default_download_path: 'Ссылка для скачивания по умолчанию',
        saveLocal: 'Сохранять локальные резервные копии (столько же, сколько копий в облачном хранилище)',
        url: 'URL-адрес',
        urlHelper: 'Пожалуйста, введите действительный URL-адрес',
        targetHelper: 'Учетные записи резервного копирования управляются в настройках панели.',
        withImageHelper: 'Резервное копирование образов из магазина приложений увеличит размер файла снимка.',
        ignoreApp: 'Исключить приложения',
        withImage: 'Резервная Копия Образа Приложения',
        retainCopies: 'Сохранять записи',
        retryTimes: 'Количество повторов',
        timeout: 'Таймаут',
        ignoreErr: 'Игнорировать ошибки',
        ignoreErrHelper:
            'Игнорировать ошибки во время резервного копирования для выполнения всех задач резервного копирования',
        retryTimesHelper: '0 означает отсутствие повторов после сбоя',
        retainCopiesHelper: 'Количество копий для сохранения записей выполнения и логов',
        retainCopiesHelper1: 'Количество копий для сохранения файлов резервных копий',
        retainCopiesUnit: ' копий (Просмотр)',
        cronSpecRule: 'Формат периода выполнения в строке {0} неверен. Пожалуйста, проверьте и попробуйте снова!',
        perMonthHelper: 'Выполнять {0} числа каждого месяца в {1}:{2}',
        perWeekHelper: 'Выполнять каждую неделю в {0} в {1}:{2}',
        perDayHelper: 'Выполнять каждый день в {0}:{1}',
        perHourHelper: 'Выполнять каждый час в {0} минут',
        perNDayHelper: 'Выполнять каждые {0} дней в {1}:{2}',
        perNHourHelper: 'Выполнять каждые {0} часов в {1}',
        perNMinuteHelper: 'Выполнять каждые {0} минут',
        perNSecondHelper: 'Выполнять каждые {0} секунд',
        perMonth: 'Каждый месяц',
        perWeek: 'Каждую неделю',
        perHour: 'Каждый час',
        perNDay: 'Каждые N дней',
        perDay: 'Каждый день',
        perNHour: 'Каждые N часов',
        perNMinute: 'Каждые N минут',
        perNSecond: 'Каждые N секунд',
        day: 'дней',
        monday: 'Понедельник',
        tuesday: 'Вторник',
        wednesday: 'Среда',
        thursday: 'Четверг',
        friday: 'Пятница',
        saturday: 'Суббота',
        sunday: 'Воскресенье',
        shellContent: 'Скрипт',
        errRecord: 'Неправильное логирование',
        errHandle: 'Сбой выполнения задачи Cron',
        noRecord: 'Запустите задачу Cron, и вы увидите записи здесь.',
        cleanData: 'Очистить данные',
        cleanRemoteData: 'Удалить удалённые данные',
        cleanDataHelper: 'Удалить файл резервной копии, созданный во время этой задачи.',
        noLogs: 'Пока нет вывода задачи...',
        errPath: 'Ошибка пути резервной копии [{0}], невозможно скачать!',
        cutWebsiteLog: 'Ротация логов сайта',
        cutWebsiteLogHelper: 'Ротированные файлы логов будут сохранены в директории резервных копий 1Panel.',
        syncIpGroup: 'Синхронизировать группы IP WAF',
        syncIpGroupHelper: 'Синхронизирует удалённые IP-группы, используемые в чёрных и белых списках WAF',
        requestExpirationTime: 'Время истечения запроса на загрузку (часы)',
        unitHours: 'Единица: часы',
        alertTitle: 'Плановая задача - {0} «{1}» Оповещение о сбое задачи',
        library: {
            script: 'Скрипт',
            syncNow: 'Синхронизировать Сейчас',
            turnOnSync: 'Включить Автосинхронизацию',
            turnOnSyncHelper:
                'Включение автосинхронизации будет выполнять автоматическую синхронизацию в ранние утренние часы ежедневно',
            turnOffSync: 'Отключить Автосинхронизацию',
            turnOffSyncHelper:
                'Отключение автосинхронизации может вызвать задержки синхронизации скриптов, подтвердить?',
            isInteractive: 'Интерактивный',
            interactive: 'Интерактивный скрипт',
            interactiveHelper:
                'Требует ввода пользователя во время выполнения и не может использоваться в запланированных задачах.',
            library: 'Библиотека скриптов',
            remoteLibrary: 'Удаленная Библиотека Скриптов',
            create: 'Добавить скрипт',
            edit: 'Редактировать скрипт',
            groupHelper:
                'Установите разные группы на основе характеристик скрипта, что позволяет быстрее выполнять операции фильтрации скриптов.',
            handleHelper: 'Выполнить сценарий {1} на {0}, продолжить?',
            noSuchApp:
                'Служба {0} не обнаружена. Пожалуйста, сначала быстро установите её, используя библиотеку скриптов!',
            syncHelper:
                'Выполнить синхронизацию библиотеки системных скриптов? Это действие затрагивает только системные скрипты. Продолжить?',
        },
        nextTime: 'Следующие 5 запусков',
        logHelper1: '1. Системный лог 1Panel',
        backupContent: 'Содержимое бэкапа',
        cronSpecRule2: 'Неверный формат периода выполнения, проверьте и попробуйте снова!',
        executor: 'Исполнитель',
        cleanLog: 'Автоочистка логов',
        cleanLogscope: 'Хранение логов',
    },
    monitor: {
        globalFilter: 'Глобальный Фильтр',
        enableMonitor: 'Статус Мониторинга',
        storeDays: 'Дни Хранения',
        defaultNetwork: 'Сетевая Карта по Умолчанию',
        defaultNetworkHelper: 'Опция сетевой карты по умолчанию, отображаемая в интерфейсах мониторинга и обзора',
        defaultIO: 'Диск по Умолчанию',
        defaultIOHelper: 'Опция диска по умолчанию, отображаемая в интерфейсах мониторинга и обзора',
        cleanMonitor: 'Очистить Записи Мониторинга',
        cleanHelper: 'Эта операция очистит все записи мониторинга, включая GPU. Продолжить?',
        avgLoad: 'Средняя нагрузка',
        loadDetail: 'Детали нагрузки',
        resourceUsage: 'Использование',
        networkCard: 'Сетевой интерфейс',
        read: 'Чтение',
        write: 'Запись',
        readWriteCount: 'Операции ввода/вывода',
        readWriteTime: 'Задержка ввода/вывода',
        today: 'Сегодня',
        yesterday: 'Вчера',
        lastNDay: 'Последние {0} дней',
        lastNMonth: 'Последние {0} месяцев',
        lastHalfYear: 'Последние полгода',
        memory: 'Память',
        percent: 'Процент',
        cache: 'Кэш',
        disk: 'Диск',
        network: 'Сеть',
        up: 'Исходящий',
        down: 'Входящий',
        interval: 'Интервал Сбора',
        intervalHelper: 'Пожалуйста, введите подходящий интервал сбора мониторинга (10 секунд - 12 часов)',
        runtimeDiagnostics: 'Диагностика среды выполнения',
        runtimeRSS: 'Память процесса (RSS)',
        runtimeHeapAlloc: 'Память кучи',
        runtimeHeapObjects: 'Объекты кучи',
        runtimeGoroutines: 'Goroutine',
        goroutineSnapshot: 'Снимок Goroutine',
        goroutineSummary: '{0} goroutine сгруппированы в {1} стеков вызовов',
        goroutineTruncated: 'Снимок слишком большой. Показана только часть стеков вызовов.',
        captureSnapshot: 'Обновить снимок',
        count: 'Количество',
        topFunction: 'Верхняя функция',
        manualCapture: 'Ручной сбор',
        startCapture: 'Начать сбор',
        capturing: 'Идёт сбор',
        captureSuccess: 'Диагностический файл создан; скачивание началось',
        profileCPU: 'CPU',
        profileHeap: 'Куча',
        profileGoroutine: 'Goroutine',
        profileMutex: 'Mutex',
        profileBlock: 'Блокировки',
        runtimeRSSDesc: 'Физическая память процесса, включая кучу Go, стеки потоков и нативную память.',
        runtimeHeapAllocDesc:
            'Выделенная, но ещё не освобождённая память кучи Go. Постоянный рост может указывать на удерживаемые объекты.',
        runtimeHeapObjectsDesc:
            'Количество живых объектов в куче Go. Постоянный рост может указывать на удерживаемые объекты.',
        runtimeGoroutineDesc:
            'Текущее число лёгких параллельных задач. Постоянный рост может указывать на утечку goroutine.',
        profileCPUDesc: 'Собирает стеки CPU за выбранное время для поиска функций, реально потребляющих процессор.',
        profileHeapDesc: 'Записывает используемые объекты кучи и стеки их выделения для анализа роста памяти.',
        profileGoroutineDesc: 'Сохраняет состояние и стек каждой goroutine и группирует одинаковые пути вызовов.',
        profileMutexDesc: 'Измеряет ожидание из-за конкуренции mutex для поиска горячих блокировок.',
        profileBlockDesc: 'Измеряет блокировки на каналах, select и примитивах синхронизации.',
    },
    terminal: {
        local: 'Локальный',
        defaultConn: 'Соединение по умолчанию',
        defaultConnHelper:
            'Эта операция автоматически подключится к узловому терминалу после открытия терминала для 【{0}】. Продолжить?',
        withReset: 'Сбросить Информацию о Подключении',
        localConnJump:
            'Информация о соединении по умолчанию поддерживается в [Терминал - Настройки]. Если соединение не удается, отредактируйте там!',
        nodeAdminLocalOnly: 'Администратору узла доступен только локальный терминал.',
        localHelper: 'Локальное имя используется только для локальной идентификации системы.',
        connLocalErr:
            'Невозможно выполнить автоматическую аутентификацию, пожалуйста, заполните информацию для входа на локальный сервер！',
        testConn: 'Проверить подключение',
        saveAndConn: 'Сохранить и подключиться',
        connTestOk: 'Информация о подключении доступна',
        connTestFailed: 'Подключение недоступно, пожалуйста, проверьте информацию подключения.',
        host: 'Хост | Хосты',
        createConn: 'Новое подключение',
        noHost: 'Нет хостов',
        groupChange: 'Изменить группу',
        expand: 'Развернуть все',
        fold: 'Свернуть все',
        batchInput: 'Пакетная обработка',
        quickCommand: 'Быстрая команда | Быстрые команды',
        noSuchCommand: 'В импортированном CSV-файле не найдены данные быстрых команд, проверьте и повторите попытку!',
        quickCommandHelper: 'Вы можете использовать быстрые команды внизу страницы "Терминалы -> Терминалы".',
        groupDeleteHelper:
            'После удаления группы все подключения в группе будут перемещены в группу по умолчанию. Хотите продолжить?',
        quickCommandBatchHelper:
            'Одна быстрая команда на строку в формате Имя---Команда, например: Проверить диск---df -h',
        command: 'Команда',
        quickCmd: 'Быстрая команда',
        addHost: 'Добавить',
        localhost: 'Локальный хост',
        ip: 'Адрес',
        authMode: 'Аутентификация',
        passwordMode: 'Пароль',
        rememberPassword: 'Запомнить информацию аутентификации',
        keyMode: 'Приватный ключ',
        key: 'Приватный ключ',
        keyPassword: 'Пароль приватного ключа',
        emptyTerminal: 'В настоящее время нет подключенных терминалов.',
        lineHeight: 'Высота строки',
        letterSpacing: 'Межбуквенный интервал',
        fontSize: 'Размер шрифта',
        fontFamily: 'Набор шрифтов',
        fontFamilySupportHelper:
            'Выберите или введите шрифт. Применение зависит от того, установлен ли шрифт в системе браузера; если нет, будет автоматический fallback. Если пусто, используется шрифт по умолчанию.',
        backgroundColor: 'Цвет фона',
        foregroundColor: 'Цвет текста',
        cursorBlink: 'Мигание курсора',
        cursorStyle: 'Стиль курсора',
        cursorUnderline: 'Подчёркивание',
        cursorBlock: 'Блок',
        cursorBar: 'Полоса',
        scrollback: 'Буфер прокрутки',
        scrollSensitivity: 'Чувствительность прокрутки',
        aiAssistant: 'AI-помощник',
        aiAccountHelper:
            'Используйте выбранный модельный аккаунт для генерации и подстановки команд. Для локальных моделей, таких как Ollama и vLLM, используйте пользовательский модельный аккаунт.',
        aiPrefix: 'Префикс запуска',
        aiPrefixHelper:
            'Введите "префикс + пробел" и нажмите Enter, чтобы запустить генерацию команд ИИ, например: {0} помоги мне показать информацию о диске.',
        aiRiskCommands: 'Перехват опасных команд',
        aiRiskCommandsHelper:
            'Настройте опасные команды для перехвата, по одной в каждой строке. При совпадении генерация будет заблокирована, а команда подставлена обратно в виде комментария.',
        aiSummary: 'Когда строка начинается с префикса {0} и вы нажимаете Enter, запускается генерация команд ИИ.',
        aiPrefixAsciiVisible:
            'Поддерживаются только видимые символы ASCII. Пробелы, символы CJK и полноширинные знаки не допускаются.',
        saveHelper: 'Вы уверены, что хотите сохранить текущую конфигурацию терминала?',
    },
    toolbox: {
        common: {
            toolboxHelper: 'Некоторые проблемы с установкой и использованием описаны в',
        },
        swap: {
            swap: 'Раздел Swap',
            swapHelper1:
                'Размер swap должен быть в 1-2 раза больше физической памяти, регулируется в зависимости от конкретных требований;',
            swapHelper2:
                'Перед созданием файла подкачки убедитесь, что на системном диске достаточно свободного места, так как размер файла подкачки будет занимать соответствующее дисковое пространство;',
            swapHelper3:
                'Swap может помочь снизить нагрузку на память, но это только альтернатива. Чрезмерная зависимость от swap может привести к снижению производительности системы. Рекомендуется в первую очередь увеличить память или оптимизировать использование памяти приложениями;',
            swapHelper4:
                'Рекомендуется регулярно отслеживать использование swap для обеспечения нормальной работы системы.',
            swapDeleteHelper:
                'Эта операция удалит раздел Swap {0}. В целях безопасности системы соответствующий файл не будет удален автоматически. Если требуется удаление, выполните его вручную!',
            saveHelper: 'Пожалуйста, сначала сохраните текущие настройки!',
            saveSwap: 'Сохранение текущей конфигурации изменит размер раздела Swap {0} на {1}. Хотите продолжить?',
            swapMin: 'Минимальный размер раздела - 40 КБ. Пожалуйста, измените и попробуйте снова!',
            swapMax: 'Максимальное значение для размера раздела - {0}. Пожалуйста, измените и попробуйте снова!',
            swapOff: 'Минимальный размер раздела - 40 КБ. Установка значения 0 отключит раздел Swap.',
        },
        device: {
            dnsHelper: 'DNS сервер',
            dnsAlert:
                'Внимание! Изменение конфигурации файла /etc/resolv.conf будет восстановлено до значений по умолчанию после перезагрузки системы.',
            dnsHelper1:
                'При наличии нескольких DNS-записей они должны отображаться с новой строки. Например:\n114.114.114.114\n8.8.8.8',
            hostsHelper: 'Разрешение имен хостов',
            hosts: 'Домен',
            hostAlert: 'Скрыты закомментированные записи, нажмите кнопку "Все настройки" для просмотра или настройки',
            toolbox: 'Быстрые настройки',
            hostname: 'Имя хоста',
            passwd: 'Системный пароль',
            passwdHelper: 'Вводимые символы не могут включать $ и &',
            timeZone: 'Часовой пояс',
            localTime: 'Время сервера',
            timeZoneChangeHelper: 'Изменение системного часового пояса требует перезапуска службы. Продолжить?',
            timeZoneHelper:
                'Если команда "timedatectl" не установлена, вы не сможете изменить часовой пояс. Система использует эту команду для изменения часового пояса.',
            timeZoneCN: 'Пекин',
            timeZoneAM: 'Лос-Анджелес',
            timeZoneNY: 'Нью-Йорк',
            ntpALi: 'Alibaba',
            ntpGoogle: 'Google',
            syncSite: 'NTP сервер',
            hostnameHelper:
                'Изменение имени хоста зависит от команды "hostnamectl". Если команда не установлена, изменение может не удаться.',
            userHelper:
                'Имя пользователя зависит от команды "whoami" для получения. Если команда не установлена, получение может не удаться.',
            passwordHelper:
                'Изменение пароля зависит от команды "chpasswd". Если команда не установлена, изменение может не удаться.',
            hostHelper:
                'В предоставленном содержимом есть пустое значение. Пожалуйста, проверьте и попробуйте снова после изменения!',
            dnsCheck: 'Проверить доступность',
            dnsOK: 'Информация о конфигурации DNS доступна!',
            dnsTestFailed: 'Информация о конфигурации DNS недоступна.',
            syncSiteHelper: 'Синхронизировать системное время с {0}?',
        },
        fail2ban: {
            sshPort: 'Прослушивание SSH порта',
            sshPortHelper: 'Текущий Fail2ban прослушивает порт SSH-подключения хоста',
            unActive: 'Служба Fail2ban в настоящее время не включена.',
            operation: 'Вы собираетесь выполнить операцию "{0}" над службой Fail2ban. Хотите продолжить?',
            fail2banChange: 'Изменение конфигурации Fail2ban',
            ignoreHelper: 'IP-адреса из белого списка будут игнорироваться при блокировке. Хотите продолжить?',
            bannedHelper: 'IP-адреса из черного списка будут заблокированы сервером. Хотите продолжить?',
            maxRetry: 'Максимальное количество попыток',
            banTime: 'Время блокировки',
            banTimeHelper: 'Время блокировки по умолчанию 10 минут, -1 означает постоянную блокировку',
            banTimeRule: 'Пожалуйста, введите допустимое время блокировки или -1',
            banAllTime: 'Постоянная блокировка',
            findTime: 'Период обнаружения',
            banAction: 'Действие блокировки',
            banActionOption: 'Блокировать указанные IP-адреса используя {0}',
            allPorts: ' (Все порты)',
            ignoreIP: 'Белый список IP',
            bannedIP: 'Черный список IP',
            logPath: 'Путь к логам',
            logPathHelper: 'По умолчанию /var/log/secure или /var/log/auth.log',
        },
        ftp: {
            ftp: 'FTP аккаунт | FTP аккаунты',
            notStart: 'Служба FTP в настоящее время не запущена, пожалуйста, сначала запустите её!',
            initHelper:
                'Идентификатор пользователя FTP не инициализирован. Сначала нажмите «Инициализировать» в верхней строке состояния.',
            operation: 'Это выполнит операцию "{0}" над службой FTP. Хотите продолжить?',
            noPasswdMsg:
                'Невозможно получить текущий пароль FTP аккаунта, пожалуйста, установите пароль и попробуйте снова!',
            enableHelper: 'Включение выбранного FTP аккаунта восстановит его права доступа. Хотите продолжить?',
            disableHelper: 'Отключение выбранного FTP аккаунта отзовет его права доступа. Хотите продолжить?',
            syncHelper: 'Синхронизировать данные FTP аккаунта между сервером и базой данных. Хотите продолжить?',
            dirSystem:
                'Это системный каталог. Его изменение может вызвать сбой системы. Пожалуйста, измените и повторите попытку!',
            dirHelper: 'Для включения FTP требуется изменение прав доступа к каталогу - выбирайте осторожно',
            dirMsg: 'Включение FTP изменит права доступа для всего каталога {0}. Продолжить?',
        },
        clam: {
            clam: 'Антивирусное сканирование',
            cron: 'Запланированное сканирование',
            cronHelper: 'Коммерческая версия поддерживает функцию запланированного сканирования',
            specErr: 'Ошибка формата расписания выполнения, пожалуйста, проверьте и попробуйте снова!',
            disableMsg:
                'Остановка запланированного выполнения предотвратит автоматический запуск этой задачи сканирования. Хотите продолжить?',
            enableMsg:
                'Включение запланированного выполнения позволит этой задаче сканирования запускаться автоматически через регулярные интервалы. Хотите продолжить?',
            showFresh: 'Показать службу обновления сигнатур',
            hideFresh: 'Скрыть службу обновления сигнатур',
            clamHelper:
                'Минимальная рекомендуемая конфигурация для ClamAV: 3 ГБ ОЗУ или больше, одноядерный процессор с частотой 2.0 ГГц или выше, и не менее 5 ГБ свободного места на жестком диске.',
            notStart: 'Служба ClamAV в настоящее время не запущена, пожалуйста, сначала запустите её!',
            removeRecord: 'Удалить файлы отчетов',
            noRecords: 'Нажмите кнопку "Запустить" для начала сканирования, и вы увидите записи здесь.',
            removeInfected: 'Удалить зараженные файлы',
            removeInfectedHelper:
                'Удалить зараженные файлы, обнаруженные во время задачи, для обеспечения безопасности и нормальной работы сервера.',
            clamCreate: 'Создать правило сканирования',
            infectedStrategy: 'Стратегия для зараженных файлов',
            removeHelper: 'Удалить зараженные файлы, выбирайте осторожно!',
            move: 'Переместить',
            moveHelper: 'Переместить зараженные файлы в указанную директорию',
            copyHelper: 'Копировать зараженные файлы в указанную директорию',
            none: 'Ничего не делать',
            noneHelper: 'Не предпринимать действий с зараженными файлами',
            scanDir: 'Директория сканирования',
            infectedDir: 'Директория зараженных файлов',
            scanDate: 'Дата сканирования',
            scanResult: 'Последние строки лога сканирования',
            tail: 'Строк',
            infectedFiles: 'Зараженные файлы',
            log: 'Подробности',
            clamConf: 'Демон Clam AV',
            clamLog: '@:toolbox.clam.clamConf логи',
            freshClam: 'FreshClam',
            freshClamLog: '@:toolbox.clam.freshClam логи',
            alertHelper: 'Коммерческая версия поддерживает запланированное сканирование и SMS-оповещения',
            alertTitle: 'Задача антивирусного сканирования 「{0}」 обнаружила зараженный файл',
        },
    },
    logs: {
        core: 'Сервис панели',
        agent: 'Мониторинг узлов',
        panelLog: 'Логи панели',
        operation: 'Логи операций',
        login: 'Логи входа',
        loginIP: 'IP входа',
        loginAddress: 'Адрес входа',
        loginAgent: 'Агент входа',
        loginStatus: 'Статус',
        system: 'Системные логи',
        hostSystem: 'Журналы хоста',
        previousPage: 'Предыдущая страница',
        nextPage: 'Следующая страница',
        filter: 'Фильтр сообщений',
        service: 'Сервис',
        priority: 'Приоритет',
        priorityEmergency: 'Авария',
        priorityAlert: 'Тревога',
        priorityCritical: 'Критический',
        priorityError: 'Ошибка',
        priorityWarning: 'Предупреждение',
        priorityNotice: 'Уведомление',
        priorityInfo: 'Информация',
        priorityDebug: 'Отладка',
        message: 'Сообщение',
        deleteLogs: 'Очистить логи',
        resource: 'Ресурс',
        detail: {
            dashboard: 'Обзор',
            ai: 'AI',
            skills_hub: 'Skills Hub',
            ai_proxy: 'AI Proxy',
            ai_benchmark: 'Бенчмарк',
            groups: 'Группы',
            hosts: 'Хосты',
            apps: 'Приложения',
            openresty: 'OpenResty',
            websites: 'Вебсайты',
            monitor: 'Мониторинг веб-сайтов',
            containers: 'Контейнеры',
            files: 'Управление файлами',
            runtimes: 'Среды выполнения',
            process: 'Управление процессами',
            toolbox: 'Инструментальный ящик',
            backups: 'Резервное копирование / Восстановление',
            tampers: 'Защита от подделки',
            xsetting: 'Настройки интерфейса',
            logs: 'Аудит журналов',
            settings: 'Настройки панели',
            cronjobs: 'Запланированные задачи',
            waf: 'WAF',
            databases: 'Базы данных',
            licenses: 'лицензии',
            nodes: 'ноды',
            commands: 'Быстрые команды',
            opsReport: 'Операционный отчет',
            ops_report: 'Операционный отчет',
            users: 'Управление пользователями',
            roles: 'Роль',
            auth: 'Аутентификация входа',
            auth_sources: 'Настройки аутентификации',
            alert: 'Уведомления о тревогах',
            sync: 'Синхронизация ресурсов',
            exchange: 'Синхронизация ресурсов',
            xapp: 'App',
            vms: 'Управление виртуальными машинами',
        },
        websiteLog: 'Логи веб-сайта',
        runLog: 'Логи выполнения',
        errLog: 'Логи ошибок',
        task: 'Лог задач',
        taskName: 'Имя задачи',
        taskRunning: 'Выполняется',
    },
    file: {
        fileDirNum: '{0} каталогов, {1} файлов,',
        currentDir: 'Текущий каталог',
        dir: 'Папка',
        fileName: 'Имя файла',
        search: 'Поиск',
        mode: 'Права доступа',
        editPermissions: 'Изменить права доступа',
        owner: 'Владелец',
        file: 'Файл',
        remoteFile: 'Удалённая загрузка',
        share: 'Поделиться',
        sync: 'Синхронизация данных',
        size: 'Размер',
        updateTime: 'Изменен',
        rename: 'Переименовать',
        role: 'Права доступа',
        info: 'Атрибуты',
        linkFile: 'Символическая ссылка',
        shareList: 'Список общих ресурсов',
        fileTools: 'Инструменты файлов',
        aiSearchHitLines: 'Строки с совпадениями',
        aiSearch: 'Поиск с ИИ',
        aiSearchTitle: 'Поиск с ИИ',
        aiSearchHint:
            'Ищет содержимое файлов построчно. Используйте кнопки справа от строки поиска и "Дополнительные условия" ниже. После включения и сохранения аккаунта ИИ можно также генерировать Markdown-сводку.',
        aiSearchAccountTitle: 'Аккаунт ИИ',
        aiSearchAccountIntro: 'Выберите аккаунт большой модели для генерации сводок и сохраните изменения.',
        aiSearchAccountEnable: 'Включить ИИ-поиск по файлам',
        aiSearchSaveAccount: 'Сохранить настройки аккаунта',
        aiSearchSectionQuery: 'Поиск',
        aiSearchSectionConditions: 'Условия поиска',
        aiSearchResultsSection: 'Результаты анализа',
        aiSearchContentLabel: 'Содержимое поиска',
        aiSearchDirLabel: 'Каталог',
        aiSearchExtLabel: 'Расширение файла',
        aiSearchModifiedPreset: 'Время изменения',
        aiSearchSizePresetLabel: 'Размер файла',
        aiSearchTimeAny: 'Без ограничения по времени',
        aiSearchTime3h: 'Последние 3 часа',
        aiSearchTime1d: 'Последний 1 день',
        aiSearchTime7d: 'Последние 7 дней',
        aiSearchTime30d: 'Последние 30 дней',
        aiSearchTimeCustom: 'Произвольный',
        aiSearchSizeAny: 'Без ограничения по размеру',
        aiSearchSize0_10mb: '0 ~ 10 MB',
        aiSearchSize10_100mb: '10 MB ~ 100 MB',
        aiSearchSize100_1gb: '100 MB ~ 1 GB',
        aiSearchSizeGte1gb: '≥ 1 GB',
        aiSearchSizeCustom: 'Произвольно (байты)',
        aiSearchPlaceholder: 'Введите содержимое поиска',
        aiSearchContainSub: 'Подпапки',
        aiSearchMaxItems: 'Максимум путей/файлов в поиске (перечисление каталогов, 1–2000)',
        aiSearchRun: 'Начать анализ',
        aiSearchTruncated: 'Слишком много элементов каталога, включена только часть списка.',
        aiSearchPreFiltered: 'Относительные пути предварительно отфильтрованы по ключевым словам.',
        aiSearchMeta: 'Элементов для анализа: {0} | Время {1} | Token {2}',
        aiSearchQueryRequired: 'Введите описание поиска или ключевые слова',
        aiSearchContentHits: 'Совпадения по содержимому',
        aiSearchContentScanMeta: 'Сканирование содержимого: прочитано {0} текстовых файлов.',
        aiSearchNoLineHits: 'В просканированных текстовых файлах не найдено совпадающих строк.',
        aiSearchHitsTruncated: 'Некоторые файлы не были просканированы или список совпадений обрезан.',
        aiSearchHitFiles: 'Файлы с совпадениями',
        aiSearchOpenFile: 'Открыть в редакторе',
        aiSearchOpenAtLine: 'Открыть и перейти к этой строке',
        aiSearchGrepOnlyHint:
            'ИИ для файлов выключен: выполняется только детерминированный поиск по содержимому, без вызова модели. Включите и сохраните аккаунт ИИ выше, чтобы получить сводки. Строка поиска и опции ниже по-прежнему действуют.',
        aiSearchMatchCase: 'Учитывать регистр',
        aiSearchWholeWord: 'Полное слово (границы слова английского языка \\b)',
        aiSearchUseRegex: 'Регулярное выражение (синтаксис Go RE2)',
        aiSearchExtensions: 'Расширения файлов (через запятую, например go,ts,md)',
        aiSearchMinSize: 'Минимальный размер файла (байты, 0 = без ограничения)',
        aiSearchMaxSize: 'Максимальный размер файла (байты, 0 = без ограничения)',
        aiSearchSectionAdvanced: 'Дополнительные условия',
        aiSearchLimitMaxItems: 'Общее количество файлов для поиска',
        aiSearchLimitMaxScan: 'Файлов для сканирования содержимого',
        aiSearchLimitMaxBytes: 'Лимит чтения для одного файла',
        aiSearchLimitHitsPerFile: 'Строк совпадений на файл',
        aiSearchLimitTotalHits: 'Общее количество строк совпадений',
        aiSearchLimitUnitEntries: 'шт.',
        aiSearchLimitUnitFiles: 'файлов',
        aiSearchLimitUnitBytes: 'B',
        aiSearchLimitUnitLines: 'строк',
        aiSearchMaxScanFiles: 'Максимум файлов для сканирования содержимого',
        aiSearchMaxFileBytes:
            'Максимальное количество байт, читаемых из каждого файла при сканировании содержимого. В отличие от фильтра размера выше (по размеру на диске решается, попадёт ли файл в список), этот параметр ограничивает фактическое чтение для сопоставления.',
        aiSearchMaxHitsPerFile: 'Максимум строк совпадений на файл',
        aiSearchMaxTotalHits: 'Лимит общего количества строк совпадений',
        aiSearchGrepMetaContent:
            'Сканирование содержимого: всего элементов {0}, прочитано {1} текстовых файлов (по текущим условиям; с ограничениями по размеру и количеству). Время {2}',
        aiSearchAdvancedResetDefaults: 'Восстановить значения по умолчанию',
        zip: 'Сжатый',
        group: 'Группа',
        path: 'Путь',
        public: 'Другие',
        setRole: 'Установить права',
        link: 'Ссылка на файл',
        rRole: 'Чтение',
        wRole: 'Запись',
        xRole: 'Исполнение',
        name: 'Имя',
        compress: 'Сжать',
        deCompress: 'Распаковать',
        compressType: 'Формат сжатия',
        compressDst: 'Путь сжатия',
        replace: 'Перезаписать существующие файлы',
        compressSuccess: 'Успешно сжато',
        deCompressSuccess: 'Успешно распаковано',
        deCompressDst: 'Путь распаковки',
        linkType: 'Тип ссылки',
        softLink: 'Символическая ссылка',
        hardLink: 'Жесткая ссылка',
        linkPath: 'Путь ссылки',
        selectFile: 'Выбрать файл',
        downloadUrl: 'Удаленный URL',
        downloadStart: 'Загрузка начата',
        wgetUrlInvalid: 'Введите корректный URL загрузки (http/https)',
        moveSuccess: 'Успешно перемещено',
        copySuccess: 'Успешно скопировано',
        pasteMsg: 'Нажмите кнопку «Вставить» в правом верхнем углу целевой директории',
        move: 'Переместить',
        calculate: 'Вычислить',
        remark: 'Примечание',
        setRemark: 'Задать примечание',
        remarkPrompt: 'Введите примечание',
        remarkPlaceholder: 'Примечание',
        remarkToggle: 'Примечания',
        remarkToggleTip: 'Загружать примечания файлов',
        canNotDeCompress: 'Невозможно распаковать этот файл',
        uploadSuccess: 'Успешно загружено',
        downloadProcess: 'Прогресс загрузки',
        downloading: 'Загрузка...',
        infoDetail: 'Свойства файла',
        root: 'Корневая директория',
        list: 'Список файлов',
        sub: 'Подпапки',
        downloadSuccess: 'Успешно скачано',
        theme: 'Тема',
        language: 'Язык',
        eol: 'Конец строки',
        history: 'История версий',
        historyTitle: 'История версий',
        historyHint:
            'Записывает версию до каждого изменения файла, позволяет просматривать историю изменений содержимого и откатывать версии содержимого.',
        historySettingTitle: 'Политика версий',
        historyEnable: 'Включить историю версий',
        historyMaxPerPath: 'Хранить для каждого файла',
        historyDiskQuota: 'Общий лимит диска (MB)',
        historyCurrentScope: 'Текущий файл',
        historyAllScope: 'Все файлы',
        historyDeleteConfirm: 'Вы уверены, что хотите удалить выбранные записи истории?',
        historyNeedFile: 'Сначала откройте файл',
        historyRestore: 'Восстановить эту версию',
        historyOperationOnlyHint:
            'Выбранный элемент является операцией с файлом и не поддерживает восстановление версий.',
        historyCurrentFile: 'Текущий файл',
        historyLatestVersion: 'Слева - история, справа - последняя версия выбранного файла',
        historyCompareTarget: 'Цель сравнения',
        historyCompareTargetPath: 'Путь сравнения',
        historyRestoreConfirm: 'Восстановить эту версию в текущий файл?',
        historyRestoreDirtyConfirm:
            'В текущем файле есть несохранённые изменения. Восстановление перезапишет их. Продолжить?',
        historyRestoreSuccess: 'Версия успешно восстановлена',
        historyDirtyHint: 'В текущем редакторе есть несохранённые изменения. Восстановление версии их перезапишет.',
        historyDiffHintCurrent: 'Слева показано содержимое версии из истории, справа - содержимое текущего файла',
        historyDiffHintAll:
            'Слева показано содержимое версии из истории, справа - содержимое последней версии выбранного файла',
        copyDir: 'Копировать',
        shareFile: 'Поделиться файлом',
        shareExpire: 'Срок действия',
        shareExpire1h: '1 час',
        shareExpire6h: '6 часов',
        shareExpire24h: '24 часа',
        shareExpire3d: '3 дня',
        shareExpire7d: '7 дней',
        sharePassword: 'Пароль',
        sharePasswordPlaceholder: 'Оставьте пустым, чтобы не использовать пароль',
        shareMaxDownloads: 'Максимум загрузок',
        shareMaxDownloadsHint: '0 означает без ограничений',
        shareGenerate: 'Создать ссылку',
        shareRegenerate: 'Поделиться снова',
        shareClose: 'Закрыть',
        shareCancel: 'Отменить общий доступ',
        shareCancelConfirm: 'Вы уверены, что хотите отменить общий доступ к этому файлу?',
        shareDetail: 'Сведения',
        shareCopyLink: 'Копировать ссылку',
        shareLinkLabel: 'Ссылка общего доступа',
        shareQrCode: 'QR-код',
        shareQrDialogTitle: 'QR-код ссылки общего доступа',
        shareQrDialogHelper: 'Отсканируйте QR-код с мобильного устройства',
        shareSaveImage: 'Сохранить изображение',
        shareOpenImage: 'Открыть изображение',
        shareExtractFile: 'Получить файл',
        shareDownloadingHint: 'Файл подготавливается. Загрузка скоро начнётся.',
        shareInvalid: 'Недействительная или просроченная ссылка общего доступа',
        shareDownloadFailed: 'Не удалось загрузить файл. Повторите попытку позже',
        sharePasswordRequired: 'Пароль доступа',
        sharePasswordRequiredInput: 'Введите пароль общего доступа',
        sharePasswordLengthHint: 'Длина пароля общего доступа должна составлять 4–256 символов',
        shareDownloadPasswordTip: 'Эта ссылка защищена паролем. Введите пароль перед загрузкой.',
        shareRiskAlert:
            'Ссылки общего доступа могут представлять угрозу безопасности. Делитесь ими только с доверенными людьми и не раскрывайте конфиденциальные данные.',
        sharePasswordSeparate:
            'Пароль задан. Передайте его безопасным способом. Получатель должен добавить &password=... к URL или использовать клиент, поддерживающий параметр пароля.',
        shareExpiresAt: 'Истекает',
        paste: 'Вставить',
        changeOwner: 'Изменить пользователя и группу',
        containSub: 'Применить изменение прав рекурсивно',
        ownerHelper:
            'Пользователь по умолчанию для среды PHP: группа пользователей 1000:1000, нормально, что пользователи внутри и снаружи контейнера показывают несоответствия',
        searchHelper: 'Поддерживает подстановочные знаки, такие как *',
        uploadFailed: '[{0}] Ошибка загрузки файла',
        fileUploadStart: 'Загрузка [{0}]...',
        uploadOverallProgress: 'Общий прогресс',
        uploadCurrentFileProgress: 'Текущий файл',
        currentSelect: 'Текущий выбор: ',
        unsupportedType: 'Неподдерживаемый тип файла',
        deleteHelper: 'Вы уверены, что хотите удалить следующие файлы? По умолчанию они будут помещены в корзину',
        fileHelper: 'Примечание:\n1. Результаты поиска нельзя сортировать.\n2. Папки нельзя сортировать по размеру.',
        forceDeleteHelper: 'Удалить файл навсегда (без помещения в корзину, удалить напрямую)',
        recycleBin: 'Корзина',
        sourcePath: 'Исходный путь',
        deleteTime: 'Время удаления',
        confirmReduce: 'Вы уверены, что хотите восстановить следующие файлы?',
        reduceSuccess: 'Успешно восстановлено',
        reduce: 'Восстановление',
        reduceHelper:
            'Если файл или директория с таким же именем существует в исходном пути, он будет перезаписан. Хотите продолжить?',
        clearRecycleBin: 'Очистить',
        clearRecycleBinHelper: 'Вы хотите очистить корзину?',
        favorite: 'Избранное',
        removeFavorite: 'Удалить из избранного?',
        addFavorite: 'Добавить/Удалить в избранное',
        addFavoriteAction: 'Добавить в избранное',
        removeFavoriteAction: 'Удалить из избранного',
        clearList: 'Очистить список',
        deleteRecycleHelper: 'Вы уверены, что хотите навсегда удалить следующие файлы?',
        typeErrOrEmpty: '[{0}] неверный тип файла или пустая папка',
        dropHelper: 'Перетащите сюда файлы для загрузки',
        fileRecycleBin: 'Включить корзину',
        fileRecycleBinMsg: '{0} корзина',
        wordWrap: 'Автоматический перенос строк',
        deleteHelper2: 'Вы уверены, что хотите удалить выбранный файл? Операцию удаления нельзя отменить',
        ignoreCertificate: 'Разрешить небезопасные подключения к серверу',
        ignoreCertificateHelper:
            'Разрешение небезопасных подключений к серверу может привести к утечке или подмене данных. Используйте эту опцию только если доверяете источнику загрузки.',
        useProxy: 'Загружать через прокси',
        useProxyHelper: 'Использовать прокси-сервер из настроек панели для доступа к удалённому URL загрузки',
        uploadOverLimit: 'Количество файлов превышает 1000! Пожалуйста, сожмите и загрузите',
        clashDidNotSupport: 'Имена файлов не должны содержать .1panel_clash',
        clashDeleteAlert: 'Папку "Корзина" нельзя удалить',
        clashOpenAlert: 'Пожалуйста, нажмите кнопку "Корзина" чтобы открыть директорию корзины',
        right: 'Вперед',
        back: 'Назад',
        top: 'Вернуться',
        up: 'Назад',
        openWithVscode: 'Открыть в VS Code',
        vscodeHelper:
            'Проверьте способ аутентификации, хост, порт и имя пользователя. Для аутентификации по ключу сначала настройте SSH на компьютере, где запущен VS Code.',
        vscodeCopyConfig: 'Скопировать скрипт настройки',
        vscodeKeyHelper:
            'Имя файла приватного ключа формируется из указанного пути. Сохраните файл по этому пути; скрипт настройки проверит его и применит права доступа.',
        vscodeKeyPath: 'Путь к SSH приватному ключу',
        vscodeKeyPathPlaceholder: 'Например: ~/.ssh/id_ed25519',
        vscodeSelectKey: 'SSH приватный ключ',
        vscodeScriptPreview: 'Скрипт настройки SSH',
        vscodePasswordHelper:
            'Парольная аутентификация не записывается в локальную SSH config. Введите пароль в VS Code при подключении к удаленному хосту.',
        vscodePasswordHint:
            'Парольная аутентификация подключается с указанными хостом, портом и именем пользователя. Скрипт настройки и файл приватного ключа не требуются.',
        vscodeScriptPreviewHint:
            'Выполните скрипт настройки на компьютере, где запущен VS Code, чтобы зарегистрировать SSH alias для удаленного подключения. Повторите выполнение после изменения хоста, порта, имени пользователя, приватного ключа или пути к ключу.',
        vscodePasswordModeTitle: 'Парольная аутентификация',
        vscodePasswordModeHint:
            'Парольная аутентификация подключается с указанными хостом, портом и именем пользователя. Скрипт настройки и файл приватного ключа не требуются.',
        vscodePasswordStep1: 'Проверьте хост, порт и имя пользователя.',
        vscodePasswordStep2: 'Откройте VS Code и введите пароль при подключении.',
        vscodePasswordStep3: 'Загрузка приватного ключа не требуется.',
        saveContentAndClose: 'Файл был изменен, хотите сохранить и закрыть его?',
        saveAndOpenNewFile: 'Файл был изменен, хотите сохранить и открыть новый файл?',
        noEdit: 'Файл не был изменен, не нужно этого делать!',
        noNameFolder: 'Безымянная папка',
        noNameFile: 'Безымянный файл',
        minimap: 'Мини-карта кода',
        fileCanNotRead: 'Файл не может быть прочитан',
        previewTruncated: 'Файл слишком большой, отображается только последняя часть',
        previewEmpty: 'Файл пуст или не является текстовым файлом',
        previewLargeFile: 'Предпросмотр',
        panelInstallDir: 'Директорию установки 1Panel нельзя удалить',
        wgetTask: 'Задача загрузки',
        stopWgetConfirm: 'Вы уверены, что хотите остановить эту задачу загрузки?',
        existFileTitle: 'Предупреждение о файле с тем же именем',
        existFileHelper: 'Загруженный файл содержит файл с таким же именем. Заменить его?',
        existFileSize: 'Размер файла (новый -> старый)',
        existFileDirHelper: 'Выбранный файл/папка имеет дублирующееся имя. Пожалуйста, действуйте осторожно!\n',
        coverDirHelper: 'При выборе перезаписываемой папки она будет скопирована в целевой путь!',
        noSuchFile: 'Файл или каталог не найдены. Пожалуйста, проверьте и повторите попытку.',
        setting: 'настройка',
        showHide: 'Показывать скрытые файлы',
        noShowHide: 'Не показывать скрытые файлы',
        cancelUpload: 'Отменить загрузку',
        cancelUploadHelper: 'Отменить загрузку или нет, после отмены список загрузок будет очищен.',
        keepOneTab: 'Необходимо оставить как минимум одну вкладку',
        notCanTab: 'Невозможно добавить больше вкладок',
        convert: 'Конвертировать формат',
        converting: 'Конвертация в',
        fileCanNotConvert: 'Этот файл не поддерживает конвертацию формата',
        formatType: 'Тип формата',
        sourceFormat: 'Исходный формат',
        sourceFile: 'Исходный файл',
        saveDir: 'Каталог сохранения',
        deleteSourceFile: 'Удалить исходный файл',
        convertHelper: 'Конвертировать выбранные файлы в другой формат',
        convertHelper1: 'Пожалуйста, выберите файлы для конвертации',
        execConvert: 'Начать конвертацию. Вы можете просмотреть журналы конвертации в Центре задач',
        convertLogs: 'Журналы конвертации',
        formatConvert: 'Конвертация формата',
    },
    ssh: {
        autoStart: 'Автозапуск',
        enable: 'Включить автозапуск',
        disable: 'Отключить автозапуск',
        sshAlert:
            'Данные списка отсортированы по дате входа. Изменение часового пояса или выполнение других операций может вызвать отклонения в дате логов входа.',
        sshAlert2:
            'Вы можете использовать "Fail2ban" в "Инструментах" для блокировки IP-адресов, пытающихся выполнить брутфорс-атаки, это повысит безопасность хоста.',
        sshOperate: 'Будет выполнена операция "{0}" над службой SSH. Хотите продолжить?',
        sshChange: 'Настройки SSH',
        sshChangeHelper: 'Это действие изменит "{0}" на "{1}". Хотите продолжить?',
        sshFileChangeHelper:
            'Изменение конфигурационного файла может повлиять на доступность службы. Будьте осторожны при выполнении этой операции. Хотите продолжить?',
        port: 'Порт',
        portHelper: 'Указывает порт, который прослушивает служба SSH.',
        listenAddress: 'Адрес прослушивания',
        allV4V6: '0.0.0.0:{0}(IPv4) и :::{0}(IPv6)',
        listenHelper:
            'Если оставить пустыми настройки IPv4 и IPv6, будет прослушиваться "0.0.0.0:{0}(IPv4)" и ":::{0}(IPv6)".',
        addressHelper: 'Указывает адрес, который прослушивает служба SSH.',
        permitRootLogin: 'Разрешить вход пользователя root',
        rootSettingHelper: 'Метод входа по умолчанию для пользователя root - "Разрешить вход по SSH".',
        rootHelper1: 'Разрешить вход по SSH',
        rootHelper2: 'Отключить вход по SSH',
        rootHelper3: 'Разрешен только вход по ключу',
        rootHelper4: 'Можно выполнять только предопределенные команды. Другие операции недоступны.',
        passwordAuthentication: 'Аутентификация по паролю',
        pwdAuthHelper: 'Включить ли аутентификацию по паролю. Этот параметр включен по умолчанию.',
        pubkeyAuthentication: 'Аутентификация по ключу',
        privateKey: 'Приватный ключ',
        publicKey: 'Публичный ключ',
        password: 'Пароль',
        createMode: 'Способ создания',
        generate: 'Автогенерация',
        unSyncPass: 'Пароль ключа не может быть синхронизирован',
        syncHelper:
            'Операция синхронизации удалит недействительные ключи и синхронизирует новые полные ключевые пары. Продолжить?',
        input: 'Ручной ввод',
        import: 'Загрузка файла',
        authKeys: 'Ключи Авторизации',
        authKeysHelper: 'Сохранить текущую информацию об открытом ключе?',
        pubkey: 'Информация о ключе',
        pubKeyHelper: 'Текущая информация о ключе действительна только для пользователя {0}',
        encryptionMode: 'Режим шифрования',
        passwordHelper: 'Может содержать от 6 до 10 цифр и английских букв в разных регистрах',
        reGenerate: 'Перегенерировать ключ',
        keyAuthHelper: 'Включить ли аутентификацию по ключу.',
        useDNS: 'useDNS',
        dnsHelper: 'Управляет включением функции DNS-разрешения на SSH-сервере для проверки подлинности подключения.',
        confFileOrderHelper:
            'Используйте выпадающий список для переключения файла конфигурации и прямого редактирования/сохранения; применяется по порядку загрузки, и значение, загруженное раньше, имеет приоритет.',
        confFileOrderLabel: '{0} (Порядок загрузки #{1})',
        analysis: 'Статистическая информация',
        denyHelper:
            'Выполнение операции "запретить" для следующих адресов. После установки IP будет запрещен доступ к серверу. Хотите продолжить?',
        acceptHelper:
            'Выполнение операции "разрешить" для следующих адресов. После установки IP восстановит нормальный доступ. Хотите продолжить?',
        noAddrWarning: 'В настоящее время не выбраны адреса [{0}]. Пожалуйста, проверьте и попробуйте снова!',
        loginLogs: 'Журналы SSH',
        loginMode: 'Режим',
        authenticating: 'Ключ',
        publickey: 'Ключ',
        belong: 'Принадлежность',
        local: 'Локальный',
        session: 'Сессия | Сессии',
        loginTime: 'Время входа',
        loginIP: 'IP входа',
        stopSSHWarn: 'Отключить это SSH-соединение',
        remote: 'Удаленный SSH',
    },
    setting: {
        panel: 'Панель',
        user: 'Пользователь панели',
        userChange: 'Изменить пользователя панели',
        userChangeHelper: 'Изменение пользователя панели приведет к выходу из системы. Продолжить?',
        passwd: 'Пароль панели',
        emailHelper: 'Для восстановления пароля',
        watermark: 'Настройки Водяного Знака',
        watermarkContent: 'Содержимое Водяного Знака',
        contentHelper:
            '{0} представляет имя узла, {1} представляет адрес узла. Вы можете использовать переменные или ввести пользовательские имена.',
        watermarkColor: 'Цвет Водяного Знака',
        watermarkFont: 'Размер Шрифта Водяного Знака',
        watermarkHeight: 'Высота Водяного Знака',
        watermarkWidth: 'Ширина Водяного Знака',
        watermarkRotate: 'Угол Поворота',
        watermarkGap: 'Интервал',
        watermarkCloseHelper: 'Вы уверены, что хотите отключить настройки системного водяного знака?',
        watermarkOpenHelper: 'Вы уверены, что хотите сохранить текущие настройки системного водяного знака?',
        title: 'Псевдоним панели',
        panelPort: 'Порт панели',
        titleHelper:
            'Поддерживаются строки длиной от 3 до 30 символов, включающие буквы, китайские иероглифы, цифры, пробелы и распространённые специальные символы',
        portHelper:
            'Рекомендуемый диапазон портов от 8888 до 65535. Примечание: Если на сервере есть группа безопасности, заранее разрешите новый порт в группе безопасности',
        portChange: 'Изменение порта',
        portChangeHelper: 'Изменить порт службы и перезапустить службу. Хотите продолжить?',
        theme: 'Тема',
        menuTabs: 'Вкладки меню',
        menuAccordion: 'Разворачивать несколько меню',
        menuAccordionHelper:
            'После включения несколько групп меню боковой панели могут оставаться развернутыми одновременно.',
        dark: 'Тёмная',
        darkGold: 'Тёмное золото',
        light: 'Светлая',
        auto: 'Как в системе',
        language: 'Язык',
        runtimeEnv: 'Среда выполнения',
        docSource: 'Источник документации',
        withByRegion: 'Следовать региону работы (по умолчанию)',
        withByLang: 'Следовать языку системы',
        region: 'Регион работы',
        cn: 'Материковый Китай',
        intl: 'Глобальный',
        regionHelper: 'При смене региона будут изменены следующие источники ресурсов:',
        regionHelper1: 'Установочные пакеты системы',
        regionHelper2: 'Магазин приложений и библиотека скриптов',
        regionHelper3: 'Руководство пользователя и сопутствующая документация',
        regionHelper4: 'Это может повлиять на последующие загрузки и доступ. Действуйте осторожно.',
        regionTip: 'Регион работы влияет на источник обновления системы и адрес загрузки установочных пакетов.',
        docSourceTip: 'Источник документации определяет язык перехода для документации и журнала обновлений.',
        languageHelper: 'По умолчанию следует языку браузера. Этот параметр действует только в текущем браузере',
        sessionTimeout: 'Время сессии',
        sessionTimeoutError: 'Минимальное время сессии 300 секунд',
        sessionTimeoutHelper: 'Панель автоматически выйдет из системы, если не будет операций более {0} секунд.',
        systemIP: 'Адрес доступа по умолчанию',
        systemIPHelper:
            'Перенаправления приложений, доступ к контейнерам и другие функции будут использовать этот адрес для маршрутизации. Каждый узел можно настроить с разным адресом.',
        proxy: 'Прокси',
        proxyHelper: 'После настройки прокси-сервера он будет действовать в следующих сценариях:',
        proxyHelper1:
            'Загрузка установочного пакета и синхронизация из магазина приложений (только коммерческая версия)',
        proxyHelper2: 'Обновление системы и получение информации об обновлениях (только коммерческая версия)',
        proxyHelper4:
            'Сетевые запросы, такие как загрузка образов Docker, будут выполняться через прокси-сервер (только коммерческая версия)',
        proxyHelper3: 'Проверка и синхронизация системной лицензии',
        proxyHelper5: 'Единая загрузка и синхронизация системных скрипт-библиотек (функция Коммерческой версии)',
        proxyHelper6: 'Подать заявку на сертификат (функция коммерческой версии)',
        proxyType: 'Тип прокси',
        proxyUrl: 'Адрес прокси',
        proxyPort: 'Порт прокси',
        proxyPasswdKeep: 'Запомнить пароль',
        proxyDocker: 'Прокси Docker',
        proxyDockerHelper:
            'Синхронизировать конфигурацию прокси-сервера с Docker, поддержка офлайн загрузки образов и других операций',
        syncToNode: 'Синхронизация с дочерним узлом',
        syncToNodeHelper: 'Синхронизация настроек с другими узлами',
        nodes: 'Узлы',
        selectNode: 'Выберите узел',
        selectNodeError: 'Пожалуйста, выберите узел',
        apiInterface: 'Включить API',
        apiInterfaceClose: 'После закрытия API-интерфейсы будут недоступны. Хотите продолжить?',
        apiInterfaceHelper: 'Разрешить сторонним приложениям доступ к API.',
        apiInterfaceAlert1:
            'Не включайте в производственной среде, так как это может повысить риски безопасности сервера.',
        apiInterfaceAlert2:
            'Не используйте сторонние приложения для вызова API во избежание потенциальных угроз безопасности.',
        apiInterfaceAlert3: 'Документация API',
        apiInterfaceAlert4: 'Руководство по использованию',
        apiKey: 'API ключ',
        apiKeyHelper: 'API ключ используется сторонними приложениями для доступа к API.',
        ipWhiteList: 'Белый список IP',
        ipWhiteListEgs: 'По одному в строке. Например,\n172.161.10.111\n172.161.10.0/24',
        ipWhiteListHelper:
            'IP-адреса из белого списка могут получить доступ к API, 0.0.0.0/0 (все IPv4), ::/0 (все IPv6)',
        apiTrustedProxies: 'Доверенные прокси API',
        apiTrustedProxiesEgs:
            'По одному IP-адресу или CIDR прокси-сервера в строке. Например,\n172.16.10.111\n172.16.10.0/24',
        apiTrustedProxiesHelper:
            'При использовании обратного прокси укажите IP-адрес или сеть прокси-сервера, чтобы корректно определить IP клиента. Если прокси не используется, оставьте поле пустым. 0.0.0.0/0 и ::/0 не поддерживаются.',
        apiKeyValidityTime: 'Срок действия ключа интерфейса',
        apiKeyValidityTimeEgs: 'Срок действия ключа интерфейса (в единицах)',
        apiKeyValidityTimeHelper:
            'Интерфейс времени метки между текущей меткой времени на момент запроса действителен (в единицах), установлен как 0, не проводится проверка метки времени',
        apiKeyReset: 'Сброс ключа интерфейса',
        apiKeyResetHelper:
            'связанный ключевой сервис станет недействительным. Пожалуйста, добавьте новый ключ к сервису',
        confDockerProxy: 'Настроить прокси docker',
        restartNowHelper: 'Настройка прокси Docker требует перезапуска службы Docker.',
        restartNow: 'Перезапустить немедленно',
        restartLater: 'Перезагрузить вручную позже',
        systemIPWarning:
            'Текущий узел не имеет настроенного адреса доступа по умолчанию. Пожалуйста, перейдите в настройки панели для его настройки!',
        systemIPWarning1: 'Текущий адрес сервера установлен на {0}, быстрое перенаправление невозможно!',
        syncTime: 'Время сервера',
        timeZone: 'Часовой пояс',
        timeZoneChangeHelper: 'Изменение часового пояса требует перезапуска службы. Хотите продолжить?',
        timeZoneHelper:
            'Изменение часового пояса зависит от системной службы timedatectl. Вступит в силу после перезапуска службы 1Panel.',
        timeZoneCN: 'Пекин',
        timeZoneAM: 'Лос-Анджелес',
        timeZoneNY: 'Нью-Йорк',
        ntpALi: 'Alibaba',
        ntpGoogle: 'Google',
        syncSite: 'NTP сервер',
        syncSiteHelper:
            'Эта операция будет использовать {0} как источник для синхронизации системного времени. Хотите продолжить?',
        changePassword: 'Изменить пароль',
        oldPassword: 'Текущий пароль',
        newPassword: 'Новый пароль',
        retryPassword: 'Подтвердите пароль',
        passwordEmptyTip: 'Оставьте пустым, чтобы не менять текущий пароль',
        noSpace: 'Вводимая информация не может включать пробелы',
        duplicatePassword: 'Новый пароль не может совпадать с текущим, пожалуйста, введите заново!',
        diskClean: 'Очистка кэша',
        developerMode: 'Режим предварительного просмотра',
        developerModeHelper:
            'Вы сможете опробовать новые функции и исправления до их широкого релиза и оставить ранний отзыв.',
        thirdParty: 'Сторонние аккаунты',
        noTypeForCreate: 'В настоящее время не создано типов резервного копирования',
        LOCAL: 'Диск сервера',
        OSS: 'Ali OSS',
        S3: 'Amazon S3',
        mode: 'Режим',
        MINIO: 'MinIO',
        SFTP: 'SFTP',
        WebDAV: 'WebDAV',
        WebDAVAlist: 'Подключение WebDAV к Alist можно найти в официальной документации',
        OneDrive: 'Microsoft OneDrive',
        isCN: 'Китайский интернет',
        isNotCN: 'Международная версия',
        client_id: 'ID клиента',
        client_secret: 'Секрет клиента',
        redirect_uri: 'URL перенаправления',
        onedrive_helper: 'Пользовательская конфигурация описана в официальной документации',
        refreshTime: 'Время обновления токена',
        refreshStatus: 'Статус обновления токена',
        backupDir: 'Директория резервных копий',
        codeWarning: 'Текущий формат кода авторизации неверен, пожалуйста, проверьте еще раз!',
        code: 'Код авторизации',
        codeHelper:
            'Нажмите кнопку «Получить», затем войдите в {0} и скопируйте содержимое после «code» в перенаправленной ссылке. Вставьте его в это поле. Подробные инструкции смотрите в официальной документации.',
        googleHelper:
            'Сначала создайте приложение Google и получите информацию о клиенте, заполните форму и нажмите кнопку получения. Конкретные операции см. в официальной документации.',
        loadCode: 'Получить',
        COS: 'Tencent COS',
        ap_beijing_1: 'Пекин Зона 1',
        ap_beijing: 'Пекин',
        ap_nanjing: 'Нанкин',
        ap_shanghai: 'Шанхай',
        ap_guangzhou: 'Гуанчжоу',
        ap_chengdu: 'Чэнду',
        ap_chongqing: 'Чунцин',
        ap_shenzhen_fsi: 'Шэньчжэнь Финансовый',
        ap_shanghai_fsi: 'Шанхай Финансовый',
        ap_beijing_fsi: 'Пекин Финансовый',
        ap_hongkong: 'Гонконг, Китай',
        ap_singapore: 'Сингапур',
        ap_mumbai: 'Мумбаи',
        ap_jakarta: 'Джакарта',
        ap_seoul: 'Сеул',
        ap_bangkok: 'Бангкок',
        ap_tokyo: 'Токио',
        na_siliconvalley: 'Силиконовая долина (США Запад)',
        na_ashburn: 'Ашберн (США Восток)',
        na_toronto: 'Торонто',
        sa_saopaulo: 'Сан-Паулу',
        eu_frankfurt: 'Франкфурт',
        KODO: 'Qiniu Kodo',
        scType: 'Тип хранилища',
        typeStandard: 'Стандартный',
        typeStandard_IA: 'Стандартный_IA',
        typeArchive: 'Архивный',
        typeDeep_Archive: 'Глубокий_Архив',
        scLighthouse: 'По умолчанию, Легковесное объектное хранилище поддерживает только этот тип хранилища',
        scStandard:
            'Стандартное хранилище подходит для бизнес-сценариев с большим количеством горячих файлов, требующих мгновенного доступа, частого обмена данными и т.д.',
        scStandard_IA:
            'Низкочастотное хранилище подходит для бизнес-сценариев с относительно низкой частотой доступа и хранит данные не менее 30 дней.',
        scArchive: 'Архивное хранилище подходит для бизнес-сценариев с крайне низкой частотой доступа.',
        scDeep_Archive:
            'Долговечное холодное хранилище подходит для бизнес-сценариев с крайне низкой частотой доступа.',
        archiveHelper:
            'Файлы архивного хранилища нельзя скачать напрямую, сначала их нужно восстановить через веб-сайт соответствующего облачного провайдера. Пожалуйста, используйте с осторожностью!',
        backupAlert:
            'Если облачный провайдер совместим с протоколом S3, вы можете напрямую использовать Amazon S3 для резервного копирования.',
        domain: 'Домен ускорения',
        backupAccount: 'Аккаунт резервного копирования | Аккаунты резервного копирования',
        loadBucket: 'Получить корзину',
        accountName: 'Имя аккаунта',
        accountKey: 'Ключ аккаунта',
        address: 'Адрес',
        path: 'Путь',
        safe: 'Безопасность',
        passkey: 'Passkey',
        passkeyManage: 'Управление',
        passkeyKeyManagement: 'Управление ключами',
        passkeyHelper: 'Для быстрого входа можно привязать до 5 passkey',
        passkeyRequireSSL: 'Для passkey нужно привязать домен и заходить по HTTPS',
        passkeyTrustedProxies: 'Доверенные прокси',
        passkeyTrustedProxiesHelper:
            'Только запросы с этих IP/CIDR будут доверять заголовкам Forwarded и X-Forwarded-Proto при определении HTTPS',
        passkeyNotSupported: 'Текущий браузер или среда не поддерживает passkey; проверьте домен и HTTPS',
        passkeyPrereqTitle: 'Для использования Passkey необходимо выполнить следующие условия',
        passkeyPrereqBindDomain: 'Настроена привязка домена 1Panel',
        passkeyPrereqHttps: 'Безопасный доступ по HTTPS',
        passkeyPrereqBrowser: 'Среда поддерживает Passkey (WebAuthn + платформенный аутентификатор)',
        passkeyPrereqBrowserDetailWebAuthnUnavailable:
            'Используйте системный браузер и убедитесь, что панель открыта по HTTPS с привязанным доменом.',
        passkeyPrereqBrowserDetailPlatformCapabilityUnavailable:
            'В этой среде нельзя использовать аутентификацию устройства. Попробуйте системный браузер на более новой версии ОС.',
        passkeyPrereqBrowserDetailNoPlatformAuthenticator:
            'Включите блокировку экрана / отпечаток / Face ID / Windows Hello и повторите попытку.',
        passkeyPrereqBrowserDetailDetectFailed:
            'Не удалось выполнить проверку. Обновите страницу и попробуйте снова или перейдите в системный браузер.',
        passkeyPrereqGoSetup: 'Настроить',
        passkeyCount: 'Привязано {0}/{1}',
        passkeyName: 'Название',
        passkeyNameHelper: 'Введите название для различения устройств',
        passkeyAdd: 'Добавить passkey',
        passkeyCreatedAt: 'Создано',
        passkeyLastUsedAt: 'Последнее использование',
        passkeyDeleteConfirm: 'После удаления эту passkey нельзя использовать для входа. Продолжить?',
        passkeyLimit: 'Можно привязать до 5 passkey',
        passkeyFailed:
            'Не удалось зарегистрировать passkey, пожалуйста, убедитесь, что сертификат SSL панели является доверенным',
        bindInfo: 'IP-адрес',
        bindAll: 'Прослушивать все',
        bindInfoHelper:
            'Изменение адреса прослушивания службы или протокола может привести к недоступности службы. Хотите продолжить?',
        ipv6: 'Прослушивать IPv6',
        bindAddress: 'IP-адрес прослушивания',
        entrance: 'Точка входа',
        showEntrance: 'Показывать уведомление об отключении на странице "Обзор"',
        entranceHelper:
            'Включение безопасной точки входа позволит входить в панель только через указанную точку входа.',
        entranceError:
            'Пожалуйста, введите безопасную точку входа длиной 5-116 символов, поддерживаются только цифры или буквы.',
        entranceInputHelper: 'Оставьте пустым, чтобы отключить безопасную точку входа.',
        randomGenerate: 'Случайно',
        expirationTime: 'Дата истечения',
        unSetting: 'Не задано',
        noneSetting: 'Установите срок действия пароля панели. После истечения срока необходимо сбросить пароль',
        expirationHelper: 'Если срок действия пароля равен 0 дням, функция истечения срока действия пароля отключена',
        days: 'Дней до истечения пароля',
        expiredHelper: 'Текущий пароль истек. Пожалуйста, измените пароль снова.',
        timeoutHelper:
            'Срок действия пароля панели истечет через {0} дней. После истечения срока необходимо сбросить пароль',
        complexity: 'Проверка сложности',
        complexityHelper:
            'После включения пароль должен быть длиной 8-30 символов и содержать как минимум два типа из следующих: буквы, цифры и специальные символы.',
        bindDomain: 'Привязать домен',
        unBindDomain: 'Отвязать домен',
        panelSSL: 'SSL панели',
        unBindDomainHelper:
            'Действие по отвязке доменного имени может привести к небезопасности системы. Хотите продолжить?',
        bindDomainHelper: 'После привязки домена только этот домен сможет получить доступ к службе 1Panel.',
        bindDomainHelper1: 'Оставьте пустым, чтобы отключить привязку доменного имени.',
        bindDomainWarning:
            'После привязки домена вы будете выходить из системы и сможете получить доступ к службе 1Panel только через указанное в настройках доменное имя. Хотите продолжить?',
        allowIPs: 'Авторизованные IP',
        unAllowIPs: 'Неавторизованные IP',
        unAllowIPsWarning:
            'Авторизация пустого IP позволит всем IP получить доступ к системе, что может привести к небезопасности системы. Хотите продолжить?',
        allowIPsHelper:
            'После установки списка авторизованных IP-адресов только IP-адреса из списка смогут получить доступ к службе панели.',
        allowIPsWarning:
            'После установки списка авторизованных IP-адресов только IP-адреса из списка смогут получить доступ к службе панели. Хотите продолжить?',
        allowIPsHelper1: 'Оставьте пустым, чтобы отключить ограничение IP-адресов.',
        allowIPEgs: 'По одному в строке. Например,\n172.16.10.111\n172.16.10.0/24',
        mfa: '2FA авторизация',
        mfaClose: 'Отключение MFA снизит безопасность службы. Хотите продолжить?',
        secret: 'Секрет',
        mfaInterval: 'Интервал обновления(с)',
        mfaTitleHelper:
            'Заголовок используется для различения разных хостов 1Panel. Отсканируйте снова или вручную добавьте секретный ключ после изменения заголовка.',
        mfaIntervalHelper:
            'После изменения интервала обновления снова отсканируйте QR-код или вручную добавьте секретный ключ.\nНекоторые приложения-аутентификаторы поддерживают только интервал 30 секунд (например, Google/Microsoft Authenticator).',
        mfaAlert:
            'Одноразовый токен - это динамически генерируемое 6-значное число, основанное на текущем времени. Убедитесь, что время сервера синхронизировано.',
        mfaHelper: 'После включения потребуется проверка одноразового токена.',
        mfaHelper1: 'Загрузите приложение-аутентификатор, например,',
        mfaHelper2:
            'Чтобы получить одноразовый токен, отсканируйте следующий QR-код с помощью приложения-аутентификатора или скопируйте секретный ключ в приложение аутентификации.',
        mfaHelper3: 'Введите шесть цифр из приложения',
        mfaCode: 'Одноразовый токен',
        sslChangeHelper: 'Изменить настройку https и перезапустить службу. Хотите продолжить?',
        sslDisable: 'Отключить',
        sslDisableHelper:
            'Если служба https отключена, необходимо перезапустить панель, чтобы изменения вступили в силу. Хотите продолжить?',
        noAuthSetting: 'Unauthorized',
        noAuthSettingHelper:
            'Когда пользователи не входят через указанную точку входа безопасности или не получают доступ к панели с указанного IP или доменного имени, этот ответ может скрыть характеристики панели.',
        responseSetting: 'Настройка ответа',
        help200: 'Страница помощи',
        error400: 'Неверный запрос',
        error401: 'Не авторизован',
        error403: 'Запрещено',
        error404: 'Не найдено',
        error408: 'Тайм-аут запроса',
        error416: 'Диапазон не удовлетворяется',
        error444: 'Соединение закрыто',
        error500: 'Ошибка сервера',
        https: 'Настройка HTTPS для панели повышает безопасность доступа',
        strictHelper: 'Трафик без HTTPS не может подключиться к панели',
        muxHelper:
            'Панель будет прослушивать протоколы HTTP и HTTPS и перенаправлять HTTP на HTTPS, но это может снизить безопасность панели',
        certType: 'Тип сертификата',
        selfSigned: 'Самоподписанный',
        selfSignedHelper:
            'Браузеры могут не доверять самоподписанным сертификатам и отображать предупреждения безопасности.',
        select: 'Выбрать',
        domainOrIP: 'Домен или IP:',
        timeOut: 'Тайм-аут',
        rootCrtDownload: 'Скачать корневой сертификат',
        primaryKey: 'Закрытый ключ',
        certificate: 'Сертификат',
        backupJump:
            'Файлы резервной копии отсутствуют в текущем списке резервных копий, попробуйте скачать из директории файлов и импортировать для резервного копирования.',
        snapshot: 'Снапшот | Снапшоты',
        noAppData: 'Нет доступных системных приложений для выбора',
        noBackupData: 'Нет доступных данных для резервного копирования',
        stepBaseData: 'Основные данные',
        stepAppData: 'Системные приложения',
        stepPanelData: 'Системные данные',
        stepBackupData: 'Резервные данные',
        stepOtherData: 'Другие данные',
        operationLog: 'Сохранять журнал операций',
        loginLog: 'Сохранять журнал доступа',
        systemLog: 'Сохранять системный журнал',
        taskLog: 'Сохранять журнал задач',
        monitorData: 'Сохранять данные мониторинга',
        dockerConf: 'Сохранять Конфигурация Docker',
        selectAllImage: 'Резервное копирование всех образов приложений',
        logLabel: 'Журнал',
        agentLabel: 'Конфигурация узла',
        appDataLabel: 'Данные приложения',
        appImage: 'Образ приложения',
        appBackup: 'Резервная копия приложения',
        backupLabel: 'Каталог резервных копий',
        confLabel: 'Конфигурационные файлы',
        dockerLabel: 'Контейнеры',
        taskLabel: 'Планировщик задач',
        resourceLabel: 'Каталог ресурсов приложения',
        runtimeLabel: 'Среда выполнения',
        appLabel: 'Приложение',
        databaseLabel: 'База данных',
        snapshotLabel: 'Файлы снимков',
        websiteLabel: 'Веб-сайт',
        directoryLabel: 'Каталог',
        appStoreLabel: 'Магазин приложений',
        shellLabel: 'Скрипт',
        tmpLabel: 'Временный каталог',
        sslLabel: 'Каталог сертификатов',
        reCreate: 'Не удалось создать снимок',
        reRollback: 'Не удалось откатить снимок',
        deleteHelper:
            'Все файлы снапшотов, включая те, что находятся в сторонних аккаунтах резервного копирования, будут удалены. Хотите продолжить?',
        status: 'Статус снапшота',
        ignoreRule: 'Правило игнорирования',
        editIgnoreRule: '@:commons.button.edit @.lower:setting.ignoreRule',
        ignoreHelper:
            'Это правило будет использоваться для сжатия и резервного копирования директории данных 1Panel при создании снапшота. По умолчанию игнорируются файлы сокетов.',
        ignoreHelper1: 'По одному в строке. Например,\n*.log\n/opt/1panel/cache',
        panelInfo: 'Записать базовую информацию 1Panel',
        panelBin: 'Резервное копирование системных файлов 1Panel',
        daemonJson: 'Резервное копирование конфигурационного файла Docker',
        appData: 'Резервное копирование установленных приложений из 1Panel',
        panelData: 'Резервное копирование директории данных 1Panel',
        backupData: 'Резервное копирование локальной директории резервных копий для 1Panel',
        compress: 'Создать файл снапшота',
        upload: 'Загрузить файл снапшота',
        recoverDetail: 'Детали восстановления',
        importHelper: 'Директория снапшот: ',
        lastRecoverAt: 'Время последнего восстановления',
        lastRollbackAt: 'Время последнего отката',
        reDownload: 'Скачать файл резервной копии снова',
        recoverErrArch: 'Восстановление снапшотов между разными архитектурами серверов не поддерживается!',
        recoverErrSize:
            'Обнаружено недостаточно места на диске, пожалуйста, проверьте или очистите и попробуйте снова!',
        recoverHelper:
            'Начало восстановления из снапшота {0}, пожалуйста, подтвердите следующую информацию перед продолжением:',
        recoverHelper1: 'Восстановление требует перезапуска служб Docker и 1Panel',
        recoverHelper2:
            'Пожалуйста, убедитесь, что на сервере достаточно места на диске (Размер файла снапшота: {0}, Доступное место: {1})',
        recoverHelper3:
            'Пожалуйста, убедитесь, что архитектура сервера соответствует архитектуре сервера, где был создан снапшот (Текущая архитектура сервера: {0})',
        recoverHelper4:
            'Это действие откатывает только основной узел. Если есть обновлённые дочерние узлы, сначала откатите их, прежде чем продолжать.',
        rollback: 'Откатить',
        rollbackHelper:
            'Откат этого восстановления заменит все файлы из этого восстановления и может потребовать перезапуска служб Docker и 1Panel. Хотите продолжить?',
        upgradeHelper: 'Обновление требует перезапуска службы 1Panel. Хотите продолжить?',
        rollbackLocalHelper:
            'Основной узел не поддерживает прямой откат. Пожалуйста, вручную выполните команду [1pctl restore] для отката!',
        noUpgrade: 'В настоящее время это последняя версия',
        upgradeNotes: 'Примечания к выпуску',
        upgradeNow: 'Обновить сейчас',
        source: 'Источник загрузки',
        versionNotSame:
            'Версия узла не совпадает с основной. Пожалуйста, обновите в Управлении узлами перед повторной попыткой.',
        versionCompare:
            'Обнаружено, что узел {0} уже имеет последнюю обновляемую версию. Пожалуйста, проверьте версию основного узла и повторите попытку!',
        about: 'О программе',
        versionItem: 'Текущая Версия',
        backupCopies: 'Копии Бэкапа',
        backupCopiesHelper:
            'Установите количество копий резервных копий обновления для сохранения для отката версии. 0 означает сохранить все.',
        backupCopiesRule: 'Пожалуйста, сохраните как минимум 3 записи резервных копий обновления',
        release: 'Журнал обновлений версий',
        releaseHelper:
            'Не удалось получить журнал обновлений для текущей среды. Вы можете вручную проверить официальную документацию.',
        project: 'GitHub',
        issue: 'Проблема',
        doc: 'Официальная документация',
        star: 'Звезда',
        description: 'Панель управления Linux сервером',
        forum: 'Обсуждения',
        doc2: 'Документация',
        currentVersion: 'Версия',
        license: 'Лицензия',
        bindNode: 'Привязать Узел',
        menuSetting: 'Настройки меню',
        menuHide: 'Скрытие меню',
        menuSettingHelper: 'Если существует только 1 подменю, в панели меню будет отображаться только это подменю',
        showAll: 'Показать все',
        hideALL: 'Скрыть все',
        ifShow: 'Показывать',
        menu: 'Меню',
        confirmMessage: 'Страница будет обновлена для обновления списка расширенного меню. Продолжить?',
        recoverMessage:
            'Страница будет обновлена, и список меню будет восстановлен до исходного состояния. Продолжить?',
        compressPassword: 'Пароль сжатия',
        backupRecoverMessage:
            'Пожалуйста, введите пароль для сжатия или распаковки (оставьте пустым, чтобы не устанавливать)',
        componentSize: 'Размер компонента',
        scope: 'Область',
        public: 'Публичный',
        publicHelper:
            'Публичные аккаунты резервного копирования синхронизируются на все подузлы и могут использоваться совместно',
        private: 'Приватный',
        privateHelper:
            'Приватные аккаунты резервного копирования создаются только на текущем узле и используются только им',
        UPYUN: 'UPYUN',
        ALIYUN: 'Aliyun Drive',
        ALIYUNHelper:
            'Текущий лимит скачивания Aliyun Drive без клиента — 100MB. Больше можно скачать только через клиент.',
        ALIYUNRecover:
            'Текущий лимит скачивания Aliyun Drive без клиента — 100MB. При превышении скачайте через клиент локально, затем синхронизируйте снимок для восстановления.',
        GoogleDrive: 'Google Drive',
        analysis: 'Анализ',
        analysisHelper:
            'Вставьте весь токен, нужные поля будут разобраны автоматически. Подробности смотрите в официальной документации.',
        serviceName: 'Имя сервиса',
        operator: 'Оператор',
        clickToRefresh: 'Нажмите для обновления',
        recoverFailed: 'Не удалось восстановить снимок',
        upgradeRecord: 'История обновлений',
        upgrading: 'Идет обновление, пожалуйста, подождите...',
        versionHelper: 'Правило именования: [мажор].[функции].[исправления], пример ниже:',
        upgradeCheck: 'Проверить обновления',
    },
    license: {
        offLine: 'Офлайн версия',
        community: 'OSS',
        oss: 'Open Source Software',
        ee: 'Enterprise Edition',
        pro: 'Pro',
        trial: 'Пробная версия',
        add: 'Добавить Community Edition',
        licenseBindHelper: 'Бесплатные квоты узлов можно использовать только тогда, когда лицензия привязана к узлу',
        licenseAlert:
            'Узлы Community Edition можно добавлять только при правильной привязке лицензии к узлу. Переключение поддерживается только для узлов, правильно привязанных к лицензии.',
        licenseUnbindHelper:
            'Обнаружены узлы Community Edition для этой лицензии. Отвяжите лицензию и повторите попытку!',
        subscription: 'Подписка',
        perpetual: 'Пожизненная лицензия',
        product: 'Продукт',
        versionConstraint: '{0} Выкуп версии',
        forceUnbind: 'Принудительное отвязывание',
        forceUnbindHelper:
            'Принудительное отвязывание будет игнорировать любые ошибки, возникающие в процессе отвязывания, и в конечном итоге освободит привязку лицензии.',
        updateForce:
            'Принудительное обновление (игнорировать все ошибки при отвязке для гарантии успешного завершения операции)',
        trialInfo: 'Версия',
        authorizationId: 'ID подписки',
        authorizedUser: 'Авторизованный пользователь',
        lostHelper:
            'Лицензия достигла максимального количества попыток повторной проверки. Пожалуйста, вручную нажмите кнопку синхронизации, чтобы убедиться, что функции коммерческой версии работают правильно. Детали: ',
        quickUpdate: 'Быстрое обновление',
        import: 'Импортировать',
        power: 'Авторизовать',
        unbindHelper: 'Все настройки коммерческой версии будут очищены после отвязки. Хотите продолжить?',
        importLicense: 'Лицензия',
        securityWarningTitle: 'Не используйте взломанные лицензии или лицензии из неизвестных источников.',
        securityWarningContent:
            '1Panel должен запускаться пользователем с правами системного администратора. Неофициальные лицензии или измененные сборки могут привести к потере контроля над сервером, утечке данных и другим серьезным рискам безопасности. Получайте лицензии и установочные пакеты только через официальные каналы FIT2CLOUD.',
        importHelper: 'Пожалуйста, нажмите или перетащите файл лицензии сюда',
        licenseRequiredTip:
            'Лицензия ещё не импортирована. Скопируйте ID устройства, получите лицензию и импортируйте её, прежде чем входить в систему.',
        licenseRequiredShortTip:
            'Сначала скопируйте ID устройства, чтобы получить лицензию. После импорта лицензии вы сможете войти.',
        licenseRequiredUserTip:
            'Лицензия Enterprise Edition не привязана. Обратитесь к суперадминистратору для импорта лицензии.',
        restoreCommunity: 'Восстановить Community Edition',
        restoreCommunityOnline: 'Онлайн-восстановление',
        restoreCommunityOffline: 'Офлайн-восстановление',
        restoreCommunityPackageFound:
            'Обнаружен подходящий офлайн-пакет Community Edition. Офлайн-восстановление доступно.',
        restoreCommunityPackageMissing:
            'Подходящий офлайн-пакет Community Edition не обнаружен. Офлайн-восстановление сейчас недоступно.',
        restoreCommunityOnlineHelper:
            'Пакет Community Edition текущей версии будет загружен автоматически, а данные, предназначенные только для Enterprise, будут очищены.',
        restoreCommunityOfflineHelper:
            'Поместите официальный пакет версии не ниже текущей Enterprise в {path}. Переключение станет доступно после обнаружения подходящего пакета.',
        restoreCommunityConfirm:
            'После смены версии можно войти в Community Edition с текущей учётной записью суперадминистратора Enterprise. Во время переключения данные, доступные только в Enterprise, будут удалены. Будьте осторожны.',
        restoreCommunityStarting:
            'Подготавливается Community Edition. После завершения панель автоматически перезапустится.',
        technicalAdvice: 'Техническая консультация',
        advice: 'Консультация',
        levelUpPro: 'Обновить до коммерческой версии',
        licenseSync: 'Синхронизация лицензии',
        knowMorePro: 'Узнать больше',
        closeAlert: 'Текущую страницу можно закрыть в настройках панели',
        introduce: 'Описание функций',
        deviceID: 'ID устройства',
        corporation: 'Лицензионная компания',
        expired: 'Время истечения',
        edition: 'Редакция',
        standard: 'Стандарт',
        enterprise: 'Enterprise',
        count: 'Количество лицензий',
        serialNo: 'Серийный номер',
        remark: 'Примечание',
        waf: 'Обновление до коммерческой версии предоставляет такие функции, как карта перехватов, логи, записи блокировок, блокировка по географическому положению, пользовательские правила, пользовательские страницы перехвата и т.д.',
        tamper: 'Обновление до коммерческой версии может защитить веб-сайты от несанкционированных изменений или подделок.',
        setting:
            'Обновление до коммерческой версии позволяет настраивать логотип панели, приветственное сообщение и другую информацию.',
        monitor:
            'Обновление до коммерческой версии позволяет просматривать статус веб-сайта в реальном времени, тенденции посещений, источники посетителей, логи запросов и другую информацию.',
        alert: 'Обновление до коммерческой версии позволяет получать информацию о тревогах через SMS и просматривать логи тревог, полностью контролировать различные ключевые события и обеспечивать беспроблемную работу системы',
        node: 'Обновление до коммерческой редакции позволяет управлять несколькими серверами Linux с помощью 1Panel.',
        nodeApp:
            'Обновление до коммерческой редакции позволяет унифицированно обновлять версии приложений на нескольких узлах без необходимости ручного переключения узлов.',
        nodeDashboard:
            'Обновление до коммерческой редакции позволяет централизованно управлять приложениями, веб-сайтами, базами данных и запланированными задачами на нескольких узлах.',
        fileExchange: 'Обновите до Коммерческой версии, чтобы быстро передавать файлы между несколькими серверами.',
        app: 'Обновите до коммерческой версии, чтобы просматривать информацию о сервисах, мониторинг аномалий и т.д. через мобильное приложение.',
        cluster: 'Обновление до коммерческой версии позволяет управлять кластерами мастер-слейв MySQL/Postgres/Redis.',
        vllm: 'Обновите до коммерческой версии, чтобы централизованно управлять сервисами vLLM в 1Panel: развертыванием, настройкой, жизненным циклом и отслеживанием задач.',
        'model-downloader':
            'Обновите до коммерческой версии, чтобы искать, загружать и управлять локальными файлами моделей из HuggingFace, ModelScope или совместимых зеркал, централизованно управляя каталогами моделей и задачами загрузки.',
        exceptionalHelper:
            'Проверка синхронизации лицензии выполнена с ошибкой. Нажмите синхронизацию вручную для корректной работы коммерческой версии. Детали: ',
        tamperHelper: 'Операция не выполнена: для файла или папки включена защита от изменений. Проверьте и повторите!',
    },
    clean: {
        scan: 'Начать сканирование',
        scanHelper: 'Легко очищайте мусорные файлы, созданные во время работы 1Panel',
        clean: 'Очистить сейчас',
        reScan: 'Пересканировать',
        cleanHelper: 'Выбранные файлы и каталоги нельзя откатить после очистки. Продолжить?',
        statusSuggest: '(Рекомендуется очистка)',
        statusClean: '(Очень чисто)',
        statusEmpty: 'Очень чисто, очистка не требуется!',
        statusWarning: '(Действуйте с осторожностью)',
        lastCleanTime: 'Последняя очистка: {0}',
        lastCleanHelper: 'Очищено файлов и директорий: {0}, всего очищено: {1}',
        cleanSuccessful: 'Успешно очищено',
        currentCleanHelper: 'Очищено файлов и директорий в этой сессии: {0}, Всего очищено: {1}',
        suggest: '(Рекомендуется)',
        totalScan: 'Всего мусорных файлов для очистки: ',
        selectScan: 'Всего выбранных мусорных файлов: ',
        system: 'Системные мусорные файлы',
        systemHelper: 'Временные файлы, созданные во время снимков, обновлений и других процессов',
        panelOriginal: 'Файлы резервных копий перед восстановлением снимка системы',
        upgrade: 'Файлы резервных копий обновления системы',
        agentPackages: 'Пакеты обновления/установки дочерних узлов исторических версий',
        upgradeHelper: '(Рекомендуется сохранять последнюю резервную копию обновления для отката системы)',
        rollback: 'Файлы резервных копий перед восстановлением',
        backup: 'Резервная Копия Системы',
        backupHelper: 'Файлы резервных копий, не связанные с локальными учетными записями резервного копирования',
        unknownBackup: 'Резервная Копия Системы',
        tmpBackup: 'Временная Резервная Копия',
        unknownApp: 'Несвязанная Резервная Копия Приложения',
        unknownDatabase: 'Несвязанная Резервная Копия Базы Данных',
        unknownWebsite: 'Несвязанная Резервная Копия Веб-сайта',
        unknownSnapshot: 'Несвязанная Резервная Копия Снимка',
        upload: 'Временные файлы загрузки',
        uploadHelper: 'Временные файлы, загруженные из списка системных резервных копий',
        download: 'Временные файлы скачивания',
        downloadHelper: 'Временные файлы, скачанные из сторонних аккаунтов резервного копирования системой',
        directory: 'Директория',
        systemLog: 'Файл журнала',
        systemLogHelper: 'Системные журналы, журналы задач, файлы журналов веб-сайта',
        dockerLog: 'Файлы журналов операций с контейнерами',
        taskLog: 'Файлы журналов выполнения запланированных задач',
        shell: 'Запланированные задачи скриптов оболочки',
        containerShell: 'Запланированные задачи скриптов оболочки, выполняемые внутри контейнеров',
        curl: 'Запланированные задачи CURL',
        docker: 'Мусор контейнеров',
        dockerHelper: 'Файлы, такие как контейнеры, образы, тома, кэш сборки и т.д.',
        volumes: 'Тома',
        buildCache: 'Кэш сборки контейнеров',
        appTmpDownload: 'Временный файл загрузки приложения',
        unknownWebsiteLog: 'Несвязанный файл резервной копии журнала сайта',
        snapshot: 'Временные файлы системного снимка',
    },
    app: {
        app: 'Приложение | Приложения',
        installName: 'Имя',
        installed: 'Установленные',
        all: 'Все',
        version: 'Версия',
        detail: 'Детали',
        params: 'Редактировать',
        author: 'Автор',
        source: 'Источник',
        appName: 'Название приложения',
        deleteWarn:
            'Операция удаления удалит все данные и резервные копии. Эту операцию нельзя отменить. Хотите продолжить?',
        syncSuccess: 'Синхронизация выполнена успешно',
        canUpgrade: 'Обновления',
        backupName: 'Имя файла',
        backupPath: 'Путь к файлу',
        backupdate: 'Время резервного копирования',
        versionSelect: 'Пожалуйста, выберите версию',
        operatorHelper: 'Операция {0} будет выполнена для выбранного приложения. Хотите продолжить?',
        startOperatorHelper: 'Приложение будет запущено. Хотите продолжить?',
        stopOperatorHelper: 'Приложение будет остановлено. Хотите продолжить?',
        restartOperatorHelper: 'Приложение будет перезапущено. Хотите продолжить?',
        reloadOperatorHelper: 'Приложение будет перезагружено. Хотите продолжить?',
        checkInstalledWarn: '"{0}" не обнаружено. Перейдите в "Магазин приложений" для установки.',
        limitHelper: 'Приложение уже установлено.',
        deleteHelper: '"{0}" связано со следующими ресурсами. Пожалуйста, проверьте и попробуйте снова!',
        checkTitle: 'Подсказка',
        defaultConfig: 'Конфигурация по умолчанию',
        defaultConfigHelper: 'Восстановлено до конфигурации по умолчанию, вступит в силу после сохранения',
        forceDelete: 'Принудительное удаление',
        forceDeleteHelper:
            'Принудительное удаление будет игнорировать ошибки во время процесса удаления и в итоге удалит метаданные.',
        deleteBackup: 'Удалить резервную копию',
        deleteBackupHelper: 'Также удалить резервную копию приложения',
        deleteDB: 'Удалить базу данных',
        deleteDBHelper: 'Также удалить базу данных',
        noService: 'Нет {0}',
        toInstall: 'Перейти к установке',
        param: 'Параметры',
        alreadyRun: 'Установлено',
        syncAppList: 'Синхронизировать',
        less1Minute: 'Меньше 1 минуты',
        appOfficeWebsite: 'Официальный сайт',
        github: 'GitHub',
        document: 'Документация',
        updatePrompt: 'Нет доступных обновлений',
        installPrompt: 'Пока нет установленных приложений',
        updateHelper:
            'Редактирование параметров может привести к сбою запуска приложения. Пожалуйста, действуйте с осторожностью.',
        updateWarn: 'Обновление параметров требует пересборки приложения. Хотите продолжить?',
        busPort: 'Порт',
        syncStart: 'Начало синхронизации! Пожалуйста, обновите магазин приложений позже',
        advanced: 'Расширенные настройки',
        cpuCore: 'ядро(а)',
        containerName: 'Имя контейнера',
        containerNameHelper: 'Имя контейнера будет автоматически сгенерировано, если не задано',
        allowPort: 'Внешний доступ',
        allowPortHelper: 'Разрешение внешнего доступа к порту откроет порт в брандмауэре',
        appInstallWarn:
            'Приложение по умолчанию не открывает порт для внешнего доступа. Нажмите "Расширенные настройки" для открытия.',
        upgradeStart: 'Начало обновления! Пожалуйста, обновите страницу позже',
        toFolder: 'Открыть директорию установки',
        editCompose: 'Редактировать файл compose',
        editComposeHelper: 'Редактирование файла compose может привести к сбою установки программного обеспечения',
        composeNullErr: 'compose не может быть пустым',
        takeDown: 'Устарело',
        allReadyInstalled: 'Установлено',
        installHelper: 'Если есть проблемы с загрузкой образа, настройте ускорение образов.',
        sortMode: 'Сортировка',
        installWarn:
            'Внешний доступ не включен, что делает приложение недоступным через внешние сети. Хотите продолжить?',
        showIgnore: 'Просмотреть игнорируемые приложения',
        cancelIgnore: 'Отменить игнорирование',
        ignoreList: 'Игнорируемые приложения',
        appHelper: 'Перейдите на страницу приложения, чтобы узнать инструкции и подробности данного приложения.',
        backupApp: 'Создать резервную копию приложения перед обновлением',
        backupAppHelper:
            'Если обновление не удастся, резервная копия будет автоматически восстановлена. Пожалуйста, проверьте причину сбоя в логе аудита-системном логе. Резервная копия по умолчанию сохранит последние 3 копии',
        openrestyDeleteHelper: 'Принудительное удаление OpenResty удалит все веб-сайты. Хотите продолжить?',
        downloadLogHelper1: 'Будут загружены все логи приложения {0}. Хотите продолжить?',
        downloadLogHelper2: 'Будут загружены последние {1} логов приложения {0}. Хотите продолжить?',
        syncAllAppHelper: 'Все приложения будут синхронизированы. Хотите продолжить?',
        hostModeHelper:
            'Текущий режим сети приложения - режим хоста. Если нужно открыть порт, пожалуйста, откройте его вручную на странице брандмауэра.',
        showLocal: 'Показать локальные приложения',
        reload: 'Перезагрузить',
        upgradeWarn:
            'Обновление приложения заменит файл docker-compose.yml. Если есть изменения, вы можете нажать для просмотра сравнения файлов',
        openclawHttpsUpgradeNoticeTitle:
            'Примечание: Следующие инструкции применяются только при обновлении OpenClaw с версий 2026.3.13–2026.3.22 до версии 2026.3.23 или новее:',
        openclawHttpsUpgradeNoticeItem1:
            'После обновления доступ агента снова переключится на HTTP. Перейдите в Конфигурация -> Настройки -> Безопасность и проверьте адрес доступа.',
        openclawHttpsUpgradeNoticeItem2:
            'Если ранее вы использовали сайт с обратным прокси, измените целевой адрес прокси на http://IP:Port.',
        newVersion: 'Новая версия',
        oldVersion: 'Текущая версия',
        composeDiff: 'Сравнение файлов',
        showDiff: 'Просмотреть сравнение',
        useNew: 'Использовать пользовательскую версию',
        useDefault: 'Использовать версию по умолчанию',
        useCustom: 'Настроить docker-compose.yml',
        useCustomHelper:
            'Использование пользовательского файла docker-compose.yml может привести к сбою обновления приложения. Если это не необходимо, не отмечайте это.',
        diffHelper:
            'Слева старая версия, справа новая версия. После редактирования нажмите для сохранения пользовательской версии',
        pullImage: 'Загрузить образ',
        pullImageHelper: 'Выполнить docker pull для загрузки образа перед запуском приложения',
        deleteImage: 'Удалить изображение',
        deleteImageHelper:
            'Удалите изображение, связанное с приложением. Задача не завершится, если удаление не удастся.',
        requireMemory: 'Требуемая память',
        supportedArchitectures: 'Поддерживаемые архитектуры',
        link: 'Ссылка',
        showCurrentArch: 'Приложения для текущей архитектуры сервера',
        syncLocalApp: 'Синхронизировать локальное приложение',
        memoryRequiredHelper: 'Текущее приложение требует {0} памяти',
        gpuConfig: 'Включить поддержку GPU',
        gpuConfigHelper:
            'Убедитесь, что на машине установлен NVIDIA GPU и драйверы NVIDIA, а также NVIDIA Docker Container Toolkit',
        webUI: 'Веб-адрес доступа',
        webUIPlaceholder: 'Например: example.com:8080/login',
        defaultWebDomain: 'Адрес доступа по умолчанию',
        defaultWebDomainHepler: 'Если порт приложения 8080, то адрес будет http(s)://адрес по умолчанию:8080',
        webUIConfig:
            'Текущий узел не имеет настроенного адреса доступа по умолчанию. Пожалуйста, настройте его в параметрах приложения или перейдите в настройки панели!',
        toLink: 'Перейти',
        customAppHelper:
            'Перед установкой пользовательского пакета из магазина приложений убедитесь, что нет установленных приложений.',
        forceUninstall: 'Принудительное удаление',
        syncCustomApp: 'Синхронизировать пользовательское приложение',
        ignoreAll: 'Игнорировать все последующие версии',
        ignoreVersion: 'Игнорировать указанную версию',
        specifyIP: 'Привязать IP хоста',
        specifyIPHelper:
            'Установите адрес хоста/сетевого интерфейса для привязки порта (если вы не уверены в этом, пожалуйста, не заполняйте)',
        uninstallDeleteBackup: 'Деинсталляция приложения - Удаление резервной копии',
        uninstallDeleteImage: 'Деинсталляция приложения - Удаление образа',
        upgradeBackup: 'Резервное копирование приложения перед обновлением',
        upgradeDeleteImage: 'Обновление приложения - Удалить старый образ',
        installAllowPort: 'По умолчанию открывать внешний доступ к порту при установке приложения',
        noAppHelper:
            'Приложения не обнаружены, пожалуйста, перейдите в центр задач для просмотра журнала синхронизации магазина приложений',
        isEdirWarn: 'Обнаружены изменения в файле docker-compose.yml. Проверьте различия.',
    },
    website: {
        primaryDomain: 'Основной домен',
        otherDomains: 'Другие домены',
        static: 'Статический',
        deployment: 'Развертывание',
        supportUpType: 'Поддерживается только формат файла .tar.gz, и сжатый пакет должен содержать файл {0}.json',
        proxy: 'Обратный прокси',
        alias: 'Псевдоним',
        ftpUser: 'FTP аккаунт',
        ftpPassword: 'FTP пароль',
        ftpHelper:
            'После создания веб-сайта будет создан соответствующий FTP-аккаунт, и FTP-директория будет связана с директорией веб-сайта.',
        remark: 'Примечание',
        groupSetting: 'Управление группами',
        createGroup: 'Создать группу',
        appNew: 'Новое приложение',
        appInstalled: 'Установленное приложение',
        delete: 'Удалить веб-сайт',
        deleteApp: 'Удалить приложение',
        deleteBackup: 'Удалить резервную копию',
        domain: 'Домен',
        domainHelper: 'Один домен в строке.\nПоддерживает wildcard "*" и IP-адреса.\nПоддерживает добавление порта.',
        addDomain: 'Добавить',
        domainConfig: 'Домены',
        defaultDoc: 'Документ по умолчанию',
        perserver: 'Параллельные подключения',
        perserverHelper: 'Ограничить максимальное количество параллельных подключений для текущего сайта',
        perip: 'Один IP',
        peripHelper: 'Ограничить максимальное количество параллельных подключений с одного IP',
        rate: 'Ограничения трафика',
        rateLimit: 'Ограничение скорости на запрос',
        rateHelper: 'Ограничить поток каждого запроса (единица: КБ)',
        rateLimitHelper: 'Ограничивает скорость передачи для каждого запроса (единица: КБ/с)',
        limitHelper: 'Включить контроль потока',
        other: 'Другое',
        currentSSL: 'Текущий сертификат',
        dnsAccount: 'DNS аккаунт',
        applySSL: 'Заявка на сертификат',
        SSLList: 'Список сертификатов',
        createDnsAccount: 'DNS аккаунт',
        aliyun: 'Aliyun',
        aliEsa: 'Aliyun ESA',
        awsRoute53: 'Amazon Route 53',
        manual: 'Ручная настройка',
        key: 'Ключ',
        check: 'Просмотр',
        acmeAccountManage: 'ACME аккаунты',
        email: 'Email',
        acmeAccount: 'ACME аккаунт',
        provider: 'Метод проверки',
        dnsManual: 'Ручное разрешение',
        expireDate: 'Дата истечения',
        brand: 'Организация',
        deploySSL: 'Развертывание',
        deploySSLHelper: 'Вы уверены, что хотите развернуть сертификат?',
        ssl: 'Сертификат | Сертификаты',
        dnsAccountManage: 'DNS провайдеры',
        renewSSL: 'Обновить',
        renewHelper: 'Вы уверены, что хотите обновить сертификат?',
        renewSuccess: 'Обновить сертификат',
        enableHTTPS: 'Включить',
        aliasHelper: 'Псевдоним - это имя директории веб-сайта',
        lastBackupAt: 'время последнего резервного копирования',
        null: 'нет',
        nginxConfig: 'Конфигурация Nginx',
        websiteConfig: 'Настройки веб-сайта',
        proxySettings: 'Proxy Ayarları',
        advancedSettings: 'Gelişmiş Ayarlar',
        cacheSettings: 'Önbellek Ayarları',
        sniSettings: 'SNI Ayarları',
        basic: 'Основные',
        source: 'Конфигурация',
        security: 'Безопасность',
        nginxPer: 'Настройка производительности',
        neverExpire: 'Никогда',
        setDefault: 'Установить по умолчанию',
        deleteHelper: 'Статус связанного приложения аномальный, пожалуйста, проверьте',
        toApp: 'Перейти к списку установленных',
        cycle: 'Цикл',
        frequency: 'Частота',
        ccHelper:
            'При накоплении более {1} запросов к одному URL в течение {0} секунд срабатывает защита CC и блокируется этот IP',
        mustSave: 'Изменения нужно сохранить, чтобы они вступили в силу',
        fileExt: 'расширение файла',
        fileExtBlock: 'черный список расширений файлов',
        value: 'значение',
        enable: 'Включить',
        proxyAddress: 'Адрес прокси',
        proxyHelper: 'Пример: 127.0.0.1:8080',
        forceDelete: 'Принудительное удаление',
        forceDeleteHelper:
            'Принудительное удаление будет игнорировать ошибки во время процесса удаления и в итоге удалит метаданные.',
        deleteAppHelper: 'Удалить связанные приложения и резервные копии приложений одновременно',
        deleteBackupHelper: 'Также удалить резервные копии веб-сайта.',
        deleteDatabaseHelper: 'Также удалить базу данных, связанную с веб-сайтом',
        deleteConfirmHelper:
            'Операцию удаления нельзя отменить. Введите <span style="color:red"> "{0}" </span> для подтверждения удаления.',
        staticPath: 'Соответствующая основная директория: ',
        limit: 'Схема',
        blog: 'Форум/Блог',
        imageSite: 'Сайт изображений',
        downloadSite: 'Сайт загрузок',
        shopSite: 'Магазин',
        doorSite: 'Портал',
        qiteSite: 'Корпоративный',
        videoSite: 'Видео',
        errLog: 'Лог ошибок',
        stopHelper:
            'После остановки сайта он не будет доступен для нормального доступа, и пользователи будут видеть страницу остановки при посещении. Хотите продолжить?',
        startHelper:
            'После включения сайта пользователи смогут нормально получить доступ к содержимому сайта, хотите продолжить?',
        sitePath: 'Директория',
        siteAlias: 'Псевдоним сайта',
        primaryPath: 'Корневая директория',
        folderTitle: 'Веб-сайт в основном содержит следующие папки',
        wafFolder: 'Правила межсетевого экрана',
        indexFolder: 'Корневая директория веб-сайта',
        sslFolder: 'Сертификат веб-сайта',
        enableOrNot: 'Включить',
        oldSSL: 'Существующий сертификат',
        manualSSL: 'Импорт сертификата',
        select: 'Выбрать',
        selectSSL: 'Выбрать сертификат',
        privateKey: 'Ключ (KEY)',
        certificate: 'Сертификат (формат PEM)',
        HTTPConfig: 'Опции HTTP',
        HTTPSOnly: 'Блокировать HTTP запросы',
        HTTPToHTTPS: 'Перенаправлять на HTTPS',
        HTTPAlso: 'Разрешить прямые HTTP запросы',
        sslConfig: 'Опции SSL',
        disableHTTPS: 'Отключить HTTPS',
        disableHTTPSHelper: 'Отключение HTTPS удалит конфигурацию, связанную с сертификатом. Хотите продолжить?',
        SSLHelper:
            'Примечание: Не используйте SSL-сертификаты для нелегальных веб-сайтов.\nЕсли после открытия невозможно использовать доступ по HTTPS, проверьте, правильно ли открыт порт 443 в группе безопасности.',
        SSLConfig: 'Настройки сертификата',
        SSLProConfig: 'Настройки протокола',
        supportProtocol: 'Версия протокола',
        encryptionAlgorithm: 'Алгоритм шифрования',
        notSecurity: '(небезопасно)',
        encryptHelper:
            "Let's Encrypt имеет ограничение частоты выдачи сертификатов, но его достаточно для нормальных потребностей. Слишком частые операции приведут к сбою выдачи. Конкретные ограничения см. в <a target='_blank' href='https://letsencrypt.org/zh-cn/docs/rate-limits/'>официальной документации</a>",
        ipValue: 'Значение',
        ext: 'расширение файла',
        wafInputHelper: 'Вводите данные по строкам, одна строка',
        data: 'данные',
        ever: 'постоянно',
        nextYear: 'Через год',
        noLog: 'Логи не найдены',
        defaultServer: 'Сайт по умолчанию',
        noDefaultServer: 'Не установлен',
        defaultServerHelper:
            'После установки сайта по умолчанию все несвязанные доменные имена и IP-адреса будут перенаправлены на сайт по умолчанию\nЭто может эффективно предотвратить вредоносное разрешение\nОднако это также может привести к сбою блокировки неавторизованных доменных имен WAF',
        restoreHelper: 'Вы уверены, что хотите восстановить из этой резервной копии?',
        websiteDeploymentHelper:
            'Используйте установленное приложение или создайте новое приложение для создания веб-сайта.',
        websiteStatictHelper: 'Создать директорию веб-сайта на хосте.',
        websiteProxyHelper:
            'Использовать обратный прокси для проксирования существующей службы. Например, если служба установлена и работает на порту 8080, адрес прокси будет "http://127.0.0.1:8080".',
        runtimeProxyHelper: 'Использовать среду выполнения веб-сайта для создания веб-сайта.',
        runtime: 'Среда выполнения',
        deleteRuntimeHelper:
            'Приложение среды выполнения необходимо удалять вместе с веб-сайтом, пожалуйста, обращайтесь с этим осторожно',
        proxyType: 'Тип сети',
        unix: 'Unix сеть',
        tcp: 'TCP/IP сеть',
        phpFPM: 'Конфигурация FPM',
        phpConfig: 'Конфигурация PHP',
        updateConfig: 'Обновить конфигурацию',
        isOn: 'Вкл',
        isOff: 'Выкл',
        rewrite: 'Псевдостатика',
        rewriteMode: 'Схема',
        current: 'Текущий',
        rewriteHelper:
            'Если установка псевдостатики делает веб-сайт недоступным, попробуйте вернуться к настройкам по умолчанию.',
        runDir: 'Рабочая директория',
        runUserHelper:
            'Для веб-сайтов, развернутых через среду выполнения контейнера PHP, необходимо установить владельца и группу пользователей всех файлов и папок в index и поддиректориях на 1000. Для локальной среды PHP обратитесь к локальным настройкам пользователя и группы PHP-FPM',
        userGroup: 'Пользователь/Группа',
        uGroup: 'Группа',
        proxyPath: 'Путь прокси',
        proxyPass: 'Целевой URL',
        cache: 'Кэш',
        cacheTime: 'Длительность кэширования',
        enableCache: 'Кэш',
        proxyHost: 'Прокси хост',
        disabled: 'Остановлен',
        startProxy: 'Это запустит обратный прокси. Хотите продолжить?',
        stopProxy: 'Это остановит обратный прокси. Хотите продолжить?',
        sourceFile: 'Источник',
        proxyHelper1: 'При доступе к этой директории будет возвращено и отображено содержимое целевого URL.',
        proxyPassHelper: 'Целевой URL должен быть действительным и доступным.',
        proxyHostHelper: 'Передать доменное имя в заголовке запроса прокси-серверу.',
        modifier: 'Правила сопоставления',
        modifierHelper: 'Пример: "=" точное совпадение, "~" регулярное совпадение, "^~" совпадение начала пути и т.д.',
        replace: 'Замены текста',
        replaceHelper:
            'Функция замены текста в nginx позволяет заменять строки в содержимом ответа при обратном проксировании. Она обычно используется для изменения ссылок, адресов API и т.д. в файлах HTML, CSS, JavaScript и других, возвращаемых бэкендом. Поддерживает сопоставление с регулярными выражениями для сложных потребностей в замене содержимого.',
        addReplace: 'Добавить',
        replaced: 'Искомая строка (не может быть пустой)',
        replaceText: 'Заменить на строку',
        replacedErr: 'Искомая строка не может быть пустой',
        replacedErr2: 'Искомая строка не может повторяться',
        replacedListEmpty: 'Нет правил замены текста',
        proxySslName: 'Имя прокси SNI',
        basicAuth: 'Базовая аутентификация',
        editBasicAuthHelper:
            'Пароль асимметрично зашифрован и не может быть показан. При редактировании нужно сбросить пароль',
        antiLeech: 'Анти-лич',
        extends: 'Расширение',
        browserCache: 'Кэш',
        noModify: 'Не изменять',
        serverCache: 'Кэш сервера',
        leechLog: 'Записывать лог анти-лича',
        accessDomain: 'Разрешенные домены',
        leechReturn: 'Ответ ресурса',
        noneRef: 'Разрешить пустой referrer',
        disable: 'не включено',
        disableLeechHelper: 'Отключить ли анти-лич',
        disableLeech: 'Отключить анти-лич',
        ipv6: 'Прослушивать IPv6',
        leechReturnError: 'Пожалуйста, заполните HTTP код статуса',
        blockedRef: 'Разрешить нестандартный Referer',
        accessControl: 'Управление анти-личем',
        leechcacheControl: 'Управление кэшем',
        logEnableControl: 'Логировать запросы статических ресурсов',
        leechSpecialValidHelper:
            'При включённой опции «Разрешить пустой referrer» запросы без Referer (прямой доступ и т. п.) не блокируются; включение «Разрешить нестандартный Referer» пропускает любой Referer, не начинающийся с http/https (клиентские запросы и т. п.).',
        leechInvalidReturnHelper: 'HTTP‑код статуса, возвращаемый после блокировки хотлинкинга',
        leechlogControlHelper:
            'Записывает запросы к статическим ресурсам; в продакшене обычно отключают, чтобы избежать избыточных и шумных логов',
        selectAcme: 'Выберите Acme аккаунт',
        imported: 'Создан вручную',
        importType: 'Тип импорта',
        pasteSSL: 'Вставить код',
        localSSL: 'Выбрать файл сервера',
        privateKeyPath: 'Файл приватного ключа',
        certificatePath: 'Файл сертификата',
        ipWhiteListHelper: 'Роль белого списка IP: все правила недействительны для белого списка IP',
        redirect: 'Перенаправление',
        sourceDomain: 'Исходный домен',
        targetURL: 'Целевой URL адрес',
        keepPath: 'URI параметры',
        path: 'путь',
        redirectType: 'тип перенаправления',
        redirectWay: 'Способ',
        keep: 'сохранить',
        notKeep: 'Не сохранять',
        redirectRoot: 'Перенаправить на главную страницу',
        redirectHelper: '301 постоянное перенаправление, 302 временное перенаправление',
        changePHPVersionWarn:
            'Переключение версии PHP удалит оригинальный контейнер PHP (смонтированный код веб-сайта не будет потерян), продолжить?',
        changeVersion: 'Переключить версию',
        retainConfig: 'Сохранить ли файлы php-fpm.conf и php.ini',
        runDirHelper2: 'Пожалуйста, убедитесь, что вторичная рабочая директория находится в директории index',
        openrestyHelper:
            'OpenResty порт HTTP по умолчанию: {0} порт HTTPS: {1}, что может повлиять на доступ к доменному имени веб-сайта и принудительное перенаправление HTTPS',
        primaryDomainHelper: 'Пример: example.com или example.com:8080',
        acmeAccountType: 'Тип аккаунта',
        keyType: 'Алгоритм ключа',
        tencentCloud: 'Tencent Cloud',
        containWarn: 'Доменное имя содержит основной домен, пожалуйста, введите заново',
        rewriteHelper2:
            'Приложения типа WordPress, установленные из магазина приложений, обычно поставляются с предустановленной конфигурацией псевдостатики. Их перенастройка может привести к ошибкам.',
        websiteBackupWarn:
            'Поддерживается только импорт локальных резервных копий, импорт резервных копий с других машин может привести к сбою восстановления',
        ipWebsiteWarn:
            'Веб-сайты с IP в качестве домена должны быть установлены как сайт по умолчанию для нормального доступа.',
        hstsHelper: 'Включение HSTS может повысить безопасность веб-сайта',
        includeSubDomains: 'Поддомены',
        hstsIncludeSubDomainsHelper:
            'После включения политика HSTS будет применяться ко всем поддоменам текущего домена.',
        defaultHtml: 'Страница по умолчанию',
        website404: 'Страница ошибки 404 веб-сайта',
        domain404: 'Домен веб-сайта не существует',
        indexHtml: 'Индекс для статического веб-сайта',
        stopHtml: 'Остановленный веб-сайт',
        indexPHP: 'Индекс для PHP веб-сайта',
        sslExpireDate: 'Дата истечения сертификата',
        website404Helper:
            'Страница ошибки 404 веб-сайта поддерживается только для веб-сайтов со средой выполнения PHP и статических веб-сайтов',
        sni: 'Origin SNI',
        sniHelper:
            'Когда бэкенд обратного прокси использует HTTPS, может потребоваться установить origin SNI. Подробности см. в документации провайдера CDN.',
        proxySslVerify: 'Проверять SSL-сертификат бэкенда',
        proxySslVerifyHelper:
            'При включении прокси строго проверяет SSL-сертификат вышестоящего сервера (по умолчанию отключено).',
        huaweicloud: 'Huawei Cloud',
        enableSSLHelper: 'Неудача при включении SSL не повлияет на создание сайта.',
        batchAdd: 'Пакетное Добавление Доменов',
        batchInput: 'Пакетный ввод',
        domainNotFQDN: 'Этот домен может быть недоступен в публичной сети',
        domainInvalid: 'Неверный формат домена',
        domainBatchHelper: 'Один домен на строку, формат: domain:port@ssl\nПример: example.com:443@ssl или example.com',
        generateDomain: 'Сгенерировать',
        global: 'Глобальный',
        subsite: 'Подсайт',
        subsiteHelper:
            'Подсайт может выбрать каталог существующего PHP или статического сайта в качестве корневого каталога.',
        deleteSubsite: 'Чтобы удалить текущий сайт, сначала необходимо удалить подсайт {0}.',
        loadBalance: 'Балансировка Нагрузки',
        server: 'Узел',
        algorithm: 'Алгоритм',
        ipHash: 'IP Хэш',
        ipHashHelper:
            'Распределяет запросы на определенный сервер на основе IP-адреса клиента, гарантируя, что конкретный клиент всегда направляется на один и тот же сервер.',
        leastConn: 'Наименьшее Количество Соединений',
        leastConnHelper: 'Отправляет запросы на сервер с наименьшим количеством активных соединений.',
        leastTime: 'Наименьшее Время',
        leastTimeHelper: 'Отправляет запросы на сервер с наименьшим временем активного соединения.',
        defaultHelper:
            'Метод по умолчанию, запросы равномерно распределяются между серверами. Если сервер имеет настройку веса, запросы распределяются в соответствии с указанным весом. Серверы с большим весом получают больше запросов.',
        weight: 'Вес',
        maxFails: 'Максимальное Количество Ошибок',
        maxConns: 'Максимальное Количество Соединений',
        strategy: 'Стратегия',
        strategyDown: 'Отключить',
        strategyBackup: 'Резервный',
        ipHashBackupErr: 'IP хэш не поддерживает резервные узлы',
        failTimeout: 'Таймаут отказа',
        failTimeoutHelper:
            'Длина временного окна для проверки работоспособности сервера. Когда кумулятивное количество отказов достигает порога в течение этого периода, сервер будет временно удален и повторно проверен через тот же промежуток времени. По умолчанию 10 секунд',
        staticChangePHPHelper: 'В настоящее время статический сайт, можно переключить на PHP сайт.',
        proxyCache: 'Кэш Обратного Прокси',
        cacheLimit: 'Ограничение Пространства Кэша',
        shareCache: 'Размер Памяти для Подсчета Кэша',
        cacheExpire: 'Время Истечения Кэша',
        shareCacheHelper: '1M памяти может хранить примерно 8000 объектов кэша.',
        cacheLimitHelper: 'Превышение лимита автоматически удалит старые кэши.',
        realIP: 'Реальный IP',
        ipFrom: 'Источник IP',
        ipFromHelper:
            'Настроив доверенные источники IP, OpenResty проанализирует информацию об IP в HTTP-заголовке, чтобы точно идентифицировать и записать реальный IP-адрес посетителя, включая журналы доступа.',
        ipFromExample1:
            'Если фронтенд — это инструмент, такой как Frp, вы можете указать IP-адрес Frp, например, 127.0.0.1.',
        ipFromExample2: 'Если фронтенд — это CDN, вы можете указать диапазон IP-адресов CDN.',
        ipFromExample3:
            'Если вы не уверены, вы можете указать 0.0.0.0/0 (IPv4) или ::/0 (IPv6). [Примечание: Разрешение любого источника IP небезопасно.]',
        http3Helper:
            'HTTP/3 — это обновленная версия HTTP/2, обеспечивающая более высокую скорость соединения и лучшую производительность. Однако не все браузеры поддерживают HTTP/3, и его включение может привести к тому, что некоторые браузеры не смогут получить доступ к сайту.',
        cors: 'Межсайтовый обмен ресурсами (CORS)',
        enableCors: 'Включить CORS',
        allowOrigins: 'Разрешенные домены',
        allowMethods: 'Разрешенные методы запроса',
        allowHeaders: 'Разрешенные заголовки запроса',
        allowCredentials: 'Разрешить отправку cookies',
        preflight: 'Быстрый ответ на предварительный запрос',
        preflightHleper:
            'При включении, когда браузер отправляет межсайтовый предварительный запрос (запрос OPTIONS), система автоматически вернет статус 204 и установит необходимые межсайтовые заголовки ответа',
        changeDatabase: 'Сменить Базу Данных',
        changeDatabaseHelper1: 'Связь базы данных используется для резервного копирования и восстановления сайта.',
        changeDatabaseHelper2:
            'Переключение на другую базу данных может сделать предыдущие резервные копии невосстановимыми.',
        saveCustom: 'Сохранить как Шаблон',
        rainyun: 'Rainyun',
        volcengine: 'Volcengine',
        runtimePortHelper: 'Текущая среда выполнения предоставляет несколько портов. Выберите порт прокси.',
        runtimePortWarn: 'В текущей среде выполнения нет портов, невозможно проксировать',
        cacheWarn: 'Пожалуйста, сначала выключите кэш в обратном прокси',
        loadBalanceHelper:
            'После создания балансировки нагрузки, пожалуйста, перейдите в "Обратный прокси", добавьте прокси и установите адрес бэкенда на: http://<название балансировки нагрузки>.',
        useProxy: 'Использовать прокси',
        useProxyHelper: 'Использовать адрес прокси-сервера в настройках панели',
        westCN: 'Западный цифровой',
        openBaseDir: 'Предотвращение межсайтовых атак',
        openBaseDirHelper:
            'open_basedir используется для ограничения пути доступа к файлам PHP, что помогает предотвратить межсайтовый доступ и повысить безопасность',
        serverCacheTime: 'Время кеширования на сервере',
        serverCacheTimeHelper:
            'Время, в течение которого запрос кешируется на сервере. В этот период идентичные запросы будут возвращать кешированный результат напрямую, без запроса к исходному серверу.',
        browserCacheTime: 'Время кеширования в браузере',
        browserCacheTimeHelper:
            'Время, в течение которого статические ресурсы кешируются локально в браузере, уменьшая повторные запросы. Пользователи будут использовать локальный кеш напрямую, если срок его действия не истек при обновлении страницы.',
        donotLinkeDB: 'Не связывать с базой данных',
        toWebsiteDir: 'Перейти в каталог сайта',
        execParameters: 'Параметры выполнения',
        extCommand: 'Дополнительная команда',
        mirror: 'Зеркальный источник',
        execUser: 'Пользователь выполнения',
        execDir: 'Каталог выполнения',
        packagist: 'Полное зеркало Китая',
        batchOperate: 'Пакетная операция',
        batchOperateHelper: 'Пакетное {0} веб-сайтов, продолжить операцию?',
        stream: 'Прокси TCP/UDP',
        streamPorts: 'Порты прослушивания',
        streamPortsHelper:
            'Установите номер внешнего порта прослушивания, клиенты будут получать доступ к службе через этот порт, разделяйте запятыми, например: 5222,5223',
        streamHelper: 'Перенаправление портов и балансировка нагрузки TCP/UDP',
        udp: 'Включить UDP',
        syncHtmlHelper: 'Синхронизировать с PHP и статическими сайтами',
        wafValueHelper: 'Значение',
        createDb: 'Создать базу данных',
        parentWbeiste: 'Родительский сайт',
        cacheExpireJHelper: 'Кэш будет удален, если после истечения срока по нему не было обращений',
    },
    php: {
        short_open_tag: 'Поддержка коротких тегов',
        max_execution_time: 'Максимальное время выполнения скрипта',
        max_input_time: 'Максимальное время ввода',
        memory_limit: 'Лимит памяти скрипта',
        post_max_size: 'Максимальный размер данных POST',
        file_uploads: 'Разрешить загрузку файлов',
        upload_max_filesize: 'Максимальный разрешенный размер загружаемых файлов',
        max_file_uploads: 'Максимальное количество файлов, разрешенных для одновременной загрузки',
        default_socket_timeout: 'Тайм-аут сокета',
        error_reporting: 'Уровень ошибок',
        display_errors: 'Выводить подробную информацию об ошибках',
        cgi_fix_pathinfo: 'Включить pathinfo',
        date_timezone: 'Часовой пояс',
        disableFunction: 'Отключить функции',
        disableFunctionHelper: 'Введите функции для отключения, например exec, разделяйте запятыми',
        uploadMaxSize: 'Ограничение загрузки',
        indexHelper:
            'Для обеспечения нормальной работы PHP-сайта разместите код в директории index и избегайте переименования',
        extensions: 'Шаблоны расширений',
        extension: 'Расширение',
        extensionHelper: 'Используйте несколько расширений, разделяйте запятыми',
        toExtensionsList: 'Просмотр списка расширений',
        containerConfig: 'Конфигурация контейнера',
        containerConfigHelper:
            'Переменные окружения и другие данные можно изменить в разделе Конфигурация - Конфигурация контейнера после создания',
        dateTimezoneHelper: 'Пример: TZ=Asia/Shanghai (Пожалуйста, добавьте по мере необходимости)',
        extensionsHelper: 'Для нескольких расширений используйте запятую',
    },
    nginx: {
        serverNamesHashBucketSizeHelper: 'Размер хэш-таблицы для имен серверов',
        clientHeaderBufferSizeHelper: 'Размер буфера заголовка для запросов клиента',
        clientMaxBodySizeHelper: 'Максимальный размер загружаемого файла',
        keepaliveTimeoutHelper: 'Тайм-аут соединения',
        gzipMinLengthHelper: 'Минимальный размер сжатого файла',
        gzipCompLevelHelper: 'Степень сжатия',
        gzipHelper: 'Включить сжатие для передачи',
        connections: 'Активные соединения',
        accepts: 'Принято',
        handled: 'Обработано',
        requests: 'Запросы',
        reading: 'Чтение',
        writing: 'Запись',
        waiting: 'Ожидание',
        status: 'Текущий статус',
        configResource: 'Конфигурация',
        saveAndReload: 'Сохранить и перезагрузить',
        clearProxyCache: 'Очистить кэш обратного прокси',
        clearProxyCacheWarn:
            'Это повлияет на все веб-сайты с настроенным кэшем и перезапустит "OpenResty". Хотите продолжить?',
        create: 'Создать модуль',
        update: 'Редактировать модуль',
        params: 'Параметры',
        packages: 'Пакеты',
        script: 'Скрипт',
        module: 'Модуль',
        build: 'Сборка',
        buildWarn:
            'Локальная сборка модулей использует CPU и память. Статические модули также пересобирают и перезапускают OpenResty. Продолжить?',
        buildPurposeHint:
            'Динамические модули применяются горячей перезагрузкой после сборки (без перезапуска контейнера); при наличии статических модулей образ будет полностью пересобран, а контейнер пересоздан',
        buildMode: 'Режим сборки',
        buildModeDynamic: 'Динамическая',
        buildModeStatic: 'Статическая',
        buildStatus: 'Статус сборки',
        loadOrder: 'Порядок загрузки',
        modulesToBuild: 'Динамические модули (горячая перезагрузка после сборки, без перезапуска контейнера)',
        staticModules: 'Статические модули',
        staticModulesHelper: 'При сборке все модули будут пересобраны, а OpenResty перезапущен',
        forceBuild: 'Пересобрать без кэша',
        buildFailed: 'Последняя сборка не удалась',
        pending: 'Ожидание',
        ready: 'Готово',
        failed: 'Ошибка',
        dynamicUnsupported: 'Динамическая сборка не поддерживается текущей версией OpenResty',
        moduleDynamicUnsupported: 'Параметры этого модуля не поддерживают динамическую сборку',
        mirrorUrl: 'Источник программного обеспечения',
        paramsHelper: 'Например: --add-module=/tmp/ngx_brotli; динамический режим преобразует автоматически',
        packagesHelper: 'Например: git,curl разделенные запятыми',
        scriptHelper:
            'Скрипт, выполняемый перед компиляцией, обычно для загрузки исходного кода модуля, установки зависимостей и т.д.',
        buildHelper:
            'Динамические модули загружаются из конфигурации после сборки; статические модули по-прежнему пересобирают OpenResty.',
        defaultHttps: 'HTTPS Анти-вмешательство',
        defaultHttpsHelper1: 'Включение этого параметра может решить проблему вмешательства в HTTPS.',
        sslRejectHandshake: 'Отклонить стандартное SSL-рукопожатие',
        sslRejectHandshakeHelper:
            'Включение этого может предотвратить утечку сертификатов, установка веб-сайта по умолчанию сделает эту настройку недействительной',
    },
    ssl: {
        create: 'Запросить',
        provider: 'Тип',
        manualCreate: 'Создан вручную',
        acmeAccount: 'ACME аккаунт',
        resolveDomain: 'Разрешить доменное имя',
        err: 'Ошибка',
        value: 'значение записи',
        dnsResolveHelper: 'Пожалуйста, добавьте следующие записи разрешения у провайдера DNS:',
        detail: 'Подробности',
        msg: 'Информация',
        ssl: 'Сертификат',
        key: 'Закрытый ключ',
        startDate: 'Время начала действия',
        organization: 'организация-издатель',
        renewConfirm: 'Это обновит сертификат для доменного имени {0}. Хотите продолжить?',
        autoRenew: 'Автопродление',
        autoRenewHelper: 'Автоматически продлевать за 30 дней до истечения срока',
        renewSuccess: 'Успешно продлено',
        renewWebsite:
            'Этот сертификат связан со следующими веб-сайтами, и заявка будет применена к этим сайтам одновременно',
        createAcme: 'Создать аккаунт',
        acmeHelper: 'Acme аккаунт используется для запроса бесплатных сертификатов',
        upload: 'Импорт',
        applyType: 'Тип',
        apply: 'Продлить',
        applyStart: 'Начало запроса сертификата',
        getDnsResolve: 'Получение значения DNS-разрешения, пожалуйста, подождите...',
        selfSigned: 'Самоподписанный CA',
        ca: 'Центр сертификации',
        commonName: 'Общее имя',
        caName: 'Имя центра сертификации',
        company: 'Название организации',
        department: 'Название подразделения',
        city: 'Название населенного пункта',
        province: 'Название штата или области',
        country: 'Название страны (2-буквенный код)',
        commonNameHelper: 'Например, ',
        selfSign: 'Выпустить сертификат',
        days: 'срок действия',
        domainHelper: 'Одно доменное имя в строке, поддерживает * и IP-адрес',
        pushDir: 'Отправить сертификат в локальную директорию',
        dir: 'Директория',
        pushDirHelper: 'В этой директории будут созданы файл сертификата "fullchain.pem" и файл ключа "privkey.pem".',
        organizationDetail: 'Детали организации',
        fromWebsite: 'С веб-сайта',
        dnsMauanlHelper:
            'В режиме ручного разрешения необходимо нажать кнопку применить после создания для получения значения DNS-разрешения',
        httpHelper:
            'Использование режима HTTP требует установки OpenResty и не поддерживает запрос сертификатов с подстановочными доменными именами.',
        buypassHelper: 'Buypass недоступен в материковом Китае',
        googleHelper: 'Как получить EAB HmacKey и EAB kid',
        googleCloudHelper: 'Google Cloud API недоступен в большинстве регионов материкового Китая',
        skipDNSCheck: 'Пропустить проверку DNS',
        skipDNSCheckHelper: 'Отметьте здесь только если возникает проблема тайм-аута при запросе сертификата.',
        cfHelper: 'Не использовать Global API Key',
        deprecated: 'будет устарелым',
        deprecatedHelper:
            'Обслуживание остановлено и может быть удалено в будущей версии. Пожалуйста, используйте метод Tencent Cloud для анализа',
        dnsPodRemoved: 'удалён',
        dnsPodRemovedTip:
            'DnsPod удалён в lego v5; эта учётная запись не может использоваться для выпуска или продления сертификатов. Пожалуйста, переключитесь на учётную запись TencentCloud DNS.',
        dnsPodRemovedSSLTip:
            'Учётная запись DnsPod, привязанная к этому сертификату, недоступна в lego v5; автопродление будет завершаться с ошибкой. Пожалуйста, переключите DNS-аккаунт на TencentCloud.',
        disableCNAME: 'Отключить CNAME',
        disableCNAMEHelper: 'Отметьте здесь, если доменное имя имеет запись CNAME и запрос не удается.',
        nameserver: 'DNS сервер',
        nameserverHelper: 'Использовать пользовательский DNS сервер для проверки доменных имен.',
        edit: 'Редактировать сертификат',
        execShell: 'Выполнить скрипт после запроса сертификата.',
        shell: 'Содержимое скрипта',
        shellHelper:
            'Директория выполнения скрипта по умолчанию - директория установки 1Panel. Если сертификат отправляется в локальную директорию, директорией выполнения будет директория отправки сертификата. Тайм-аут выполнения по умолчанию - 30 минут.',
        customAcme: 'Пользовательская служба ACME',
        customAcmeURL: 'URL службы ACME',
        baiduCloud: 'Baidu Cloud',
        pushNode: 'Синхронизация с другими узлами',
        pushNodeHelper: 'Отправить на выбранные узлы после заявки/продления',
        fromMaster: 'Отправка с главного узла',
        hostedZoneID: 'Hosted Zone ID',
        isIP: 'IP-сертификат',
        useEAB: 'Использовать аутентификацию EAB',
    },
    firewall: {
        create: 'Создать правило',
        edit: 'Редактировать правило',
        ccDeny: 'CC защита',
        ipWhiteList: 'Белый список IP',
        ipBlockList: 'Черный список IP',
        fileExtBlockList: 'Черный список расширений файлов',
        urlWhiteList: 'Белый список URL',
        urlBlockList: 'Черный список URL',
        argsCheck: 'Проверка GET параметров',
        postCheck: 'Проверка POST параметров',
        cookieBlockList: 'Черный список Cookie',
        dockerHelper:
            'Текущий брандмауэр не может отключить сопоставление портов контейнера. Установленные приложения могут перейти на страницу [Установленные], чтобы редактировать параметры приложения и настраивать правила открытия портов.',
        iptablesHelper:
            'Обнаружено, что система использует брандмауэр {0}. Чтобы переключиться на iptables, сначала удалите его вручную!',
        quickJump: 'Быстрый доступ',
        used: 'Используется',
        unUsed: 'Не используется',
        dockerRestart: 'Операции с брандмауэром требуют перезапуска службы Docker',
        firewallHelper: '{0} межсетевой экран',
        firewallNotStart: 'Межсетевой экран в настоящее время не включен. Сначала включите его.',
        restartFirewallHelper: 'Эта операция перезапустит текущий межсетевой экран. Хотите продолжить?',
        stopFirewallHelper: 'Это лишит сервер защиты безопасности. Хотите продолжить?',
        startFirewallHelper:
            'После включения межсетевого экрана безопасность сервера будет лучше защищена. Хотите продолжить?',
        noPing: 'Отключить ping',
        enableBanPing: 'Блокировать Ping',
        disableBanPing: 'Разблокировать Ping',
        noPingTitle: 'Отключить ping',
        noPingHelper: 'Это отключит ping, и сервер не будет отвечать на ICMP-запросы. Хотите продолжить?',
        onPingHelper: 'Это включит ping, и хакеры смогут обнаружить ваш сервер. Хотите продолжить?',
        changeStrategy: 'Изменить стратегию {0}',
        changeStrategyIPHelper1:
            'Изменить стратегию IP-адреса на [deny]. После установки IP-адреса доступ к серверу будет запрещен. Хотите продолжить?',
        changeStrategyIPHelper2:
            'Изменить стратегию IP-адреса на [allow]. После установки IP-адреса нормальный доступ будет восстановлен. Хотите продолжить?',
        changeStrategyPortHelper1:
            'Изменить политику портов на [drop]. После установки политики портов внешний доступ будет запрещен. Хотите продолжить?',
        changeStrategyPortHelper2:
            'Изменить политику портов на [accept]. После установки политики портов нормальный доступ к портам будет восстановлен. Хотите продолжить?',
        stop: 'Остановить',
        portFormatError: 'Это поле должно быть действительным портом.',
        portHelper1: 'Несколько портов, например 8080 и 8081',
        portHelper2: 'Диапазон портов, например 8080-8089',
        changeStrategyHelper:
            'Изменить стратегию {0} [{1}] на [{2}]. После установки {0} будет иметь внешний доступ {2}. Хотите продолжить?',
        strategy: 'Стратегия',
        accept: 'Принять',
        drop: 'Отбросить',
        anyWhere: 'Любой',
        address: 'Указанные IP',
        addressHelper: 'Поддерживает IP-адрес или сегмент IP',
        allow: 'Разрешить',
        deny: 'Запретить',
        addressFormatError: 'Это поле должно быть действительным IP-адресом.',
        addressHelper1: 'Поддерживает IP-адрес или диапазон IP. Например, "172.16.10.11" или "172.16.10.0/24".',
        addressHelper2: 'Для нескольких IP-адресов разделяйте запятой. Например, "172.16.10.11, 172.16.0.0/24".',
        allIP: 'Все IP',
        portRule: 'Правило | Правила',
        forwardRule: 'Правило переадресации портов | Правила переадресации портов',
        ipRule: 'IP правило | IP правила',
        userAgent: 'Фильтр User-Agent',
        sourcePort: 'Исходный порт',
        targetIP: 'Целевой IP',
        targetPort: 'Целевой порт',
        forwardHelper1:
            'Если вы хотите перенаправить на локальный порт, целевой IP должен быть установлен как "127.0.0.1".',
        forwardHelper2: 'Оставьте целевой IP пустым для перенаправления на локальный порт.',
        forwardPortHelper: 'Поддерживает диапазоны портов, напр. 8080-8089',
        forwardInboundInterface: 'Сетевой интерфейс для пересылки входящего трафика',
        exportHelper: 'Собираюсь экспортировать {0} правил брандмауэра. Продолжить?',
        importSuccess: 'Успешно импортировано {0} правил',
        importPartialSuccess: 'Импорт завершён: {0} успешно, {1} с ошибкой',
        ipv4Limit: 'Текущая операция поддерживает только адреса IPv4',
        basicStatus: 'Текущая цепочка {0} не привязана, сначала привяжите!',
        baseIptables: 'Сервис iptables',
        forwardIptables: 'Сервис Переадресации Порта iptables',
        advanceIptables: 'Сервис Расширенной Конфигурации iptables',
        initMsg: 'Собираюсь инициализировать {0}, продолжить?',
        initHelper:
            'Обнаружено, что {0} не инициализирован. Нажмите кнопку инициализации в верхней строке состояния для настройки!',
        bindHelper: 'Привязать - Правила брандмауэра вступят в силу только когда статус привязан. Подтвердить?',
        unbindHelper:
            'Отвязать - При отвязке все добавленные правила брандмауэра станут недействительными. Действуйте осторожно. Подтвердить?',
        whiteList: 'Белый список',
        portWhiteList: 'Белый список портов',
        portWhiteListAlter:
            'Порты из белого списка будут автоматически открыты при инициализации или запуске брандмауэра.',
        portWhiteListHelper: 'Можно указать протокол, например 80/tcp или 443/udp. Если не указано, используется tcp.',
        defaultStrategy: 'Политика по умолчанию для текущей цепочки {0} - {1}',
        defaultStrategy2:
            'Политика по умолчанию для текущей цепочки {0} - {1}, текущий статус - не привязан. Добавленные правила брандмауэра вступят в силу после привязки!',
        filterRule: 'Правило Фильтра',
        filterHelper:
            'Правила фильтра позволяют управлять сетевым трафиком на уровне INPUT/OUTPUT. Настраивайте осторожно, чтобы избежать блокировки системы.',
        chain: 'Цепочка',
        targetChain: 'Целевая Цепочка',
        sourceIP: 'Исходный IP',
        destIP: 'Целевой IP',
        inboundDirection: 'Входящее Направление',
        outboundDirection: 'Исходящее Направление',
        destPort: 'Целевой Порт',
        action: 'Действие',
        reject: 'Отклонить',
        sourceIPHelper: 'Формат CIDR, напр. 192.168.1.0/24. Оставьте пустым для всех адресов',
        destIPHelper: 'Формат CIDR, напр. 10.0.0.0/8. Оставьте пустым для всех адресов',
        portHelper: '0 означает любой порт',
        allPorts: 'Все Порта',
        deleteRuleConfirm: 'Удалит {0} правил. Продолжить?',
        advancedControl: 'Расширенное управление',
        advancedControlNotAvailable:
            'Сейчас используется firewall {0}, расширенные правила поддерживаются только для iptables',
        destination: 'Назначение',
    },
    runtime: {
        runtime: 'Среда выполнения',
        workDir: 'Рабочая директория',
        localHelper: 'По вопросам установки в локальной среде и использования в автономном режиме обратитесь к ',
        versionHelper: 'Версия PHP, например v8.0',
        buildHelper:
            'Чем больше расширений, тем выше загрузка процессора при создании образа. Расширения можно установить после создания среды.',
        openrestyWarn: 'PHP требует обновления OpenResty до версии 1.21.4.1 или выше для использования',
        toupgrade: 'Обновить',
        edit: 'Редактировать среду выполнения',
        extendHelper:
            'Неназванные расширения можно вручную ввести и выбрать. Например, введите "sockets" и выберите первый вариант из выпадающего списка, чтобы увидеть список расширений.',
        rebuildHelper: 'После редактирования расширения необходимо пересобрать PHP приложение для применения изменений',
        rebuild: 'Пересобрать PHP приложение',
        source: 'Источник расширений PHP',
        ustc: 'Научно-технический университет Китая',
        netease: 'Netease',
        aliyun: 'Alibaba Cloud',
        default: 'по умолчанию',
        tsinghua: 'Университет Цинхуа',
        xtomhk: 'Зеркало XTOM (Гонконг)',
        xtom: 'Зеркало XTOM (Глобальное)',
        phpsourceHelper: 'Выберите подходящий источник в соответствии с вашей сетевой средой.',
        appPort: 'Порт приложения',
        externalPort: 'Внешний порт',
        packageManager: 'Менеджер пакетов',
        codeDir: 'Директория кода',
        appPortHelper: 'Порт, используемый приложением.',
        externalPortHelper: 'Порт, открытый для внешнего мира.',
        runScript: 'Скрипт запуска',
        runScriptHelper: 'Список команд запуска анализируется из файла package.json в исходной директории.',
        open: 'Открыть',
        operatorHelper: 'Операция {0} будет выполнена для выбранной среды выполнения. Хотите продолжить?',
        taobao: 'Taobao',
        tencent: 'Tencent',
        imageSource: 'Источник образа',
        moduleManager: 'Управление модулями',
        module: 'Модуль',
        nodeOperatorHelper:
            'Выполнить {0} модуля {1}? Операция может вызвать аномалии в среде выполнения, пожалуйста, подтвердите перед продолжением',
        customScript: 'Пользовательская команда запуска',
        customScriptHelper:
            'Пожалуйста, введите полную команду запуска, например: npm run start. Для команд запуска PM2 замените на pm2-runtime, иначе запуск завершится ошибкой.',
        portError: 'Не повторяйте один и тот же порт.',
        systemRestartHelper: 'Описание статуса: Прерывание - получение статуса не удалось из-за перезагрузки системы',
        javaScriptHelper: 'Укажите полную команду запуска. Например, "java -jar halo.jar -Xmx1024M -Xms256M".',
        javaDirHelper: 'Директория должна содержать jar файлы, поддиректории также допустимы',
        goHelper: 'Укажите полную команду запуска. Например, "go run main.go" или "./main".',
        goDirHelper: 'Директория или поддиректория должна содержать файлы Go или бинарные файлы.',
        pythonHelper:
            'Укажите полную команду запуска. Например, "pip install -r requirements.txt && python manage.py runserver 0.0.0.0:5000".',
        dotnetHelper: 'Пожалуйста, укажите полную команду запуска, например, dotnet MyWebApp.dll',
        dirHelper: 'Примечание: Укажите путь к каталогу внутри контейнера',
        concurrency: 'Схема параллелизма',
        loadStatus: 'Состояние нагрузки',
        extraHosts: 'Сопоставление хостов',
        extension: 'Расширение',
        installExtension: 'Подтвердите установку расширения {0}',
        loadedExtension: 'Загруженные расширения',
        popularExtension: 'Популярные расширения',
        uninstallExtension: 'Вы уверены, что хотите удалить расширение {0}',
        phpConfigHelper: 'Для изменения конфигурации требуется перезапуск окружения. Продолжить',
        operateMode: 'Режим работы',
        dynamic: 'динамический',
        static: 'статический',
        ondemand: 'по требованию',
        dynamicHelper:
            'Динамически регулирует число процессов. Подходит для сайтов с плавающей нагрузкой или малой памятью',
        staticHelper:
            'Фиксированное число процессов, подходит для стабильного высокого трафика, но потребляет больше ресурсов',
        ondemandHelper:
            'Процессы запускаются/завершаются по требованию, ресурсы используются лучше, но первый отклик может быть медленнее',
        max_children: 'максимальное число создаваемых процессов',
        start_servers: 'число процессов при запуске',
        min_spare_servers: 'минимальное число свободных процессов',
        max_spare_servers: 'максимальное число свободных процессов',
        envKey: 'Имя',
        envValue: 'Значение',
        environment: 'Переменная окружения',
    },
    process: {
        pid: 'ID процесса',
        ppid: 'Родительский PID',
        numThreads: 'Потоки',
        memory: 'Память',
        diskRead: 'Чтение диска',
        diskWrite: 'Запись диска',
        netSent: 'исходящий',
        netRecv: 'входящий',
        numConnections: 'Соединения',
        startTime: 'Время запуска',
        running: 'Работает',
        sleep: 'сон',
        stop: 'остановлен',
        idle: 'простой',
        zombie: 'зомби-процесс',
        wait: 'ожидание',
        lock: 'блокировка',
        blocked: 'заблокирован',
        cmdLine: 'Команда запуска',
        basic: 'Основное',
        mem: 'Память',
        openFiles: 'Открытые файлы',
        env: 'Переменные окружения',
        noenv: 'Нет',
        net: 'Сетевые подключения',
        laddr: 'Исходный адрес/порт',
        raddr: 'Целевой адрес/порт',
        stopProcess: 'Завершить',
        viewDetails: 'Подробности',
        stopProcessWarn: 'Вы уверены, что хотите завершить этот процесс (PID:{0})?',
        kill: 'Завершить Процесс',
        killNow: 'Завершить Сейчас',
        killHelper: 'Завершение процесса {0} может привести к некорректной работе некоторых программ. Продолжить?',
        processName: 'Имя процесса',
    },
    tool: {
        supervisor: {
            loadStatusErr: 'Не удалось получить статус процесса, пожалуйста, проверьте состояние службы supervisor.',
            notSupport:
                'Служба Supervisor не обнаружена. Перейдите на страницу библиотеки скриптов для ручной установки',
            list: 'Демон-процесс | Демон-процессы',
            config: 'Конфигурация Supervisor',
            primaryConfig: 'Расположение основного конфигурационного файла',
            notSupportCtl:
                'supervisorctl не обнаружен. Перейдите на страницу библиотеки скриптов для ручной установки.',
            user: 'Пользователь',
            command: 'Команда',
            dir: 'Директория',
            numprocs: 'Кол-во процессов',
            initWarn:
                'Это изменит значение "files" в секции "[include"] в основном конфигурационном файле. Директория других конфигурационных файлов будет: "{директория установки 1Panel}/1panel/tools/supervisord/supervisor.d/".',
            operatorHelper: 'Операция {1} будет выполнена для {0}, продолжить?',
            uptime: 'Время работы',
            notStartWarn: 'Supervisor не запущен. Сначала запустите его.',
            serviceName: 'Имя службы',
            initHelper:
                'Обнаружен сервис Supervisor, но он не инициализирован. Нажмите кнопку инициализации в верхней панели состояния для настройки.',
            serviceNameHelper: 'Имя службы Supervisor, управляемой systemctl, обычно supervisor или supervisord',
            restartHelper:
                'Это перезапустит службу после инициализации, что приведет к остановке всех существующих демон-процессов.',
            RUNNING: 'Работает',
            STOPPED: 'Остановлен',
            STOPPING: 'Останавливается',
            STARTING: 'Запускается',
            FATAL: 'Не удалось запустить',
            BACKOFF: 'Исключение при запуске',
            ERROR: 'Ошибка',
            statusCode: 'Код статуса',
            manage: 'Управление',
            autoRestart: 'Автоматический перезапуск',
            EXITED: 'Вышел',
            autoRestartHelper: 'Автоматически перезапускать программу после её аварийного завершения',
            autoStart: 'Автозапуск',
            autoStartHelper: 'Автоматически запускать сервис после запуска Supervisor',
        },
    },
    disk: {
        management: 'Управление дисками',
        partition: 'Раздел',
        unmount: 'Отмонтировать',
        unmountHelper: 'Вы хотите отмонтировать раздел {0}?',
        mount: 'Подключить',
        partitionAlert:
            'Разделение диска требует форматирования диска, и существующие данные будут удалены. Пожалуйста, сохраните или сделайте снимки данных заранее.',
        mountPoint: 'Точка монтирования',
        systemDisk: 'Системный диск',
        unpartitionedDisk: 'Неразделенный диск',
        handlePartition: 'Разделить сейчас',
        filesystem: 'Файловая система',
        unmounted: 'Отмонтирован',
        cannotOperate: 'Невозможно выполнить операцию',
        systemDiskHelper: 'Подсказка: Текущий диск является системным диском, операции невозможны.',
        autoMount: 'Автоматическое монтирование',
        model: 'Модель устройства',
        diskType: 'Тип диска',
        serial: 'Серийный номер',
        noFail: 'Сбой монтирования не влияет на запуск системы',
    },
    xpack: {
        ldap: {
            source: 'Источник',
            directoryMissing: 'Отсутствует в LDAP',
            localCredentialsManaged: 'Имя пользователя и пароль управляются LDAP и не могут быть изменены локально.',
            sources: {
                local: 'Локальный',
                ldap: 'LDAP',
            },
            importUsers: 'Импорт пользователей AD/LDAP',
            searchUsersPlaceholder: 'Поиск имени пользователя',
            readFromLDAP: 'Читать из LDAP',
            selectedUsers: '{0} выбрано',
            queriedAt: 'Время чтения',
            cachedResult: 'Кэшированный результат',
            roleForNewUsers: 'Роль для новых пользователей',
            selectRole: 'Выберите роль',
            roleOnlyForNewUsers: 'Роль требуется только тогда, когда при импорте создаются пользователи.',
            roleRequiredForNewUsers: 'Выберите роль для новых пользователей LDAP.',
            changedFields: 'Измененные поля',
            importSelected: 'Импортировать выбранное',
            importAll: 'Импортировать все',
            importPreview: 'Предпросмотр импорта AD/LDAP',
            importCompleted: 'Импорт AD/LDAP завершён',
            incompletePreview: 'Чтение каталога LDAP было неполным. Прочтите еще раз LDAP.',
            missingUsersWarning:
                'Пользователи, отсутствующие в LDAP, будут отключены посредством строгой синхронизации.',
            missingUsersWarningDetail: '{0} локальных пользователей LDAP больше не смогут войти в систему.',
            action: 'Действие',
            reason: 'Причина',
            noImportChanges: 'Никаких изменений импорта',
            confirmImport: 'Подтвердить импорт',
            created: 'Создать',
            updated: 'Обновить',
            reactivated: 'Повторно активировать',
            unchanged: 'Без изменений',
            conflicts: 'Конфликты',
            missing: 'Отсутствует',
            missingUsersConfirm:
                '{0} пользователей, отсутствующих в LDAP, будут отключены, а их сеансы завершены. Продолжить?',
            strictSyncConfirm: 'Подтвердить строгую синхронизацию',
            status: {
                importable: 'Новый пользователь',
                update_available: 'Доступно обновление',
                up_to_date: 'Актуально',
                conflict: 'Конфликт',
            },
            fields: {
                name: 'Имя пользователя',
                externalDN: 'Каталог DN',
                externalID: 'Внешний идентификатор',
                authSourceStatus: 'Статус аутентификации',
            },
            actions: {
                created: 'Создать',
                updated: 'Обновить',
                reactivated: 'Повторно активировать',
                unchanged: 'Без изменений',
                skipped: 'Пропущено',
                conflicts: 'Конфликт',
                conflict: 'Конфликт',
                missing: 'Отключить',
                errors: 'Ошибка',
                error: 'Ошибка',
            },
        },
        expiresEnterpriseAlert:
            'Дружеское напоминание: ваша лицензия Enterprise Edition истечет через {0} дней, и все функции Enterprise Edition станут недоступны. Пожалуйста, продлите лицензию вовремя, чтобы обеспечить дальнейшее использование.',
        expiresProAlert:
            'Дружеское напоминание: ваша лицензия Pro Edition истечет через {0} дней, и все функции Pro Edition станут недоступны. Пожалуйста, продлите лицензию вовремя, чтобы обеспечить дальнейшее использование.',
        menu: 'Pro',
        upage: 'AI Конструктор сайтов',
        proAlert: 'Обновитесь до коммерческой версии, чтобы использовать эту функцию',
        opsReport: {
            name: 'Операционный отчет',
            overview: 'Обзор',
            system: 'Работа хоста',
            login: 'Вход и безопасность',
            website: 'Защита сайтов',
            resource: 'Ресурсы выполнения',
            cronjob: 'Плановые задачи',
            alert: 'Уведомления',
            history: 'История экспорта',
            setting: 'Настройки',
            page: {
                enterprise: 'Корпоративная версия',
                reportNode: 'Узел отчёта',
                selectReportNode: 'Выберите узел отчёта',
                currentNode: 'Текущий',
                scoreMeta: 'Снято {0} баллов · рисков: {1}',
                hostAddress: 'Адрес узла',
                panelVersion: 'Версия панели',
                cpuCores: 'Физические ядра',
                coreUnit: '{0} ядер',
                memoryTotal: 'Общий объём памяти',
                reportDate: 'Дата отчёта',
                serverSecurityOverview: 'Обзор безопасности сервера',
                securityScore: 'Оценка безопасности',
                overviewSummary:
                    'Текущий уровень безопасности — {0}, штраф — {1} баллов, выявлено {2} рисков, проверено {3} объектов.',
                riskDistribution: 'Распределение рисков',
                totalDeducted: 'Суммарный штраф',
                noRiskDeducted: 'Штрафов нет',
                scoreTrend: 'Динамика оценки',
                scoreLevelSafe: 'Безопасно',
                scoreLevelAttention: 'Требует внимания',
                scoreLevelMediumRisk: 'Средний риск',
                scoreLevelHighRisk: 'Высокий риск',
                scoreCategoryHost: 'Ресурсы хоста',
                scoreCategoryLogin: 'Безопасность входа',
                scoreCategoryWebsite: 'Сайты и сертификаты',
                scoreCategoryCronjob: 'Плановые задачи',
                scoreCategoryResource: 'Ресурсы выполнения',
                scoreDiskHigh: 'Диск {0} — заполнен на {1}%',
                scoreDiskMedium: 'Диск {0} — заполнен на {1}%',
                scoreResourceHigh: '{0} — текущая загрузка {1}%',
                scoreResourceMedium: '{0} — текущая загрузка {1}%',
                scoreLoadMedium: 'Текущая нагрузка — {0}',
                scoreMonitorDisabled: 'Мониторинг хоста отключён',
                scorePanelLoginFailedHigh: 'Неудачных входов в панель — {0}',
                scorePanelLoginFailedMedium: 'Неудачных входов в панель — {0}',
                scoreSSHLoginFailedHigh: 'Неудачных SSH-входов — {0}',
                scoreSSHLoginFailedMedium: 'Неудачных SSH-входов — {0}',
                scoreMFADisabled: 'MFA не включён',
                scoreAllowIPsOpen: 'Доверенные IP и привязанный домен не настроены или доступ не ограничен',
                scorePanelHTTPSDisabled: 'HTTPS для панели не включён',
                scoreSSHRootLogin: 'SSH-вход под root разрешён',
                scoreSSHPasswordAuth: 'SSH-аутентификация по паролю включена без ключевой аутентификации',
                scoreSSLExpired: '{0} — срок действия сертификата истёк',
                scoreSSLHigh: '{0} — сертификат истекает через {1} дней',
                scoreSSLMedium: '{0} — сертификат истекает через {1} дней',
                scoreWebsiteExpired: '{0} — срок действия сайта истёк',
                scoreWebsiteExpire: '{0} — сайт истекает через {1} дней',
                scoreWebsiteHTTP: '{0} — HTTPS не включён',
                scoreWebsiteStopped: '{0} — аномальный статус',
                scoreWebsiteMonitorUnavailable: 'Мониторинг сайтов обнаружил недоступный сайт',
                scoreWebsiteMonitorAvailability: 'Доступность запросов мониторинга сайтов {0}% ниже порога',
                scoreWebsiteMonitorStatusAbnormal:
                    'Мониторинг сайтов включён, но не инициализирован или находится в ненормальном состоянии',
                scoreWafDisabled: 'WAF отключён, сайты не защищены',
                scoreWafHighRiskHit: 'WAF зафиксировал {0} срабатываний рискованных правил за отчётный период',
                scoreCronjobFailed: '{0} записей о сбоях плановых задач за последние 7 дней',
                scoreAppFailed: '{0} — приложение работает неправильно',
                scoreAppStopped: '{0} — приложение остановлено',
                scoreContainerHigh: '{0} — аномальное состояние контейнера',
                scoreContainerExited: '{0} — контейнер остановлен',
                scoreContainerResource: '{0} — высокое потребление ресурсов контейнером',
                scoreContainerPublicPort: '{0} — есть публично открытые порты контейнера',
                attentionItems: 'Требующие внимания',
                attentionAssets: 'Активы для проверки',
                riskItems: 'Рисковые элементы',
                object: 'Объект',
                description: 'Описание',
                itemUnit: 'шт.',
                recordUnit: 'записей',
                certUnit: 'сертификатов',
                containerUnit: 'контейнеров',
                loginFailed: 'Неудачные входы',
                sslExpire: 'Истечение сертификата',
                abnormalContainer: 'Аномальные контейнеры',
                statAttentionDesc: 'Суммарный штраф — {0} баллов',
                statLoginDesc: 'Панель {0} · SSH {1}',
                statSslDesc: 'Проверено сертификатов: {0}',
                statContainerDesc: 'Проверено контейнеров: {0}',
                assetHostDesc: 'Максимальная заполненность диска — {0}%',
                assetWebsiteDesc: '{0} сертификатов скоро истекут, {1} сайтов с аномалиями',
                assetResourceDesc: '{0} приложений с аномалиями, {1} аномальных контейнеров',
                assetCronjobDesc: '{0} записей о сбоях за 7 дней, {1} задач отключено',
                app: 'Приложения',
                website: 'Сайты',
                websiteSsl: 'Сайты / Сертификаты',
                cronjob: 'Плановые задачи',
                container: 'Контейнеры',
                sslCertificate: 'SSL-сертификаты',
                loginSecurity: 'Безопасность входа',
                panelLogin: 'Вход в панель',
                sshLogin: 'SSH-вход',
                failedRecord: 'Неудачные записи',
                expired: 'Истёк',
                expiredDays: 'Истёк {0} дней назад',
                remainingDays: '{0} · осталось {1} дней',
                enabled: 'Включено',
                disabled: 'Отключено',
                exportRecordFailed: 'Не удалось сохранить запись экспорта',
                hostInfo: 'Информация о хосте',
                hostname: 'Имя хоста',
                osVersion: 'Версия ОС',
                kernelVersion: 'Версия ядра',
                arch: 'Архитектура',
                uptime: 'Время работы',
                diskUsage: 'Использование дисков',
                mountPoint: 'Точка монтирования',
                device: 'Устройство',
                capacity: 'Ёмкость',
                used: 'Использовано',
                usageRate: 'Заполненность',
                memory: 'Память',
                load: 'Нагрузка',
                maxDiskUsage: 'Максимальная заполненность диска',
                panelLoginSecurity: 'Настройки безопасности входа в панель',
                sshSecurity: 'Настройки SSH безопасности Linux-сервера',
                panelFailedRecords: 'Журнал неудачных входов в панель',
                sshFailedRecords: 'Журнал неудачных SSH-входов',
                location: 'Местоположение',
                configItem: 'Параметр конфигурации',
                currentValue: 'Текущее значение',
                securityEntrance: 'Безопасный вход',
                configured: 'Настроено',
                notConfigured: 'Не настроено',
                normal: 'Норма',
                needAttention: 'Требует внимания',
                allowIPs: 'Доверенные IP',
                restricted: 'Ограничено',
                unrestricted: 'Не ограничено',
                bindDomain: 'Привязанный домен',
                accessRestriction: 'Ограничение доступа',
                panelHTTPS: 'HTTPS панели',
                passwordComplexity: 'Сложность пароля',
                sshService: 'Служба SSH',
                running: 'Работает',
                notRunning: 'Не работает',
                listenPort: 'Прослушиваемый порт',
                read: 'Прочитано',
                rootLogin: 'Вход под root',
                passwordAuth: 'Аутентификация по паролю',
                keyAuth: 'Аутентификация по ключу',
                panelLoginFailed: 'Неудачные входы в панель',
                sshLoginFailed: 'Неудачные SSH-входы',
                panelSecurityItems: 'Параметры безопасности панели',
                sshSecurityItems: 'Параметры SSH безопасности',
                loginSecurityHealthStatus: 'Состояние безопасности входа',
                adjustSSHSecurity: 'Настроить SSH-безопасность',
                viewLoginLogs: 'Просмотреть журнал входов',
                riskLevel: 'Уровень риска',
                goConfig: 'Перейти к настройкам',
                viewMore: 'Подробнее',
                involvedIPs: 'Задействовано {0} IP-адресов',
                sessionTimeout: 'Тайм-аут сессии',
                countUnit: 'раз',
                recent24Hours: 'Последние 24 часа',
                currentService: 'Текущий сервис',
                riskItemsExist: '{0} рисковых элементов',
                loginHealthRiskDesc:
                    'Обнаружено {0} рисковых настроек. Рекомендуется усилить безопасность входа для снижения риска вторжения.',
                loginHealthNormalDesc: 'Текущие настройки безопасности входа и SSH в норме',
                loginHealthNormalReason: 'Настройки безопасности входа в норме',
                securityEntranceConfiguredDesc:
                    'Безопасный вход настроен, снижается риск раскрытия стандартной точки входа',
                securityEntranceRiskDesc: 'Безопасный вход не включён. Рекомендуется скрыть стандартную точку входа',
                allowIPsRestrictedDesc: 'Доступ к панели ограничен по IP-адресам',
                allowIPsRiskDesc: 'Доступ по IP не ограничен. Для публичных сред рекомендуется настроить доверенные IP',
                bindDomainRestrictedDesc: 'Домен доступа привязан',
                bindDomainRiskDesc: 'Домен доступа не привязан. Рекомендуется ограничить доступ фиксированным доменом',
                accessRestrictionValue: 'Доверенные IP: {0} / Привязанный домен: {1}',
                accessRestrictionNormalDesc:
                    'Настроены доверенные IP или привязанный домен, источник доступа к панели ограничен',
                accessRestrictionRiskDesc:
                    'Доверенные IP и привязанный домен не настроены или доступ не ограничен. Рекомендуется настроить хотя бы одно',
                panelHTTPSNormalDesc: 'HTTPS для панели включён',
                panelHTTPSRiskDesc: 'HTTPS для панели не включён, трафик входа передаётся открытым текстом',
                passwordComplexityNormalDesc: 'Проверка сложности пароля включена',
                passwordComplexityRiskDesc:
                    'Проверка сложности пароля отключена, высокий риск использования слабых паролей',
                mfa: 'MFA-аутентификация',
                mfaNormalDesc: 'MFA-аутентификация включена, вход более защищён',
                mfaRiskDesc: 'MFA-аутентификация отключена, рекомендуется включить многофакторную аутентификацию',
                sessionTimeoutNormalDesc: 'Тайм-аут сессии находится в безопасном диапазоне',
                sessionTimeoutRiskDesc:
                    'Тайм-аут сессии слишком велик. Рекомендуется ограничить срок неактивных сессий',
                sshServiceNormalDesc: 'Служба SSH работает нормально',
                sshServiceRiskDesc: 'Служба SSH не работает или находится в аномальном состоянии',
                sshPortNormalDesc: 'SSH-порт изменён с порта по умолчанию',
                sshPortRiskDesc: 'Используется порт 22 по умолчанию. Рекомендуется изменить',
                rootLoginNormalDesc: 'Вход под пользователем root запрещён',
                rootLoginRiskDesc: 'Пользователь root может входить напрямую. Рекомендуется отключить',
                passwordAuthNormalDesc: 'SSH-вход по паролю отключён',
                passwordAuthRiskDesc: 'Вход по паролю разрешён, высокий риск подбора пароля',
                keyAuthNormalDesc: 'SSH-аутентификация по ключу включена',
                keyAuthRiskDesc: 'Ключевая аутентификация отключена. Рекомендуется использовать вход по ключу',
                websiteOverview: 'Обзор сайтов',
                primaryDomain: 'Основной домен',
                expireTime: 'Дата истечения',
                domain: 'Домен',
                issuer: 'Издатель',
                autoRenew: 'Автопродление',
                websiteCount: 'Количество сайтов',
                httpsWebsite: 'HTTPS-сайты',
                certCount: 'Количество сертификатов',
                websiteExpire: 'Истечение сайтов',
                database: 'Базы данных',
                remoteDatabase: 'Удалённые базы данных',
                address: 'Адрес',
                containerResourceUsage: 'Использование ресурсов контейнерами',
                spaceUsage: 'Использованное пространство',
                reclaimable: 'Можно освободить',
                containerReclaimable: 'Контейнеры можно освободить',
                image: 'Образы',
                volume: 'Тома данных',
                buildCache: 'Кэш сборки',
                alert: 'Оповещения',
                alertConfigured: 'Оповещения настроены',
                alertOperations: 'Уведомления оповещений',
                alertTaskCount: 'Задачи оповещений',
                enabledAlertTask: 'Активные задачи',
                disabledAlertTask: 'Отключённые задачи',
                alertChannels: 'Каналы уведомлений',
                alertLogCount: 'Журнал оповещений',
                alertSuccessRate: 'Процент успешных оповещений',
                alertFailedLogs: 'Журнал неудачных оповещений',
                alertPendingLogs: 'Журнал ожидающих синхронизации',
                alertPending: 'Ожидает синхронизации',
                alertTaskStats: 'Статистика задач оповещений',
                alertTaskType: 'Тип оповещения',
                alertLogStatusStats: 'Статус выполнения оповещений',
                alertHealthNormal: 'Норма',
                alertHealthAttention: 'Требует внимания',
                alertHealthRisk: 'Высокий риск',
                alertHealthSummary: 'Состояние оповещений',
                alertHealthNormalReason: 'Задачи оповещений, каналы уведомлений и журналы выполнения в норме',
                alertNoChannelReason: 'Каналы уведомлений не включены',
                alertFailedLogReason: 'Обнаружено {0} записей неудачных оповещений',
                alertPendingReason: '{0} записей оповещений ожидают синхронизации',
                alertDisabledTaskReason: '{0} задач оповещений отключены',
                alertNoTaskReason: 'Задачи оповещений не настроены',
                goAlertConfig: 'Настройки оповещений',
                goAlertLogs: 'Журнал оповещений',
                configureAlertChannel: 'Настроить каналы уведомлений',
                createAlertTask: 'Создать задачу оповещения',
                viewAlertTasks: 'Просмотреть задачи оповещений',
                viewFailedAlertLogs: 'Просмотреть журнал неудачных оповещений',
                viewAlertLogs: 'Просмотреть журнал оповещений',
                alertChannelSummary: 'Включено каналов: {0} / {1}',
                alertTaskEnabledDesc: 'Активных задач: {0}',
                alertTaskSummary: 'Активных: {0}, отключённых: {1}',
                alertLogSummary: 'Успешных: {0}, неудачных: {1}',
                alertPendingDesc: '{0} записей ожидают синхронизации',
                alertLogSuccessDesc: 'Уведомление доставлено',
                alertLogFailedDesc: 'Проверьте настройки канала или маршрут доставки',
                alertLogPendingDesc: 'Офлайн или маршрут синхронизации ожидает обработки',
                failedAlertLogs: 'Журнал неудачных оповещений',
                disabledAlertTasks: 'Отключённые задачи оповещений',
                alertTableDisplayDesc: 'Показано {0} из {1}',
                alertMsg: 'Текст оповещения',
                alertMethod: 'Способ оповещения',
                alertRule: 'Правило оповещения',
                noAlertTask: 'Задачи оповещений отсутствуют',
                noFailedAlertLog: 'Нет записей неудачных оповещений',
                noDisabledAlertTask: 'Нет отключённых задач оповещений',
                alertCronjobType: 'Плановая задача: {0}',
                alertAllTargets: 'Все объекты',
                alertAllDisks: 'Все диски',
                alertAllCertificates: 'Все сертификаты',
                alertAllWebsites: 'Все сайты',
                alertDiskRuleShort: '{0} превышает {1}{2}, {3} раз в день',
                alertAverageRuleShort: 'Среднее за {0} мин. превышает {1}%, {2} раз в день',
                alertTimeRuleShort: 'Срабатывает в течение {0} дней, отправка {1} раз',
                alertSendCountRuleShort: 'Отправка {0} раз в день',
                alertConfigInvalid: 'Некорректная конфигурация',
                scoreCategoryAlert: 'Уведомления оповещений',
                scoreAlertNoTask: 'Задачи оповещений не настроены',
                scoreAlertNoEnabledTask: 'Все задачи оповещений отключены',
                scoreAlertDisabledTask: '{0} задач оповещений отключены',
                scoreAlertNoChannel: 'Каналы уведомлений не включены',
                scoreAlertFailedHigh: 'Обнаружено {0} записей неудачных оповещений',
                scoreAlertFailedMedium: 'Обнаружено {0} записей неудачных оповещений',
                scoreAlertPending: '{0} записей оповещений ожидают синхронизации',
                statAlertDesc: 'Активных задач {0} · каналов {1}',
                assetAlertDesc: '{0} неудачных записей, {1} ожидающих синхронизации',
                failedExecutionRecords: 'Журнал неудачных выполнений',
                taskID: 'ID задачи',
                executeTime: 'Время выполнения',
                backupTasks: 'Задачи резервного копирования',
                systemMetrics: 'Метрики выполнения',
                cpu: 'CPU',
                thresholdPercent: 'Порог {0}%',
                recent24HourPeakPercent: 'Пик за 24 ч: {0}',
                loadAverage: 'Нагрузка за 1 / 5 / 15 мин.: {0} / {1} / {2}',
                sourceMount: 'Точка монтирования {0}',
                storageUsage: 'Использование хранилища',
                localDisk: 'Локальный диск',
                highUsagePeriods: 'Периоды высокой нагрузки',
                timeRange: 'Временной диапазон',
                threshold: 'Порог',
                duration: 'Продолжительность',
                peak: 'Пик',
                scoring: 'Подсчёт баллов',
                counted: 'Учитывается',
                notCounted: 'Не учитывается',
                dataSource: 'Источник данных',
                noHighUsagePeriod: 'Периоды высокой нагрузки отсутствуют',
                monitorDisabledOrNoData: 'Мониторинг хоста отключён или данные отсутствуют',
                systemHealthStatus: 'Состояние рисков хоста за последние 24 часа',
                mainReasons: 'Основные причины',
                viewHostMonitor: 'Просмотреть мониторинг хоста',
                systemHealthAttentionDesc:
                    'За последние 24 часа обнаружено {0} рисковых элементов. Рекомендуется обратить внимание на пиковые значения ресурсов и заполненность дисков.',
                systemHealthNormalDesc: 'Метрики работы хоста за последние 24 часа в норме',
                monitorEnabled: 'Мониторинг включён',
                cpuCoreUsage: '{0} / {1} ядер',
                load1Minute: 'Нагрузка за 1 мин.',
                diskSpaceUsage: 'Использование дискового пространства',
                usedCapacity: 'Использовано / Всего',
                fileSystem: 'Файловая система',
                resourceTrendSummary: 'Сводка динамики ресурсов',
                last24Hours: 'Последние 24 часа',
                granularityHour: 'Шаг: 1 час',
                current: 'Текущее',
                average: 'Среднее',
                totalItems: 'Всего {0} элементов',
                to: 'до',
                hoursShort: '{0} ч',
                minutesShort: '{0} мин',
                websiteStatus: 'Статус сайтов',
                websiteHealthStatus: 'Состояние защиты сайтов',
                websiteHealthNormalReason: 'Сайты, сертификаты, WAF и мониторинг сайтов в норме',
                websiteHealthAttentionDesc:
                    'Обнаружено {0} рисковых элементов. Рекомендуется скорее устранить для обеспечения безопасности и доступности сайтов.',
                websiteHealthNormalDesc: 'Текущие показатели защиты сайтов в норме',
                handleSslRisk: 'Обработать риски сертификатов',
                viewWaf: 'Просмотреть WAF',
                priority: 'Приоритет',
                riskDescription: 'Описание риска',
                deductScore: 'Штрафные баллы',
                remaining: 'Осталось',
                wafSourceIpTop: 'WAF — TOP5 IP-источников перехвата',
                wafAffectedSiteTop: 'TOP5 затронутых сайтов',
                sslRisk: 'Риски сертификатов',
                sslExpiring: 'Срок действия сертификатов истекает',
                includedInReport: 'Включено в отчёт',
                needRenewal: 'Рекомендуется продлить',
                fromExpireInfo: 'Из информации об истечении',
                runningWebsite: 'Работающие сайты',
                fromWebsiteStatus: 'Из статуса списка сайтов',
                stoppedWebsite: 'Остановленные сайты',
                confirmStoppedWebsite: 'Подтвердите, что это ожидаемое поведение',
                expiringWebsite: 'Сайты с истекающим сроком',
                expiringSoon: 'Скоро истекает',
                none: 'Нет',
                noSslRisk: 'Нет сертификатов, требующих обработки',
                websiteProtection: 'WAF и мониторинг сайтов',
                websiteMonitor: 'Мониторинг сайтов',
                waf: 'WAF',
                siteAvailability: 'Доступность запросов',
                monitoredSites: 'Отслеживаемые сайты',
                requestCount: 'Количество запросов',
                abnormalSites: 'Аномальные сайты',
                count5xxSource: 'По количеству запросов 5xx',
                wafIntercept: 'Перехваты WAF',
                websiteMonitorDisabledOrNoData: 'Мониторинг сайтов отключён или данные отсутствуют',
                wafDisabledOrNoData: 'WAF отключён или данные о перехватах отсутствуют',
                serviceEnabledButAbnormal: 'Включено, но состояние ненормальное',
                noWafData: 'Данные о перехватах WAF отсутствуют',
                sourceIP: 'IP-источник',
                hitCount: 'Количество срабатываний',
                level: 'Уровень',
                attackType: 'Тип атаки',
                requestRatio: 'Доля запросов',
                installed: 'Установлено',
                normalRunning: 'Работает нормально',
                failedStart: 'Ошибка запуска',
                manualStopped: 'Остановлено вручную',
                failed: 'Неудачно',
                success: 'Успешно',
                canUpdate: 'Доступно обновление',
                listSeparator: ', ',
                containerCount: 'Количество контейнеров',
                stopped: 'Остановлено',
                abnormal: 'Аномально',
                abnormalContainers: 'Аномальные контейнеры',
                resourceUsage: 'Использование ресурсов',
                exposedContainerPorts: 'Открытые порты',
                portMapping: 'Проброс портов',
                risk: 'Риск',
                noAbnormalContainer: 'Аномальные контейнеры отсутствуют',
                noExposedContainer: 'Открытые порты не обнаружены',
                publicExpose: 'Публичный доступ',
                privateExpose: 'Внутренний проброс',
                resourceHealth: 'Состояние ресурсов выполнения',
                checkTime: 'Время проверки',
                resourceHealthNormalDesc: 'Приложения, базы данных и контейнеры сейчас в норме',
                resourceHealthAttentionDesc:
                    'Обнаружено {0} пунктов внимания. Сначала проверьте остановленные ресурсы и публичные порты.',
                resourceHealthRiskDesc:
                    'Обнаружено {0} пунктов высокого риска. Сначала обработайте сбойные контейнеры или приложения.',
                resourceThresholdContainers: 'Контейнеры с превышением CPU / памяти',
                noThresholdExceededContainer: 'Нет контейнеров, превысивших порог',
                triggerMetric: 'Сработавший показатель',
                resourceReasonAppFailed: '{0} приложений не запустились',
                resourceReasonAppStopped: '{0} приложений остановлены',
                resourceReasonContainerAbnormal: '{0} контейнеров в аномальном состоянии',
                resourceReasonContainerStopped: '{0} контейнеров остановлены',
                resourceReasonPublicPorts: '{0} публичных открытых портов',
                resourceReasonNormal: 'Приложения, базы данных и контейнеры в норме',
                viewAbnormalContainers: 'Показать сбойные контейнеры',
                viewExposedPorts: 'Показать открытые порты',
                viewAppResources: 'Показать ресурсы приложений',
                viewRuntimeResources: 'Показать ресурсы выполнения',
                viewContainerResources: 'Показать ресурсы контейнеров',
                configuredServices: 'Настроенные сервисы',
                publicPrivatePorts: '{0} публичных / {1} внутренних сопоставлений',
                currentDisplayTotal: 'Показано {0} из {1}',
                reclaimableSpace: 'Освобождаемое пространство',
                estimatedReclaimable: 'Можно освободить',
                unusedImageSpace: 'Неиспользуемые образы',
                stoppedContainerSpace: 'Остановленные контейнеры',
                unusedVolumeSpace: 'Неиспользуемые тома',
                buildCacheSpace: 'Кэш сборки Docker',
                executionRecords: 'Записи выполнений',
                successRate: 'Процент успеха',
                failedJobs: 'Неудачные задачи',
                recentRecoveryPoint: 'Последняя точка восстановления',
                disabledCronjobTasks: 'Отключённые плановые задачи',
                remoteCoverage: 'Удалённое покрытие',
                recent7Days: 'Последние 7 дней',
                taskTypeStats: 'Статистика по типам задач',
                total: 'Итого',
                taskTypeDesc: 'Активных {0}, отключённых {1}',
                failedOrAttentionTasks: 'Неудачные или требующие внимания задачи',
                execution: 'Выполнение',
                latestExecution: 'Последнее выполнение',
                remoteBackup: 'Удалённое резервное копирование',
                localOnly: 'Только локально',
                covered: 'Покрыто',
                noAttentionCronjob: 'Нет неудачных или требующих внимания плановых задач',
                cronjobHealth: 'Состояние плановых задач',
                cronjobHealthNormalDesc: 'Выполнение задач и покрытие резервного копирования в норме',
                cronjobHealthAttentionDesc:
                    'Обнаружено {0} пунктов риска. Сначала проверьте отключённые задачи и покрытие бэкапов.',
                cronjobHealthRiskDesc: 'Обнаружено {0} пунктов риска. Сначала обработайте ошибки и отключённые задачи.',
                cronjobReasonFailed: '{0} неуспешных записей',
                cronjobReasonDisabled: '{0} задач отключено',
                cronjobReasonLocalOnlyBackup: '{0} бэкапов только локально',
                cronjobReasonNormal: 'Выполнение задач и покрытие бэкапов в норме',
                riskLow: 'Низкий риск',
                viewFailedRecords: 'Показать сбойные задачи',
                viewCronjobTasks: 'Показать плановые задачи',
                checkBackupTasks: 'Проверить задачи бэкапа',
                generationRule: 'Правила генерации',
                scheduleDaily: 'Ежедневно',
                scheduleDailyDesc: 'Ежедневно в 09:00 генерируется отчёт за последние 24 часа',
                scheduleWeekly: 'Еженедельно',
                scheduleWeeklyDesc: 'Каждый понедельник в 09:00 генерируется отчёт за последние 7 дней',
                scheduleMonthly: 'Ежемесячно',
                scheduleMonthlyDesc: '1-го числа в 09:00 генерируется отчёт за прошлый месяц',
                scheduleCurrentDaily: 'Ежедневно в 09:00 — отчёт за 24 часа · Следующий {0}',
                scheduleCurrentWeekly: 'Каждый понедельник в 09:00 — отчёт за 7 дней · Следующий {0}',
                scheduleCurrentMonthly: '1-го числа в 09:00 — отчёт за прошлый месяц · Следующий {0}',
                notificationMethod: 'Способ уведомления',
                channel: 'Канал',
                receiver: 'Получатель',
                systemThreshold: 'Системный порог',
                metric: 'Показатель',
                currentRule: 'Текущее правило',
                hostMonitor: 'Мониторинг хоста',
                monitorInterval: 'Интервал мониторинга',
                exportSettings: 'Настройки экспорта',
                lastExportReport: 'Последний результат генерации',
                noLastExportReport: 'Записей экспорта отчётов нет',
                lastExportStatus: 'Статус последнего экспорта',
                exportFile: 'Файл экспорта',
                generateTime: 'Время генерации',
                fileSize: 'Размер файла',
                viewExportHistory: 'Просмотреть историю экспорта',
                defaultFormat: 'Формат по умолчанию',
                savePath: 'Каталог сохранения',
                savePathRequired: 'Укажите каталог для сохранения отчёта',
                autoExport: 'Включить автоматический экспорт',
                autoExportDesc: 'После включения отчёт будет автоматически генерироваться ежедневно в 09:00',
                autoExportEnabled: 'Автоматический экспорт включён',
                autoExportDisabled: 'Автоматический экспорт отключён',
                readOnlyPermissionTip:
                    'Текущая учётная запись может только просматривать настройки отчёта. Для изменений обратитесь к администратору.',
                refreshing: 'Обновление',
                exporting: 'Экспорт',
                exportFailed: 'Не удалось экспортировать отчёт',
                generating: 'Генерация',
                saved: 'Сохранено',
                saveFailed: 'Не удалось сохранить настройки',
                generateNow: 'Сгенерировать сейчас',
                generateSuccess: 'Файл отчёта создан: {0}',
                generateFailed: 'Не удалось сгенерировать отчёт',
                enabledStatus: 'Включено',
                disabledStatus: 'Отключено',
                thresholdRule: 'Порог {0}, срабатывает после {1} последовательных раз',
                hours: '{0} ч',
                minutes: '{0} мин',
                seconds: '{0} сек',
                totalExports: 'Всего экспортов',
                successExports: 'Успешных экспортов',
                failedExports: 'Неудачных экспортов',
                reportName: 'Название отчёта',
                exportFormat: 'Формат экспорта',
                operator: 'Оператор',
                triggerType: 'Способ запуска',
                filePath: 'Путь к файлу',
                manualExport: 'Вручную',
                scheduledExport: 'По расписанию',
                exportResult: 'Результат экспорта',
                exportDetail: 'Описание экспорта',
            },
        },
        user: {
            user: 'Пользователь',
            userInfo: 'Информация о пользователе',
            userManage: 'Управление пользователями',
            superAdmin: 'Суперадминистратор',
            superAdminDesc:
                'Имеет полные права управления системой и может управлять всеми ресурсами и конфигурациями.',
            nodeAdmin: 'Администратор узла',
            nodeAdminDesc:
                'Имеет права управления указанными узлами и может управлять ресурсами и конфигурациями внутри этих узлов.',
            readOnly: 'Только чтение',
            readOnlyDesc: 'Имеет доступ только на просмотр всех системных ресурсов и настроек.',
            bindNode: 'Привязать узел',
            boundUsers: 'Привязанные пользователи',
            role: 'Роль',
            roleName: 'Название',
            permission: 'Разрешения',
            permissionDuplicate: 'Каждому узлу можно назначить только одну роль',
            nodeAdminMasterConfirm:
                'Права администратора узла на главном узле являются повышенными. Назначайте их осторожно с учетом реальных потребностей администрирования.',
            permissionLinkageTip:
                'При наличии зависимостей связанные права выбираются автоматически; после ручного снятия некоторые функции могут показать "У текущего пользователя нет разрешения".',
            allViewPermissionHelper: 'Предоставляет все права просмотра для AI Gateway.',
            apiKeyViewPermissionHelper: 'Разрешает просматривать только API Key AI Gateway.',
            masterOnlyPermission: 'Права главного узла',
            masterOnlyPermissionHelper: 'Это право действует только на главном узле.',
            view: 'Просмотр',
            manage: 'Управление',
            authManage: 'Управление аутентификацией',
            auth: {
                providerNavigation: 'Поставщики аутентификации',
                defaultNode: 'Узел по умолчанию',
                defaultNodePlaceholder: 'Выберите узел',
                defaultNodeHelper: 'Только для новых пользователей.',
                defaultNodeRequired: 'Выберите допустимый узел по умолчанию.',
                nodesLoadFailed: 'Не удалось загрузить узлы. Повторите попытку перед выбором узла по умолчанию.',
                nodeHandling: 'Обработка узла',
                assignDefaultNode: 'Назначить узел по умолчанию: {node}',
                keepExistingNode: 'Сохранить существующие разрешения узла',
                providers: {
                    ldap: 'AD/LDAP',
                    passkey: 'Passkey',
                    radius: 'Radius',
                    oidc: 'OIDC',
                    saml2: 'SAML2',
                    cas: 'CAS',
                    oauth2: 'OAuth2',
                    dingtalk: 'DingTalk',
                    feishu: 'Feishu',
                    wecom: 'WeCom',
                },
                providerDescriptions: {
                    ldap: 'Совместимость с Active Directory, OpenLDAP и другими службами LDAP.',
                    passkey: 'Используйте учетные данные устройства для входа без пароля',
                    radius: 'Аутентификация доступа к сети через службу Radius',
                    oidc: 'Подключите корпоративный единый вход с помощью OpenID Connect',
                    saml2: 'Используйте SAML2 для федерации корпоративных удостоверений.',
                    cas: 'Подключите централизованную службу аутентификации для единого входа',
                    oauth2: 'Подключите совместимую службу идентификации OAuth2.',
                    dingtalk: 'Используйте идентификатор организации DingTalk и вход с помощью QR',
                    feishu: 'Используйте идентификацию организации Feishu и синхронизацию учетных записей.',
                    wecom: 'Аутентификация с использованием удостоверения участника WeCom',
                },
                planned: 'Планируется',
                plannedTitle: 'Настройки аутентификации {0}',
                plannedDesc: 'Этот поставщик аутентификации запланирован и пока недоступен.',
                oidc: {
                    accessMode: 'Режим подключения',
                    accessModeDesc: 'Используйте стандарт Discovery, если поставщик удостоверений поддерживает его.',
                    actionCreate: 'Создать пользователя',
                    actionKeepName: 'Сохранить текущее имя пользователя',
                    actionPending: 'Ожидание результата',
                    actionReject: 'Отклонить вход',
                    actionUpdate: 'Обновить идентификационную информацию',
                    advanced: 'Расширенные настройки',
                    advancedDesc:
                        'Сохраняйте безопасные настройки по умолчанию, если поставщик не требует опции совместимости.',
                    assignDefaultRole: 'Назначить роль по умолчанию: {role}.',
                    authorizationEndpoint: 'Authorization Endpoint',
                    authorizationEndpointInvalid: 'Введите действительный Authorization Endpoint.',
                    authorizationFlow: 'Процесс авторизации',
                    automatic: 'Автоматический',
                    automaticPolicy: 'Политика автоматической обработки',
                    automaticPolicyDesc:
                        'Эти правила применяются серверной частью и не являются переключателями администратора.',
                    basic: 'Основные настройки',
                    basicDesc: 'Выберите режим провайдера, затем настройте клиент и обратный вызов.',
                    browserTest: 'Тестовый вход в браузере',
                    browserTestConflict: 'Личность подтверждена, но имя пользователя уже занято.',
                    browserTestConflictHelper:
                        'Сопоставленное имя пользователя принадлежит другой идентичности и не будет присвоено.',
                    browserTestExpired: 'Срок проверки браузера истек',
                    browserTestExpiredHelper:
                        'Запустите новый тест браузера и завершите авторизацию до истечения срока его действия.',
                    browserTestFailed: 'Проверка браузера не удалась',
                    browserTestFailedHelper:
                        'Не удалось выполнить предварительный просмотр личности. Просмотрите локализованную серверную ошибку.',
                    browserTestIsolation:
                        'Выполняется полный цикл реальной авторизации, но пользователи не создаются и не обновляются, роли не назначаются и аутентифицированный сеанс панели не создаётся.',
                    browserTestPopupBlocked:
                        'Разрешите всплывающие окна для этого сайта, затем снова запустите проверку браузера.',
                    browserTestPopupClosed: 'Окно авторизации было закрыто до завершения теста.',
                    browserTestSuccess: 'Проверка Provider прошла успешно',
                    browserTestSuccessHelper:
                        'Сопоставление удостоверений было предварительно просмотрено без изменения пользователей или сеансов.',
                    browserTestTitle: 'OIDC тестовый вход в браузер',
                    browserTestWaiting: 'Ожидание авторизации Provider',
                    browserTestWaitingHelper:
                        'Завершите вход в новом окне браузера. Эта страница будет обновляться автоматически.',
                    callbackCopied: 'Обратный вызов OIDC URL скопирован.',
                    callbackURL: 'Обратный звонок URL',
                    callbackURLHelper:
                        'Добавьте этот URL в список разрешенных URL обратного вызова клиента у поставщика удостоверений.',
                    cancelClearSecret: 'Отменить очистку',
                    clearSecret: 'Очистить секрет',
                    clearSecretConfirm: 'Client Secret будет удален только после сохранения. Продолжать?',
                    clientAuthMethod: 'Метод аутентификации клиента',
                    clientAuthMethodHelper:
                        'Выберите метод аутентификации, настроенный для этого клиента у поставщика удостоверений.',
                    clientAuthMethodRequired: 'Выберите метод аутентификации клиента.',
                    clientID: 'Client ID',
                    clientIDRequired: 'Введите Client ID.',
                    clientSecret: 'Client Secret',
                    clockSkew: 'Допуск времени токена',
                    clockSkewHelper:
                        'Допускает небольшую разницу времени между поставщиком удостоверений и 1Panel. Оставьте значение по умолчанию 60 секунд.',
                    clockSkewRequired: 'Укажите допуск времени токена.',
                    compatibilityMode: 'Режим совместимости',
                    compatibilityModeHelper:
                        'Используйте только для неполных Discovery или переписанных конечных точек. Проверка ядра OIDC остается включенной.',
                    configurationFailedHelper:
                        'Тест провалился. На странице отображается только локализованная серверная ошибка.',
                    configurationFailedTag: 'Тест не пройден',
                    configurationHighRiskPassed:
                        'Конфигурация прошла успешно, но содержит параметры совместимости с высоким уровнем риска.',
                    configurationHighRiskTag: 'Конфигурация высокого риска пройдена',
                    configurationNotTested: 'Текущая конфигурация не тестировалась.',
                    configurationNotTestedTag: 'Не проверено',
                    configurationPassed: 'Текущая конфигурация прошла проверку безопасности и возможностей.',
                    configurationPassedTag: 'Тест пройден',
                    configurationStaleHelper: 'Конфигурация изменена. Повторите проверку перед сохранением.',
                    configurationStaleTag: 'Срок действия результата истек',
                    configurationTestMeta:
                        'Протестировано на {time}; завершено за {duration} мс. Необработанные ответы Provider не ​​сохраняются.',
                    configurationTestResult: 'Результат теста конфигурации',
                    configurationTestResultDesc:
                        'При этом проверяется только Discovery и его возможности; он не обменивает код авторизации и не подтверждает Client Secret. Используйте тестовый вход в браузер для сквозной проверки.',
                    configurationTestSuccess: 'Тест конфигурации OIDC пройден успешно.',
                    configurationTesting: 'Тестирование текущей конфигурации OIDC…',
                    configurationTestingTag: 'Тестирование',
                    configureSecret: 'Настроить секрет',
                    conflictExistingRename: 'Связанный subject возвращает новый name, который занят.',
                    conflictExistingRenameResult:
                        'Сохраните существующий User.Name и разрешите связанному пользователю войти в систему.',
                    conflictLDAP: 'Пользователь LDAP',
                    conflictLocal: 'Локальный пользователь',
                    conflictNewAvailable: 'Доступны новый subject и сопоставленный name.',
                    conflictNewAvailableResult: 'Создайте корпоративного пользователя и назначьте роль по умолчанию.',
                    conflictNone: 'Нет конфликта',
                    conflictOIDC: 'Еще одна личность OIDC',
                    conflictOccupied:
                        'Сопоставленный name принадлежит локальному LDAP или другому идентификатору OIDC.',
                    conflictOccupiedResult:
                        'Отклонить новую личность; никогда не связывать и не объединять автоматически',
                    conflictType: 'Тип конфликта',
                    connectionSecurity: 'Безопасность соединения',
                    connectionSecurityDesc: 'Политика TLS применяется к запросам Discovery, Token, JWKS и UserInfo.',
                    connectionTest: 'Проверка подключения и конфигурации',
                    connectionTestCompatibilityDesc:
                        'Проверьте пользовательские конечные точки и политику безопасности протокола.',
                    connectionTestStandardDesc: 'Конечные точки и возможности автоматически обнаруживаются из Issuer.',
                    connectionTestTab: 'Проверка подключения',
                    customCA: 'Пользовательский CA',
                    customCAHelper:
                        'Применяется только к этому источнику аутентификации и никогда не записывается в журналы.',
                    customCARequired: 'Предоставьте собственный сертификат CA.',
                    defaultRole: 'Роль по умолчанию',
                    defaultRoleHelper:
                        'Назначается только при первом создании пользователя; последующие входы не изменяют роль.',
                    defaultRolePlaceholder: 'Выберите роль',
                    defaultRoleRequired: 'Выберите допустимую роль по умолчанию.',
                    disableAfterSave: 'OIDC будет отключен после сохранения.',
                    disableConfirm:
                        'Отключение OIDC немедленно аннулирует доступ пользователей этого источника. Продолжать?',
                    disableDiscardConfirm:
                        'Отключение OIDC является экстренным действием: оно лишь закрывает вход в систему и немедленно аннулирует доступ для пользователей этого источника. Другие несохраненные изменения на этой странице, включая изменения Client Secret, будут отменены. Продолжать?',
                    disableTitle: 'Отключить OIDC',
                    disabled: 'Отключено',
                    discoveryAllowlist: 'Discovery ∩ список разрешений безопасности',
                    enable: 'Включить',
                    enableAfterSave: 'OIDC будет включен после успешного сохранения.',
                    enabled: 'Включено',
                    endSessionEndpoint: 'End Session Endpoint',
                    endSessionEndpointHelper:
                        'Сохранено для будущего использования; Выход из системы, инициированный Provider, не включен в эту версию.',
                    endSessionEndpointInvalid: 'Введите действительный End Session Endpoint.',
                    endpointDiscoveryPlaceholder: 'Отображается после проверки подключения',
                    firstLogin: 'Первый вход',
                    firstLoginPolicy:
                        'Создайте локального корпоративного пользователя и назначьте настроенную роль по умолчанию.',
                    fixedAuthorizationCode: 'Authorization Code Flow',
                    fixedNoTokenPersistence: 'Token, Claims и verifier никогда не сохраняются.',
                    fixedSecurityPolicy: 'Всегда соблюдается; не требуется настройка',
                    fixedStateNonce: 'Одноразовые state и nonce',
                    fixedTokenValidation: 'Подпись ID Token и проверка Claims',
                    highRiskSaveConfirm:
                        'Эта включенная конфигурация содержит параметры совместимости с высоким уровнем риска. Убедитесь, что они требуются для изолированной среды.',
                    highRiskTitle: 'Конфигурация OIDC высокого риска',
                    hs256Compatibility: 'HS256 (совместимость)',
                    hs256KeyHelper:
                        'HS256 всегда использует Client Secret этого источника и не принимает отдельный ключ подписи.',
                    hs256Warning:
                        'HS256 использует общий симметричный секрет для подписей ID Token. Используйте его только в том случае, если Provider не ​​может использовать асимметричный алгоритм.',
                    identityBindingPolicy:
                        'Идентичность фиксируется по AuthSourceID + issuer + subject. Совпадение имени пользователя никогда не приводит к привязке другой учетной записи.',
                    identityMissing: 'Идентификатор неактивен',
                    issuer: 'Issuer URL',
                    issuerHelper:
                        'Значение iss ID Token и Discovery issuer должны точно соответствовать этому значению.',
                    issuerInvalid: 'Введите действительный HTTP или HTTPS Issuer URL без запроса или фрагмента.',
                    issuerRequired: 'Введите Issuer URL.',
                    jwksRotation: 'Автоматическое вращение JWKS',
                    jwksURI: 'JWKS URI',
                    jwksURIHelper: 'Требуется для асимметричной подписи, когда источником ключа является JWKS.',
                    jwksURIInvalid: 'Введите действительный JWKS URI для выбранного источника ключа подписи.',
                    keepExistingRole: 'Сохраните существующие роли и локальные разрешения.',
                    localSecurityData: 'Данные локальной безопасности',
                    localSecurityDataPolicy:
                        'Никогда не перезаписывайте роли, MFA, API Keys, Passkeys или локальные разрешения.',
                    localCredentialsManaged:
                        'Имя пользователя и локальный пароль управляются OIDC и не могут быть изменены здесь. Роли, разрешения, MFA, API Keys и Passkeys остаются локальными.',
                    localUserFields: 'Поля локального пользователя',
                    localUserFieldsDesc:
                        'Первый выпуск отображает только User.Name и не использует выражение сопоставления JSON.',
                    loginWith: 'Войти через {provider}',
                    manualEndpoints: 'Пользовательские конечные точки',
                    manualEndpointsDesc:
                        'Используйте только в том случае, если Discovery неполный или вышестоящий шлюз перезаписывает конечные точки.',
                    mappingResult: 'Результат сопоставления',
                    mode: 'Режим подключения',
                    modeRequired: 'Выберите режим подключения.',
                    nameClaim: 'Claim имени пользователя',
                    nameClaimHelper: 'Укажите поле с именем пользователя, например preferred_username.',
                    nameClaimRequired: 'Введите Claim имени пользователя.',
                    nameConflict: 'Политика конфликта имен',
                    panelURL: '1Panel общедоступный URL',
                    panelURLHTTPWarning:
                        'HTTP не ​​защищает ответ авторизации. Используйте его только в изолированной частной среде, разрешенной Provider.',
                    panelURLHelper:
                        'Укажите адрес, по которому пользователи открывают 1Panel. Он используется для формирования URL обратного вызова.',
                    panelURLInvalid: 'Введите источник, содержащий только схему, хост и дополнительный порт.',
                    panelURLRequired: 'Введите общедоступный 1Panel URL.',
                    pkceDisabled: 'Отключено (только совместимость)',
                    pkceDisabledWarning: 'Отключение PKCE снижает защиту от перехвата кода авторизации.',
                    pkceHelper: 'Предпочитаю S256. Метод вызова plain никогда не предлагается.',
                    pkceS256: 'S256 (рекомендуется)',
                    plannedHandling: 'Плановая обработка',
                    privateNetworkIdP: 'IdP частной сети',
                    privateNetworkIdPHelper:
                        'Явно разрешает частные адреса; метаданные, петля, локальная ссылка, перенаправление и повторное связывание DNS остаются заблокированными.',
                    privateNetworkWarning: 'Для этого источника аутентификации включен доступ к частной сети.',
                    protocolCompatibility: 'Совместимость протоколов',
                    protocolCompatibilityDesc: 'Проверка подписи ID Token никогда не может быть отключена.',
                    providerAndClient: 'Provider и клиент',
                    providerAndClientDesc:
                        'Client Secret можно только заменить или очистить, и страница никогда не возвращает его.',
                    providerCapabilities: 'Возможности Provider',
                    recentTestSuccess: 'Последний тест прошел успешно: {0}',
                    recommended: 'Рекомендуется',
                    rejectPlain: 'plain отклонен',
                    replaceSecret: 'Заменить секрет',
                    requestAndClaims: 'Запросы и атрибуты',
                    requestAndClaimsDesc:
                        'Настройте области авторизации, дополнение сведений о пользователе и параметры запросов.',
                    requestTimeout: 'Тайм-аут запроса',
                    requestTimeoutRequired: 'Введите тайм-аут запроса.',
                    restore: 'Восстановить',
                    restored: 'Были восстановлены последние сохраненные настройки OIDC.',
                    result: 'Результат',
                    rolesLoadFailed:
                        'Не удалось загрузить роли. Повторите попытку, прежде чем выбирать роль по умолчанию.',
                    roleHandling: 'Обработка ролей',
                    scenario: 'Сценарий',
                    scopes: 'Области авторизации',
                    scopesHelper: 'Необходимо включить openid. Разделяйте несколько областей пробелами.',
                    scopesRequired: 'Scopes должен включать openid.',
                    seconds: 'секунды',
                    secretClearHelper:
                        'После очистки потребуется новый Client Secret, прежде чем OIDC можно будет снова включить.',
                    secretConfigured: 'Настроен',
                    secretNotConfigured: 'Не настроено',
                    secretPlaceholder: 'Введите новый Client Secret',
                    secretReplaceHelper:
                        'При сохранении новый секрет заменит прежнее значение. Также обновите Client Secret у OIDC-провайдера.',
                    secretRequiredHelper: 'Настройте Client Secret перед включением OIDC.',
                    secretRequiredToEnable: 'Настройте Client Secret перед включением OIDC.',
                    secretSavedHelper:
                        'Хранится в зашифрованном виде. Оставьте поле пустым, чтобы сохранить текущий секрет.',
                    secretWaiting: 'Ожидание ввода',
                    secretWillClear: 'Будет очищено',
                    secretWillReplace: 'Будет заменен',
                    signingAlgorithm: 'Алгоритм подписи ID Token',
                    signingAlgorithmHelper: 'Доступны только алгоритмы из белого списка внутренней безопасности.',
                    signingKey: 'Ключ подписи',
                    signingKeyClientSecret: 'Client Secret (только HS256)',
                    signingKeyJWKS: 'JWKS URI с автоматической ротацией',
                    signingKeySource: 'Источник ключа подписи',
                    signingKeySourceHelper:
                        'Предпочтительно использовать JWKS. Статический открытый ключ нельзя ротировать автоматически.',
                    signingKeyStatic: 'Статический открытый ключ JWK или PEM.',
                    standardDiscovery: 'Стандартный OIDC Discovery',
                    standardDiscoveryDesc:
                        '1Panel обнаруживает конечные точки и возможности и не сохраняет необработанный документ.',
                    standardMode: 'Стандартный режим',
                    standardModeHelper:
                        'Откройте для себя конечные точки, возможности подписи и поддержку PKCE с помощью Issuer.',
                    standardProtocolPolicy: 'Стандартная политика протокола',
                    standardProtocolPolicyDesc:
                        'Возможности подписи согласовываются автоматически; ключ подписи здесь не введен.',
                    staticSigningKey: 'Статический открытый ключ подписи',
                    staticSigningKeyHelper:
                        'Принимается только материал открытого ключа. Выполните ротацию вручную при изменении ключа Provider.',
                    staticSigningKeyPlaceholder: 'Вставьте открытый ключ JWK, JWKS JSON или PEM.',
                    staticSigningKeyRequired: 'Предоставьте статический открытый ключ подписи.',
                    staticSigningKeyWarning:
                        'Статический ключ подписи нельзя ротировать автоматически; обновите его до ротации ключей Provider.',
                    settingLoadFailed: 'Не удалось загрузить настройки OIDC.',
                    settingLoadFailedHelper:
                        'Форма заблокирована, чтобы избежать сохранения пустой конфигурации по умолчанию поверх текущих настроек. Повторите попытку после восстановления соединения.',
                    subsequentLogin: 'Последующий вход',
                    subsequentLoginPolicy:
                        'Найдите привязку по subject и обновляйте только User.Name, когда новое имя будет доступно.',
                    testBeforeBrowserTest: 'Проверьте текущую конфигурацию перед запуском проверки входа в браузер.',
                    testBeforeEnable: 'Перед сохранением изменений конфигурации проверьте текущую конфигурацию.',
                    testConfiguration: 'Проверить конфигурацию',
                    testDiscovery: 'Проверить Discovery',
                    tlsCustomCA: 'HTTPS · Пользовательский сертификат CA',
                    tlsPrivateHTTP: 'HTTP · Только частная сеть (опасно)',
                    tlsPrivateHTTPWarning:
                        'HTTP не ​​обеспечивает транспортного шифрования и ограничен явно разрешенными частными целями.',
                    tlsSkipVerify: 'HTTPS · Пропустить проверку сертификата (опасно)',
                    tlsSystem: 'HTTPS · Проверка сертификата системы (рекомендуется)',
                    tokenEndpoint: 'Token Endpoint',
                    tokenEndpointInvalid: 'Введите действительный Token Endpoint.',
                    transportSecurity: 'Транспортная безопасность',
                    transportSecurityHelper:
                        'Предпочитаю HTTPS. Частный HTTP также требует явного доступа к private-network.',
                    unsavedChanges: 'Есть несохраненные изменения OIDC.',
                    usedClaim: 'Claim б/у',
                    userInfoEndpoint: 'UserInfo Endpoint',
                    userInfoEndpointHelper:
                        'Если поле имени пользователя отсутствует, система дополнит его через эту конечную точку. Оставьте поле пустым, чтобы не использовать дополнение.',
                    userInfoEndpointInvalid: 'Введите допустимый UserInfo Endpoint.',
                    userMapping: 'Настройки пользователя',
                    userMappingDesc:
                        'Настройте сопоставление имени пользователя OIDC, а также узел и роль по умолчанию для создания пользователя при первом входе.',
                },
                saml2: {
                    actionCreate: 'Создать пользователя',
                    actionPending: 'Ожидание результата',
                    actionReject: 'Отклонить вход',
                    actionReuse: 'Использовать привязанного пользователя',
                    assignDefaultRole: 'Назначить роль по умолчанию: {role}.',
                    basic: 'Основные настройки',
                    basicDesc: 'Настройте параметры, необходимые большинству стандартных поставщиков SAML2.',
                    browserTest: 'Проверить вход',
                    browserTestConflict: 'Личность подтверждена, но имя пользователя уже занято.',
                    browserTestConflictHelper:
                        'Сопоставленное имя пользователя принадлежит другой идентичности и не будет присвоено.',
                    browserTestExpired: 'Срок проверки браузера истек',
                    browserTestExpiredHelper:
                        'Запустите новый тест браузера и завершите авторизацию до истечения срока его действия.',
                    browserTestFailed: 'Проверка браузера не удалась',
                    browserTestFailedHelper:
                        'Не удалось выполнить предварительный просмотр личности. Просмотрите локализованную серверную ошибку.',
                    browserTestIsolation:
                        'Выполняется полный цикл реальной авторизации, но пользователи не создаются и не обновляются, роли не назначаются и аутентифицированный сеанс панели не создаётся.',
                    browserTestPopupBlocked:
                        'Разрешите всплывающие окна для этого сайта, затем снова запустите проверку браузера.',
                    browserTestPopupClosed: 'Окно авторизации было закрыто до завершения теста.',
                    browserTestSuccess: 'Проверка Provider прошла успешно',
                    browserTestSuccessHelper:
                        'Сопоставление удостоверений было предварительно просмотрено без изменения пользователей или сеансов.',
                    browserTestTitle: 'SAML2 тестовый вход в браузер',
                    browserTestWaiting: 'Ожидание авторизации Provider',
                    browserTestWaitingHelper:
                        'Завершите вход в новом окне браузера. Эта страница будет обновляться автоматически.',
                    certificateFileInvalid: 'Выберите корректный файл сертификата PEM, CRT или CER.',
                    configured: 'Настроено',
                    configurationFailedHelper:
                        'Тест провалился. На странице отображается только локализованная серверная ошибка.',
                    configurationNotTested: 'Текущая конфигурация не тестировалась.',
                    configurationPassed: 'Текущая конфигурация прошла проверку безопасности и возможностей.',
                    configurationStaleHelper: 'Изменены настройки аутентификации. Проверьте текущий проект еще раз.',
                    configurationTestSuccess: 'Тест конфигурации SAML2 пройден успешно.',
                    configurationTesting: 'Тестирование текущей конфигурации SAML2…',
                    conflictLDAP: 'Пользователь LDAP',
                    conflictLocal: 'Локальный пользователь',
                    conflictNone: 'Нет конфликта',
                    conflictOIDC: 'Еще одна личность OIDC',
                    conflictSAML2: 'Другая учетная запись SAML2',
                    conflictType: 'Тип конфликта',
                    credentialFileReadFailed: 'Не удалось прочитать файл учетных данных.',
                    credentialFileTooLarge: 'Размер файлов учетных данных не должен превышать 256 КиБ.',
                    credentialsRequired: 'Настройте закрытый ключ и сертификат SP.',
                    defaultRole: 'Роль нового пользователя',
                    defaultRoleHelper:
                        'Назначается только при первом создании; последующие входы сохраняют локальные роли, MFA и права.',
                    defaultRolePlaceholder: 'Выберите роль',
                    defaultRoleRequired: 'Выберите допустимую роль по умолчанию.',
                    disableConfirm:
                        'Отключение SAML2 немедленно отклоняет новые входы и аннулирует пользовательские сеансы. Продолжить?',
                    disableDiscardConfirm:
                        'Отключение SAML2 отменяет другие несохраненные изменения на этой странице и немедленно аннулирует пользовательские сеансы. Продолжить?',
                    disableTitle: 'Отключить SAML2',
                    disabled: 'Отключено',
                    enable: 'Включить',
                    enabled: 'Включено',
                    idpMetadata: 'Метаданные IdP',
                    idpMetadataDesc: 'Укажите URL или вставьте XML. Если заполнены оба поля, используется URL.',
                    keepExistingRole: 'Сохраните существующие роли и локальные разрешения.',
                    loginWith: 'Войти через {provider}',
                    mappingResult: 'Результат сопоставления',
                    metadataRequired: 'Укажите URL или XML метаданных IdP.',
                    metadataURLHelper: 'Сервер загружает и проверяет метаданные при тестировании и сохранении.',
                    metadataURLInvalid: 'Введите корректный HTTPS URL метаданных без учетных данных и фрагмента.',
                    metadataURLRecommended: 'URL метаданных (рекомендуется)',
                    metadataXML: 'XML метаданных',
                    metadataXMLHelper: 'Используйте, если IdP не предоставляет доступный URL метаданных.',
                    metadataXMLInvalid: 'Введите корректный XML метаданных EntityDescriptor.',
                    metadataXMLPlaceholder: 'Вставьте <EntityDescriptor>...</EntityDescriptor>',
                    nameAttribute: 'Атрибут имени пользователя',
                    nameAttributeHelper:
                        'Считывает этот атрибут из проверенного SAML Assertion и сопоставляет его с именем пользователя 1Panel.',
                    nameAttributePlaceholder: 'Например: uid, username или account',
                    nameAttributeRequired: 'Введите атрибут имени пользователя.',
                    notConfigured: 'Не настроено',
                    or: 'или',
                    pageDesc: 'Подключите корпоративный SSO через метаданные IdP и настройте его на одной странице.',
                    plannedHandling: 'Плановая обработка',
                    privateKeyFileInvalid: 'Выберите корректный файл закрытого ключа PEM.',
                    recentTestSuccess: 'Последний тест прошел успешно: {0}',
                    restore: 'Восстановить',
                    restored: 'Были восстановлены последние сохраненные настройки SAML2.',
                    roleHandling: 'Обработка ролей',
                    rolesLoadFailed:
                        'Не удалось загрузить роли. Повторите попытку, прежде чем выбирать роль по умолчанию.',
                    selectFile: 'Выбрать файл',
                    serviceStatus: 'Состояние службы',
                    serviceStatusDesc: 'Перед включением SAML2 текущая конфигурация должна пройти проверку.',
                    settingLoadFailed: 'Не удалось загрузить настройки SAML2.',
                    settingLoadFailedHelper:
                        'Форма заблокирована, чтобы избежать сохранения пустой конфигурации по умолчанию поверх текущих настроек. Повторите попытку после восстановления соединения.',
                    spCertificate: 'Сертификат SP',
                    spCertificateHelper:
                        'Публикуется в метаданных SP, чтобы IdP мог проверять запросы на вход и выход.',
                    spCredentials: 'Закрытый ключ и сертификат SP',
                    spCredentialsDesc:
                        'Используются для подписи сообщений входа и выхода. Политика подписи и проверки задана сервером.',
                    spEntityID: 'SP Entity ID',
                    spEntityIDHelper:
                        'Уникальный идентификатор SP. Должен совпадать с Entity ID или Audience в IdP и одновременно служит URL метаданных SP.',
                    acsURL: 'ACS URL',
                    sloURL: 'SLO URL',
                    spPrivateKey: 'Закрытый ключ SP',
                    spPrivateKeyHelper:
                        'Используется для подписи AuthnRequest и сообщений выхода. Ключ хранится в зашифрованном виде и никогда не отображается.',
                    syncLogout: 'Синхронный выход',
                    syncLogoutHelper: 'Выход из 1Panel или IdP также завершает сеанс на другой стороне.',
                    testBeforeBrowserTest: 'Проверьте текущую конфигурацию перед запуском проверки входа в браузер.',
                    testBeforeEnable:
                        'Проверьте текущую конфигурацию, прежде чем включать или сохранять важные изменения.',
                    testConfiguration: 'Проверить конфигурацию',
                    unsavedChanges: 'Есть несохраненные изменения SAML2.',
                    usedAttribute: 'Сопоставление имени пользователя',
                    usersAndRoles: 'Пользователи и роли',
                    usersAndRolesDesc:
                        'Настройте сопоставление имени пользователя панели, а также узел и роль по умолчанию для создания пользователя при первом входе.',
                },
                ldap: {
                    basic: 'Основные настройки',
                    loginTitle: 'Вход через LDAP',
                    loginWith: 'Войти через LDAP',
                    backToLocalLogin: 'Вернуться ко входу в панель',
                    enable: 'Включить',
                    enabled: 'Включено',
                    disabled: 'Отключено',
                    connection: 'Базовое подключение',
                    connectionDesc:
                        'Настройте службу каталогов и учетную запись привязки, используемую для поиска пользователей.',
                    serverURL: 'URL-адрес сервера',
                    serverURLHelper: 'Поддерживает URL-адреса ldap:// и ldaps://.',
                    userBaseDN: 'Пользователь Base DN',
                    userBaseDNHelper:
                        'Запуск DN для поиска пользователей LDAP; это может быть OU, CN или корень домена DN.',
                    bindDN: 'Привязать DN',
                    bindPassword: 'Пароль',
                    passwordSaved: 'Оставьте поле пустым, чтобы сохранить сохраненный пароль.',
                    userSearch: 'Поиск пользователей',
                    userSearchDesc:
                        'Установите базу поиска пользователей и фильтр, затем сопоставьте атрибут LDAP, используемый как 1Panel name.',
                    userFilter: 'Пользовательский фильтр',
                    userFilterTooltip:
                        'Замените %(user)s экранированным именем пользователя или на * для полного чтения каталога.',
                    userFilterHelper: 'Имена пользователей экранируются перед вставкой в ​​фильтр LDAP.',
                    attributeMap: 'Сопоставление атрибутов',
                    attributeMapTooltip: 'Сопоставление JSON поля 1Panel name с атрибутом LDAP.',
                    attributeMapHelper: 'Установите атрибут LDAP, сопоставленный с полем 1Panel name.',
                    advanced: 'Расширенные настройки',
                    advancedDesc: 'Настройте разбиение запросов TLS и LDAP.',
                    strictSync: 'Строгая синхронизация',
                    strictSyncTooltip:
                        'После полной обработки статус аутентификации пользователей, отсутствующих в этом источнике LDAP, помечается как «Не найден в LDAP», но пользователи не удаляются.',
                    strictSyncHelper:
                        'Применяется только к успешно завершенной полной обработке. Импорт выбранных пользователей не изменяет статус аутентификации других пользователей.',
                    skipTLSVerify: 'Пропустить проверку TLS',
                    skipTLSVerifyTooltip: 'Отключите проверку сертификата для соединений LDAPS.',
                    connectTimeout: 'Таймаут соединения (секунды)',
                    searchPageSize: 'Размер страницы запроса LDAP',
                    restore: 'Восстановить',
                    testConnection: 'Тестовое соединение',
                    testLogin: 'Тестовый вход',
                    userImport: 'Импортировать пользователей',
                    saveBeforeImport: 'Сохраните текущие настройки AD/LDAP перед импортом пользователей.',
                    format: 'Формат',
                    restoreExample: 'Пример восстановления',
                    mappingValid: 'Действителен JSON; name настроен.',
                    mappingInvalid: 'Введите действительный JSON.',
                    mappingObject: 'Сопоставление атрибутов должно быть объектом JSON.',
                    mappingOnlyName: 'Поддерживается только сопоставление name.',
                    mappingStringValues: 'Каждый сопоставленный атрибут должен быть строкой.',
                    mappingNameRequired: 'name должен быть непустой строкой.',
                    restored: 'Последние сохраненные настройки были восстановлены.',
                    connectionTestSuccess: 'Проверка соединения LDAP прошла успешно.',
                    recentTestSuccess: 'Последний тест прошел успешно: {0}',
                    recentTestFailed: 'Последний тест не пройден: {0}',
                    serverURLRequired: 'Введите URL-адрес сервера LDAP.',
                    serverURLInvalid: 'Используйте действительный URL-адрес ldap:// или ldaps://.',
                    userBaseDNRequired: 'Введите пользователя Base DN.',
                    bindDNRequired: 'Введите привязку DN.',
                    passwordRequired: 'Введите пароль.',
                    userFilterRequired: 'Введите фильтр пользователей.',
                    connectTimeoutRequired: 'Введите тайм-аут соединения.',
                    searchPageSizeRequired: 'Введите размер страницы запроса LDAP.',
                    sync: {
                        title: 'Запланированная синхронизация',
                        description:
                            'Чтение полного каталога LDAP по расписанию и поддержка импортированных пользователей LDAP в 1Panel.',
                        enable: 'Включить расписание',
                        enableHelper:
                            'При отключении автоматическое выполнение останавливается; ручная синхронизация остается доступной.',
                        schedule: 'Расписание',
                        daily: 'Ежедневно',
                        weekly: 'Еженедельно',
                        customCron: 'Пользовательский Cron',
                        preview: 'Предварительный просмотр',
                        previewTitle: 'Следующие 5 запусков',
                        previewEmpty: 'Нет времени выполнения',
                        cronHelper:
                            'Используйте стандартное выражение Cron из пяти полей: минуты, часы, день, месяц, день недели.',
                        autoImport: 'Импортировать новых пользователей',
                        autoImportHelper:
                            'Если этот параметр отключен, для импортированных пользователей LDAP сохраняются только идентификаторы каталогов и статус; новые пользователи не создаются.',
                        defaultRole: 'Новая роль пользователя',
                        defaultRolePlaceholder: 'Выберите роль',
                        defaultRoleHelper:
                            'Применяется только к пользователям, созданным с помощью запланированной синхронизации.',
                        defaultRoleRequired: 'Выберите роль для новых пользователей LDAP.',
                        strictSyncHelper:
                            'После полной синхронизации отсутствующие в LDAP пользователи помечаются как «Не найден в LDAP», а их сеансы завершаются без удаления пользователей, ролей или разрешений.',
                        runNow: 'Синхронизировать сейчас',
                        lastRunSuccess: 'Последняя синхронизация завершилась успешно: {0}.',
                        lastRunFailed: 'Последняя синхронизация не удалась: {0}.',
                        lastRunRunning: 'Синхронизация началась: {0}',
                        sourceDisabled: 'Включите и сохраните AD/LDAP перед запуском синхронизации.',
                        cronRequired: 'Введите выражение Cron.',
                        saveBeforeRun: 'Сохраните настройки синхронизации перед запуском задачи.',
                        runConfirmTitle: 'Запустить строгую синхронизацию',
                        runConfirmDescription:
                            'Статус аутентификации пользователей, отсутствующих в полном запросе LDAP, будет помечен как «Не найден в LDAP», а их активные сеансы будут очищены. Продолжать?',
                        runSuccess: 'Синхронизация LDAP завершена.',
                        weekdays: {
                            0: 'воскресенье',
                            1: 'понедельник',
                            2: 'вторник',
                            3: 'среда',
                            4: 'Четверг',
                            5: 'пятница',
                            6: 'Суббота',
                        },
                    },
                    syncLogs: {
                        title: 'Синхронизировать журналы',
                        description: 'Просмотрите результаты запланированной и ручной синхронизации LDAP.',
                        startedAt: 'Время начала',
                        trigger: 'Тип запуска',
                        manual: 'Вручную',
                        scheduled: 'Запланировано',
                        success: 'Успех',
                        failed: 'Не удалось',
                        running: 'Выполняется',
                        result: 'Результат',
                        resultSummary: 'Создано {0}, обновлено {1}, отсутствует {2}',
                        duration: 'Продолжительность',
                        action: 'Действие',
                    },
                    testLoginTitle: 'Проверка входа AD/LDAP',
                    testLoginDesc:
                        'Привяжите учетные данные пользователя AD/LDAP только для проверки аутентификации. Сеанс 1Panel не создается.',
                    ldapUsername: 'Имя пользователя LDAP',
                    usernameRequired: 'Введите имя пользователя LDAP.',
                    startTest: 'Начать тест',
                    testLoginSuccess: 'Аутентификация прошла успешно.',
                    testLoginSuccessWithDN: 'Аутентификация прошла успешно. Пользователь DN: {0}',
                    import: {
                        title: 'Импорт пользователей AD/LDAP',
                        source: 'Источник данных: каталог AD/LDAP.',
                        lastRead: 'Последнее чтение: {0}',
                        cacheHit: 'Кэшированный результат',
                        keywordPlaceholder: 'Поиск имени пользователя',
                        search: 'Поиск',
                        refresh: 'Читать из LDAP',
                        refreshTip: 'Игнорируйте кратковременный кеш и снова прочитайте каталог LDAP.',
                        loadFailed: 'Не удалось прочитать каталог LDAP.',
                        retry: 'Повторить попытку',
                        noData: 'Пользователи каталога не найдены.',
                        username: 'Имя пользователя',
                        status: 'Статус',
                        changes: 'Изменения',
                        noChanges: 'Никаких изменений',
                        importable: 'Готов к импорту',
                        updateAvailable: 'Доступно обновление',
                        upToDate: 'Актуально',
                        conflict: 'Конфликт имен',
                        selectedCount: '{0} выбрано',
                        totalCount: '{0} пользователей',
                        newUserRole: 'Новая роль пользователя',
                        newUserRoleRequired: 'Выберите роль для новых пользователей.',
                        noNewUsers: 'В этой операции нет новых пользователей.',
                        roleOnlyForNewUsers: 'Выбранная роль применяется только к вновь созданным пользователям.',
                        strictOff: 'Строгая синхронизация отключена. Полный импорт не отключит пользователей.',
                        importSelected: 'Выбран импорт/обновление ({0})',
                        importAll: 'Импортировать/обновить все ({0})',
                        previewTitle: 'Подтвердить полный импорт',
                        previewDesc:
                            'Полный каталог LDAP был прочитан. Ключевое слово поиска не ограничивает эту операцию.',
                        created: 'Создать',
                        updated: 'Обновить',
                        unchanged: 'Без изменений',
                        conflicts: 'Конфликты',
                        missing: 'Отключить',
                        reactivated: 'Повторно активировать',
                        strictWarning:
                            'Строгая синхронизация включена. Пользователи, отсутствующие в LDAP, не могут войти в систему, но их записи, роли и разрешения сохраняются.',
                        missingUsers: 'Пользователи отсутствуют в LDAP',
                        missingScope: 'Затрагивается только этот источник LDAP.',
                        willDisable: 'Будет отключен',
                        confirmAll: 'Подтвердить импорт',
                        confirmAllWithMissing: 'Подтвердить импорт и отключить {0} пользователей',
                        executeSuccess: 'Пользователи LDAP обработаны успешно.',
                        queryExpired: 'Срок действия каталога истек. Прочтите еще раз LDAP.',
                        planIncomplete: 'Полное чтение каталога неполное и не может быть выполнено.',
                    },
                },
            },
        },
        app: {
            app: 'APP',
            title: 'Псевдоним панели',
            titleHelper: 'Псевдоним панели используется для отображения в приложении (псевдоним панели по умолчанию)',
            qrCode: 'QR код',
            apiStatusHelper: 'APP панели необходимо включить функцию API интерфейса',
            apiInterfaceHelper:
                'Поддержка доступа к API-интерфейсу панели (эта функция должна быть включена для мобильного приложения панели)',
            apiInterfaceHelper1:
                'Для доступа к приложению панели необходимо добавить посетителя в белый список. Для нестабильных IP рекомендуется добавить 0.0.0.0/0 (все IPv4), ::/0 (все IPv6)',
            qrCodeExpired: 'Время обновления',
            apiLeakageHelper: 'Не раскрывайте QR-код. Убедитесь, что он используется только в доверенных средах.',
        },
        logExport: {
            title: 'Экспорт журналов',
            records: 'История экспорта',
            retentionDays: 'Срок хранения истории экспорта',
            timeRange: 'Диапазон времени',
            timeRequired: 'Выберите диапазон времени экспорта',
            websiteRequired: 'Выберите веб-сайт',
            blackStatus: 'Статус черного списка',
            black: 'Заблокирован',
            notBlack: 'Не заблокирован',
            fuzzy: 'Нечеткий поиск',
            regex: 'Регулярное выражение',
            invalidRegex: 'Введите корректное выражение RE2 длиной до 256 символов',
            created: 'Задача экспорта создана',
            fileName: 'Имя файла',
            fileSize: 'Размер файла',
            expiresAt: 'Срок действия',
            cancelConfirm: 'Отменить эту задачу экспорта?',
            deleteConfirm: 'Удалить эту запись экспорта и файл?',
        },
        waf: {
            WAF: 'WAF',
            name: 'WAF',
            blackWhite: 'Черный и белый список',
            globalSetting: 'Глобальные настройки',
            websiteSetting: 'Настройки сайта',
            blockRecords: 'Записи блокировки',
            world: 'Мир',
            china: 'Китай',
            intercept: 'Перехват',
            request: 'Запросы',
            count4xx: 'Количество 4xx',
            count5xx: 'Количество 5xx',
            todayStatus: 'Статус на сегодня',
            reqMap: 'Карта атак (последние 30 дней)',
            resource: 'Источник',
            count: 'Количество',
            hight: 'Высокий',
            low: 'Низкий',
            reqCount: 'Запросы',
            interceptCount: 'Количество перехватов',
            requestTrends: 'Тренды запросов (последние 7 дней)',
            interceptTrends: 'Тренды перехватов (последние 7 дней)',
            whiteList: 'Белый список',
            blackList: 'Черный список',
            ipBlackListHelper: 'IP-адреса в черном списке блокируются от доступа к сайту',
            ipWhiteListHelper: 'IP-адреса в белом списке обходят все ограничения',
            uaBlackListHelper: 'Запросы с значениями User-Agent в черном списке будут заблокированы',
            uaWhiteListHelper: 'Запросы с значениями User-Agent в белом списке обходят все ограничения',
            urlBlackListHelper: 'Запросы к URL-адресам в черном списке будут заблокированы',
            urlWhiteListHelper: 'Запросы к URL-адресам в белом списке обходят все ограничения',
            ccHelper:
                'Если сайт получает более {1} запросов с одного IP-адреса в течение {0} секунд, этот IP будет заблокирован на {2}',
            blockTime: 'Время блокировки',
            attackHelper: 'Если кумулятивные перехваты превышают {1} за {0} секунд, IP будет заблокирован на {2}',
            notFoundHelper:
                'Если кумулятивные запросы возвращают ошибку 404 более {1} раз за {0} секунд, IP будет заблокирован на {2}',
            frequencyLimit: 'Ограничение частоты',
            regionLimit: 'Ограничение по региону',
            defaultRule: 'Правила по умолчанию',
            accessFrequencyLimit: 'Ограничение частоты доступа',
            attackLimit: 'Ограничение частоты атак',
            notFoundLimit: 'Ограничение частоты 404',
            urlLimit: 'Ограничение частоты URL',
            urlLimitHelper: 'Установите частоту доступа для одного URL',
            sqliDefense: 'Защита от SQL-инъекций',
            sqliHelper: 'Обнаружение SQL-инъекций в запросах и их блокировка',
            xssHelper: 'Обнаружение XSS в запросах и их блокировка',
            xssDefense: 'Защита от XSS',
            uaDefense: 'Правила для вредоносных User-Agent',
            uaHelper: 'Включает правила для определения общих вредоносных ботов',
            argsDefense: 'Правила для вредоносных параметров',
            argsHelper: 'Блокирует запросы, содержащие вредоносные параметры',
            cookieDefense: 'Правила для вредоносных Cookies',
            cookieHelper: 'Запрещает передачу вредоносных Cookies в запросах',
            headerDefense: 'Правила для вредоносных заголовков',
            headerHelper: 'Запрещает запросы, содержащие вредоносные заголовки',
            httpRule: 'Правила HTTP-запросов',
            httpHelper:
                'Установите типы методов, которые могут получить доступ. Если вы хотите ограничить определенные типы доступа, отключите эти кнопки. Например: если разрешен только доступ GET, то нужно отключить другие методы, кроме GET',
            geoRule: 'Ограничения по региону',
            geoHelper:
                'Объединяет правила регионов и провинций одним переключателем. Сначала применяются правила регионов, затем правила провинций',
            regionPolicy: 'Правила регионов',
            provincePolicy: 'Правила провинций',
            provinceRuleLabel: 'Провинция',
            openRestyFeatureVersionAlert: 'Для работы функции «{0}» требуется версия OpenResty новее 1.31.1.1-0.',
            ipLocation: 'Местоположение IP',
            ipLocationSearchHelper: 'Введите местоположение IP; поддерживается нечеткий поиск',
            action: 'Действие',
            ruleType: 'Тип атаки',
            ipHelper: 'Введите IP-адрес',
            attackLog: 'Журнал атак',
            rule: 'Правило',
            ipArr: 'Диапазон IPV4',
            ipStart: 'Начальный IP',
            ipEnd: 'Конечный IP',
            ipv4: 'IPv4',
            ipv6: 'IPv6',
            urlDefense: 'Правила для URL',
            urlHelper: 'Запрещенный URL',
            dirFilter: 'Фильтрация по директориям',
            sqlInject: 'SQL-инъекция',
            xss: 'XSS',
            webshell: 'WebShell',
            phpExec: 'Выполнение PHP-скриптов',
            oneWordTrojan: 'Троян одно слово',
            appFilter: 'Фильтрация опасных директорий',
            webShell: 'Webshell',
            args: 'Вредоносные параметры',
            protocolFilter: 'Фильтр протоколов',
            javaFilter: 'Фильтрация опасных файлов Java',
            scannerFilter: 'Фильтрация сканеров',
            escapeFilter: 'Фильтрация экранирования',
            customRule: 'Пользовательские правила',
            httpMethod: 'Фильтрация HTTP-методов',
            fileExt: 'Ограничение на загрузку файлов',
            fileExtHelper: 'Запрещенные расширения файлов для загрузки',
            deny: 'Запрещено',
            allow: 'Разрешить',
            allowOnly: 'Разрешить только выбранное',
            field: 'Объект',
            pattern: 'Условие',
            ruleContent: 'Содержание',
            contain: 'содержит',
            equal: 'равно',
            regex: 'регулярное выражение',
            notEqual: 'Не равно',
            customRuleHelper: 'Применяйте действия на основе указанных условий',
            actionAllow: 'Разрешить',
            blockIP: 'Заблокировать IP',
            code: 'Код статуса ответа',
            noRes: 'Отключить (444)',
            badReq: 'Неверные параметры (400)',
            forbidden: 'Запрещено (403)',
            serverErr: 'Ошибка сервера (500)',
            resHtml: 'Страница ответа',
            allowHelper: 'Разрешение доступа пропустит последующие WAF-правила, используйте с осторожностью',
            captcha: 'Проверка человеком',
            fiveSeconds: '5-секундная проверка',
            location: 'Регион',
            redisConfig: 'Конфигурация Redis',
            redisHelper: 'Включите Redis для сохранения временно заблокированных IP-адресов',
            wafHelper: 'Все сайты потеряют защиту после отключения',
            websiteWafHelper: 'Этот сайт потеряет защиту после отключения',
            attackIP: 'IP атакующего',
            attackParam: 'Детали атаки',
            execRule: 'Срабатывающее правило',
            acl: 'ACL',
            sql: 'SQL-инъекция',
            cc: 'Ограничение частоты доступа',
            isBlocking: 'Заблокирован',
            isFree: 'Не заблокирован',
            unLock: 'Разблокировать',
            unLockHelper: 'Вы хотите разблокировать IP: {0}?',
            saveDefault: 'Сохранить по умолчанию',
            saveToWebsite: 'Применить к сайту',
            saveToWebsiteHelper: 'Применить текущие настройки ко всем сайтам?',
            websiteHelper:
                'Это настройки по умолчанию для создания сайта. Изменения должны быть применены к сайту, чтобы вступить в силу',
            websiteHelper2:
                'Это настройки по умолчанию для создания сайта. Пожалуйста, измените конкретную конфигурацию на сайте',
            ipGroup: 'Группа IP',
            ipGroupHelper:
                'По одному IP или диапазону IP на строку, поддерживает IPv4 и IPv6, например: 192.168.1.1 или 192.168.1.0/24',
            ipBlack: 'Черный список IP',
            openRestyAlert: 'Версия OpenResty должна быть выше {0}',
            initAlert:
                'Необходима инициализация для первого использования, файл конфигурации сайта будет изменен, и оригинальная конфигурация WAF будет потеряна. Пожалуйста, сделайте резервную копию OpenResty заранее',
            initHelper: 'Инициализация удалит текущую конфигурацию WAF. Вы уверены, что хотите инициализировать?',
            mainSwitch: 'Главный переключатель',
            websiteSwitch: 'Переключатель',
            websiteAlert: 'Пожалуйста, создайте сайт сначала',
            defaultUrlBlack: 'Правила для URL',
            htmlRes: 'Страница перехвата',
            urlSearchHelper: 'Введите URL для поддержки нечеткого поиска',
            hostSearchHelper: 'Введите Host для нечеткого поиска',
            toCreate: 'Создать',
            closeWaf: 'Закрыть WAF',
            closeWafHelper: 'Закрытие WAF приведет к потере защиты сайта, продолжить?',
            addblack: 'Черный',
            addwhite: 'Добавить белый',
            addblackHelper: 'Добавить IP:{0} в черный список по умолчанию?',
            addwhiteHelper: 'Добавить IP:{0} в белый список по умолчанию?',
            defaultUaBlack: 'Правило для User-Agent',
            defaultIpBlack: 'Вредоносная группа IP',
            cookie: 'Правила для Cookies',
            urlBlack: 'Черный список URL',
            uaBlack: 'Черный список User-Agent',
            attackCount: 'Ограничение частоты атак',
            fileExtCheck: 'Ограничение на загрузку файлов',
            geoRestrict: 'Ограничение по региону',
            originProtect: 'Защита источника CDN',
            attacklog: 'Запись перехвата',
            unknownWebsite: 'Неавторизованный доступ к домену',
            geoRuleEmpty: 'Выберите хотя бы один регион или провинцию',
            unknown: 'Сайт не существует',
            geo: 'Ограничение по региону',
            revertHtml: 'Вы хотите восстановить {0} как страницу по умолчанию?',
            five_seconds: '5-секундная проверка',
            header: 'Правила заголовков',
            methodWhite: 'HTTP-правила',
            expiryDate: 'Дата истечения',
            expiryDateHelper: 'После прохождения проверки она больше не будет выполняться в пределах срока действия',
            defaultIpBlackHelper: 'Некоторые вредоносные IP-адреса, собранные с интернета, чтобы предотвратить доступ',
            notFoundCount: 'Ограничение частоты 404',
            matchValue: 'Значение для совпадения',
            headerName: 'Поддерживает английский, цифры, -, длина 3-30',
            cdnHelper: 'Сайты, использующие CDN, могут включить это для получения правильного исходного IP',
            clearLogWarn: 'Очистка журнала невозможна, хотите продолжить?',
            commonRuleHelper: 'Правило поддерживает нечеткое совпадение',
            blockIPHelper:
                'Заблокированные IP-адреса временно хранятся в OpenResty и будут разблокированы при перезапуске OpenResty. Они могут быть заблокированы навсегда через функцию блокировки',
            addWhiteUrlHelper: 'Добавить URL {0} в белый список?',
            dashHelper:
                'В общественной версии также можно использовать функции в глобальных настройках и настройках сайта',
            wafStatusHelper:
                'Файрвол не включен. Защита безопасности сайта приостановлена. Рекомендуется включить его как можно скорее.',
            enableProtection: 'Включить защиту',
            ccMode: 'Режим',
            global: 'Глобальный режим',
            uriMode: 'Режим URL',
            globalHelper:
                'Глобальный режим: активируется, когда общее количество запросов к любому URL за определенный промежуток времени превышает порог',
            uriModeHelper:
                'Режим URL: активируется, когда количество запросов к одному URL за определенный промежуток времени превышает порог',
            ip: 'Черный список IP',
            globalSettingHelper:
                'Настройки с тегом [Website] должны быть включены в [Настройки сайта], а глобальные настройки являются только настройками по умолчанию для новых сайтов',
            globalSettingHelper2:
                'Настройки должны быть включены как в [Глобальных настройках], так и в [Настройках сайта]',
            urlCCHelper: 'Более {1} запросов к этому URL за {0} секунд, блокируем этот IP {2}',
            urlCCHelper2: 'URL не может содержать параметры',
            notContain: 'Не содержит',
            urlcc: 'Ограничение частоты URL',
            method: 'Тип запроса',
            addIpsToBlock: 'Массовая блокировка IP',
            addIpSegmentToBlock: 'Блокировать IP-сегмент',
            addIpSegmentsToBlock: 'Массовая блокировка IP-сегментов',
            addUrlsToWhite: 'Массовое добавление URL в белый список',
            noBlackIp: 'IP уже заблокирован, не нужно блокировать снова',
            noWhiteUrl: 'URL уже в белом списке, не нужно добавлять снова',
            spiderIpHelper:
                'Если включено, разрешены только выбранные поисковые роботы; если выключено, доступ всех роботов блокируется.',
            spiderIp: 'Пул IP-адресов поисковых роботов',
            spider: 'Поисковые роботы',
            spiderAllowlist: 'Разрешенные поисковые роботы',
            spiderAllowlistEmpty:
                'Поисковые роботы не выбраны. После сохранения доступ всех роботов будет заблокирован.',
            geoIp: 'Библиотека IP-адресов',
            geoIpHelper: 'Используется для определения географического положения IP',
            stat: 'Отчет об атаках',
            statTitle: 'Отчет',
            attackIp: 'IP-адрес атаки',
            attackCountNum: 'Количество атак',
            percent: 'Процент',
            addblackUrlHelper: 'Добавить URL: {0} в черный список по умолчанию?',
            rce: 'Удаленное выполнение кода',
            software: 'Программное обеспечение',
            cveHelper: 'Содержит уязвимости распространенных программ и фреймворков',
            vulnCheck: 'Дополнительные правила',
            ssrf: 'Уязвимость SSRF',
            afr: 'Чтение произвольных файлов',
            ua: 'Неавторизованный доступ',
            id: 'Утечка информации',
            aa: 'Обход аутентификации',
            dr: 'Обход каталогов',
            xxe: 'Уязвимость XXE',
            suid: 'Уязвимость сериализации',
            dos: 'Уязвимость отказа в обслуживании',
            afd: 'Загрузка произвольных файлов',
            sqlInjection: 'Внедрение SQL',
            afw: 'Запись произвольных файлов',
            il: 'Утечка информации',
            clearAllLog: 'Очистить все логи',
            exportLog: 'Экспортировать логи',
            appRule: 'Правила приложений',
            appRuleHelper:
                'Распространенные правила приложений, включение может уменьшить ложные срабатывания, один сайт может использовать только одно правило',
            logExternal: 'Исключить типы записей',
            ipWhite: 'Белый список IP',
            urlWhite: 'Белый список URL',
            uaWhite: 'Белый список User-Agent',
            logExternalHelper:
                'Исключенные типы записей не будут регистрироваться в логах, черные/белые списки, региональные ограничения доступа и пользовательские правила генерируют много логов, рекомендуется исключить',
            ssti: 'Атака SSTI',
            crlf: 'Инъекция CRLF',
            strict: 'Строгий режим',
            strictHelper: 'Использует более строгие правила для проверки запросов',
            executionStrategy: 'Стратегия выполнения',
            detectionStrength: 'Уровень обнаружения',
            protectionMode: 'Режим защиты',
            observationMode: 'Режим наблюдения',
            standardMode: 'Стандартный режим',
            observationModeHelper: 'Обнаруживает и записывает запросы, не блокируя их',
            observationModeConfirm:
                'В режиме наблюдения все срабатывания WAF записываются без блокировки запросов. Продолжить?',
            globalStrictRequired: 'Сначала включите строгий режим в глобальных настройках',
            websiteSearchHelper: 'Введите домен, псевдоним или примечание сайта',
            configReadFailed: 'Не удалось загрузить конфигурацию',
            detailSetting: 'Подробные настройки',
            observe: 'Наблюдение',
            saveLog: 'Сохранить лог',
            remoteURLHelper: 'Удаленный URL должен содержать один IP на строку и не содержать других символов',
            notFound: 'Not Found (404)',
            serviceUnavailable: 'Сервис недоступен (503)',
            gatewayTimeout: 'Тайм-аут шлюза (504)',
            belongToIpGroup: 'Принадлежит к группе IP',
            notBelongToIpGroup: 'Не принадлежит к группе IP',
            unknownWebsiteKey: 'Неизвестный домен',
            special: 'Специальный',
            fileToLarge: 'Файл превышает 1MB и не может быть загружен',
            uploadOverLimit: 'Загруженный файл превышает лимит количества, максимум 1 файл',
            importRuleHelper: 'Одно правило на строку',
        },
        monitor: {
            '360': '360 Search',
            name: 'Мониторинг веб-сайта',
            pv: 'Просмотры страниц',
            uv: 'Уникальные посетители',
            flow: 'Трафик',
            ip: 'IP',
            spider: 'Поисковые роботы',
            visitors: 'Тренды посетителей',
            today: 'Сегодня',
            last7days: 'Последние 7 дней',
            last30days: 'Последние 30 дней',
            uvMap: 'Карта посетителей (30-е число)',
            qps: 'Запросы в реальном времени (в минуту)',
            flowSec: 'Трафик в реальном времени (в минуту)',
            excludeCode: 'Исключить статус-коды',
            excludeUrl: 'Исключить URL',
            excludeExt: 'Исключить расширения',
            cdnHelper: 'Получение реального IP из заголовка, предоставленного CDN',
            reqRank: 'Рейтинг посещений',
            refererDomain: 'Домен-реферер',
            os: 'Операционная система',
            browser: 'Браузер/Клиент',
            device: 'Устройство',
            showMore: 'Подробнее',
            unknown: 'Прочее',
            pc: 'Компьютер',
            mobile: 'Мобильное устройство',
            wechat: 'WeChat',
            machine: 'Машина',
            tencent: 'Браузер Tencent',
            ucweb: 'UC Browser',
            '2345explorer': 'Браузер 2345',
            huaweibrowser: 'Браузер Huawei',
            log: 'Логи запросов',
            statusCode: 'Статус-код',
            requestTime: 'Время отклика',
            flowRes: 'Трафик отклика',
            method: 'Метод запроса',
            statusCodeHelper: 'Введите статус-код выше',
            statusCodeError: 'Неверный тип статус-кода',
            methodHelper: 'Введите метод запроса выше',
            all: 'Все',
            baidu: 'Baidu',
            google: 'Google',
            bing: 'Bing',
            bytes: 'Заголовки сегодня',
            sogou: 'Sogou',
            failed: 'Ошибка',
            ipCount: 'Количество IP',
            spiderCount: 'Запросы от поисковых роботов',
            averageReqTime: 'Среднее время отклика',
            totalFlow: 'Общий трафик',
            logSize: 'Размер файла лога',
            realIPType: 'Метод получения реального IP',
            realIPRecognition: 'Определение реального IP',
            fromHeader: 'Получение из заголовка HTTP',
            fromHeaders: 'Получение из списка заголовков',
            header: 'HTTP-заголовок',
            cdnConfig: 'Конфигурация CDN',
            xff1: 'Первичный прокси из X-Forwarded-For',
            xff2: 'Вторичный прокси из X-Forwarded-For',
            xff3: 'Третичный прокси из X-Forwarded-For',
            xffHelper:
                'Например: X-Forwarded-For: <client>,<proxy1>,<proxy2>,<proxy3>. Последний IP <proxy3> будет считаться прокси верхнего уровня',
            headersHelper:
                'Получение реального IP из распространённых заголовков CDN HTTP, выбирая первое доступное значение',
            monitorCDNHelper: 'Изменение конфигурации CDN для мониторинга веб-сайта также обновит настройки WAF CDN',
            wafCDNHelper: 'Изменение конфигурации WAF CDN также обновит настройки мониторинга веб-сайта',
            originProtection: 'Защита исходного сервера',
            originProtectionHelper:
                'К источнику могут подключаться только узлы CDN из выбранных групп IP. Определение реального IP посетителя включается отдельно.',
            originProtectionIPGroups: 'Группы IP источника CDN',
            originProtectionIPGroupsPlaceholder: 'Выберите доверенные группы IP источника CDN',
            originProtectionWarning:
                'Ошибка конфигурации может сделать сайт недоступным. Убедитесь, что добавлены все адреса обратного подключения CDN.',
            originProtectionEnableConfirm:
                'Подключения вне выбранных групп IP будут считаться прямым доступом к источнику и блокироваться. Продолжить?',
            statusErr: 'Неверный формат статус-кода',
            shenma: 'Shenma Search',
            duckduckgo: 'DuckDuckGo',
            yandex: 'Yandex',
            gptbot: 'GPTBot',
            excludeUri: 'Исключить URI',
            top100Helper: 'Показать топ 100 данных',
            logSaveDay: 'Период хранения логов (дни)',
            cros: 'Chrome OS',
            theworld: 'Браузер TheWorld',
            edge: 'Microsoft Edge',
            maxthon: 'Браузер Maxthon',
            monitorStatusHelper: 'Мониторинг сайта сейчас отключён. Включите его сейчас',
            excludeIp: 'Исключить IP-адреса',
            excludeUa: 'Исключить User-Agent',
            remotePort: 'Удаленный порт',
            unknown_browser: 'Неизвестно',
            unknown_os: 'Неизвестно',
            unknown_device: 'Неизвестно',
            logSaveSize: 'Максимальный размер сохранения логов',
            logSaveSizeHelper: 'Это размер сохранения логов для одного сайта',
            '360se': '360 Secure Browser',
            websites: 'Список веб-сайтов',
            trend: 'Статистика тренда',
            reqCount: 'Количество запросов',
            uriHelper: 'Вы можете использовать /test/* или /*/index.php для исключения Uri',
        },
        tamper: {
            tamper: 'Защита от подделки сайта',
            tamperCreateHint:
                'Текущий каталог может быть затронут защитой от изменений или атрибутами файла, что приведет к ошибке создания.',
            ignoreTemplate: 'Шаблон Исключения',
            protectTemplate: 'Шаблон Защиты',
            ignoreTemplateHelper:
                'Введите содержание исключения, разделенные Enter или пробелом. (Конкретный каталог ./log или имя каталога tmp, для исключения файлов нужно ввести конкретный файл ./data/test.html)',
            protectTemplateHelper:
                'Введите содержание защиты, разделенные Enter или пробелом. (Конкретный файл ./index.html, расширение файла .html, тип файла js, для защиты каталогов нужно ввести конкретный каталог ./log)',
            templateContent: 'Содержание Шаблона',
            template: 'Шаблон',
            saveTemplate: 'Сохранить как Шаблон',
            tamperHelper1:
                'Для веб-сайтов с развертыванием в один клик рекомендуется включить защиту от несанкционированного доступа к каталогу приложений; если веб-сайт не может нормально использоваться или резервное копирование/восстановление не удается, сначала отключите защиту от несанкционированного доступа;',
            tamperHelper2:
                'Ограничит операции чтения/записи, удаления, разрешений и изменения владельца для защищенных файлов в неисключенных каталогах',
            tamperPath: 'Каталог Защиты',
            tamperPathEdit: 'Изменить Путь',
            log: 'Журнал Блокировки',
            totalProtect: 'Общая Защита',
            todayProtect: 'Сегодняшняя Защита',
            templateRule: 'Длина 1-512, имя не может содержать {0} и другие символы',
            ignore: 'Исключить',
            ignoreHelper:
                'Выберите или введите содержание исключения, разделенные Enter или пробелом. (Конкретный каталог ./log или имя каталога tmp, для исключения файлов нужно ввести или выбрать конкретный файл ./data/test.html)',
            protect: 'Защитить',
            protectHelper:
                'Выберите или введите содержание защиты, разделенные Enter или пробелом. (Конкретный файл ./index.html, расширение файла .html, тип файла js, для защиты каталогов нужно ввести или выбрать конкретный каталог ./log)',
            tamperHelper00: 'Исключение и защита поддерживают только относительные пути;',
            tamperHelper01:
                'После включения защиты от несанкционированного доступа система ограничит операции создания, редактирования и удаления защищенных файлов в неисключенных каталогах;',
            tamperHelper02: 'Приоритет: Защита конкретного пути > Исключение конкретного пути > Защита > Исключение',
            tamperHelper03:
                'Операции мониторинга направлены только на неисключенные каталоги, отслеживая создание незащищенных файлов в этих каталогах.',
            disableHelper:
                'Собираетесь отключить защиту от несанкционированного доступа для следующих веб-сайтов, продолжить?',
            appendOnly: 'Только Добавление',
            appendOnlyHelper:
                'Ограничивает операции удаления файлов в этом каталоге, разрешая только добавление исключенных каталогов или незащищенных файлов',
            immutable: 'Неизменяемый',
            immutableHelper:
                'Ограничивает операции редактирования, удаления, изменения разрешений и владельца для этого файла',
            onWatch: 'Наблюдение',
            onWatchHelper:
                'Отслеживает и перехватывает создание защищенных файлов или неисключенных каталогов в этом каталоге',
            forceStop: 'Принудительное закрытие',
            forceStopHelper:
                'Собираетесь принудительно отключить функцию защиты от несанкционированного доступа для этого каталога веб-сайта. Продолжить?',
        },
        setting: {
            setting: 'Настройки Панели',
            title: 'Описание Панели',
            titleHelper:
                'Будет отображаться на странице входа пользователя (например, панель управления Linux сервером, рекомендуется от 8 до 15 символов)',
            logo: 'Логотип (Без Текста)',
            logoHelper:
                'Будет отображаться в верхнем левом углу страницы управления при свёрнутом меню (рекомендуемый размер изображения: 82px*82px)',
            logoWithText: 'Логотип (С Текстом)',
            logoWithTextHelper:
                'Будет отображаться в верхнем левом углу страницы управления при развернутом меню (рекомендуемый размер изображения: 185px*55px)',
            favicon: 'Иконка Сайта',
            faviconHelper: 'Иконка сайта (рекомендуемый размер изображения: 16px*16px)',
            setDefault: 'Восстановить По Умолчанию',
            setHelper: 'Текущие настройки будут сохранены. Вы хотите продолжить?',
            setDefaultHelper: 'Все настройки панели будут восстановлены по умолчанию. Вы хотите продолжить?',
            logoGroup: 'Логотип',
            imageGroup: 'Изображение',
            loginImage: 'Изображение',
            loginImageHelper: 'Будет отображаться на странице входа (Рекомендуемый размер: 500x416px)',
            loginBgType: 'Тип фона',
            loginBgImage: 'Фоновое изображение',
            loginBgImageHelper: 'Будет отображаться как фон страницы входа (Рекомендуемый размер: 1920x1080px)',
            loginBgColor: 'Цвет фона',
            loginBgColorHelper: 'Будет отображаться как цвет фона страницы входа',
            image: 'Изображение',
            bgColor: 'Цвет фона',
            loginGroup: 'Страница входа',
            loginBtnLinkColor: 'Цвет кнопки/ссылки',
            loginBtnLinkColorHelper: 'Будет отображаться как цвет кнопки/ссылки на странице входа',
        },
        helper: {
            wafTitle1: 'Карта Перехватов',
            wafContent1: 'Отображает географическое распределение перехватов за последние 30 дней',
            wafTitle2: 'Ограничения Регионального Доступа',
            wafContent2: 'Ограничивайте источники доступа к сайту в зависимости от географического расположения',
            wafTitle3: 'Пользовательская Страница Перехвата',
            wafContent3: 'Создайте пользовательскую страницу для отображения после перехвата запроса',
            wafTitle4: 'Пользовательские Правила (ACL)',
            wafContent4: 'Перехватывайте запросы в соответствии с пользовательскими правилами',
            tamperTitle1: 'Мониторинг Целостности Файлов',
            tamperContent1:
                'Мониторинг целостности файлов веб-сайта, включая основные файлы, скрипты и файлы конфигурации.',
            tamperTitle2: 'Реальное Сканирование и Обнаружение',
            tamperContent2:
                'Обнаруживайте аномальные или измененные файлы, выполняя сканирование файловой системы веб-сайта в реальном времени.',
            tamperTitle3: 'Настройки Разрешений Безопасности',
            tamperContent3:
                'Ограничивайте доступ к файлам веб-сайта с помощью правильных настроек разрешений и политик контроля доступа, снижая потенциальную поверхность атаки.',
            tamperTitle4: 'Ведение Логов и Анализ',
            tamperContent4:
                'Записывайте логи доступа и операций с файлами для последующего аудита и анализа администраторами, а также для выявления потенциальных угроз безопасности.',
            settingTitle1: 'Пользовательское Приветственное Сообщение',
            settingContent1: 'Установите пользовательское приветственное сообщение на странице входа в 1Panel.',
            settingTitle2: 'Пользовательский Логотип',
            settingContent2: 'Разрешите загрузку изображений логотипов, содержащих названия брендов или другой текст.',
            settingTitle3: 'Пользовательская Иконка Сайта',
            settingContent3:
                'Разрешите загрузку пользовательских иконок для замены стандартной иконки браузера, улучшая пользовательский опыт.',
            monitorTitle1: 'Тренд Посетителей',
            monitorContent1: 'Статистика и отображение тенденций посещаемости веб-сайта',
            monitorTitle2: 'Карта Посетителей',
            monitorContent2: 'Статистика и отображение географического распределения посетителей веб-сайта',
            monitorTitle3: 'Статистика Доступа',
            monitorContent3:
                'Статистика запросов веб-сайта, включая поисковые боты, устройства доступа, статус запросов и т. д.',
            monitorTitle4: 'Мониторинг в Реальном Времени',
            monitorContent4:
                'Мониторинг запросов веб-сайта в реальном времени, включая количество запросов, трафик и т. д.',
            alertTitle1: 'SMS Уведомления',
            alertContent1:
                'При аномальном использовании ресурсов сервера, истечении срока действия сайта и сертификата, появлении новой версии или истечении срока действия пароля пользователи будут уведомлены через SMS, чтобы обеспечить своевременную обработку.',
            alertTitle2: 'Журнал Уведомлений',
            alertContent2:
                'Предоставляет пользователям возможность просмотра журналов уведомлений, чтобы облегчить отслеживание и анализ исторических событий.',
            alertTitle3: 'Настройки Уведомлений',
            alertContent3:
                'Предоставляет пользователям возможность настройки номеров телефонов, частоты и времени отправки уведомлений в день, что позволяет настраивать более удобные уведомления.',
            nodeDashTitle1: 'Управление Приложениями',
            nodeDashContent1:
                'Единое управление приложениями на нескольких узлах, поддерживает мониторинг состояния, быстрое запуск/остановку, подключение терминала и резервное копирование',
            nodeDashTitle2: 'Управление Веб-сайтами',
            nodeDashContent2:
                'Единое управление веб-сайтами на нескольких узлах, мониторинг состояния в реальном времени, поддерживает пакетный запуск/остановку и быстрое резервное копирование',
            nodeDashTitle3: 'Управление Базами Данных',
            nodeDashContent3:
                'Единое управление базами данных на нескольких узлах, ключевые состояния с первого взгляда, поддерживает резервное копирование в один клик',
            nodeDashTitle4: 'Управление Запланированными Задачами',
            nodeDashContent4:
                'Единое управление запланированными задачами на нескольких узлах, поддерживает мониторинг состояния, быстрый запуск/остановку и выполнение по ручному триггеру',
            nodeTitle1: 'Добавление узла одним кликом',
            nodeContent1: 'Быстро интегрируйте несколько серверных узлов',
            nodeTitle2: 'Пакетное обновление',
            nodeContent2: 'Синхронизируйте и обновите все узлы одной операцией',
            nodeTitle3: 'Мониторинг статуса узла',
            nodeContent3: 'Реальное наблюдение за рабочим статусом каждого узла',
            nodeTitle4: 'Быстрое удаленное подключение',
            nodeContent4: 'Одним кликом подключитесь к удаленным терминалам узлов',
            fileExchangeTitle1: 'Передача с аутентификацией по ключу',
            fileExchangeContent1: 'Аутентифицируйтесь через SSH-ключи, чтобы обеспечить безопасность передачи.',
            fileExchangeTitle2: 'Эффективная синхронизация файлов',
            fileExchangeContent2:
                'Только синхронизируйте измененное содержимое, чтобы значительно повысить скорость и стабильность передачи.',
            fileExchangeTitle3: 'Поддержка обмена между несколькими узлами',
            fileExchangeContent3:
                'Легко передавайте проектные файлы между разными узлами, гибко управляйте несколькими серверами.',
            nodeAppTitle1: 'Управление Обновлениями Приложений',
            nodeAppContent1:
                'Единый мониторинг обновлений приложений на нескольких узлах, поддерживает обновление в один клик',
            appTitle1: 'Гибкое управление панелью',
            appContent1: 'Легко управляйте сервером 1Panel в любое время и в любом месте.',
            appTitle2: 'Полная информация о сервисе',
            appContent2:
                'Управляйте приложениями, сайтами, Docker, базами данных и т. д. через мобильное приложение и создавайте приложения и сайты быстро.',
            appTitle3: 'Мониторинг аномалий в реальном времени',
            appContent3:
                'Просматривайте статус сервера, мониторинг безопасности WAF, статистику посещений сайта и состояние процессов в реальном времени через мобильное приложение.',
            clusterTitle1: 'Развертывание мастер-слейв',
            clusterContent1:
                'Поддерживает создание мастер-слейв экземпляров MySQL/Postgres/Redis на разных узлах, автоматически завершая связь мастер-слейв и инициализацию',
            clusterTitle2: 'Управление мастер-слейв',
            clusterContent2:
                'Единая страница для централизованного управления несколькими узлами мастер-слейв, просмотр их ролей, статуса выполнения и т.д.',
            clusterTitle3: 'Состояние репликации',
            clusterContent3:
                'Отображает состояние репликации мастер-слейв и информацию о задержке, помогая в устранении проблем синхронизации',
            modelDownloaderTitle1: 'Поиск моделей',
            modelDownloaderContent1:
                'Ищите репозитории моделей HuggingFace напрямую и просматривайте загрузки, лайки, сведения о модели и список файлов.',
            modelDownloaderTitle2: 'Ускоренные загрузки',
            modelDownloaderContent2:
                'Настройте endpoint ускорения HuggingFace и HF Token для официального сайта, зеркал и приватных моделей.',
            modelDownloaderTitle3: 'Отслеживание задач',
            modelDownloaderContent3:
                'Просматривайте очередь загрузок, статус, прогресс и ошибки, отменяйте, повторяйте и очищайте записи.',
            modelDownloaderTitle4: 'Локальное управление',
            modelDownloaderContent4:
                'Управляйте локальными каталогами моделей в одном месте: пути, размеры, время и удаление неиспользуемых файлов моделей.',
            vllmTitle1: 'Централизованное управление',
            vllmContent1:
                'Интегрируйте распределённые экземпляры vLLM в 1Panel и централизованно отслеживайте версии, состояние работы и рабочие каталоги.',
            vllmTitle2: 'Быстрое развёртывание',
            vllmContent2:
                'Выбирайте версии, подключайте каталоги моделей и настраивайте параметры запуска через визуальную форму, сокращая необходимость ручной настройки.',
            vllmTitle3: 'Высокая операционная эффективность',
            vllmContent3:
                'Создавайте, редактируйте, запускайте, останавливайте, перезапускайте и удаляйте экземпляры, а также отслеживайте задачи через единый интерфейс, повышая эффективность управления локальными сервисами моделей.',
            vllmTitle4: 'Гибкая настройка',
            vllmContent4:
                'Управляйте портами, контейнерами, командами запуска и конфигурациями Compose через расширенные параметры, упрощая стандартизированное развёртывание и последующую настройку.',
        },
        node: {
            master: 'Главный узел',
            masterBackup: 'Резервная копия главного узла',
            backupNode: 'Резервный узел',
            backupFrequency: 'Частота резервного копирования (часы)',
            backupCopies: 'Копии Бэкапа',
            noBackupNode:
                'Резервный узел в настоящее время пуст. Выберите резервный узел для сохранения и повторите попытку!',
            masterBackupAlert:
                'Резервное копирование главного узла не настроено. Для обеспечения безопасности данных, пожалуйста, настройте резервный узел как можно скорее, чтобы можно было вручную переключиться на новый главный узел в случае сбоя.',
            node: 'Узел',
            addr: 'Адрес',
            nodeUpgrade: 'Настройки Обновления',
            nodeUpgradeHelper:
                'Выбранные узлы автоматически начнут обновляться после завершения обновления основного узла, ручное вмешательство не требуется.',
            nodeUpgradePackageManage: 'Управление пакетами установки',
            nodeUpgradePackageClean: 'Очистить',
            nodeUpgradePackageFormatHelper:
                'Поддерживаются только установочные пакеты `1panel-agent_v*_*` или `1panel-v*-linux-*`',
            nodeUpgradePackageHostConfirm: 'Будет выбран файл сервера {0}. Продолжить?',
            nodeUpgradePackageCleanHelper: 'Все пакеты обновления более ранних версий будут очищены. Продолжить?',
            nodeUpgradeOfflinePackageHelper:
                'В автономной среде для узлов с другой архитектурой сначала загрузите соответствующий пакет обновления.',
            healthCheck: 'Проверка состояния',
            healthCheckFrequency: 'Частота автоматической проверки',
            healthCheckFrequencyHelper:
                'Автоматически проверяет состояние узлов с заданной частотой. Введите 0, чтобы отключить автоматические проверки.',
            healthCheckFrequencyLimit:
                'Частота проверки не может превышать один день и должна быть неотрицательным целым числом.',
            autoCheckFailedNodes: 'Автоматически проверять недоступные узлы',
            autoCheckFailedNodesHelper:
                'Во время автоматической проверки также проверять узлы со статусом сбоя или неисправности. Действует, только если частота проверки не равна 0.',
            loadFailedNodeResources: 'Обновлять ресурсы недоступных узлов',
            loadFailedNodeResourcesHelper:
                'При обновлении списка узлов также запрашивать ресурсы узлов со статусом сбоя или неисправности.',
            nodeUnhealthy: 'Некорректное состояние узла',
            deletedNode: 'Удалённый узел {0} в настоящее время не поддерживает операции обновления!',
            nodeUnhealthyHelper:
                'Обнаружено некорректное состояние узла. Проверьте в [Управление узлами] и повторите попытку!',
            nodeUnbind: 'Узел не привязан к лицензии',
            nodeUnbindHelper:
                'Обнаружено, что узел не привязан к лицензии. Привяжите в меню [Настройки панели - Лицензия] и повторите попытку!',
            memTotal: 'Общая память',
            nodeManagement: 'Управление Несколькими Машинами',
            multiOverview: 'Несколько Машин',
            commonNodes: 'Часто используемые узлы',
            searchNodePlaceholder: 'Поиск по имени узла, группе или адресу',
            nodeItem: 'Управление Узлами',
            panelItem: 'Управление Панелями',
            addPanel: 'Добавить Панель',
            addPanelHelper:
                'После успешного добавления панели вы можете быстро получить доступ к целевой панели в [Обзор - Панели].',
            panel: 'Панель 1Panel',
            others: 'Другие Панели',
            addNode: 'Добавить узел',
            connInfo: 'Информация о подключении',
            nodeInfo: 'Информация об узле',
            withProxy: 'Включить доступ через прокси',
            withoutProxy: 'Отключить доступ через прокси',
            withProxyHelper:
                'Для доступа к дочернему узлу будет использован системный прокси {0}, заданный в настройках панели. Продолжить?',
            withoutProxyHelper:
                'Доступ к дочернему узлу больше не будет использовать системный прокси, заданный в настройках панели. Продолжить?',
            syncInfo: 'Синхронизация данных,',
            syncHelper:
                'При изменении данных главного узла, происходит синхронизация с этим дочерним узлом в реальном времени,',
            syncBackupAccount: 'Настройки резервной учётной записи',
            syncWithMaster:
                'После обновления до коммерческой версии все данные будут синхронизироваться по умолчанию. Политики синхронизации можно настроить вручную в управлении узлами.',
            syncProxy: 'Настройки системного прокси',
            syncProxyHelper: 'Синхронизация настроек системного прокси требует перезапуска Docker',
            syncProxyHelper1: 'Перезапуск Docker может повлиять на работающие сервисы контейнеров.',
            syncProxyHelper2: 'Вы можете перезапустить вручную на странице Контейнеры - Конфигурация.',
            syncProxyHelper3:
                'Синхронизация настроек системного прокси требует перезапуска Docker, что может повлиять на работающие сервисы контейнеров',
            syncProxyHelper4:
                'Синхронизация настроек системного прокси требует перезапуска Docker. Вы можете перезапустить вручную позже на странице Контейнеры - Конфигурация.',
            syncCustomApp: 'Синхронизировать пользовательский репозиторий приложений',
            syncAlertSetting: 'Настройки системных предупреждений',
            syncNodeInfo: 'Базовые данные узла,',
            nodeSyncHelper: 'Синхронизация информации о узле будет синхронизировать следующую информацию:',
            nodeSyncHelper1: '1. Информация о публичной резервной учетной записи',
            nodeSyncHelper2: '2. Информация о соединении между основным узлом и подузлами',
            nodeCheck: 'Проверка доступности',
            checkSSH: 'Проверить SSH-подключение узла',
            checkUserPermission: 'Проверка прав пользователя узла',
            isNotRoot:
                'Обнаружено, что sudo без пароля не поддерживается на этом узле и текущий пользователь не является root',
            checkLicense: 'Проверить статус лицензии узла',
            checkService: 'Проверить информацию о существующих службах на узле',
            checkPort: 'Проверить доступность порта узла',
            panelExist:
                'Обнаружено, что на этом узле работает служба 1Panel V1. Перед добавлением обновите до V2 с помощью скрипта миграции.',
            coreExist:
                'Текущий узел уже активирован как мастер-узел и не может быть добавлен напрямую как подчинённый узел. Пожалуйста, сначала понизьте его до подчинённого узла перед добавлением, обратитесь к документации для подробностей.',
            agentExist:
                'Обнаружено, что 1panel-agent уже установлен на этом узле. Продолжение сохранит существующие данные и заменит только службу 1panel-agent.',
            agentNotExist:
                'Обнаружено, что на этом узле не установлен 1panel-agent, поэтому информацию об узле нельзя редактировать напрямую. Удалите его и добавьте снова.',
            oldDataExist:
                'Обнаружены исторические данные 1Panel V2 на этом узле. Текущие настройки будут перезаписаны следующей информацией:',
            errLicense: 'Лицензия, привязанная к этому узлу, недоступна. Пожалуйста, проверьте и повторите попытку!',
            errNodePort:
                'Обнаружено, что порт узла [ {0} ] недоступен. Проверьте, разрешен ли этот порт в брандмауэре или группе безопасности.',
            reinstallHelper: 'Переустановить узел {0}, вы хотите продолжить?',
            unhealthyCheck: 'Проверка на неисправности',
            fixOperation: 'Решение проблемы',
            checkName: 'Элемент проверки',
            checkSSHConn: 'Проверка доступности SSH-соединения',
            fixSSHConn: 'Вручную отредактируйте узел, чтобы подтвердить информацию о подключении',
            checkConnInfo: 'Проверка информации о подключении агента',
            checkStatus: 'Проверка доступности службы узла',
            fixStatus: 'Запустите "systemctl status 1panel-agent.service", чтобы проверить, запущена ли служба.',
            checkAPI: 'Проверка доступности API узла',
            fixAPI: 'Проверьте журналы узла и убедитесь, что порты брандмауэра правильно открыты.',
            forceDelete: 'Принудительное удаление',
            operateHelper: 'Будет выполнена операция {0} для следующих узлов, вы хотите продолжить?',
            operatePanelHelper: 'Операция {0} будет выполнена на следующих панелях. Продолжить?',
            forceDeleteHelper:
                'Принудительное удаление проигнорирует ошибки удаления узла и удалит метаданные базы данных',
            uninstall: 'Удалить данные узла',
            uninstallHelper: 'Это удалит все данные 1Panel, связанные с узлом. Выбирайте осторожно!',
            baseDir: 'Каталог установки',
            baseDirHelper: 'Если каталог установки пуст, по умолчанию он будет установлен в каталоге /opt',
            nodePort: 'Порт узла',
            offline: 'Автономный режим',
            freeCount: 'Бесплатная квота [{0}]',
            offlineHelper: 'Используется, когда узел находится в автономной среде',
            appUpgrade: 'Обновление приложения',
            appUpgradeHelper: 'Есть {0} приложений, которые необходимо обновить',
            dashboardSetting: 'Настройки обзора',
            keepOneDashboardComponent: 'Оставьте хотя бы один раздел обзора',
        },
        customApp: {
            name: 'Пользовательское хранилище приложений',
            appStoreType: 'Источник пакета App Store',
            appStoreUrl: 'URL хранилища',
            local: 'Локальный путь',
            remote: 'Удаленная ссылка',
            imagePrefix: 'Префикс образа',
            imagePrefixHelper:
                'Функция: Настройка префикса образа и изменение поля образа в файле compose. Например, если префикс образа установлен как 1panel/custom, поле образа для MaxKB изменится на 1panel/custom/maxkb:v1.10.0',
            closeHelper: 'Отменить использование пользовательского хранилища приложений',
            appStoreUrlHelper: 'Поддерживается только формат .tar.gz',
            postNode: 'Синхронизировать с подузлом',
            postNodeHelper:
                'Синхронизируйте пользовательский пакет магазина с tmp/customApp/apps.tar.gz в каталоге установки дочернего узла',
            nodes: 'Выбрать узлы',
            selectNode: 'Выбрать узел',
            selectNodeError: 'Пожалуйста, выберите узел',
            licenseHelper: 'Коммерческая версия поддерживает функцию пользовательского репозитория приложений',
            databaseHelper: 'База данных, связанная с приложением, выберите базу данных целевого узла',
            nodeHelper: 'Нельзя выбрать текущий узел',
            migrateHelper:
                'В настоящее время поддерживает миграцию только монолитных приложений и приложений, связанных только с базами данных MySQL, MariaDB, PostgreSQL',
            opensslHelper:
                'При использовании зашифрованного резервного копирования версии OpenSSL между двумя узлами должны быть согласованы, иначе миграция может завершиться неудачей.',
            installApp: 'Пакетная установка',
            installAppHelper: 'Пакетная установка приложений на выбранные узлы',
        },
        alert: {
            isAlert: 'Оповещение',
            alertCount: 'Количество оповещений',
            clamHelper: 'Отправлять оповещение при обнаружении зараженных файлов',
            cronJobHelper: 'Отправлять оповещение при сбое выполнения задачи',
            licenseHelper: 'Коммерческая версия поддерживает оповещения',
            alertCountHelper: 'Максимальная дневная частота оповещений',
            alert: 'SMS Уведомление',
            logs: 'Журнал Уведомлений',
            list: 'Список Уведомлений',
            addTask: 'Создать Уведомление',
            editTask: 'Редактировать Уведомление',
            alertMethod: 'Метод',
            alertMsg: 'Сообщение Уведомления',
            alertRule: 'Правила Уведомлений',
            titleSearchHelper: 'Введите название уведомления для нечеткого поиска',
            taskType: 'Тип',
            ssl: 'Срок действия сертификата',
            siteEndTime: 'Истечение срока действия сайта',
            panelPwdEndTime: 'Истечение срока действия пароля панели',
            panelUpdate: 'Доступна новая версия панели',
            cpu: 'Уведомление о загрузке процессора сервера',
            memory: 'Уведомление о памяти сервера',
            load: 'Уведомление о нагрузке сервера',
            disk: 'Уведомление о диске сервера',
            website: 'Веб-сайт',
            certificate: 'SSL Сертификат',
            remainingDays: 'Оставшиеся дни',
            sendCount: 'Количество Отправок',
            recipientPlaceholder: 'Введите адрес электронной почты',
            addRecipient: 'Добавить получателя',
            webhookItem: 'Ссылка Webhook',
            addWebhook: 'Добавить Webhook',
            selectAlertType: 'Выберите тип оповещения',
            configDetail: 'Настроить детали',
            webhookCount: 'Количество Webhook',
            sms: 'SMS',
            wechat: 'WeChat',
            dingTalk: 'DingTalk',
            feiShu: 'FeiShu',
            mail: 'Электронная Почта',
            email: 'Электронная Почта',
            weCom: 'WeCom',
            bark: 'Bark',
            sendCountRulesHelper: 'Общее количество уведомлений до истечения срока действия (раз в день)',
            panelUpdateRulesHelper: 'Общее количество уведомлений для новой версии панели (раз в день)',
            oneDaySendCountRulesHelper: 'Максимальное количество уведомлений в день',
            siteEndTimeRulesHelper: 'Сайты с неограниченным сроком действия не будут вызывать уведомления',
            autoRenewRulesHelper:
                'Сертификаты с включенным автоматическим продлением и оставшимися днями менее 31 не будут вызывать уведомления',
            panelPwdEndTimeRulesHelper:
                'Уведомления об истечении срока действия пароля панели недоступны, если срок действия не задан',
            sslRulesHelper: 'Все SSL Сертификаты',
            diskInfo: 'Диск',
            monitoringType: 'Тип Мониторинга',
            autoRenew: 'Автопродление',
            useDisk: 'Использование Диска',
            usePercentage: 'Процент Использования',
            changeStatus: 'Изменить Статус',
            disableMsg:
                'Остановка задачи уведомления предотвратит отправку сообщений этой задачей. Вы хотите продолжить?',
            enableMsg: 'Включение задачи уведомления позволит этой задаче отправлять сообщения. Вы хотите продолжить?',
            useExceed: 'Использование Превышает',
            useExceedRulesHelper: 'Отправить уведомление, если использование превышает установленное значение',
            cpuUseExceedAvg: 'Среднее использование процессора превышает заданное значение',
            memoryUseExceedAvg: 'Среднее использование памяти превышает заданное значение',
            loadUseExceedAvg: 'Средняя нагрузка превышает заданное значение',
            cpuUseExceedAvgHelper: 'Среднее использование процессора за указанное время превышает заданное значение',
            memoryUseExceedAvgHelper: 'Среднее использование памяти за указанное время превышает заданное значение',
            loadUseExceedAvgHelper: 'Средняя нагрузка за указанное время превышает заданное значение',
            resourceAlertRulesHelper: 'Примечание: Непрерывные уведомления в течение 30 минут отправят только одно',
            specifiedTime: 'Указанное Время',
            deleteTitle: 'Удалить Уведомление',
            deleteMsg: 'Вы уверены, что хотите удалить задачу уведомления?',
            allSslTitle: 'Уведомления об истечении срока действия всех SSL сертификатов сайтов',
            sslTitle: 'Уведомление об истечении срока действия SSL сертификата для сайта {0}',
            allSiteEndTimeTitle: 'Уведомления об истечении срока действия всех сайтов',
            siteEndTimeTitle: 'Уведомление об истечении срока действия сайта {0}',
            panelPwdEndTimeTitle: 'Уведомление об истечении срока действия пароля панели',
            panelUpdateTitle: 'Уведомление о новой версии панели',
            cpuTitle: 'Уведомление о высокой загрузке процессора',
            memoryTitle: 'Уведомление о высокой загрузке памяти',
            loadTitle: 'Уведомление о высокой нагрузке',
            diskTitle: 'Уведомление о высокой загрузке диска для точки монтирования {0}',
            allDiskTitle: 'Уведомление о высокой загрузке диска',
            timeRule:
                'Оставшееся время менее {0} дней (если не обработано, будет отправлено повторно на следующий день)',
            panelUpdateRule:
                'Отправить уведомление один раз при обнаружении новой версии панели (если не обработано, будет отправлено повторно на следующий день)',
            avgRule: 'Среднее использование {1} превышает {2}% в течение {0} минут, отправляется {3} раз в день',
            diskRule: 'Использование диска для точки монтирования {0} превышает {1}{2}, отправляется {3} раз в день',
            allDiskRule: 'Использование диска превышает {0}{1}, отправляется {2} раз в день',
            cpuName: 'Процессор',
            memoryName: 'Память',
            loadName: 'Нагрузка',
            diskName: 'Диск',
            syncAlertInfo: 'Ручная отправка',
            syncAlertInfoMsg: 'Вы хотите вручную отправить задачу уведомления?',
            pushError: 'Не удалось отправить',
            pushSuccess: 'Отправка успешна',
            syncError: 'Ошибка синхронизации',
            success: 'Уведомление успешно',
            pushing: 'В процессе отправки...',
            error: 'Ошибка оповещения',
            cleanLog: 'Очистить логи',
            cleanAlertLogs: 'Очистить журналы уведомлений',
            daily: 'Ежедневное количество уведомлений: {0}',
            cumulative: 'Общее количество уведомлений: {0}',
            clams: 'Антивирусная проверка',
            taskName: 'Имя задачи',
            cronJobType: 'Тип задачи',
            clamPath: 'Директория проверки',
            cronjob: 'Ошибка при выполнении Задача cron {0}',
            app: 'Резервное копирование приложения',
            web: 'Резервное копирование сайта',
            database: 'Резервное копирование базы данных',
            directory: 'Резервное копирование директории',
            log: 'Резервное копирование логов',
            snapshot: 'Системный снимок',
            clamsRulesHelper: 'Задачи сканирования на вирусы, требующие уведомлений',
            cronJobRulesHelper: 'Этот тип планируемой задачи требует конфигурации',
            clamsTitle: 'Задача сканирования на вирусы 「 {0} 」 обнаружила заражённый файл',
            cronJobAppTitle: 'Задача Cron - ошибка задачи резервного копирования приложения 「 {0} 」',
            cronJobWebsiteTitle: 'Задача Cron - ошибка задачи резервного копирования сайта 「 {0} 」',
            cronJobDatabaseTitle: 'Задача Cron - ошибка задачи резервного копирования базы данных 「 {0} 」',
            cronJobDirectoryTitle: 'Задача Cron - ошибка задачи резервного копирования директории 「 {0} 」',
            cronJobLogTitle: 'Задача Cron - ошибка задачи резервного копирования логов 「 {0} 」',
            cronJobSnapshotTitle: 'Задача Cron - ошибка задачи резервного копирования снимка системы 「 {0} 」',
            cronJobShellTitle: 'Задача Cron - ошибка выполнения скрипта Shell 「 {0} 」',
            cronJobCurlTitle: 'Задача Cron - ошибка доступа к URL 「 {0} 」',
            cronJobCutWebsiteLogTitle: 'Задача Cron - ошибка задачи нарезки логов сайта 「 {0} 」',
            cronJobCleanTitle: 'Задача Cron - ошибка задачи очистки кэша 「 {0} 」',
            cronJobNtpTitle: 'Задача Cron - ошибка задачи синхронизации времени сервера 「 {0} 」',
            clamsRule: 'Уведомление об обнаружении заражённого файла, отправляется {0} раз в день',
            cronJobAppRule:
                'Уведомление об ошибке задачи резервного копирования приложения, отправляется {0} раз в день',
            cronJobWebsiteRule:
                'Уведомление об ошибке задачи резервного копирования сайта, отправляется {0} раз в день',
            cronJobDatabaseRule:
                'Уведомление об ошибке задачи резервного копирования базы данных, отправляется {0} раз в день',
            cronJobDirectoryRule:
                'Уведомление об ошибке задачи резервного копирования директории, отправляется {0} раз в день',
            cronJobLogRule: 'Уведомление об ошибке задачи резервного копирования логов, отправляется {0} раз в день',
            cronJobSnapshotRule:
                'Уведомление об ошибке задачи резервного копирования снимка системы, отправляется {0} раз в день',
            cronJobShellRule: 'Уведомление об ошибке выполнения скрипта Shell, отправляется {0} раз в день',
            cronJobCurlRule: 'Уведомление об ошибке задачи доступа к URL, отправляется {0} раз в день',
            cronJobCutWebsiteLogRule: 'Уведомление об ошибке задачи нарезки логов сайта, отправляется {0} раз в день',
            cronJobCleanRule: 'Уведомление об ошибке задачи очистки кэша, отправляется {0} раз в день',
            cronJobNtpRule: 'Уведомление об ошибке задачи синхронизации времени сервера, отправляется {0} раз в день',
            alertSmsHelper: 'Лимит SMS: всего {0} сообщений, уже использовано {1}',
            goBuy: 'Купить больше',
            phone: 'Телефон',
            phoneHelper: 'Укажите реальный номер телефона для получения уведомлений',
            dailyAlertNum: 'Дневной Лимит Уведомлений',
            dailyAlertNumHelper: 'Максимальное количество уведомлений в день (до 100)',
            timeRange: 'Диапазон Времени',
            sendTimeRange: 'Временной интервал отправки',
            sendTimeRangeHelper: 'Можно отправлять в диапазоне {0}',
            to: 'до',
            startTime: 'Время Начала',
            endTime: 'Время Завершения',
            defaultPhone: 'По умолчанию используется номер телефона, привязанный к лицензии',
            noticeAlert: 'Уведомление',
            resourceAlert: 'Уведомление о Ресурсах',
            agentOfflineAlertHelper:
                'При включении офлайн-оповещений для узла главный узел будет каждые 30 минут выполнять проверку и запускать задачи оповещения.',
            offline: 'Оповещение об отключении',
            offlineHelper:
                'Если выбрано офлайн-оповещение, главный узел будет каждые 30 минут выполнять проверку и запускать задачи оповещения.',
            offlineOff: 'Включить офлайн-оповещение',
            offlineOffHelper:
                'Включение офлайн-оповещений заставит главный узел каждые 30 минут выполнять задачи оповещения.',
            offlineClose: 'Отключить офлайн-оповещение',
            offlineCloseHelper:
                'Отключив офлайн-оповещения, вы передаёте ответственность за оповещения на подчинённые узлы. Убедитесь, что сеть работает стабильно, чтобы избежать сбоев.',
            alertNotice: 'Уведомление об оповещении',
            methodConfig: 'Настройка способа уведомления',
            createMethod: 'Создать способ уведомления',
            methodInvalid: 'Недопустимая конфигурация {0}',
            commonConfig: 'Глобальная настройка',
            smsConfig: 'SMS',
            smsConfigHelper: 'Настройка номеров для SMS-уведомлений',
            emailConfig: 'электронной почты',
            emailConfigHelper: 'Настройка службы отправки SMTP-писем',
            deleteConfigTitle: 'Удалить конфигурацию оповещения',
            deleteConfigMsg: 'Вы уверены, что хотите удалить конфигурацию оповещения?',
            test: 'Тест',
            alertTestOk: 'Тестовое уведомление успешно',
            alertTestFailed: 'Не удалось отправить тестовое уведомление',
            displayName: 'имя',
            sender: 'отправителя',
            password: 'Пароль',
            host: 'SMTP сервер',
            port: 'Порт',
            encryption: 'шифрования',
            recipient: 'Получатель',
            licenseTime: 'Напоминание об истечении лицензии',
            licenseTimeTitle: 'Напоминание об истечении лицензии',
            displayNameHelper: 'Отображаемое имя отправителя письма',
            senderHelper: 'Адрес электронной почты для отправки сообщений',
            passwordHelper: 'Код авторизации почтового сервиса',
            hostHelper: 'Адрес SMTP-сервера, например: smtp.qq.com',
            portHelper: 'SSL обычно использует 465, TLS — 587',
            sslHelper: 'Если порт SMTP — 465, обычно требуется SSL',
            tlsHelper: 'Если порт SMTP — 587, обычно требуется TLS',
            triggerCondition: 'Условие срабатывания',
            loginFail: ' неудачных попыток входа в течение',
            nodeException: 'Оповещение о сбое узла',
            licenseException: 'Оповещение о сбое лицензии',
            panelLogin: 'Оповещение о сбое входа в панель',
            sshLogin: 'Оповещение о сбое входа по SSH',
            panelIpLogin: 'Оповещение о сбое IP входа в панель',
            sshIpLogin: 'Оповещение о сбое IP входа по SSH',
            ipWhiteListHelper:
                'IP-адреса в белом списке не ограничиваются правилами, и при успешном входе оповещение не создается',
            nodeExceptionRule: 'Оповещение о сбое узла, отправляется {0} раз в день',
            licenseExceptionRule: 'Оповещение о сбое лицензии, отправляется {0} раз в день',
            panelLoginRule: 'Оповещение о входе в панель, отправляется {0} раз в день',
            sshLoginRule: 'Оповещение о входе по SSH, отправляется {0} раз в день',
            userNameHelper: 'Имя пользователя не указано, по умолчанию будет использоваться адрес отправителя',
            alertConfigHelper: 'Настройка каналов уведомлений для получения push-уведомлений от панели',
            weComConfigHelper: 'Конфигурация уведомлений WeCom',
            wechatConfigHelper: 'Конфигурация уведомлений официального аккаунта WeChat',
            dingTalkConfigHelper: 'Конфигурация уведомлений DingTalk',
            feiShuConfigHelper: 'Конфигурация уведомлений Feishu',
            barkConfigHelper: 'Конфигурация уведомлений Bark',
            webhookName: 'Имя бота',
            webhookUrl: 'URL Webhook',
            alertConfigProHelper:
                'Коммерческая версия дополнительно поддерживает уведомления через WeCom, DingTalk, Feishu и SMS.',
        },
        theme: {
            lingXiaGold: 'LXware Gold',
            classicBlue: 'Классический Синий',
            freshGreen: 'Свежий Зелёный',
            customColor: 'Пользовательский Цвет',
            setDefault: 'По умолчанию',
            setDefaultHelper: 'Цветовая схема темы будет восстановлена до исходного состояния. Вы хотите продолжить?',
            setHelper: 'Выбранная в данный момент цветовая схема темы будет сохранена. Вы хотите продолжить?',
        },
        sync: {
            menu: 'Синхронизация ресурсов',
            file: 'Передача файлов',
            fileSyncConfirm: 'Передать файл/папку {1} с узла {0} в каталог {3} на узле {2}?',

            image: 'Передача образов',
            imageBatchDesc:
                'Сначала выберите исходный узел и исходные образы, затем выберите целевые узлы для передачи.',
            imageBatchConfirmPrefix: 'Будет передано {0} образов на {1} узлов, всего {2} задач.',

            ssl: 'Синхронизация сертификатов',
            sslBatchDesc:
                'После выбора исходного узла указанные сертификаты можно синхронизировать с текущей средой панели.',
            sslBatchConfirmPrefix: 'Будет синхронизировано {0} сертификатов на {1} узлов, всего {2} задач.',

            app: 'Передача приложений',
            appBatchDesc:
                'Выберите исходный узел, приложение и целевые узлы, подтвердите зависимости ресурсов и запустите задачу передачи приложения.',
            appSelectedApp: 'Выбранное приложение:',
            appPreviewTitle: 'Предварительный просмотр передачи',
            appPreviewDesc: 'Подтвердите целевые узлы и зависимые ресурсы перед запуском передачи приложения.',
            appDatabaseDependency: 'Зависимость базы данных',
            appResourceRequired: 'Сначала выберите все необходимые связанные ресурсы.',
            appUnsupportedMultipleResources:
                'В настоящее время поддерживается миграция только приложений, связанных максимум с одним ресурсом.',
            appUnsupportedResourceType:
                'В настоящее время поддерживается миграция только приложений без зависимостей ресурсов или зависящих только от MySQL, MariaDB или PostgreSQL.',

            targetTitle: 'Целевые узлы',
            targetDesc: 'Исходный узел будет автоматически исключён. Можно выбрать один или несколько целевых узлов.',
            targetSearchPlaceholder: 'Поиск по имени или адресу узла',
            noTargetNodes: 'Нет доступных целевых узлов',
            noSourceNode: 'Сначала выберите исходный узел',
            reviewTargets: 'Целевые узлы',
            reviewEmpty: 'Сначала выберите ресурсы и целевые узлы',
            selectSourceFirst: 'Сначала выберите исходный узел.',
            selectResourceFirst: 'Сначала выберите ресурс для синхронизации.',
            selectTargetFirst: 'Выберите хотя бы один целевой узел.',
            submitSuccess: 'Задача синхронизации успешно отправлена.',
        },
        vm: {
            vm: 'Виртуальная машина',
            title: 'Управление виртуальными машинами',
            healthCheck: 'Проверка состояния',
            healthCheckResult: {
                pass: 'Успешно',
                info: 'Информация',
                warn: 'Предупреждение',
                fail: 'Ошибка',
                normal: 'Норма',
                fixCommand: 'Команда исправления',
                technicalDetail: 'Технические сведения',
                check: {
                    vmName: 'Имя виртуальной машины',
                    libvirtConnection: 'Подключение к Libvirt',
                    vmDefinition: 'Определение виртуальной машины',
                    domainXML: 'XML виртуальной машины',
                    architecture: 'Архитектура',
                    virtualizationType: 'Тип виртуализации',
                    machineType: 'Тип машины',
                    efiCapability: 'Поддержка EFI',
                    qemuEmulator: 'Эмулятор QEMU',
                    bootOrder: 'Порядок загрузки',
                    arm64Firmware: 'Прошивка ARM64',
                    arm64Features: 'Функции ARM64',
                    arm64Video: 'Видеоустройство ARM64',
                    arm64FirmwareFile: 'Файл прошивки ARM64',
                    arm64CDROM: 'CD-ROM ARM64',
                    blockDevice: 'Блочное устройство',
                    isoArchitecture: 'Архитектура ISO',
                    network: 'Сеть',
                    qemuLog: 'Журнал QEMU',
                    arm64RuntimeFirmware: 'Прошивка ARM64 во время выполнения',
                },
                reason: {
                    invalidName: 'Недопустимое имя виртуальной машины.',
                    connectionFailed: 'Не удалось подключиться к {uri}.',
                    vmNotFound: 'Виртуальная машина {name} не найдена.',
                    xmlReadFailed: 'Не удалось прочитать XML виртуальной машины.',
                    liveXMLFallback:
                        'Не удалось прочитать постоянную конфигурацию; используется текущая конфигурация запущенной машины.',
                    xmlParseFailed: 'Не удалось разобрать XML виртуальной машины.',
                    stateReadFailed:
                        'Не удалось определить состояние виртуальной машины. Проверка прошивки во время выполнения пропущена.',
                    guestArchMissing: 'В XML отсутствует архитектура гостевой системы.',
                    archMismatch:
                        'Архитектура хоста — {hostArch}, а гостевой системы — {guestArch}. Выполнение между разными архитектурами не поддерживается.',
                    nonKVMType: 'Тип виртуализации — {type}, а не KVM по умолчанию.',
                    archOrMachineMissing: 'В XML отсутствует архитектура или тип машины.',
                    machineUnsupported: 'Хост не поддерживает {arch}/{machine}.',
                    emulatorNotSpecified: 'Эмулятор не указан в XML; Libvirt выберет его автоматически.',
                    fileNotFound: 'Файл не найден: {path}',
                    fileNotExecutable: 'Файл не является исполняемым: {path}',
                    bootDeviceMissing: 'В XML не определено загрузочное устройство.',
                    diskNotFirst: 'Диск не является первым загрузочным устройством. Текущий порядок: {order}',
                    cdromNotInBootOrder: 'CD-ROM подключён, но отсутствует в порядке загрузки.',
                    firmwareNotConfigured:
                        'EFI или Loader не настроены, поэтому гостевая система может не инициализировать экран или не загрузиться.',
                    acpiCustom: 'ACPI настроен. Убедитесь, что гостевой системе действительно нужна эта настройка.',
                    acpiRequiresUEFI: 'ACPI настроен без UEFI, что вызывает ошибку ACPI requires UEFI.',
                    apicUnsupported: 'Настроен x86 APIC, который недопустим для ARM64.',
                    gicNotDeclared: 'GIC отсутствует в постоянном XML; Libvirt может добавить его во время выполнения.',
                    videoNotConfigured: 'В XML не настроено видеоустройство.',
                    videoNotVirtio: 'Тип видеоустройства — {type}; рекомендуется Virtio.',
                    firmwareFileMissing: 'Файл прошивки не существует или не является обычным файлом: {path}',
                    firmwareNotAvailable: 'Libvirt не сообщает о поддержке EFI, и прошивка ARM64 UEFI не найдена.',
                    cdromBusNotSCSI: 'CD-ROM использует шину {bus}; для ARM64 требуется SCSI.',
                    cdromNotOnVirtioSCSI: 'CD-ROM не подключён к контроллеру Virtio SCSI.',
                    diskSourceMissing: 'Для {device} {target} не настроен исходный файл.',
                    sourceNotFound: 'Исходный файл для {device} {target} не существует: {path}',
                    sourceIsDirectory: 'Исходный путь для {device} {target} является каталогом: {path}',
                    systemDiskNotFound: 'Системный диск не обнаружен.',
                    isoArchMismatch:
                        'К гостевой системе {guestArch} подключён образ, предназначенный, вероятно, для {imageArch}: {path}',
                    networkReadFailed: 'Не удалось прочитать сеть {name}.',
                    networkStateReadFailed: 'Не удалось прочитать состояние сети {name}.',
                    networkInactive: 'Сеть {name} существует, но не активна.',
                    logUnavailable: 'Журнал запуска для анализа отсутствует.',
                    logErrorsFound: 'В последней записи запуска обнаружены распространённые ошибки.',
                    vmNotRunning:
                        'Виртуальная машина не запущена, поэтому проверка аргументов QEMU во время выполнения пропущена.',
                    runtimeFirmwareMissing: 'В журнале QEMU не найдены записи pflash, AAVMF или QEMU_EFI.',
                },
            },
            dependencies: 'Зависимости',
            dependencyPurpose: 'Назначение',
            dependencyPurposeMap: {
                libvirt: 'Предоставляет службу управления ВМ, отвечает за жизненный цикл и распределение ресурсов.',
                storage: 'Предоставляет каталог хранения по умолчанию или пул хранения для файлов дисков ВМ.',
            },
            dependencyNotReady:
                'Проверка зависимостей ВМ не пройдена. Исправьте зависимости перед использованием виртуальных машин.',
            helperUnavailable:
                'Не удалось инициализировать возможности ВМ. Проверьте журналы Core или повторите обновление перед использованием виртуальных машин.',
            cpu: 'CPU',
            memory: 'Память',
            disk: 'Диск',
            overview: 'Обзор',
            kvmUnavailable: 'Доступные средства аппаратной виртуализации KVM не обнаружены.',
            kvmCheckCpu: 'Убедитесь, что процессор хоста поддерживает виртуализацию Intel VT-x или AMD-V.',
            kvmCheckBios: 'Включите параметры виртуализации в BIOS/UEFI.',
            kvmCheckModule: 'Убедитесь, что модуль ядра kvm, kvm_intel или kvm_amd загружен правильно.',
            kvmCheckDevice:
                'Убедитесь, что /dev/kvm существует, а текущая среда не является контейнером или облачным хостом без поддержки KVM.',
            abnormal: 'Неисправно',
            resourceOverview: 'Обзор ресурсов',
            cpuAllocated: 'Выделено CPU',
            memoryAllocated: 'Выделено памяти',
            storageUsed: 'Использовано хранилища',
            riskReminder: 'Предупреждения о рисках',
            noRisk: 'Рисков нет',
            runtimeHealth: 'Состояние среды выполнения',
            runtimeAbnormal: 'Среда выполнения ВМ работает ненормально',
            noDependency: 'Нет данных проверки зависимостей',
            storageOverview: 'Обзор хранилища',
            totalAllocated: 'Рассчитано по общей конфигурации ВМ',
            runningAllocated: 'Выделено работающим ВМ: {0}',
            storageAvailable: 'Доступно: {0}',
            inProgress: 'Выполняется',
            needAttention: 'Требует внимания',
            normal: 'Нормально',
            environmentRisk: 'Среда выполнения ВМ не готова. Исправьте зависимости или службы виртуализации.',
            storageRisk: 'Использование пула хранилища {0} достигло {1}%.',
            abnormalRisk: 'ВМ в неисправном состоянии: {0}.',
            pausedRisk: 'Приостановлено ВМ: {0}.',
            memoryRisk: 'Выделение памяти ВМ достигло {0}%.',
            cpuLimitHelper: 'Доступно CPU сейчас: {0} ядер',
            cpuLimitExceeded: 'CPU превышает лимит. Текущий максимум: {0} ядер.',
            memoryLimitHelper: 'Доступная для выделения память: {0} (хост должен зарезервировать {1} памяти)',
            memoryLimitExceeded: 'Память превышает лимит. Текущий максимум для выделения: {0}.',
            storageLimitHelper: 'Текущее свободное место в целевом пуле хранения: {0}',
            storageLimitExceeded: 'Ёмкость диска превышает лимит. Текущий максимум: {0}.',
            iso: 'ISO',
            createFromTemplate: 'Создать из шаблона',
            template: 'Шаблон',
            templateName: 'Имя шаблона',
            convertToTemplate: 'Преобразовать в шаблон',
            sourceVM: 'Исходная ВМ',
            templateSize: 'Размер шаблона',
            deleteTemplateConfirm: 'Удалить шаблон {0}. Эту операцию нельзя отменить. Продолжить?',
            orphanClean: 'Очистка неиспользуемых данных',
            orphanScan: 'Повторить сканирование',
            orphanCleanHelper:
                'Отображаются только файлы-кандидаты, на которые не ссылаются виртуальные машины, снимки или зарегистрированные шаблоны. Перед очисткой убедитесь, что файл больше не используется: операцию нельзя отменить.',
            orphanSelected: 'Выбрано файлов: {0}, всего {1}',
            orphanSize: 'Размер',
            orphanCleanConfirm: 'Очистить выбранные файлы: {0} ({1})? Эту операцию нельзя отменить.',
            orphanCleanSuccess: 'Очищено файлов: {0}, освобождено: {1}.',
            orphanType: {
                orphan_domain_disk: 'Неиспользуемый диск',
                orphan_snapshot: 'Неиспользуемый снимок',
                partial_file: 'Незавершенный файл',
            },
            diskSize: 'Размер диска',
            diskPath: 'Путь к диску',
            isoPath: 'Путь к ISO',
            storagePool: 'Пул хранения',
            network: 'Сеть',
            bridgeName: 'Имя моста',
            natNetworkHelper:
                'ВМ может выходить в сеть через хост, но внешние устройства обычно не могут обращаться к ней напрямую.',
            bridgeNetworkHelper:
                'Подключите ВМ к существующему мосту хоста (например, br0). Если у хоста есть неиспользуемая дополнительная сетевая карта, для неё можно создать мост и использовать его.',
            bridgeNameHelper:
                'Выберите существующий Linux bridge на хосте, например br0. Физические NIC не являются bridge, а bridge под управлением docker/libvirt здесь выбрать нельзя.',
            natCIDRHelper: 'CIDR, шлюз и диапазон DHCP будут использоваться новой виртуальной сетью NAT.',
            networkCIDR: 'CIDR сети',
            gateway: 'Шлюз',
            dhcpStart: 'Начальный адрес DHCP',
            dhcpEnd: 'Конечный адрес DHCP',
            bootOrder: 'Порядок загрузки',
            bootDiskFirst: 'Сначала диск (HD → CD-ROM)',
            bootIsoFirst: 'Сначала ISO (CD-ROM → HD)',
            bootOrderConfirm:
                'Изменить порядок загрузки на {0}? При следующем запуске ВМ проверит в этом порядке подключённые загрузочные устройства.',
            startAfterCreate: 'Запустить после создания',
            autoStart: 'Автозапуск',
            resourceAutoStart: 'Автозапуск',
            capacity: 'Ёмкость',
            available: 'Доступно',
            vmCount: 'Связанные ВМ',
            usedIPs: 'Использованные IP',
            monitor: 'Мониторинг',
            monitorNotReady: 'Виртуальная машина не запущена. Данные мониторинга недоступны.',
            monitorLoadFailed: 'Не удалось получить данные мониторинга ВМ.',
            monitorLoadFailedWithReason: 'Не удалось получить данные мониторинга ВМ: {0}',
            rename: 'Переименовать',
            newName: 'Новое имя',
            renameHelper: 'Введите новое имя ВМ. Перед переименованием ВМ должна быть выключена.',
            renameConfirm: 'Переименовать виртуальную машину [{0}] в [{1}]?',
            renameRunningHelper: 'Выключите виртуальную машину перед переименованием.',
            cpuUsage: 'Использование CPU',
            memoryUsage: 'Использование памяти',
            diskIO: 'Ввод-вывод диска',
            networkIO: 'Сетевой ввод-вывод',
            diskReadWrite: 'Чтение / Запись диска',
            networkRxTx: 'Приём / Передача по сети',
            rx: 'RX',
            tx: 'TX',
            console: 'Консоль',
            consoleNotReady: 'Консоль VNC недоступна. Запустите ВМ и проверьте конфигурацию графики VNC.',
            consoleDisconnected: 'Консоль VNC отключена.',
            consoleConnectFailed: 'Не удалось подключиться к консоли VNC. Проверьте службу прокси консоли.',
            consoleCredentialsRequired:
                'Для консоли VNC требуются учётные данные. Проверьте конфигурацию backend-прокси.',
            snapshot: 'Снимок',
            createSnapshot: 'Создать снимок',
            recoverSnapshot: 'Восстановить снимок',
            snapshotSize: 'Использовано',
            currentSnapshot: 'Текущий',
            snapshotEmpty: 'Нет снимков',
            snapshotHelper:
                'Снимок сохраняет текущее состояние ВМ как точку восстановления. Последующие изменения записываются в разностный файл без изменения исходного диска. Восстановление снимка возвращает ВМ к этому состоянию.',
            snapshotOperationHelper:
                'Текущий снимок нельзя удалить. Восстановить снимок можно только при выключенной виртуальной машине.',
            snapshotRecoverConfirm:
                'Восстановить виртуальную машину [{1}] до снимка [{0}]? Диск ВМ будет возвращён к состоянию снимка.',
            interface: 'Сетевой интерфейс',
            device: 'Устройство',
            path: 'Путь',
            start: 'Запустить',
            shutdown: 'Выключить',
            reboot: 'Перезагрузить',
            destroy: 'Принудительно остановить',
            suspend: 'Приостановить',
            resume: 'Возобновить',
            operateConfirm: 'Подтвердить {0} виртуальной машины [{1}]?',
            forceDelete: 'Принудительно удалить',
            forceDeleteHelper:
                'Принудительное удаление проигнорирует ошибки удаления ВМ, удалит метаданные панели и освободит ресурсы.',
            deleteNameHelper: '" для удаления этой виртуальной машины',
            isoSource: 'Источник ISO',
            downloadFromServer: 'Удалённая загрузка',
            isoTargetDir: 'Целевой путь ISO',
            isoTargetDirHelper: 'ISO, загруженные локально или скачанные с сервера, будут сохранены в этот каталог.',
            addingIsoRecord: 'Добавление записи ISO',
            transferInProgress: 'Передача ISO выполняется. Не закрывайте эту панель или страницу.',
            isoSize: 'Размер ISO',
            deleteIsoConfirm: 'Эту операцию удаления нельзя отменить. Продолжить?',
            deleteSourceFile: 'Удалить исходный файл',
            deleteSourceFileHelper:
                'Если отмечено, исходный файл, на который ссылается эта запись ISO, также будет удалён без возможности восстановления.',
            dir: 'Локальный каталог',
        },
        cluster: {
            cluster: 'Высокая доступность приложений',
            name: 'Имя кластера',
            addCluster: 'Добавить кластер',
            installNode: 'Установить узел',
            master: 'Главный узел',
            slave: 'Подчиненный узел',
            replicaStatus: 'Состояние мастер-слейв',
            unhealthyDeleteError:
                'Состояние узла установки аномально, пожалуйста, проверьте список узлов и повторите попытку!',
            replicaStatusError: 'Получение статуса аномально, пожалуйста, проверьте главный узел.',
            masterHostError: 'IP главного узла не может быть 127.0.0.1',
        },
    },
    template: {
        create: 'Создать шаблон',
        edit: 'Редактировать шаблон',
        name: 'Имя шаблона',
        type: 'Тип шаблона',
        single: 'Один файл',
        multi: 'Несколько файлов (zip)',
        content: 'Содержимое шаблона',
        variables: 'Определение переменных',
        remark: 'Примечание',
        filePath: 'Путь к файлу',
        upload: 'Загрузить zip',
        preview: 'Предпросмотр',
        previewEmpty: 'Выберите шаблон для предпросмотра в реальном времени',
        generate: 'Сгенерировать результат',
        outputName: 'Имя результата',
        outputList: 'Список результатов',
        outputCreate: 'Сгенерировать результат',
        confirmDelete: 'Вы уверены, что хотите удалить этот шаблон? Связанные результаты также будут удалены',
        confirmDeleteOutput: 'Вы уверены, что хотите удалить этот результат?',
        variableKey: 'Имя переменной',
        variableLabel: 'Метка',
        variableType: 'Тип',
        variableDefault: 'Значение по умолчанию',
        variableOptions: 'Варианты (через запятую)',
        variableRequired: 'Обязательно',
        varTypeText: 'Однострочный текст',
        varTypeTextHelper: 'Обычное текстовое поле',
        varTypeTextarea: 'Многострочный текст',
        varTypeTextareaHelper: 'Подходит для абзацев и длинного текста',
        varTypeNumber: 'Число',
        varTypeNumberHelper: 'Только числовой ввод',
        varTypeSelect: 'Выпадающий список',
        varTypeSelectHelper: 'Выбор из заданных вариантов, требуется указать варианты',
        varTypeColor: 'Цвет',
        varTypeColorHelper: 'Палитра цветов',
        autoDetectHelper: 'Переменные в двойных фигурных скобках распознаются автоматически и добавляются в таблицу',
        selectTemplate: 'Выбрать шаблон',
        fillVariables: 'Заполнить переменные',
        noVariables: 'В этом шаблоне не определены переменные',
        outputSuccess: 'Результат успешно сгенерирован',
        importButton: 'Импорт из шаблона',
    },
};

export default {
    ...getFuLocaleMessage('ru'),
    ...message,
};
