{
"cli.bundle.add.adding": "Добавление pack в bundle...",
"cli.bundle.add.bundle": " Bundle: {}",
"cli.bundle.add.created_structure": "Создана структура bundle в {}",
"cli.bundle.add.dry_run": "[dry-run] Pack будет добавлен в bundle",
"cli.bundle.add.env": " Окружение: {}",
"cli.bundle.add.pack_ref": " Ссылка на pack: {}",
"cli.bundle.add.resolved": " Разрешённые packs: {}",
"cli.bundle.add.success": "Pack успешно добавлен в bundle.",
"cli.bundle.add.team": " Команда: {}",
"cli.bundle.add.tenant": " Tenant: {}",
"cli.bundle.add.version_warning": "Предупреждение: Проверка версии {} не удалась: {}",
"cli.bundle.build.building": "Сборка портативного bundle...",
"cli.bundle.build.output": " Выход: {}",
"cli.bundle.build.running_doctor": "Запуск проверки doctor...",
"cli.bundle.build.success": "Bundle успешно собран в {}",
"cli.bundle.init.created": "Bundle создан в {}",
"cli.bundle.init.creating": "Создание bundle в {}...",
"cli.bundle.init.exists": "Bundle уже существует в {}",
"cli.bundle.init.next_steps": "Следующие шаги:",
"cli.bundle.init.step_add": " 1. greentic-setup bundle add <pack.gtpack> --bundle {}",
"cli.bundle.init.step_setup": " 2. greentic-setup bundle setup --bundle {} --answers answers.yaml",
"cli.bundle.list.bundle": "Bundle: {}",
"cli.bundle.list.domain": "Домен: {}",
"cli.bundle.list.packs_found": "Найдено packs: {}",
"cli.bundle.remove.cancelled": "удаление отменено - используйте --force для подтверждения",
"cli.bundle.remove.complete": "Provider удалён: {}",
"cli.bundle.remove.confirm": "Это удалит конфигурацию provider.",
"cli.bundle.remove.removing": "Удаление provider...",
"cli.bundle.remove.use_force": "Используйте --force для подтверждения.",
"cli.bundle.setup.complete": "Настройка provider завершена: {}",
"cli.bundle.setup.domain": " Домен: {}",
"cli.bundle.setup.dry_run": "[dry-run] Provider будет настроен: {}",
"cli.bundle.setup.emit_usage": "Отредактируйте и используйте с: greentic-setup bundle setup --answers {}",
"cli.bundle.setup.emit_written": "Шаблон ответов записан в: {}",
"cli.bundle.setup.env_bootstrap_created": "Инициализирована среда `local` с привязками возможностей по умолчанию в {}.",
"cli.bundle.setup.interactive_not_impl": "Интерактивная настройка ещё не реализована.",
"cli.bundle.setup.provider": " Provider: {}",
"cli.bundle.setup.setting_up": "Настройка provider...",
"cli.bundle.setup.use_answers": "Используйте --answers <файл> для указания ответов настройки.",
"cli.bundle.setup.use_emit_answers": "Или используйте --emit-answers <файл> для генерации шаблона ответов.",
"cli.bundle.status.bundle_label": "Bundle: {}",
"cli.bundle.status.not_found": "Bundle не найден: {}",
"cli.bundle.status.packs": "Packs: {} установлено",
"cli.bundle.status.tenants": "Tenants: {}",
"cli.bundle.status.valid_no": "нет (отсутствует greentic.demo.yaml)",
"cli.bundle.status.valid_yes": "да",
"cli.bundle.update.complete": "Обновление provider завершено: {}",
"cli.bundle.update.dry_run": "[dry-run] Provider будет обновлён: {}",
"cli.bundle.update.emit_usage": "Отредактируйте и используйте с: greentic-setup bundle update --answers {}",
"cli.bundle.update.updating": "Обновление конфигурации provider...",
"cli.error.answers_required": "--answers обязателен в неинтерактивном режиме",
"cli.error.failed_build_plan": "не удалось построить план",
"cli.error.failed_create_bundle": "не удалось создать структуру bundle",
"cli.error.failed_emit_answers": "не удалось сгенерировать шаблон ответов",
"cli.error.failed_execute_plan": "не удалось выполнить план",
"cli.error.failed_read_answers": "не удалось прочитать файл ответов",
"cli.error.interactive_required": "интерактивная настройка требует файл --answers",
"cli.error.invalid_bundle": "недопустимая директория bundle",
"cli.help.for_help": "Для справки: greentic-setup --help",
"cli.simple.bundle_required": "Требуется путь к bundle. Использование: greentic-setup [OPTIONS] <BUNDLE>",
"cli.simple.dry_run": "[dry-run] Bundle будет настроен: {}",
"cli.simple.emit_usage": "Отредактируйте и используйте с: greentic-setup --answers {} {}",
"cli.simple.expected_bundle_format": "ожидается директория или файл .gtbundle: {}",
"cli.simple.extracted_to": " Распаковано в: {}",
"cli.simple.extracting": "Распаковка архива .gtbundle...",
"cli.simple.header": "Greentic Setup",
"cli.simple.interactive_mode": "Режим интерактивного мастера",
"cli.simple.wizard_not_impl": "интерактивный мастер ещё не реализован - используйте --answers <файл>",
"env_wizard.basic_mode": "Базовый режим — передайте --advanced, чтобы также задать ID клиента, переопределения конфигурации, хосты маршрутов, welcome flow и ссылки на секреты эндпоинта.",
"env_wizard.dry_run_secrets_note": "Примечание: --dry-run только предварительно показывает изменения — {} вставленных значений секретов, которые вы ввели, НЕ записываются в хранилище. Повторите запуск без --dry-run и подтвердите план, чтобы сохранить их.",
"env_wizard.form.desc": "Создает манифест `greentic.env-manifest.v1` — долговечный, повторно применяемый документ желаемого состояния для одной среды.",
"env_wizard.form.title": "Настройка среды",
"env_wizard.list.bundles.item_label": "пакет",
"env_wizard.list.messaging_endpoints.item_label": "Эндпоинт сообщений",
"env_wizard.list.secrets.item_label": "секрет",
"env_wizard.manifest_prompt": "Файл манифеста [{}]: ",
"env_wizard.q.bundle_id.desc": "Естественный ключ — уникален в пределах манифеста.",
"env_wizard.q.bundle_id.title": "ID пакета",
"env_wizard.q.bundle_path.desc": "Локальный `.gtbundle`. Относительные пути разрешаются относительно каталога файла манифеста.",
"env_wizard.q.bundle_path.title": "Путь к пакету",
"env_wizard.q.bundles.desc": "Развертывания пакетов для этой среды.",
"env_wizard.q.bundles.title": "Пакеты",
"env_wizard.q.config_overrides.desc": "JSON-объект `{\"<pack_id>\": {\"<key>\": <value>}}`. Пусто = оставить без изменений; `{}` = явная очистка.",
"env_wizard.q.config_overrides.title": "Переопределения конфигурации (JSON)",
"env_wizard.q.customer_id.desc": "Плательщик — требуется apply для сред, отличных от `local`.",
"env_wizard.q.customer_id.title": "ID клиента",
"env_wizard.q.environment_id.desc": "Среда, к которой применять. `local` инициализируется с привязками env-pack по умолчанию; любой другой ID уже должен существовать (apply согласует его; создание нелокальных сред зарезервировано за хранилищем оператора).",
"env_wizard.q.environment_id.title": "ID среды",
"env_wizard.q.from_env.desc": "Имя переменной, содержащей значение секрета (например, TELEGRAM_BOT_TOKEN) — именно имя, а не значение. Обязательно, когда источник — `env`.",
"env_wizard.q.from_env.title": "Имя переменной среды",
"env_wizard.q.links.desc": "Разделенные запятыми `bundle_id`, которые допускает этот эндпоинт.",
"env_wizard.q.links.title": "ID связанных пакетов",
"env_wizard.q.messaging_endpoints.desc": "Эндпоинты сообщений и их связи с пакетами.",
"env_wizard.q.messaging_endpoints.title": "Эндпоинты сообщений",
"env_wizard.q.name.desc": "Локальный для манифеста идентификатор и отображаемое имя. Ключ upsert вместе с типом провайдера.",
"env_wizard.q.name.title": "Имя эндпоинта",
"env_wizard.q.path.desc": "`<tenant>/<team>/<pack>/<name>`, например default/_/messaging-telegram/telegram_bot_token",
"env_wizard.q.path.title": "Путь к секрету",
"env_wizard.q.provider_type.desc": "Класс провайдера, например messaging.telegram.bot.",
"env_wizard.q.provider_type.title": "Тип провайдера",
"env_wizard.q.public_base_url.desc": "URL только origin, сохраненный в среде (например, https://bots.example.com). Оставьте пустым, чтобы сохранить текущее значение.",
"env_wizard.q.public_base_url.title": "Публичный базовый URL",
"env_wizard.q.route_hosts.desc": "Разделенные запятыми имена хостов для привязки маршрута.",
"env_wizard.q.route_hosts.title": "Хосты маршрутов",
"env_wizard.q.route_path_prefixes.desc": "Разделенные запятыми префиксы HTTP-путей, каждый начинается с `/` (например, /legal).",
"env_wizard.q.route_path_prefixes.title": "Префиксы путей маршрутов",
"env_wizard.q.route_team.desc": "Команда для селектора tenant привязки маршрута — задается вместе с `route_tenant`.",
"env_wizard.q.route_team.title": "Команда маршрута",
"env_wizard.q.route_tenant.desc": "Tenant для селектора tenant привязки маршрута — задается вместе с `route_team`.",
"env_wizard.q.route_tenant.title": "Tenant маршрута",
"env_wizard.q.secret_refs.desc": "Разделенные запятыми ссылки на секреты, передаваемые при создании эндпоинта.",
"env_wizard.q.secret_refs.title": "Ссылки на секреты",
"env_wizard.q.secrets.desc": "Записи секретов dev-store. Значение каждого секрета берется либо из именованной переменной среды, либо из значения, которое вы вставляете — значения никогда не попадают в манифест.",
"env_wizard.q.secrets.title": "Секреты",
"env_wizard.q.source.desc": "`env` читает значение из именованной переменной среды во время apply; `paste` позволяет ввести значение интерактивно — оно хранится в хранилище секретов env, а не в манифесте.",
"env_wizard.q.source.title": "Источник секрета",
"env_wizard.q.trust_root_bootstrap.desc": "Заполнить корень доверия среды локальным ключом оператора (идемпотентно; требуется один раз, прежде чем пакеты можно будет подготовить).",
"env_wizard.q.trust_root_bootstrap.title": "Инициализировать корень доверия?",
"env_wizard.q.webchat_gui.desc": "Запускать встроенную консоль веб-чата, чтобы вы могли общаться с этим окружением, открыв его URL в браузере. По умолчанию включено для `local`; путь чата доступен только через loopback и без аутентификации, поэтому оставляйте его выключенным для окружений, доступных по публичному URL, если только это не намеренно.",
"env_wizard.q.webchat_gui.title": "Добавить графический интерфейс веб-чата?",
"env_wizard.q.welcome_bundle_id.desc": "Задайте три поля welcome_* вместе (или ни одного).",
"env_wizard.q.welcome_bundle_id.title": "Приветственный поток: id бандла",
"env_wizard.q.welcome_flow_id.desc": "Задайте три поля welcome_* вместе (или ни одного).",
"env_wizard.q.welcome_flow_id.title": "Приветственный поток: id потока",
"env_wizard.q.welcome_pack_id.desc": "Задайте три поля welcome_* вместе (или ни одного).",
"env_wizard.q.welcome_pack_id.title": "Приветственный поток: id пакета",
"env_wizard.secrets.choose": "Для каждого выберите, откуда берется значение: из именованной переменной\nокружения или вставьте его сейчас. Вставленные значения сохраняются в хранилище секретов\nокружения — они никогда не записываются в манифест.",
"env_wizard.secrets.entry": "{} — {} (бандл: {}){}",
"env_wizard.secrets.envvar_prompt": "имя переменной окружения [{}]: ",
"env_wizard.secrets.envvar_required": "Требуется имя переменной окружения.",
"env_wizard.secrets.keep_env_note": "примечание: существующий секрет `{}` сохранен (бандл не пересобран)",
"env_wizard.secrets.keep_paste_note": "примечание: существующий вставленный секрет `{}` сохранен (бандл не пересобран)",
"env_wizard.secrets.need": "Секреты — настроенным бандлам требуется секретов: {}.",
"env_wizard.secrets.none": "Секреты — настроенные бандлы не объявляют секреты; вводить ничего не нужно.",
"env_wizard.secrets.optional_suffix": " [необязательно]",
"env_wizard.secrets.paste_prompt": "вставьте значение (скрыто, одна строка): ",
"env_wizard.secrets.paste_prompt_keep": "вставьте значение (скрыто, одна строка; пусто сохраняет сохраненное значение): ",
"env_wizard.secrets.paste_required": "Требуется значение.",
"env_wizard.secrets.path": "путь секрета: {}",
"env_wizard.secrets.source_invalid": "Введите 1 (переменная окружения) или 2 (вставить).",
"env_wizard.secrets.source_prompt": "значение из [1] переменной окружения или [2] вставить сейчас? [{}]: ",
"env_wizard.wrote_manifest": "Записан `{}` — манифест является долговечным артефактом; храните его в системе контроля версий.",
"setup.answers.emitted": "Шаблон ответов записан в {}",
"setup.answers.loaded": "Загружены ответы из {}",
"setup.capability.not_found": "Capability '{}' не найдена",
"setup.capability.resolved": "Разрешена capability: pack_id={} stable_id={}",
"setup.discovering_packs": "Обнаружение packs в bundle...",
"setup.dry_run.header": "План настройки (dry-run):",
"setup.error.bundle_not_found": "Bundle не найден: {}",
"setup.error.protocol_not_supported": "Протокол пока не поддерживается: {}",
"setup.error.version_mismatch": "Версия тега ({}) не совпадает с версией crate ({})",
"setup.execute.failed": "Настройка не удалась: {}",
"setup.execute.success": "Настройка завершена: {}",
"setup.found_packs": "Найдено {} pack(ов): {}",
"setup.plan.header": "План настройки:",
"setup.plan.step.collect_answers": "Сбор ответов для {}",
"setup.plan.step.discover": "Обнаружение packs",
"setup.plan.step.resolve": "Генерация разрешённого манифеста",
"setup.plan.step.run_setup": "Запуск потока настройки для {}",
"setup.plan.step.seed_secrets": "Инициализация секретов для {}",
"setup.plan.step.validate": "Валидация bundle",
"setup.plan.step.webhooks": "Регистрация webhooks для {}",
"setup.plan.step.write_config": "Запись конфигурации для {}",
"setup.qa.invalid_choice": "Недопустимый выбор. Варианты: {}",
"setup.qa.list.add_first": "Добавить {}? [y/N] ",
"setup.qa.list.add_more": "Добавить еще {}? [y/N] ",
"setup.qa.list.field_required_row": "Это поле обязательно — нужна хотя бы одна строка.",
"setup.qa.list.max_reached": "(достигнут максимум строк: {})",
"setup.qa.list.min_required": "Требуется минимум строк: {} — получено {}. Введите 'y', чтобы добавить еще одну.",
"setup.qa.list.row_dropped": "(строка отброшена — обязательные столбцы были пустыми)",
"setup.qa.list.row_header": "Строка #{}:",
"setup.qa.prompt.configuring": "Настройка {}: {}",
"setup.qa.prompt.default": "(по умолчанию: {}) ",
"setup.qa.prompt.field_required": "Это поле обязательно.",
"setup.qa.prompt.invalid_choice": "Недопустимый выбор. Варианты: {}",
"setup.qa.prompt.invalid_format": "Недопустимый формат. Ожидаемый шаблон: {}",
"setup.qa.prompt.mode_advanced": " (расширенный)",
"setup.qa.prompt.optional_marker": " (необязательно)",
"setup.qa.prompt.required_marker": " (обязательно)",
"setup.qa.question_prompt": "{}",
"setup.qa.required_field": "Это поле обязательно",
"setup.qa.secret_input": "Введите секретное значение (скрыто):",
"setup.secrets.failed": "Не удалось инициализировать секреты для provider={} tenant={}: {}",
"setup.secrets.seeded": "Инициализировано {} секрет(ов) для provider={} tenant={}",
"setup.state_store.fallback": "Используется хранилище состояния в памяти (Redis URL недоступен)",
"setup.state_store.upgraded": "Хранилище состояния обновлено до Redis: {}",
"ui.back": "Назад",
"ui.close": "Закрыть",
"ui.configure": "Настроить {}",
"ui.continue": "Продолжить",
"ui.dashboard.add_scope": "Добавить область",
"ui.dashboard.back": "Назад к панели управления",
"ui.dashboard.configured": "настроено",
"ui.dashboard.delete": "Удалить",
"ui.dashboard.description": "Настройте {} провайдер(ов) в {}. Создайте несколько областей для разных арендаторов/окружений.",
"ui.dashboard.executed": "Выполнено",
"ui.dashboard.export": "Экспорт ответов",
"ui.description": "Настроить провайдер(ы) {} в {}",
"ui.discovering": "Поиск провайдеров...",
"ui.discovering_sub": "Чтение конфигурации bundle",
"ui.done": "Готово",
"ui.execute_setup": "Выполнить настройку",
"ui.executing.sub": "Применение конфигурации к bundle",
"ui.executing.title": "Выполнение настройки...",
"ui.export.description": "Скачайте конфигурацию как JSON-файл ответов, совместимый с режимом --answers.",
"ui.export.download": "Скачать answers.json",
"ui.export.password": "Пароль шифрования",
"ui.export.password_help": "Если задано, секретные значения будут зашифрованы с помощью AES-256-GCM. Этот пароль потребуется при использовании --answers --key.",
"ui.export.password_hint": "Оставьте пустым, чтобы не использовать шифрование",
"ui.export.title": "Экспорт ответов",
"ui.field.required": "{} обязательно.",
"ui.import.decrypt_failed": "Не удалось расшифровать",
"ui.import.dropzone": "Перетащите answers.json сюда или нажмите для импорта",
"ui.import.no_scopes": "В файле не найдено допустимых областей.",
"ui.import.parse_error": "Не удалось разобрать файл",
"ui.import.password_prompt": "Этот файл содержит зашифрованные секреты. Введите пароль расшифровки:",
"ui.new_setup": "Новая настройка",
"ui.no_providers": "В bundle не найдено провайдеров.",
"ui.nothing_to_configure": "Нечего настраивать.",
"ui.pending": "В ожидании",
"ui.provider.configure": "Настроить {}",
"ui.q.api_base_url": "Базовый URL API",
"ui.q.base_url": "Базовый URL",
"ui.q.channel_id": "ID канала",
"ui.q.default_channel": "Канал по умолчанию",
"ui.q.default_room_id": "ID комнаты по умолчанию",
"ui.q.default_to_person_email": "Email пользователя по умолчанию",
"ui.q.enabled": "Включить провайдера",
"ui.q.jwt_signing_key": "Ключ подписи JWT",
"ui.q.jwt_signing_key.help": "Секретный ключ, используемый для подписи токенов Direct Line. Используйте любую случайную строку (например, openssl rand -hex 32).",
"ui.q.mode": "Режим",
"ui.q.ms_bot_app_id": "ID приложения бота",
"ui.q.ms_bot_app_id.help": "ID приложения Microsoft Bot из регистрации Azure Bot Service",
"ui.q.ms_bot_app_password": "Пароль приложения бота",
"ui.q.oauth_custom_auth_url": "URL авторизации",
"ui.q.oauth_custom_client_id": "ID клиента",
"ui.q.oauth_custom_label": "Отображаемое имя провайдера",
"ui.q.oauth_custom_scopes": "Области доступа",
"ui.q.oauth_custom_token_url": "URL токена",
"ui.q.oauth_enable_custom": "Включить пользовательский OIDC-провайдер",
"ui.q.oauth_enable_github": "Включить вход через GitHub",
"ui.q.oauth_enable_google": "Включить вход через Google",
"ui.q.oauth_enable_microsoft": "Включить вход через Microsoft",
"ui.q.oauth_enabled": "Включить вход через OAuth",
"ui.q.oauth_enabled.help": "Требовать от пользователей входа в систему перед доступом к чату",
"ui.q.oauth_github_client_id": "ID клиента GitHub",
"ui.q.oauth_github_client_secret": "Секрет клиента GitHub",
"ui.q.oauth_google_client_id": "ID клиента Google",
"ui.q.oauth_google_client_secret": "Секрет клиента Google",
"ui.q.oauth_microsoft_client_id": "ID клиента Microsoft",
"ui.q.oauth_microsoft_client_secret": "Секрет клиента Microsoft",
"ui.q.public_base_url": "Публичный базовый URL",
"ui.q.public_base_url.help": "Публичный URL для обратных вызовов webhook (например, https://xxxx.trycloudflare.com)",
"ui.q.route": "Маршрут",
"ui.q.slack_app_id": "ID приложения Slack",
"ui.q.slack_bot_token": "Токен бота Slack",
"ui.q.slack_configuration_token": "Токен конфигурации Slack",
"ui.q.team_id": "ID команды",
"ui.q.tenant_channel_id": "ID канала арендатора",
"ui.q.webex_bot_token": "Токен бота Webex",
"ui.questions": "вопросов",
"ui.result.closed": "Настройка закрыта.",
"ui.result.closed_sub": "Вы можете закрыть эту вкладку.",
"ui.result.fail.description": "Во время настройки что-то пошло не так.",
"ui.result.fail.title": "Ошибка настройки",
"ui.result.log": "Журнал",
"ui.result.manual_steps": "Требуются ручные действия",
"ui.result.output": "Вывод",
"ui.result.success.description": "Bundle успешно настроен.",
"ui.result.success.title": "Настройка завершена",
"ui.review.description": "Проверьте конфигурацию перед применением к bundle.",
"ui.review.no": "Нет",
"ui.review.secret_mask": "********",
"ui.review.title": "Проверка и выполнение",
"ui.review.yes": "Да",
"ui.review_execute": "Проверка и выполнение",
"ui.scope.description": "Настройте целевого арендатора, окружение и команду для этой установки.",
"ui.scope.detected_tenant": "Определено из пакета: {}",
"ui.scope.env": "Окружение",
"ui.scope.env_help": "Должно соответствовать GREENTIC_ENV, используемому средой выполнения (dev, local, test).",
"ui.scope.hint": "Эти значения определяют, где хранятся секреты и конфигурация. Убедитесь, что они соответствуют настройкам вашей среды выполнения.",
"ui.scope.team": "Команда",
"ui.scope.team_help": "Оставьте пустым для значения по умолчанию. Используется для привязки секретов к команде.",
"ui.scope.tenant": "Арендатор",
"ui.scope.title": "Область настройки",
"ui.select_action": "Выберите действие, чтобы начать.",
"ui.shared.description": "Эти вопросы относятся ко всем провайдерам.",
"ui.shared.title": "Общая конфигурация",
"ui.start_config": "Начать настройку",
"ui.title": "Настройка Greentic"
}