# Russian translation for aa-discord-audit.
# Copyright (C) 2026 Boris Talovikov
# This file is distributed under the same license as the aa-discord-audit package.
# Boris Talovikov <boris.t.66@gmail.com>, 2026.
#
msgid ""
msgstr ""
"Project-Id-Version: aa-discord-audit 0.1.0a3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-03 07:12+0000\n"
"PO-Revision-Date: 2026-05-14 15:30+0000\n"
"Last-Translator: Boris Talovikov <boris.t.66@gmail.com>\n"
"Language-Team: Russian\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
"(n%100>=11 && n%100<=14)? 2 : 3);\n"

msgid "CLI"
msgstr "CLI"

msgid "Beat"
msgstr "Beat"

msgid "API"
msgstr "API"

msgid "Web"
msgstr "Веб"

msgid "Rate limit"
msgstr "Лимит"

msgid "No perm"
msgstr "Нет прав"

msgid "No --yes"
msgstr "Без --yes"

msgid "Not ack'd"
msgstr "Не подтв."

msgid "yes"
msgstr "да"

#, python-format
msgid "%(time)s ago"
msgstr "%(time)s назад"

msgid "Mark selected PENDING findings as manually reviewed"
msgstr "Отметить выбранные PENDING-находки как проверенные вручную"

#, python-format
msgid ""
"Marked %(count)d finding(s) as manually reviewed across %(runs)d run(s)."
msgstr "Отмечено находок как проверенные вручную: %(count)d (в прогонах: %(runs)d)."

#, python-brace-format
msgid "Discord Audit v{version}"
msgstr "Аудит Discord v{version}"

msgid "Discord Audit"
msgstr "Аудит Discord"

msgid "audit run"
msgstr "прогон аудита"

msgid "audit runs"
msgstr "прогоны аудита"

msgid "Can trigger an audit run"
msgstr "Может запускать прогон аудита"

msgid "Can launch a destructive audit run (strip/kick) from the web UI"
msgstr "Может запускать деструктивный прогон аудита (снятие ролей/исключение) из веб-интерфейса"

msgid ""
"Findings co-die with their run. The only path to a Run delete is the "
"retention sweep (``prune_audit_runs``); CASCADE keeps that prune atomic "
"without a per-finding fan-out."
msgstr ""
"Находки умирают вместе со своим прогоном. Единственный путь к удалению "
"прогона — чистка по сроку хранения (``prune_audit_runs``); CASCADE делает "
"эту чистку атомарной без перебора находок по одной."

msgid "audit finding"
msgstr "находка аудита"

msgid "audit findings"
msgstr "находки аудита"

msgid "config change log entry"
msgstr "запись журнала изменений настроек"

msgid "config change log entries"
msgstr "записи журнала изменений настроек"

msgid ""
"Live FK to the produced AuditRun (set after acceptance). Goes NULL on "
"retention prune of the run; see ``audit_run_pk`` for the post-prune forensic "
"anchor."
msgstr ""
"Действующий внешний ключ на созданный AuditRun (устанавливается после "
"принятия). Обнуляется при чистке прогона по сроку хранения; см. "
"``audit_run_pk`` для криминалистического якоря после чистки."

msgid ""
"Snapshot of audit_run_id at insertion time. Survives retention pruning of "
"AuditRun, so forensic queries spanning >RETENTION_DAYS can still join "
"through this column when ``audit_run`` has been NULL'd."
msgstr ""
"Снимок audit_run_id на момент вставки. Переживает чистку AuditRun по сроку "
"хранения, поэтому криминалистические запросы за пределами >RETENTION_DAYS "
"всё ещё могут соединяться через этот столбец, когда ``audit_run`` обнулён."

msgid "audit invocation"
msgstr "запуск аудита"

msgid "audit invocations"
msgstr "запуски аудита"

msgid "Manually linked by operator"
msgstr "Связано вручную оператором"

msgid "Migrated from a deleted DiscordUser row"
msgstr "Перенесено из удалённой записи DiscordUser"

msgid "Identity unknown to AA"
msgstr "Личность неизвестна AA"

msgid "Identity known but lacks access_perm"
msgstr "Личность известна, но нет права доступа"

msgid "Filtered as a known bot account"
msgstr "Отфильтровано как известная учётная запись бота"

msgid "Report only — no changes"
msgstr "Только отчёт — без изменений"

msgid "Strip AA-managed roles"
msgstr "Снять роли, управляемые AA"

msgid "Strip AA-managed roles and kick"
msgstr "Снять роли, управляемые AA, и кикнуть"

msgid "Pending"
msgstr "Ожидает"

msgid "Running"
msgstr "Выполняется"

msgid "Succeeded"
msgstr "Завершён успешно"

msgid "Failed"
msgstr "Завершён с ошибкой"

msgid "Budget exceeded"
msgstr "Превышен лимит времени"

msgid "Abandoned"
msgstr "Брошен"

msgid "Interrupted"
msgstr "Прерван"

msgid "Applied"
msgstr "Применено"

msgid "Skipped"
msgstr "Пропущено"

msgid "Management command"
msgstr "Команда управления"

msgid "Celery beat schedule"
msgstr "Расписание Celery beat"

msgid "Manual / API call"
msgstr "Вручную / через API"

msgid "Web UI"
msgstr "Веб-интерфейс"

msgid "Per-user rate limit exceeded"
msgstr "Превышено количество запусков на пользователя"

msgid "run_audit permission missing"
msgstr "Нет права run_audit"

msgid "Destructive action requested without --yes"
msgstr "Запрошено разрушительное действие без --yes"

msgid "Initial audit not acknowledged"
msgstr "Первый аудит не подтверждён"

msgid "Discord API HTTP error"
msgstr "Ошибка HTTP в API Discord"

msgid "Member added to protect list"
msgstr "Участник добавлен в список защищённых"

msgid "Member reclassified between phases"
msgstr "Участник переклассифицирован между фазами"

msgid "Linked AA user changed between phases"
msgstr "Связанный пользователь AA изменился между фазами"

msgid "Discord bot auth failed (401)"
msgstr "Сбой авторизации бота Discord (401)"

msgid "Discord refused the request (403)"
msgstr "Discord отклонил запрос (403)"

msgid "Operator marked the finding as manually reviewed"
msgstr "Оператор отметил находку как просмотренную вручную"

msgid "Build/apply disagreed on which findings exist"
msgstr "Расхождение фаз build/apply по составу находок"

msgid "Created"
msgstr "Создано"

msgid "Updated"
msgstr "Изменено"

msgid "Deleted"
msgstr "Удалено"

msgid ""
"Discord username captured at row creation. HISTORICAL rows are populated by "
"the post_delete signal; OPERATOR rows are filled by the admin. Not refreshed "
"if the user renames."
msgstr ""
"Имя пользователя Discord, зафиксированное при создании записи. HISTORICAL-"
"записи заполняет сигнал post_delete; OPERATOR-записи заполняет "
"администратор. Не обновляется при переименовании пользователя."

msgid ""
"Discord display name (global_name) captured at row creation. AA core's "
"DiscordUser does not store this, so HISTORICAL rows leave it blank; OPERATOR "
"rows or audit-time enrichment may fill it. Not refreshed if the user changes "
"display name."
msgstr ""
"Отображаемое имя Discord (global_name), зафиксированное при создании записи. "
"DiscordUser в ядре AA его не хранит, поэтому HISTORICAL-записи оставляют "
"поле пустым; OPERATOR-записи и обогащение во время аудита могут его "
"заполнить. Не обновляется при смене отображаемого имени."

msgid "discord identity"
msgstr "личность Discord"

msgid "discord identities"
msgstr "личности Discord"

msgid "Can create or edit DiscordIdentity rows"
msgstr "Может создавать или редактировать строки DiscordIdentity"

msgid "pending kick"
msgstr "отложенный кик"

msgid "pending kicks"
msgstr "отложенные кики"

msgid "bot account uid"
msgstr "UID учётной записи бота"

msgid "bot account uids"
msgstr "UID учётных записей ботов"

msgid "Can edit BotAccountUid rows"
msgstr "Может редактировать строки BotAccountUid"

msgid "protected discord member"
msgstr "защищённый участник Discord"

msgid "protected discord members"
msgstr "защищённые участники Discord"

msgid "Can edit ProtectedDiscordMember rows"
msgstr "Может редактировать строки ProtectedDiscordMember"

msgid "managed role exception"
msgstr "исключение управляемой роли"

msgid "managed role exceptions"
msgstr "исключения управляемых ролей"

msgid "Can edit ManagedRoleException rows"
msgstr "Может редактировать строки ManagedRoleException"

msgid "finding action override"
msgstr "переопределение действия для находки"

msgid "finding action overrides"
msgstr "переопределения действий для находок"

msgid "Can edit FindingActionOverride rows"
msgstr "Может редактировать строки FindingActionOverride"

msgid ""
"Operators cannot create a FindingActionOverride for their own linked Discord "
"identity. Have a second operator review and submit the override."
msgstr ""
"Операторы не могут создать FindingActionOverride для своей привязанной "
"Discord-идентичности. Пусть второй оператор проверит и отправит "
"переопределение."

msgid "initial audit acknowledgement"
msgstr "подтверждение первого аудита"

msgid "initial audit acknowledgements"
msgstr "подтверждения первого аудита"

msgid "Can release the first-run dry-run lock"
msgstr "Может снять блокировку первого холостого прогона"

#, python-format
msgid "Discord audit run #%(pk)s"
msgstr "Прогон аудита Discord #%(pk)s"

msgid "no"
msgstr "нет"

msgid "Launch Audit"
msgstr "Запустить аудит"

msgid "Close"
msgstr "Закрыть"

msgid ""
"This will start a real audit run. Depending on the configured policy it may "
"strip Discord roles and kick members."
msgstr ""
"Это запустит реальный прогон аудита. В зависимости от настроенной политики "
"он может снять Discord-роли и исключить участников."

msgid "Policy mode:"
msgstr "Режим политики:"

msgid "destructive"
msgstr "деструктивный"

msgid "report-only"
msgstr "только отчёт"

msgid "Initial acknowledgement:"
msgstr "Первичное подтверждение:"

msgid "present"
msgstr "есть"

msgid "missing"
msgstr "отсутствует"

msgid ""
"Run <code>audit_acknowledge_initial</code> from the CLI before launching an "
"audit."
msgstr ""
"Выполните <code>audit_acknowledge_initial</code> в CLI перед запуском аудита."

msgid "Cancel"
msgstr "Отмена"

msgid "Confirm Launch"
msgstr "Подтвердить запуск"

msgid "pagination"
msgstr "разбиение на страницы"

msgid "Previous page"
msgstr "Предыдущая страница"

msgid "Next page"
msgstr "Следующая страница"

msgid "Discord audit sections"
msgstr "Разделы аудита Discord"

msgid "Runs"
msgstr "Прогоны"

msgid "Attempts"
msgstr "Попытки запуска"

msgid "Config changes"
msgstr "Изменения настроек"

msgid "Discord Audit Config Changes"
msgstr "Изменения настроек аудита Discord"

msgid "breadcrumb"
msgstr "путь"

msgid "Operator config changes"
msgstr "Изменения настроек оператором"

msgid ""
"Append-only forensic log of every operator edit to BotAccountUid, "
"ProtectedDiscordMember, ManagedRoleException, and FindingActionOverride. "
"Survives retention pruning of AuditRun rows."
msgstr ""
"Добавляемый только в конец журнал каждого изменения BotAccountUid, "
"ProtectedDiscordMember, ManagedRoleException и FindingActionOverride, "
"сделанного оператором. Не удаляется вместе с записями AuditRun по политике "
"хранения."

msgid "Model"
msgstr "Модель"

msgid "(any)"
msgstr "(любая)"

msgid "Action"
msgstr "Действие"

msgid "Actor"
msgstr "Автор"

msgid "username"
msgstr "имя пользователя"

msgid "Apply"
msgstr "Применить"

msgid "ID"
msgstr "ID"

msgid "Created at"
msgstr "Создано"

msgid "Object pk"
msgstr "ID объекта"

msgid "Payload"
msgstr "Содержимое"

msgid "Show payload"
msgstr "Показать данные"

msgid "show"
msgstr "показать"

msgid "Field"
msgstr "Поле"

msgid "Before"
msgstr "До"

msgid "After"
msgstr "После"

msgid "row deleted (no snapshot)"
msgstr "строка удалена (нет снимка)"

msgid "No config changes to display."
msgstr "Изменений настроек для отображения нет."

msgid ""
"Showing the first page — narrow your filters to search across all results."
msgstr ""
"Показана первая страница — сузьте фильтры, чтобы искать по всем результатам."

msgid "Discord Audit Finding"
msgstr "Находка аудита Discord"

#, python-format
msgid "Run #%(run_id)s"
msgstr "Прогон №%(run_id)s"

#, python-format
msgid "Finding #%(finding_id)s"
msgstr "Находка №%(finding_id)s"

msgid "Finding"
msgstr "Находка"

msgid "Recorded outcome"
msgstr "Зафиксированный исход"

msgid ""
"Frozen at the time of the audit run; classify() ran against the live Discord "
"member and the operator-config tables in effect when the run started."
msgstr ""
"Зафиксировано на момент прогона аудита; classify() выполнялся для текущего "
"участника Discord с теми настройками оператора, что действовали на момент "
"старта прогона."

msgid "Member ID"
msgstr "ID участника"

msgid "Username"
msgstr "Имя пользователя"

msgid "Category"
msgstr "Категория"

msgid "State"
msgstr "Состояние"

msgid "AA user"
msgstr "Пользователь AA"

msgid "Kicked"
msgstr "Кикнут"

msgid "Skip reason"
msgstr "Причина пропуска"

msgid "Error"
msgstr "Ошибка"

msgid "Roles removed"
msgstr "Снятые роли"

msgid "Role IDs:"
msgstr "ID ролей:"

msgid "Current operator-config inputs"
msgstr "Текущие настройки оператора"

msgid ""
"Live state of the tables classify() consults. Diverges from the recorded "
"category when the operator changed config between the run and now — useful "
"when investigating 'why was this flagged?' after a follow-up edit."
msgstr ""
"Актуальное состояние таблиц, к которым обращается classify(). Расходится с "
"зафиксированной категорией, если оператор изменил настройки между прогоном и "
"текущим моментом — полезно при разборе «почему это попало в находки?» после "
"правок."

#, python-format
msgid "Current operator-config inputs as of %(ts)s"
msgstr "Текущие настройки оператора на %(ts)s"

msgid "In BotAccountUid"
msgstr "В BotAccountUid"

msgid "ProtectedDiscordMember"
msgstr "ProtectedDiscordMember"

msgid "protected"
msgstr "защищён"

msgid "not protected"
msgstr "не защищён"

msgid "Has DiscordUser link"
msgstr "Связь с DiscordUser"

msgid "AA user pk:"
msgstr "ID пользователя AA:"

msgid "Has DiscordIdentity"
msgstr "Запись DiscordIdentity"

msgid "last seen:"
msgstr "замечен:"

msgid "Recorded run policy snapshot"
msgstr "Зафиксированная политика прогона"

msgid "Discord Audit Attempts"
msgstr "Попытки запуска аудита Discord"

msgid "Audit attempts"
msgstr "Попытки запуска аудита"

msgid ""
"Every CLI / beat / manual trigger of the audit, including refused attempts. "
"Refused rows do NOT count toward the per-user rate limit."
msgstr ""
"Каждый запуск аудита — из CLI, расписанием или вручную, включая отклонённые "
"попытки. Отклонённые записи НЕ учитываются в лимите запусков на пользователя."

msgid "Accepted"
msgstr "Принят"

msgid "Refusal reason"
msgstr "Причина отказа"

msgid "Triggered by"
msgstr "Источник"

msgid "Started at"
msgstr "Начат"

msgid "Trigger"
msgstr "Источник"

msgid "User"
msgstr "Пользователь"

msgid "Argv"
msgstr "Аргументы"

msgid "Run"
msgstr "Прогон"

msgid "Show argv"
msgstr "Показать argv"

msgid "(pruned)"
msgstr "(удалено по политике хранения)"

msgid "No attempts to display."
msgstr "Попыток запуска для отображения нет."

msgid "Discord Audit Run"
msgstr "Прогон аудита Discord"

msgid "AuditRun"
msgstr "AuditRun"

msgid "running"
msgstr "выполняется"

msgid "Triggered by user"
msgstr "Запущен пользователем"

msgid "Started"
msgstr "Начат"

msgid "Finished"
msgstr "Завершён"

msgid "Members scanned"
msgstr "Просканировано участников"

msgid "Findings"
msgstr "Находок"

msgid "Actions applied"
msgstr "Применено действий"

msgid "Actions skipped"
msgstr "Пропущено действий"

msgid "Dry run"
msgstr "Холостой прогон"

msgid "First-run lock"
msgstr "Блокировка первого прогона"

msgid "Confirmation bypassed"
msgstr "Подтверждение пропущено"

msgid "Download all findings (CSV)"
msgstr "Скачать все находки (CSV)"

msgid ""
"You lack the view_auditfinding permission; per-finding details are hidden."
msgstr "У вас нет права view_auditfinding; данные по находкам скрыты."

#, python-format
msgid "%(t)s findings: %(k)s kicked, %(s)s skipped, %(e)s errors"
msgstr "%(t)s находок: %(k)s исключено, %(s)s пропущено, %(e)s ошибок"

msgid "Show error detail"
msgstr "Показать детали ошибки"

msgid "Explain"
msgstr "Подробно"

msgid "No findings to display."
msgstr "Находок для отображения нет."

msgid "Discord Audit Runs"
msgstr "Прогоны аудита Discord"

msgid "Last run"
msgstr "Последний прогон"

msgid "no runs yet"
msgstr "прогонов ещё нет"

msgid "Failed (7 d)"
msgstr "С ошибкой (7 дн.)"

msgid "Pending findings"
msgstr "Ожидающие находки"

msgid "Audit runs"
msgstr "Прогоны аудита"

msgid "From"
msgstr "С"

msgid "To"
msgstr "По"

msgid "Duration"
msgstr "Длительность"

msgid "Members"
msgstr "Участников"

msgid "Open"
msgstr "Открыть"

msgid "No audit runs to display."
msgstr "Прогонов аудита для отображения нет."

msgid "Clear filters"
msgstr "Сбросить фильтры"

msgid ""
"Initial audit acknowledgement is missing. Run the audit_acknowledge_initial "
"CLI command first."
msgstr ""
"Первичное подтверждение аудита отсутствует. Сначала выполните CLI-команду "
"audit_acknowledge_initial."

msgid "Per-user audit rate limit reached. Try again later."
msgstr "Достигнут лимит запусков аудита на пользователя. Повторите позже."

msgid "Celery broker unreachable at launch."
msgstr "Брокер Celery недоступен при запуске."

msgid ""
"Celery broker is unreachable; the audit run was marked FAILED. Try again "
"once the broker is back."
msgstr ""
"Брокер Celery недоступен; прогон аудита помечен как FAILED. Повторите, когда "
"брокер вернётся."

#~ msgid "yes,no"
#~ msgstr "да,нет"
