@goodandready/dsh-russian-lang 0.1.32 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -52,17 +52,20 @@ const getCurrencyFormat = (cur) => {
52
52
  }
53
53
 
54
54
  const formatNumber = (val) => {
55
+ if (val === null || val === undefined || val === '') return ''
55
56
  const n = typeof val === 'number' ? val : Number(val)
56
57
  return isNaN(n) ? String(val) : numberFormat.format(n)
57
58
  }
58
59
 
59
60
  const formatCurrency = (val, cur) => {
61
+ if (val === null || val === undefined || val === '') return ''
60
62
  const n = typeof val === 'number' ? val : Number(val)
61
63
  if (isNaN(n)) return String(val)
62
64
  return getCurrencyFormat(cur).format(n)
63
65
  }
64
66
 
65
67
  const formatRelativeTime = (val, unit) => {
68
+ if (val === null || val === undefined || val === '') return ''
66
69
  if (typeof val === 'number' && typeof unit === 'string') {
67
70
  return relativeTimeFormat.format(val, unit)
68
71
  }
@@ -135,15 +138,18 @@ const inflect = (phrase, cName) => {
135
138
 
136
139
  // ------------------------------------------------- подстановка и плюрализация
137
140
 
138
- const fill = (template, params) => String(template).replace(/\{(\w+)(?::(\w+))?\}/g, (match, name, spec) => {
139
- if (!(name in params)) return match
140
- const val = params[name]
141
- if (spec === 'number') return formatNumber(val)
142
- if (spec === 'reltime') return formatRelativeTime(val)
143
- if (spec === 'currency') return formatCurrency(val, params.currency || 'RUB')
144
- if (INFLECT_CASES.has(spec)) return inflect(String(val), spec)
145
- return String(val)
146
- })
141
+ const fill = (template, params) => {
142
+ if (!params || typeof params !== 'object') return String(template)
143
+ return String(template).replace(/\{(\w+)(?::(\w+))?\}/g, (match, name, spec) => {
144
+ if (!(name in params)) return match
145
+ const val = params[name]
146
+ if (spec === 'number') return formatNumber(val)
147
+ if (spec === 'reltime') return formatRelativeTime(val)
148
+ if (spec === 'currency') return formatCurrency(val, params.currency || 'RUB')
149
+ if (INFLECT_CASES.has(spec)) return inflect(String(val), spec)
150
+ return String(val)
151
+ })
152
+ }
147
153
 
148
154
  const pluralRules = new Intl.PluralRules('ru-RU')
149
155
 
@@ -357,10 +363,10 @@ const makeLayout = (freq, localDict = new Set()) => {
357
363
 
358
364
 
359
365
  /** namespace -> { ключ: перевод } */
360
- const RU = {"agentTeams":{"action.openActivityPanel":"Открыть панель активности","activity.badgeAria":"Активность и история команд агентов, {count} записей команд","activity.collapse":"Свернуть панель активности","activity.dockRight":"Закрепить справа","activity.empty":"Нет активности команды","activity.float":"Переключиться на плавающую панель","activity.panelAria":"Панель активности команд агентов","activity.panelButton":"Панель активности","activity.title":"Активность команд агентов","archive.discardedLabel":"План отменен · Архивная история","archive.label":"Завершено · Архивная история","assignment.discarded":"План не выполнен","assignment.empty":"Нет задач","assignment.label":"Капитан назначен","assignment.staged":"Запланированная задача","captain.name":"Капитан","captain.role":"Разделить · Делегировать · Синтезировать","captain.state.awaitingFeedback":"Ожидание отзыва","captain.state.collected":"Все полученные отчеты","captain.state.discarded":"Отменено","captain.state.settled":"Оплачено","captain.state.staged":"Ожидает одобрения","captain.state.takeover":"Работаю над {tasks}","captain.state.waiting":"Ожидание отчетов","captain.state.working":"{count} активных","captain.summary":"Назначено {tasks} задач {members} участникам","captain.summary.awaitingFeedback":"Черновой вариант сохранен; ожидаем ваших указаний по доработке в чате","captain.summary.discarded":"План отменён: {members} участников не созданы и {tasks} задачи не выполнены","captain.summary.staged":"Запланировано {tasks} задач и {members} участников; ожидают утверждения","captain.summary.withTakeover":"Назначено {tasks} участникам · Капитан владеет {captainTasks}","card.memberCount":"{count} участников","delegation.aria":"Карта делегирования капитана","dependency.aria":"Цепочка зависимостей задач","dependency.hint.chain":"Наведите для подсветки зависимостей · Нажмите, чтобы закрепить","dependency.hint.parallel":"Нет зависимостей · Нажмите для подробностей","dependency.hint.pinned":"{taskId} закреплена · Esc для сброса","dependency.parallel":"Параллельные задачи","dependency.title":"Зависимости задач","format.listSeparator":",","member.model":"{model}","member.state.delivered":"Доставлено","member.state.failed":"Имеются сбои","member.state.left":"Левая команда","member.state.notCreated":"Не создано","member.state.pending":"Ожидание","member.state.removed":"Удалено","member.state.staged":"Не создан","member.state.stopped":"Остановлено","member.state.unassigned":"Ожидание назначения","member.state.waiting":"Ожидание","member.state.working":"Работает","member.status.delivered":"Задачи выполнены","member.status.discarded":"План отклонён; участник не был создан","member.status.executing":"Работа над {taskId}","member.status.executingModel":"Работа над {taskId} · {model}","member.status.idle":"Готовы продолжить","member.status.settled":"Вся назначенная работа выполнена","member.status.staged":"Будет создан после одобрения","member.status.stopped":"Команда остановлена; требуется явное возобновление","member.status.unknown":"Статус неизвестен","member.status.waitingAssignment":"Ожидание назначения работы от капитана","member.status.waitingOn":"Ожидание {taskId} · {assignee}","member.status.waitingPrerequisite":"Ожидание выполнения предварительных условий","member.status.working":"Работа над назначенными задачами","members.collapse":"Свернуть","members.empty":"Пока нет участников; ожидаем, пока капитан соберёт команду","members.expand":"Развернуть","members.toggle":"Участники {count}","plan.addTask":"Добавить задачу","plan.adding":"Добавление…","plan.approve":"Одобрить и запустить","plan.approveConfirm":"Подтвердить запуск","plan.approveConfirmTitle":"Подтвердить запуск команды","plan.approveHint":"Одобрение создаёт {members} участников и планирует {tasks} задачи.","plan.approveTitle":"План готов?","plan.approveWarning":"Маршруты участников и зависимости нельзя редактировать здесь после запуска.","plan.approving":"Создание участников…","plan.badge":"Ожидание подтверждения","plan.cancel":"Отмена","plan.continue":"Вернуться в чат и исправить","plan.dependencies.count":"{count} зависимостей","plan.dependencies.none":"Нет зависимостей","plan.description":"Участники не были созданы, и задачи не были назначены. Отредактируйте черновик здесь или вернитесь в чат и сообщите Капитану, что нужно изменить.","plan.discard":"Отменить этот план","plan.discardConfirm":"Отменить план","plan.discardConfirmTitle":"Отменить этот план?","plan.discardWarning":"План будет завершён и заархивирован. Участники не были созданы, и задачи выполняться не будут.","plan.discarding":"Отмена…","plan.failed":"Операция не удалась: {message}","plan.feedbackHint":"Капитан спросит в чате. После вашего ответа он пересмотрит этот черновик и снова будет ждать одобрения.","plan.feedbackTitle":"Ожидание ваших указаний по исправлению","plan.flow.aria":"Процесс запуска команды","plan.flow.review":"Просмотреть план","plan.flow.run":"Начать работу","plan.flow.spawn":"Создать участников","plan.member.model":"Модель","plan.member.prompt":"Роль подсказки","plan.member.provider":"Провайдер","plan.member.reasoning":"Усилие на рассуждение","plan.member.reasoningHint":"Оставьте пустым для значения по умолчанию; принимает low, medium, high, xhigh и другие.","plan.member.role":"Роль","plan.member.roleFallback":"Роль не установлена","plan.members.count":"{count} участников","plan.members.empty":"Пока нет запланированных участников","plan.members.title":"Участники и маршруты моделей","plan.model.back":"Назад","plan.model.choose":"Выберите модель","plan.model.currentUnavailable":"{provider}/{model} (нет в текущем каталоге)","plan.model.defaultReasoning":"Усилия по умолчанию при рассуждении","plan.model.empty":"Нет доступных моделей","plan.model.loading":"Загрузка моделей…","plan.model.modelDefault":"Модель по умолчанию ({effort})","plan.model.partialFailure":"{count} каталогов провайдеров не удалось загрузить","plan.model.providerDefault":"Провайдер по умолчанию","plan.model.retry":"Повторить","plan.model.route":"Маршрут: {provider}/{model}","plan.model.triggerAria":"Выберите модель участника, текущая {model}, уровень усилий для рассуждений {effort}","plan.newTask":"Новая тема задачи","plan.newTaskLabel":"Добавить запланированную задачу","plan.pendingEdits":"Сохраните текущие изменения перед запуском команды.","plan.readySummary":"{members} участников · {tasks} задач · {links} зависимостей","plan.remove":"Удалить","plan.removeConfirm":"Подтвердите удаление","plan.removeWarning":"Удаление {task} приведет к пересчету зависимостей ниже по цепочке.","plan.removed":"Задача удалена","plan.returnToChat":"Вернуться в чат","plan.save":"Сохранить","plan.saved":"План сохранён","plan.saving":"Сохранение…","plan.task.assignee":"Исполнитель","plan.task.dependencies":"ID задач зависимостей (через запятую)","plan.task.dependenciesHint":"Например, task-1, task-2; циклы отклонены","plan.task.description":"Описание задачи","plan.task.subject":"Тема задачи","plan.task.unassigned":"Общий пул задач","plan.taskAdded":"Задача добавлена","plan.tasks.count":"{count} задач · {links} зависимостей","plan.tasks.empty":"Нет запланированных задач","plan.tasks.title":"Задачи и зависимости","plan.title":"Проверка плана перед запуском","plan.unsaved":"Не сохранено","progress.aria":"Общий прогресс команды","progress.blocked":"■ Ожидание {count}","progress.delivered":"■ Доставлено {count}","progress.running":"■ В процессе {count}","progress.title":"Общий прогресс","task.assignee.unclaimed":"Невостребованные","task.detail.completed":"Завершено и доставлено","task.detail.noDownstream":"Нет последующих задач","task.detail.noPrerequisite":"Нет требований; готовы начать","task.detail.notRun":"План отменён; задача не была выполнена","task.detail.ready":"Предварительные условия выполнены; можно начинать","task.detail.unlocks":"Разблокирует {tasks} после завершения","task.detail.waitingOn":"Ожидание {tasks}","task.model":"Модель: {model}","task.runningAria":"Выполняется","task.status.cancelled":"Отменено","task.status.claimed":"Заявлено","task.status.completed":"Завершено","task.status.failed":"Не удалось","task.status.inProgress":"Выполняется","task.status.notRun":"Не запущено","task.status.pending":"Невостребованные","task.summary.allDelivered":"Все {count} задачи доставлены","task.summary.blocked":"{tasks} ожидают выполнения предварительных условий","task.summary.blockedAndRunning":"{tasks}{more} ожидают выполнения предварительных условий; другая работа уже начата","task.summary.discarded":"{count} запланированных задач отменено; ни одна не выполнена","task.summary.ended":"Итог: {completed} доставлено · {cancelled} отменено · {failed} не удалось","task.summary.failedSettled":"{count} ошибок; автоматический цикл остановлен","task.summary.more":"и ещё {count}","task.summary.ready":"{tasks} готовы к началу","task.summary.running":"{tasks} в процессе выполнения","task.summary.staged":"{count} запланированных задач ожидают утверждения","task.summary.waitingBreakdown":"Ожидание, пока капитан распределит работу","task.summary.waitingSchedule":"Ожидание следующего цикла планирования","team.discarded":"Отклонено","team.ended":"Завершено","team.stats.completed":"{completed}/{total} завершено","team.stats.members":"{count} участников","team.stats.messages":"{count} сообщений","team.stop":"Остановить команду","team.stopCancel":"Продолжать работу","team.stopConfirm":"Остановить команду","team.stopDescription":"Это отменяет {tasks} незавершённых задач и останавливает {members} работающих участников. Завершённые результаты сохраняются.","team.stopFailed":"Не удалось остановить команду: {message}","team.stopRequestFailed":"Сервер не смог остановить эту команду. Попробуйте снова.","team.stopTitle":"Остановить “{team}”?","team.stopped":"Остановлено","team.stopping":"Остановка…"},"betterSidebar":{"addPluginsBrowseMore":"Ещё плагины на GitHub (тема: dsh-better-sidebar)","addPluginsEmpty":"Подборки пока нет — опубликуйте свой плагин под темой на GitHub","addPluginsNoMatch":"Нет подходящих плагинов","addPluginsRecommended":"Рекомендуемые плагины","addPluginsSearch":"Поиск по названию или описанию плагина…","addPluginsTabCard":"Добавить плагины вкладок","addPluginsTabCardDesc":"Зарегистрировать новую страницу панели","addPluginsTabDesc":"Страницы панели (вкладки) расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addPluginsViewerCard":"Добавить плагины предпросмотра","addPluginsViewerCardDesc":"Зарегистрировать просмотр нового типа файлов","addPluginsViewerDesc":"Просмотрщики файлов расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addToConversation":"Добавить в диалог","binary":"Двоичный файл, предпросмотр недоступен","binaryNoPreview":"Этот тип файлов нельзя показать","branch":"Ветка","brokenSymlink":"Битая ссылка","browser":"Браузер","browserBack":"Назад","browserBlockedLoopback":"Заблокировано: локальные и внутренние адреса здесь открывать нельзя","browserBlockedScheme":"Заблокировано: разрешены только адреса http и https","browserEmbedAnyway":"Всё равно загрузить","browserEmbedBlocked":"{host} запрещает встраивание","browserEmbedBlockedDesc":"Сайт запрещает показывать себя внутри других страниц (X-Frame-Options / frame-ancestors), поэтому в панели он не откроется. Откройте его в обычном браузере.","browserForward":"Вперёд","browserGo":"Перейти","browserInvalid":"Неверный адрес","browserNoSandboxWarning":"Песочница выключена: страница работает с полными правами интерфейса (включить обратно можно в настройках)","browserOpenExternal":"Открыть в браузере","browserPlaceholder":"Введите адрес, например example.com","browserStart":"Введите адрес, чтобы начать (режим песочницы)","cancel":"Отмена","changes":"Изменения","checkoutError":"Переключить ветку не удалось","cherryPickCommit":"Перенести коммит","cherryPickDesc":"Применить изменения «{subject}» к текущей ветке.","cherryPickTitle":"Перенос коммита","close":"Закрыть","closeLeftTabs":"Закрыть вкладки слева","closeOtherTabs":"Закрыть остальные вкладки","closePinnedTerminal":"Закрыть терминал","closeRightTabs":"Закрыть вкладки справа","collapse":"Свернуть панель","collapseBottomPanel":"Свернуть нижнюю панель","commit":"Закоммитить","commitError":"Коммит не удался","commitPlaceholder":"Сообщение коммита (Ctrl+Enter)","copied":"Скопировано","copy":"Копировать","copyAbsolute":"Копировать абсолютный путь","copyFullHash":"Копировать полный хеш","copyInstall":"Копировать команду установки","copyRelative":"Копировать относительный путь","copyShortHash":"Копировать короткий хеш","copySubject":"Копировать заголовок","diffAdded":"Добавлено","diffBinary":"Двоичный","diffCollapse":"Свернуть","diffDeleted":"Удалено","diffEmpty":"Текстовых изменений нет","diffExpand":"Показать ещё строк: {count}","diffLoadError":"Не удалось загрузить различия","diffRenamed":"Переименовано","discard":"Отменить изменения","discardDesc":"Изменения «{path}» в рабочем дереве будут отброшены без возможности вернуть.","discardTitle":"Отмена изменений","disconnected":"Терминал отключился, переподключаемся…","dockToSidebar":"Вернуть в боковую панель","download":"Скачать","downloadToView":"Скачать, чтобы посмотреть","edit":"Изменить","editor":"Редактор","editorEmptyHint":"Выберите файл в дереве или введите путь выше, чтобы открыть предпросмотр","editorExplorer":"Как открывать файлы","editorExplorerDesc":"Управляет поведением при открытии файлов","editorExplorerMerged":"В одном окне","editorExplorerMergedDesc":"Файлы сменяются в том же окне; новые окна открываются с деревом","editorExplorerSplit":"Раздельно","editorExplorerSplitDesc":"Окно без пути — это отдельный проводник (только дерево); каждый файл открывается своим окном (дерево пристыковано и по умолчанию закрыто)","editorPathPlaceholder":"Путь к файлу (от папки сессии или абсолютный), Enter — открыть","editorSearchNoResults":"Подходящих файлов нет","editorSearchPlaceholder":"Поиск файлов по имени…","editorSearchTruncated":"Слишком много совпадений — показана часть","editorTreeToggle":"Дерево файлов","error":"Не удалось загрузить","exited":"Процесс терминала завершился","expand":"Развернуть панель","expandBottomPanel":"Развернуть нижнюю панель","explorer":"Проводник","files":"Файлы","floatDropHint":"Отпустите, чтобы открыть в свободном окне","git":"Контроль версий","gitDetail":"Посмотреть изменения","hiddenFiles":"Скрытые файлы","history":"История","historyLoadError":"Не удалось догрузить историю","htmlNoSandboxWarning":"Песочница выключена: этот HTML работает с полными правами интерфейса (включить обратно можно в настройках)","jobDurationHours":"{hours} ч {minutes} мин","jobDurationMinutes":"{minutes} мин {seconds} с","jobDurationSeconds":"{seconds} с","jobHideOutput":"Скрыть вывод","jobKill":"Прервать","jobKillConfirm":"Нажмите ещё раз для подтверждения","jobKillError":"Прервать не удалось","jobNoOutput":"Вывода пока нет","jobNotReadYet":"Ждём, пока модель прочитает эту задачу; вывод появится здесь после вызова job_output","jobOutputError":"Не удалось прочитать вывод","jobOutputTruncated":"Вывод обрезан","jobStatusCompleted":"Завершена","jobStatusFailed":"Ошибка","jobStatusKilled":"Прервана","jobStatusRunning":"Выполняется","jobStatusStopping":"Останавливается","jobViewOutput":"Посмотреть вывод","jobs":"Фоновые задачи","jobsCount":"фоновых задач: {count}","jobsCountRunning":"фоновых задач: {count} · выполняется: {running}","loadMore":"Показать ещё","loading":"Загрузка…","mermaidError":"Ошибка рендеринга Mermaid","mermaidZoomHint":"Прокрутка для масштабирования · перетаскивание для перемещения · Esc для закрытия","mermaidZoomIn":"Увеличить","mermaidZoomOut":"Уменьшить масштаб","mermaidZoomReset":"Сбросить","moveToFreeWindow":"Переместить в свободное окно","newFile":"Новый файл","newTab":"Новая вкладка","newTerminal":"Новый терминал","noChanges":"Изменений нет","noSession":"Выберите диалог, чтобы пользоваться панелью","notRepo":"Эта папка не является репозиторием git","openEditor":"Открыть редактор","openExplorer":"Проводник","openFileNewTab":"Открыть в новой вкладке","openFileSide":"Открыть сбоку","openGit":"Панель git","openPlugin":"Открыть","openSubagent":"Задачи","openWithCursor":"Курсор","openWithExplorer":"Файловый менеджер","openWithMenu":"Открыть с помощью","openWithSettingsAdd":"Добавить","openWithSettingsCustomDesc":"Имя + шаблон URL (заполнитель {path}) + флаг семейства VSCode; в удалённом режиме только редакторы семейства VSCode могут открыть удалённый путь","openWithSettingsCustomTitle":"Пользовательские редакторы","openWithSettingsFamily":"Семейство VSCode","openWithSettingsFamilyDesc":"Этот редактор понимает URL-адреса VSCode (поддерживает открытие через SSH-удалённое подключение)","openWithSettingsInvalidHint":"Редакторы без имени или шаблоны без {path} / scheme:// не отображаются в меню","openWithSettingsName":"Имя","openWithSettingsRemove":"Удалить","openWithSettingsSshDesc":"Пусто = локальная рабочая область; с user@host или SSH-алиасом открыватели семейства VSCode переключаются на протокол vscode-remote/ssh-remote, а Файловый менеджер / Zed / пользовательские редакторы вне семейства VSCode скрываются из меню","openWithSettingsSshPlaceholder":"пользователь@хост или алиас SSH","openWithSettingsSshTitle":"SSH удаленный хост","openWithSettingsTemplate":"напр. cursor://file/{path}","openWithSshSuffix":"(SSH)","openWithVscode":"VS Code","openWithZed":"Зед","parent":"Родительская папка","pinAgentTerminal":"Закрепить терминал агента","pinOpenWith":"Закрепить в меню","pinTerminal":"Закрепить терминал","pinToGlobal":"Закрепить для всех","pinToWorkspace":"Закрепить в рабочей области","pinnedRailLabel":"Закреплённые терминалы","pinnedTerminalKindAgent":"Терминал агента","pinnedTerminalKindUi":"Терминал интерфейса","pinnedTerminalScopeGlobal":"Закреплено глобально","pinnedTerminalScopeWorkspace":"Закреплено в рабочей области","pinnedTerminalTooltip":"{kind} · {scope} · {cwd}","pluginDocsPanelDesc":"Глобальные документы в боковой панели DSH: читайте свои заметки в формате Markdown из любого рабочего пространства — список файлов, структура, открытие в Chrome / VS Code и кнопки копирования; директория документов настраивается (по умолчанию ~/.dsh/docs)","pluginEgoBrowserDesc":"Браузер агента для DeepSeek Harness: 32 инструмента ego_* управляют реальным Chromium, с нативной боковой панелью \"ego browser\", которая предоставляет живой просмотр каждой страницы, посещаемой агентом — вы можете кликать, перетаскивать и печатать, чтобы взять управление на себя. Регистрирует вкладку автоматически, если присутствует better-sidebar, в противном случае переходит на плавающий пузырь.","pluginFlowglassDesc":"Граф потока живого сеанса с тремя полосами для пользователя, ассистента и вызовов инструментов, а также параллельными группами, ветвями под-агентов, детализацией и текущим статусом; регистрирует вкладку Flowglass в нативном режиме при установке better-sidebar и сохраняет отдельный выдвижной ящик в качестве резерва.","pluginGitForgeDesc":"Вкладка Git Forge: библиотека аккаунтов GitHub/Gitea (и других форков) + права на проекты + политика жесткого пуша; токены остаются в локальных секретах (никогда в контексте модели); инструмент GitForge только для чтения и помощник для HTTPS-учетных данных агента","pluginGitRemotesDesc":"Вкладка Git Remotes: ветка, upstream, отставание и опережение, fetch (с необязательным prune), pull только ff-only и push после подтверждения во вкладке. Не заменяет встроенную вкладку git со стадированием и коммитами, не предлагает force-push и не даёт модели инструмент автопуша","pluginNotLoaded":"Плагин не загружен, вкладка недоступна:","pluginOfficeDesc":"Предпросмотр офисных файлов (.docx / .xlsx / .pptx) в редакторе better-sidebar; тяжёлые библиотеки рендеринга держатся вне основного бандла","pluginSentinelDesc":"Пробуждение агента по условию: датчики файлов, процессов, портов, http, команд и вебхуков будят спящие сессии, когда условие сработало; добавляет вкладку Sentinel с общей таблицей наблюдений","pluginSidebarQaDesc":"Выделил и спросил: выделите текст в диалоге, задайте вопрос в правой панели — откроется отдельная сессия-уточнение в той же рабочей папке; быстрая модель без рассуждений сжимает основной контекст и подставляет его вместе с цитатой, не прерывая основной диалог. Уточнения вкладываются, продолжаются и уходят в архив","pluginSshTunnelDesc":"Вкладка SSH-туннеля: инвентарь нескольких хостов + гранты для каждого проекта + локальные секреты; инструмент SSHManager (стратегии выполнения/ SFTP/сеансов); центральный интерактивный терминал и двухпанельный SFTP","pluginTurnReviewDesc":"Человеческий шлюз на только что завершённом ходе: Одобрить / Запросить изменения по пути с необязательным комментарием; пути сгруппированы по основной сессии / суб-агенту / без атрибуции; встроенное сравнение снимка и текущего состояния перед принятием решения. Без форка, без /rewind.","pluginVideoPreviewDesc":"Просмотр видео (.mp4/.webm/.mov/.mkv/.avi и других) прямо в редакторе better-sidebar через отдельный маршрут /video с поддержкой HTTP Range (206) — перемотка работает, ограничение mediaLimit в 20 МБ не действует","preview":"Предпросмотр","produced":"Создано","producedOpen":"Открыть в панели","referenceFile":"@файл","refresh":"Обновить","refreshUnsavedConfirm":"Файл изменился на диске. Обновление приведёт к потере несохранённых изменений. Продолжить?","retry":"Повторить","revertCommit":"Откатить коммит","revertDesc":"Создать в текущей ветке новый коммит, отменяющий «{subject}».","revertTitle":"Откат коммита","sandboxRestore":"Вернуть песочницу","sandboxStatusOn":"Песочница включена · страницы не видят данные интерфейса и локальные файлы; входы и сторонние куки могут не работать","sandboxUnlock":"Временно отключить (небезопасно)","save":"Сохранить","saveFailed":"Сохранить не удалось","saved":"Сохранено","settingsBottomTerminalDesc":"При первом разворачивании нижней панели в сессии открывать в ней новый терминал (ограничение на число терминалов сохраняется; по умолчанию включено)","settingsBottomTerminalTitle":"Открывать терминал при первом разворачивании нижней панели","settingsBrowserHttpDesc":"Если включено, клик по внешней http-ссылке в диалоге или интерфейсе открывает панель (страницы плагинов с urlTarget имеют приоритет); Ctrl/Cmd+клик всегда в обход","settingsBrowserHttpTitle":"Открывать http-страницы в панели","settingsBrowserHttpsDesc":"Если включено, клик по внешней https-ссылке открывает панель. По умолчанию выключено: большинство https-сайтов запрещают встраивание, поэтому системный браузер удобнее","settingsBrowserHttpsTitle":"Открывать https-страницы в панели","settingsBrowserLinksDesc":"Если включено, клик по внешней ссылке открывает панель, а не новое окно; http и https управляются отдельными переключателями ниже; Ctrl/Cmd+клик всегда в обход","settingsBrowserLinksTitle":"Открывать внешние ссылки из диалога в панели","settingsBrowserLoopbackDesc":"Разделённый запятыми список разрешённых адресов локальной петли (например, localhost:5174 или 127.0.0.1:8080), которые может посещать боковой браузер; пустое значение блокирует все локальные адреса по умолчанию. Песочница всё ещё применяется — страницы не могут читать данные GUI.","settingsBrowserLoopbackPlaceholder":"например, localhost:5174, 127.0.0.1:8080","settingsBrowserLoopbackTitle":"Разрешенные локальные адреса","settingsBrowserSandboxDesc":"С выключенной песочницей любой открытый сайт работает в том же origin, что и интерфейс: он может читать данные сессии и действовать от вашего имени. Включайте только для полностью доверенных сайтов","settingsBrowserSandboxTitle":"Отключить песочницу браузера (небезопасно)","settingsConflict":"Настройку изменили в другом окне — повторите","settingsCustomCssDesc":"Стили добавлены в конце страницы (поздние в каскаде выигрывают при равенстве; используйте !important для переопределения встроенных переменных, записанных через JS)","settingsCustomCssPlaceholder":"/* например, зарезервировать 36px для оболочки с нарисованной вручную строкой заголовка */\nhtml[data-dsh-title-bar-height=\"36\"] {\n --dsh-title-bar-strip: 36px !important;\n}","settingsCustomCssTitle":"Пользовательский CSS","settingsDone":"Готово","settingsFontFamilyDesc":"Своя гарнитура терминала (CSS-стек вида \"JetBrains Mono\", monospace; пусто — моноширинный шрифт темы)","settingsFontFamilyPlaceholder":"\"JetBrains Mono\", monospace","settingsFontFamilyTitle":"Шрифт терминала","settingsFontSizeDesc":"Размер шрифта терминала в пикселях (9–32, по умолчанию 13)","settingsFontSizeSuffix":"px","settingsFontSizeTitle":"Размер шрифта терминала","settingsGeneralTitle":"Общие","settingsHtmlDefaultUnsafeDesc":"Если включено, каждый новый предпросмотр HTML открывается без песочницы (тот же origin, что и интерфейс — доступны файлы сессии и внутренние API); вернуть песочницу можно одним нажатием в строке состояния","settingsHtmlDefaultUnsafeTitle":"Открывать предпросмотр HTML без песочницы (небезопасно)","settingsHtmlSandboxDesc":"С выключенной песочницей просматриваемый HTML работает в том же origin, что и интерфейс: он может читать файлы сессии, локальное хранилище и вызывать внутренние API. Включайте только для полностью доверенных файлов","settingsHtmlSandboxTitle":"Отключить песочницу предпросмотра HTML (небезопасно)","settingsIntro":"Что показывает боковая панель и как она себя ведёт","settingsJobsDesc":"Разворачивать панель и открывать страницу задач при появлении новой фоновой задачи в текущем диалоге (срабатывает на каждую); выключите, чтобы открывать вручную","settingsJobsTitle":"Открывать страницу задач при новой фоновой задаче","settingsNav":"Боковая панель","settingsOpenDesc":"Разворачивать панель для совсем новых диалогов; у существующих сохраняется своя раскладка","settingsOpenPathDesc":"Открывать файловые ссылки из диалога (строки инструментов, созданные файлы, упоминания) в редакторе панели, а не в системном приложении","settingsOpenPathTitle":"Открывать файлы из диалога в панели","settingsOpenTitle":"Разворачивать для новых диалогов","settingsOpenToolsDesc":"Когда включено, модель может активно открывать файлы, папки и HTTP(S)-страницы в боковой панели через инструмент sidebar_open (по умолчанию отключено).","settingsOpenToolsTitle":"Внедрите инструмент sidebar-open для модели","settingsPopup":"Настройки функции","settingsPopupDesc":"Параметры для «{feature}»","settingsSaveFailed":"Не удалось сохранить","settingsSchemeAutoDesc":"Консервативный: учитывается только стандартный API Window Controls Overlay (реальная высота наложения заголовка); обычные веб-среды не изменяются","settingsSchemeAutoTitle":"Автоопределение","settingsSchemeCustomDesc":"Полный контроль: вставьте пользовательский CSS (может переопределять встроенные стили) и задайте расстояние смещения строки заголовка","settingsSchemeCustomTitle":"Настроить","settingsSchemeDetectedSuffix":"обнаружено","settingsSchemeWebDesc":"Явно указать официальный веб-интерфейс: без адаптации вообще (даже стандартной геометрии WCO)","settingsSchemeWebTitle":"Официальный сайт DSH","settingsShellArgsDesc":"Явные аргументы командной оболочки, разделённые пробелами; если не пусто, полностью заменяют значения по умолчанию (тот же принцип, что и у shellArgs в yaml)","settingsShellArgsPlaceholder":"напр. -l (пусто = по умолчанию)","settingsShellArgsTitle":"Аргументы командной оболочки","settingsShellDesc":"Оболочка, запускаемая для терминалов UI и моделей (абсолютный путь или имя исполняемого файла). Пустое значение сохраняет устаревший порядок: shell из конфига yaml → $SHELL / логин-шелл / Windows powershell.exe. Применяется к терминалам, открытым после этого.","settingsShellPlaceholder":"например, /bin/zsh (пусто = автоматически)","settingsShellTitle":"Путь к оболочке","settingsSubagentDesc":"Разворачивать панель и открывать страницу задач, когда в диалоге появляется субагент; выключите, чтобы открывать вручную","settingsSubagentTitle":"Открывать страницу задач при появлении субагента","settingsTabsTitle":"Содержимое панели","settingsTitleBarDesc":"Оставлять место под системный заголовок окна Windows справа сверху, чтобы кнопки и содержимое панели располагались ниже, а не под ним","settingsTitleBarStripDesc":"Высота полосы заголовка: на сколько пикселей опускаются кнопки и содержимое панели (0–120, по умолчанию 40)","settingsTitleBarStripTitle":"Смещение","settingsTitleBarTitle":"Режим совместимости с заголовком окна","settingsToolsDesc":"Если включено, модель может создавать терминалы в панели и работать в них через восемь инструментов terminal_* (по умолчанию выключено)","settingsToolsTitle":"Дать модели инструменты терминала","settingsViewerCatchAll":"На всё остальное: любой файл","settingsViewersTitle":"Просмотрщики файлов","settingsWidthDesc":"Какую долю ширины окна занимает панель в новых диалогах (20–60)","settingsWidthSuffix":"%","settingsWidthTitle":"Ширина по умолчанию","showInFolder":"Показать в папке","sideChat":"Боковой чат (бета)","sideChatCancel":"Остановить","sideChatCancelTitle":"Прервать текущий ход (запланированные задачи сохраняются)","sideChatClose":"Закрыть тему","sideChatCloseTitle":"Освободить агента потока (история сохраняется)","sideChatComposerPlaceholder":"Задать уточняющий вопрос…","sideChatCreating":"Создание побочного диалога…","sideChatEmpty":"Без посторонних разговоров","sideChatEmptyDesc":"Каждый побочный диалог открывается в отдельной вкладке на панели — он наследует контекст текущей сессии и никогда не попадает в основной разговор","sideChatError":"Ошибка бокового чата: {message}","sideChatFirstPlaceholder":"Задайте первый вопрос — контекст сохранён…","sideChatInjection":"Контекст внедрен","sideChatNew":"Новая тема","sideChatNoTurn":"Сохранение доступно после первого завершённого хода","sideChatPendingDrop":"Последний неотвеченный вопрос не будет включен в сохраненную сессию","sideChatRetry":"Повторить","sideChatSave":"Сохранить как новую сессию","sideChatSaveTitle":"Повысьте этот тред до уровня отдельной сессии в основном списке сессий","sideChatSaved":"Сохранено как новая сессия","sideChatSend":"Отправить","sideChatThink":"Думаю","sideChatThinking":"Глубокое погружение…","sideChatThreads":"Переключить ветку / новая","sideChatUntitled":"Новая тема","splitDown":"Разделить вниз","splitLeft":"Разделить влево","splitRight":"Разделить вправо","splitUp":"Разделить вверх","stage":"В индекс","stageAll":"Всё в индекс","staged":"В индексе","statusTruncated":"Слишком много изменений; показаны первые 2,000 записей","subagent":"Задачи","subagentCount":"субагентов: {count}","subagentCountRunning":"субагентов: {count} · работает: {running}","subagentDiagCorrupt":"Повреждён","subagentDiagUnavailable":"Недоступен","subagentDiagUnsupported":"Не поддерживается","subagentEmpty":"Субагентов нет","subagentEmptyDesc":"Здесь появятся субагенты, запущенные основным агентом","subagentInactive":"Простаивает","subagentMainAgent":"Основной агент","subagentModeContinuable":"С продолжением","subagentModeOneShot":"Разовый","subagentRunning":"Работает","subagentThinking":"Думает…","terminal":"Терминал","terminalConnectFailed":"Терминал не смог подключиться несколько раз подряд","terminalDepsFailed":"Не удалось загрузить зависимость терминала node-pty","terminalDepsHint":"Выполните команду ниже в терминале на машине с DSH, чтобы починить, и повторите (версия node-pty должна совпадать с версией ядра DSH):","terminalDepsProfile":" (определён профиль: {profile})","terminalError":"Не удалось подключиться к терминалу","terminalLimit":"Достигнут предел терминалов (3)","terminalRetry":"Повторить","timeHoursAgo":"{n} ч назад","timeJustNow":"только что","timeMinutesAgo":"{n} мин назад","timeYesterday":"вчера","toc":"Содержание","truncation":"Файл слишком большой — показаны первые 512 КБ","unpinOpenWith":"Открепить","unpinTerminal":"Открепить","unsaved":"Не сохранено","unstage":"Из индекса","unstageAll":"Всё из индекса","unstaged":"Вне индекса","uploadCancelled":"Загрузка отменена","uploadDone":"Загружено {count} файл(ов)","uploadDropChat":"Перетащите в чат, чтобы добавить изображения","uploadDropHint":"Перетащите файлы/папки сюда для загрузки","uploadFailed":"Не удалось загрузить: {error}","uploadFailedUnknown":"Неизвестная ошибка","uploadFiles":"Загрузить файлы","uploadFolder":"Загрузить папку","uploadHere":"Загрузите сюда","uploadProgress":"Загружено {done}/{total}: {name}","uploadTo":"Загрузить в {dir}","uploadTooLarge":"Файл слишком большой (превышен лимит загрузки)","uploadingTo":"Загрузка в {dir}…","viewCommitDiff":"Посмотреть изменения коммита","viewerBinary":"Скачивание файла","viewerCode":"Код","viewerHtml":"HTML","viewerImage":"Изображение","viewerMarkdown":"Markdown","viewerPdf":"PDF","worktree":"Рабочее дерево"},"command":{"listbox.aria":"Совпадения /{command}","notice.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","overlay.aria":"Параметры /{command}","search.aria":"Фильтр параметров","search.placeholder":"Поиск…","status.applying":"Применение…","status.empty":"Нет параметров","status.loading":"Загрузка параметров…"},"common":{"back":"Назад","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть","copied":"Скопировано","copy":"Копировать","delete":"Удалить","edit":"Изменить","expand":"Развернуть","load.failed":"Не удалось загрузить","loading":"Загрузка…","more":"Ещё","next":"Дальше","none":"Нет","ok":"ОК","previous":"Назад","retry":"Повторить","save":"Сохранить","search":"Поиск","skip":"Пропустить","submit":"Отправить","submitting":"Отправка…","truncated":"Обрезано","unknown":"Неизвестно"},"context-doctor":{"cd.attention":"Стоит посмотреть","cd.byFile":"По файлу","cd.byServer":"По серверу","cd.bySource":"По источнику","cd.catalog":"{n} скиллов","cd.catalog.few":"{n} скилла","cd.catalog.many":"{n} скиллов","cd.catalog.one":"{n} скилл","cd.collapse":"Скрыть детализацию","cd.duplicateBlocks":"{n} дублированных блоков · {tokens} токенов","cd.duplicateSkills":"{n} навыков имеют одинаковое описание","cd.empty":"Данных пока нет","cd.emptyCategory":"ничего не внедрено","cd.emptyState":"Данные аудита пока отсутствуют.","cd.error":"Проверка не удалась","cd.expand":"Показать детализацию","cd.files":"файлов","cd.guideline":"из 50k","cd.healthy":"В норме","cd.healthyHint":"Контекст расходуется экономно и укладывается в рекомендованный бюджет.","cd.heavy":"Превышение бюджета","cd.heavyHint":"Резидентный контекст перегружает бюджет. Сначала сократите самые крупные записи.","cd.hint":"Открыть аудит контекста","cd.instructions":"Цепочка инструкций","cd.instructions.sub":"{n} файлов","cd.justNow":"только что","cd.loading":"Проверка…","cd.mcp":"Инструменты MCP","cd.mcp.sub":"{n} инструментов · {servers} серверов","cd.mcpTools":"{n} инструментов","cd.mcpTools.few":"{n} инструмента","cd.mcpTools.many":"{n} инструментов","cd.mcpTools.one":"{n} инструмент","cd.minutesAgo":"{n} минут назад","cd.more":"+{n} ещё","cd.native":"Встроенные инструменты","cd.noDetail":"Нет доступной разбивки","cd.ofBudget":"из бюджета в {budget}","cd.refresh":"Обновить","cd.residentTokens":"Проверка бюджета контекста","cd.residentUnit":"токены резидентные","cd.review":"Стоит посмотреть","cd.reviewHint":"Некоторые части контекста стоит пересмотреть, пока они не стали дорогими.","cd.secondsAgo":"{n} назад","cd.shadowed":"{n} навыков скрыты записью с таким же названием","cd.skills":"Каталог скиллов","cd.skills.sub":"{n} навыков","cd.subtitle":"Аудит контекста","cd.suggestions":"Рекомендации","cd.suggestions.few":"{n} рекомендации","cd.suggestions.many":"{n} рекомендаций","cd.suggestions.one":"{n} рекомендация","cd.title":"Аудит контекста","cd.tokens":"токены","cd.tools":"Схемы инструментов","cd.tools.sub":"{n} встроенных инструментов","cd.toolsCount":"инструментов","cd.topSchemas":"Самые большие схемы","cd.total":"Общее количество","cd.updated":"Обновлено {when}"},"conversation":{"access.confirm.acknowledge":"Я понимаю риски и хочу продолжить","access.confirm.cancel":"Отмена","access.confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","access.confirm.enable":"Включить полный доступ","access.confirm.title":"Включить полный доступ?","approval.allowOnce":"Разрешить один раз","approval.detail.aria":"Подробности запроса","approval.escalation":"Инструмент {toolName} просит повышенных прав","approval.reject":"Отклонить","approval.waiting":"Ожидание подтверждения","ask.answered":"{answered}/{total} отвечено","ask.cancelled":"отменено","ask.interrupted":"прервано","ask.rowTitle":"Вопрос","ask.waiting":"ожидание","bash.failed":"Ошибка","bash.running":"Выполняется","bash.stopped":"Остановлено","chat.loadError":"Не удалось загрузить историю: {message} ({code})","chat.loadOlder":"Загрузить раньше","chat.loadingHistory":"Загрузка истории…","chat.toBottom":"Вниз","clock.md":"{d}.{m}","clock.ymd":"{d}.{m}.{y}","command.done":"Готово","command.failed":"Команда не выполнена","command.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","command.running":"Выполняется…","command.title":"Команда","context.aria":"{percent} контекста занято","context.messages":"Сообщения","context.system":"Системный промпт","context.tools":"Инструменты","context.used":"контекста занято","details.close":"Закрыть подробности","details.empty":"Выберите строку инструмента в переписке, чтобы увидеть подробности","details.input":"Вход","details.notInWindow":"Этот вызов вне текущего окна","details.output":"Выход","details.running":"Выполняется…","details.title":"Подробности","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","fileOpen.folderTitle":"Не удалось открыть папку","fileOpen.folderUnknown":"Не удалось открыть эту папку","fileOpen.title":"Не удалось открыть файл","fileOpen.unknown":"Не удалось открыть этот файл","hero.chooseWorkspace":"Выбрать рабочую папку","hero.headline":"Навстречу неизвестному","hero.preview":"Предпросмотр","hint.goal":"опишите цель длительной задачи","hint.goal.active":"цель активна — изменить / пауза / продолжить / снять","image.closePreview":"Закрыть просмотр оригинала","image.dimensionTooLarge":"Стороны изображения не больше {size}px — уменьшите его и попробуйте снова","image.dropBlocked":"Сейчас картинки добавить нельзя","image.dropDesc":"До {count} изображений, каждое до {size}","image.dropTitle":"Перетащите изображения сюда","image.fileTooLarge":"Каждое изображение должно быть меньше {size}","image.label":"Изображение","image.loadFailed":"Изображение не загрузилось, нажмите для повтора","image.loading":"Загрузка изображения…","image.modelUnsupported":"Текущая модель не принимает изображения; выберите подходящую","image.openOriginal":"Открыть оригинал","image.openOriginalLabel":"{label}, нажмите, чтобы открыть оригинал","image.original":"Оригинал","image.pending":"Изображения к отправке","image.preview":"Просмотр оригинала","image.remove":"Убрать изображение {name}","image.scrollLeft":"Прокрутить изображения влево","image.scrollRight":"Прокрутить изображения вправо","image.sendFailed":"Не удалось отправить изображения ({reason}); добавьте заново и повторите","image.serviceUnavailable":"Служба загрузки изображений недоступна","image.subagentUnsupported":"Сессии субагентов пока не поддерживают изображения","image.tooMany":"В одно сообщение помещается до {count} изображений","image.tooManyPixels":"Слишком большое разрешение; сожмите изображение и повторите","image.totalTooLarge":"Изображения весят больше {size}; уберите часть и повторите","image.unsupportedType":"Поддерживаются только PNG, JPG, WebP и GIF","input.accessMode":"Режим доступа, сейчас: {name}","input.commands":"Команды","input.send":"Отправить сообщение","input.stop":"Остановить генерацию","json.truncated":"… обрезано, всего символов: {total}","message.branch":"Ответвить новый диалог","message.branchUnavailable":"Доступно только на последнем сообщении завершённого хода","message.compaction":"Контекст сжат","message.compaction.completed":"Сжато элементов истории: {items} (~{tokens} токенов)","message.compaction.expand":"Показать итог сжатия","message.compaction.running":"Сжатие контекста…","message.compaction.unavailable":"Итог сжатия недоступен","message.context.catalog.more":"… ещё {count}","message.context.catalog.replaced":"Каталог заменён","message.context.instructions.added":"добавлено","message.context.instructions.loaded":"загружено","message.context.instructions.removed":"удалено","message.context.instructions.updated":"обновлено","message.context.recall.counts":"{retained} оставлено · {omitted} пропущено","message.context.recall.truncated":"обрезано","message.context.relay.from":"Из сессии {session}","message.context.snapshot.supersedes":"Заменяет прежние снимки","message.contextInjection":"Инъекция контекста","message.contextRecall":"Напоминание из сессии","message.extraBlock":"Дополнительный блок","message.maxTokens":"Достигнут лимит выходных токенов","message.maxTokens.hint":"Ответ обрезан; написанное ранее сохранено в переписке. Отправьте «продолжай», чтобы модель дописала.","message.ranFor":"Заняло {duration}","message.referenceSeparator":", ","message.referenceSummary":"Упомянутая сессия · {labels}","message.retry.active":"Повтор запроса к модели","message.retry.cancelled":"Повтор запроса отменён","message.retry.delay":"Задержка перед повтором: ","message.retry.failure":"Причина сбоя: ","message.retry.scheduled":"Ожидание повтора запроса","message.retry.started":"Запрос к модели повторён","message.retry.status":"{label} ({retry}/{maximum}) · {seconds} с","message.stopped":"Остановлено","message.tokensPerSecond":"{tps} ток/с","message.ttft":"Первый токен {seconds} с","message.turnError":"Ход не удался","message.unknownBlock":"Неизвестный блок содержимого","message.unknownSurface":"Неизвестное событие: {type}","placeholder.default":"Напишите агенту","placeholder.hero":"Опишите, что хотите сделать","placeholder.parentOffline":"Родительская сессия офлайн: отправка недоступна, но остановить выполнение можно","placeholder.steerQueue":"Cmd/Ctrl+Enter направит все сообщения из очереди","placeholder.unavailable":"Сессия недоступна","placeholder.workspace":"Выберите рабочую папку, чтобы начать","queue.cancelEdit":"Отменить правку","queue.count":"Сообщений в очереди: {n}","queue.edit":"Изменить сообщение в очереди","queue.edit.unsupported":"Содержит не только текст; правка пока не поддерживается","queue.editFailed":"Не удалось изменить: сообщение, возможно, уже отправляется.","queue.remove":"Убрать из очереди","queue.removeFailed":"Не удалось убрать: сообщение, возможно, уже отправляется.","queue.save":"Сохранить сообщение","queue.steer":"Направить сообщение","queue.steer.unavailable":"Направлять можно только пока агент работает","queue.steerFailed":"Не удалось направить. Попробуйте ещё раз.","row.failed":"Ошибка","row.running":"Выполняется","row.stopped":"Остановлено","session.hierarchy":"Иерархия сессий","settings.enter.description":"Только когда агент занят; Cmd/Ctrl+Enter даёт другое поведение","settings.enter.queue":"В очередь","settings.enter.steer":"Направить","settings.enter.title":"Enter, когда агент занят","stats.cacheHit":"Попаданий в кэш {percent}%","stats.counts":"ходов: {turns} · шагов: {steps}","stats.llm":"Модель {duration}","stats.tokens":"Вход {input} ток · выход {output} ток","stats.tokensPerSecond":"{throughput} ток/с","stats.toolCall":"Инструменты {duration}","stats.ttftAverage":"Первый токен в среднем {duration}","terminal.collapseAria":"Свернуть вывод","terminal.done":"Готово","terminal.exitCode":"код возврата {code}","terminal.expandAria":"Показать оставшиеся строки вывода: {n}","terminal.expandRest":"… ещё строк: {n}","terminal.failed":"Ошибка","terminal.noOutput":"Вывода нет","terminal.running":"Выполняется","terminal.signal":"сигнал {signal}","todo.completed":"{done}/{total} выполнено","todo.progress.active":"{active} в работе","todo.progress.done":"{done} выполнено","todo.progress.pending":"{pending} в очереди","todo.rowTitle":"Обновить список задач","todo.title":"Задачи","view.chat":"Чат"},"cordis":{"a11y.defining":"Определение плагина","a11y.failed":"Определить не удалось","a11y.stopped":"Определение прервано","action.approve":"Разрешить","action.approveOnce":"Разрешить только эту версию","action.approvePlugin":"Разрешить будущие версии этого плагина","action.decline":"Отклонить","action.remove":"Удалить","action.retry":"Повторить","action.rollback":"Откатить","action.run":"Запустить","action.stop":"Остановить","body.clientCode":"Клиент","body.copied":"Скопировано","body.copy":"Копировать","body.hostCode":"Хост","body.output":"Результат","body.source":"Исходник плагина","panel.approvals.aria":"Подтверждения Cordis","panel.current":"Текущая: {packageId}","panel.empty":"Плагинов пока нет","panel.group.current":"Эта сессия","panel.group.others":"Другие сессии","panel.hint":"Управление запуском — в панели Cordis над настройками","panel.loading":"Чтение…","panel.next":"Следующая: {packageId}","panel.plugins.aria":"Плагины Cordis","panel.readFailed":"Не удалось прочитать список плагинов: {message}","panel.runningCount":"работает: {count}","panel.title":"Плагины Cordis","panel.trigger":"Плагин Cordis","panel.version":"Версия","purpose.missing":"(назначение не указано)","render.failedAbdicated":"Отрисовка в {slot} не удалась, вернули стандартный интерфейс:","render.failedHeld":"Отрисовка в {slot} не удалась:","row.defineTitle":"Зарегистрировать плагин Cordis","row.removeTitle":"Удалить плагин Cordis","row.runTitle":"Запустить плагин Cordis","row.stopTitle":"Остановить плагин Cordis","row.updateTitle":"Обновить плагин Cordis","run.removed":"Этого пакета больше нет","run.superseded":"Ниже есть более свежая карточка запуска","status.awaitingApproval":"Ждёт подтверждения","status.clientPending":"Клиент готов к активации","status.failed":"Запуск не удался","status.idle":"Готов","status.removed":"Удалён","status.running":"Работает","status.superseded":"Есть более свежий запуск"},"deliverables":{"produced.label":"Создано","produced.more":"+ {count} файлов","produced.moreOne":"+ 1 файл","produced.open":"Открыть {name}","produced.showInFolder":"Показать в папке"},"directory-browser":{"browser.cancel":"Отмена","browser.create":"Создать","browser.createIn":"Новая папка в «{name}»","browser.editPath":"Изменить путь","browser.folderName":"Имя папки","browser.home":"Домашняя папка","browser.loading":"Загрузка…","browser.newFolder":"Новая папка","browser.open":"Открыть","browser.showHidden":"Показывать скрытые файлы","browser.title":"Выбор рабочей папки","browser.truncated":"Слишком много папок; показано только начало.","browser.untitledFolder":"Без имени"},"dsh-context":{"agents.billed":"{n} выставлено к оплате","agents.chip.count":"{n} агентов","agents.chip.running":"{n} запущено","agents.chip.tokens":"{n} токенов в контексте","agents.continuable":"продолжаемый","agents.legend.free":"свободное окно","agents.more":"Ещё {n} не показано","agents.oneshot":"одноразовый","agents.open":"нажмите, чтобы открыть →","agents.requests":"{n} запросов","agents.running":"выполняется","agents.self":"текущий","agents.solo":"Пока нет суб-агентов — когда агент делегирует работу через инструмент суб-агентов, сеть будет отображаться здесь","agents.sub":"Живой контекст этого агента и его подчиненных агентов · нажмите на узел, чтобы открыть его сессию","agents.title":"Сеть агентов","attach.close":"Закрыть","attach.image":"Изображение","attach.images":"Изображения","attach.loadFailed":"Не удалось загрузить · нажмите, чтобы повторить","attach.loading":"…","attach.open":"Открыть изображение полностью","attach.other":"Другой контент","attach.preview":"Превью изображения","attach.raw":"Сырой","attach.sent":"Отправлено","attach.token":"Токен","attach.tokensTip":"Расчетная стоимость токенов через официальное преобразование размера изображения DeepSeek (ограничение в 384 токена на изображение)","block.answer":"Ответ","block.content":"Контент","block.line":"1 строка","block.lines":"{n} строк","block.result":"Результат","block.summary":"Сводка","block.thinking":"Обоснование","brief.input":"В","brief.inputTip":"Что было введено после предыдущего ответа и перед этим запросом — обычно результаты предыдущего вызова инструмента; начало нового оборота не содержит ничего нового","brief.locate":"Показать в контекстном браузере","brief.more":"+{n}","brief.noInputs":"(ничего нового)","brief.reply":"Ответ","brief.replyTip":"Что модель вернула на этом шаге (текстовый ответ или вызовы инструментов) — результаты вызовов отображаются в строке In следующего бара","brief.turn":"Пользователь","brief.turnTip":"Сообщение пользователя, которое открыло этот ход — каждый шаг хода ссылается на него","browser.approx":"Некоторые удаленные сообщения этого шага превышают срок хранения — приведенное ниже восстановление является приблизительным","browser.deltaHint":"по сравнению с предыдущим ходом","browser.items":"{n} элементов","browser.live":"В прямом эфире (Следующий запрос)","browser.liveNow":"В прямом эфире · Следующий запрос","browser.loadFailed":"Не удалось загрузить — нажмите, чтобы повторить","browser.loading":"Загрузка полного содержимого из более старой истории сеанса…","browser.missingLive":"… {n} предыдущих сообщений также являются частью контекста (за пределами предоставленного окна)","browser.noContent":"Полное содержимое находится за пределами загруженного окна сообщений (загрузите более старую историю в Чате для просмотра)","browser.noEpoch":"Содержание заголовка (Системное сообщение / Схемы инструментов) этого шага находится за пределами удержания","browser.noHeader":"Обслуживается устаревшей версией плагина: только оценка токенов, без содержимого","browser.notInLog":"Этот элемент больше не находится в журнале сессии (возможно, он был удалён или очищен)","browser.preview":"Предварительный просмотр","browser.rowNoMatch":"Нет строк, соответствующих текущему фильтру","browser.search.assistant":"Фильтровать по ответам или звонкам…","browser.search.inject":"Фильтровать введённый контекст…","browser.search.tool":"Фильтровать по инструменту или аргументам…","browser.search.user":"Фильтровать по тексту сообщения…","browser.title":"Контекстный браузер","call.exit":"выход {n}","call.fail":"Не удалось","call.ok":"ОК","cat.assistant":"Сообщения ассистента","cat.inject":"Введённый контекст","cat.system":"Системное сообщение","cat.tool":"Результаты инструмента","cat.tools":"Схемы инструментов","cat.user":"Сообщения пользователя","cmd.close":"Закрыть","cmd.desc":"Просмотр текущего контекста макияжа, просмотр состава по шагам","detail.actual":"Фактический запрос {n}","detail.cache":"Кэш {n}%","detail.estTotal":"Примерно ≈ {n}","detail.lastStep":"Последний шаг","detail.output":"Вывод {n}","detail.step":"Поверните {t} · Шаг {s}","detail.turn":"Поверните {t} · {n} шагов","error":"Не удалось прочитать данные контекста:","error.retry":"Повторить","ev.compaction":"Контекст сжат (резюме заменено {n} сообщений)","ev.mode.plan.off":"Режим плана выключен","ev.mode.plan.on":"Режим планирования включён","ev.model":"Модель изменена: {a} → {b}","ev.prune":"Вывод инструмента обрезан","ev.skill":"Навык внедрён ({name})","events.at":"Поверните {t} · Шаг {s}","events.empty":"Событий контекста пока нет (компактизация, инъекции, переключения моделей отображаются здесь)","events.range":"Поверните {t} · Шаг {a}→{b}","events.rangeTo":"Поверните {a} · Шаг {as} → Поверните {b} · Шаг {bs}","events.title":"Контекстные события","files.chipTip":"{files} файлов · {ops} операций","files.deltaTip":"Совокупное изменение строк, оцененное по аргументам вызовов редактирования/записи: + добавлено / − удалено","files.empty":"Нет чтений, записей или поиска файлов в этом диапазоне","files.errs":"{n} не удалось","files.files":"{n} файлов","files.form.dir":"Каталог","files.form.image":"Изображение","files.form.text":"Файл","files.glyph.archive":"Архив","files.glyph.assets":"Активы","files.glyph.build":"Результат сборки","files.glyph.config":"Конфигурация","files.glyph.data":"Данные / манифест","files.glyph.database":"База данных","files.glyph.deps":"Зависимости","files.glyph.docker":"Docker","files.glyph.docs":"Документы","files.glyph.document":"Документ","files.glyph.font":"Шрифт","files.glyph.hidden":"Каталог метаданных","files.glyph.ignore":"Игнорировать правила","files.glyph.lang.c":"C","files.glyph.lang.cpp":"C++","files.glyph.lang.csharp":"C#","files.glyph.lang.dart":"Dart","files.glyph.lang.go":"Перейти","files.glyph.lang.html":"HTML","files.glyph.lang.java":"Java","files.glyph.lang.js":"JavaScript","files.glyph.lang.kotlin":"Kotlin","files.glyph.lang.lua":"Lua","files.glyph.lang.php":"PHP","files.glyph.lang.ruby":"Рубин","files.glyph.lang.rust":"Ржавчина","files.glyph.lang.scala":"Скала","files.glyph.lang.svelte":"Свелт","files.glyph.lang.swift":"Быстро","files.glyph.lang.ts":"TypeScript","files.glyph.lang.vue":"Вью","files.glyph.license":"Лицензия","files.glyph.lock":"Файл блокировки","files.glyph.log":"Войти","files.glyph.markdown":"Документ с разметкой","files.glyph.media":"Медиа","files.glyph.notebook":"Блокнот","files.glyph.python":"Питон","files.glyph.root":"Корневая папка рабочей области","files.glyph.scripts":"Скрипты","files.glyph.sheet":"Таблица","files.glyph.shell":"Оболочка","files.glyph.style":"Стили","files.glyph.tests":"Тесты","files.hits":"{n} попаданий","files.kind.all":"Все","files.kind.image":"Изображения","files.kind.read":"Читать","files.kind.search":"Искали","files.kind.write":"Написано","files.locate":"Показать эту операцию в Обозревателе контекста","files.noMatch":"Нет файлов, соответствующих текущим фильтрам","files.open":"Открыть на вашем устройстве","files.readEst":"Строк прочитано, оценка на основе аргумента limit","files.readTip":"Прочитайте строки {a}–{b}","files.scopeLatest":"До последнего · следует за выбором трендового графика","files.search":"Фильтровать по пути…","files.sort.count":"Самый активный","files.sort.latest":"Последние","files.sort.path":"По пути","files.sortTip":"Сортировать файлы по количеству операций (выбранного вида при активной метке вида), последней активности или пути","files.title":"Активность файла","footer":"Оценка: та же эвристика с фиксированной плотностью, что и встроенный tokenMeter в dsh (~4 символа ≈ 1 токен); «фактическое» — это использование, сообщаемое провайдером.","form.catalog":"Обновление каталога","form.context":"Контекстная инъекция","form.instructions":"Инструкции","form.notice":"Уведомление","form.recall":"Напомнить","form.relay":"Агентский ретранслятор","form.snapshot":"Снимок состояния","gran.delta":"Дельта","gran.modeHint":"Итого: суммарное значение; Дельта: изменение по сравнению с предыдущим запросом","gran.step":"Шаг","gran.total":"Всего","gran.turn":"Повернуть","kind.compaction":"Компактный","kind.inject":"Внедрить","kind.mode":"Режим","kind.model":"Переключить","kind.prune":"Обрезать","loading":"Чтение журнала сессии…","node.calls":"Звонки","node.empty":"(пустой ответ)","node.failed":"Выполнение инструмента завершилось с ошибкой","node.nonText":"(сообщение без текста)","node.skillTag":"Навык · {name}","node.snapshot":"Снимок:","node.toolResult":"Результат инструмента","nodes.empty":"Нет видимых сообщений прямо сейчас","nodes.hint":"в настоящее время видимые модели, сначала новые","nodes.more":"… {n} предыдущих сообщений пропущено","nodes.title":"Сообщения","overview.compactReserve":"Резерв автоуплотнения: автоуплотнение срабатывает при {pct}% окна — эта область обычно сохраняется как запас, фактически не используется.","overview.estimate":"токены (примерно)","overview.free":"Бесплатное окно","overview.ofUsed":"из использованного контекста","overview.title":"Текущий контекст","overview.used":"использовано контекста","plugin.github":"GitHub","plugin.hint":"Лучший плагин контекста для DSH ⭐","plugin.name":"Плагин","plugin.title":"Информация о плагине","rich.md":"Markdown","rich.raw":"Сырьё","rich.toMd":"Просмотреть как Markdown","rich.toRaw":"Просмотреть исходный текст","settings.collapse":"Свернуть","settings.desc":"Настройки отображения для панели Context","settings.expand":"Развернуть","settings.fileSort":"Сортировка файлов по умолчанию","settings.gran":"Гранулярность трендов по умолчанию","settings.mode":"Отображение трендов по умолчанию","settings.readOnly":"Настройки доступны только для чтения в этой среде","settings.title":"Контекст","stats.cacheHit":"Кэш-попадания","stats.compactions":"Компактизации","stats.cost":"Расч. стоимость","stats.costHit":"попадание","stats.costMiss":"пропустить","stats.costOut":"Вывод","stats.costPriceHead":"Тарифы за 1 миллион токенов (пиковый | внепиковый по половине цены):","stats.costTip":"Примерная совокупная стоимость всей сессии по прайс-листу DeepSeek: входные данные разделены по попаданию/промаху кэша, выходные данные включают рассуждения; каждый запрос оценивается по пиковой ставке (01:00–04:00, 06:00–10:00 UTC) или по половинной ставке вне пикового времени в зависимости от времени запроса. Применяется к deepseek-v4-flash / deepseek-v4-pro на любом провайдере; цены зафиксированы, только для справки.","stats.hint":"За период сохранённой истории (аналогично графику истории)","stats.images":"Изображения","stats.injects":"Инъекции","stats.prunes":"Чернослив","stats.steps":"Шаги","stats.title":"Статистика контекста","stats.toolCalls":"Вызовы инструментов","stats.turns":"Переключается","tab":"Контекст","tip.actual":"(фактическое {n})","tip.delta":"Дельта {n}","tip.step":"Повернуть {t} · Шаг {s}","tip.total":"Всего ≈ {n}","tip.turn":"Поверните {t} · {n} шагов","tool.desc":"Описание","tool.jsonHide":"Свернуть","tool.jsonToggle":"Просмотреть сырой JSON","tool.noMatch":"Нет инструментов, соответствующих текущему фильтру","tool.params":"Параметры","tool.paramsEmpty":"(без параметров)","tool.plugin":"Регистрирующий плагин этого инструмента (для справки)","tool.search":"Фильтровать по названию, описанию или параметрам…","tool.sort.name":"По имени","tool.sort.size":"По размеру","tool.sortTip":"Сортировать инструменты по размеру токена (по умолчанию) или по названию","tool.unknown":"Неизвестный плагин","tool.unknownTitle":"Инструмент был зарегистрирован до загрузки контекстного плагина, или его плагин был выгружен, поэтому его провайдер не может быть определен","tools.more":"из {n}","tools.top":"Лучшие схемы инструментов:","trend.empty":"Отправьте сообщение, и состав контекста каждого запроса модели появится здесь","trend.hint":"Наведите курсор для просмотра деталей, ✂ обозначает уплотнение/удаление, Шаг/Ход переключает детализацию","trend.title":"История контекста"},"dsh-image-gen":{"f.apiKeyEnv":"Справка по API-ключу","f.apiKeyEnvHint":"Ссылка на учетные данные / переменная окружения, содержащая ключ API FAL. Префикс авторизации \"Key \" добавляется автоматически.","f.baseURL":"Базовый URL очереди","f.baseURLHint":"Базовый URL очереди FAL (queue.fal.run).","f.customBaseURL":"Пользовательский API: базовый URL","f.customBaseURLHint":"Корень API без завершающего слеша. Запрос отправляется на {base}/images/generations.","f.customKeyEnv":"Пользовательский API: ссылка на ключ","f.customKeyEnvHint":"Ссылка на учётные данные / переменная окружения с API-ключом. Пустое значение означает отсутствие заголовка авторизации для шлюзов, которым он не требуется.","f.customModel":"Пользовательский API: модель","f.customModelHint":"Идентификатор модели, отправленный в этот API, например, gpt-image-1.","f.customSize":"Пользовательский API: фиксированный размер","f.customSizeHint":"Оставьте пустым, и именованный размер будет переведён автоматически (square_hd → 1024x1024). Указывайте размер только для API, требующих конкретных размеров.","f.defaultFormat":"Формат по умолчанию","f.defaultFormatHint":"Используется, если вызов инструмента не содержит output_format.","f.defaultSize":"Размер изображения по умолчанию","f.defaultSizeHint":"Используется, когда вызов инструмента пропускает параметр image_size.","f.deliverAs":"Как изображение попадает в чат","f.deliverAsHint":"ссылка — результат представляет собой текст со ссылкой, и карта отображает изображение из неё; работает с любой моделью чата. изображение — результат содержит само изображение, которое текстовые модели чата не могут прочитать, поэтому для этого требуется dsh-vision-bridge или модель с поддержкой зрения.","f.inherit":"Наследовать (по умолчанию)","f.model":"Модель (FAL)","f.modelHint":"Идентификатор модели FAL, вызывается как {baseURL}/{model}. Используется, когда провайдер — fal.","f.outputDir":"Выходной каталог","f.outputDirHint":"Относительно рабочего каталога сессии; абсолютный путь используется как есть.","f.pollIntervalMs":"Интервал опроса (мс)","f.pollIntervalMsHint":"Интервал опроса статуса во время выполнения задачи.","f.provider":"Провайдер","f.providerHint":"fal — очередь FAL, настроенная ниже. custom — любой API, совместимый с OpenAI, настраивается далее.","f.timeoutMs":"Таймаут (мс)","f.timeoutMsHint":"Общее время ожидания генерации: отправка + опрос + загрузка.","p.apiKeyEnv":"Пример: FAL_API_KEY","p.baseURL":"Пример: https://queue.fal.run","p.customBaseURL":"Пример: https://api.openai.com/v1","p.customKeyEnv":"Пример: OPENAI_API_KEY","p.customModel":"Пример: gpt-image-1","p.customSize":"Пример: 1024x1024","p.model":"Пример: fal-ai/flux-2/klein/9b","p.outputDir":"Пример: сгенерированные/изображения","p.pollIntervalMs":"Пример: 2000","p.timeoutMs":"Пример: 180000","settings.collapse":"Свернуть","settings.credentialHint":"API-ключи находятся в разделе Учетные данные в указанном наборе ссылок (Настройки → Учетные данные).","settings.description":"Инструмент generate_image. Провайдер: очередь FAL или любой API изображений, совместимый с OpenAI.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.navLabel":"Генерация изображений","settings.overridden":"Переопределить","settings.readOnly":"Это развертывание доступно только для чтения: настройки нельзя изменить через графический интерфейс.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить","settings.saving":"Сохранение…","settings.title":"Генерация изображений","settings.unavailable":"Обвязка еще не опубликовала настройки этого плагина. Если она только что перезапустилась, раздел появится сам через несколько секунд.","settings.unsaved":"Несохранённые изменения"},"dsh-kanban":{"archive.empty":"В архиве пусто.","archive.hint":"Карточки, отстоявшие свой срок в «Выполнено». Ничего не удалено: возвращённая карточка встаёт в ту же колонку, откуда ушла.","archive.restore":"Вернуть на доску","archive.since":"в архиве {ago}","batch.hint":"Одна сессия на все. Задачи приходят по очереди: агент берёт следующую, закончив текущую. В «В работе» уезжает только первая — остальные ждут своей очереди там, где лежат.","batch.start":"Запустить","batch.title":"Запустить {n} задач в одном чате","board.allRepos":"Все репозитории","board.archive":"Архив","board.back":"В чат","board.backHint":"Закрыть доску и вернуться в разговор","board.clearFilters":"Снять отборы","board.collapse":"Свернуть колонку","board.empty":"Задач пока нет.","board.expand":"Развернуть колонку","board.limit":"предел {n}","board.loading":"Доска загружается…","board.newTask":"Задача","board.noMatch":"Ничего не найдено.","board.noRepo":"без проекта","board.pickArchive":"В архив","board.pickMove":"Перенести…","board.pickNone":"Снять выбор","board.pickStart":"Запустить выбранные","board.pickUnqueue":"Снять с очереди","board.pickedCount":"выбрано {n}","board.refresh":"Обновить","board.repo":"репозиторий","board.search":"Поиск","board.shown":"показано {shown} из {total}","board.someFailed":"Сделано у {done} из {total}, остальные отказали.","board.sync":"Сверить с Gitea","board.syncing":"Сверяю…","board.waitCount":"Ждут ответа: {n}","board.waitCountHint":"Задачи, где агент задал вопрос или просит разрешения.","board.waiting":"нужен человек","boardName.main":"Проектная доска","boardName.simple":"Простая доска","card.move":"перенести","card.pack":"пачка {at} из {total}","card.packHint":"Запущены вместе, одной сессией; агент берёт их в этом порядке.","card.pick":"Отметить для группового запуска","card.queue":"в очередь...","card.stop":"остановить","card.toChat":"перейти в чат","card.unqueue":"снять с очереди","chip.moveTo":"Перенести в","chip.note":"Оставить заметку","chip.noteHint":"Заметка дописывается в тело задачи. Тело уходит агенту первым сообщением, поэтому заметка до запуска попадёт в работу, а после запуска — нет.","chip.noteSave":"Дописать","chip.openCard":"Перейти к карточке","column.backlog":"Бэклог","column.cleanup":"Уборка","column.deploy":"Выкатка","column.done":"Выполнено","column.in-progress":"В работе","column.review":"Ревью","dialog.archived":"архив","dialog.bodyHint":"Уйдёт агенту первым сообщением при запуске задачи.","dialog.cancel":"Отмена","dialog.create":"Создать","dialog.fromGitea":"Из Gitea","dialog.imported":"уже на доске","dialog.kind":"Какая это задача","dialog.kindPlain":"Не проект","dialog.kindPlainHint":"Заметка, не относящаяся ни к какому репозиторию. Живёт на простой доске и в Gitea не попадает.","dialog.kindProject":"Проект","dialog.kindProjectHint":"В Gitea заводится issue, карточка привязывается к нему и живёт на проектной доске.","dialog.labelsHint":"через запятую","dialog.loadingRepos":"Репозитории загружаются…","dialog.noIssues":"Открытых issue не найдено.","dialog.noRepos":"Репозиториев нет","dialog.own":"Своя задача","dialog.pickRepo":"Выберите репозиторий","dialog.repo":"Репозиторий","dialog.repoNamePlaceholder":"имя нового репозитория, латиницей","dialog.repoNew":"— новый репозиторий —","dialog.repoNewHint":"Будет создан в организации: приватный и пустой, без README и заготовок. Создание репозитория отсюда не отменить.","dialog.taskBody":"Описание","dialog.taskColumn":"Колонка","dialog.taskLabels":"Метки","dialog.taskTitle":"Заголовок","dialog.title":"Новая задача","discard":"Отменить","error.bad-repo-name":"В имени репозитория допустимы только латинские буквы, цифры, точка, дефис и подчёркивание.","error.crossSite":"Запрос отклонён как межсайтовый.","error.giteaAbsent":"Плагин Gitea не установлен, импорт недоступен.","error.giteaUnconfigured":"Сначала настройте Gitea в карточке плагина Gitea.","error.issue-not-created":"Issue не заведён. Если репозиторий был новым, он остался — ничего не удалено.","error.issueNotFound":"Issue не найден.","error.modelNotSelected":"Модель не выбрана — задайте её в настройках или укажите здесь.","error.no-live-sessions":"Нет ни одной идущей сессии, в очередь ставить некуда.","error.permission-refused":"Уровень доступа не принят, задача не запущена.","error.permission-unavailable":"В этой сборке уровней доступа нет — задача не запущена, чтобы не пойти с бо́льшими правами, чем просили.","error.repo-not-created":"Репозиторий не создан; больше ничего не сделано.","error.repo-required":"Выберите репозиторий или назовите новый.","error.session-not-live":"Эта сессия больше не идёт.","error.sessionNotOpened":"Сессия поднята ({id}), но эта сборка не умеет в неё переключиться. Найдите её в списке сессий.","error.startFailed":"Не удалось поднять сессию.","error.task-not-queued":"Задача не стоит в очереди.","error.taskHasNoIssue":"За этой задачей нет issue в Gitea.","error.taskNotFound":"Задача не найдена.","error.titleRequired":"Нужен заголовок.","error.unknown":"Запрос не выполнен.","facet.author":"Автор","facet.priority":"Приоритет","facet.release":"Выпуск","facet.repo":"Репозиторий","facet.risk":"Риск","facet.scope":"Область","facet.signal":"Сигнал","facet.status":"Статус","facet.type":"Тип","field.archiveAfterDays":"Убирать в архив из «Выполнено» через, дней","field.boardToolEnabled":"Разрешить агенту двигать карточки","field.columnNames":"Свои названия колонок","field.defaultProjectRoot":"Корень проектов","field.giteaOwner":"Организация Gitea","field.giteaTokenRef":"Имя учётной записи","field.giteaUrl":"Адрес инстанса","field.pushToGitea":"Закрывать issue в Gitea","field.replyInstruction":"Постоянная приписка","field.staleAfterMin":"Считать задачу молчащей после, минут","field.startPrompt":"Шаблон первого сообщения","field.syncIntervalSec":"Сверяться с Gitea раз в, секунд","field.watchRepos":"Сузить подхват до репозиториев","field.webhookSecretRef":"Имя учётной записи для вебхука","field.wipInProgress":"Предел «В работе»","field.wipReview":"Предел «Ревью»","group.general":"Общее","group.gitea":"Gitea","group.limits":"Пределы колонок","group.sync":"Автоперемещение","hint.archiveAfterDays":"Считается с попадания карточки в «Выполнено». Ноль — оставлять всё на доске.","hint.boardToolEnabled":"Выключено, пока скилл воркфлоу запрещает этому CLI трогать канбан.","hint.columnNames":"Пары «идентификатор=Название» через запятую, например «backlog=Идеи, review=Проверка». Пусто — обычные названия.","hint.defaultProjectRoot":"Где лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","hint.giteaOwner":"Чьи репозитории смотрит доска. Пусто — определится сама, пока у токена ровно одна организация.","hint.giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","hint.giteaUrl":"Например https://gitea.example.com. Пусто — импорт недоступен.","hint.label":"Пусто — метка для этой колонки не ставится.","hint.limit":"Ноль — без предела. Превышение подсвечивается, но не запрещается.","hint.pushToGitea":"Карточка, дошедшая до «Выполнено», закрывает свой issue. Меток доска не ставит: стадия и так видна по ветке и pull request.","hint.replyInstruction":"Дописывается к каждому первому сообщению — например язык ответа. Пусто — ничего не добавляется.","hint.staleAfterMin":"Помечаются только задачи с сессией. Ноль отключает отметку.","hint.startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","hint.syncIntervalSec":"Ноль отключает сверку. Меньше пятнадцати секунд поднимается до пятнадцати.","hint.watchRepos":"Через запятую, «владелец/репо» или просто «репо». Пусто — все репозитории организации, где есть открытые задачи.","hint.webhookSecretRef":"ИМЯ учётной записи DSH с секретом вебхука Gitea. Пусто — остаётся только опрос.","move.backlog":"Работа по задаче останавливается: идущий ход агента будет прерван. Если сессии нет, карточка просто переедет.","move.cleanup":"Агент удалит ветку в Gitea, worktree и локальную ветку и запишет это в issue.","move.confirm":"Перенести","move.deploy":"Агент вольёт pull request и выкатит. Сам перенос в эту колонку И ЕСТЬ ваше «ок» на deploy — второй раз агент спрашивать не станет.","move.done":"Задача считается завершённой. Это решение человека: сам агент карточку сюда не переносит.","move.in-progress":"Агент получит команду начать или продолжить реализацию.","move.review":"Агент доведёт работу до ревью: снимет с pull request пометку черновика и запросит проверку.","move.title":"Перенести в «{column}»?","order.manual":"Как разложено","order.new":"Сначала новые","order.old":"Сначала старые","panel.agentPreset":"Профиль агента","panel.archive":"В архив","panel.author":"завёл {who}","panel.bodyLoading":"читаю описание…","panel.close":"Закрыть","panel.continue":"Продолжить","panel.continueHint":"У задачи один чат: открывается прежняя сессия, а не новая.","panel.created":"заведена {ago} назад","panel.delete":"Удалить","panel.deleteConfirm":"Удалить «{title}»? Отменить будет нельзя.","panel.issue":"Issue","panel.log":"Переходы","panel.message":"Сообщение агенту","panel.messageHint":"Правьте перед отправкой. Пустое — уйдёт встроенный текст.","panel.model":"Модель","panel.noLog":"Переходов пока нет.","panel.noModels":"У этого провайдера нет моделей","panel.noProviders":"Провайдеров нет","panel.openChat":"Открыть чат","panel.permission":"Уровень доступа","panel.pickModel":"Выберите модель","panel.pickProvider":"Выберите провайдера","panel.pickProviderFirst":"Сначала выберите провайдера","panel.presetDefault":"Как в харнессе по умолчанию","panel.provider":"Провайдер","panel.refresh":"Обновить из Gitea","panel.start":"Начать","panel.startHint":"Откроется отдельная сессия агента по этой задаче. Ветку и worktree заводит агент после preflight, а не отсюда.","panel.starting":"Запускается…","panel.updated":"последнее изменение {ago} назад","plan.counter":"{done} из {total}","plan.title":"План агента","queue.add":"В очередь","queue.hint":"Задача встанет в очередь сессии: агент возьмёт её, закончив текущую работу. До этого карточка остаётся там, где лежит.","queue.option":"{title} - задач: {n}","queue.session":"Сессия","queue.title":"Поставить в очередь идущей сессии","save":"Сохранить","section.label":"Канбан","settings.loading":"Настройки загружаются…","settings.readOnly":"Настройки в этой сессии доступны только для чтения.","settings.saveFailed":"Не сохранены поля: {fields}","settings.saved":"Сохранено.","settings.unavailable":"Хост не знает пространство настроек dsh-kanban. Перезапустите веб-интерфейс после установки плагина.","state.queued":"в очереди · {n}","state.running":"в работе","state.stopped":"остановился","stop.idle":"Агент не работал, останавливать было нечего.","stop.no-session":"У задачи нет сессии.","subtitle":"Доска задач: issue из Gitea и отдельная сессия под задачу","sync.failed":"сверка не проходит","sync.lastSeen":"последняя удачная сверка {ago} назад","sync.never":"сверки с Gitea ещё не было","sync.neverSeen":"удачной сверки с запуска харнесса не было","sync.okAgo":"сверено {ago} назад","sync.running":"сверяемся с Gitea…","time.day":"{n} дн","time.hour":"{n} ч","time.min":"{n} мин","time.now":"только что","title":"Канбан"},"dsh-market":{"actWhy":"Почему не активен?","agentBusyInstall":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед установкой. Установка изменяет файлы плагина, поэтому работающий агент может завершиться с ошибкой в процессе.","agentBusyUpdate":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед обновлением. Обновления заменяют файлы плагина на месте, поэтому работающий агент может завершиться с ошибкой или смешать версии в процессе выполнения.","aiFix":"Починить с агентом","aiFixConservative":"Действуй осторожно: чини только явные ошибки из списка выше (падения при запуске, дубли записей, подтверждённые расхождения зависимостей). Предупреждения и записи к сведению (например, неподтверждённые диапазоны peer-зависимостей) трогай, только если они связаны с явной ошибкой. Не делай лишних обновлений и перестановок; объясняй каждое изменение и жди подтверждения.","aiFixCopied":"Промпт скопирован — вставьте его в новый диалог и отправьте, когда будете готовы","aiFixDetect":"Шаг 1 — сначала определитесь. Прежде чем что-либо трогать, убедитесь, что процесс, в котором вы работаете, ЭТОТ экземпляр DeepSeek Harness, к которому относится данный профиль (то есть текущая диагностируемая композиция — это та, в которой вы сейчас находитесь). Проверьте, указывает ли текущий каталог / $DSH_HOME / командная строка на этот профиль или работает ли процесс внутри deepseek-harness. Если не можете определить, считайте, что ответ «да» (безопасный выбор).","aiFixFail":"Буфер обмена недоступен — скопируйте диагностику ниже вручную","aiFixHint":"Передать диагностику новой сессии агента (скопировано в буфер; отправлять или нет — решаете вы)","aiFixIfSelf":"Если ДА — вы являетесь этим инструментом: никогда не изменяйте текущую конфигурацию, инструмент или основные пакеты на месте (не редактируйте cordis.patch.yml, не меняйте порядок/включайте/отключайте пакеты, не устанавливайте/удаляйте/обновляйте плагины, не переустанавливайте зависимости, не обновляйте/перезапускайте dsh). Три шага: 1) только анализ в режиме чтения, ничего не изменяйте; 2) создайте apply.sh/.bat (изменения для этого исправления) и rollback.sh/.bat (полностью отменяет его); оба идемпотентны — apply создает снимки только если их еще нет и никогда не перезаписывает существующий снимок (если он существует, значит apply уже выполнялся, так что откатитесь или подтвердите перед повторным запуском), а rollback восстанавливает из этого снимка, так что частично выполненный apply все еще можно откатить, а повторный rollback безопасен; 3) дайте мне запустить apply во внешнем терминале и вставьте stdout/stderr обратно вам. Укажите причину и ждите моего подтверждения на каждом шаге — никогда не запускайте это самостоятельно.","aiFixIntro":"Помоги починить проблемы с плагинами DeepSeek Harness (профиль: {0}). Диагностика показала:","aiFixScope":"Можно менять порядок в dsh.profile.bundles, включать и выключать плагины, править cordis.patch.yml. Учти: официальные бандлы трогать нельзя; прежде чем что-то менять, изложи план.","all":"Все","alreadyInstalled":"✓ Установлен","approveBuilds":"Разрешить сборочные скрипты и повторить","autoBackup":"Резервная копия раз в сутки (при открытии маркета)","backTop":"Наверх","backupDone":"Копия загружена","backupDownload":"Выгрузить копию","backupHint":"Включает список плагинов и настройки профиля, но не node_modules. Восстановление ставит плагины заново по списку.","backupImport":"Импортировать и посмотреть","backupLocal":"Локальный файл","backupWorking":"Выполняется…","brokenBundleBanner":"Эти плагины теперь имеют клиентский пакет, который не будет обрабатываться; страница может отображаться пустой после обновления — рекомендуется выполнить откат:","buildsSkipped":"Этому плагину нужны сборочные скрипты; по умолчанию они заблокированы ради безопасности. Разрешите их и переустановите:","busyWait":"Уже выполняется другая операция — дождитесь её окончания (установка, обновление и удаление идут по одной)","cancel":"Отмена","cancelOp":"Отменить","cancelled":"Отменено","cancelling":"Отмена…","catConflict":"Конфликты","catDeps":"Зависимости","catInfo":"Информация","catOrder":"Порядок","catRisk":"Риск","catWarn":"Предупреждение","catsLess":"Свернуть","catsMore":"Ещё","checkBundles":"Порядок загрузки плагинов","checkBundlesEmpty":"Слои плагинов не объявлены","checkCommunity":"сообщество","checkDir":"каталог","checkDuplicates":"Повторяющиеся записи плагинов","checkDuplicatesEmpty":"Повторов нет","checkEntries":"записей (идентификаторы загрузчика)","checkErrors":"Ошибки","checkErrorsEmpty":"Ошибок нет","checkHoisted":"поднят","checkIssues":"Найдены проблемы","checkLoadFail":"Не удалось загрузить диагностику: ","checkLoading":"Анализ профиля…","checkMultiEmpty":"Пакетов ядра в нескольких версиях нет","checkMultiVersion":"Пакеты ядра в нескольких версиях","checkOfficial":"официальный","checkOrderTip":"порядок загрузки бандла сообщества конфликтует с объявленными правилами before/after","checkOrphans":"Неверные записи конфига","checkOrphansEmpty":"Неверных записей нет","checkOverridden":"переопределяет","checkOverrides":"Переопределения","checkOverridesEmpty":"Переопределений нет","checkPatch":"файл патча","checkPeerEmpty":"Расхождений версий зависимостей нет","checkPeerInfo":"{0} записей к сведению (не подтверждено)","checkPeerInfoTier":"Информация о зависимостях","checkPeerInfoTierEmpty":"Нет записей информационных зависимостей","checkPeerMismatches":"Расхождения версий зависимостей","checkPeerOverview":"расхождений: {0} · к сведению: {1}","checkPeerRisk":"Риски зависимостей","checkPeerRiskEmpty":"Нет несоответствий уровней риска зависимостей","checkPeerSatisfied":"Удовлетворены зависимости","checkPeerSatisfiedEmpty":"Нет удовлетворяющих записей зависимостей","checkPeerWarning":"Предупреждения о зависимостях","checkPeerWarningEmpty":"Нет несоответствий зависимостей на уровне предупреждений","checkProfile":"профиль","checkRange":"объявленный диапазон","checkRefresh":"Проверить заново","checkResolved":"разрешённая версия","checkSatisfied":"удовлетворено","checkSource":"источник","checkUnknown":"неизвестно","checkUnsatisfied":"не удовлетворено","checkWarnings":"Предупреждения","checkWarningsEmpty":"Предупреждений нет","cmdDetails":"Команда установки","comments":"Комментарии","commentsError":"Не удалось загрузить комментарии. Проверьте подключение и попробуйте снова.","commentsLoading":"Загрузка комментариев…","commentsNote":"Комментарии поступают из GitHub Discussions. Открытие этого подключается к giscus.app и GitHub; для публикации требуется аккаунт GitHub.","commentsOnGitHub":"Прочитайте обсуждение на GitHub","commentsRetry":"Попробуйте снова","commentsTitle":"Комментарии","compatRiskBanner":"Обнаружен риск несовместимости — откройте Диагностику перед перезапуском или откатите эту операцию.","confirm":"Подтвердить","confirmInstall":"Подтвердить установку","confirmRemove":"Подтверждаете?","confirmTitle":"Установка","confirmWarn":"Плагины — сторонний код сообщества. Устанавливая, вы доверяете этому источнику; сборочные скрипты по умолчанию заблокированы.","conflictBody":"Конфликт с установленным плагином — остаться может только один:","conflictDeclined":"Вы сохранили установленные плагины; этот не был установлен","conflictDetails":"Детали","conflictKeep":"Оставить то, что у меня есть","conflictKeepNote":"Оставить этот","conflictOutcomeInstall":"установить","conflictOutcomeKeep":"оставить","conflictOutcomeRemove":"удалить","conflictOutcomeSkip":"пропустить","conflictReplaceFailed":"Замена не завершена. Перечисленные ниже плагины были удалены и не восстановлены — проверьте их:","conflictReplacing":"Замена…","conflictReverted":"Отменено автоматически; ничего не было изменено","conflictSwap":"Переключиться на этот","conflictSwapNote":"Настройки удалённых плагинов сохраняются, чтобы вы могли установить их позже","conflictTitle":"Невозможно установить: конфликт с установленным плагином","conflictWhy":"cordis отклоняет дерево плагинов, содержащее дублирующиеся идентификаторы записей; сохранение этого плагина предотвратит запуск DeepSeek Harness.","credsWarning":"Внимание: в копию попадают настройки профиля и файлы, где могут лежать секреты (config.toml, .env и подобные). Локальная выгрузка ничего не вырезает, поэтому выгружайте на WebDAV, которому доверяете.","deprecatedBadge":"Устарел","deprecatedWarn":"Каталог помечает этот плагин как устаревший; новым пользователям ставить его не советуют.","descCollapse":"Показать меньше","descExpand":"Показать больше","diagExplain":"Что это","diagExplainText":"Эта страница ищет плагины, конфликтующие друг с другом, несовпадения версий зависимостей и неверный порядок загрузки. Термины:","diagOkAll":"Всё в порядке: конфликтов, проблем с зависимостями и порядком не найдено","diagTermBundle":"бандл — один пакет плагина, применяется по порядку","diagTermEntry":"запись — то, что плагин добавляет в работающую композицию","diagTermOrder":"порядок загрузки — очерёдность активации; более поздний может перекрыть более ранний","diagTermOrphan":"неверная запись — конфиг ссылается на то, чего нет","diagTermPeer":"peer-зависимость — пакет, который плагин ждёт от хоста","diagTermShadow":"перекрытие — старая копия из плагина закрывает более новую хостовую","disable":"Выключить","disabledState":"Выключен","dismiss":"Скрыть","dismissNotice":"Скрыть это уведомление","duplicateNames":"Плагины с одинаковыми именами (к сведению, это не конфликт)","empty":"Подходящих плагинов нет","enable":"Включить","envFix":"Настроить автоматически","envFixFail":"Автоматическая настройка не удалась — выгрузите журнал и пришлите нам файл","envFixing":"Настройка…","envMissing":"Перед установкой плагинов нужен один небольшой компонент","exportLog":"Выгрузить журнал","exportLogFail":"Не удалось выгрузить журнал","exportedLog":"Журнал выгружен: dsh-market-log.txt — приложите его к обращению","exportingLog":"Выгрузка…","filter":"Фильтр","filterDir":"Порядок","filterSort":"Поле сортировки","filterTime":"Вышло за","firstPage":"В начало","gist":"GitHub Gist","gistCreated":"Выгружено:","gistErrAuth":"GitHub не авторизовал: токен неверный или истёк, либо gh CLI не залогинен","gistErrInvalid":"Содержимое Gist повреждено или формат копии не поддерживается","gistErrNetwork":"GitHub недоступен — проверьте сеть или прокси","gistErrNoId":"Для обновления нужен идентификатор Gist — заполните поле или переключитесь на «Создать»","gistErrNotFound":"Gist не найден — проверьте идентификатор или ссылку","gistErrRateLimit":"Достигнут лимит GitHub, либо у токена нет права gist","gistErrTimeout":"GitHub не ответил вовремя — проверьте сеть и повторите","gistExport":"Выгрузить в Gist…","gistExportDone":"Выгружено в Gist","gistExportGo":"Выгрузить","gistExportHint":"Отмечено всё — полная копия вместе с настройками; если снять любую галочку, выгрузятся только выбранные плагины, а настройки — по отдельному флажку.","gistExportSelect":"Выберите плагины для выгрузки","gistId":"Идентификатор или ссылка на Gist (при выгрузке оставьте пустым, чтобы создать новый приватный)","gistImport":"Загрузить из Gist","gistIncludeConfig":"Включить файлы настроек (в них могут быть секреты)","gistModeCreate":"Создать новый приватный Gist","gistModeUpdate":"Обновить Gist из поля","gistNoPlugins":"В этом профиле нечего выгружать","gistNote":"В отличие от локальной выгрузки (архив на этой машине), Gist нужен для переноса между машинами: выгрузите в приватный Gist и загрузите на другом компьютере под тем же аккаунтом. Токен живёт только в памяти этой вкладки и никогда не пишется в браузерное хранилище; если залогинен gh CLI или задан DSH_GITHUB_TOKEN, вводить его не нужно. Gist приватный, до 1 МБ на файл.","gistSelectAll":"Выбрать все","gistSelectNone":"Снять выбор","gistSpecLocal":"локально","gistSrcEnv":"переменная DSH_GITHUB_TOKEN","gistSrcGh":"gh CLI","gistSrcToken":"введён вручную","gistToken":"Токен GitHub (только в памяти вкладки — после обновления страницы введите заново; оставьте пустым, чтобы использовать серверный DSH_GITHUB_TOKEN или залогиненный gh CLI)","gistVerify":"Проверить связь","gistVerifySource":"Проверено — источник токена: {0}","goDiagnose":"Открыть диагностику","gotIt":"Понятно","groupAdd":"Добавить плагин","groupAddEmpty":"Все установленные плагины уже в этой группе","groupAddTheme":"Добавить тему","groupAssign":"Назначить","groupConfirmDelete":"Удалить группу?","groupCreate":"Создать","groupDelete":"Удалить группу","groupEmpty":"Пока пусто","groupMixed":"Включена частично","groupNamePh":"Название группы","groupNew":"Новая группа","groupRemove":"Убрать","groupRename":"Переименовать","hostDependencyMore":"ещё находок пропущено: {0}","hostDependencyWarning":"Плагин перечисляет в зависимостях известные общие пакеты хоста DSH. Это может перекрыть хостовую версию; проверка смотрит только манифест и не подтверждает, что в рантайме появился дубль:","hotBanner":"плагины готовы — обновите страницу, чтобы ими пользоваться","install":"Установить","installFail":"Установить не удалось","installReplacement":"Установить замену","installedBadge":"✓ Установлен","installedEmpty":"Плагинов сообщества пока нет — загляните во вкладку «Обзор»","installing":"Установка…","lastPage":"В конец","lightboxClose":"Закрыть предпросмотр","lightboxNext":"Следующий","lightboxPrev":"Предыдущий","linkedDev":"подключён как разработка","loadFail":"Не удалось загрузить каталог плагинов, попробуйте позже","loadRetry":"Повторить","loading":"Загрузка каталога…","localOnly":"Адрес WebDAV и учётные данные остаются только в этом браузере.","marketNoToggle":"Сам маркет выключить нельзя","marketUpdate":"Доступно обновление маркета — обновить","nav":"Маркет плагинов","nextPage":"Дальше","noGroups":"Групп пока нет — создайте","notInstalled":"Не установлен","noteAdd":"Заметка","noteEdit":"Редактировать заметку","noteMine":"Моя заметка","notePlaceholder":"Опишите это своими словами. Это заменит описание автора.","noteSave":"Сохранить","noteSeeMine":"Вернуться к моей заметке","noteSeeTheirs":"Показать описание автора","noteTheirs":"Оригинал","notesCommits":"Коммиты","notesCommitsRecent":"Последние коммиты (могут не совпадать с установленной версией — только для справки)","notesLink":"Что изменилось","notesLoadFail":"Обновления сейчас недоступны — попробуйте позже.","notesNone":"Этот плагин не публикует заметки об обновлениях.","notesNpm":"Время публикации версии","notesRelease":"Заметки о выпуске","opBlockedCard":"Невозможно установить · подробности","opClear":"Очистить выполненные","opClose":"Свернуть","opDequeue":"Удалить из очереди","opDone":"Готово","opDoneRefresh":"Установлено · обновите страницу для применения","opEmpty":"Нет операций в процессе выполнения","opEmptyHint":"Здесь отображается прогресс установки, обновления и удаления","opInstalling":"Установка","opKind_install":"Установить","opKind_uninstall":"Удалить","opKind_update":"Обновить","opLeaveHint":"Вы можете покинуть эту страницу; вы получите уведомление, когда процесс завершится","opNeedsChoice":"Не удалось установить · откат выполнен автоматически, ничего не изменилось","opNeedsYou":"нужен вам","opQueued":"В очереди","opQueuedAhead":"впереди:","opRetry":"Повторить","opRunning":"Работает","opTitle":"Задачи","orderAlreadyOptimal":"Текущий порядок уже удовлетворяет всем правилам и зависимостям — переставлять нечего","orderApplied":"✓ Применено — перезапустите, чтобы вступило в силу","orderApply":"Применить порядок","orderAutoSort":"Отсортировать автоматически","orderConflicts":"конфликты before/after в текущем порядке","orderDiffHint":"Этот порядок изменит композицию: переопределений {0}, потерянных записей {1}, дублей {2}","orderDown":"↓","orderDrag":"Перетащите, чтобы изменить порядок","orderDragHint":"Тяните ⠿, чтобы переставить; «Применить порядок» сохранит","orderReset":"Сбросить черновик","orderSection":"Порядок загрузки","orderSuggestApply":"Применить предложенный порядок","orderSuggestHint":"Предложенный порядок (отсортирован по правилам before/after):","orderTrialFail":"Статическая проверка композиции не прошла: {0}","orderUp":"↑","orphanBundle":"⚠️ Следующий запуск завершится ошибкой: профиль объявляет эти пакеты, но они не установлены. Переустановите их или удалите из dsh.profile.bundles в файле package.json профиля:","orphanIdRequired":"нет идентификатора","orphanInsertNotArray":"неверный формат","orphanInsertTargetMissing":"цель не найдена","orphanInsertTargetNotGroup":"цель не является группой","orphanNameMismatch":"имя не совпадает","orphanPatchTargetMissing":"цель не найдена","orphanReasonOther":"другое","packagesDone":"обработано пакетов: {0}","pageInfo":"Страница {0} из {1}","partialNote":"Отменено — часть изменений уже применена","patchDisabled":"Выключен патчем","patchForced":"Включён патчем","peerInfoUnverified":"непроверенный","peerRiskAboveMax":"выше явного максимума","peerRiskBelowMin":"ниже заявленного минимума","peerWarnAboveMax":"выше объявленной верхней границы","peerWarnOptional":"необязательный участник","perPage":"На странице","phaseBuilding":"Сборочные скрипты","phaseDownloading":"Загрузка","phaseLinking":"Связывание","phaseResolving":"Разрешение зависимостей","presetApplied":"Применено — перезапустите, чтобы применить","presetApply":"Применить","presetBundleCount":"{0} наборов","presetDelete":"Удалить","presetDeleted":"Пресет удалён","presetDisable":"отключить плагины {0}","presetEmpty":"Нет сохранённых пресетов","presetEnable":"включить плагины {0}","presetFail":"Не удалось выполнить предустановленную операцию:","presetHint":"Сохраните текущий порядок пакетов и список отключенных как пресет и переключайтесь в любое время; применение запускает проверку перед началом пробного периода и сначала создает снимок.","presetListFail":"Не удалось загрузить пресеты:","presetName":"Название пресета","presetNameEmpty":"Введите имя предустановки","presetNoop":"нет изменений","presetPreview":"Предпросмотр","presetPreviewFail":"Не удалось выполнить предварительный просмотр:","presetPreviewTitle":"Применение этого пресета приведёт к:","presetReorder":"переупорядочить {0} наборы","presetSave":"Сохранить текущее состояние","presetSaved":"Пресет сохранён","presetSaving":"Сохранение…","presetSection":"Пресеты плагинов","prevPage":"Назад","progressHint":"Первая установка скачивает и разрешает зависимости — крупные плагины занимают 1–3 минуты","published":"выпущен","readme":"README","reconciledNote":"Удалено, но pnpm сообщил об ошибке при завершении (обычно это заблокированный файл). Профиль уже согласован — повторная попытка не требуется.","refresh":"Обновить","refreshBanner":"изменения применены — обновите страницу, чтобы их увидеть","replacementHint":"Каталог предлагает","repoLink":"Посмотреть репозиторий на GitHub","restartBanner":"изменения внесены — перезапустите DeepSeek Harness","restartFail":"Перезапустить не удалось","restartHint":"Как перезапустить: остановите текущий процесс dsh и запустите его снова (например, dsh web)","restartHintSupervised":"Этот процесс является собственным сервисным процессом {0}, поэтому перезапуски относятся к нему — перезапуск отсюда завершит процесс передачи вместе с cgroup, и сервис не восстановится. Используйте systemctl restart <ваш юнит>. Если ваш юнит может пережить самостоятельный перезапуск (KillMode=process), включите параметр \"Разрешить перезапуск\" в настройках этого плагина.","restartNow":"Перезапустить","restartTimeout":"Не дождались запуска DeepSeek Harness","restarting":"Перезапуск…","restore":"Восстановить","restoreBootError":"Не удается загрузиться после восстановления:","restoreConfirm":"Восстановление перезапишет настройки этого профиля и переустановит плагины. Продолжить?","restoreContinue":"Продолжить обновление","restoreDone":"Восстановление завершено — перезапустите DeepSeek Harness","restoreFail":"Не удалось восстановить","restoreHint":"Это удалит локальную версию, переустановит версию из каталога и сохранит проверку обновлений. Это действие нельзя отменить — подтвердите ещё раз.","restoreMissing":"Плагинов из копии не установлено: {0}","restoreNoCatalog":"Этот плагин отсутствует в курируемом каталоге, поэтому его нельзя восстановить. Удалите локальную копию или продолжайте разрабатывать её локально.","restorePartial":"Восстановление продолжилось, но эти плагины установить не удалось:","restorePreviewDone":"Копия загружена. Проверьте вкладку «Установленные» и запускайте восстановление.","restoreStart":"Начать восстановление","restoreUnportable":"указывает на абсолютный путь с другой машины, который здесь не существует — перенаправьте его локально или переустановите плагин","rollbackNow":"Откатить","rollingBack":"Откат изменений…","searchPh":"Поиск плагинов: уведомления, терминал, память…","setCardDesc":"Версия маркета, обновление и удаление.","setChannel":"Канал обновлений","setChannelBeta":"Бета","setChannelBetaHint":"Ранний доступ к непроверенным версиям. Влияет только на рынок плагинов.","setChannelDev":"Разработка","setChannelDevHint":"Непроверенные сборки из ветки разработки. Не рекомендуются для общего использования.","setChannelStable":"Стабильный","setChannelStableHint":"Только выпущенные версии.","setChannelSwitch":"Переключиться на","setChannelSwitchHint":"Эта версия ниже установленной.","setRegion":"Скачать регион","setRegionAuto":"Выбрано на основе проверки сети. Можете изменить в любое время.","setRegionChina":"Китай, материковая часть","setRegionChinaHint":"Быстрее в материковом Китае. Изменяет маршрут загрузки, не источник.","setRegionGlobal":"Глобальный","setRegionGlobalHint":"Загрузки напрямую из npm и GitHub.","setSelfCancel":"Отмена","setSelfConfirm":"Удалить маркет плагинов? Поставить его заново можно будет только из командной строки.","setSelfFailed":"Операция не удалась","setSelfPurge":"Заодно стереть данные маркета","setSelfPurgeOff":"Данные маркета сохранятся. Учтите: плагины, которые он выключил, останутся выключенными, а интерфейса, чтобы вернуть их, после удаления не будет.","setSelfPurgeOn":"Будут удалены: список выключенных плагинов, свои группы и строки выключения, которые маркет записал в патч профиля, — выключенные им плагины снова заработают. Паролей и токенов это не касается: маркет их на диск не пишет.","setSelfRemove":"Удалить маркет плагинов","setSelfRemoveConfirm":"Удалить","setSelfRemoveHint":"Удаляет маркет из этого профиля. Остальные плагины не трогаются.","setSelfRemoved":"Удалён","setSelfRemovedHint":"Перезапустите DeepSeek Harness, чтобы завершить.","setSelfRestartAfter":"Перезапустить DeepSeek Harness сразу после удаления","setSelfRestartingHint":"Перезапуск DeepSeek Harness…","setSelfUpToDate":"Обновлений нет","setSelfUpToDateHint":"Актуально, обновление не требуется","setSelfUpdate":"Обновить","setSelfUpdateHint":"Обновление скачает новую версию; она заработает после перезапуска.","setSelfUpdateReady":"Доступна новая версия:","setSelfUpdatedHint":"Скачано. Перезапустите DeepSeek Harness, чтобы обновление вступило в силу: страница обновляется сразу, серверная половина — нет.","setSelfWorking":"Удаление…","shadowNameBanner":"Эта операция оставила одно имя плагина, определенное в двух слоях; после перезапуска загрузится только один:","snapCreate":"Создать снимок","snapCreateFail":"Не удалось создать снимок:","snapCreated":"Снимок создан","snapCreating":"Создание…","snapDelete":"Удалить","snapDeleteConfirm":"Подтвердить удаление","snapDeleteConfirmText":"Этот снимок нельзя будет восстановить после удаления.","snapDeleteFail":"Не удалось удалить снимок:","snapDeleted":"Снимок удалён","snapDeleting":"Удаление…","snapEmpty":"Снимков пока нет","snapFiles":"файлы","snapHint":"Снимки создаются автоматически перед применением изменений; вы также можете создать их вручную и откатиться в любой момент.","snapListFail":"Не удалось загрузить снимки:","snapRestore":"Восстановить","snapRestoreConfirm":"Подтвердите восстановление","snapRestoreConfirmText":"Восстановление перезаписывает текущий package.json профиля и конфигурацию из снимка; это действие нельзя отменить (создайте новый снимок, если не уверены).","snapRestoreFail":"Не удалось восстановить:","snapRestored":"Восстановлено — перезапустите для применения","snapRestoring":"Восстановление…","snapSection":"Снимки & Откат","sortAdded":"Дата выпуска","sortAsc":"По возрастанию","sortDesc":"По убыванию","sortDownloads":"npm загрузки (30д)","sortNewest":"Сначала новые","sortOldest":"Сначала старые","sortStars":"Звёзды","stateBroken":"Установлен, но не прошёл проверку","stateDisabled":"Выключен","stateInert":"Установлен, но не является плагином слоя профиля","stateLive":"Работает (загружен на лету)","stateRestart":"Установлен — перезапустите, чтобы применить","submitPlugin":"Хотите, чтобы ваш плагин был добавлен в список?","subtitle":"Плагины сообщества для DeepSeek Harness","switchOnLabel":"Включено","tabAdvanced":"Дополнительно","tabBackup":"Копия и восстановление","tabDiagnostics":"Диагностика","tabDiscover":"Обзор","tabGroups":"Группы","tabInstalled":"Установленные","tabList":"Список","tabThemes":"Темы","terminalWarn":"Похоже, это плагин для терминала: в веб-профиле он может ничего не делать или даже сломать запуск DeepSeek Harness. Прочитайте его README и ставьте в тот профиль, для которого он написан.","themeActive":"Активна","themeApply":"Применить","themeDeactivate":"Отключить","themeEmpty":"Других тем в каталоге пока нет — следите за обновлениями","themeExitFullscreen":"Выйти из полноэкранного режима","themeFullscreen":"Просмотр в полноэкранном режиме","themePreview":"Предпросмотр","themePreviewCount":"{0} предпросмотры","themePreviewLoading":"Поиск предварительного просмотра…","themePreviewMissing":"Предпросмотр недоступен","themeResultCount":"{0} темы","timeAll":"Всё время","timeDay":"Сутки","timeMonth":"30 дней","timeQuarter":"90 дней","timeWeek":"7 дней","timeYear":"Год","toastReady":"установлен и работает","toastTheme":"теперь активна. Переключить можно в «Настройки → Маркет плагинов → Темы»","toastToggledOff":"теперь выключено — перестало работать сразу","toastToggledOn":"включён","toggleFail":"Переключить не удалось","ungrouped":"Без группы","uninstall":"Удалить","uninstallConfirmDesc":"Плагин будет удалён из текущего профиля.","uninstalling":"Удаление…","upToDate":"Обновлений нет","update":"Обновить","updateAll":"Обновить все","updateFail":"Обновить не удалось","updateNow":"Обновить сейчас","updated":"✓ Обновлён — перезапустите, чтобы применить","updatedLive":"✓ Обновлён — работает","updating":"Обновление…","versionHint":"Версия маркета плагинов — указывайте её при обращении","viewReplacement":"Посмотреть замену","viewSource":"Исходник","webdav":"WebDAV","webdavNote":"Адрес WebDAV и имя пользователя остаются только в этом браузере; пароль хранится на сервере и вводится заново каждую сессию.","webdavPassword":"Пароль (необязательно)","webdavPreset":"Готовая настройка провайдера","webdavRestore":"Восстановить с WebDAV","webdavUpload":"Выгрузить копию","webdavUrl":"Адрес файла копии","webdavUser":"Имя пользователя (необязательно)"},"dsh-skill-hub":{"badge.source.bundled":"встроенный","badge.source.custom":"свой каталог","badge.source.project-agents":"проект .agents","badge.source.project-dsh":"проект .dsh","badge.source.runtime":"runtime","badge.source.user-agents":"пользователь .agents","badge.source.user-dsh":"пользователь .dsh","delete.confirm":"В корзину","delete.confirmText":"Переместить «{name}» в корзину? Его можно восстановить в любой момент.","delete.confirmTitle":"В корзину?","detail.addedAt":"Добавлен","detail.back":"К списку","detail.groups":"Группы","detail.loading":"Загрузка текста навыка…","detail.path":"Путь","detail.provider":"Провайдер","detail.updatedAt":"Обновлён","detail.uses":"Вызовы","detail.whenToUse":"Когда применять","entry.label":"Навыки","entry.tooltip":"Центр навыков: просмотр, группировка и синхронизация локальных навыков","err.dismiss":"Понятно","filter.allSources":"Все источники","filter.private":"Личные","form.busy":"Создание…","form.cancel":"Отмена","form.capabilityHint":"Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.","form.desc":"Описание (одно предложение для маршрутизации)","form.descPlaceholder":"Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык","form.error":"Ошибка создания: ","form.name":"Имя навыка (kebab-case, например code-review)","form.root":"Целевой каталог","form.submit":"Создать","form.success":"Создано: ","group.bundled":"Встроенные","group.custom":"Пользовательские каталоги","group.other":"Другие источники","group.project-agents":"Проектные .agents/skills","group.project-dsh":"Проектные .dsh/skills","group.runtime":"Runtime","group.user-agents":"Пользовательские ~/.agents/skills","group.user-dsh":"Пользовательские ~/.dsh/skills","groups.closeAll":"Закрыть все","groups.conflictText":"Эти навыки включены и в других группах; их закрытие затронет и те группы:","groups.conflictTitle":"Закрыть эту группу?","groups.delete":"Удалить сценарий","groups.edit":"Изменить","groups.empty":"Сценариев ещё нет. Создайте один и начните раскладывать навыки.","groups.keepOn":"Оставить включёнными","groups.membersHint":"Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).","groups.merge":"Объединить","groups.namePlaceholder":"Название сценария","groups.new":"Новый сценарий","groups.noCollections":"Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.","groups.noWritable":"В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)","groups.personal":"Личные","groups.project":"Проектные","groups.rename":"Сохранить название","groups.saveMembers":"Сохранить состав","groups.subdivide":"Разделить","legend.hint":"У навыка не более одной точки; нет точки = не вызывается.","legend.model":"Вызывается моделью — агенты могут вызывать автоматически","legend.user":"Вызывается пользователем — только явный вызов","market.add":"Добавить","market.addPlaceholder":"owner/repo или https://github.com/…","market.addSource":"Добавить источник","market.branchConfirm":"Подтвердить","market.branchHint":"У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):","market.branchTitle":"Выберите ветку","market.catalog.anthropics":"Официальная коллекция навыков Anthropic (Claude Skills)","market.catalog.mattpocock":"Коллекция навыков Matt Pocock","market.catalog.openDesign":"Коллекция навыков дизайна (design-templates)","market.catalog.superpowers":"Коллекция навыков сообщества Superpowers","market.catalogHint":"Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.","market.check":"Проверить","market.checkAll":"Проверить все","market.checkUpdate":"Проверить обновления","market.checking":"Проверка…","market.deleteSource":"Удалить источник","market.deletedUpstream":"Удалено в источнике: {count}","market.installed":"Установлено: {count}","market.newRelease":"Новая версия v{version}","market.noSources":"Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.","market.removeHint":"Удаление источника не затрагивает установленные навыки.","market.scan":"Сканировать","market.scanning":"Сканирование…","market.sync":"Синхронизировать","market.syncCancel":"Пропустить","market.syncNone":"Из этого репозитория пока не импортировано ни одного навыка.","market.syncText":"Источник выровнен с {ref}. Обновить эти локальные навыки?","market.syncTitle":"Обновить локальные навыки","market.syncing":"Синхронизация…","market.title":"Маркет","market.upToDate":"Актуально","market.updatable":"Обновляемо: {count}","market.update":"Обновить","market.updateAll":"Обновить всё","market.updateAllConfirmText":"Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:","market.updateAllConfirmTitle":"Обновить все навыки?","market.updateAllDone":"Обновлено источников: {count}","market.updateAllItem":"{repo} (навыков: {count})","market.updateCount":"Обновить {count}","market.updated":"Есть обновления","panel.count":"Всего навыков: {count}","panel.diagnostics":"Диагностика обнаружения","panel.disabled":"Отключено","panel.disabledCount":"Отключено: {count}","panel.empty":"Нет подходящих навыков.","panel.emptyAll":"Навыков пока нет. Создайте первый.","panel.enabled":"Включено","panel.incomplete":"(каталог может быть неполным)","panel.loading":"Загрузка…","panel.new":"Новый навык","panel.search":"Поиск навыков…","panel.title":"Центр навыков","panel.workspaceClear":"Очистить рабочую область","panel.workspaceHint":"Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.","panel.workspacePlaceholder":"Путь рабочей области (Enter — применить)","repo.cancel":"Отмена","repo.cancelled":"Отменено · {imported}/{total} сохранено, временные файлы удалены","repo.clearAll":"Очистить","repo.empty":"Импортируемых навыков не найдено.","repo.existing":"Существующие","repo.failed":"Не удалось: {count}","repo.files":"Файлов: {count} · {size}","repo.import":"Импортировать выбранные ({count})","repo.imported":"Импортировано: {count}","repo.importing":"Импорт…","repo.importingCurrent":"Импорт: {name} ({done}/{total})","repo.ready":"Найдено импортируемых навыков: {count}","repo.root.designTemplates":"Шаблоны design-templates","repo.root.generic":"{root}","repo.root.skills":"Навыки (skills)","repo.selectAll":"Выбрать все","repo.skippedExisting":"Пропущено существующих: {count}","row.delete":"В корзину","row.disable":"Отключить","row.enable":"Включить","row.open":"Подробнее о навыке {name} (Enter)","row.readonly":"только чтение","settings.announceToAgent":"Объявлять агенту","settings.announceToAgentHint":"Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.","settings.collapse":"Скрыть настройки","settings.description":"Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.","settings.discard":"Отменить","settings.dotModelColor":"Цвет точки «вызывается моделью»","settings.dotModelColorHint":"Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).","settings.dotUserColor":"Цвет точки «вызывается пользователем»","settings.dotUserColorHint":"Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).","settings.enabled":"Включить плагин","settings.enabledHint":"Отключает маршруты, элементы и объявление центра навыков.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.notExposed":"Это развёртывание не предоставляет пространство настроек.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.readOnly":"Настройки этого развёртывания доступны только для чтения.","settings.reset":"Сбросить к значению по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Развёртывание не приняло эти значения; они оставлены для исправления.","settings.saving":"Сохранение…","settings.showGroupSummary":"Показывать сводку по группам","settings.showGroupSummaryHint":"После заголовков групп показывать число вызовов и время последнего вызова.","settings.showUseCount":"Показывать число вызовов","settings.showUseCountHint":"Показывать янтарный счётчик вызовов рядом с именем навыка.","settings.showUseTime":"Показывать время последнего вызова","settings.showUseTimeHint":"Показывать относительное время в строке имени (например «3 дн назад»).","settings.statsScanMinutes":"Интервал автостатистики (минут)","settings.statsScanMinutesHint":"Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.","settings.statsWindowDays":"Окно статистики (дней)","settings.statsWindowDaysHint":"Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.","settings.title":"Центр навыков","settings.unsaved":"Есть несохранённые","sort.added":"По дате добавления","sort.name":"По названию","sort.uses":"По числу вызовов","source.check":"Проверить обновления","source.checkHint":"Нажмите, чтобы проверить источник на обновления","source.checking":"Проверка…","source.clearTrash":"Очистить корзину","source.clearTrashConfirm":"Удалить безвозвратно","source.clearTrashConfirmText":"Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.","source.clearTrashConfirmTitle":"Очистить корзину?","source.commit":"Синхронизированная ревизия","source.deleteConfirmText":"Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):","source.deleteConfirmTitle":"Согласиться с удалением в источнике?","source.deleteGroup":"Удалить группу","source.deleteGroupHint":"Удалить все навыки ({count}) этой группы","source.deleteGroupText":"Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:","source.deleteGroupTitle":"Удалить группу?","source.deleted":"Удалено в источнике: {count}","source.error":"Проверка не удалась","source.followDelete":"Согласиться с удалением","source.private":"Личный навык (не привязан к источнику; проверки обновлений нет)","source.restore":"Восстановить","source.sync":"Синхронизировать","source.syncConfirmText":"Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:","source.syncConfirmTitle":"Синхронизировать навыки?","source.syncing":"Синхронизация…","source.throttled":"Недавно проверено","source.trash":"Корзина","source.unverified":"источник ещё не проверен","source.upToDate":"Актуально","source.updated":"Обновлений: {count}","time.daysAgo":"{value} дн назад","time.hoursAgo":"{value} ч назад","time.justNow":"только что","time.minutesAgo":"{value} мин назад","time.weeksAgo":"{value} нед назад","update.available":"Доступно обновление: v{version} (текущая v{current})","update.check":"Проверить обновления","update.checking":"Проверка…","update.error":"Не удалось проверить обновления: {error}","update.newVersion":"Новая версия v{version}","update.unavailable":"Нет доступных релизов","update.upToDate":"Актуальная версия: v{version}","update.viewRelease":"Открыть релиз","view.flat":"Списком","view.grouped":"По группам","view.market":"Маркет","view.scenes":"Сценарии","view.sources":"Источники"},"dsh-subscriptions":{"accountLabel":"Аккаунт","addAccount":"+ Добавить аккаунт","cardIntro":"Подписки, ротация и ограничения аккаунтов.","connect":"Подключить","connected":"Подключено","coolingDown":"Охлаждение","disconnect":"Отключить","hide":"Скрыть","intro":"Войдите с помощью потребительской подписки. Токены остаются в хранилище учетных данных хоста. Браузер никогда не читает их обратно. После подключения, если провайдер перенаправляет на localhost или страницу провайдера, вставьте перенаправленный URL или код сюда.","loading":"Загрузка…","notConnected":"Не подключено","pastePlaceholder":"Вставьте перенаправленный URL или код","plan":"План","reconnect":"Переподключиться","removeSlot":"Удалить слот","save":"Сохранить","saved":"Сохранено","show":"Показать","storedAs":"Хранится как","submitCode":"Отправить код","title":"Подписки","usageFull":"Использование 100%","useOrigin":"Используйте этот источник Web UI как redirect_uri для OAuth","useOriginHint":"Не включайте, если вы не зарегистрировали собственный OAuth-клиент для этого источника. CLI-клиенты провайдеров обычно требуют опубликованный URI перенаправления и шаг вставки.","verifyAccount":"Подтвердить аккаунт","verifyLink":"Откройте ссылку для подтверждения","verifyPrefix":"Google требует одноразовой проверки аккаунта.","verifySuffix":"затем переподключитесь."},"dsh-tts":{"addProvider":"Добавить провайдера","announce":"Объявлять одобрения","announceHint":"Произнесите вслух и воспроизведите мелодию, когда агент остановится для подтверждения или задаст вопрос.","approvalHint":"Сказано, когда запрашивается одобрение; добавляется название инструмента.","approvalText":"Формулировка одобрения","azureHint":"Необходимо для провайдера Azure, например, eastus.","azureRegion":"Регион Azure","bargeIn":"Замолкать, когда вы говорите","bargeInHint":"Перестаньте читать, как только микрофон откроется.","binHint":"Ищется в PATH, если не указан абсолютный путь.","cardHint":"Цепочка провайдеров, голоса и параметры воспроизведения.","chainHint":"Сверху вниз указан порядок резервирования. Ключи облака сохраняются в хранилище учетных данных хоста, никогда в настройки плагина.","chainHintCard":"Выберите провайдера, вставьте его API-ключ и сохраните (или оставьте поле ключа пустым). Ключ сразу записывается в хранилище учетных данных хоста. Браузер никогда не читает его обратно.","chainTitle":"Цепочка провайдеров","chime":"Звонок","chimeHint":"динь, бип или ничего.","clear":"Очистить","configured":"Настроено","down":"Вниз","edgeBin":"бинарный файл edge-tts","edgeHint":"Python CLI из пакета edge-tts.","espeakBin":"Бинарный файл eSpeak","espeakHint":"Обычно espeak-ng.","fromEnv":"Задано в окружении","general":"Общие","language":"Язык","languageHint":"Подсказка для голосов, которым требуется локаль (eSpeak, Azure SSML).","loading":"Загрузка…","localProvider":"Локальный / CLI провайдер — без API-ключа","notSet":"Не задано","piperBin":"Бинарный файл Piper","piperModel":"Путь к модели Piper","piperModelHint":"Абсолютный путь к модели ONNX. Оставьте пустым, чтобы пропустить Piper.","questionHint":"Используется, когда агент задаёт вопрос. Если оставить пустым, функция будет отключена.","questionText":"Формулировка вопроса","rate":"Скорость воспроизведения","rateHint":"От 0.5 до 2. Синтез не изменяется; браузер воспроизводит быстрее или медленнее.","remove":"Удалить","save":"Сохранить","saved":"Сохранено","speakAsItGoes":"Говорите по мере проигрывания","speakAsItGoesHint":"Читайте каждый ответ сразу, как только он появляется, предложение за предложением, вместо ожидания всей очереди.","speakReplies":"Озвучивать ответы агента","speakRepliesHint":"Когда включено, каждый завершённый ответ синтезируется на хосте и воспроизводится в этом браузере. Аудио не отправляется обратно в модель.","title":"Речь","up":"Вверх"},"dsh-voice":{"addCustom":"Добавить своего провайдера","addProvider":"Добавить провайдера","browserFailed":"Браузер не распознал:","browserHint":"браузер выполняет распознавание, ключ не требуется","cancel":"Отмена","chainHint":"Сверху вниз — порядок, в котором они проверяются","clearKey":"Очистить ключ","composerUnavailable":"Композитор недоступен","customHint":"Любой OpenAI-совместимый API. Название становится доступным в цепочках выше.","customKeyName":"название ключа","customModel":"модель","customModelHint":"модель для запроса (пустое значение означает встроенную)","customName":"имя, используемое в цепочке","customTitle":"Ваши собственные провайдеры","deepinfraHint":"openai/whisper-large-v3-turbo · ключ DEEPINFRA_API_KEY","dictationBtn":"Голосовой ввод","dictationHint":"Речь обрезается на паузах, а текст добавляется к вводу.","dictationPill":"Диктовка — текст добавляется к вводу","down":"Вниз","fireworksHint":"whisper-v3-turbo · ключ FIREWORKS_API_KEY","general":"Общие","hide":"Скрыть","holdHint":"Удерживайте — отпустите, чтобы отправить","hotkey":"Клавиша голосового сообщения","hotkeyHint1":"Держите для записи, отпустите, чтобы отправить агенту, Esc отменяет.","hotkeyHint2":"Подойдёт любая клавиша: буква, F-клавиша или модификатор.","keepPending":"Не отправлять","keySpace":"Пространство","keyUnset":"не задано","language":"Язык","listening":"Слушаю в браузере…","loadingSettings":"Загрузка настроек…","localHint":"устанавливается при запуске сервера","messageBtn":"Голосовое сообщение — нажмите или удерживайте","messageHint":"Одна целая запись, отправленная агенту после расшифровки.","messagePill":"Запись голосового сообщения","messageTitle":"Голосовое сообщение","micUnavailable":"Микрофон недоступен: требуется HTTPS или localhost","mistralHint":"voxtral-mini-latest · ключ MISTRAL_API_KEY","noRecorder":"Этот браузер не поддерживает MediaRecorder","notReady1":"Харнесс ещё не объявил настройки этого плагина. Если он только что перезапустился,","notReady2":"раздел появится сам через несколько секунд.","nothingHeard":"Ничего не было распознано","openaiHint":"whisper-1 · ключ OPENAI_API_KEY","openrouterHint":"google/gemini-2.5-flash · ключ OPENROUTER_API_KEY","openrouterWarning":"У OpenRouter нет /audio/transcriptions — используйте там шаблон openai-chat-audio","pauseHint":"Меньшее значение означает более частые фрагменты и быстрый текст, но выше риск разрыва слова","pauseMs":"Пауза, завершающая фразу, мс","pressKey":"Нажмите клавишу…","recognitionError":"распознавание не удалось","recordSlot":"Запись голоса","remove":"Удалить","save":"Сохранить","saveFailed":"Некоторые поля не были сохранены —","saved":"Сохранено ✓","secondsShort":"с","sendingIn":"Отправка агенту через","siliconflowHint":"FunAudioLLM/SenseVoiceSmall · ключ SILICONFLOW_API_KEY","stop":"Стоп","title":"Голос","transcribing":"Транскрибируем…","undoHint":"Как долго ещё можно отменить автоматическую отправку","undoMs":"Окно отмены, мс","up":"Вверх","whisperAutostart":"Автозапуск локального whisper","whisperBin":"Локальный шепот: бинарный","whisperBinHint":"используется при включённом автозапуске","whisperEndpoint":"Локальный whisper: адрес","whisperEndpointHint":"POST /inference сервера whisper.cpp","whisperModel":"Локальная модель Whisper"},"feedback":{"action.dislike":"Плохой ответ","action.dislikeActive":"Убрать оценку","action.like":"Хороший ответ","action.likeActive":"Убрать оценку","error.conflict":"Эту оценку изменили в другом месте; показано актуальное состояние","error.generic":"Не удалось сохранить оценку","error.load":"Не удалось загрузить оценку","note.aria":"Комментарий к оценке","note.cancel":"Отмена","note.dialog":"Отзыв","note.open":"Добавить комментарий","note.placeholder":"Что получилось хорошо, а что нет? (необязательно)","note.save":"Сохранить"},"goal":{"action.cancel":"Отменить правку","action.clear":"Снять цель","action.edit":"Изменить цель","action.pause":"Приостановить цель","action.resume":"Продолжить цель","action.save":"Сохранить цель","commandInput.aria":"Ввод команды","objective.aria":"Формулировка цели","phase.active":"Цель в работе","phase.blocked":"Цель заблокирована","phase.paused":"Цель на паузе"},"im-hub":{"f.agentCwd":"Рабочая папка","f.agentCwdHint":"Папка для сессий агента; пусто — папка процесса dsh.","f.agentMaxMessageLength":"Длина сообщения","f.agentMaxMessageLengthHint":"Максимум символов в исходящем сообщении; длинные ответы разбиваются.","f.agentModel":"Модель","f.agentModelHint":"Переопределить модель; пусто — как задано в установке.","f.agentProvider":"Провайдер","f.agentProviderHint":"Переопределить провайдера модели; пусто — как задано в установке.","f.allowedUserIdsHint":"Идентификаторы через запятую; пусто — доступ всем (для боевой работы не советуем).","f.configured":"Задано","f.enabled":"Включено","f.enabledHint":"Общий выключатель всего IM-шлюза.","f.feishuAllowedUserIds":"Разрешённые open id","f.feishuAppId":"App id","f.feishuAppIdHint":"App id приложения Feishu (cli_…).","f.feishuAppSecret":"App secret","f.feishuEnabled":"Включено","f.feishuEnabledHint":"Включить адаптер Feishu по постоянному WebSocket-соединению (публичный адрес не нужен).","f.httpHost":"Адрес привязки","f.httpHostHint":"Адрес, на котором слушают HTTP-серверы в режиме вебхуков.","f.httpPort":"Порт привязки","f.httpPortHint":"Порт, на котором слушают HTTP-серверы в режиме вебхуков.","f.inherit":"Наследовать","f.larkAllowedUserIds":"Разрешённые open id","f.larkAppId":"App id","f.larkAppSecret":"App secret","f.larkEnabled":"Включено","f.larkEnabledHint":"Включить международный адаптер Lark (open.larksuite.com).","f.mockEnabled":"Включено","f.mockEnabledHint":"Адаптер только для тестов: локальный HTTP-эндпоинт без учётных данных платформы.","f.mockPort":"Порт","f.mockPortHint":"Фиксированный HTTP-порт тестового эндпоинта (0 — любой свободный).","f.notConfigured":"Не задано","f.off":"Выкл","f.on":"Вкл","f.secretHint":"Хранится на сервере и больше не показывается. Оставьте пустым, чтобы сохранить текущее значение.","f.telegramAllowedUserIds":"Разрешённые id пользователей","f.telegramEnabled":"Включено","f.telegramEnabledHint":"Включить адаптер Telegram Bot API с опросом обновлений.","f.telegramToken":"Токен бота","f.telegramTokenHint":"Токен от @BotFather (123456:ABC-DEF…).","f.wecomAgentId":"Agent id","f.wecomAgentIdHint":"Agent id приложения WeCom.","f.wecomAllowedUserIds":"Разрешённые id пользователей","f.wecomCorpId":"Corp id","f.wecomCorpIdHint":"Идентификатор организации из консоли WeCom.","f.wecomCorpSecret":"App secret","f.wecomEnabled":"Включено","f.wecomEnabledHint":"Включить адаптер WeCom с обратным вызовом (нужен публичный адрес).","f.wecomEncodingAesKey":"EncodingAESKey","f.wecomToken":"Токен обратного вызова","g.agent":"Агент","g.feishu":"Feishu (Китай)","g.general":"Общие","g.http":"HTTP (режим вебхуков)","g.lark":"Lark (международный)","g.mock":"Тестовый адаптер","g.telegram":"Telegram","g.wecom":"WeCom (WeChat Work)","p.agentCwd":"Например: /home/user/projects/my-agent (пусто — папка DSH)","p.agentMaxMessageLength":"Например: 4000","p.agentModel":"Например: deepseek-v4-flash (пусто — по умолчанию)","p.agentProvider":"Например: volcengine (пусто — по умолчанию)","p.feishuAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.feishuAppId":"Например: cli_xxxxxxxxxxxxx","p.feishuAppSecret":"App Secret приложения Feishu","p.httpHost":"Например: 0.0.0.0","p.httpPort":"Например: 8080","p.larkAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.larkAppId":"Например: cli_xxxxxxxxxxxxx","p.larkAppSecret":"App Secret приложения Lark","p.mockPort":"Например: 9099 (0 — автоматически)","p.telegramAllowedUserIds":"Например: 123456789, 987654321","p.telegramToken":"Например: 123456789:AA...","p.wecomAgentId":"Например: 1000002","p.wecomAllowedUserIds":"Например: ivanov, petrov","p.wecomCorpId":"Например: wwxxxxxxxxxxxxxx","p.wecomCorpSecret":"Secret приложения WeCom","p.wecomEncodingAesKey":"EncodingAESKey из 43 символов","p.wecomToken":"Токен адреса обратного вызова","settings.collapse":"Свернуть","settings.description":"Подключает агентов dsh к Feishu (Lark), WeCom и Telegram. Каждый чат получает свою сессию агента.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.overridden":"Переопределено","settings.readOnly":"Установка доступна только для чтения: настройки из интерфейса не меняются.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Сохранить не удалось","settings.saving":"Сохранение…","settings.title":"IM-шлюз (dsh-im-hub)","settings.unsaved":"Есть несохранённые изменения"},"job":{"count.idle.few":"{count} фоновые задачи","count.idle.many":"{count} фоновых задач","count.idle.one":"{count} фоновая задача","count.idle.other":"{count} фоновых задач","count.live.few":"{count} фоновые задачи выполняется","count.live.many":"{count} фоновых задач выполняется","count.live.one":"{count} фоновая задача выполняется","count.live.other":"{count} фоновых задач выполняется","duration.hours":"{hours} ч {minutes} мин","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","duration.title.done":"Заняло {duration}","duration.title.live":"Выполняется {duration}","list.aria":"Фоновые задачи","status.completed":"завершена","status.failed":"ошибка","status.killed":"отменена","status.running":"выполняется","status.stopping":"останавливается"},"model":{"action.reload":"Обновить","blocked.composer":"Эта модель недоступна — выберите другую, чтобы продолжить","command.description":"Выбрать модель для этого диалога","effort.providerDefault":"По умолчанию","empty.efforts":"У этой модели нет уровней рассуждения.","empty.models":"Доступных моделей нет.","error.action":"Операция с моделью не удалась: {message}","menu.aria":"Модель и уровень рассуждения","menu.effort":"Уровень рассуждений","menu.model":"Модель","option.loadError":"Каталог не загрузился: {message}","status.loading":"Обновление списка моделей…","trigger.aria":"Выбор модели, сейчас {model}","trigger.ariaEffort":"Выбор модели, сейчас {model}, уровень рассуждения {effort}","trigger.fallback":"Выбрать модель","trigger.selectAria":"Выбрать модель","warning.groupLoad":"{name} не загрузился: {message}"},"permission.access":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?"},"pin":{"action.pin":"Закрепить","action.unpin":"Открепить"},"plan":{"chip.off.aria":"Режим плана выключен, нажмите, чтобы включить","chip.off.title":"Режим плана выключен — нажмите, чтобы включить (/plan)","chip.on.aria":"Режим плана включён, нажмите, чтобы выключить","chip.on.title":"Режим плана включён — нажмите, чтобы выключить (/plan off)"},"plugin-store":{"dialog.close":"Закрыть магазин плагинов","header.open":"Открыть магазин плагинов","header.title":"Магазин плагинов DSH","settings.tab":"Магазин плагинов","store.analyzeFailed":"Передать разбор агенту не удалось","store.analyzeHint":"Отправить эту ошибку в новую сессию агента для разбора.","store.analyzeSent":"Отправлено агенту","store.analyzeWithAgent":"Попросить агента разобраться","store.analyzing":"Создаём сессию агента…","store.cancel":"Отмена","store.category":"Категория","store.categoryAll":"Все категории","store.confirmInstall":"Установить плагин","store.confirmRemove":"Удалить плагин","store.confirmUpdate":"Обновить плагин","store.copied":"Ссылка для установки скопирована","store.copyInstall":"Скопировать ссылку для установки","store.disclaimer":"Наличие в каталоге не подтверждает работоспособность, совместимость, безопасность или качество.","store.done":"Готово","store.empty":"Под эти фильтры ничего не подходит","store.install":"Установить","store.installFailed":"Установить не удалось","store.installSuccess":"Установлено. Перезапустите DSH Web, чтобы плагин заработал.","store.installed":"Установлен","store.installedLoadFailed":"Список установленных плагинов недоступен","store.installedOnly":"Только установленные","store.installing":"Установка…","store.loadFailed":"Не удалось загрузить каталог","store.loadMore":"Показать ещё","store.loading":"Загрузка каталога плагинов…","store.openDetails":"Открыть карточку в магазине","store.refresh":"Обновить каталог","store.refreshFailed":"Каталог не обновился; показаны последние успешные данные","store.remove":"Удалить плагин","store.removeDetail":"Меняется только зависимость текущего профиля. Чтобы удаление вступило в силу, перезапустите DSH Web.","store.removeFailed":"Удалить не удалось","store.removeLead":"Плагин будет удалён из текущего профиля DSH Web.","store.removeSuccess":"Удалено. Перезапустите DSH Web, чтобы изменение вступило в силу.","store.removeTitle":"Удаление плагина","store.removing":"Удаление…","store.results":"{visible} из {total} проектов","store.retry":"Повторить","store.riskAcknowledge":"Я понимаю риск и хочу установить этот сторонний плагин","store.riskDetail":"Присутствие в каталоге не является проверкой безопасности, совместимости или качества. Установленный код выполняется с правами процесса DSH, а чтобы он заработал, DSH Web нужно перезапустить.","store.riskLead":"В текущий профиль DSH Web будет установлен код из стороннего репозитория.","store.riskTitle":"Подтверждение риска стороннего плагина","store.search":"Поиск по названию, автору, описанию или теме","store.sort":"Сортировка","store.sortName":"Название","store.sortRecommended":"Рекомендуемые","store.sortStars":"Звёзды","store.sortUpdated":"Недавно обновлённые","store.stars":"звёзд: {count}","store.topicListed":"Указана тема","store.update":"Обновить","store.updateAvailable":"Есть обновление","store.updateRiskDetail":"Обновление заменит версию плагина в этом профиле. Чтобы оно вступило в силу, перезапустите DSH Web.","store.updateRiskLead":"В текущий профиль DSH Web будет установлена более новая ревизия стороннего репозитория.","store.updateRiskTitle":"Подтверждение обновления стороннего плагина","store.updateSuccess":"Обновлено. Перезапустите DSH Web, чтобы плагин заработал.","store.updated":"Каталог обновлён {date}","store.updating":"Обновление…","store.validation.check-failed":"Проверка структуры не пройдена","store.validation.check-pending":"Проверка структуры в очереди","store.validation.check-running":"Идёт проверка структуры","store.validation.expired":"Нужна повторная проверка","store.validation.inconclusive":"Требует рассмотрения","store.validation.not-applicable":"Вне проверки плагинов","store.validation.recorded":"Есть запись о проверке","store.validation.sandbox-failed":"Проверка в песочнице не пройдена","store.validation.sandbox-pending":"Проверка в песочнице в очереди","store.validation.sandbox-running":"Идёт проверка в песочнице","store.validation.security-review":"Проверка безопасности","store.validation.unrecognized":"Требует опознания","store.validation.verified":"Проверен","store.verified":"Проверен","store.verifiedOnly":"Только проверенные"},"question":{"action.next":"Дальше","action.skip":"Пропустить вопрос","custom.placeholder":"Впишите свой ответ","error.incomplete":"Сначала ответьте на этот вопрос.","error.unanswered":"Выберите вариант или впишите свой ответ.","nav.cancel":"Закрыть все вопросы","nav.maximize":"Развернуть карточку вопроса","nav.minimize":"Свернуть карточку вопроса","nav.next":"Следующий вопрос","nav.prev":"Предыдущий вопрос","option.recommended":"Рекомендуем","plan.approve":"Утвердить","plan.decline":"Отклонить","plan.discuss":"Обсудить","plan.header":"Проверка плана"},"reference":{"candidate.file":"Файл","candidate.folder":"Папка","candidate.noCwd":"(нет cwd)","candidate.session":"Сессия","section.files":"Файлы и папки","section.sessions":"Диалоги сессий"},"session-log-download":{"dialog.close":"Закрыть","dialog.commandFailed":"Не удалось запустить экспорт сессии.","dialog.errorTitle":"Экспорт сессии не удался","dialog.preparingDescription":"Готовится ZIP с этой сессией, её подсессиями и вложениями.","dialog.preparingTitle":"Экспорт сессии","dialog.successDescription":"Браузер загружает ZIP с сессией.","dialog.successTitle":"Загрузка сессии началась"},"settings":{"close":"Закрыть","general.nav":"Общие","openDocument":"Открыть файл настроек","openDocument.error":"Не удалось открыть файл настроек","title":"Настройки","trigger":"Настройки"},"settings.agentPreset":{"brokenBadge":"Не загрузился","brokenNoCopy":"Пресет, который не загрузился, скопировать нельзя","builtIn":"Встроенный","builtInGroup":"Встроенные","cancel":"Отмена","close":"Закрыть","composition":"Композиция (agent.cordis.yml)","copyIntro":"Пресет копируется целиком на этой машине. Идентификатор станет именем каталога и позже не меняется; всё остальное правится в файлах самого пресета.","copyOf":"Скопирован с","copyTitle":"Скопировать пресет","create":"Создать","creating":"Создание…","creatorDraft":"Набросать свой пресет в режиме «Конструктор»","customGroup":"Свои","delete":"Удалить","deleteConfirm":"Удалить","deleteDescription":"Каталог пресета будет удалён. Уже запущенные на нём сессии продолжат работать, но выбрать его для новых нельзя.","deleteTitle":"Удалить этот пресет?","deleting":"Удаление…","description":"Действует на сессии, запущенные с этого момента. Работающие сессии остаются на своём пресете.","displayName":"Название","displayNamePlaceholder":"Показывается в списке; по умолчанию — идентификатор","duplicate":"Скопировать","duplicateUnavailable":"В этой установке нет каталога пресетов с правом записи","error":"Не удалось загрузить пресеты агента.","headerHint":"Пресет агента, на котором идёт сессия; зафиксирован при запуске","idInvalid":"Строчные буквы, цифры и дефисы, начиная с буквы или цифры.","idRequired":"Задайте пресету идентификатор.","idTaken":"Пресет с таким идентификатором уже есть.","inUse":"Используется","loading":"Загрузка пресетов…","nav":"Пресеты агента","noDescription":"Без описания.","openLocation":"Открыть папку","presetCodeDescription":"Всё, что умеет обычный режим, но инструменты отдаются через Code Mode SDK: модель собирает многошаговые операции в одну программу на TypeScript.","presetCodeName":"Режим кода","presetCordisDescription":"Для создания своих пресетов: всё из обычного режима плюс инспекция рантайма, опыты с плагинами и подсказки по авторству пресетов.","presetCordisName":"Конструктор","presetId":"Идентификатор","presetIdPlaceholder":"my-agent","presetMinimalDescription":"Агент из двух инструментов: постоянный bash и str_replace_editor.","presetMinimalName":"Минимальный режим","presetStandardDescription":"Полноценный кодинг-агент: правка файлов, консоль, поиск по файлам и в вебе, скиллы, планирование, цели, субагенты и воркфлоу.","presetStandardName":"Обычный режим","retry":"Повторить","revealedPathLabel":"Файлы пресета:","seatHint":"Пресет агента для сессии, которую вы собираетесь запустить","sectionIntro":"Пресет — это состав плагинов, на котором работает агент сессии: его инструменты, промпт и возможности. Скопируйте готовый и допилите под себя или попросите агента набросать свой в режиме «Конструктор».","setDefault":"Сделать основным","showLocation":"Показать расположение","title":"Пресет агента","userTrust":"Свой","view":"Посмотреть"},"settings.commandcode":{"accountAdd":"Добавить аккаунт","accountDefault":"Основной аккаунт","accountKey":"API-ключ","accountKeyHint":"API-ключ этого аккаунта. Если оставить поле пустым, сохранённый ключ останется без изменений.","accountLabel":"Название аккаунта","accountRemove":"Удалить","accountsHint":"Когда активный аккаунт достигает лимита использования (429) или его ключ недействителен (401), запросы переключаются на следующий аккаунт; когда все аккаунты исчерпаны, ошибка указывает ближайшее время сброса окна.","accountsTitle":"Смена аккаунта","activeAccount":"Активный аккаунт","activeAccountAuto":"Авто (первый доступный аккаунт)","activeAccountHint":"Закрепите предпочтительный аккаунт; применяется к следующему запросу после сохранения. Если выбранный аккаунт исчерпан, запросы будут перенаправлены на другой доступный аккаунт.","advancedInvalid":"Число в расширенных настройках не готово к сохранению; раскройте, чтобы исправить.","advancedOverriddenMany":"{count} настроено","advancedOverriddenOne":"1 настроенный","advancedSettings":"Дополнительно","advancedSettingsHint":"Редко используемые параметры: базовый URL API, рабочая директория, тайм-ауты и фильтрация моделей.","apiBase":"Базовый URL API","apiBaseHint":"По умолчанию используется https://api.commandcode.ai; обычно оставляйте как есть.","apiKey":"API-ключ","apiKeyHint":"Создайте его в консоли commandcode.ai. Если оставить это поле пустым, сохранённый ключ останется без изменений.","apiKeyLocked":"Ключ предоставлен только для чтения","apiKeySet":"Настроено","apiKeyUnset":"Не настроено","cancel":"Отмена","cardConfiguredHint":"API-ключ готов. Чтобы заменить его, добавить ротацию аккаунтов, проверить использование или изменить базовый API, откройте страницу \"Command Code\" в Настройках.","cardLoadingHint":"Загрузка конфигурации командного кода…","cardRegistrationHint":"Эта карта предоставлена плагином Command Code; для отображения всех элементов управления требуется более новая версия DeepSeek Harness.","cardRouteActive":"Активный","cardTitle":"Подключение командного кода","discard":"Отменить","filterModelsByPlan":"Скрыть модели вне тарифного плана","filterModelsByPlanHint":"Если включено, в выборе моделей отображаются только те, что входят в вашу подписку; при наличии баланса кредитов по запросу показывается полный каталог.","hide":"Скрыть","intro":"Настройте подключение к Command Code Provider. API-ключ сохраняется только в локальной службе учетных данных и никогда не отображается; остальные поля записываются в пользовательские настройки и вступают в силу при следующем запросе.","invalidNumber":"Недопустимый номер","loginButton":"Войдите в Command Code","loginCancel":"Отменить вход","loginCancelled":"Вход отменён.","loginDenied":"Доступ запрещён. Попробуйте снова или вставьте ключ вручную.","loginFailedGeneric":"Не удалось войти; попробуйте снова или вставьте ключ вручную.","loginHintIdle":"Не хотите создавать ключ вручную? Войдите в систему, и ваш браузер откроет страницу авторизации commandcode.ai; одобренный ключ сохранится в локальном сервисе учетных данных и будет применяться к следующему запросу.","loginInvalidKey":"Доставленный ключ не прошел проверку (401). Попробуйте снова или вставьте его вручную.","loginNetwork":"Не удалось подключиться к сервису Command Code для проверки ключа; проверьте подключение к сети и повторите попытку.","loginOpenLink":"Откройте страницу авторизации ↗","loginStarting":"Запуск локального серверного обработчика callback…","loginStoreFailed":"Не удалось сохранить ключ в локальной службе учетных данных; вставьте его вручную.","loginSuccess":"Вошли как","loginTimeout":"Истекло время ожидания ответа авторизации; попробуйте снова.","loginTitle":"Войти, чтобы получить ключ","loginUnavailable":"Вход в систему недоступен в этой среде; вставьте {API key} вместо этого.","loginWaiting":"Ожидание авторизации в вашем браузере…","nav":"Код команды","numberTooLarge":"Превышено допустимое максимальное значение (2147483647 мс)","numberTooSmall":"Должно быть не менее 1 (мс)","overridden":"Переопределено","readOnly":"Настройки доступны только для чтения.","requestTimeoutMs":"Таймаут запроса (мс)","requestTimeoutMsHint":"Время ожидания первого байта ответа; по умолчанию 60000.","reset":"Сбросить","save":"Сохранить","saveFailed":"Не удалось сохранить, попробуйте снова.","saved":"Сохранено ✓","saving":"Сохранение","show":"Показать","streamIdleTimeoutMs":"Таймаут простоя потока (мс)","streamIdleTimeoutMsHint":"Как долго зависший поток считается мёртвым; по умолчанию 300000 (намеренно щедро — модели с долгим обдумыванием могут молчать минутами).","title":"Код команды","unsaved":"Не сохранено","updateAvailable":"доступно обновление","updateHint":"Доступна новая версия; нажмите для просмотра заметок о выпуске. Уведомление исчезнет после обновления плагина.","usageActive":"Активно","usageCooldown":"Охлаждение","usageCost":"Потратить","usageError":"Не удалось получить данные об использовании","usageExceeded":"Превышено","usageFailed":"не удалось","usageFiveHour":"5-часовое окно","usageFree":"Бесплатно","usageInvalidKey":"Неверный ключ","usageKeyClear":"Очистить сохранённый ключ","usageKeyClearStaged":"Будет очищено при сохранении","usageKeyInvalid":"Неверный или просроченный API-ключ","usageKeyInvalidHint":"Сервер отклоняет все запросы (401). Проверьте ключ, настроенный для этого аккаунта, или создайте новый в консоли commandcode.ai.","usageLoading":"Получение данных об использовании аккаунта…","usageMonthly":"Ежемесячно","usageNetworkError":"Не удалось подключиться к сервису Command Code","usageNetworkHint":"На сервер не поступило ни одного запроса. Проверьте подключение к сети или настройку базового API.","usageNoKey":"Настройте API-ключ, чтобы увидеть здесь данные об использовании и состоянии кредитов этого аккаунта.","usagePartial":"Некоторые данные конечной точки недоступны","usagePeriodEnd":"Период заканчивается","usagePurchased":"Куплено","usageRefresh":"Обновить","usageRefreshing":"Обновление…","usageRequests":"Запросы","usageReset":"Сбросить","usageServiceUnavailable":"Сервис Command Code временно недоступен","usageServiceUnavailableHint":"Сервер вернул ошибки (5xx); попробуйте обновить позже.","usageSuccessRate":"Уровень успеха","usageTitle":"Использование аккаунта","usageTokens":"Токены","usageTokensIn":"в","usageTokensOut":"выход","usageUnconfigured":"Для этого аккаунта ещё не настроен API-ключ.","usageUndoKeyClear":"Отменить очистку","usageUpdated":"Обновлено","usageWeekly":"Еженедельное окно","workingDir":"Рабочая директория","workingDirHint":"Необязательно. Оставьте пустым, чтобы использовать текущий рабочий каталог процесса (указан в поле); укажите путь только для фиксации конкретного расположения."},"settings.locale":{"language.title":"Язык"},"settings.models":{"add":"Добавить провайдера","addModel":"Добавить модель","advancedHint":"Остальные поля живут в settings.yaml — правьте этот раздел напрямую.","apply":"Применить","applying":"Применение…","baseUrl":"Базовый URL","baseUrlDefault":"По умолчанию у провайдера","cancel":"Отмена","close":"Закрыть","conflict":"Пока карточка была открыта, настройки изменил кто-то ещё. Закройте и откройте заново, чтобы править актуальные значения.","contextWindow":"Окно контекста","contextWindowPlaceholder":"Как у провайдера по умолчанию","create":"Создать провайдера","creating":"Создание…","credentialConfigured":"API-ключ задан","credentialMissing":"API-ключ не задан","customAdd":"Добавить своего провайдера","customApi":"Протокол API","customApiUnset":"Не выбран","customDisplayName":"Отображаемое имя","customNeedsBaseUrl":"Своему провайдеру нужен базовый URL.","customNeedsModels":"Своему провайдеру нужна хотя бы одна модель.","customRoute":"Идентификатор провайдера","customRouteHint":"Идентификатор в нижнем регистре, начинается с буквы. По нему провайдер адресуется в запросах, и так же называется его ключ.","customRouteInvalid":"Начните со строчной буквы, дальше строчные буквы, цифры и дефисы.","customRouteTaken":"Такой идентификатор уже занят другим провайдером.","customTag":"Свой","customTitle":"Свой провайдер","customized":"Настройки изменены","deleteConfirm":"Удалить {provider}","deleteDescription":"Удаление {provider} убирает его настройки. Ключ, которым он пользовался, хранится отдельно и останется.","deleteDescriptionWithCredential":"Удаление {provider} убирает его настройки и сохранённый API-ключ.","deleteTitle":"Удалить {provider}?","deleting":"Удаление {provider}…","edit":"Изменить","editProvider":"Изменить {provider}","fetchAdopt":"Добавить выбранные","fetchDescription":"Вот модели, доступные у этого провайдера. Отметьте те, что нужно добавить.","fetchDeselectAll":"Снять выбор","fetchEmpty":"Провайдер не вернул ни одной модели. Добавьте их вручную.","fetchModels":"Запросить список моделей","fetchNeedsBaseUrl":"Сначала укажите базовый URL, потом запрашивайте.","fetchSelectAll":"Выбрать все","fetchTitle":"Выберите модели","fetching":"Запрос к провайдеру…","intro":"Введите свои API-ключи, чтобы пользоваться моделями этих провайдеров.","keyBlank":"Введите API-ключ или оставьте поле пустым, чтобы сохранить прежний.","keyBlankNew":"Введите API-ключ или оставьте поле пустым, если провайдер авторизуется иначе.","keyEnvLocked":"Задан переменной окружения (только чтение)","keyIllegalCharacters":"Ключ в недопустимом формате. Проверьте его.","keyInput":"API-ключ","keyPlaceholder":"Введите API-ключ","keyPlaceholderNative":"Введите API-ключ или оставьте пустым для авторизации из окружения","keyRequired":"Чтобы продолжить, введите API-ключ.","keyStored":"Задан — введите новое значение, чтобы заменить","loadFailed":"Не удалось загрузить список провайдеров","maxTokens":"Максимум выходных токенов","maxTokensPlaceholder":"Как у провайдера по умолчанию","model":"Модель","modelAdvanced":"Ёмкости","modelCapacityInvalid":"Ёмкость задаётся числом, можно с суффиксом K или M.","modelContextInvalid":"Окно контекста — положительное число, например 131072, 256K или 1M.","modelContextWindow":"Окно контекста","modelDuplicate":"Каждый идентификатор модели встречается один раз.","modelId":"Идентификатор модели","modelIdDuplicate":"Идентификатор модели должен быть уникальным.","modelIdRequired":"Нужен идентификатор модели.","modelMaxTokens":"Максимум выходных токенов","modelMaxTokensInvalid":"Максимум выходных токенов — положительное число, например 8192, 64K или 1M.","modelName":"Отображаемое имя","modelNameInvalid":"Отображаемое имя не может быть пустым.","modelNamePlaceholder":"Пусто — возьмётся идентификатор модели","models":"Модели","modelsCustomized":"Каталог моделей изменён","modelsEmpty":"В выборе моделей не будет ничего. Неуказанные идентификаторы всё равно можно отправлять напрямую.","modelsInherited":"По умолчанию, как в адаптере","nav":"Модели","onboardingDescription":"Настройте официального провайдера DeepSeek, чтобы начать.","onboardingLater":"Настроить позже","onboardingSave":"Сохранить и продолжить","onboardingSaving":"Сохранение…","onboardingTitle":"Добавьте API-ключ, чтобы начать","provider":"Провайдер","readOnly":"В этой установке файл настроек доступен только для чтения.","remove":"Удалить","removeModel":"Удалить модель","removeProvider":"Удалить {provider}","resetModels":"Вернуть значения по умолчанию","retry":"Повторить","savedProvider":"{provider} сохранён.","title":"Модели","welcomeError":"Не удалось сохранить подтверждение. Попробуйте ещё раз."},"settings.ollama-cloud":{"addModel":"Добавить модель вручную","apiKey":"API-ключ","apiKeyConfigured":"Настроено — введите новое значение для замены","apiKeyPending":"Введён новый ключ — теперь он используется для обнаружения; Сохранить для хранения","apiKeyPlaceholder":"Введите API-ключ","apiKeyUnset":"API-ключ не настроен","applySelected":"Применить выбранное","baseURL":"URL API","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть настройки","connection":"Подключение","customized":"Пользовательский каталог","defaultEffort":"Стандартное мышление","description":"Родной API-ключ Ollama Cloud, конечная точка и каталог моделей.","discard":"Отменить","dragModel":"Перетащите для изменения порядка","expand":"Развернуть настройки","fetchEmpty":"Конечная точка не вернула ни одной модели.","fetchModels":"Получить доступные модели","fetchingModels":"Получение моделей…","inherited":"Использование составленного каталога","invalidApiKey":"API-ключ не может состоять только из пробелов.","invalidBaseURL":"Введите URL API HTTP или HTTPS.","invalidModel":"Каждая модель должна иметь уникальный ID и допустимые положительные значения мощностей.","loading":"Загрузка настроек плагина…","modelContext":"Контекстное окно","modelDetails":"Подробности","modelId":"ID модели","modelName":"Отображаемое имя","modelOutput":"Максимальная мощность","models":"Каталог моделей","pickerDescription":"Выберите модели, которые нужно оставить в этом каталоге.","pickerLoading":"Получение метаданных модели…","pickerTitle":"Выбрать каталог моделей","readOnly":"Настройки этого профиля доступны только для чтения.","remoteAccess":"Удалённые браузеры не могут изменять настройки плагинов: API конфигурации Harness работает только через локальный интерфейс. Откройте страницу на самом хосте или пробросьте её (ssh -L 3080:127.0.0.1:3080 user@host, затем откройте http://127.0.0.1:3080). Сохранённые там настройки продолжают работать в удалённых сеансах.","remove":"Удалить","requestFailed":"Не удалось выполнить запрос.","save":"Сохранить","saved":"Сохранено","saving":"Сохранение…","summaryModels":"{count} моделей","summaryOff":"Не настроено","summaryOn":"Настроено","thinking":"Рассуждение","title":"Ollama Облако","tools":"Инструменты","unavailable":"Этот профиль не предоставляет доступ к настройкам Ollama Cloud.","unsaved":"Несохранённые изменения","usage":"Использование облака","usageLoading":"Чтение использования…","usageModels":"Модели, использованные на этой неделе","usageNeedsRestart":"Использование отображается после перезагрузки этого плагина на работающем хосте (перезапустите dsh).","usageRefresh":"Обновить","usageRefreshFailed":"Не удалось обновить","usageRequests":"запросы","usageResetAt":"Сбросится через {time}","usageResetAtDays":"Лимиты использования сбросятся {date} (осталось {count} дней)","usageResetEveryDays":"Сбрасывается каждые {count} дней","usageResetEveryHours":"Сбрасывается каждые {count} часов","usageSession":"Использование сессии","usageUnreachable":"Не удалось получить данные об использовании Ollama Cloud. Проверьте подключение к сети и URL API.","usageUnsupported":"Этот эндпоинт не передаёт данные об использовании облака.","usageUpdatedAt":"Обновлено {time}","usageUsed":"Использовано","usageWeekly":"Еженедельное использование","vision":"Зрение"},"settings.permission":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ позволяет новым сессиям реже спрашивать подтверждение и действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете будущим задачам.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?","description":"Режим разрешений по умолчанию для новых сессий","loading":"Загрузка","title":"Разрешения","unavailable":"Недоступно"},"settings.pluginInventory":{"active":"Подключён","catalog":"Список плагинов","configuration":"Настройки","cordis":"Состояние Cordis","disabledTag":"Выключен","empty":"Плагинов нет.","emptySearch":"Подходящих плагинов нет.","enabledTag":"Включён","error":"Плагины временно недоступны.","failed":"Не удалось подключить","loading":"Чтение плагинов…","loadingPhase":"Загрузка","pending":"Ожидает зависимости","retry":"Повторить","search":"Поиск плагинов","tab":"Список плагинов","unloading":"Выгружается","unobserved":"Не подключён"},"settings.plugins":{"agentLoopDescription":"Как агент раздаёт вызовы инструментов.","agentLoopMaxParallel":"Параллельных вызовов","agentLoopMaxParallelHint":"Сколько безопасных для параллели вызовов идёт одновременно в пределах шага.","agentLoopTitle":"Цикл агента","bashDescription":"Ограничения для каждой команды, которую запускает агент.","bashMaxOutputBytes":"Предел вывода на поток (байт)","bashMaxOutputBytesHint":"Всё сверх предела уходит во временный файл, а не теряется.","bashTimeoutMs":"Таймаут команды (мс)","bashTimeoutMsHint":"Сколько команда может выполняться до принудительного завершения.","bashTitle":"Консоль","collapse":"Скрыть настройки","configurableTab":"Настройки плагинов","discard":"Отменить","empty":"В этой установке настройки плагинов не выведены.","expand":"Показать настройки","intro":"Настройка и просмотр плагинов, установленных в этой сборке.","invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","nav":"Плагины","overridden":"Переопределено","readOnly":"В этой установке настройки доступны только для чтения.","reset":"Вернуть по умолчанию","save":"Сохранить","saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","saving":"Сохранение…","tabs":"Разделы плагинов","title":"Плагины","unsaved":"Не сохранено","webSearchApiKey":"API-ключ","webSearchApiKeyHint":"Хранится вне файла настроек. Оставьте пустым, чтобы сохранить текущий ключ.","webSearchApiKeySet":"Ключ задан.","webSearchApiKeyUnset":"Ключ не задан; без него поиск недоступен.","webSearchBaseUrl":"Адрес сервиса","webSearchBaseUrlHint":"Оставьте пустым, чтобы взять адрес провайдера по умолчанию.","webSearchDescription":"Поисковый провайдер DeepSeek.","webSearchMaxUses":"Максимум поисков на запрос","webSearchMaxUsesHint":"Сколько раз в рамках одного запроса можно искать, прежде чем придётся отвечать.","webSearchTitle":"Поиск в вебе"},"settings.subscriptions":{"cancel":"Отмена","checking":"Проверка…","generating":"Генерация изображения…","image":"изображение","imageClose":"Закрыть","imageLoadFailed":"Повторить","imageLoading":"Загрузка…","imagePreview":"Просмотр изображения","intro":"Вход и выход из провайдеров по подписке. Вход открывает страницу авторизации в новой вкладке; без браузера можно вставить адрес обратного вызова или код.","loggedIn":"Выполнен вход","loggedInAccount":"Вход выполнен как {account}","loggedInAccountExpires":"Вход выполнен как {account} · истекает {date}","loggedInExpires":"Вход выполнен · истекает {date}","login":"Войти","loginInProgress":"Идёт вход…","loginMissingUrl":"ответ на вход пришёл без authorizeUrl","logout":"Выйти","logoutConfirm":"Выйти из {provider}?","manualPlaceholder":"Вставьте адрес обратного вызова или код","manualSummary":"Не работает вход через браузер? Вставьте адрес обратного вызова или код","nav":"Подписки","notLoggedIn":"Вход не выполнен","submit":"Отправить","unavailable":"Нет связи; состояние подписок не загрузить.","usageEmpty":"Окна расхода не переданы.","usageError":"Не удалось получить расход: {message}","usageLoading":"Загрузка расхода…","usagePlan":"Тариф: {plan}","usageRefresh":"Обновить","usageResets":"сбрасывается {date}","usageSession":"Окно 5 часов","usageTitle":"Расход","usageWeekly":"За неделю","usageWindow":"Окно","viewImage":"Посмотреть изображение","viewImageNamed":"Посмотреть {name}"},"settings.theme":{"appearance.dark":"Тёмная","appearance.light":"Светлая","appearance.system":"Как в системе","appearance.title":"Оформление"},"sidebar":{"session.new":"Новая сессия","session.new.label":"Новая сессия","toggle.collapse":"Свернуть панель","toggle.open":"Открыть панель"},"skill":{"menu.userOnly":"только вручную","row.failed":"Не удалось загрузить скилл","row.instructions":"Инструкции","row.running":"Загрузка скилла","row.stopped":"Загрузка скилла остановлена"},"skills-manager":{"action.create":"создание","action.delete":"удаление","action.disable":"отключение","action.enable":"включение","action.restore":"восстановление","action.toggle":"включение или отключение","btn.cancel":"Отмена","btn.close":"Закрыть","btn.create":"Создать навык","btn.create.now":"Создать навык","btn.delete.forever":"Удалить безвозвратно","btn.detail":"Подробнее","btn.disable":"Отключить","btn.enable":"Включить","btn.file.pick":"Выбрать файл","btn.folder.pick":"Выбрать папку","btn.import":"Импорт","btn.import.now":"Установить","btn.refresh":"Обновить","btn.repair.enable":"Исправить и включить","btn.restore":"Восстановить","btn.trash":"В корзину","confirm.delete.desc":"«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.","confirm.delete.title":"Удалить безвозвратно?","confirm.trash.desc":"«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.","confirm.trash.title":"Отправить в корзину?","create.body":"Текст (Markdown)","create.body.placeholder":"Опишите инструкции, шаги и границы навыка…","create.chat.note":"Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.","create.description":"Описание","create.description.placeholder":"Одно предложение — когда использовать","create.name":"Название","create.name.placeholder":"например code-review-helper","create.target":"Место создания","create.title":"Создать навык","desc":"Единая загрузка и управление Agent-навыками на этом компьютере.","detail.body":"Текст","detail.diagnostics":"Диагностика","detail.frontmatter":"Frontmatter","detail.noIssues":"Проблем не обнаружено.","detail.path":"Исходный файл","detail.title":"Подробности навыка","diagnostic.description.missing":"В frontmatter нет description","diagnostic.frontmatter.missing":"Отсутствует полный YAML frontmatter","diagnostic.invocation.invalid":"Недопустимое значение политики вызова","diagnostic.name.invalid":"Имя навыка не соответствует kebab-case: {name}","diagnostic.name.missing":"В frontmatter нет name","diagnostic.shadowed":"Перекрыт источником с более высоким приоритетом {root}","empty.search":"Подходящих навыков нет.","empty.source":"Этого каталога не существует или в нём пока нет навыков.","error.action":"Действие не удалось: {error}","error.browse.absolute":"Путь к папке должен быть абсолютным: {path}","error.browse.notDirectory":"Это не папка: {path}","error.browse.unreadable":"Не удалось прочитать папку: {path}","error.create.bodyRequired":"Текст навыка обязателен","error.create.conflict":"Навык с таким именем уже существует: {name}","error.create.descriptionRequired":"Описание навыка обязательно","error.create.tooLarge":"Содержимое навыка слишком велико","error.import.duplicateName":"В пакетном источнике есть навыки с одинаковыми именами: {name}","error.import.emptySource":"В каталоге не найдено ни одного элемента навыков: {path}","error.import.failed":"Импорт не удался","error.import.invalidName":"Не удалось сгенерировать корректное имя kebab-case (исходное: {name})","error.import.overlap":"Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него","error.import.rollbackFailed":"Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})","error.proto.bodyTooLarge":"Тело запроса слишком велико","error.proto.contentType":"Тело запроса должно быть application/json","error.proto.forbidden":"Запрещённый запрос на изменение (нет клиентского маркера)","error.proto.forbiddenHost":"Запрещённый источник запроса (неверный Host)","error.proto.invalidJson":"Тело запроса — не корректный JSON","error.proto.method":"Метод не поддерживается","error.proto.nonJson":"Сервер вернул ответ не в формате JSON (HTTP {status})","error.proto.unknownAction":"Неизвестное действие","error.root.readonly":"Этот источник не разрешает: {action}","error.root.unknown":"Неизвестный источник навыков: {root}","error.root.unsafe":"Каталог проектных навыков небезопасен, запись отклонена: {path}","error.skill.noFrontmatter":"У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}","error.skill.notFound":"Навык не найден: {name}","error.source.notFound":"Путь не существует: {path}","error.source.symlink":"Источники навыков с символическими ссылками не поддерживаются: {path}","error.source.tooDeep":"Глубина каталога источника превышает {depth} уровней: {path}","error.source.unrecognized":"Нераспознанный источник навыков: {path}","error.state.invalid":"Файл состояния менеджера не читается, перезапись отклонена: {path}","error.trash.conflict":"Нельзя восстановить: навык с таким именем уже существует: {name}","error.trash.invalid":"Недопустимый путь элемента корзины: {id}","error.trash.notFound":"Элемент корзины не найден: {id}","error.trash.projectUnavailable":"Исходный проект не является активной рабочей областью, восстановление невозможно: {path}","error.trash.rollbackFailed":"Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})","error.upload.archiveTooLarge":"ZIP-архив слишком велик; лимит {limit} байт","error.upload.duplicate":"Загрузка содержит дублирующийся путь: {path}","error.upload.empty":"Загрузка пуста","error.upload.encoding":"Недопустимая кодировка загружаемого содержимого","error.upload.path":"Загрузка содержит недопустимый путь: {path}","error.upload.tooLarge":"Загрузка слишком велика; лимит {limit} байт","error.upload.tooMany":"Слишком много файлов; максимум {limit}","error.upload.zipInvalid":"ZIP-архив не удаётся распаковать","filter.all":"Все источники","filter.option":"{name} ({count})","filter.source":"Источник","import.title":"Импорт навыка","loading":"Загрузка навыков…","note.missing":"Описание не указано","result.created":"Навык создан: {name}","result.deleted":"Удалён безвозвратно: {name}","result.importEmpty":"Не импортировано ни одного навыка.","result.importPartial":"Импортировано: {imported}; пропущены одноимённые: {skipped}","result.importSkipped":"Ничего не импортировано; пропущены существующие: {names}","result.importWarnings":"{result}; предупреждения: {warnings}","result.imported":"Импорт завершён: {names}","result.restored":"Навык восстановлен: {name}","result.trashed":"Отправлен в корзину: {name}","result.updated":"Состояние обновлено.","root.agents":"Общий Agent","root.claude":"Claude","root.codex":"Codex","root.dsh":"Навыки DSH","root.gemini":"Gemini","root.opencode":"OpenCode","root.projectAgents":"Проектный Agent","root.projectDsh":"Проектный DSH","search":"Поиск","search.clear":"Очистить поиск","search.placeholder":"Поиск по названию или описанию навыка","select.file.invalid":"Выберите .zip или один файл SKILL.md.","select.folder.invalid":"В выбранной папке не найдено SKILL.md.","skill.toggle":"Вкл/выкл навык","source.dsh.note":"Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.","source.external.note":"Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.","source.toggle":"Вкл/выкл источник","status.bundle":"Набор навыков","status.disabled":"Отключён","status.discovered":"Обнаружен","status.enabled":"Загружен","status.invalid":"Есть проблемы","status.manageable":"Управляемый","status.project":"Проектный","status.rank":"Приоритет {rank}","status.readonly":"Источник только для чтения","status.selected":"Выбрано","status.shadowed":"Перекрыт","status.single":"Один файл","status.source.off":"Отключён","status.source.on":"Загружен","summary.disabled":"Отключено: {count}","summary.group":"Навыков: {count}","summary.issues":"Проблем: {count}","summary.loaded":"Загружено в DSH: {count}","summary.total":"Навыков: {count}","table.skill":"Название и описание навыка","table.status":"Состояние в DSH","title":"Навыки","trash.count":"Навыков в очереди: {count}","trash.deletedAt":"Удалено {time}","trash.empty":"Корзина пуста.","trash.source":"Источник: {source}","trash.title":"Корзина","upload.drop.copy":"Поддерживаются .zip, папка навыка или один SKILL.md","upload.drop.title":"Перетащите навык сюда","upload.importing":"Установка…","upload.remove":"Убрать выбранное","upload.requirement.copy":"Импорт копирует содержимое целиком и не меняет источник","upload.requirement.frontmatter":"SKILL.md должен содержать YAML-название и описание","upload.requirement.skill":"Архив или папка должны содержать SKILL.md","upload.requirements":"Требования к файлам","upload.selected":"Файлов: {count} · {size}","warning.backupUncleaned":"Резервная копия старой версии не удалена: {path} ({error})","warning.project.unavailable":"Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}","warning.state.invalid":"Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}"},"slash.menu":{"command":"Команды","loading":"Загрузка…","skill":"Скиллы","subagent":"Субагенты","suggestions.aria":"Подсказки по вводу"},"subagent":{"activity.inactive":"не работает","activity.running":"работает","branch.collapse":"Свернуть потомков {label}","branch.expand":"Развернуть потомков {label}","count.running.few":"{count} субагента работает","count.running.many":"{count} субагентов работает","count.running.one":"{count} субагент работает","count.running.other":"{count} субагентов работает","count.total.few":"{count} субагента","count.total.many":"{count} субагентов","count.total.one":"{count} субагент","count.total.other":"{count} субагентов","diagnostic.corrupt":"запись сессии повреждена","diagnostic.unavailable":"запись сессии временно недоступна","diagnostic.unsupported":"неподдерживаемая версия записи субагента","duration.days":"{days} дн","duration.daysHours":"{days} дн {hours} ч","duration.exactDays":"{days} дн {hours} ч {minutes} мин {seconds} с","duration.exactTitle":"Всего активного времени: {duration}","duration.hours":"{hours} ч {minutes} мин {seconds} с","duration.minutes":"{minutes} мин {seconds} с","duration.months":"~{months} мес","duration.monthsDays":"~{months} мес {days} дн","duration.seconds":"{seconds} с","duration.years":"~{years} г","duration.yearsMonths":"~{years} г {months} мес","load.error":"Не удалось загрузить субагентов","loading.aria":"Загрузка субагентов","loading.label":"Загрузка субагентов…","mode.continuable":"с продолжением","mode.oneShot":"разовый","readonly.body":"Родительская сессия офлайн; откройте её заново, чтобы продолжить переписку.","readonly.oneShot.body":"Разовые задачи не принимают продолжения; здесь можно изучить полную запись выполнения.","readonly.oneShot.title":"Запись разового субагента","readonly.title":"Пока этот субагент доступен только для чтения","retry":"Повторить","switcher.aria":"Переключить субагента: {title}","tree.aria":"Сессии субагентов"},"task-board":{"archive.empty":"В архиве пусто","board.archive":"Архив","board.archiveView":"Архив ({count})","board.backToBoard":"К доске","board.close":"В чат","board.created":"Создана","board.empty":"В этой колонке задач нет","board.filterAll":"Все","board.hostError":"Действие на хосте не удалось: {error}","board.hostMeta":"Часовой пояс хоста {timeZone} · ревизия {revision}","board.new":"Новая задача","board.pending":"Отправка","board.retryHost":"Переподключиться к хосту","board.runs":"запусков","board.search":"Фильтр задач…","board.status":"Статус","board.status.backlog":"Бэклог","board.status.done":"Готово","board.status.failed":"Ошибка","board.status.running":"В работе","board.status.todo":"К выполнению","board.title":"Доска задач","board.updated":"Обновлена","card.scheduled":"по расписанию","delete.cancel":"Отмена","delete.confirm":"Удалить «{name}»? Отменить это будет нельзя.","delete.ok":"Удалить","delete.title":"Удаление задачи","detail.archive":"В архив","detail.archivedAt":"В архиве · {time}","detail.close":"Закрыть","detail.delete":"Удалить","detail.description":"Описание","detail.execution":"История запусков","detail.executionEnded":"Завершён","detail.executionSettings":"Параметры запуска","detail.executionStarted":"Начат","detail.noExecution":"Ещё не запускалась","detail.noSession":"Сессии нет","detail.prompt":"Промпт запуска","detail.rerun":"Запустить снова","detail.restore":"Вернуть из архива","detail.result.cancelled":"Отменён","detail.result.failed":"Ошибка","detail.result.running":"Выполняется","detail.result.succeeded":"Успешно","detail.run":"Запустить","detail.schedule":"Запуски по расписанию","detail.schedule.cron":"Выражение cron","detail.schedule.dueSoon":"Скоро","detail.schedule.enable":"Включить запуски по расписанию","detail.schedule.invalid":"Неверное выражение cron","detail.schedule.lastTriggered":"Последний запуск","detail.schedule.nextRun":"Следующий запуск","detail.schedule.notScheduled":"Расписания пока нет","detail.schedule.preset.daily9":"Каждый день в 09:00","detail.schedule.preset.hourly":"Каждый час","detail.schedule.preset.tenMin":"Каждые 10 минут","detail.schedule.preset.weeklyMon9":"По понедельникам в 09:00","detail.schedule.presets":"Готовые варианты","detail.title":"Задача","detail.viewSession":"Открыть сессию","entry.label":"Доска задач","exec.error.noWorkspace":"Нет рабочей папки, в которой можно выполнить задачу","exec.error.promptRejected":"Промпт отклонён","exec.hint":"Применяется при запуске задачи: рабочая папка определяет, где появится сессия выполнения; режим задаёт пресет агента; разрешение выставляется командой /permission. Пусто — как по умолчанию в рантайме.","exec.mode.brokenSuffix":" (недоступен)","exec.mode.default":"Как в установке","exec.mode.defaultSuffix":" (по умолчанию)","exec.mode.removed":" (удалён)","exec.permission.danger-full-access":"Полный доступ","exec.permission.default":"Как в сессии","exec.permission.read-only":"Только чтение","exec.permission.workspace-write":"Запись в рабочую папку","exec.workspace.recent":"Последняя (по умолчанию)","new.cancel":"Отмена","new.description":"Описание","new.descriptionPlaceholder":"Контекст, границы, критерии приёмки (необязательно)","new.mode":"Режим","new.permission":"Разрешения","new.prompt":"Промпт запуска","new.promptPlaceholder":"Полная инструкция агенту (если пусто, возьмётся заголовок)","new.required":"Нужен заголовок","new.submit":"Создать","new.title":"Заголовок","new.titlePlaceholder":"Что нужно сделать, одной строкой","new.workspace":"Рабочая папка","run.failed":"Запуск не удался: {error}","settings.announceToAgent":"Сообщать агентам о доске задач","settings.announceToAgentHint":"Включено: в системный промпт каждого агента добавляется упоминание доски. Выключено: агенты узнают о ней, только если вы скажете сами.","settings.collapse":"Скрыть настройки","settings.description":"Настройка доски задач на хосте, упоминания в промпте и защиты от засыпания, пока есть незавершённая работа.","settings.discard":"Отменить","settings.enabled":"Включить доску задач","settings.enabledHint":"Когда выключено, пункт в панели и сама доска скрыты.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","settings.notExposed":"Эта версия DSH не выводит namespace настроек плагина на страницу конфигурации, поэтому форма недоступна. Правьте ~/.dsh/settings.yaml напрямую или добавьте namespace в список WEB_SETTINGS_NAMESPACES у dsh-host-apiproxy и перезапустите.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.powerBoundary":"Батарея будет расходоваться быстрее. Закрытие крышки, ручной уход в сон, гибернация, выключение, действия при низком заряде и корпоративные политики под гарантию не попадают; уже спящий компьютер не разбудят.","settings.powerError":"Последняя ошибка защиты от засыпания: {error}","settings.powerStatus":"Платформа: {platform}; защита: {phase}; работающих сессий: {running}; включённых расписаний: {schedules}","settings.powerUnknown":"неизвестно","settings.preventIdleSleep":"Не давать системе засыпать","settings.preventIdleSleepHint":"По умолчанию выключено. Когда включено, хост не даёт системе уйти в сон, пока работает хоть одна сессия DSH, включено расписание или состояние сессий ещё неизвестно. Экран при этом может гаснуть.","settings.readOnly":"В этой установке настройки доступны только для чтения.","settings.reset":"Вернуть по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","settings.saving":"Сохранение…","settings.title":"Доска задач","settings.unsaved":"Не сохранено","status.move.backlog":"В бэклог","status.move.todo":"К выполнению","time.justNow":"только что"},"trajectory":{"toolbar.actualTime":"Реальное время","toolbar.aria":"Панель траектории","toolbar.calls":"Вызовы","toolbar.collapseCalls":"Свернуть вызовы","toolbar.collapseTurns":"Свернуть ходы","toolbar.duration":"Длительность","toolbar.expandCalls":"Развернуть вызовы","toolbar.expandTurns":"Развернуть ходы","toolbar.search":"Поиск по траектории","toolbar.searchPlaceholder":"Поиск","toolbar.turns":"Ходы","toolbar.useActualDuration":"По реальной длительности","toolbar.useEqualWidth":"Операции равной ширины","view.trajectory":"Траектория"},"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"usageStats":{"account.balanceMode":"Баланс API","account.blocked":"Запрос к учетной записи был заблокирован локальной политикой безопасности. Проверьте настройки HTTPS, same-origin и private-network.","account.health.age":"Возраст данных","account.health.lastAttempt":"Последняя попытка","account.health.lastSuccess":"Последний успех","account.health.provenance":"Источник","account.invalidResponse":"Провайдер вернул нераспознанные данные о квоте.","account.loading":"Загрузка провайдеров…","account.provenance.configured":"Настроено","account.provenance.experimental":"Экспериментальный","account.provenance.official":"Официальный API","account.provenance.provider":"API провайдера","account.provenance.unknown":"Неизвестно","account.provider":"Текущий провайдер","account.reason.allAddressesUnreachable":"Ни один из проверенных сетевых адресов не доступен.","account.reason.blockedNetwork":"Запрос на учетную запись был заблокирован политикой локальной сети.","account.reason.dnsResolutionFailed":"Имя хоста провайдера не удалось разрешить.","account.reason.noValidatedAddress":"Не было доступно ни одного проверенного адреса провайдера.","account.reason.rateLimited":"Провайдер ограничил проверку аккаунтов по частоте запросов.","account.reason.sub2apiBalanceShapeUnrecognized":"Конечная точка баланса Sub2API вернула данные в нераспознанном формате.","account.reason.timeout":"Запрос аккаунта завершился по тайм-ауту.","account.reason.unauthorized":"Учетные данные аккаунта были отклонены.","account.reason.unknown":"Проверка учетной записи завершилась неудачей без безопасного диагностического сообщения.","account.reason.upstreamInvalidJson":"Вверх по течению возвращен нечитаемый JSON","account.reason.upstreamInvalidResponse":"Восходящий поток вернул нераспознанный ответ.","account.reason.upstreamNotJson":"Ответ вышестоящего сервера не был в формате JSON","account.reason.upstreamTooLarge":"Ответ от вышестоящего сервера превысил допустимый размер.","account.status.blocked":"Заблокировано","account.status.invalidResponse":"Неверный ответ","account.status.loading":"Загрузка","account.status.stale":"Устаревшие данные","account.status.unknown":"Неизвестно","account.status.unsupported":"Баланс не поддерживается","account.title":"Аккаунт провайдера","action.close":"Закрыть","action.nextMonth":"Следующий месяц","action.prevMonth":"Предыдущий месяц","action.refresh":"Обновить","action.retry":"Повторить","action.today":"Сегодня","balance.available":"доступно","balance.error":"Не удалось получить баланс: {message}","balance.granted":"Предоставлено","balance.loading":"Получение баланса…","balance.noCredential":"{ref} не настроен (отредактируйте ~/.dsh/.credentials.yaml)","balance.noSchemeTag":"нет баланса API","balance.provider":"Провайдер","balance.remaining":"Доступный баланс","balance.title":"Баланс счета","balance.toppedUp":"Пополнено","balance.total":"Общий баланс","balance.unavailable":"недоступно","balance.unsupported":"У этого провайдера нет публичного интерфейса для проверки баланса.","balance.used":"Использовано","billing.monthly":"≈ {amount}/мес","billing.parts":"Композиция","billing.projected":"Прогнозируемое использование на конец месяца","billing.tokenOnly":"расчет на основе использования","billing.total":"Ориентировочные ежемесячные траты","budget.exceeded":"превышен бюджет","budget.level.critical":"Превышение бюджета","budget.level.normal":"Обычный","budget.level.unknown":"Неполная стоимость","budget.level.warning":"Близко к бюджету","budget.over":"{pct}% бюджета использовано","budget.period.daily":"Оценка за сегодня","budget.period.monthly":"Ожидаемый за этот месяц","budget.remaining":"осталось","budget.summary":"{period}: {spent} / {limit} · {level}","budget.title":"Ежемесячный бюджет","budget.used":"использовано","col.cacheRead":"Чтение кэша","col.cacheWrite":"Запись в кеш","col.calls":"Звонки","col.cost":"Стоимость","col.created":"Создано","col.cwd":"Рабочая папка","col.day":"День","col.default":"Стандартная ставка","col.hour":"Время","col.input":"Ввод","col.model":"Модель","col.models":"Модели","col.output":"Вывод","col.price":"Тариф","col.provider":"Провайдер","col.session":"Сессия","col.sessions":"Сессии","col.share":"Поделиться","col.time":"Время","col.tokens":"Токены","col.turn":"Поворот/шаг","curve.cost":"Стоимость","curve.empty":"Нет данных о сериях (нет вызовов в указанном интервале)","curve.legendCacheRead":"Чтение кеша","curve.legendInput":"Ввод","curve.legendOutput":"Вывод","curve.tokens":"Токены","details.auto":"Автоматически обновляется вместе с главным окном","details.exportCalls":"Экспорт журнала вызовов в CSV","details.exportCsv":"Экспорт CSV","details.exportJson":"Экспортировать JSON","details.hint":"Звонки, токены и стоимость за сессию × модель","details.open":"Открыть подробности в новом окне","details.title":"Детали звонка · сессия × модель","details.updated":"Обновлено","duration.daysHours":"{days}д {hours}ч","duration.hoursMinutes":"{hours}ч {minutes}м","duration.minutes":"{minutes}м","export.dailyCsv":"Ежедневный CSV","export.json":"Полный JSON","export.sessionsCsv":"Сессии CSV","export.title":"Экспорт без секретов","filter.all":"Все рабочие пространства","filter.scope":"Фильтровать статистику по одной рабочей директории","footnote.disclaimer":"Стоимость рассчитана на основе установленных тарифов и не является счетом.","footnote.errors":"({errors} логов не удалось декодировать)","footnote.scanned":"{sessions} сессий, {calls} звонков просканировано","heatmap.empty":"Данные тепловой карты пока отсутствуют","heatmap.fri":"Пт","heatmap.less":"Меньше","heatmap.mon":"Пн","heatmap.month":"{m}","heatmap.more":"Ещё","heatmap.title":"Тепловая карта активности (52 недели)","heatmap.wed":"Ср","lastUpdated":"Обновлено","month.names":"Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек","month.year":"{month} {year}","orcarouter.addError":"Не удалось добавить OrcaRouter. Пожалуйста, попробуйте ещё раз.","orcarouter.choiceSuffix":"(Спонсированная интеграция)","panel.badge":"Использование/Баланс","panel.title":"Расход и баланс","panel.updatedAt":"Обновлено в {time}","perf.empty":"Нет данных о производительности (отсутствуют временные метки в журналах)","perf.est":"прибл.","perf.latencyAvg":"Средняя задержка","perf.modeTps":"токены/с","perf.modeTtft":"ТТФТ","perf.note":"TTFT = запрос → первый токен контента. Последующие шаги в цикле инструментов не имеют отдельного лога запросов, поэтому их TTFT оценивается с начала шага.","perf.samples":"Образцы","perf.title":"Скорость и задержка модели","perf.tps":"токенов/с","perf.ttftAvg":"Среднее значение TTFT","perf.ttftP50":"ТТФТ P50","perf.ttftP90":"TTFT P90","plan.auto":"авто","plan.balance":"Баланс","plan.code":"План кода","plan.noBalance":"не настроен баланс","plan.perMonth":"месяц","plan.period":"последние {days} дней","plan.quota":"квота","plan.remaining":"Осталось","plan.requests":"запросы","plan.subscription":"Подписка","plan.tiers":"Уровни","plan.token":"Тарифный план","plan.tokenEstimate":"оценка токенов","plan.tokens":"Токены","plan.used":"Использовано","plan.usedCost":"Стоимость использования","pricing.peakOffpeak":"пиковый/непиковый","recent.anomaly":"Аномалия стоимости (значительно выше среднего)","refresh":"Обновить","section.byCwd":"Рабочий каталог","section.byDay":"Днём","section.byModel":"По модели","section.byProvider":"По провайдеру","section.bySession":"По сеансу","section.plans":"Тарифы","section.pricing":"Тарифы (за миллион токенов)","section.recent":"Последние звонки","section.series":"Временные ряды","state.empty":"Данные об использовании токенов пока отсутствуют (нет вызовов с использованием)","state.error":"Не удалось загрузить","state.loading":"Вычисление…","state.retry":"Повторить","subscription.error":"Не удалось использовать подписку: {message}","subscription.loading":"Получение данных об использовании подписки…","subscription.notConfigured":"Настройте {refs} для отображения текущего использования подписки.","subscription.planUnknown":"План подписки","subscription.rateLimited":"Провайдер ограничивает частоту проверок; попробуйте позже.","subscription.resetDue":"Сброс квоты","subscription.resets":"Сбросится через {time}","subscription.status.notConfigured":"Не настроено","subscription.status.ok":"В прямом эфире","subscription.status.rateLimited":"Ограничение по частоте запросов","subscription.status.unauthorized":"Войдите снова","subscription.status.unavailable":"Недоступно","subscription.title":"Использование подписки","subscription.unauthorized":"Учетные данные истекли; обновите их и повторите попытку.","subscription.unavailable":"Провайдер не вернул распознаваемых окон квот.","subscription.used":"{value}% использовано","subscription.window.daily":"Ежедневное окно","subscription.window.mcp":"Ежемесячная квота MCP","subscription.window.monthly":"Ежемесячное окно","subscription.window.quota":"Общая квота","subscription.window.session":"5-часовое окно","subscription.window.weekly":"Еженедельное окно","summary.activeDays":"Активные дни","summary.avgCost":"Среднее / вызов","summary.cacheHit":"Процент попаданий в кеш","summary.cacheRead":"Чтение кэша","summary.cacheWrite":"Запись в кеш","summary.calls":"Звонки","summary.cost":"Примерная стоимость","summary.input":"Ввод","summary.output":"Вывод","summary.sessions":"Сессии","summary.streak":"Дневная серия","summary.today":"Сегодня","summary.tokens":"Всего токенов","tab.details":"Детали звонка","tab.overview":"Обзор","tab.perf":"Производительность","tab.today":"Сегодня","today.calls":"Звонков сегодня","today.cost":"Стоимость сегодня","today.empty":"Сегодня звонков еще не было","today.title":"Сегодняшние токены и стоимость","today.tokens":"Токены сегодня","usage.back":"Назад","usage.cacheRead":"Чтение кэша","usage.error":"Агрегация использования не удалась: {message}","usage.heatmap":"Ежедневное использование в этом месяце","usage.hit.today":"Сегодняшний процент попаданий в кэш","usage.hitRate":"Кэш-попадание","usage.input":"Ввод","usage.legendLess":"Меньше","usage.legendMore":"Ещё","usage.loading":"Агрегирование использования…","usage.month":"В этом месяце","usage.noModels":"Нет данных по моделям за этот день.","usage.output":"Вывод","usage.recent":"Последние 14 дней","usage.title":"Использование токенов","usage.today":"Сегодня","usage.total":"За всё время","usage.unknownModel":"Неизвестная модель","weekday.fri":"Ф","weekday.mon":"М","weekday.sat":"С","weekday.sun":"С","weekday.thu":"Т","weekday.tue":"Т","weekday.wed":"В","widget.close":"Свернуть","widget.hint":"Использование токенов & примерная стоимость","widget.hoverHint":"Нажмите, чтобы развернуть","widget.open":"Развернуть"},"workflowRun":{"member.empty":"Пустое имя участника","member.open":"Открыть {name}","phase.empty":"Пустое имя фазы","phase.unassigned":"Вне фаз","run.empty":"Ни один участник не запущен","run.members.few":"{count} участника","run.members.many":"{count} участников","run.members.one":"{count} участник","run.members.other":"{count} участников","run.title":"{name}","status.cancelled":"Отменено","status.completed":"Завершено","status.failed":"Ошибка","status.interrupted":"Прервано","status.running":"Работает","statusCount.cancelled":"Отменено: {count}","statusCount.completed":"Завершено: {count}","statusCount.failed":"Ошибок: {count}","statusCount.interrupted":"Прервано: {count}","statusCount.running":"Работает: {count}"},"workspace":{"actions.newSession.aria":"Новая сессия в {name}","actions.session.aria":"Действия с сессией {name}","actions.workspace.aria":"Действия с рабочей папкой {name}","conflict.named":"Рабочая папка «{name}» уже есть.","date.ymd":"{d}.{m}.{y}","delete.desc":"Уберёт «{name}» из списка рабочих папок. Сама папка и журналы сессий останутся, а её сессии переедут в «Без папки».","delete.pending":"Удаление рабочей папки…","delete.workspace":"Удалить рабочую папку","empty.noMatches":"Ничего не найдено","empty.none":"Сессий пока нет","field.sessionName":"Название сессии","field.workspaceName":"Название рабочей папки","folderError.retry":"Выбрать снова","folderError.title":"Не удалось открыть папку","group.ungrouped":"Без папки","groupBy.flat":"Одним списком","groupBy.label":"Группировать","groupBy.workspace":"По рабочим папкам","hover.copied":"Скопировано","hover.created":"Создано {time}","menu.addWorkspace":"Добавить рабочую папку…","menu.archiveSession":"Убрать сессию в архив","menu.fork":"Ответвить сессию","orderBy.label":"Сортировать","orderBy.manual":"Вручную","orderBy.updated":"По изменению","picker.loading":"Загрузка рабочих папок…","rename":"Переименовать","rename.session.title":"Переименовать сессию","rename.workspace.title":"Переименовать рабочую папку","search.clear":"Очистить поиск","search.hasMore":"Показаны первые {n} результатов. Уточните запрос.","search.hasMore.few":"Показаны первые {n} результата. Уточните запрос.","search.hasMore.one":"Найден один подходящий результат.","search.noMatches":"Подходящих сессий нет","search.pending":"Поиск по истории сессий…","search.placeholder":"Поиск по сессиям...","search.results.aria":"Результаты поиска","search.sessions.aria":"Поиск сессий","search.unavailable":"Поиск по содержимому временно недоступен. Показаны совпадения по названию.","section.sessions":"Сессии","section.workspaces":"Рабочие папки","session.new":"Новая сессия","sessions.collapse":"Показать меньше","sessions.count.few":"{n} сессии","sessions.count.many":"{n} сессий","sessions.count.one":"{n} сессия","sessions.count.other":"{n} сессий","sessions.expand":"Показать ещё {n}","status.completed":"Завершено","status.idle":"Простаивает","status.planReview":"План ждёт проверки","status.running":"Работает","status.subagentsRunning.few":"{n} субагента работает","status.subagentsRunning.many":"{n} субагентов работает","status.subagentsRunning.one":"{n} субагент работает","status.subagentsRunning.other":"{n} субагентов работает","status.waitingAnswer":"Ждёт ответа","status.waitingApproval":"Ждёт подтверждения","time.ago":"{t} назад","time.days":"{n} дн","time.hours":"{n} ч","time.minutes":"{n} мин","time.months":"{n} мес","time.now":"только что","time.years":"{n} г","viewOptions.label":"Параметры отображения","workspace.add":"Добавить рабочую папку"}}
366
+ const RU = {"agentTeams":{"action.openActivityPanel":"Открыть панель активности","activity.badgeAria":"Активность и история команд агентов, {count} записей команд","activity.collapse":"Свернуть панель активности","activity.dockRight":"Закрепить справа","activity.empty":"Нет активности команды","activity.float":"Переключиться на плавающую панель","activity.panelAria":"Панель активности команд агентов","activity.panelButton":"Панель активности","activity.title":"Активность команд агентов","archive.discardedLabel":"План отменен · Архивная история","archive.label":"Завершено · Архивная история","assignment.discarded":"План отклонён","assignment.empty":"Нет задач","assignment.label":"Капитан назначен","assignment.staged":"Запланировано","captain.name":"Капитан","captain.role":"Разделить · Делегировать · Синтезировать","captain.state.awaitingFeedback":"Ожидание отзыва","captain.state.collected":"Все полученные отчеты","captain.state.discarded":"Отменено","captain.state.settled":"Завершено","captain.state.staged":"Ожидает одобрения","captain.state.takeover":"Работаю над {tasks}","captain.state.waiting":"Ожидание отчетов","captain.state.working":"{count} активных","captain.summary":"Назначено {tasks} задач {members} участникам","captain.summary.awaitingFeedback":"Черновой вариант сохранен; ожидаем ваших указаний по доработке в чате","captain.summary.discarded":"План отклонён: {members} участников не созданы и {tasks} задач не выполнены","captain.summary.staged":"Запланировано {tasks} задач и {members} участников; ожидают утверждения","captain.summary.withTakeover":"Назначено {tasks} участникам · Капитан владеет {captainTasks}","card.memberCount":"{count} участников","delegation.aria":"Карта делегирования капитана","dependency.aria":"Цепочка зависимостей задач","dependency.hint.chain":"Наведите для подсветки зависимостей · Нажмите, чтобы закрепить","dependency.hint.parallel":"Нет зависимостей · Нажмите для подробностей","dependency.hint.pinned":"{taskId} закреплена · Esc для сброса","dependency.parallel":"Параллельные задачи","dependency.title":"Зависимости задач","format.listSeparator":",","member.model":"{model}","member.state.delivered":"Доставлено","member.state.failed":"Имеются сбои","member.state.left":"Покинул команду","member.state.notCreated":"Не создано","member.state.pending":"Ожидание","member.state.removed":"Удалено","member.state.staged":"В плане (не создан)","member.state.stopped":"Остановлено","member.state.unassigned":"Ожидание назначения","member.state.waiting":"Ожидание","member.state.working":"Работает","member.status.delivered":"Задачи выполнены","member.status.discarded":"План отклонён; участник не был создан","member.status.executing":"Работа над {taskId}","member.status.executingModel":"Работа над {taskId} · {model}","member.status.idle":"Готовы продолжить","member.status.settled":"Вся назначенная работа выполнена","member.status.staged":"Будет создан после одобрения","member.status.stopped":"Команда остановлена; требуется явное возобновление","member.status.unknown":"Статус неизвестен","member.status.waitingAssignment":"Ожидание назначения работы от капитана","member.status.waitingOn":"Ожидание {taskId} · {assignee}","member.status.waitingPrerequisite":"Ожидание выполнения предварительных условий","member.status.working":"Работа над назначенными задачами","members.collapse":"Свернуть","members.empty":"Пока нет участников; ожидаем, пока капитан соберёт команду","members.expand":"Развернуть","members.toggle":"Участники {count}","plan.addTask":"Добавить задачу","plan.adding":"Добавление…","plan.approve":"Одобрить и запустить","plan.approveConfirm":"Подтвердить запуск","plan.approveConfirmTitle":"Подтвердить запуск команды","plan.approveHint":"Одобрение создаёт {members} участников и планирует {tasks} задачи.","plan.approveTitle":"План готов?","plan.approveWarning":"Маршруты участников и зависимости нельзя редактировать здесь после запуска.","plan.approving":"Создание участников…","plan.badge":"Ожидание подтверждения","plan.cancel":"Отмена","plan.continue":"Вернуться в чат и исправить","plan.dependencies.count":"{count} зависимостей","plan.dependencies.none":"Нет зависимостей","plan.description":"Участники не были созданы, и задачи не были назначены. Отредактируйте черновик здесь или вернитесь в чат и сообщите Капитану, что нужно изменить.","plan.discard":"Отменить этот план","plan.discardConfirm":"Отменить план","plan.discardConfirmTitle":"Отменить этот план?","plan.discardWarning":"План будет завершён и заархивирован. Участники не были созданы, и задачи выполняться не будут.","plan.discarding":"Отмена…","plan.failed":"Операция не удалась: {message}","plan.feedbackHint":"Капитан спросит в чате. После вашего ответа он пересмотрит этот черновик и снова будет ждать одобрения.","plan.feedbackTitle":"Ожидание ваших указаний по исправлению","plan.flow.aria":"Процесс запуска команды","plan.flow.review":"Просмотреть план","plan.flow.run":"Начать работу","plan.flow.spawn":"Создать участников","plan.member.model":"Модель","plan.member.prompt":"Роль подсказки","plan.member.provider":"Провайдер","plan.member.reasoning":"Усилие на рассуждение","plan.member.reasoningHint":"Оставьте пустым для значения по умолчанию; принимает low, medium, high, xhigh и другие.","plan.member.role":"Роль","plan.member.roleFallback":"Роль не установлена","plan.members.count":"{count} участников","plan.members.empty":"Пока нет запланированных участников","plan.members.title":"Участники и маршруты моделей","plan.model.back":"Назад","plan.model.choose":"Выберите модель","plan.model.currentUnavailable":"{provider}/{model} (нет в текущем каталоге)","plan.model.defaultReasoning":"Усилия по умолчанию при рассуждении","plan.model.empty":"Нет доступных моделей","plan.model.loading":"Загрузка моделей…","plan.model.modelDefault":"Модель по умолчанию ({effort})","plan.model.partialFailure":"{count} каталогов провайдеров не удалось загрузить","plan.model.providerDefault":"Провайдер по умолчанию","plan.model.retry":"Повторить","plan.model.route":"Маршрут: {provider}/{model}","plan.model.triggerAria":"Выберите модель участника, текущая {model}, уровень усилий для рассуждений {effort}","plan.newTask":"Новая тема задачи","plan.newTaskLabel":"Добавить запланированную задачу","plan.pendingEdits":"Сохраните текущие изменения перед запуском команды.","plan.readySummary":"{members} участников · {tasks} задач · {links} зависимостей","plan.remove":"Удалить","plan.removeConfirm":"Подтвердите удаление","plan.removeWarning":"Удаление {task} приведет к пересчету зависимостей ниже по цепочке.","plan.removed":"Задача удалена","plan.returnToChat":"Вернуться в чат","plan.save":"Сохранить","plan.saved":"План сохранён","plan.saving":"Сохранение…","plan.task.assignee":"Исполнитель","plan.task.dependencies":"ID задач зависимостей (через запятую)","plan.task.dependenciesHint":"Например, task-1, task-2; циклы отклонены","plan.task.description":"Описание задачи","plan.task.subject":"Тема задачи","plan.task.unassigned":"Общий пул задач","plan.taskAdded":"Задача добавлена","plan.tasks.count":"{count} задач · {links} зависимостей","plan.tasks.empty":"Нет запланированных задач","plan.tasks.title":"Задачи и зависимости","plan.title":"Проверка плана перед запуском","plan.unsaved":"Не сохранено","progress.aria":"Общий прогресс команды","progress.blocked":"■ Ожидание {count}","progress.delivered":"■ Доставлено {count}","progress.running":"■ В процессе {count}","progress.title":"Общий прогресс","task.assignee.unclaimed":"Невостребованные","task.detail.completed":"Завершено и доставлено","task.detail.noDownstream":"Нет последующих задач","task.detail.noPrerequisite":"Нет требований; готовы начать","task.detail.notRun":"План отменён; задача не была выполнена","task.detail.ready":"Предварительные условия выполнены; можно начинать","task.detail.unlocks":"Разблокирует {tasks} после завершения","task.detail.waitingOn":"Ожидание {tasks}","task.model":"Модель: {model}","task.runningAria":"Выполняется","task.status.cancelled":"Отменено","task.status.claimed":"Заявлено","task.status.completed":"Завершено","task.status.failed":"Не удалось","task.status.inProgress":"Выполняется","task.status.notRun":"Не запущено","task.status.pending":"Невостребованные","task.summary.allDelivered":"Все {count} задачи доставлены","task.summary.blocked":"{tasks} ожидают выполнения предварительных условий","task.summary.blockedAndRunning":"{tasks}{more} ожидают выполнения предварительных условий; другая работа уже начата","task.summary.discarded":"{count} запланированных задач отменено; ни одна не выполнена","task.summary.ended":"Итог: {completed} доставлено · {cancelled} отменено · {failed} не удалось","task.summary.failedSettled":"{count} ошибок; автоматический цикл остановлен","task.summary.more":"и ещё {count}","task.summary.ready":"{tasks} готовы к началу","task.summary.running":"{tasks} в процессе выполнения","task.summary.staged":"{count} запланированных задач ожидают утверждения","task.summary.waitingBreakdown":"Ожидание, пока капитан распределит работу","task.summary.waitingSchedule":"Ожидание следующего цикла планирования","team.discarded":"Отклонено","team.ended":"Завершено","team.stats.completed":"{completed}/{total} завершено","team.stats.members":"{count} участников","team.stats.messages":"{count} сообщений","team.stop":"Остановить команду","team.stopCancel":"Продолжать работу","team.stopConfirm":"Остановить команду","team.stopDescription":"Это отменяет {tasks} незавершённых задач и останавливает {members} работающих участников. Завершённые результаты сохраняются.","team.stopFailed":"Не удалось остановить команду: {message}","team.stopRequestFailed":"Сервер не смог остановить эту команду. Попробуйте снова.","team.stopTitle":"Остановить “{team}”?","team.stopped":"Остановлено","team.stopping":"Остановка…"},"betterSidebar":{"addPluginsBrowseMore":"Ещё плагины на GitHub (тема: dsh-better-sidebar)","addPluginsEmpty":"Подборки пока нет — опубликуйте свой плагин под темой на GitHub","addPluginsNoMatch":"Нет подходящих плагинов","addPluginsRecommended":"Рекомендуемые плагины","addPluginsSearch":"Поиск по названию или описанию плагина…","addPluginsTabCard":"Добавить плагины вкладок","addPluginsTabCardDesc":"Зарегистрировать новую страницу панели","addPluginsTabDesc":"Страницы панели (вкладки) расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addPluginsViewerCard":"Добавить плагины предпросмотра","addPluginsViewerCardDesc":"Зарегистрировать просмотр нового типа файлов","addPluginsViewerDesc":"Просмотрщики файлов расширяются плагинами. Плагины регистрируются через сервис ctx.betterSidebar; кнопка «Установить» копирует команду — вставьте её в терминал на машине с профилем DSH и выполните.","addToConversation":"Добавить в диалог","binary":"Двоичный файл, предпросмотр недоступен","binaryNoPreview":"Этот тип файлов нельзя показать","branch":"Ветка","brokenSymlink":"Битая ссылка","browser":"Браузер","browserBack":"Назад","browserBlockedLoopback":"Заблокировано: локальные и внутренние адреса здесь открывать нельзя","browserBlockedScheme":"Заблокировано: разрешены только адреса http и https","browserEmbedAnyway":"Всё равно загрузить","browserEmbedBlocked":"{host} запрещает встраивание","browserEmbedBlockedDesc":"Сайт запрещает показывать себя внутри других страниц (X-Frame-Options / frame-ancestors), поэтому в панели он не откроется. Откройте его в обычном браузере.","browserForward":"Вперёд","browserGo":"Перейти","browserInvalid":"Неверный адрес","browserNoSandboxWarning":"Песочница выключена: страница работает с полными правами интерфейса (включить обратно можно в настройках)","browserOpenExternal":"Открыть в браузере","browserPlaceholder":"Введите адрес, например example.com","browserStart":"Введите адрес, чтобы начать (режим песочницы)","cancel":"Отмена","changes":"Изменения","checkoutError":"Переключить ветку не удалось","cherryPickCommit":"Перенести коммит","cherryPickDesc":"Применить изменения «{subject}» к текущей ветке.","cherryPickTitle":"Перенос коммита","close":"Закрыть","closeLeftTabs":"Закрыть вкладки слева","closeOtherTabs":"Закрыть остальные вкладки","closePinnedTerminal":"Закрыть терминал","closeRightTabs":"Закрыть вкладки справа","collapse":"Свернуть панель","collapseBottomPanel":"Свернуть нижнюю панель","commit":"Закоммитить","commitError":"Коммит не удался","commitPlaceholder":"Сообщение коммита (Ctrl+Enter)","copied":"Скопировано","copy":"Копировать","copyAbsolute":"Копировать абсолютный путь","copyFullHash":"Копировать полный хеш","copyInstall":"Копировать команду установки","copyRelative":"Копировать относительный путь","copyShortHash":"Копировать короткий хеш","copySubject":"Копировать заголовок","diffAdded":"Добавлено","diffBinary":"Двоичный","diffCollapse":"Свернуть","diffDeleted":"Удалено","diffEmpty":"Текстовых изменений нет","diffExpand":"Показать ещё строк: {count}","diffLoadError":"Не удалось загрузить различия","diffRenamed":"Переименовано","discard":"Отменить изменения","discardDesc":"Изменения «{path}» в рабочем дереве будут отброшены без возможности вернуть.","discardTitle":"Отмена изменений","disconnected":"Терминал отключился, переподключаемся…","dockToSidebar":"Вернуть в боковую панель","download":"Скачать","downloadToView":"Скачать, чтобы посмотреть","edit":"Изменить","editor":"Редактор","editorEmptyHint":"Выберите файл в дереве или введите путь выше, чтобы открыть предпросмотр","editorExplorer":"Как открывать файлы","editorExplorerDesc":"Управляет поведением при открытии файлов","editorExplorerMerged":"В одном окне","editorExplorerMergedDesc":"Файлы сменяются в том же окне; новые окна открываются с деревом","editorExplorerSplit":"Раздельно","editorExplorerSplitDesc":"Окно без пути — это отдельный проводник (только дерево); каждый файл открывается своим окном (дерево пристыковано и по умолчанию закрыто)","editorPathPlaceholder":"Путь к файлу (от папки сессии или абсолютный), Enter — открыть","editorSearchNoResults":"Подходящих файлов нет","editorSearchPlaceholder":"Поиск файлов по имени…","editorSearchTruncated":"Слишком много совпадений — показана часть","editorTreeToggle":"Дерево файлов","error":"Не удалось загрузить","exited":"Процесс терминала завершился","expand":"Развернуть панель","expandBottomPanel":"Развернуть нижнюю панель","explorer":"Проводник","files":"Файлы","floatDropHint":"Отпустите, чтобы открыть в свободном окне","git":"Контроль версий","gitDetail":"Посмотреть изменения","hiddenFiles":"Скрытые файлы","history":"История","historyLoadError":"Не удалось догрузить историю","htmlNoSandboxWarning":"Песочница выключена: этот HTML работает с полными правами интерфейса (включить обратно можно в настройках)","jobDurationHours":"{hours} ч {minutes} мин","jobDurationMinutes":"{minutes} мин {seconds} с","jobDurationSeconds":"{seconds} с","jobHideOutput":"Скрыть вывод","jobKill":"Прервать","jobKillConfirm":"Нажмите ещё раз для подтверждения","jobKillError":"Прервать не удалось","jobNoOutput":"Вывода пока нет","jobNotReadYet":"Ждём, пока модель прочитает эту задачу; вывод появится здесь после вызова job_output","jobOutputError":"Не удалось прочитать вывод","jobOutputTruncated":"Вывод обрезан","jobStatusCompleted":"Завершена","jobStatusFailed":"Ошибка","jobStatusKilled":"Прервана","jobStatusRunning":"Выполняется","jobStatusStopping":"Останавливается","jobViewOutput":"Посмотреть вывод","jobs":"Фоновые задачи","jobsCount":"фоновых задач: {count}","jobsCountRunning":"фоновых задач: {count} · выполняется: {running}","loadMore":"Показать ещё","loading":"Загрузка…","mermaidError":"Ошибка рендеринга Mermaid","mermaidZoomHint":"Прокрутка для масштабирования · перетаскивание для перемещения · Esc для закрытия","mermaidZoomIn":"Увеличить","mermaidZoomOut":"Уменьшить масштаб","mermaidZoomReset":"Сбросить","moveToFreeWindow":"Переместить в свободное окно","newFile":"Новый файл","newTab":"Новая вкладка","newTerminal":"Новый терминал","noChanges":"Изменений нет","noSession":"Выберите диалог, чтобы пользоваться панелью","notRepo":"Эта папка не является репозиторием git","openEditor":"Открыть редактор","openExplorer":"Проводник","openFileNewTab":"Открыть в новой вкладке","openFileSide":"Открыть сбоку","openGit":"Панель git","openPlugin":"Открыть","openSubagent":"Задачи","openWithCursor":"Cursor","openWithExplorer":"Файловый менеджер","openWithMenu":"Открыть с помощью","openWithSettingsAdd":"Добавить","openWithSettingsCustomDesc":"Имя + шаблон URL (заполнитель {path}) + флаг семейства VSCode; в удалённом режиме только редакторы семейства VSCode могут открыть удалённый путь","openWithSettingsCustomTitle":"Пользовательские редакторы","openWithSettingsFamily":"Семейство VSCode","openWithSettingsFamilyDesc":"Этот редактор понимает URL-адреса VSCode (поддерживает открытие через SSH-удалённое подключение)","openWithSettingsInvalidHint":"Редакторы без имени или шаблоны без {path} / scheme:// не отображаются в меню","openWithSettingsName":"Имя","openWithSettingsRemove":"Удалить","openWithSettingsSshDesc":"Пусто = локальная рабочая область; с user@host или SSH-алиасом открыватели семейства VSCode переключаются на протокол vscode-remote/ssh-remote, а Файловый менеджер / Zed / пользовательские редакторы вне семейства VSCode скрываются из меню","openWithSettingsSshPlaceholder":"пользователь@хост или алиас SSH","openWithSettingsSshTitle":"SSH удаленный хост","openWithSettingsTemplate":"напр. cursor://file/{path}","openWithSshSuffix":"(SSH)","openWithVscode":"VS Code","openWithZed":"Zed","parent":"Родительская папка","pinAgentTerminal":"Закрепить терминал агента","pinOpenWith":"Закрепить в меню","pinTerminal":"Закрепить терминал","pinToGlobal":"Закрепить для всех","pinToWorkspace":"Закрепить в рабочей области","pinnedRailLabel":"Закреплённые терминалы","pinnedTerminalKindAgent":"Терминал агента","pinnedTerminalKindUi":"Терминал интерфейса","pinnedTerminalScopeGlobal":"Закреплено глобально","pinnedTerminalScopeWorkspace":"Закреплено в рабочей области","pinnedTerminalTooltip":"{kind} · {scope} · {cwd}","pluginDocsPanelDesc":"Глобальные документы в боковой панели DSH: читайте свои заметки в формате Markdown из любого рабочего пространства — список файлов, структура, открытие в Chrome / VS Code и кнопки копирования; директория документов настраивается (по умолчанию ~/.dsh/docs)","pluginEgoBrowserDesc":"Браузер агента для DeepSeek Harness: 32 инструмента ego_* управляют реальным Chromium, с нативной боковой панелью \"ego browser\", которая предоставляет живой просмотр каждой страницы, посещаемой агентом — вы можете кликать, перетаскивать и печатать, чтобы взять управление на себя. Регистрирует вкладку автоматически, если присутствует better-sidebar, в противном случае переходит на плавающий пузырь.","pluginFlowglassDesc":"Граф потока живого сеанса с тремя полосами для пользователя, ассистента и вызовов инструментов, а также параллельными группами, ветвями под-агентов, детализацией и текущим статусом; регистрирует вкладку Flowglass в нативном режиме при установке better-sidebar и сохраняет отдельный выдвижной ящик в качестве резерва.","pluginGitForgeDesc":"Вкладка Git Forge: библиотека аккаунтов GitHub/Gitea (и других форков) + права на проекты + политика жесткого пуша; токены остаются в локальных секретах (никогда в контексте модели); инструмент GitForge только для чтения и помощник для HTTPS-учетных данных агента","pluginGitRemotesDesc":"Вкладка Git Remotes: ветка, upstream, отставание и опережение, fetch (с необязательным prune), pull только ff-only и push после подтверждения во вкладке. Не заменяет встроенную вкладку git со стадированием и коммитами, не предлагает force-push и не даёт модели инструмент автопуша","pluginNotLoaded":"Плагин не загружен, вкладка недоступна:","pluginOfficeDesc":"Предпросмотр офисных файлов (.docx / .xlsx / .pptx) в редакторе better-sidebar; тяжёлые библиотеки рендеринга держатся вне основного бандла","pluginSentinelDesc":"Пробуждение агента по условию: датчики файлов, процессов, портов, http, команд и вебхуков будят спящие сессии, когда условие сработало; добавляет вкладку Sentinel с общей таблицей наблюдений","pluginSidebarQaDesc":"Выделил и спросил: выделите текст в диалоге, задайте вопрос в правой панели — откроется отдельная сессия-уточнение в той же рабочей папке; быстрая модель без рассуждений сжимает основной контекст и подставляет его вместе с цитатой, не прерывая основной диалог. Уточнения вкладываются, продолжаются и уходят в архив","pluginSshTunnelDesc":"Вкладка SSH-туннеля: инвентарь нескольких хостов + гранты для каждого проекта + локальные секреты; инструмент SSHManager (стратегии выполнения/ SFTP/сеансов); центральный интерактивный терминал и двухпанельный SFTP","pluginTurnReviewDesc":"Человеческий шлюз на только что завершённом ходе: Одобрить / Запросить изменения по пути с необязательным комментарием; пути сгруппированы по основной сессии / суб-агенту / без атрибуции; встроенное сравнение снимка и текущего состояния перед принятием решения. Без форка, без /rewind.","pluginVideoPreviewDesc":"Просмотр видео (.mp4/.webm/.mov/.mkv/.avi и других) прямо в редакторе better-sidebar через отдельный маршрут /video с поддержкой HTTP Range (206) — перемотка работает, ограничение mediaLimit в 20 МБ не действует","preview":"Предпросмотр","produced":"Создано","producedOpen":"Открыть в панели","referenceFile":"@файл","refresh":"Обновить","refreshUnsavedConfirm":"Файл изменился на диске. Обновление приведёт к потере несохранённых изменений. Продолжить?","retry":"Повторить","revertCommit":"Откатить коммит","revertDesc":"Создать в текущей ветке новый коммит, отменяющий «{subject}».","revertTitle":"Откат коммита","sandboxRestore":"Вернуть песочницу","sandboxStatusOn":"Песочница включена · страницы не видят данные интерфейса и локальные файлы; входы и сторонние куки могут не работать","sandboxUnlock":"Временно отключить (небезопасно)","save":"Сохранить","saveFailed":"Сохранить не удалось","saved":"Сохранено","settingsBottomTerminalDesc":"При первом разворачивании нижней панели в сессии открывать в ней новый терминал (ограничение на число терминалов сохраняется; по умолчанию включено)","settingsBottomTerminalTitle":"Открывать терминал при первом разворачивании нижней панели","settingsBrowserHttpDesc":"Если включено, клик по внешней http-ссылке в диалоге или интерфейсе открывает панель (страницы плагинов с urlTarget имеют приоритет); Ctrl/Cmd+клик всегда в обход","settingsBrowserHttpTitle":"Открывать http-страницы в панели","settingsBrowserHttpsDesc":"Если включено, клик по внешней https-ссылке открывает панель. По умолчанию выключено: большинство https-сайтов запрещают встраивание, поэтому системный браузер удобнее","settingsBrowserHttpsTitle":"Открывать https-страницы в панели","settingsBrowserLinksDesc":"Если включено, клик по внешней ссылке открывает панель, а не новое окно; http и https управляются отдельными переключателями ниже; Ctrl/Cmd+клик всегда в обход","settingsBrowserLinksTitle":"Открывать внешние ссылки из диалога в панели","settingsBrowserLoopbackDesc":"Разделённый запятыми список разрешённых адресов локальной петли (например, localhost:5174 или 127.0.0.1:8080), которые может посещать боковой браузер; пустое значение блокирует все локальные адреса по умолчанию. Песочница всё ещё применяется — страницы не могут читать данные GUI.","settingsBrowserLoopbackPlaceholder":"например, localhost:5174, 127.0.0.1:8080","settingsBrowserLoopbackTitle":"Разрешенные локальные адреса","settingsBrowserSandboxDesc":"С выключенной песочницей любой открытый сайт работает в том же origin, что и интерфейс: он может читать данные сессии и действовать от вашего имени. Включайте только для полностью доверенных сайтов","settingsBrowserSandboxTitle":"Отключить песочницу браузера (небезопасно)","settingsConflict":"Настройку изменили в другом окне — повторите","settingsCustomCssDesc":"Стили добавлены в конце страницы (поздние в каскаде выигрывают при равенстве; используйте !important для переопределения встроенных переменных, записанных через JS)","settingsCustomCssPlaceholder":"/* например, зарезервировать 36px для оболочки с нарисованной вручную строкой заголовка */\nhtml[data-dsh-title-bar-height=\"36\"] {\n --dsh-title-bar-strip: 36px !important;\n}","settingsCustomCssTitle":"Пользовательский CSS","settingsDone":"Готово","settingsFontFamilyDesc":"Своя гарнитура терминала (CSS-стек вида \"JetBrains Mono\", monospace; пусто — моноширинный шрифт темы)","settingsFontFamilyPlaceholder":"\"JetBrains Mono\", monospace","settingsFontFamilyTitle":"Шрифт терминала","settingsFontSizeDesc":"Размер шрифта терминала в пикселях (9–32, по умолчанию 13)","settingsFontSizeSuffix":"px","settingsFontSizeTitle":"Размер шрифта терминала","settingsGeneralTitle":"Общие","settingsHtmlDefaultUnsafeDesc":"Если включено, каждый новый предпросмотр HTML открывается без песочницы (тот же origin, что и интерфейс — доступны файлы сессии и внутренние API); вернуть песочницу можно одним нажатием в строке состояния","settingsHtmlDefaultUnsafeTitle":"Открывать предпросмотр HTML без песочницы (небезопасно)","settingsHtmlSandboxDesc":"С выключенной песочницей просматриваемый HTML работает в том же origin, что и интерфейс: он может читать файлы сессии, локальное хранилище и вызывать внутренние API. Включайте только для полностью доверенных файлов","settingsHtmlSandboxTitle":"Отключить песочницу предпросмотра HTML (небезопасно)","settingsIntro":"Что показывает боковая панель и как она себя ведёт","settingsJobsDesc":"Разворачивать панель и открывать страницу задач при появлении новой фоновой задачи в текущем диалоге (срабатывает на каждую); выключите, чтобы открывать вручную","settingsJobsTitle":"Открывать страницу задач при новой фоновой задаче","settingsNav":"Боковая панель","settingsOpenDesc":"Разворачивать панель для совсем новых диалогов; у существующих сохраняется своя раскладка","settingsOpenPathDesc":"Открывать файловые ссылки из диалога (строки инструментов, созданные файлы, упоминания) в редакторе панели, а не в системном приложении","settingsOpenPathTitle":"Открывать файлы из диалога в панели","settingsOpenTitle":"Разворачивать для новых диалогов","settingsOpenToolsDesc":"Когда включено, модель может активно открывать файлы, папки и HTTP(S)-страницы в боковой панели через инструмент sidebar_open (по умолчанию отключено).","settingsOpenToolsTitle":"Внедрите инструмент sidebar-open для модели","settingsPopup":"Настройки функции","settingsPopupDesc":"Параметры для «{feature}»","settingsSaveFailed":"Не удалось сохранить","settingsSchemeAutoDesc":"Консервативный: учитывается только стандартный API Window Controls Overlay (реальная высота наложения заголовка); обычные веб-среды не изменяются","settingsSchemeAutoTitle":"Автоопределение","settingsSchemeCustomDesc":"Полный контроль: вставьте пользовательский CSS (может переопределять встроенные стили) и задайте расстояние смещения строки заголовка","settingsSchemeCustomTitle":"Настроить","settingsSchemeDetectedSuffix":"обнаружено","settingsSchemeWebDesc":"Явно указать официальный веб-интерфейс: без адаптации вообще (даже стандартной геометрии WCO)","settingsSchemeWebTitle":"Официальный сайт DSH","settingsShellArgsDesc":"Явные аргументы командной оболочки, разделённые пробелами; если не пусто, полностью заменяют значения по умолчанию (тот же принцип, что и у shellArgs в yaml)","settingsShellArgsPlaceholder":"напр. -l (пусто = по умолчанию)","settingsShellArgsTitle":"Аргументы командной оболочки","settingsShellDesc":"Оболочка, запускаемая для терминалов UI и моделей (абсолютный путь или имя исполняемого файла). Пустое значение сохраняет устаревший порядок: shell из конфига yaml → $SHELL / логин-шелл / Windows powershell.exe. Применяется к терминалам, открытым после этого.","settingsShellPlaceholder":"например, /bin/zsh (пусто = автоматически)","settingsShellTitle":"Путь к оболочке","settingsSubagentDesc":"Разворачивать панель и открывать страницу задач, когда в диалоге появляется субагент; выключите, чтобы открывать вручную","settingsSubagentTitle":"Открывать страницу задач при появлении субагента","settingsTabsTitle":"Содержимое панели","settingsTitleBarDesc":"Оставлять место под системный заголовок окна Windows справа сверху, чтобы кнопки и содержимое панели располагались ниже, а не под ним","settingsTitleBarStripDesc":"Высота полосы заголовка: на сколько пикселей опускаются кнопки и содержимое панели (0–120, по умолчанию 40)","settingsTitleBarStripTitle":"Смещение","settingsTitleBarTitle":"Режим совместимости с заголовком окна","settingsToolsDesc":"Если включено, модель может создавать терминалы в панели и работать в них через восемь инструментов terminal_* (по умолчанию выключено)","settingsToolsTitle":"Дать модели инструменты терминала","settingsViewerCatchAll":"На всё остальное: любой файл","settingsViewersTitle":"Просмотрщики файлов","settingsWidthDesc":"Какую долю ширины окна занимает панель в новых диалогах (20–60)","settingsWidthSuffix":"%","settingsWidthTitle":"Ширина по умолчанию","showInFolder":"Показать в папке","sideChat":"Боковой чат (бета)","sideChatCancel":"Остановить","sideChatCancelTitle":"Прервать текущий ход (запланированные задачи сохраняются)","sideChatClose":"Закрыть тему","sideChatCloseTitle":"Освободить агента потока (история сохраняется)","sideChatComposerPlaceholder":"Задать уточняющий вопрос…","sideChatCreating":"Создание побочного диалога…","sideChatEmpty":"Без посторонних разговоров","sideChatEmptyDesc":"Каждый побочный диалог открывается в отдельной вкладке на панели — он наследует контекст текущей сессии и никогда не попадает в основной разговор","sideChatError":"Ошибка бокового чата: {message}","sideChatFirstPlaceholder":"Задайте первый вопрос — контекст сохранён…","sideChatInjection":"Контекст внедрен","sideChatNew":"Новая тема","sideChatNoTurn":"Сохранение доступно после первого завершённого хода","sideChatPendingDrop":"Последний неотвеченный вопрос не будет включен в сохраненную сессию","sideChatRetry":"Повторить","sideChatSave":"Сохранить как новую сессию","sideChatSaveTitle":"Повысьте этот тред до уровня отдельной сессии в основном списке сессий","sideChatSaved":"Сохранено как новая сессия","sideChatSend":"Отправить","sideChatThink":"Думаю","sideChatThinking":"Глубокое погружение…","sideChatThreads":"Переключить ветку / новая","sideChatUntitled":"Новая тема","splitDown":"Разделить вниз","splitLeft":"Разделить влево","splitRight":"Разделить вправо","splitUp":"Разделить вверх","stage":"В индекс","stageAll":"Всё в индекс","staged":"В индексе","statusTruncated":"Слишком много изменений; показаны первые 2,000 записей","subagent":"Задачи","subagentCount":"субагентов: {count}","subagentCountRunning":"субагентов: {count} · работает: {running}","subagentDiagCorrupt":"Повреждён","subagentDiagUnavailable":"Недоступен","subagentDiagUnsupported":"Не поддерживается","subagentEmpty":"Субагентов нет","subagentEmptyDesc":"Здесь появятся субагенты, запущенные основным агентом","subagentInactive":"Простаивает","subagentMainAgent":"Основной агент","subagentModeContinuable":"С продолжением","subagentModeOneShot":"Разовый","subagentRunning":"Работает","subagentThinking":"Думает…","terminal":"Терминал","terminalConnectFailed":"Терминал не смог подключиться несколько раз подряд","terminalDepsFailed":"Не удалось загрузить зависимость терминала node-pty","terminalDepsHint":"Выполните команду ниже в терминале на машине с DSH, чтобы починить, и повторите (версия node-pty должна совпадать с версией ядра DSH):","terminalDepsProfile":" (определён профиль: {profile})","terminalError":"Не удалось подключиться к терминалу","terminalLimit":"Достигнут предел терминалов (3)","terminalRetry":"Повторить","timeHoursAgo":"{n} ч назад","timeJustNow":"только что","timeMinutesAgo":"{n} мин назад","timeYesterday":"вчера","toc":"Содержание","truncation":"Файл слишком большой — показаны первые 512 КБ","unpinOpenWith":"Открепить","unpinTerminal":"Открепить","unsaved":"Не сохранено","unstage":"Из индекса","unstageAll":"Всё из индекса","unstaged":"Вне индекса","uploadCancelled":"Загрузка отменена","uploadDone":"Загружено {count} файл(ов)","uploadDropChat":"Перетащите в чат, чтобы добавить изображения","uploadDropHint":"Перетащите файлы/папки сюда для загрузки","uploadFailed":"Не удалось загрузить: {error}","uploadFailedUnknown":"Неизвестная ошибка","uploadFiles":"Загрузить файлы","uploadFolder":"Загрузить папку","uploadHere":"Загрузите сюда","uploadProgress":"Загружено {done}/{total}: {name}","uploadTo":"Загрузить в {dir}","uploadTooLarge":"Файл слишком большой (превышен лимит загрузки)","uploadingTo":"Загрузка в {dir}…","viewCommitDiff":"Посмотреть изменения коммита","viewerBinary":"Скачивание файла","viewerCode":"Код","viewerHtml":"HTML","viewerImage":"Изображение","viewerMarkdown":"Markdown","viewerPdf":"PDF","worktree":"Рабочее дерево"},"command":{"listbox.aria":"Совпадения /{command}","notice.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","overlay.aria":"Параметры /{command}","search.aria":"Фильтр параметров","search.placeholder":"Поиск…","status.applying":"Применение…","status.empty":"Нет параметров","status.loading":"Загрузка параметров…"},"common":{"back":"Назад","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть","copied":"Скопировано","copy":"Копировать","delete":"Удалить","edit":"Изменить","expand":"Развернуть","load.failed":"Не удалось загрузить","loading":"Загрузка…","more":"Ещё","next":"Дальше","none":"Нет","ok":"ОК","previous":"Назад","retry":"Повторить","save":"Сохранить","search":"Поиск","skip":"Пропустить","submit":"Отправить","submitting":"Отправка…","truncated":"Обрезано","unknown":"Неизвестно"},"context-doctor":{"cd.attention":"Стоит посмотреть","cd.byFile":"По файлу","cd.byServer":"По серверу","cd.bySource":"По источнику","cd.catalog":"{n} скиллов","cd.catalog.few":"{n} скилла","cd.catalog.many":"{n} скиллов","cd.catalog.one":"{n} скилл","cd.collapse":"Скрыть детализацию","cd.duplicateBlocks":"{n} дублированных блоков · {tokens} токенов","cd.duplicateSkills":"{n} навыков имеют одинаковое описание","cd.empty":"Данных пока нет","cd.emptyCategory":"ничего не внедрено","cd.emptyState":"Данные аудита пока отсутствуют.","cd.error":"Проверка не удалась","cd.expand":"Показать детализацию","cd.files":"файлов","cd.guideline":"из 50k","cd.healthy":"В норме","cd.healthyHint":"Контекст расходуется экономно и укладывается в рекомендованный бюджет.","cd.heavy":"Превышение бюджета","cd.heavyHint":"Резидентный контекст перегружает бюджет. Сначала сократите самые крупные записи.","cd.hint":"Открыть аудит контекста","cd.instructions":"Цепочка инструкций","cd.instructions.sub":"{n} файлов","cd.justNow":"только что","cd.loading":"Проверка…","cd.mcp":"Инструменты MCP","cd.mcp.sub":"{n} инструментов · {servers} серверов","cd.mcpTools":"{n} инструментов","cd.mcpTools.few":"{n} инструмента","cd.mcpTools.many":"{n} инструментов","cd.mcpTools.one":"{n} инструмент","cd.minutesAgo":"{n} минут назад","cd.more":"+{n} ещё","cd.native":"Встроенные инструменты","cd.noDetail":"Нет доступной разбивки","cd.ofBudget":"из бюджета в {budget}","cd.refresh":"Обновить","cd.residentTokens":"Проверка бюджета контекста","cd.residentUnit":"токены резидентные","cd.review":"Стоит посмотреть","cd.reviewHint":"Некоторые части контекста стоит пересмотреть, пока они не стали дорогими.","cd.secondsAgo":"{n} назад","cd.shadowed":"{n} навыков скрыты записью с таким же названием","cd.skills":"Каталог скиллов","cd.skills.sub":"{n} навыков","cd.subtitle":"Аудит контекста","cd.suggestions":"Рекомендации","cd.suggestions.few":"{n} рекомендации","cd.suggestions.many":"{n} рекомендаций","cd.suggestions.one":"{n} рекомендация","cd.title":"Аудит контекста","cd.tokens":"токены","cd.tools":"Схемы инструментов","cd.tools.sub":"{n} встроенных инструментов","cd.toolsCount":"инструментов","cd.topSchemas":"Самые большие схемы","cd.total":"Общее количество","cd.updated":"Обновлено {when}"},"conversation":{"access.confirm.acknowledge":"Я понимаю риски и хочу продолжить","access.confirm.cancel":"Отмена","access.confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","access.confirm.enable":"Включить полный доступ","access.confirm.title":"Включить полный доступ?","approval.allowOnce":"Разрешить один раз","approval.detail.aria":"Подробности запроса","approval.escalation":"Инструмент {toolName} просит повышенных прав","approval.reject":"Отклонить","approval.waiting":"Ожидание подтверждения","ask.answered":"{answered}/{total} отвечено","ask.cancelled":"отменено","ask.interrupted":"прервано","ask.rowTitle":"Вопрос","ask.waiting":"ожидание","bash.failed":"Ошибка","bash.running":"Выполняется","bash.stopped":"Остановлено","chat.loadError":"Не удалось загрузить историю: {message} ({code})","chat.loadOlder":"Загрузить раньше","chat.loadingHistory":"Загрузка истории…","chat.toBottom":"Вниз","clock.md":"{d}.{m}","clock.ymd":"{d}.{m}.{y}","command.done":"Готово","command.failed":"Команда не выполнена","command.imagesUnsupported":"/{command} не принимает вложения-изображения — сначала удалите их","command.running":"Выполняется…","command.title":"Команда","context.aria":"{percent} контекста занято","context.messages":"Сообщения","context.system":"Системный промпт","context.tools":"Инструменты","context.used":"контекста занято","details.close":"Закрыть подробности","details.empty":"Выберите строку инструмента в переписке, чтобы увидеть подробности","details.input":"Вход","details.notInWindow":"Этот вызов вне текущего окна","details.output":"Выход","details.running":"Выполняется…","details.title":"Подробности","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","fileOpen.folderTitle":"Не удалось открыть папку","fileOpen.folderUnknown":"Не удалось открыть эту папку","fileOpen.title":"Не удалось открыть файл","fileOpen.unknown":"Не удалось открыть этот файл","hero.chooseWorkspace":"Выбрать рабочую папку","hero.headline":"Навстречу неизвестному","hero.preview":"Предпросмотр","hint.goal":"опишите цель длительной задачи","hint.goal.active":"цель активна — изменить / пауза / продолжить / снять","image.closePreview":"Закрыть просмотр оригинала","image.dimensionTooLarge":"Стороны изображения не больше {size}px — уменьшите его и попробуйте снова","image.dropBlocked":"Сейчас картинки добавить нельзя","image.dropDesc":"До {count} изображений, каждое до {size}","image.dropTitle":"Перетащите изображения сюда","image.fileTooLarge":"Каждое изображение должно быть меньше {size}","image.label":"Изображение","image.loadFailed":"Изображение не загрузилось, нажмите для повтора","image.loading":"Загрузка изображения…","image.modelUnsupported":"Текущая модель не принимает изображения; выберите подходящую","image.openOriginal":"Открыть оригинал","image.openOriginalLabel":"{label}, нажмите, чтобы открыть оригинал","image.original":"Оригинал","image.pending":"Изображения к отправке","image.preview":"Просмотр оригинала","image.remove":"Убрать изображение {name}","image.scrollLeft":"Прокрутить изображения влево","image.scrollRight":"Прокрутить изображения вправо","image.sendFailed":"Не удалось отправить изображения ({reason}); добавьте заново и повторите","image.serviceUnavailable":"Служба загрузки изображений недоступна","image.subagentUnsupported":"Сессии субагентов пока не поддерживают изображения","image.tooMany":"В одно сообщение помещается до {count} изображений","image.tooManyPixels":"Слишком большое разрешение; сожмите изображение и повторите","image.totalTooLarge":"Изображения весят больше {size}; уберите часть и повторите","image.unsupportedType":"Поддерживаются только PNG, JPG, WebP и GIF","input.accessMode":"Режим доступа, сейчас: {name}","input.commands":"Команды","input.send":"Отправить сообщение","input.stop":"Остановить генерацию","json.truncated":"… обрезано, всего символов: {total}","message.branch":"Ответвить новый диалог","message.branchUnavailable":"Доступно только на последнем сообщении завершённого хода","message.compaction":"Контекст сжат","message.compaction.completed":"Сжато элементов истории: {items} (~{tokens} токенов)","message.compaction.expand":"Показать итог сжатия","message.compaction.running":"Сжатие контекста…","message.compaction.unavailable":"Итог сжатия недоступен","message.context.catalog.more":"… ещё {count}","message.context.catalog.replaced":"Каталог заменён","message.context.instructions.added":"добавлено","message.context.instructions.loaded":"загружено","message.context.instructions.removed":"удалено","message.context.instructions.updated":"обновлено","message.context.recall.counts":"{retained} оставлено · {omitted} пропущено","message.context.recall.truncated":"обрезано","message.context.relay.from":"Из сессии {session}","message.context.snapshot.supersedes":"Заменяет прежние снимки","message.contextInjection":"Инъекция контекста","message.contextRecall":"Напоминание из сессии","message.extraBlock":"Дополнительный блок","message.maxTokens":"Достигнут лимит выходных токенов","message.maxTokens.hint":"Ответ обрезан; написанное ранее сохранено в переписке. Отправьте «продолжай», чтобы модель дописала.","message.ranFor":"Заняло {duration}","message.referenceSeparator":", ","message.referenceSummary":"Упомянутая сессия · {labels}","message.retry.active":"Повтор запроса к модели","message.retry.cancelled":"Повтор запроса отменён","message.retry.delay":"Задержка перед повтором: ","message.retry.failure":"Причина сбоя: ","message.retry.scheduled":"Ожидание повтора запроса","message.retry.started":"Запрос к модели повторён","message.retry.status":"{label} ({retry}/{maximum}) · {seconds} с","message.stopped":"Остановлено","message.tokensPerSecond":"{tps} ток/с","message.ttft":"Первый токен {seconds} с","message.turnError":"Ход не удался","message.unknownBlock":"Неизвестный блок содержимого","message.unknownSurface":"Неизвестное событие: {type}","placeholder.default":"Напишите агенту","placeholder.hero":"Опишите, что хотите сделать","placeholder.parentOffline":"Родительская сессия офлайн: отправка недоступна, но остановить выполнение можно","placeholder.steerQueue":"Cmd/Ctrl+Enter направит все сообщения из очереди","placeholder.unavailable":"Сессия недоступна","placeholder.workspace":"Выберите рабочую папку, чтобы начать","queue.cancelEdit":"Отменить правку","queue.count":"Сообщений в очереди: {n}","queue.edit":"Изменить сообщение в очереди","queue.edit.unsupported":"Содержит не только текст; правка пока не поддерживается","queue.editFailed":"Не удалось изменить: сообщение, возможно, уже отправляется.","queue.remove":"Убрать из очереди","queue.removeFailed":"Не удалось убрать: сообщение, возможно, уже отправляется.","queue.save":"Сохранить сообщение","queue.steer":"Направить сообщение","queue.steer.unavailable":"Направлять можно только пока агент работает","queue.steerFailed":"Не удалось направить. Попробуйте ещё раз.","row.failed":"Ошибка","row.running":"Выполняется","row.stopped":"Остановлено","session.hierarchy":"Иерархия сессий","settings.enter.description":"Только когда агент занят; Cmd/Ctrl+Enter даёт другое поведение","settings.enter.queue":"В очередь","settings.enter.steer":"Направить","settings.enter.title":"Enter, когда агент занят","stats.cacheHit":"Попаданий в кэш {percent}%","stats.counts":"ходов: {turns} · шагов: {steps}","stats.llm":"Модель {duration}","stats.tokens":"Вход {input} ток · выход {output} ток","stats.tokensPerSecond":"{throughput} ток/с","stats.toolCall":"Инструменты {duration}","stats.ttftAverage":"Первый токен в среднем {duration}","terminal.collapseAria":"Свернуть вывод","terminal.done":"Готово","terminal.exitCode":"код возврата {code}","terminal.expandAria":"Показать оставшиеся строки вывода: {n}","terminal.expandRest":"… ещё строк: {n}","terminal.failed":"Ошибка","terminal.noOutput":"Вывода нет","terminal.running":"Выполняется","terminal.signal":"сигнал {signal}","todo.completed":"{done}/{total} выполнено","todo.progress.active":"{active} в работе","todo.progress.done":"{done} выполнено","todo.progress.pending":"{pending} в очереди","todo.rowTitle":"Обновить список задач","todo.title":"Задачи","view.chat":"Чат"},"cordis":{"a11y.defining":"Определение плагина","a11y.failed":"Определить не удалось","a11y.stopped":"Определение прервано","action.approve":"Разрешить","action.approveOnce":"Разрешить только эту версию","action.approvePlugin":"Разрешить будущие версии этого плагина","action.decline":"Отклонить","action.remove":"Удалить","action.retry":"Повторить","action.rollback":"Откатить","action.run":"Запустить","action.stop":"Остановить","body.clientCode":"Клиент","body.copied":"Скопировано","body.copy":"Копировать","body.hostCode":"Хост","body.output":"Результат","body.source":"Исходник плагина","panel.approvals.aria":"Подтверждения Cordis","panel.current":"Текущая: {packageId}","panel.empty":"Плагинов пока нет","panel.group.current":"Эта сессия","panel.group.others":"Другие сессии","panel.hint":"Управление запуском — в панели Cordis над настройками","panel.loading":"Чтение…","panel.next":"Следующая: {packageId}","panel.plugins.aria":"Плагины Cordis","panel.readFailed":"Не удалось прочитать список плагинов: {message}","panel.runningCount":"работает: {count}","panel.title":"Плагины Cordis","panel.trigger":"Плагин Cordis","panel.version":"Версия","purpose.missing":"(назначение не указано)","render.failedAbdicated":"Отрисовка в {slot} не удалась, вернули стандартный интерфейс:","render.failedHeld":"Отрисовка в {slot} не удалась:","row.defineTitle":"Зарегистрировать плагин Cordis","row.removeTitle":"Удалить плагин Cordis","row.runTitle":"Запустить плагин Cordis","row.stopTitle":"Остановить плагин Cordis","row.updateTitle":"Обновить плагин Cordis","run.removed":"Этого пакета больше нет","run.superseded":"Ниже есть более свежая карточка запуска","status.awaitingApproval":"Ждёт подтверждения","status.clientPending":"Клиент готов к активации","status.failed":"Запуск не удался","status.idle":"Готов","status.removed":"Удалён","status.running":"Работает","status.superseded":"Есть более свежий запуск"},"deliverables":{"produced.label":"Создано","produced.more":"+ {count} файлов","produced.moreOne":"+ 1 файл","produced.open":"Открыть {name}","produced.showInFolder":"Показать в папке"},"directory-browser":{"browser.cancel":"Отмена","browser.create":"Создать","browser.createIn":"Новая папка в «{name}»","browser.editPath":"Изменить путь","browser.folderName":"Имя папки","browser.home":"Домашняя папка","browser.loading":"Загрузка…","browser.newFolder":"Новая папка","browser.open":"Открыть","browser.showHidden":"Показывать скрытые файлы","browser.title":"Выбор рабочей папки","browser.truncated":"Слишком много папок; показано только начало.","browser.untitledFolder":"Без имени"},"dsh-auto-collapse":{"collapse":"Свернуть процесс","collapseSettings":"Свернуть настройки","customStatusPrompt":"Свой промпт статуса","expand":"Развернуть процесс","expandSettings":"Развернуть настройки","hint":"Если пусто, возвращается исходный промпт Deep diving...","overridden":"Переопределено","processed":"Обработано","resetDefault":"По умолчанию","statusPrompt":"Промпт статуса","think":"Рассуждения","unwritten":"Не сохранено"},"dsh-context":{"agents.billed":"{n} выставлено к оплате","agents.chip.count":"{n} агентов","agents.chip.running":"{n} запущено","agents.chip.tokens":"{n} токенов в контексте","agents.continuable":"продолжаемый","agents.legend.free":"свободное окно","agents.more":"Ещё {n} не показано","agents.oneshot":"одноразовый","agents.open":"нажмите, чтобы открыть →","agents.requests":"{n} запросов","agents.running":"выполняется","agents.self":"текущий","agents.solo":"Пока нет суб-агентов — когда агент делегирует работу через инструмент суб-агентов, сеть будет отображаться здесь","agents.sub":"Живой контекст этого агента и его подчиненных агентов · нажмите на узел, чтобы открыть его сессию","agents.title":"Сеть агентов","attach.close":"Закрыть","attach.image":"Изображение","attach.images":"Изображения","attach.loadFailed":"Не удалось загрузить · нажмите, чтобы повторить","attach.loading":"…","attach.open":"Открыть изображение полностью","attach.other":"Другой контент","attach.preview":"Превью изображения","attach.raw":"Сырой","attach.sent":"Отправлено","attach.token":"Токен","attach.tokensTip":"Расчетная стоимость токенов через официальное преобразование размера изображения DeepSeek (ограничение в 384 токена на изображение)","block.answer":"Ответ","block.content":"Контент","block.line":"1 строка","block.lines":"{n} строк","block.result":"Результат","block.summary":"Сводка","block.thinking":"Обоснование","brief.input":"В","brief.inputTip":"Что было введено после предыдущего ответа и перед этим запросом — обычно результаты предыдущего вызова инструмента; начало нового оборота не содержит ничего нового","brief.locate":"Показать в контекстном браузере","brief.more":"+{n}","brief.noInputs":"(ничего нового)","brief.reply":"Ответ","brief.replyTip":"Что модель вернула на этом шаге (текстовый ответ или вызовы инструментов) — результаты вызовов отображаются в строке In следующего бара","brief.turn":"Пользователь","brief.turnTip":"Сообщение пользователя, которое открыло этот ход — каждый шаг хода ссылается на него","browser.approx":"Некоторые удаленные сообщения этого шага превышают срок хранения — приведенное ниже восстановление является приблизительным","browser.deltaHint":"по сравнению с предыдущим ходом","browser.items":"{n} элементов","browser.live":"В прямом эфире (Следующий запрос)","browser.liveNow":"В прямом эфире · Следующий запрос","browser.loadFailed":"Не удалось загрузить — нажмите, чтобы повторить","browser.loading":"Загрузка полного содержимого из более старой истории сеанса…","browser.missingLive":"… {n} предыдущих сообщений также являются частью контекста (за пределами предоставленного окна)","browser.noContent":"Полное содержимое находится за пределами загруженного окна сообщений (загрузите более старую историю в Чате для просмотра)","browser.noEpoch":"Содержание заголовка (Системное сообщение / Схемы инструментов) этого шага находится за пределами удержания","browser.noHeader":"Обслуживается устаревшей версией плагина: только оценка токенов, без содержимого","browser.notInLog":"Этот элемент больше не находится в журнале сессии (возможно, он был удалён или очищен)","browser.preview":"Предварительный просмотр","browser.rowNoMatch":"Нет строк, соответствующих текущему фильтру","browser.search.assistant":"Фильтровать по ответам или звонкам…","browser.search.inject":"Фильтровать введённый контекст…","browser.search.tool":"Фильтровать по инструменту или аргументам…","browser.search.user":"Фильтровать по тексту сообщения…","browser.title":"Контекстный браузер","call.exit":"выход {n}","call.fail":"Не удалось","call.ok":"ОК","cat.assistant":"Сообщения ассистента","cat.inject":"Введённый контекст","cat.system":"Системное сообщение","cat.tool":"Результаты инструмента","cat.tools":"Схемы инструментов","cat.user":"Сообщения пользователя","cmd.close":"Закрыть","cmd.desc":"Просмотр текущего контекста макияжа, просмотр состава по шагам","detail.actual":"Фактический запрос {n}","detail.cache":"Кэш {n}%","detail.estTotal":"Примерно ≈ {n}","detail.lastStep":"Последний шаг","detail.output":"Вывод {n}","detail.step":"Поверните {t} · Шаг {s}","detail.turn":"Поверните {t} · {n} шагов","error":"Не удалось прочитать данные контекста:","error.retry":"Повторить","ev.compaction":"Контекст сжат (резюме заменено {n} сообщений)","ev.mode.plan.off":"Режим плана выключен","ev.mode.plan.on":"Режим планирования включён","ev.model":"Модель изменена: {a} → {b}","ev.prune":"Вывод инструмента обрезан","ev.skill":"Навык внедрён ({name})","events.at":"Поверните {t} · Шаг {s}","events.empty":"Событий контекста пока нет (компактизация, инъекции, переключения моделей отображаются здесь)","events.range":"Поверните {t} · Шаг {a}→{b}","events.rangeTo":"Поверните {a} · Шаг {as} → Поверните {b} · Шаг {bs}","events.title":"Контекстные события","files.chipTip":"{files} файлов · {ops} операций","files.deltaTip":"Совокупное изменение строк, оцененное по аргументам вызовов редактирования/записи: + добавлено / − удалено","files.empty":"Нет чтений, записей или поиска файлов в этом диапазоне","files.errs":"{n} не удалось","files.files":"{n} файлов","files.form.dir":"Каталог","files.form.image":"Изображение","files.form.text":"Файл","files.glyph.archive":"Архив","files.glyph.assets":"Активы","files.glyph.build":"Результат сборки","files.glyph.config":"Конфигурация","files.glyph.data":"Данные / манифест","files.glyph.database":"База данных","files.glyph.deps":"Зависимости","files.glyph.docker":"Docker","files.glyph.docs":"Документы","files.glyph.document":"Документ","files.glyph.font":"Шрифт","files.glyph.hidden":"Каталог метаданных","files.glyph.ignore":"Игнорировать правила","files.glyph.lang.c":"C","files.glyph.lang.cpp":"C++","files.glyph.lang.csharp":"C#","files.glyph.lang.dart":"Dart","files.glyph.lang.go":"Перейти","files.glyph.lang.html":"HTML","files.glyph.lang.java":"Java","files.glyph.lang.js":"JavaScript","files.glyph.lang.kotlin":"Kotlin","files.glyph.lang.lua":"Lua","files.glyph.lang.php":"PHP","files.glyph.lang.ruby":"Рубин","files.glyph.lang.rust":"Ржавчина","files.glyph.lang.scala":"Скала","files.glyph.lang.svelte":"Свелт","files.glyph.lang.swift":"Быстро","files.glyph.lang.ts":"TypeScript","files.glyph.lang.vue":"Вью","files.glyph.license":"Лицензия","files.glyph.lock":"Файл блокировки","files.glyph.log":"Войти","files.glyph.markdown":"Документ с разметкой","files.glyph.media":"Медиа","files.glyph.notebook":"Блокнот","files.glyph.python":"Питон","files.glyph.root":"Корневая папка рабочей области","files.glyph.scripts":"Скрипты","files.glyph.sheet":"Таблица","files.glyph.shell":"Оболочка","files.glyph.style":"Стили","files.glyph.tests":"Тесты","files.hits":"{n} попаданий","files.kind.all":"Все","files.kind.image":"Изображения","files.kind.read":"Читать","files.kind.search":"Искали","files.kind.write":"Написано","files.locate":"Показать эту операцию в Обозревателе контекста","files.noMatch":"Нет файлов, соответствующих текущим фильтрам","files.open":"Открыть на вашем устройстве","files.readEst":"Строк прочитано, оценка на основе аргумента limit","files.readTip":"Прочитайте строки {a}–{b}","files.scopeLatest":"До последнего · следует за выбором трендового графика","files.search":"Фильтровать по пути…","files.sort.count":"Самый активный","files.sort.latest":"Последние","files.sort.path":"По пути","files.sortTip":"Сортировать файлы по количеству операций (выбранного вида при активной метке вида), последней активности или пути","files.title":"Активность файла","footer":"Оценка: та же эвристика с фиксированной плотностью, что и встроенный tokenMeter в dsh (~4 символа ≈ 1 токен); «фактическое» — это использование, сообщаемое провайдером.","form.catalog":"Обновление каталога","form.context":"Контекстная инъекция","form.instructions":"Инструкции","form.notice":"Уведомление","form.recall":"Напомнить","form.relay":"Агентский ретранслятор","form.snapshot":"Снимок состояния","gran.delta":"Дельта","gran.modeHint":"Итого: суммарное значение; Дельта: изменение по сравнению с предыдущим запросом","gran.step":"Шаг","gran.total":"Всего","gran.turn":"Повернуть","kind.compaction":"Компактный","kind.inject":"Внедрить","kind.mode":"Режим","kind.model":"Переключить","kind.prune":"Обрезать","loading":"Чтение журнала сессии…","node.calls":"Звонки","node.empty":"(пустой ответ)","node.failed":"Выполнение инструмента завершилось с ошибкой","node.nonText":"(сообщение без текста)","node.skillTag":"Навык · {name}","node.snapshot":"Снимок:","node.toolResult":"Результат инструмента","nodes.empty":"Нет видимых сообщений прямо сейчас","nodes.hint":"в настоящее время видимые модели, сначала новые","nodes.more":"… {n} предыдущих сообщений пропущено","nodes.title":"Сообщения","overview.compactReserve":"Резерв автоуплотнения: автоуплотнение срабатывает при {pct}% окна — эта область обычно сохраняется как запас, фактически не используется.","overview.estimate":"токены (примерно)","overview.free":"Бесплатное окно","overview.ofUsed":"из использованного контекста","overview.title":"Текущий контекст","overview.used":"использовано контекста","plugin.github":"GitHub","plugin.hint":"Лучший плагин контекста для DSH ⭐","plugin.name":"Плагин","plugin.title":"Информация о плагине","rich.md":"Markdown","rich.raw":"Сырьё","rich.toMd":"Просмотреть как Markdown","rich.toRaw":"Просмотреть исходный текст","settings.collapse":"Свернуть","settings.desc":"Настройки отображения для панели Context","settings.expand":"Развернуть","settings.fileSort":"Сортировка файлов по умолчанию","settings.gran":"Гранулярность трендов по умолчанию","settings.mode":"Отображение трендов по умолчанию","settings.readOnly":"Настройки доступны только для чтения в этой среде","settings.title":"Контекст","stats.cacheHit":"Кэш-попадания","stats.compactions":"Компактизации","stats.cost":"Расч. стоимость","stats.costHit":"попадание","stats.costMiss":"пропустить","stats.costOut":"Вывод","stats.costPriceHead":"Тарифы за 1 миллион токенов (пиковый | внепиковый по половине цены):","stats.costTip":"Примерная совокупная стоимость всей сессии по прайс-листу DeepSeek: входные данные разделены по попаданию/промаху кэша, выходные данные включают рассуждения; каждый запрос оценивается по пиковой ставке (01:00–04:00, 06:00–10:00 UTC) или по половинной ставке вне пикового времени в зависимости от времени запроса. Применяется к deepseek-v4-flash / deepseek-v4-pro на любом провайдере; цены зафиксированы, только для справки.","stats.hint":"За период сохранённой истории (аналогично графику истории)","stats.images":"Изображения","stats.injects":"Инъекции","stats.prunes":"Чернослив","stats.steps":"Шаги","stats.title":"Статистика контекста","stats.toolCalls":"Вызовы инструментов","stats.turns":"Переключается","tab":"Контекст","tip.actual":"(фактическое {n})","tip.delta":"Дельта {n}","tip.step":"Повернуть {t} · Шаг {s}","tip.total":"Всего ≈ {n}","tip.turn":"Поверните {t} · {n} шагов","tool.desc":"Описание","tool.jsonHide":"Свернуть","tool.jsonToggle":"Просмотреть сырой JSON","tool.noMatch":"Нет инструментов, соответствующих текущему фильтру","tool.params":"Параметры","tool.paramsEmpty":"(без параметров)","tool.plugin":"Регистрирующий плагин этого инструмента (для справки)","tool.search":"Фильтровать по названию, описанию или параметрам…","tool.sort.name":"По имени","tool.sort.size":"По размеру","tool.sortTip":"Сортировать инструменты по размеру токена (по умолчанию) или по названию","tool.unknown":"Неизвестный плагин","tool.unknownTitle":"Инструмент был зарегистрирован до загрузки контекстного плагина, или его плагин был выгружен, поэтому его провайдер не может быть определен","tools.more":"из {n}","tools.top":"Лучшие схемы инструментов:","trend.empty":"Отправьте сообщение, и состав контекста каждого запроса модели появится здесь","trend.hint":"Наведите курсор для просмотра деталей, ✂ обозначает уплотнение/удаление, Шаг/Ход переключает детализацию","trend.title":"История контекста"},"dsh-image-gen":{"f.apiKeyEnv":"Справка по API-ключу","f.apiKeyEnvHint":"Ссылка на учетные данные / переменная окружения, содержащая ключ API FAL. Префикс авторизации \"Key \" добавляется автоматически.","f.baseURL":"Базовый URL очереди","f.baseURLHint":"Базовый URL очереди FAL (queue.fal.run).","f.customBaseURL":"Пользовательский API: базовый URL","f.customBaseURLHint":"Корень API без завершающего слеша. Запрос отправляется на {base}/images/generations.","f.customKeyEnv":"Пользовательский API: ссылка на ключ","f.customKeyEnvHint":"Ссылка на учётные данные / переменная окружения с API-ключом. Пустое значение означает отсутствие заголовка авторизации для шлюзов, которым он не требуется.","f.customModel":"Пользовательский API: модель","f.customModelHint":"Идентификатор модели, отправленный в этот API, например, gpt-image-1.","f.customSize":"Пользовательский API: фиксированный размер","f.customSizeHint":"Оставьте пустым, и именованный размер будет переведён автоматически (square_hd → 1024x1024). Указывайте размер только для API, требующих конкретных размеров.","f.defaultFormat":"Формат по умолчанию","f.defaultFormatHint":"Используется, если вызов инструмента не содержит output_format.","f.defaultSize":"Размер изображения по умолчанию","f.defaultSizeHint":"Используется, когда вызов инструмента пропускает параметр image_size.","f.deliverAs":"Как изображение попадает в чат","f.deliverAsHint":"ссылка — результат представляет собой текст со ссылкой, и карта отображает изображение из неё; работает с любой моделью чата. изображение — результат содержит само изображение, которое текстовые модели чата не могут прочитать, поэтому для этого требуется dsh-vision-bridge или модель с поддержкой зрения.","f.inherit":"Наследовать (по умолчанию)","f.model":"Модель (FAL)","f.modelHint":"Идентификатор модели FAL, вызывается как {baseURL}/{model}. Используется, когда провайдер — fal.","f.outputDir":"Выходной каталог","f.outputDirHint":"Относительно рабочего каталога сессии; абсолютный путь используется как есть.","f.pollIntervalMs":"Интервал опроса (мс)","f.pollIntervalMsHint":"Интервал опроса статуса во время выполнения задачи.","f.provider":"Провайдер","f.providerHint":"fal — очередь FAL, настроенная ниже. custom — любой API, совместимый с OpenAI, настраивается далее.","f.timeoutMs":"Таймаут (мс)","f.timeoutMsHint":"Общее время ожидания генерации: отправка + опрос + загрузка.","p.apiKeyEnv":"Пример: FAL_API_KEY","p.baseURL":"Пример: https://queue.fal.run","p.customBaseURL":"Пример: https://api.openai.com/v1","p.customKeyEnv":"Пример: OPENAI_API_KEY","p.customModel":"Пример: gpt-image-1","p.customSize":"Пример: 1024x1024","p.model":"Пример: fal-ai/flux-2/klein/9b","p.outputDir":"Пример: сгенерированные/изображения","p.pollIntervalMs":"Пример: 2000","p.timeoutMs":"Пример: 180000","settings.collapse":"Свернуть","settings.credentialHint":"API-ключи находятся в разделе Учетные данные в указанном наборе ссылок (Настройки → Учетные данные).","settings.description":"Инструмент generate_image. Провайдер: очередь FAL или любой API изображений, совместимый с OpenAI.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.navLabel":"Генерация изображений","settings.overridden":"Переопределить","settings.readOnly":"Это развертывание доступно только для чтения: настройки нельзя изменить через графический интерфейс.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить","settings.saving":"Сохранение…","settings.title":"Генерация изображений","settings.unavailable":"Обвязка еще не опубликовала настройки этого плагина. Если она только что перезапустилась, раздел появится сам через несколько секунд.","settings.unsaved":"Несохранённые изменения"},"dsh-kanban":{"archive.empty":"В архиве пусто.","archive.hint":"Карточки, отстоявшие свой срок в «Выполнено». Ничего не удалено: возвращённая карточка встаёт в ту же колонку, откуда ушла.","archive.restore":"Вернуть на доску","archive.since":"в архиве {ago}","batch.hint":"Одна сессия на все. Задачи приходят по очереди: агент берёт следующую, закончив текущую. В «В работе» уезжает только первая — остальные ждут своей очереди там, где лежат.","batch.start":"Запустить","batch.title":"Запустить {n} задач в одном чате","board.allRepos":"Все репозитории","board.archive":"Архив","board.back":"В чат","board.backHint":"Закрыть доску и вернуться в разговор","board.clearFilters":"Снять отборы","board.collapse":"Свернуть колонку","board.empty":"Задач пока нет.","board.expand":"Развернуть колонку","board.limit":"предел {n}","board.loading":"Доска загружается…","board.newTask":"Задача","board.noMatch":"Ничего не найдено.","board.noRepo":"без проекта","board.pickArchive":"В архив","board.pickMove":"Перенести…","board.pickNone":"Снять выбор","board.pickStart":"Запустить выбранные","board.pickUnqueue":"Снять с очереди","board.pickedCount":"выбрано {n}","board.refresh":"Обновить","board.repo":"репозиторий","board.search":"Поиск","board.shown":"показано {shown} из {total}","board.someFailed":"Сделано у {done} из {total}, остальные отказали.","board.sync":"Сверить с Gitea","board.syncing":"Сверяю…","board.waitCount":"Ждут ответа: {n}","board.waitCountHint":"Задачи, где агент задал вопрос или просит разрешения.","board.waiting":"нужен человек","boardName.main":"Проектная доска","boardName.simple":"Простая доска","card.move":"перенести","card.pack":"пачка {at} из {total}","card.packHint":"Запущены вместе, одной сессией; агент берёт их в этом порядке.","card.pick":"Отметить для группового запуска","card.queue":"в очередь...","card.stop":"остановить","card.toChat":"перейти в чат","card.unqueue":"снять с очереди","chip.moveTo":"Перенести в","chip.note":"Оставить заметку","chip.noteHint":"Заметка дописывается в тело задачи. Тело уходит агенту первым сообщением, поэтому заметка до запуска попадёт в работу, а после запуска — нет.","chip.noteSave":"Дописать","chip.openCard":"Перейти к карточке","column.backlog":"Бэклог","column.cleanup":"Уборка","column.deploy":"Выкатка","column.done":"Выполнено","column.in-progress":"В работе","column.review":"Ревью","dialog.archived":"архив","dialog.bodyHint":"Уйдёт агенту первым сообщением при запуске задачи.","dialog.cancel":"Отмена","dialog.create":"Создать","dialog.fromGitea":"Из Gitea","dialog.imported":"уже на доске","dialog.kind":"Какая это задача","dialog.kindPlain":"Не проект","dialog.kindPlainHint":"Заметка, не относящаяся ни к какому репозиторию. Живёт на простой доске и в Gitea не попадает.","dialog.kindProject":"Проект","dialog.kindProjectHint":"В Gitea заводится issue, карточка привязывается к нему и живёт на проектной доске.","dialog.labelsHint":"через запятую","dialog.loadingRepos":"Репозитории загружаются…","dialog.noIssues":"Открытых issue не найдено.","dialog.noRepos":"Репозиториев нет","dialog.own":"Своя задача","dialog.pickRepo":"Выберите репозиторий","dialog.repo":"Репозиторий","dialog.repoNamePlaceholder":"имя нового репозитория, латиницей","dialog.repoNew":"— новый репозиторий —","dialog.repoNewHint":"Будет создан в организации: приватный и пустой, без README и заготовок. Создание репозитория отсюда не отменить.","dialog.taskBody":"Описание","dialog.taskColumn":"Колонка","dialog.taskLabels":"Метки","dialog.taskTitle":"Заголовок","dialog.title":"Новая задача","discard":"Отменить","error.bad-repo-name":"В имени репозитория допустимы только латинские буквы, цифры, точка, дефис и подчёркивание.","error.crossSite":"Запрос отклонён как межсайтовый.","error.giteaAbsent":"Плагин Gitea не установлен, импорт недоступен.","error.giteaUnconfigured":"Сначала настройте Gitea в карточке плагина Gitea.","error.issue-not-created":"Issue не заведён. Если репозиторий был новым, он остался — ничего не удалено.","error.issueNotFound":"Issue не найден.","error.modelNotSelected":"Модель не выбрана — задайте её в настройках или укажите здесь.","error.no-live-sessions":"Нет ни одной идущей сессии, в очередь ставить некуда.","error.permission-refused":"Уровень доступа не принят, задача не запущена.","error.permission-unavailable":"В этой сборке уровней доступа нет — задача не запущена, чтобы не пойти с бо́льшими правами, чем просили.","error.repo-not-created":"Репозиторий не создан; больше ничего не сделано.","error.repo-required":"Выберите репозиторий или назовите новый.","error.session-not-live":"Эта сессия больше не идёт.","error.sessionNotOpened":"Сессия поднята ({id}), но эта сборка не умеет в неё переключиться. Найдите её в списке сессий.","error.startFailed":"Не удалось поднять сессию.","error.task-not-queued":"Задача не стоит в очереди.","error.taskHasNoIssue":"За этой задачей нет issue в Gitea.","error.taskNotFound":"Задача не найдена.","error.titleRequired":"Нужен заголовок.","error.unknown":"Запрос не выполнен.","facet.author":"Автор","facet.priority":"Приоритет","facet.release":"Выпуск","facet.repo":"Репозиторий","facet.risk":"Риск","facet.scope":"Область","facet.signal":"Сигнал","facet.status":"Статус","facet.type":"Тип","field.archiveAfterDays":"Убирать в архив из «Выполнено» через, дней","field.boardToolEnabled":"Разрешить агенту двигать карточки","field.columnNames":"Свои названия колонок","field.defaultProjectRoot":"Корень проектов","field.giteaOwner":"Организация Gitea","field.giteaTokenRef":"Имя учётной записи","field.giteaUrl":"Адрес инстанса","field.pushToGitea":"Закрывать issue в Gitea","field.replyInstruction":"Постоянная приписка","field.staleAfterMin":"Считать задачу молчащей после, минут","field.startPrompt":"Шаблон первого сообщения","field.syncIntervalSec":"Сверяться с Gitea раз в, секунд","field.watchRepos":"Сузить подхват до репозиториев","field.webhookSecretRef":"Имя учётной записи для вебхука","field.wipInProgress":"Предел «В работе»","field.wipReview":"Предел «Ревью»","group.general":"Общее","group.gitea":"Gitea","group.limits":"Пределы колонок","group.sync":"Автоперемещение","hint.archiveAfterDays":"Считается с попадания карточки в «Выполнено». Ноль — оставлять всё на доске.","hint.boardToolEnabled":"Выключено, пока скилл воркфлоу запрещает этому CLI трогать канбан.","hint.columnNames":"Пары «идентификатор=Название» через запятую, например «backlog=Идеи, review=Проверка». Пусто — обычные названия.","hint.defaultProjectRoot":"Где лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","hint.giteaOwner":"Чьи репозитории смотрит доска. Пусто — определится сама, пока у токена ровно одна организация.","hint.giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","hint.giteaUrl":"Например https://gitea.example.com. Пусто — импорт недоступен.","hint.label":"Пусто — метка для этой колонки не ставится.","hint.limit":"Ноль — без предела. Превышение подсвечивается, но не запрещается.","hint.pushToGitea":"Карточка, дошедшая до «Выполнено», закрывает свой issue. Меток доска не ставит: стадия и так видна по ветке и pull request.","hint.replyInstruction":"Дописывается к каждому первому сообщению — например язык ответа. Пусто — ничего не добавляется.","hint.staleAfterMin":"Помечаются только задачи с сессией. Ноль отключает отметку.","hint.startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","hint.syncIntervalSec":"Ноль отключает сверку. Меньше пятнадцати секунд поднимается до пятнадцати.","hint.watchRepos":"Через запятую, «владелец/репо» или просто «репо». Пусто — все репозитории организации, где есть открытые задачи.","hint.webhookSecretRef":"ИМЯ учётной записи DSH с секретом вебхука Gitea. Пусто — остаётся только опрос.","move.backlog":"Работа по задаче останавливается: идущий ход агента будет прерван. Если сессии нет, карточка просто переедет.","move.cleanup":"Агент удалит ветку в Gitea, worktree и локальную ветку и запишет это в issue.","move.confirm":"Перенести","move.deploy":"Агент вольёт pull request и выкатит. Сам перенос в эту колонку И ЕСТЬ ваше «ок» на deploy — второй раз агент спрашивать не станет.","move.done":"Задача считается завершённой. Это решение человека: сам агент карточку сюда не переносит.","move.in-progress":"Агент получит команду начать или продолжить реализацию.","move.review":"Агент доведёт работу до ревью: снимет с pull request пометку черновика и запросит проверку.","move.title":"Перенести в «{column}»?","order.manual":"Как разложено","order.new":"Сначала новые","order.old":"Сначала старые","panel.agentPreset":"Профиль агента","panel.archive":"В архив","panel.author":"завёл {who}","panel.bodyLoading":"читаю описание…","panel.close":"Закрыть","panel.continue":"Продолжить","panel.continueHint":"У задачи один чат: открывается прежняя сессия, а не новая.","panel.created":"заведена {ago} назад","panel.delete":"Удалить","panel.deleteConfirm":"Удалить «{title}»? Отменить будет нельзя.","panel.issue":"Issue","panel.log":"Переходы","panel.message":"Сообщение агенту","panel.messageHint":"Правьте перед отправкой. Пустое — уйдёт встроенный текст.","panel.model":"Модель","panel.noLog":"Переходов пока нет.","panel.noModels":"У этого провайдера нет моделей","panel.noProviders":"Провайдеров нет","panel.openChat":"Открыть чат","panel.permission":"Уровень доступа","panel.pickModel":"Выберите модель","panel.pickProvider":"Выберите провайдера","panel.pickProviderFirst":"Сначала выберите провайдера","panel.presetDefault":"Как в харнессе по умолчанию","panel.provider":"Провайдер","panel.refresh":"Обновить из Gitea","panel.start":"Начать","panel.startHint":"Откроется отдельная сессия агента по этой задаче. Ветку и worktree заводит агент после preflight, а не отсюда.","panel.starting":"Запускается…","panel.updated":"последнее изменение {ago} назад","plan.counter":"{done} из {total}","plan.title":"План агента","queue.add":"В очередь","queue.hint":"Задача встанет в очередь сессии: агент возьмёт её, закончив текущую работу. До этого карточка остаётся там, где лежит.","queue.option":"{title} - задач: {n}","queue.session":"Сессия","queue.title":"Поставить в очередь идущей сессии","save":"Сохранить","section.label":"Канбан","settings.loading":"Настройки загружаются…","settings.readOnly":"Настройки в этой сессии доступны только для чтения.","settings.saveFailed":"Не сохранены поля: {fields}","settings.saved":"Сохранено.","settings.unavailable":"Хост не знает пространство настроек dsh-kanban. Перезапустите веб-интерфейс после установки плагина.","state.queued":"в очереди · {n}","state.running":"в работе","state.stopped":"остановился","stop.idle":"Агент не работал, останавливать было нечего.","stop.no-session":"У задачи нет сессии.","subtitle":"Доска задач: issue из Gitea и отдельная сессия под задачу","sync.failed":"сверка не проходит","sync.lastSeen":"последняя удачная сверка {ago} назад","sync.never":"сверки с Gitea ещё не было","sync.neverSeen":"удачной сверки с запуска харнесса не было","sync.okAgo":"сверено {ago} назад","sync.running":"сверяемся с Gitea…","time.day":"{n} дн","time.hour":"{n} ч","time.min":"{n} мин","time.now":"только что","title":"Канбан"},"dsh-market":{"actWhy":"Почему не активен?","agentBusyInstall":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед установкой. Установка изменяет файлы плагина, поэтому работающий агент может завершиться с ошибкой в процессе.","agentBusyUpdate":"Агент в настоящее время работает — дождитесь завершения (или отмените его) перед обновлением. Обновления заменяют файлы плагина на месте, поэтому работающий агент может завершиться с ошибкой или смешать версии в процессе выполнения.","aiFix":"Починить с агентом","aiFixConservative":"Действуй осторожно: чини только явные ошибки из списка выше (падения при запуске, дубли записей, подтверждённые расхождения зависимостей). Предупреждения и записи к сведению (например, неподтверждённые диапазоны peer-зависимостей) трогай, только если они связаны с явной ошибкой. Не делай лишних обновлений и перестановок; объясняй каждое изменение и жди подтверждения.","aiFixCopied":"Промпт скопирован — вставьте его в новый диалог и отправьте, когда будете готовы","aiFixDetect":"Шаг 1 — сначала определитесь. Прежде чем что-либо трогать, убедитесь, что процесс, в котором вы работаете, ЭТОТ экземпляр DeepSeek Harness, к которому относится данный профиль (то есть текущая диагностируемая композиция — это та, в которой вы сейчас находитесь). Проверьте, указывает ли текущий каталог / $DSH_HOME / командная строка на этот профиль или работает ли процесс внутри deepseek-harness. Если не можете определить, считайте, что ответ «да» (безопасный выбор).","aiFixFail":"Буфер обмена недоступен — скопируйте диагностику ниже вручную","aiFixHint":"Передать диагностику новой сессии агента (скопировано в буфер; отправлять или нет — решаете вы)","aiFixIfSelf":"Если ДА — вы являетесь этим инструментом: никогда не изменяйте текущую конфигурацию, инструмент или основные пакеты на месте (не редактируйте cordis.patch.yml, не меняйте порядок/включайте/отключайте пакеты, не устанавливайте/удаляйте/обновляйте плагины, не переустанавливайте зависимости, не обновляйте/перезапускайте dsh). Три шага: 1) только анализ в режиме чтения, ничего не изменяйте; 2) создайте apply.sh/.bat (изменения для этого исправления) и rollback.sh/.bat (полностью отменяет его); оба идемпотентны — apply создает снимки только если их еще нет и никогда не перезаписывает существующий снимок (если он существует, значит apply уже выполнялся, так что откатитесь или подтвердите перед повторным запуском), а rollback восстанавливает из этого снимка, так что частично выполненный apply все еще можно откатить, а повторный rollback безопасен; 3) дайте мне запустить apply во внешнем терминале и вставьте stdout/stderr обратно вам. Укажите причину и ждите моего подтверждения на каждом шаге — никогда не запускайте это самостоятельно.","aiFixIntro":"Помоги починить проблемы с плагинами DeepSeek Harness (профиль: {0}). Диагностика показала:","aiFixScope":"Можно менять порядок в dsh.profile.bundles, включать и выключать плагины, править cordis.patch.yml. Учти: официальные бандлы трогать нельзя; прежде чем что-то менять, изложи план.","all":"Все","alreadyInstalled":"✓ Установлен","approveBuilds":"Разрешить сборочные скрипты и повторить","autoBackup":"Резервная копия раз в сутки (при открытии маркета)","backTop":"Наверх","backupDone":"Копия загружена","backupDownload":"Выгрузить копию","backupHint":"Включает список плагинов и настройки профиля, но не node_modules. Восстановление ставит плагины заново по списку.","backupImport":"Импортировать и посмотреть","backupLocal":"Локальный файл","backupWorking":"Выполняется…","brokenBundleBanner":"Эти плагины теперь имеют клиентский пакет, который не будет обрабатываться; страница может отображаться пустой после обновления — рекомендуется выполнить откат:","buildsSkipped":"Этому плагину нужны сборочные скрипты; по умолчанию они заблокированы ради безопасности. Разрешите их и переустановите:","busyWait":"Уже выполняется другая операция — дождитесь её окончания (установка, обновление и удаление идут по одной)","cancel":"Отмена","cancelOp":"Отменить","cancelled":"Отменено","cancelling":"Отмена…","catConflict":"Конфликты","catDeps":"Зависимости","catInfo":"Информация","catOrder":"Порядок","catRisk":"Риск","catWarn":"Предупреждение","catsLess":"Свернуть","catsMore":"Ещё","checkBundles":"Порядок загрузки плагинов","checkBundlesEmpty":"Слои плагинов не объявлены","checkCommunity":"сообщество","checkDir":"каталог","checkDuplicates":"Повторяющиеся записи плагинов","checkDuplicatesEmpty":"Повторов нет","checkEntries":"записей (идентификаторы загрузчика)","checkErrors":"Ошибки","checkErrorsEmpty":"Ошибок нет","checkHoisted":"поднят","checkIssues":"Найдены проблемы","checkLoadFail":"Не удалось загрузить диагностику: ","checkLoading":"Анализ профиля…","checkMultiEmpty":"Пакетов ядра в нескольких версиях нет","checkMultiVersion":"Пакеты ядра в нескольких версиях","checkOfficial":"официальный","checkOrderTip":"порядок загрузки бандла сообщества конфликтует с объявленными правилами before/after","checkOrphans":"Неверные записи конфига","checkOrphansEmpty":"Неверных записей нет","checkOverridden":"переопределяет","checkOverrides":"Переопределения","checkOverridesEmpty":"Переопределений нет","checkPatch":"файл патча","checkPeerEmpty":"Расхождений версий зависимостей нет","checkPeerInfo":"{0} записей к сведению (не подтверждено)","checkPeerInfoTier":"Информация о зависимостях","checkPeerInfoTierEmpty":"Нет записей информационных зависимостей","checkPeerMismatches":"Расхождения версий зависимостей","checkPeerOverview":"расхождений: {0} · к сведению: {1}","checkPeerRisk":"Риски зависимостей","checkPeerRiskEmpty":"Нет несоответствий уровней риска зависимостей","checkPeerSatisfied":"Удовлетворены зависимости","checkPeerSatisfiedEmpty":"Нет удовлетворяющих записей зависимостей","checkPeerWarning":"Предупреждения о зависимостях","checkPeerWarningEmpty":"Нет несоответствий зависимостей на уровне предупреждений","checkProfile":"профиль","checkRange":"объявленный диапазон","checkRefresh":"Проверить заново","checkResolved":"разрешённая версия","checkSatisfied":"удовлетворено","checkSource":"источник","checkUnknown":"неизвестно","checkUnsatisfied":"не удовлетворено","checkWarnings":"Предупреждения","checkWarningsEmpty":"Предупреждений нет","cmdDetails":"Команда установки","comments":"Комментарии","commentsError":"Не удалось загрузить комментарии. Проверьте подключение и попробуйте снова.","commentsLoading":"Загрузка комментариев…","commentsNote":"Комментарии поступают из GitHub Discussions. Открытие этого подключается к giscus.app и GitHub; для публикации требуется аккаунт GitHub.","commentsOnGitHub":"Прочитайте обсуждение на GitHub","commentsRetry":"Попробуйте снова","commentsTitle":"Комментарии","compatRiskBanner":"Обнаружен риск несовместимости — откройте Диагностику перед перезапуском или откатите эту операцию.","confirm":"Подтвердить","confirmInstall":"Подтвердить установку","confirmRemove":"Подтверждаете?","confirmTitle":"Установка","confirmWarn":"Плагины — сторонний код сообщества. Устанавливая, вы доверяете этому источнику; сборочные скрипты по умолчанию заблокированы.","conflictBody":"Конфликт с установленным плагином — остаться может только один:","conflictDeclined":"Вы сохранили установленные плагины; этот не был установлен","conflictDetails":"Детали","conflictKeep":"Оставить то, что у меня есть","conflictKeepNote":"Оставить этот","conflictOutcomeInstall":"установить","conflictOutcomeKeep":"оставить","conflictOutcomeRemove":"удалить","conflictOutcomeSkip":"пропустить","conflictReplaceFailed":"Замена не завершена. Перечисленные ниже плагины были удалены и не восстановлены — проверьте их:","conflictReplacing":"Замена…","conflictReverted":"Отменено автоматически; ничего не было изменено","conflictSwap":"Переключиться на этот","conflictSwapNote":"Настройки удалённых плагинов сохраняются, чтобы вы могли установить их позже","conflictTitle":"Невозможно установить: конфликт с установленным плагином","conflictWhy":"cordis отклоняет дерево плагинов, содержащее дублирующиеся идентификаторы записей; сохранение этого плагина предотвратит запуск DeepSeek Harness.","credsWarning":"Внимание: в копию попадают настройки профиля и файлы, где могут лежать секреты (config.toml, .env и подобные). Локальная выгрузка ничего не вырезает, поэтому выгружайте на WebDAV, которому доверяете.","deprecatedBadge":"Устарел","deprecatedWarn":"Каталог помечает этот плагин как устаревший; новым пользователям ставить его не советуют.","descCollapse":"Показать меньше","descExpand":"Показать больше","diagExplain":"Что это","diagExplainText":"Эта страница ищет плагины, конфликтующие друг с другом, несовпадения версий зависимостей и неверный порядок загрузки. Термины:","diagOkAll":"Всё в порядке: конфликтов, проблем с зависимостями и порядком не найдено","diagTermBundle":"бандл — один пакет плагина, применяется по порядку","diagTermEntry":"запись — то, что плагин добавляет в работающую композицию","diagTermOrder":"порядок загрузки — очерёдность активации; более поздний может перекрыть более ранний","diagTermOrphan":"неверная запись — конфиг ссылается на то, чего нет","diagTermPeer":"peer-зависимость — пакет, который плагин ждёт от хоста","diagTermShadow":"перекрытие — старая копия из плагина закрывает более новую хостовую","disable":"Выключить","disabledState":"Выключен","dismiss":"Скрыть","dismissNotice":"Скрыть это уведомление","duplicateNames":"Плагины с одинаковыми именами (к сведению, это не конфликт)","empty":"Подходящих плагинов нет","enable":"Включить","envFix":"Настроить автоматически","envFixFail":"Автоматическая настройка не удалась — выгрузите журнал и пришлите нам файл","envFixing":"Настройка…","envMissing":"Перед установкой плагинов нужен один небольшой компонент","exportLog":"Выгрузить журнал","exportLogFail":"Не удалось выгрузить журнал","exportedLog":"Журнал выгружен: dsh-market-log.txt — приложите его к обращению","exportingLog":"Выгрузка…","filter":"Фильтр","filterDir":"Порядок","filterSort":"Поле сортировки","filterTime":"Вышло за","firstPage":"В начало","gist":"GitHub Gist","gistCreated":"Выгружено:","gistErrAuth":"GitHub не авторизовал: токен неверный или истёк, либо gh CLI не залогинен","gistErrInvalid":"Содержимое Gist повреждено или формат копии не поддерживается","gistErrNetwork":"GitHub недоступен — проверьте сеть или прокси","gistErrNoId":"Для обновления нужен идентификатор Gist — заполните поле или переключитесь на «Создать»","gistErrNotFound":"Gist не найден — проверьте идентификатор или ссылку","gistErrRateLimit":"Достигнут лимит GitHub, либо у токена нет права gist","gistErrTimeout":"GitHub не ответил вовремя — проверьте сеть и повторите","gistExport":"Выгрузить в Gist…","gistExportDone":"Выгружено в Gist","gistExportGo":"Выгрузить","gistExportHint":"Отмечено всё — полная копия вместе с настройками; если снять любую галочку, выгрузятся только выбранные плагины, а настройки — по отдельному флажку.","gistExportSelect":"Выберите плагины для выгрузки","gistId":"Идентификатор или ссылка на Gist (при выгрузке оставьте пустым, чтобы создать новый приватный)","gistImport":"Загрузить из Gist","gistIncludeConfig":"Включить файлы настроек (в них могут быть секреты)","gistModeCreate":"Создать новый приватный Gist","gistModeUpdate":"Обновить Gist из поля","gistNoPlugins":"В этом профиле нечего выгружать","gistNote":"В отличие от локальной выгрузки (архив на этой машине), Gist нужен для переноса между машинами: выгрузите в приватный Gist и загрузите на другом компьютере под тем же аккаунтом. Токен живёт только в памяти этой вкладки и никогда не пишется в браузерное хранилище; если залогинен gh CLI или задан DSH_GITHUB_TOKEN, вводить его не нужно. Gist приватный, до 1 МБ на файл.","gistSelectAll":"Выбрать все","gistSelectNone":"Снять выбор","gistSpecLocal":"локально","gistSrcEnv":"переменная DSH_GITHUB_TOKEN","gistSrcGh":"gh CLI","gistSrcToken":"введён вручную","gistToken":"Токен GitHub (только в памяти вкладки — после обновления страницы введите заново; оставьте пустым, чтобы использовать серверный DSH_GITHUB_TOKEN или залогиненный gh CLI)","gistVerify":"Проверить связь","gistVerifySource":"Проверено — источник токена: {0}","goDiagnose":"Открыть диагностику","gotIt":"Понятно","groupAdd":"Добавить плагин","groupAddEmpty":"Все установленные плагины уже в этой группе","groupAddTheme":"Добавить тему","groupAssign":"Назначить","groupConfirmDelete":"Удалить группу?","groupCreate":"Создать","groupDelete":"Удалить группу","groupEmpty":"Пока пусто","groupMixed":"Включена частично","groupNamePh":"Название группы","groupNew":"Новая группа","groupRemove":"Убрать","groupRename":"Переименовать","hostDependencyMore":"ещё находок пропущено: {0}","hostDependencyWarning":"Плагин перечисляет в зависимостях известные общие пакеты хоста DSH. Это может перекрыть хостовую версию; проверка смотрит только манифест и не подтверждает, что в рантайме появился дубль:","hotBanner":"плагины готовы — обновите страницу, чтобы ими пользоваться","install":"Установить","installFail":"Установить не удалось","installReplacement":"Установить замену","installedBadge":"✓ Установлен","installedEmpty":"Плагинов сообщества пока нет — загляните во вкладку «Обзор»","installing":"Установка…","lastPage":"В конец","lightboxClose":"Закрыть предпросмотр","lightboxNext":"Следующий","lightboxPrev":"Предыдущий","linkedDev":"подключён как разработка","loadFail":"Не удалось загрузить каталог плагинов, попробуйте позже","loadRetry":"Повторить","loading":"Загрузка каталога…","localOnly":"Адрес WebDAV и учётные данные остаются только в этом браузере.","marketNoToggle":"Сам маркет выключить нельзя","marketUpdate":"Доступно обновление маркета — обновить","nav":"Маркет плагинов","nextPage":"Дальше","noGroups":"Групп пока нет — создайте","notInstalled":"Не установлен","noteAdd":"Заметка","noteEdit":"Редактировать заметку","noteMine":"Моя заметка","notePlaceholder":"Опишите это своими словами. Это заменит описание автора.","noteSave":"Сохранить","noteSeeMine":"Вернуться к моей заметке","noteSeeTheirs":"Показать описание автора","noteTheirs":"Оригинал","notesCommits":"Коммиты","notesCommitsRecent":"Последние коммиты (могут не совпадать с установленной версией — только для справки)","notesLink":"Что изменилось","notesLoadFail":"Обновления сейчас недоступны — попробуйте позже.","notesNone":"Этот плагин не публикует заметки об обновлениях.","notesNpm":"Время публикации версии","notesRelease":"Заметки о выпуске","opBlockedCard":"Невозможно установить · подробности","opClear":"Очистить выполненные","opClose":"Свернуть","opDequeue":"Удалить из очереди","opDone":"Готово","opDoneRefresh":"Установлено · обновите страницу для применения","opEmpty":"Нет операций в процессе выполнения","opEmptyHint":"Здесь отображается прогресс установки, обновления и удаления","opInstalling":"Установка","opKind_install":"Установить","opKind_uninstall":"Удалить","opKind_update":"Обновить","opLeaveHint":"Вы можете покинуть эту страницу; вы получите уведомление, когда процесс завершится","opNeedsChoice":"Не удалось установить · откат выполнен автоматически, ничего не изменилось","opNeedsYou":"нужен вам","opQueued":"В очереди","opQueuedAhead":"впереди:","opRetry":"Повторить","opRunning":"Работает","opTitle":"Задачи","orderAlreadyOptimal":"Текущий порядок уже удовлетворяет всем правилам и зависимостям — переставлять нечего","orderApplied":"✓ Применено — перезапустите, чтобы вступило в силу","orderApply":"Применить порядок","orderAutoSort":"Отсортировать автоматически","orderConflicts":"конфликты before/after в текущем порядке","orderDiffHint":"Этот порядок изменит композицию: переопределений {0}, потерянных записей {1}, дублей {2}","orderDown":"↓","orderDrag":"Перетащите, чтобы изменить порядок","orderDragHint":"Тяните ⠿, чтобы переставить; «Применить порядок» сохранит","orderReset":"Сбросить черновик","orderSection":"Порядок загрузки","orderSuggestApply":"Применить предложенный порядок","orderSuggestHint":"Предложенный порядок (отсортирован по правилам before/after):","orderTrialFail":"Статическая проверка композиции не прошла: {0}","orderUp":"↑","orphanBundle":"⚠️ Следующий запуск завершится ошибкой: профиль объявляет эти пакеты, но они не установлены. Переустановите их или удалите из dsh.profile.bundles в файле package.json профиля:","orphanIdRequired":"нет идентификатора","orphanInsertNotArray":"неверный формат","orphanInsertTargetMissing":"цель не найдена","orphanInsertTargetNotGroup":"цель не является группой","orphanNameMismatch":"имя не совпадает","orphanPatchTargetMissing":"цель не найдена","orphanReasonOther":"другое","packagesDone":"обработано пакетов: {0}","pageInfo":"Страница {0} из {1}","partialNote":"Отменено — часть изменений уже применена","patchDisabled":"Выключен патчем","patchForced":"Включён патчем","peerInfoUnverified":"непроверенный","peerRiskAboveMax":"выше явного максимума","peerRiskBelowMin":"ниже заявленного минимума","peerWarnAboveMax":"выше объявленной верхней границы","peerWarnOptional":"необязательный участник","perPage":"На странице","phaseBuilding":"Сборочные скрипты","phaseDownloading":"Загрузка","phaseLinking":"Связывание","phaseResolving":"Разрешение зависимостей","presetApplied":"Применено — перезапустите, чтобы применить","presetApply":"Применить","presetBundleCount":"{0} наборов","presetDelete":"Удалить","presetDeleted":"Пресет удалён","presetDisable":"отключить плагины {0}","presetEmpty":"Нет сохранённых пресетов","presetEnable":"включить плагины {0}","presetFail":"Не удалось выполнить предустановленную операцию:","presetHint":"Сохраните текущий порядок пакетов и список отключенных как пресет и переключайтесь в любое время; применение запускает проверку перед началом пробного периода и сначала создает снимок.","presetListFail":"Не удалось загрузить пресеты:","presetName":"Название пресета","presetNameEmpty":"Введите имя предустановки","presetNoop":"нет изменений","presetPreview":"Предпросмотр","presetPreviewFail":"Не удалось выполнить предварительный просмотр:","presetPreviewTitle":"Применение этого пресета приведёт к:","presetReorder":"переупорядочить {0} наборы","presetSave":"Сохранить текущее состояние","presetSaved":"Пресет сохранён","presetSaving":"Сохранение…","presetSection":"Пресеты плагинов","prevPage":"Назад","progressHint":"Первая установка скачивает и разрешает зависимости — крупные плагины занимают 1–3 минуты","published":"выпущен","readme":"README","reconciledNote":"Удалено, но pnpm сообщил об ошибке при завершении (обычно это заблокированный файл). Профиль уже согласован — повторная попытка не требуется.","refresh":"Обновить","refreshBanner":"изменения применены — обновите страницу, чтобы их увидеть","replacementHint":"Каталог предлагает","repoLink":"Посмотреть репозиторий на GitHub","restartBanner":"изменения внесены — перезапустите DeepSeek Harness","restartFail":"Перезапустить не удалось","restartHint":"Как перезапустить: остановите текущий процесс dsh и запустите его снова (например, dsh web)","restartHintSupervised":"Этот процесс является собственным сервисным процессом {0}, поэтому перезапуски относятся к нему — перезапуск отсюда завершит процесс передачи вместе с cgroup, и сервис не восстановится. Используйте systemctl restart <ваш юнит>. Если ваш юнит может пережить самостоятельный перезапуск (KillMode=process), включите параметр \"Разрешить перезапуск\" в настройках этого плагина.","restartNow":"Перезапустить","restartTimeout":"Не дождались запуска DeepSeek Harness","restarting":"Перезапуск…","restore":"Восстановить","restoreBootError":"Не удается загрузиться после восстановления:","restoreConfirm":"Восстановление перезапишет настройки этого профиля и переустановит плагины. Продолжить?","restoreContinue":"Продолжить обновление","restoreDone":"Восстановление завершено — перезапустите DeepSeek Harness","restoreFail":"Не удалось восстановить","restoreHint":"Это удалит локальную версию, переустановит версию из каталога и сохранит проверку обновлений. Это действие нельзя отменить — подтвердите ещё раз.","restoreMissing":"Плагинов из копии не установлено: {0}","restoreNoCatalog":"Этот плагин отсутствует в курируемом каталоге, поэтому его нельзя восстановить. Удалите локальную копию или продолжайте разрабатывать её локально.","restorePartial":"Восстановление продолжилось, но эти плагины установить не удалось:","restorePreviewDone":"Копия загружена. Проверьте вкладку «Установленные» и запускайте восстановление.","restoreStart":"Начать восстановление","restoreUnportable":"указывает на абсолютный путь с другой машины, который здесь не существует — перенаправьте его локально или переустановите плагин","rollbackNow":"Откатить","rollingBack":"Откат изменений…","searchPh":"Поиск плагинов: уведомления, терминал, память…","setCardDesc":"Версия маркета, обновление и удаление.","setChannel":"Канал обновлений","setChannelBeta":"Бета","setChannelBetaHint":"Ранний доступ к непроверенным версиям. Влияет только на рынок плагинов.","setChannelDev":"Разработка","setChannelDevHint":"Непроверенные сборки из ветки разработки. Не рекомендуются для общего использования.","setChannelStable":"Стабильный","setChannelStableHint":"Только выпущенные версии.","setChannelSwitch":"Переключиться на","setChannelSwitchHint":"Эта версия ниже установленной.","setRegion":"Скачать регион","setRegionAuto":"Выбрано на основе проверки сети. Можете изменить в любое время.","setRegionChina":"Китай, материковая часть","setRegionChinaHint":"Быстрее в материковом Китае. Изменяет маршрут загрузки, не источник.","setRegionGlobal":"Глобальный","setRegionGlobalHint":"Загрузки напрямую из npm и GitHub.","setSelfCancel":"Отмена","setSelfConfirm":"Удалить маркет плагинов? Поставить его заново можно будет только из командной строки.","setSelfFailed":"Операция не удалась","setSelfPurge":"Заодно стереть данные маркета","setSelfPurgeOff":"Данные маркета сохранятся. Учтите: плагины, которые он выключил, останутся выключенными, а интерфейса, чтобы вернуть их, после удаления не будет.","setSelfPurgeOn":"Будут удалены: список выключенных плагинов, свои группы и строки выключения, которые маркет записал в патч профиля, — выключенные им плагины снова заработают. Паролей и токенов это не касается: маркет их на диск не пишет.","setSelfRemove":"Удалить маркет плагинов","setSelfRemoveConfirm":"Удалить","setSelfRemoveHint":"Удаляет маркет из этого профиля. Остальные плагины не трогаются.","setSelfRemoved":"Удалён","setSelfRemovedHint":"Перезапустите DeepSeek Harness, чтобы завершить.","setSelfRestartAfter":"Перезапустить DeepSeek Harness сразу после удаления","setSelfRestartingHint":"Перезапуск DeepSeek Harness…","setSelfUpToDate":"Обновлений нет","setSelfUpToDateHint":"Актуально, обновление не требуется","setSelfUpdate":"Обновить","setSelfUpdateHint":"Обновление скачает новую версию; она заработает после перезапуска.","setSelfUpdateReady":"Доступна новая версия:","setSelfUpdatedHint":"Скачано. Перезапустите DeepSeek Harness, чтобы обновление вступило в силу: страница обновляется сразу, серверная половина — нет.","setSelfWorking":"Удаление…","shadowNameBanner":"Эта операция оставила одно имя плагина, определенное в двух слоях; после перезапуска загрузится только один:","snapCreate":"Создать снимок","snapCreateFail":"Не удалось создать снимок:","snapCreated":"Снимок создан","snapCreating":"Создание…","snapDelete":"Удалить","snapDeleteConfirm":"Подтвердить удаление","snapDeleteConfirmText":"Этот снимок нельзя будет восстановить после удаления.","snapDeleteFail":"Не удалось удалить снимок:","snapDeleted":"Снимок удалён","snapDeleting":"Удаление…","snapEmpty":"Снимков пока нет","snapFiles":"файлы","snapHint":"Снимки создаются автоматически перед применением изменений; вы также можете создать их вручную и откатиться в любой момент.","snapListFail":"Не удалось загрузить снимки:","snapRestore":"Восстановить","snapRestoreConfirm":"Подтвердите восстановление","snapRestoreConfirmText":"Восстановление перезаписывает текущий package.json профиля и конфигурацию из снимка; это действие нельзя отменить (создайте новый снимок, если не уверены).","snapRestoreFail":"Не удалось восстановить:","snapRestored":"Восстановлено — перезапустите для применения","snapRestoring":"Восстановление…","snapSection":"Снимки & Откат","sortAdded":"Дата выпуска","sortAsc":"По возрастанию","sortDesc":"По убыванию","sortDownloads":"npm загрузки (30д)","sortNewest":"Сначала новые","sortOldest":"Сначала старые","sortStars":"Звёзды","stateBroken":"Установлен, но не прошёл проверку","stateDisabled":"Выключен","stateInert":"Установлен, но не является плагином слоя профиля","stateLive":"Работает (загружен на лету)","stateRestart":"Установлен — перезапустите, чтобы применить","submitPlugin":"Хотите, чтобы ваш плагин был добавлен в список?","subtitle":"Плагины сообщества для DeepSeek Harness","switchOnLabel":"Включено","tabAdvanced":"Дополнительно","tabBackup":"Копия и восстановление","tabDiagnostics":"Диагностика","tabDiscover":"Обзор","tabGroups":"Группы","tabInstalled":"Установленные","tabList":"Список","tabThemes":"Темы","terminalWarn":"Похоже, это плагин для терминала: в веб-профиле он может ничего не делать или даже сломать запуск DeepSeek Harness. Прочитайте его README и ставьте в тот профиль, для которого он написан.","themeActive":"Активна","themeApply":"Применить","themeDeactivate":"Отключить","themeEmpty":"Других тем в каталоге пока нет — следите за обновлениями","themeExitFullscreen":"Выйти из полноэкранного режима","themeFullscreen":"Просмотр в полноэкранном режиме","themePreview":"Предпросмотр","themePreviewCount":"{0} предпросмотры","themePreviewLoading":"Поиск предварительного просмотра…","themePreviewMissing":"Предпросмотр недоступен","themeResultCount":"{0} темы","timeAll":"Всё время","timeDay":"Сутки","timeMonth":"30 дней","timeQuarter":"90 дней","timeWeek":"7 дней","timeYear":"Год","toastReady":"установлен и работает","toastTheme":"теперь активна. Переключить можно в «Настройки → Маркет плагинов → Темы»","toastToggledOff":"теперь выключено — перестало работать сразу","toastToggledOn":"включён","toggleFail":"Переключить не удалось","ungrouped":"Без группы","uninstall":"Удалить","uninstallConfirmDesc":"Плагин будет удалён из текущего профиля.","uninstalling":"Удаление…","upToDate":"Обновлений нет","update":"Обновить","updateAll":"Обновить все","updateFail":"Обновить не удалось","updateNow":"Обновить сейчас","updated":"✓ Обновлён — перезапустите, чтобы применить","updatedLive":"✓ Обновлён — работает","updating":"Обновление…","versionHint":"Версия маркета плагинов — указывайте её при обращении","viewReplacement":"Посмотреть замену","viewSource":"Исходник","webdav":"WebDAV","webdavNote":"Адрес WebDAV и имя пользователя остаются только в этом браузере; пароль хранится на сервере и вводится заново каждую сессию.","webdavPassword":"Пароль (необязательно)","webdavPreset":"Готовая настройка провайдера","webdavRestore":"Восстановить с WebDAV","webdavUpload":"Выгрузить копию","webdavUrl":"Адрес файла копии","webdavUser":"Имя пользователя (необязательно)"},"dsh-skill-explorer":{"close":"Закрыть","create.content":"Инструкции (тело SKILL.md, Markdown)","create.created":"Создано: {path}","create.description":"Описание (как модель понимает, когда активировать навык)","create.empty":"Имя, описание и содержимое навыка не могут быть пустыми","create.failed":"Ошибка создания: {error}","create.name":"Имя навыка (kebab-case, совпадает с именем каталога)","create.namePlaceholder":"например, my-workflow","create.note":"Навык активируется немедленно (автосканирование файловой системы). Его содержимое внедряется в контекст модели как инструкция — не указывайте конфиденциальные данные.","create.root":"Расположение","create.root.project":"Навыки проекта (каталог .dsh/skills текущего проекта)","create.root.user":"Глобальные навыки (~/.dsh/skills, доступны во всех проектах)","create.submit":"Создать навык","create.whenToUse":"Когда применять (необязательно)","cwd":"рабочая папка: {cwd}","entry.label":"Центр навыков","entry.tooltip":"Центр навыков: обзор и управление загруженными навыками","group.bundled":"Встроенные в систему","group.custom":"Пользовательские каталоги","group.project-agents":"Навыки проекта (.agents/skills)","group.project-dsh":"Навыки проекта (.dsh/skills)","group.runtime":"Зарегистрированные в рантайме","group.user-agents":"Глобальные навыки (~/.agents/skills)","group.user-dsh":"Глобальные навыки (~/.dsh/skills)","groupHint.bundled":"Глобальные навыки, поставляемые с DSH и его плагинами","groupHint.custom":"Конфигурация customSkillDirs","groupHint.project-agents":"Расположены в каталоге проекта, ограничены его рабочей областью","groupHint.project-dsh":"Расположены в каталоге проекта, ограничены его рабочей областью","groupHint.runtime":"Навыки, зарегистрированные плагинами во время работы","groupHint.user-agents":"Глобальные навыки (~/.agents/skills), общие для всех проектов","groupHint.user-dsh":"Глобальные навыки (~/.dsh/skills), общие для всех проектов","list.count":"{count}","list.delete":"Удалить","list.deleteConfirm":"Удалить навык \"{name}\"? Он будет перемещён в .trash.","list.deleteFailed":"Не удалось удалить: {error}","list.disabled":"Отключено: недоступно для вызова моделью (нажмите для включения)","list.empty":"Навыки пока не загружены.","list.enabled":"Включено: доступно для вызова моделью (нажмите для отключения)","list.invokable":"Вызов: {marks}","list.invokableTooltip":"Модель может вызывать этот навык автоматически; ручные команды /skill остаются доступны","list.linked":"символическая ссылка","list.loadFailed":"Не удалось загрузить: {error}","list.loading":"Загрузка…","list.mark.model":"модель","list.mark.user":"пользователь","list.toggleFailed":"Сбой операции: {error}","list.when":"Условие: {when}","panel.title":"Центр навыков","provider.filesystem":"Файловая система","provider.tooltip":"Источник навыка: {provider}","refresh":"Обновить","tab.create":"Создать","tab.list":"Навыки"},"dsh-skill-hub":{"badge.source.bundled":"встроенный","badge.source.custom":"свой каталог","badge.source.project-agents":"проект .agents","badge.source.project-dsh":"проект .dsh","badge.source.runtime":"runtime","badge.source.user-agents":"пользователь .agents","badge.source.user-dsh":"пользователь .dsh","delete.confirm":"В корзину","delete.confirmText":"Переместить «{name}» в корзину? Его можно восстановить в любой момент.","delete.confirmTitle":"В корзину?","detail.addedAt":"Добавлен","detail.back":"К списку","detail.groups":"Группы","detail.loading":"Загрузка текста навыка…","detail.path":"Путь","detail.provider":"Провайдер","detail.updatedAt":"Обновлён","detail.uses":"Вызовы","detail.whenToUse":"Когда применять","entry.label":"Навыки","entry.tooltip":"Центр навыков: просмотр, группировка и синхронизация локальных навыков","err.dismiss":"Понятно","filter.allSources":"Все источники","filter.private":"Личные","form.busy":"Создание…","form.cancel":"Отмена","form.capabilityHint":"Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.","form.desc":"Описание (одно предложение для маршрутизации)","form.descPlaceholder":"Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык","form.error":"Ошибка создания: ","form.name":"Имя навыка (kebab-case, например code-review)","form.root":"Целевой каталог","form.submit":"Создать","form.success":"Создано: ","group.bundled":"Встроенные","group.custom":"Пользовательские каталоги","group.other":"Другие источники","group.project-agents":"Проектные .agents/skills","group.project-dsh":"Проектные .dsh/skills","group.runtime":"Runtime","group.user-agents":"Пользовательские ~/.agents/skills","group.user-dsh":"Пользовательские ~/.dsh/skills","groups.closeAll":"Закрыть все","groups.conflictText":"Эти навыки включены и в других группах; их закрытие затронет и те группы:","groups.conflictTitle":"Закрыть эту группу?","groups.delete":"Удалить сценарий","groups.edit":"Изменить","groups.empty":"Сценариев ещё нет. Создайте один и начните раскладывать навыки.","groups.keepOn":"Оставить включёнными","groups.membersHint":"Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).","groups.merge":"Объединить","groups.namePlaceholder":"Название сценария","groups.new":"Новый сценарий","groups.noCollections":"Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.","groups.noWritable":"В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)","groups.personal":"Личные","groups.project":"Проектные","groups.rename":"Сохранить название","groups.saveMembers":"Сохранить состав","groups.subdivide":"Разделить","legend.hint":"У навыка не более одной точки; нет точки = не вызывается.","legend.model":"Вызывается моделью — агенты могут вызывать автоматически","legend.user":"Вызывается пользователем — только явный вызов","market.add":"Добавить","market.addPlaceholder":"owner/repo или https://github.com/…","market.addSource":"Добавить источник","market.branchConfirm":"Подтвердить","market.branchHint":"У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):","market.branchTitle":"Выберите ветку","market.catalog.anthropics":"Официальная коллекция навыков Anthropic (Claude Skills)","market.catalog.mattpocock":"Коллекция навыков Matt Pocock","market.catalog.openDesign":"Коллекция навыков дизайна (design-templates)","market.catalog.superpowers":"Коллекция навыков сообщества Superpowers","market.catalogHint":"Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.","market.check":"Проверить","market.checkAll":"Проверить все","market.checkUpdate":"Проверить обновления","market.checking":"Проверка…","market.deleteSource":"Удалить источник","market.deletedUpstream":"Удалено в источнике: {count}","market.installed":"Установлено: {count}","market.newRelease":"Новая версия v{version}","market.noSources":"Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.","market.removeHint":"Удаление источника не затрагивает установленные навыки.","market.scan":"Сканировать","market.scanning":"Сканирование…","market.sync":"Синхронизировать","market.syncCancel":"Пропустить","market.syncNone":"Из этого репозитория пока не импортировано ни одного навыка.","market.syncText":"Источник выровнен с {ref}. Обновить эти локальные навыки?","market.syncTitle":"Обновить локальные навыки","market.syncing":"Синхронизация…","market.title":"Маркет","market.upToDate":"Актуально","market.updatable":"Обновляемо: {count}","market.update":"Обновить","market.updateAll":"Обновить всё","market.updateAllConfirmText":"Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:","market.updateAllConfirmTitle":"Обновить все навыки?","market.updateAllDone":"Обновлено источников: {count}","market.updateAllItem":"{repo} (навыков: {count})","market.updateCount":"Обновить {count}","market.updated":"Есть обновления","panel.count":"Всего навыков: {count}","panel.diagnostics":"Диагностика обнаружения","panel.disabled":"Отключено","panel.disabledCount":"Отключено: {count}","panel.empty":"Нет подходящих навыков.","panel.emptyAll":"Навыков пока нет. Создайте первый.","panel.enabled":"Включено","panel.incomplete":"(каталог может быть неполным)","panel.loading":"Загрузка…","panel.new":"Новый навык","panel.search":"Поиск навыков…","panel.title":"Центр навыков","panel.workspaceClear":"Очистить рабочую область","panel.workspaceHint":"Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.","panel.workspacePlaceholder":"Путь рабочей области (Enter — применить)","repo.cancel":"Отмена","repo.cancelled":"Отменено · {imported}/{total} сохранено, временные файлы удалены","repo.clearAll":"Очистить","repo.empty":"Импортируемых навыков не найдено.","repo.existing":"Существующие","repo.failed":"Не удалось: {count}","repo.files":"Файлов: {count} · {size}","repo.import":"Импортировать выбранные ({count})","repo.imported":"Импортировано: {count}","repo.importing":"Импорт…","repo.importingCurrent":"Импорт: {name} ({done}/{total})","repo.ready":"Найдено импортируемых навыков: {count}","repo.root.designTemplates":"Шаблоны design-templates","repo.root.generic":"{root}","repo.root.skills":"Навыки (skills)","repo.selectAll":"Выбрать все","repo.skippedExisting":"Пропущено существующих: {count}","row.delete":"В корзину","row.disable":"Отключить","row.enable":"Включить","row.open":"Подробнее о навыке {name} (Enter)","row.readonly":"только чтение","settings.announceToAgent":"Объявлять агенту","settings.announceToAgentHint":"Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.","settings.collapse":"Скрыть настройки","settings.description":"Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.","settings.discard":"Отменить","settings.dotModelColor":"Цвет точки «вызывается моделью»","settings.dotModelColorHint":"Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).","settings.dotUserColor":"Цвет точки «вызывается пользователем»","settings.dotUserColorHint":"Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).","settings.enabled":"Включить плагин","settings.enabledHint":"Отключает маршруты, элементы и объявление центра навыков.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.notExposed":"Это развёртывание не предоставляет пространство настроек.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.readOnly":"Настройки этого развёртывания доступны только для чтения.","settings.reset":"Сбросить к значению по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Развёртывание не приняло эти значения; они оставлены для исправления.","settings.saving":"Сохранение…","settings.showGroupSummary":"Показывать сводку по группам","settings.showGroupSummaryHint":"После заголовков групп показывать число вызовов и время последнего вызова.","settings.showUseCount":"Показывать число вызовов","settings.showUseCountHint":"Показывать янтарный счётчик вызовов рядом с именем навыка.","settings.showUseTime":"Показывать время последнего вызова","settings.showUseTimeHint":"Показывать относительное время в строке имени (например «3 дн назад»).","settings.statsScanMinutes":"Интервал автостатистики (минут)","settings.statsScanMinutesHint":"Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.","settings.statsWindowDays":"Окно статистики (дней)","settings.statsWindowDaysHint":"Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.","settings.title":"Центр навыков","settings.unsaved":"Есть несохранённые","sort.added":"По дате добавления","sort.name":"По названию","sort.uses":"По числу вызовов","source.check":"Проверить обновления","source.checkHint":"Нажмите, чтобы проверить источник на обновления","source.checking":"Проверка…","source.clearTrash":"Очистить корзину","source.clearTrashConfirm":"Удалить безвозвратно","source.clearTrashConfirmText":"Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.","source.clearTrashConfirmTitle":"Очистить корзину?","source.commit":"Синхронизированная ревизия","source.deleteConfirmText":"Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):","source.deleteConfirmTitle":"Согласиться с удалением в источнике?","source.deleteGroup":"Удалить группу","source.deleteGroupHint":"Удалить все навыки ({count}) этой группы","source.deleteGroupText":"Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:","source.deleteGroupTitle":"Удалить группу?","source.deleted":"Удалено в источнике: {count}","source.error":"Проверка не удалась","source.followDelete":"Согласиться с удалением","source.private":"Личный навык (не привязан к источнику; проверки обновлений нет)","source.restore":"Восстановить","source.sync":"Синхронизировать","source.syncConfirmText":"Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:","source.syncConfirmTitle":"Синхронизировать навыки?","source.syncing":"Синхронизация…","source.throttled":"Недавно проверено","source.trash":"Корзина","source.unverified":"источник ещё не проверен","source.upToDate":"Актуально","source.updated":"Обновлений: {count}","time.daysAgo":"{value} дн назад","time.hoursAgo":"{value} ч назад","time.justNow":"только что","time.minutesAgo":"{value} мин назад","time.weeksAgo":"{value} нед назад","update.available":"Доступно обновление: v{version} (текущая v{current})","update.check":"Проверить обновления","update.checking":"Проверка…","update.error":"Не удалось проверить обновления: {error}","update.newVersion":"Новая версия v{version}","update.unavailable":"Нет доступных релизов","update.upToDate":"Актуальная версия: v{version}","update.viewRelease":"Открыть релиз","view.flat":"Списком","view.grouped":"По группам","view.market":"Маркет","view.scenes":"Сценарии","view.sources":"Источники"},"dsh-subscriptions":{"accountLabel":"Аккаунт","addAccount":"+ Добавить аккаунт","cardIntro":"Подписки, ротация и ограничения аккаунтов.","connect":"Подключить","connected":"Подключено","coolingDown":"Охлаждение","disconnect":"Отключить","hide":"Скрыть","intro":"Войдите с помощью потребительской подписки. Токены остаются в хранилище учетных данных хоста. Браузер никогда не читает их обратно. После подключения, если провайдер перенаправляет на localhost или страницу провайдера, вставьте перенаправленный URL или код сюда.","loading":"Загрузка…","notConnected":"Не подключено","pastePlaceholder":"Вставьте перенаправленный URL или код","plan":"План","reconnect":"Переподключиться","removeSlot":"Удалить слот","save":"Сохранить","saved":"Сохранено","show":"Показать","storedAs":"Хранится как","submitCode":"Отправить код","title":"Подписки","usageFull":"Использование 100%","useOrigin":"Используйте этот источник Web UI как redirect_uri для OAuth","useOriginHint":"Не включайте, если вы не зарегистрировали собственный OAuth-клиент для этого источника. CLI-клиенты провайдеров обычно требуют опубликованный URI перенаправления и шаг вставки.","verifyAccount":"Подтвердить аккаунт","verifyLink":"Откройте ссылку для подтверждения","verifyPrefix":"Google требует одноразовой проверки аккаунта.","verifySuffix":"затем переподключитесь."},"dsh-tts":{"addProvider":"Добавить провайдера","announce":"Объявлять одобрения","announceHint":"Произнесите вслух и воспроизведите мелодию, когда агент остановится для подтверждения или задаст вопрос.","approvalHint":"Сказано, когда запрашивается одобрение; добавляется название инструмента.","approvalText":"Формулировка одобрения","azureHint":"Необходимо для провайдера Azure, например, eastus.","azureRegion":"Регион Azure","bargeIn":"Замолкать, когда вы говорите","bargeInHint":"Перестаньте читать, как только микрофон откроется.","binHint":"Ищется в PATH, если не указан абсолютный путь.","cardHint":"Цепочка провайдеров, голоса и параметры воспроизведения.","chainHint":"Сверху вниз указан порядок резервирования. Ключи облака сохраняются в хранилище учетных данных хоста, никогда в настройки плагина.","chainHintCard":"Выберите провайдера, вставьте его API-ключ и сохраните (или оставьте поле ключа пустым). Ключ сразу записывается в хранилище учетных данных хоста. Браузер никогда не читает его обратно.","chainTitle":"Цепочка провайдеров","chime":"Звонок","chimeHint":"динь, бип или ничего.","clear":"Очистить","configured":"Настроено","down":"Вниз","edgeBin":"бинарный файл edge-tts","edgeHint":"Python CLI из пакета edge-tts.","espeakBin":"Бинарный файл eSpeak","espeakHint":"Обычно espeak-ng.","fromEnv":"Задано в окружении","general":"Общие","language":"Язык","languageHint":"Подсказка для голосов, которым требуется локаль (eSpeak, Azure SSML).","loading":"Загрузка…","localProvider":"Локальный / CLI провайдер — без API-ключа","notSet":"Не задано","piperBin":"Бинарный файл Piper","piperModel":"Путь к модели Piper","piperModelHint":"Абсолютный путь к модели ONNX. Оставьте пустым, чтобы пропустить Piper.","questionHint":"Используется, когда агент задаёт вопрос. Если оставить пустым, функция будет отключена.","questionText":"Формулировка вопроса","rate":"Скорость воспроизведения","rateHint":"От 0.5 до 2. Синтез не изменяется; браузер воспроизводит быстрее или медленнее.","remove":"Удалить","save":"Сохранить","saved":"Сохранено","speakAsItGoes":"Говорите по мере проигрывания","speakAsItGoesHint":"Читайте каждый ответ сразу, как только он появляется, предложение за предложением, вместо ожидания всей очереди.","speakReplies":"Озвучивать ответы агента","speakRepliesHint":"Когда включено, каждый завершённый ответ синтезируется на хосте и воспроизводится в этом браузере. Аудио не отправляется обратно в модель.","title":"Речь","up":"Вверх"},"dsh-voice":{"addCustom":"Добавить своего провайдера","addProvider":"Добавить провайдера","browserFailed":"Браузер не распознал:","browserHint":"браузер выполняет распознавание, ключ не требуется","cancel":"Отмена","chainHint":"Сверху вниз — порядок, в котором они проверяются","clearKey":"Очистить ключ","composerUnavailable":"Композитор недоступен","customHint":"Любой OpenAI-совместимый API. Название становится доступным в цепочках выше.","customKeyName":"название ключа","customModel":"модель","customModelHint":"модель для запроса (пустое значение означает встроенную)","customName":"имя, используемое в цепочке","customTitle":"Ваши собственные провайдеры","deepinfraHint":"openai/whisper-large-v3-turbo · ключ DEEPINFRA_API_KEY","dictationBtn":"Голосовой ввод","dictationHint":"Речь обрезается на паузах, а текст добавляется к вводу.","dictationPill":"Диктовка — текст добавляется к вводу","down":"Вниз","fireworksHint":"whisper-v3-turbo · ключ FIREWORKS_API_KEY","general":"Общие","hide":"Скрыть","holdHint":"Удерживайте — отпустите, чтобы отправить","hotkey":"Клавиша голосового сообщения","hotkeyHint1":"Держите для записи, отпустите, чтобы отправить агенту, Esc отменяет.","hotkeyHint2":"Подойдёт любая клавиша: буква, F-клавиша или модификатор.","keepPending":"Не отправлять","keySpace":"Пространство","keyUnset":"не задано","language":"Язык","listening":"Слушаю в браузере…","loadingSettings":"Загрузка настроек…","localHint":"устанавливается при запуске сервера","messageBtn":"Голосовое сообщение — нажмите или удерживайте","messageHint":"Одна целая запись, отправленная агенту после расшифровки.","messagePill":"Запись голосового сообщения","messageTitle":"Голосовое сообщение","micUnavailable":"Микрофон недоступен: требуется HTTPS или localhost","mistralHint":"voxtral-mini-latest · ключ MISTRAL_API_KEY","noRecorder":"Этот браузер не поддерживает MediaRecorder","notReady1":"Харнесс ещё не объявил настройки этого плагина. Если он только что перезапустился,","notReady2":"раздел появится сам через несколько секунд.","nothingHeard":"Ничего не было распознано","openaiHint":"whisper-1 · ключ OPENAI_API_KEY","openrouterHint":"google/gemini-2.5-flash · ключ OPENROUTER_API_KEY","openrouterWarning":"У OpenRouter нет /audio/transcriptions — используйте там шаблон openai-chat-audio","pauseHint":"Меньшее значение означает более частые фрагменты и быстрый текст, но выше риск разрыва слова","pauseMs":"Пауза, завершающая фразу, мс","pressKey":"Нажмите клавишу…","recognitionError":"распознавание не удалось","recordSlot":"Запись голоса","remove":"Удалить","save":"Сохранить","saveFailed":"Некоторые поля не были сохранены —","saved":"Сохранено ✓","secondsShort":"с","sendingIn":"Отправка агенту через","siliconflowHint":"FunAudioLLM/SenseVoiceSmall · ключ SILICONFLOW_API_KEY","stop":"Стоп","title":"Голос","transcribing":"Транскрибируем…","undoHint":"Как долго ещё можно отменить автоматическую отправку","undoMs":"Окно отмены, мс","up":"Вверх","whisperAutostart":"Автозапуск локального whisper","whisperBin":"Локальный шепот: бинарный","whisperBinHint":"используется при включённом автозапуске","whisperEndpoint":"Локальный whisper: адрес","whisperEndpointHint":"POST /inference сервера whisper.cpp","whisperModel":"Локальная модель Whisper"},"feedback":{"action.dislike":"Плохой ответ","action.dislikeActive":"Убрать оценку","action.like":"Хороший ответ","action.likeActive":"Убрать оценку","error.conflict":"Эту оценку изменили в другом месте; показано актуальное состояние","error.generic":"Не удалось сохранить оценку","error.load":"Не удалось загрузить оценку","note.aria":"Комментарий к оценке","note.cancel":"Отмена","note.dialog":"Отзыв","note.open":"Добавить комментарий","note.placeholder":"Что получилось хорошо, а что нет? (необязательно)","note.save":"Сохранить"},"goal":{"action.cancel":"Отменить правку","action.clear":"Снять цель","action.edit":"Изменить цель","action.pause":"Приостановить цель","action.resume":"Продолжить цель","action.save":"Сохранить цель","commandInput.aria":"Ввод команды","objective.aria":"Формулировка цели","phase.active":"Цель в работе","phase.blocked":"Цель заблокирована","phase.paused":"Цель на паузе"},"im-hub":{"f.agentCwd":"Рабочая папка","f.agentCwdHint":"Папка для сессий агента; пусто — папка процесса dsh.","f.agentMaxMessageLength":"Длина сообщения","f.agentMaxMessageLengthHint":"Максимум символов в исходящем сообщении; длинные ответы разбиваются.","f.agentModel":"Модель","f.agentModelHint":"Переопределить модель; пусто — как задано в установке.","f.agentProvider":"Провайдер","f.agentProviderHint":"Переопределить провайдера модели; пусто — как задано в установке.","f.allowedUserIdsHint":"Идентификаторы через запятую; пусто — доступ всем (для боевой работы не советуем).","f.configured":"Задано","f.enabled":"Включено","f.enabledHint":"Общий выключатель всего IM-шлюза.","f.feishuAllowedUserIds":"Разрешённые open id","f.feishuAppId":"App id","f.feishuAppIdHint":"App id приложения Feishu (cli_…).","f.feishuAppSecret":"App secret","f.feishuEnabled":"Включено","f.feishuEnabledHint":"Включить адаптер Feishu по постоянному WebSocket-соединению (публичный адрес не нужен).","f.httpHost":"Адрес привязки","f.httpHostHint":"Адрес, на котором слушают HTTP-серверы в режиме вебхуков.","f.httpPort":"Порт привязки","f.httpPortHint":"Порт, на котором слушают HTTP-серверы в режиме вебхуков.","f.inherit":"Наследовать","f.larkAllowedUserIds":"Разрешённые open id","f.larkAppId":"App id","f.larkAppSecret":"App secret","f.larkEnabled":"Включено","f.larkEnabledHint":"Включить международный адаптер Lark (open.larksuite.com).","f.mockEnabled":"Включено","f.mockEnabledHint":"Адаптер только для тестов: локальный HTTP-эндпоинт без учётных данных платформы.","f.mockPort":"Порт","f.mockPortHint":"Фиксированный HTTP-порт тестового эндпоинта (0 — любой свободный).","f.notConfigured":"Не задано","f.off":"Выкл","f.on":"Вкл","f.secretHint":"Хранится на сервере и больше не показывается. Оставьте пустым, чтобы сохранить текущее значение.","f.telegramAllowedUserIds":"Разрешённые id пользователей","f.telegramEnabled":"Включено","f.telegramEnabledHint":"Включить адаптер Telegram Bot API с опросом обновлений.","f.telegramToken":"Токен бота","f.telegramTokenHint":"Токен от @BotFather (123456:ABC-DEF…).","f.wecomAgentId":"Agent id","f.wecomAgentIdHint":"Agent id приложения WeCom.","f.wecomAllowedUserIds":"Разрешённые id пользователей","f.wecomCorpId":"Corp id","f.wecomCorpIdHint":"Идентификатор организации из консоли WeCom.","f.wecomCorpSecret":"App secret","f.wecomEnabled":"Включено","f.wecomEnabledHint":"Включить адаптер WeCom с обратным вызовом (нужен публичный адрес).","f.wecomEncodingAesKey":"EncodingAESKey","f.wecomToken":"Токен обратного вызова","g.agent":"Агент","g.feishu":"Feishu (Китай)","g.general":"Общие","g.http":"HTTP (режим вебхуков)","g.lark":"Lark (международный)","g.mock":"Тестовый адаптер","g.telegram":"Telegram","g.wecom":"WeCom (WeChat Work)","p.agentCwd":"Например: /home/user/projects/my-agent (пусто — папка DSH)","p.agentMaxMessageLength":"Например: 4000","p.agentModel":"Например: deepseek-v4-flash (пусто — по умолчанию)","p.agentProvider":"Например: volcengine (пусто — по умолчанию)","p.feishuAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.feishuAppId":"Например: cli_xxxxxxxxxxxxx","p.feishuAppSecret":"App Secret приложения Feishu","p.httpHost":"Например: 0.0.0.0","p.httpPort":"Например: 8080","p.larkAllowedUserIds":"Например: ou_xxxxxxxxxxxxx","p.larkAppId":"Например: cli_xxxxxxxxxxxxx","p.larkAppSecret":"App Secret приложения Lark","p.mockPort":"Например: 9099 (0 — автоматически)","p.telegramAllowedUserIds":"Например: 123456789, 987654321","p.telegramToken":"Например: 123456789:AA...","p.wecomAgentId":"Например: 1000002","p.wecomAllowedUserIds":"Например: ivanov, petrov","p.wecomCorpId":"Например: wwxxxxxxxxxxxxxx","p.wecomCorpSecret":"Secret приложения WeCom","p.wecomEncodingAesKey":"EncodingAESKey из 43 символов","p.wecomToken":"Токен адреса обратного вызова","settings.collapse":"Свернуть","settings.description":"Подключает агентов dsh к Feishu (Lark), WeCom и Telegram. Каждый чат получает свою сессию агента.","settings.discard":"Отменить","settings.expand":"Развернуть","settings.invalidNumber":"Введите корректное число","settings.overridden":"Переопределено","settings.readOnly":"Установка доступна только для чтения: настройки из интерфейса не меняются.","settings.reset":"Сбросить","settings.save":"Сохранить","settings.saveFailed":"Сохранить не удалось","settings.saving":"Сохранение…","settings.title":"IM-шлюз (dsh-im-hub)","settings.unsaved":"Есть несохранённые изменения"},"job":{"count.idle.few":"{count} фоновые задачи","count.idle.many":"{count} фоновых задач","count.idle.one":"{count} фоновая задача","count.idle.other":"{count} фоновых задач","count.live.few":"{count} фоновые задачи выполняется","count.live.many":"{count} фоновых задач выполняется","count.live.one":"{count} фоновая задача выполняется","count.live.other":"{count} фоновых задач выполняется","duration.hours":"{hours} ч {minutes} мин","duration.minutes":"{minutes} мин {seconds} с","duration.seconds":"{seconds} с","duration.title.done":"Заняло {duration}","duration.title.live":"Выполняется {duration}","list.aria":"Фоновые задачи","status.completed":"завершена","status.failed":"ошибка","status.killed":"отменена","status.running":"выполняется","status.stopping":"останавливается"},"model":{"action.reload":"Обновить","blocked.composer":"Эта модель недоступна — выберите другую, чтобы продолжить","command.description":"Выбрать модель для этого диалога","effort.providerDefault":"По умолчанию","empty.efforts":"У этой модели нет уровней рассуждения.","empty.models":"Доступных моделей нет.","error.action":"Операция с моделью не удалась: {message}","menu.aria":"Модель и уровень рассуждения","menu.effort":"Уровень рассуждений","menu.model":"Модель","option.loadError":"Каталог не загрузился: {message}","status.loading":"Обновление списка моделей…","trigger.aria":"Выбор модели, сейчас {model}","trigger.ariaEffort":"Выбор модели, сейчас {model}, уровень рассуждения {effort}","trigger.fallback":"Выбрать модель","trigger.selectAria":"Выбрать модель","warning.groupLoad":"{name} не загрузился: {message}"},"opencode-palette":{"bodyStyle":"Стиль текста","codeFont":"Шрифт кода","disableTitle":"Нажмите, чтобы отключить тему","disabled":"Отключено","enableTitle":"Нажмите, чтобы включить тему","enabled":"Включено","fontPreview":"моно","fontSize":"Размер шрифта","group.cool-blue":"Холодные синие","group.cyan-blue":"Сине-голубые","group.neutral":"Нейтральные","group.special":"Особые","group.teal":"Бирюзовые","group.transparent":"Прозрачные","group.violet":"Фиолетовые","group.warm":"Тёплые","group.yellow-green":"Жёлто-зелёные","mono":"Моноширинный (терминал)","noMatch":"Подходящих тем не найдено","panelName":"Палитра Opencode","sans":"Обычный (интерфейс)","search":"Поиск тем…","subtitle":"34 официальные темы opencode — переключение в один клик","systemDefault":"Системная (по умолчанию)","themeCount":"34 темы · по цветовым группам","themeSection":"Выбор темы","typography":"Шрифт и размер"},"permission.access":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ убирает часть подтверждений и позволяет агенту действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете текущей задаче.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?"},"pin":{"action.pin":"Закрепить","action.unpin":"Открепить"},"plan":{"chip.off.aria":"Режим плана выключен, нажмите, чтобы включить","chip.off.title":"Режим плана выключен — нажмите, чтобы включить (/plan)","chip.on.aria":"Режим плана включён, нажмите, чтобы выключить","chip.on.title":"Режим плана включён — нажмите, чтобы выключить (/plan off)"},"plugin-store":{"dialog.close":"Закрыть магазин плагинов","header.open":"Открыть магазин плагинов","header.title":"Магазин плагинов DSH","settings.tab":"Магазин плагинов","store.analyzeFailed":"Передать разбор агенту не удалось","store.analyzeHint":"Отправить эту ошибку в новую сессию агента для разбора.","store.analyzeSent":"Отправлено агенту","store.analyzeWithAgent":"Попросить агента разобраться","store.analyzing":"Создаём сессию агента…","store.cancel":"Отмена","store.category":"Категория","store.categoryAll":"Все категории","store.confirmInstall":"Установить плагин","store.confirmRemove":"Удалить плагин","store.confirmUpdate":"Обновить плагин","store.copied":"Ссылка для установки скопирована","store.copyInstall":"Скопировать ссылку для установки","store.disclaimer":"Наличие в каталоге не подтверждает работоспособность, совместимость, безопасность или качество.","store.done":"Готово","store.empty":"Под эти фильтры ничего не подходит","store.install":"Установить","store.installFailed":"Установить не удалось","store.installSuccess":"Установлено. Перезапустите DSH Web, чтобы плагин заработал.","store.installed":"Установлен","store.installedLoadFailed":"Список установленных плагинов недоступен","store.installedOnly":"Только установленные","store.installing":"Установка…","store.loadFailed":"Не удалось загрузить каталог","store.loadMore":"Показать ещё","store.loading":"Загрузка каталога плагинов…","store.openDetails":"Открыть карточку в магазине","store.refresh":"Обновить каталог","store.refreshFailed":"Каталог не обновился; показаны последние успешные данные","store.remove":"Удалить плагин","store.removeDetail":"Меняется только зависимость текущего профиля. Чтобы удаление вступило в силу, перезапустите DSH Web.","store.removeFailed":"Удалить не удалось","store.removeLead":"Плагин будет удалён из текущего профиля DSH Web.","store.removeSuccess":"Удалено. Перезапустите DSH Web, чтобы изменение вступило в силу.","store.removeTitle":"Удаление плагина","store.removing":"Удаление…","store.results":"{visible} из {total} проектов","store.retry":"Повторить","store.riskAcknowledge":"Я понимаю риск и хочу установить этот сторонний плагин","store.riskDetail":"Присутствие в каталоге не является проверкой безопасности, совместимости или качества. Установленный код выполняется с правами процесса DSH, а чтобы он заработал, DSH Web нужно перезапустить.","store.riskLead":"В текущий профиль DSH Web будет установлен код из стороннего репозитория.","store.riskTitle":"Подтверждение риска стороннего плагина","store.search":"Поиск по названию, автору, описанию или теме","store.sort":"Сортировка","store.sortName":"Название","store.sortRecommended":"Рекомендуемые","store.sortStars":"Звёзды","store.sortUpdated":"Недавно обновлённые","store.stars":"звёзд: {count}","store.topicListed":"Указана тема","store.update":"Обновить","store.updateAvailable":"Есть обновление","store.updateRiskDetail":"Обновление заменит версию плагина в этом профиле. Чтобы оно вступило в силу, перезапустите DSH Web.","store.updateRiskLead":"В текущий профиль DSH Web будет установлена более новая ревизия стороннего репозитория.","store.updateRiskTitle":"Подтверждение обновления стороннего плагина","store.updateSuccess":"Обновлено. Перезапустите DSH Web, чтобы плагин заработал.","store.updated":"Каталог обновлён {date}","store.updating":"Обновление…","store.validation.check-failed":"Проверка структуры не пройдена","store.validation.check-pending":"Проверка структуры в очереди","store.validation.check-running":"Идёт проверка структуры","store.validation.expired":"Нужна повторная проверка","store.validation.inconclusive":"Требует рассмотрения","store.validation.not-applicable":"Вне проверки плагинов","store.validation.recorded":"Есть запись о проверке","store.validation.sandbox-failed":"Проверка в песочнице не пройдена","store.validation.sandbox-pending":"Проверка в песочнице в очереди","store.validation.sandbox-running":"Идёт проверка в песочнице","store.validation.security-review":"Проверка безопасности","store.validation.unrecognized":"Требует опознания","store.validation.verified":"Проверен","store.verified":"Проверен","store.verifiedOnly":"Только проверенные"},"question":{"action.next":"Дальше","action.skip":"Пропустить вопрос","custom.placeholder":"Впишите свой ответ","error.incomplete":"Сначала ответьте на этот вопрос.","error.unanswered":"Выберите вариант или впишите свой ответ.","nav.cancel":"Закрыть все вопросы","nav.maximize":"Развернуть карточку вопроса","nav.minimize":"Свернуть карточку вопроса","nav.next":"Следующий вопрос","nav.prev":"Предыдущий вопрос","option.recommended":"Рекомендуем","plan.approve":"Утвердить","plan.decline":"Отклонить","plan.discuss":"Обсудить","plan.header":"Проверка плана"},"reference":{"candidate.file":"Файл","candidate.folder":"Папка","candidate.noCwd":"(нет cwd)","candidate.session":"Сессия","section.files":"Файлы и папки","section.sessions":"Диалоги сессий"},"session-log-download":{"dialog.close":"Закрыть","dialog.commandFailed":"Не удалось запустить экспорт сессии.","dialog.errorTitle":"Экспорт сессии не удался","dialog.preparingDescription":"Готовится ZIP с этой сессией, её подсессиями и вложениями.","dialog.preparingTitle":"Экспорт сессии","dialog.successDescription":"Браузер загружает ZIP с сессией.","dialog.successTitle":"Загрузка сессии началась"},"settings":{"close":"Закрыть","general.nav":"Общие","openDocument":"Открыть файл настроек","openDocument.error":"Не удалось открыть файл настроек","title":"Настройки","trigger":"Настройки"},"settings.agentPreset":{"brokenBadge":"Не загрузился","brokenNoCopy":"Пресет, который не загрузился, скопировать нельзя","builtIn":"Встроенный","builtInGroup":"Встроенные","cancel":"Отмена","close":"Закрыть","composition":"Композиция (agent.cordis.yml)","copyIntro":"Пресет копируется целиком на этой машине. Идентификатор станет именем каталога и позже не меняется; всё остальное правится в файлах самого пресета.","copyOf":"Скопирован с","copyTitle":"Скопировать пресет","create":"Создать","creating":"Создание…","creatorDraft":"Набросать свой пресет в режиме «Конструктор»","customGroup":"Свои","delete":"Удалить","deleteConfirm":"Удалить","deleteDescription":"Каталог пресета будет удалён. Уже запущенные на нём сессии продолжат работать, но выбрать его для новых нельзя.","deleteTitle":"Удалить этот пресет?","deleting":"Удаление…","description":"Действует на сессии, запущенные с этого момента. Работающие сессии остаются на своём пресете.","displayName":"Название","displayNamePlaceholder":"Показывается в списке; по умолчанию — идентификатор","duplicate":"Скопировать","duplicateUnavailable":"В этой установке нет каталога пресетов с правом записи","error":"Не удалось загрузить пресеты агента.","headerHint":"Пресет агента, на котором идёт сессия; зафиксирован при запуске","idInvalid":"Строчные буквы, цифры и дефисы, начиная с буквы или цифры.","idRequired":"Задайте пресету идентификатор.","idTaken":"Пресет с таким идентификатором уже есть.","inUse":"Используется","loading":"Загрузка пресетов…","nav":"Пресеты агента","noDescription":"Без описания.","openLocation":"Открыть папку","presetCodeDescription":"Всё, что умеет обычный режим, но инструменты отдаются через Code Mode SDK: модель собирает многошаговые операции в одну программу на TypeScript.","presetCodeName":"Режим кода","presetCordisDescription":"Для создания своих пресетов: всё из обычного режима плюс инспекция рантайма, опыты с плагинами и подсказки по авторству пресетов.","presetCordisName":"Конструктор","presetId":"Идентификатор","presetIdPlaceholder":"my-agent","presetMinimalDescription":"Агент из двух инструментов: постоянный bash и str_replace_editor.","presetMinimalName":"Минимальный режим","presetStandardDescription":"Полноценный кодинг-агент: правка файлов, консоль, поиск по файлам и в вебе, скиллы, планирование, цели, субагенты и воркфлоу.","presetStandardName":"Обычный режим","retry":"Повторить","revealedPathLabel":"Файлы пресета:","seatHint":"Пресет агента для сессии, которую вы собираетесь запустить","sectionIntro":"Пресет — это состав плагинов, на котором работает агент сессии: его инструменты, промпт и возможности. Скопируйте готовый и допилите под себя или попросите агента набросать свой в режиме «Конструктор».","setDefault":"Сделать основным","showLocation":"Показать расположение","title":"Пресет агента","userTrust":"Свой","view":"Посмотреть"},"settings.commandcode":{"accountAdd":"Добавить аккаунт","accountDefault":"Основной аккаунт","accountKey":"API-ключ","accountKeyHint":"API-ключ этого аккаунта. Если оставить поле пустым, сохранённый ключ останется без изменений.","accountLabel":"Название аккаунта","accountRemove":"Удалить","accountsHint":"Когда активный аккаунт достигает лимита использования (429) или его ключ недействителен (401), запросы переключаются на следующий аккаунт; когда все аккаунты исчерпаны, ошибка указывает ближайшее время сброса окна.","accountsTitle":"Смена аккаунта","activeAccount":"Активный аккаунт","activeAccountAuto":"Авто (первый доступный аккаунт)","activeAccountHint":"Закрепите предпочтительный аккаунт; применяется к следующему запросу после сохранения. Если выбранный аккаунт исчерпан, запросы будут перенаправлены на другой доступный аккаунт.","advancedInvalid":"Число в расширенных настройках не готово к сохранению; раскройте, чтобы исправить.","advancedOverriddenMany":"{count} настроено","advancedOverriddenOne":"1 настроенный","advancedSettings":"Дополнительно","advancedSettingsHint":"Редко используемые параметры: базовый URL API, рабочая директория, тайм-ауты и фильтрация моделей.","apiBase":"Базовый URL API","apiBaseHint":"По умолчанию используется https://api.commandcode.ai; обычно оставляйте как есть.","apiKey":"API-ключ","apiKeyHint":"Создайте его в консоли commandcode.ai. Если оставить это поле пустым, сохранённый ключ останется без изменений.","apiKeyLocked":"Ключ предоставлен только для чтения","apiKeySet":"Настроено","apiKeyUnset":"Не настроено","cancel":"Отмена","cardConfiguredHint":"API-ключ готов. Чтобы заменить его, добавить ротацию аккаунтов, проверить использование или изменить базовый API, откройте страницу \"Command Code\" в Настройках.","cardLoadingHint":"Загрузка конфигурации командного кода…","cardRegistrationHint":"Эта карта предоставлена плагином Command Code; для отображения всех элементов управления требуется более новая версия DeepSeek Harness.","cardRouteActive":"Активный","cardTitle":"Подключение командного кода","discard":"Отменить","filterModelsByPlan":"Скрыть модели вне тарифного плана","filterModelsByPlanHint":"Если включено, в выборе моделей отображаются только те, что входят в вашу подписку; при наличии баланса кредитов по запросу показывается полный каталог.","hide":"Скрыть","intro":"Настройте подключение к Command Code Provider. API-ключ сохраняется только в локальной службе учетных данных и никогда не отображается; остальные поля записываются в пользовательские настройки и вступают в силу при следующем запросе.","invalidNumber":"Недопустимый номер","loginButton":"Войдите в Command Code","loginCancel":"Отменить вход","loginCancelled":"Вход отменён.","loginDenied":"Доступ запрещён. Попробуйте снова или вставьте ключ вручную.","loginFailedGeneric":"Не удалось войти; попробуйте снова или вставьте ключ вручную.","loginHintIdle":"Не хотите создавать ключ вручную? Войдите в систему, и ваш браузер откроет страницу авторизации commandcode.ai; одобренный ключ сохранится в локальном сервисе учетных данных и будет применяться к следующему запросу.","loginInvalidKey":"Доставленный ключ не прошел проверку (401). Попробуйте снова или вставьте его вручную.","loginNetwork":"Не удалось подключиться к сервису Command Code для проверки ключа; проверьте подключение к сети и повторите попытку.","loginOpenLink":"Откройте страницу авторизации ↗","loginStarting":"Запуск локального серверного обработчика callback…","loginStoreFailed":"Не удалось сохранить ключ в локальной службе учетных данных; вставьте его вручную.","loginSuccess":"Вошли как","loginTimeout":"Истекло время ожидания ответа авторизации; попробуйте снова.","loginTitle":"Войти, чтобы получить ключ","loginUnavailable":"Вход в систему недоступен в этой среде; вставьте {API key} вместо этого.","loginWaiting":"Ожидание авторизации в вашем браузере…","nav":"Код команды","numberTooLarge":"Превышено допустимое максимальное значение (2147483647 мс)","numberTooSmall":"Должно быть не менее 1 (мс)","overridden":"Переопределено","readOnly":"Настройки доступны только для чтения.","requestTimeoutMs":"Таймаут запроса (мс)","requestTimeoutMsHint":"Время ожидания первого байта ответа; по умолчанию 60000.","reset":"Сбросить","save":"Сохранить","saveFailed":"Не удалось сохранить, попробуйте снова.","saved":"Сохранено ✓","saving":"Сохранение","show":"Показать","streamIdleTimeoutMs":"Таймаут простоя потока (мс)","streamIdleTimeoutMsHint":"Как долго зависший поток считается мёртвым; по умолчанию 300000 (намеренно щедро — модели с долгим обдумыванием могут молчать минутами).","title":"Код команды","unsaved":"Не сохранено","updateAvailable":"доступно обновление","updateHint":"Доступна новая версия; нажмите для просмотра заметок о выпуске. Уведомление исчезнет после обновления плагина.","usageActive":"Активно","usageCooldown":"Охлаждение","usageCost":"Потратить","usageError":"Не удалось получить данные об использовании","usageExceeded":"Превышено","usageFailed":"не удалось","usageFiveHour":"5-часовое окно","usageFree":"Бесплатно","usageInvalidKey":"Неверный ключ","usageKeyClear":"Очистить сохранённый ключ","usageKeyClearStaged":"Будет очищено при сохранении","usageKeyInvalid":"Неверный или просроченный API-ключ","usageKeyInvalidHint":"Сервер отклоняет все запросы (401). Проверьте ключ, настроенный для этого аккаунта, или создайте новый в консоли commandcode.ai.","usageLoading":"Получение данных об использовании аккаунта…","usageMonthly":"Ежемесячно","usageNetworkError":"Не удалось подключиться к сервису Command Code","usageNetworkHint":"На сервер не поступило ни одного запроса. Проверьте подключение к сети или настройку базового API.","usageNoKey":"Настройте API-ключ, чтобы увидеть здесь данные об использовании и состоянии кредитов этого аккаунта.","usagePartial":"Некоторые данные конечной точки недоступны","usagePeriodEnd":"Период заканчивается","usagePurchased":"Куплено","usageRefresh":"Обновить","usageRefreshing":"Обновление…","usageRequests":"Запросы","usageReset":"Сбросить","usageServiceUnavailable":"Сервис Command Code временно недоступен","usageServiceUnavailableHint":"Сервер вернул ошибки (5xx); попробуйте обновить позже.","usageSuccessRate":"Уровень успеха","usageTitle":"Использование аккаунта","usageTokens":"Токены","usageTokensIn":"в","usageTokensOut":"выход","usageUnconfigured":"Для этого аккаунта ещё не настроен API-ключ.","usageUndoKeyClear":"Отменить очистку","usageUpdated":"Обновлено","usageWeekly":"Еженедельное окно","workingDir":"Рабочая директория","workingDirHint":"Необязательно. Оставьте пустым, чтобы использовать текущий рабочий каталог процесса (указан в поле); укажите путь только для фиксации конкретного расположения."},"settings.locale":{"language.title":"Язык"},"settings.models":{"add":"Добавить провайдера","addModel":"Добавить модель","advancedHint":"Остальные поля живут в settings.yaml — правьте этот раздел напрямую.","apply":"Применить","applying":"Применение…","baseUrl":"Базовый URL","baseUrlDefault":"По умолчанию у провайдера","cancel":"Отмена","close":"Закрыть","conflict":"Пока карточка была открыта, настройки изменил кто-то ещё. Закройте и откройте заново, чтобы править актуальные значения.","contextWindow":"Окно контекста","contextWindowPlaceholder":"Как у провайдера по умолчанию","create":"Создать провайдера","creating":"Создание…","credentialConfigured":"API-ключ задан","credentialMissing":"API-ключ не задан","customAdd":"Добавить своего провайдера","customApi":"Протокол API","customApiUnset":"Не выбран","customDisplayName":"Отображаемое имя","customNeedsBaseUrl":"Своему провайдеру нужен базовый URL.","customNeedsModels":"Своему провайдеру нужна хотя бы одна модель.","customRoute":"Идентификатор провайдера","customRouteHint":"Идентификатор в нижнем регистре, начинается с буквы. По нему провайдер адресуется в запросах, и так же называется его ключ.","customRouteInvalid":"Начните со строчной буквы, дальше строчные буквы, цифры и дефисы.","customRouteTaken":"Такой идентификатор уже занят другим провайдером.","customTag":"Свой","customTitle":"Свой провайдер","customized":"Настройки изменены","deleteConfirm":"Удалить {provider}","deleteDescription":"Удаление {provider} убирает его настройки. Ключ, которым он пользовался, хранится отдельно и останется.","deleteDescriptionWithCredential":"Удаление {provider} убирает его настройки и сохранённый API-ключ.","deleteTitle":"Удалить {provider}?","deleting":"Удаление {provider}…","edit":"Изменить","editProvider":"Изменить {provider}","fetchAdopt":"Добавить выбранные","fetchDescription":"Вот модели, доступные у этого провайдера. Отметьте те, что нужно добавить.","fetchDeselectAll":"Снять выбор","fetchEmpty":"Провайдер не вернул ни одной модели. Добавьте их вручную.","fetchModels":"Запросить список моделей","fetchNeedsBaseUrl":"Сначала укажите базовый URL, потом запрашивайте.","fetchSelectAll":"Выбрать все","fetchTitle":"Выберите модели","fetching":"Запрос к провайдеру…","intro":"Введите свои API-ключи, чтобы пользоваться моделями этих провайдеров.","keyBlank":"Введите API-ключ или оставьте поле пустым, чтобы сохранить прежний.","keyBlankNew":"Введите API-ключ или оставьте поле пустым, если провайдер авторизуется иначе.","keyEnvLocked":"Задан переменной окружения (только чтение)","keyIllegalCharacters":"Ключ в недопустимом формате. Проверьте его.","keyInput":"API-ключ","keyPlaceholder":"Введите API-ключ","keyPlaceholderNative":"Введите API-ключ или оставьте пустым для авторизации из окружения","keyRequired":"Чтобы продолжить, введите API-ключ.","keyStored":"Задан — введите новое значение, чтобы заменить","loadFailed":"Не удалось загрузить список провайдеров","maxTokens":"Максимум выходных токенов","maxTokensPlaceholder":"Как у провайдера по умолчанию","model":"Модель","modelAdvanced":"Ёмкости","modelCapacityInvalid":"Ёмкость задаётся числом, можно с суффиксом K или M.","modelContextInvalid":"Окно контекста — положительное число, например 131072, 256K или 1M.","modelContextWindow":"Окно контекста","modelDuplicate":"Каждый идентификатор модели встречается один раз.","modelId":"Идентификатор модели","modelIdDuplicate":"Идентификатор модели должен быть уникальным.","modelIdRequired":"Нужен идентификатор модели.","modelMaxTokens":"Максимум выходных токенов","modelMaxTokensInvalid":"Максимум выходных токенов — положительное число, например 8192, 64K или 1M.","modelName":"Отображаемое имя","modelNameInvalid":"Отображаемое имя не может быть пустым.","modelNamePlaceholder":"Пусто — возьмётся идентификатор модели","models":"Модели","modelsCustomized":"Каталог моделей изменён","modelsEmpty":"В выборе моделей не будет ничего. Неуказанные идентификаторы всё равно можно отправлять напрямую.","modelsInherited":"По умолчанию, как в адаптере","nav":"Модели","onboardingDescription":"Настройте официального провайдера DeepSeek, чтобы начать.","onboardingLater":"Настроить позже","onboardingSave":"Сохранить и продолжить","onboardingSaving":"Сохранение…","onboardingTitle":"Добавьте API-ключ, чтобы начать","provider":"Провайдер","readOnly":"В этой установке файл настроек доступен только для чтения.","remove":"Удалить","removeModel":"Удалить модель","removeProvider":"Удалить {provider}","resetModels":"Вернуть значения по умолчанию","retry":"Повторить","savedProvider":"{provider} сохранён.","title":"Модели","welcomeError":"Не удалось сохранить подтверждение. Попробуйте ещё раз."},"settings.ollama-cloud":{"addModel":"Добавить модель вручную","apiKey":"API-ключ","apiKeyConfigured":"Настроено — введите новое значение для замены","apiKeyPending":"Введён новый ключ — теперь он используется для обнаружения; Сохранить для хранения","apiKeyPlaceholder":"Введите API-ключ","apiKeyUnset":"API-ключ не настроен","applySelected":"Применить выбранное","baseURL":"URL API","cancel":"Отмена","close":"Закрыть","collapse":"Свернуть настройки","connection":"Подключение","customized":"Пользовательский каталог","defaultEffort":"Стандартное мышление","description":"Родной API-ключ Ollama Cloud, конечная точка и каталог моделей.","discard":"Отменить","dragModel":"Перетащите для изменения порядка","expand":"Развернуть настройки","fetchEmpty":"Конечная точка не вернула ни одной модели.","fetchModels":"Получить доступные модели","fetchingModels":"Получение моделей…","inherited":"Использование составленного каталога","invalidApiKey":"API-ключ не может состоять только из пробелов.","invalidBaseURL":"Введите URL API HTTP или HTTPS.","invalidModel":"Каждая модель должна иметь уникальный ID и допустимые положительные значения мощностей.","loading":"Загрузка настроек плагина…","modelContext":"Контекстное окно","modelDetails":"Подробности","modelId":"ID модели","modelName":"Отображаемое имя","modelOutput":"Максимальная мощность","models":"Каталог моделей","pickerDescription":"Выберите модели, которые нужно оставить в этом каталоге.","pickerLoading":"Получение метаданных модели…","pickerTitle":"Выбрать каталог моделей","readOnly":"Настройки этого профиля доступны только для чтения.","remoteAccess":"Удалённые браузеры не могут изменять настройки плагинов: API конфигурации Harness работает только через локальный интерфейс. Откройте страницу на самом хосте или пробросьте её (ssh -L 3080:127.0.0.1:3080 user@host, затем откройте http://127.0.0.1:3080). Сохранённые там настройки продолжают работать в удалённых сеансах.","remove":"Удалить","requestFailed":"Не удалось выполнить запрос.","save":"Сохранить","saved":"Сохранено","saving":"Сохранение…","summaryModels":"{count} моделей","summaryOff":"Не настроено","summaryOn":"Настроено","thinking":"Рассуждение","title":"Ollama Облако","tools":"Инструменты","unavailable":"Этот профиль не предоставляет доступ к настройкам Ollama Cloud.","unsaved":"Несохранённые изменения","usage":"Использование облака","usageLoading":"Чтение использования…","usageModels":"Модели, использованные на этой неделе","usageNeedsRestart":"Использование отображается после перезагрузки этого плагина на работающем хосте (перезапустите dsh).","usageRefresh":"Обновить","usageRefreshFailed":"Не удалось обновить","usageRequests":"запросы","usageResetAt":"Сбросится через {time}","usageResetAtDays":"Лимиты использования сбросятся {date} (осталось {count} дней)","usageResetEveryDays":"Сбрасывается каждые {count} дней","usageResetEveryHours":"Сбрасывается каждые {count} часов","usageSession":"Использование сессии","usageUnreachable":"Не удалось получить данные об использовании Ollama Cloud. Проверьте подключение к сети и URL API.","usageUnsupported":"Этот эндпоинт не передаёт данные об использовании облака.","usageUpdatedAt":"Обновлено {time}","usageUsed":"Использовано","usageWeekly":"Еженедельное использование","vision":"Зрение"},"settings.permission":{"confirm.acknowledge":"Я понимаю риски и хочу продолжить","confirm.cancel":"Отмена","confirm.description":"Полный доступ позволяет новым сессиям реже спрашивать подтверждение и действовать напрямую, включая чувствительные операции, изменение файлов и внешние команды. Включайте, только если доверяете будущим задачам.","confirm.enable":"Включить полный доступ","confirm.title":"Включить полный доступ?","description":"Режим разрешений по умолчанию для новых сессий","loading":"Загрузка","title":"Разрешения","unavailable":"Недоступно"},"settings.pluginInventory":{"active":"Подключён","catalog":"Список плагинов","configuration":"Настройки","cordis":"Состояние Cordis","disabledTag":"Выключен","empty":"Плагинов нет.","emptySearch":"Подходящих плагинов нет.","enabledTag":"Включён","error":"Плагины временно недоступны.","failed":"Не удалось подключить","loading":"Чтение плагинов…","loadingPhase":"Загрузка","pending":"Ожидает зависимости","retry":"Повторить","search":"Поиск плагинов","tab":"Список плагинов","unloading":"Выгружается","unobserved":"Не подключён"},"settings.plugins":{"agentLoopDescription":"Как агент раздаёт вызовы инструментов.","agentLoopMaxParallel":"Параллельных вызовов","agentLoopMaxParallelHint":"Сколько безопасных для параллели вызовов идёт одновременно в пределах шага.","agentLoopTitle":"Цикл агента","bashDescription":"Ограничения для каждой команды, которую запускает агент.","bashMaxOutputBytes":"Предел вывода на поток (байт)","bashMaxOutputBytesHint":"Всё сверх предела уходит во временный файл, а не теряется.","bashTimeoutMs":"Таймаут команды (мс)","bashTimeoutMsHint":"Сколько команда может выполняться до принудительного завершения.","bashTitle":"Консоль","collapse":"Скрыть настройки","configurableTab":"Настройки плагинов","discard":"Отменить","empty":"В этой установке настройки плагинов не выведены.","expand":"Показать настройки","intro":"Настройка и просмотр плагинов, установленных в этой сборке.","invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","nav":"Плагины","overridden":"Переопределено","readOnly":"В этой установке настройки доступны только для чтения.","reset":"Вернуть по умолчанию","save":"Сохранить","saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","saving":"Сохранение…","tabs":"Разделы плагинов","title":"Плагины","unsaved":"Не сохранено","webSearchApiKey":"API-ключ","webSearchApiKeyHint":"Хранится вне файла настроек. Оставьте пустым, чтобы сохранить текущий ключ.","webSearchApiKeySet":"Ключ задан.","webSearchApiKeyUnset":"Ключ не задан; без него поиск недоступен.","webSearchBaseUrl":"Адрес сервиса","webSearchBaseUrlHint":"Оставьте пустым, чтобы взять адрес провайдера по умолчанию.","webSearchDescription":"Поисковый провайдер DeepSeek.","webSearchMaxUses":"Максимум поисков на запрос","webSearchMaxUsesHint":"Сколько раз в рамках одного запроса можно искать, прежде чем придётся отвечать.","webSearchTitle":"Поиск в вебе"},"settings.subscriptions":{"cancel":"Отмена","checking":"Проверка…","generating":"Генерация изображения…","image":"изображение","imageClose":"Закрыть","imageLoadFailed":"Повторить","imageLoading":"Загрузка…","imagePreview":"Просмотр изображения","intro":"Вход и выход из провайдеров по подписке. Вход открывает страницу авторизации в новой вкладке; без браузера можно вставить адрес обратного вызова или код.","loggedIn":"Выполнен вход","loggedInAccount":"Вход выполнен как {account}","loggedInAccountExpires":"Вход выполнен как {account} · истекает {date}","loggedInExpires":"Вход выполнен · истекает {date}","login":"Войти","loginInProgress":"Идёт вход…","loginMissingUrl":"ответ на вход пришёл без authorizeUrl","logout":"Выйти","logoutConfirm":"Выйти из {provider}?","manualPlaceholder":"Вставьте адрес обратного вызова или код","manualSummary":"Не работает вход через браузер? Вставьте адрес обратного вызова или код","nav":"Подписки","notLoggedIn":"Вход не выполнен","submit":"Отправить","unavailable":"Нет связи; состояние подписок не загрузить.","usageEmpty":"Окна расхода не переданы.","usageError":"Не удалось получить расход: {message}","usageLoading":"Загрузка расхода…","usagePlan":"Тариф: {plan}","usageRefresh":"Обновить","usageResets":"сбрасывается {date}","usageSession":"Окно 5 часов","usageTitle":"Расход","usageWeekly":"За неделю","usageWindow":"Окно","viewImage":"Посмотреть изображение","viewImageNamed":"Посмотреть {name}"},"settings.theme":{"appearance.dark":"Тёмная","appearance.light":"Светлая","appearance.system":"Как в системе","appearance.title":"Оформление"},"sidebar":{"session.new":"Новая сессия","session.new.label":"Новая сессия","toggle.collapse":"Свернуть панель","toggle.open":"Открыть панель"},"skill":{"menu.userOnly":"только вручную","row.failed":"Не удалось загрузить скилл","row.instructions":"Инструкции","row.running":"Загрузка скилла","row.stopped":"Загрузка скилла остановлена"},"skills-manager":{"action.create":"создание","action.delete":"удаление","action.disable":"отключение","action.enable":"включение","action.restore":"восстановление","action.toggle":"включение или отключение","btn.cancel":"Отмена","btn.close":"Закрыть","btn.create":"Создать навык","btn.create.now":"Создать навык","btn.delete.forever":"Удалить безвозвратно","btn.detail":"Подробнее","btn.disable":"Отключить","btn.enable":"Включить","btn.file.pick":"Выбрать файл","btn.folder.pick":"Выбрать папку","btn.import":"Импорт","btn.import.now":"Установить","btn.refresh":"Обновить","btn.repair.enable":"Исправить и включить","btn.restore":"Восстановить","btn.trash":"В корзину","confirm.delete.desc":"«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.","confirm.delete.title":"Удалить безвозвратно?","confirm.trash.desc":"«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.","confirm.trash.title":"Отправить в корзину?","create.body":"Текст (Markdown)","create.body.placeholder":"Опишите инструкции, шаги и границы навыка…","create.chat.note":"Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.","create.description":"Описание","create.description.placeholder":"Одно предложение — когда использовать","create.name":"Название","create.name.placeholder":"например code-review-helper","create.target":"Место создания","create.title":"Создать навык","desc":"Единая загрузка и управление Agent-навыками на этом компьютере.","detail.body":"Текст","detail.diagnostics":"Диагностика","detail.frontmatter":"Frontmatter","detail.noIssues":"Проблем не обнаружено.","detail.path":"Исходный файл","detail.title":"Подробности навыка","diagnostic.description.missing":"В frontmatter нет description","diagnostic.frontmatter.missing":"Отсутствует полный YAML frontmatter","diagnostic.invocation.invalid":"Недопустимое значение политики вызова","diagnostic.name.invalid":"Имя навыка не соответствует kebab-case: {name}","diagnostic.name.missing":"В frontmatter нет name","diagnostic.shadowed":"Перекрыт источником с более высоким приоритетом {root}","empty.search":"Подходящих навыков нет.","empty.source":"Этого каталога не существует или в нём пока нет навыков.","error.action":"Действие не удалось: {error}","error.browse.absolute":"Путь к папке должен быть абсолютным: {path}","error.browse.notDirectory":"Это не папка: {path}","error.browse.unreadable":"Не удалось прочитать папку: {path}","error.create.bodyRequired":"Текст навыка обязателен","error.create.conflict":"Навык с таким именем уже существует: {name}","error.create.descriptionRequired":"Описание навыка обязательно","error.create.tooLarge":"Содержимое навыка слишком велико","error.import.duplicateName":"В пакетном источнике есть навыки с одинаковыми именами: {name}","error.import.emptySource":"В каталоге не найдено ни одного элемента навыков: {path}","error.import.failed":"Импорт не удался","error.import.invalidName":"Не удалось сгенерировать корректное имя kebab-case (исходное: {name})","error.import.overlap":"Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него","error.import.rollbackFailed":"Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})","error.proto.bodyTooLarge":"Тело запроса слишком велико","error.proto.contentType":"Тело запроса должно быть application/json","error.proto.forbidden":"Запрещённый запрос на изменение (нет клиентского маркера)","error.proto.forbiddenHost":"Запрещённый источник запроса (неверный Host)","error.proto.invalidJson":"Тело запроса — не корректный JSON","error.proto.method":"Метод не поддерживается","error.proto.nonJson":"Сервер вернул ответ не в формате JSON (HTTP {status})","error.proto.unknownAction":"Неизвестное действие","error.root.readonly":"Этот источник не разрешает: {action}","error.root.unknown":"Неизвестный источник навыков: {root}","error.root.unsafe":"Каталог проектных навыков небезопасен, запись отклонена: {path}","error.skill.noFrontmatter":"У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}","error.skill.notFound":"Навык не найден: {name}","error.source.notFound":"Путь не существует: {path}","error.source.symlink":"Источники навыков с символическими ссылками не поддерживаются: {path}","error.source.tooDeep":"Глубина каталога источника превышает {depth} уровней: {path}","error.source.unrecognized":"Нераспознанный источник навыков: {path}","error.state.invalid":"Файл состояния менеджера не читается, перезапись отклонена: {path}","error.trash.conflict":"Нельзя восстановить: навык с таким именем уже существует: {name}","error.trash.invalid":"Недопустимый путь элемента корзины: {id}","error.trash.notFound":"Элемент корзины не найден: {id}","error.trash.projectUnavailable":"Исходный проект не является активной рабочей областью, восстановление невозможно: {path}","error.trash.rollbackFailed":"Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})","error.upload.archiveTooLarge":"ZIP-архив слишком велик; лимит {limit} байт","error.upload.duplicate":"Загрузка содержит дублирующийся путь: {path}","error.upload.empty":"Загрузка пуста","error.upload.encoding":"Недопустимая кодировка загружаемого содержимого","error.upload.path":"Загрузка содержит недопустимый путь: {path}","error.upload.tooLarge":"Загрузка слишком велика; лимит {limit} байт","error.upload.tooMany":"Слишком много файлов; максимум {limit}","error.upload.zipInvalid":"ZIP-архив не удаётся распаковать","filter.all":"Все источники","filter.option":"{name} ({count})","filter.source":"Источник","import.title":"Импорт навыка","loading":"Загрузка навыков…","note.missing":"Описание не указано","result.created":"Навык создан: {name}","result.deleted":"Удалён безвозвратно: {name}","result.importEmpty":"Не импортировано ни одного навыка.","result.importPartial":"Импортировано: {imported}; пропущены одноимённые: {skipped}","result.importSkipped":"Ничего не импортировано; пропущены существующие: {names}","result.importWarnings":"{result}; предупреждения: {warnings}","result.imported":"Импорт завершён: {names}","result.restored":"Навык восстановлен: {name}","result.trashed":"Отправлен в корзину: {name}","result.updated":"Состояние обновлено.","root.agents":"Общий Agent","root.claude":"Claude","root.codex":"Codex","root.dsh":"Навыки DSH","root.gemini":"Gemini","root.opencode":"OpenCode","root.projectAgents":"Проектный Agent","root.projectDsh":"Проектный DSH","search":"Поиск","search.clear":"Очистить поиск","search.placeholder":"Поиск по названию или описанию навыка","select.file.invalid":"Выберите .zip или один файл SKILL.md.","select.folder.invalid":"В выбранной папке не найдено SKILL.md.","skill.toggle":"Вкл/выкл навык","source.dsh.note":"Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.","source.external.note":"Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.","source.toggle":"Вкл/выкл источник","status.bundle":"Набор навыков","status.disabled":"Отключён","status.discovered":"Обнаружен","status.enabled":"Загружен","status.invalid":"Есть проблемы","status.manageable":"Управляемый","status.project":"Проектный","status.rank":"Приоритет {rank}","status.readonly":"Источник только для чтения","status.selected":"Выбрано","status.shadowed":"Перекрыт","status.single":"Один файл","status.source.off":"Отключён","status.source.on":"Загружен","summary.disabled":"Отключено: {count}","summary.group":"Навыков: {count}","summary.issues":"Проблем: {count}","summary.loaded":"Загружено в DSH: {count}","summary.total":"Навыков: {count}","table.skill":"Название и описание навыка","table.status":"Состояние в DSH","title":"Навыки","trash.count":"Навыков в очереди: {count}","trash.deletedAt":"Удалено {time}","trash.empty":"Корзина пуста.","trash.source":"Источник: {source}","trash.title":"Корзина","upload.drop.copy":"Поддерживаются .zip, папка навыка или один SKILL.md","upload.drop.title":"Перетащите навык сюда","upload.importing":"Установка…","upload.remove":"Убрать выбранное","upload.requirement.copy":"Импорт копирует содержимое целиком и не меняет источник","upload.requirement.frontmatter":"SKILL.md должен содержать YAML-название и описание","upload.requirement.skill":"Архив или папка должны содержать SKILL.md","upload.requirements":"Требования к файлам","upload.selected":"Файлов: {count} · {size}","warning.backupUncleaned":"Резервная копия старой версии не удалена: {path} ({error})","warning.project.unavailable":"Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}","warning.state.invalid":"Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}"},"slash.menu":{"command":"Команды","loading":"Загрузка…","skill":"Скиллы","subagent":"Субагенты","suggestions.aria":"Подсказки по вводу"},"subagent":{"activity.inactive":"не работает","activity.running":"работает","branch.collapse":"Свернуть потомков {label}","branch.expand":"Развернуть потомков {label}","count.running.few":"{count} субагента работает","count.running.many":"{count} субагентов работает","count.running.one":"{count} субагент работает","count.running.other":"{count} субагентов работает","count.total.few":"{count} субагента","count.total.many":"{count} субагентов","count.total.one":"{count} субагент","count.total.other":"{count} субагентов","diagnostic.corrupt":"запись сессии повреждена","diagnostic.unavailable":"запись сессии временно недоступна","diagnostic.unsupported":"неподдерживаемая версия записи субагента","duration.days":"{days} дн","duration.daysHours":"{days} дн {hours} ч","duration.exactDays":"{days} дн {hours} ч {minutes} мин {seconds} с","duration.exactTitle":"Всего активного времени: {duration}","duration.hours":"{hours} ч {minutes} мин {seconds} с","duration.minutes":"{minutes} мин {seconds} с","duration.months":"~{months} мес","duration.monthsDays":"~{months} мес {days} дн","duration.seconds":"{seconds} с","duration.years":"~{years} г","duration.yearsMonths":"~{years} г {months} мес","load.error":"Не удалось загрузить субагентов","loading.aria":"Загрузка субагентов","loading.label":"Загрузка субагентов…","mode.continuable":"с продолжением","mode.oneShot":"разовый","readonly.body":"Родительская сессия офлайн; откройте её заново, чтобы продолжить переписку.","readonly.oneShot.body":"Разовые задачи не принимают продолжения; здесь можно изучить полную запись выполнения.","readonly.oneShot.title":"Запись разового субагента","readonly.title":"Пока этот субагент доступен только для чтения","retry":"Повторить","switcher.aria":"Переключить субагента: {title}","tree.aria":"Сессии субагентов"},"task-board":{"archive.empty":"В архиве пусто","board.archive":"Архив","board.archiveView":"Архив ({count})","board.backToBoard":"К доске","board.close":"В чат","board.created":"Создана","board.empty":"В этой колонке задач нет","board.filterAll":"Все","board.hostError":"Действие на хосте не удалось: {error}","board.hostMeta":"Часовой пояс хоста {timeZone} · ревизия {revision}","board.new":"Новая задача","board.pending":"Отправка","board.retryHost":"Переподключиться к хосту","board.runs":"запусков","board.search":"Фильтр задач…","board.status":"Статус","board.status.backlog":"Бэклог","board.status.done":"Готово","board.status.failed":"Ошибка","board.status.running":"В работе","board.status.todo":"К выполнению","board.title":"Доска задач","board.updated":"Обновлена","card.scheduled":"по расписанию","delete.cancel":"Отмена","delete.confirm":"Удалить «{name}»? Отменить это будет нельзя.","delete.ok":"Удалить","delete.title":"Удаление задачи","detail.archive":"В архив","detail.archivedAt":"В архиве · {time}","detail.close":"Закрыть","detail.delete":"Удалить","detail.description":"Описание","detail.execution":"История запусков","detail.executionEnded":"Завершён","detail.executionSettings":"Параметры запуска","detail.executionStarted":"Начат","detail.noExecution":"Ещё не запускалась","detail.noSession":"Сессии нет","detail.prompt":"Промпт запуска","detail.rerun":"Запустить снова","detail.restore":"Вернуть из архива","detail.result.cancelled":"Отменён","detail.result.failed":"Ошибка","detail.result.running":"Выполняется","detail.result.succeeded":"Успешно","detail.run":"Запустить","detail.schedule":"Запуски по расписанию","detail.schedule.cron":"Выражение cron","detail.schedule.dueSoon":"Скоро","detail.schedule.enable":"Включить запуски по расписанию","detail.schedule.invalid":"Неверное выражение cron","detail.schedule.lastTriggered":"Последний запуск","detail.schedule.nextRun":"Следующий запуск","detail.schedule.notScheduled":"Расписания пока нет","detail.schedule.preset.daily9":"Каждый день в 09:00","detail.schedule.preset.hourly":"Каждый час","detail.schedule.preset.tenMin":"Каждые 10 минут","detail.schedule.preset.weeklyMon9":"По понедельникам в 09:00","detail.schedule.presets":"Готовые варианты","detail.title":"Задача","detail.viewSession":"Открыть сессию","entry.label":"Доска задач","exec.error.noWorkspace":"Нет рабочей папки, в которой можно выполнить задачу","exec.error.promptRejected":"Промпт отклонён","exec.hint":"Применяется при запуске задачи: рабочая папка определяет, где появится сессия выполнения; режим задаёт пресет агента; разрешение выставляется командой /permission. Пусто — как по умолчанию в рантайме.","exec.mode.brokenSuffix":" (недоступен)","exec.mode.default":"Как в установке","exec.mode.defaultSuffix":" (по умолчанию)","exec.mode.removed":" (удалён)","exec.permission.danger-full-access":"Полный доступ","exec.permission.default":"Как в сессии","exec.permission.read-only":"Только чтение","exec.permission.workspace-write":"Запись в рабочую папку","exec.workspace.recent":"Последняя (по умолчанию)","new.cancel":"Отмена","new.description":"Описание","new.descriptionPlaceholder":"Контекст, границы, критерии приёмки (необязательно)","new.mode":"Режим","new.permission":"Разрешения","new.prompt":"Промпт запуска","new.promptPlaceholder":"Полная инструкция агенту (если пусто, возьмётся заголовок)","new.required":"Нужен заголовок","new.submit":"Создать","new.title":"Заголовок","new.titlePlaceholder":"Что нужно сделать, одной строкой","new.workspace":"Рабочая папка","run.failed":"Запуск не удался: {error}","settings.announceToAgent":"Сообщать агентам о доске задач","settings.announceToAgentHint":"Включено: в системный промпт каждого агента добавляется упоминание доски. Выключено: агенты узнают о ней, только если вы скажете сами.","settings.collapse":"Скрыть настройки","settings.description":"Настройка доски задач на хосте, упоминания в промпте и защиты от засыпания, пока есть незавершённая работа.","settings.discard":"Отменить","settings.enabled":"Включить доску задач","settings.enabledHint":"Когда выключено, пункт в панели и сама доска скрыты.","settings.expand":"Показать настройки","settings.inherit":"Наследовать","settings.invalidNumber":"Введите число или оставьте пустым, чтобы взять значение по умолчанию.","settings.notExposed":"Эта версия DSH не выводит namespace настроек плагина на страницу конфигурации, поэтому форма недоступна. Правьте ~/.dsh/settings.yaml напрямую или добавьте namespace в список WEB_SETTINGS_NAMESPACES у dsh-host-apiproxy и перезапустите.","settings.off":"Выкл","settings.on":"Вкл","settings.overridden":"Переопределено","settings.powerBoundary":"Батарея будет расходоваться быстрее. Закрытие крышки, ручной уход в сон, гибернация, выключение, действия при низком заряде и корпоративные политики под гарантию не попадают; уже спящий компьютер не разбудят.","settings.powerError":"Последняя ошибка защиты от засыпания: {error}","settings.powerStatus":"Платформа: {platform}; защита: {phase}; работающих сессий: {running}; включённых расписаний: {schedules}","settings.powerUnknown":"неизвестно","settings.preventIdleSleep":"Не давать системе засыпать","settings.preventIdleSleepHint":"По умолчанию выключено. Когда включено, хост не даёт системе уйти в сон, пока работает хоть одна сессия DSH, включено расписание или состояние сессий ещё неизвестно. Экран при этом может гаснуть.","settings.readOnly":"В этой установке настройки доступны только для чтения.","settings.reset":"Вернуть по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Установка не приняла эти значения; они оставлены, чтобы вы их поправили.","settings.saving":"Сохранение…","settings.title":"Доска задач","settings.unsaved":"Не сохранено","status.move.backlog":"В бэклог","status.move.todo":"К выполнению","time.justNow":"только что"},"trajectory":{"toolbar.actualTime":"Реальное время","toolbar.aria":"Панель траектории","toolbar.calls":"Вызовы","toolbar.collapseCalls":"Свернуть вызовы","toolbar.collapseTurns":"Свернуть ходы","toolbar.duration":"Длительность","toolbar.expandCalls":"Развернуть вызовы","toolbar.expandTurns":"Развернуть ходы","toolbar.search":"Поиск по траектории","toolbar.searchPlaceholder":"Поиск","toolbar.turns":"Ходы","toolbar.useActualDuration":"По реальной длительности","toolbar.useEqualWidth":"Операции равной ширины","view.trajectory":"Траектория"},"univer":{"collapse":"Свернуть просмотр","dock.close":"Закрыть","dock.currentVersion":"Текущая версия","dock.discard":"Отклонить","dock.discarded":"Отклонено","dock.discardedTitle":"Изменения отклонены","dock.draft":"Редактирование","dock.exitFullscreen":"Выйти из полноэкранного режима","dock.expand":"Развернуть","dock.fold":"Свернуть","dock.fullscreen":"Полноэкранный просмотр","dock.gatewayDown":"Univer Gateway не запущен; интерактивный предпросмотр недоступен","dock.live":"синхронизация","dock.loading":"Загрузка…","dock.markReady":"Отправить на подтверждение","dock.maximize":"На весь экран","dock.merge":"Объединить с текущей версией","dock.mergeReady":"Готово к слиянию","dock.mergeTitle":"Предпросмотр слияния","dock.merged":"Слито","dock.mergedTitle":"Изменения объединены","dock.notReady":"Отправьте это изменение на подтверждение перед слиянием или отклонением","dock.ready":"Готово","dock.restore":"Восстановить размер","dock.reviewTitle":"Идёт редактирование","dock.startGateway":"Запустить Gateway","dock.unavailable":"Недоступно","dock.unit.added":"Д","dock.unit.conflict":"Конфликт","dock.unit.deleted":"У","dock.unit.modified":"И","expand":"Развернуть просмотр","gateway.checking":"Проверка Univer Gateway…","gateway.failed":"Univer Gateway недоступен — нажмите для повтора","gateway.running":"Univer Gateway запущен","gateway.starting":"Запуск Univer Gateway…","gateway.stopped":"Univer Gateway остановлен — нажмите для запуска","refresh":"Обновить","settings.autoOpenLivePreview":"Автоматически открывать интерактивный предпросмотр","settings.autoOpenLivePreviewHint":"Показывать плавающее окно просмотра, когда агент редактирует документ. Карточки ревью в чате остаются доступны при отключении.","settings.collapse":"Свернуть","settings.description":"Управление интерактивным предпросмотром при редактировании документов.","settings.discard":"Отменить изменения","settings.expand":"Развернуть","settings.overridden":"Переопределено","settings.readOnly":"Текущий документ настроек доступен только для чтения.","settings.reset":"Сбросить по умолчанию","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить. Попробуйте снова.","settings.saving":"Сохранение…","settings.title":"Univer Office","settings.unsaved":"Не сохранено","title":"Просмотр Univer"},"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"usageStats":{"account.balanceMode":"Баланс API","account.blocked":"Запрос к учетной записи был заблокирован локальной политикой безопасности. Проверьте настройки HTTPS, same-origin и private-network.","account.health.age":"Возраст данных","account.health.lastAttempt":"Последняя попытка","account.health.lastSuccess":"Последний успех","account.health.provenance":"Источник","account.invalidResponse":"Провайдер вернул нераспознанные данные о квоте.","account.loading":"Загрузка провайдеров…","account.provenance.configured":"Настроено","account.provenance.experimental":"Экспериментальный","account.provenance.official":"Официальный API","account.provenance.provider":"API провайдера","account.provenance.unknown":"Неизвестно","account.provider":"Текущий провайдер","account.reason.allAddressesUnreachable":"Ни один из проверенных сетевых адресов не доступен.","account.reason.blockedNetwork":"Запрос на учетную запись был заблокирован политикой локальной сети.","account.reason.dnsResolutionFailed":"Имя хоста провайдера не удалось разрешить.","account.reason.noValidatedAddress":"Не было доступно ни одного проверенного адреса провайдера.","account.reason.rateLimited":"Провайдер ограничил проверку аккаунтов по частоте запросов.","account.reason.sub2apiBalanceShapeUnrecognized":"Конечная точка баланса Sub2API вернула данные в нераспознанном формате.","account.reason.timeout":"Запрос аккаунта завершился по тайм-ауту.","account.reason.unauthorized":"Учетные данные аккаунта были отклонены.","account.reason.unknown":"Проверка учетной записи завершилась неудачей без безопасного диагностического сообщения.","account.reason.upstreamInvalidJson":"Вверх по течению возвращен нечитаемый JSON","account.reason.upstreamInvalidResponse":"Восходящий поток вернул нераспознанный ответ.","account.reason.upstreamNotJson":"Ответ вышестоящего сервера не был в формате JSON","account.reason.upstreamTooLarge":"Ответ от вышестоящего сервера превысил допустимый размер.","account.status.blocked":"Заблокировано","account.status.invalidResponse":"Неверный ответ","account.status.loading":"Загрузка","account.status.stale":"Устаревшие данные","account.status.unknown":"Неизвестно","account.status.unsupported":"Баланс не поддерживается","account.title":"Аккаунт провайдера","action.close":"Закрыть","action.nextMonth":"Следующий месяц","action.prevMonth":"Предыдущий месяц","action.refresh":"Обновить","action.retry":"Повторить","action.today":"Сегодня","balance.available":"доступно","balance.error":"Не удалось получить баланс: {message}","balance.granted":"Предоставлено","balance.loading":"Получение баланса…","balance.noCredential":"{ref} не настроен (отредактируйте ~/.dsh/.credentials.yaml)","balance.noSchemeTag":"нет баланса API","balance.provider":"Провайдер","balance.remaining":"Доступный баланс","balance.title":"Баланс счета","balance.toppedUp":"Пополнено","balance.total":"Общий баланс","balance.unavailable":"недоступно","balance.unsupported":"У этого провайдера нет публичного интерфейса для проверки баланса.","balance.used":"Использовано","billing.monthly":"≈ {amount}/мес","billing.parts":"Композиция","billing.projected":"Прогнозируемое использование на конец месяца","billing.tokenOnly":"расчет на основе использования","billing.total":"Ориентировочные ежемесячные траты","budget.exceeded":"превышен бюджет","budget.level.critical":"Превышение бюджета","budget.level.normal":"Обычный","budget.level.unknown":"Неполная стоимость","budget.level.warning":"Близко к бюджету","budget.over":"{pct}% бюджета использовано","budget.period.daily":"Оценка за сегодня","budget.period.monthly":"Ожидаемый за этот месяц","budget.remaining":"осталось","budget.summary":"{period}: {spent} / {limit} · {level}","budget.title":"Ежемесячный бюджет","budget.used":"использовано","col.cacheRead":"Чтение кэша","col.cacheWrite":"Запись в кеш","col.calls":"Звонки","col.cost":"Стоимость","col.created":"Создано","col.cwd":"Рабочая папка","col.day":"День","col.default":"Стандартная ставка","col.hour":"Время","col.input":"Ввод","col.model":"Модель","col.models":"Модели","col.output":"Вывод","col.price":"Тариф","col.provider":"Провайдер","col.session":"Сессия","col.sessions":"Сессии","col.share":"Поделиться","col.time":"Время","col.tokens":"Токены","col.turn":"Поворот/шаг","curve.cost":"Стоимость","curve.empty":"Нет данных о сериях (нет вызовов в указанном интервале)","curve.legendCacheRead":"Чтение кеша","curve.legendInput":"Ввод","curve.legendOutput":"Вывод","curve.tokens":"Токены","details.auto":"Автоматически обновляется вместе с главным окном","details.exportCalls":"Экспорт журнала вызовов в CSV","details.exportCsv":"Экспорт CSV","details.exportJson":"Экспортировать JSON","details.hint":"Звонки, токены и стоимость за сессию × модель","details.open":"Открыть подробности в новом окне","details.title":"Детали звонка · сессия × модель","details.updated":"Обновлено","duration.daysHours":"{days}д {hours}ч","duration.hoursMinutes":"{hours}ч {minutes}м","duration.minutes":"{minutes}м","export.dailyCsv":"Ежедневный CSV","export.json":"Полный JSON","export.sessionsCsv":"Сессии CSV","export.title":"Экспорт без секретов","filter.all":"Все рабочие пространства","filter.scope":"Фильтровать статистику по одной рабочей директории","footnote.disclaimer":"Стоимость рассчитана на основе установленных тарифов и не является счетом.","footnote.errors":"({errors} логов не удалось декодировать)","footnote.scanned":"{sessions} сессий, {calls} звонков просканировано","heatmap.empty":"Данные тепловой карты пока отсутствуют","heatmap.fri":"Пт","heatmap.less":"Меньше","heatmap.mon":"Пн","heatmap.month":"{m}","heatmap.more":"Ещё","heatmap.title":"Тепловая карта активности (52 недели)","heatmap.wed":"Ср","lastUpdated":"Обновлено","month.names":"Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек","month.year":"{month} {year}","orcarouter.addError":"Не удалось добавить OrcaRouter. Пожалуйста, попробуйте ещё раз.","orcarouter.choiceSuffix":"(Спонсированная интеграция)","panel.badge":"Использование/Баланс","panel.title":"Расход и баланс","panel.updatedAt":"Обновлено в {time}","perf.empty":"Нет данных о производительности (отсутствуют временные метки в журналах)","perf.est":"прибл.","perf.latencyAvg":"Средняя задержка","perf.modeTps":"токены/с","perf.modeTtft":"ТТФТ","perf.note":"TTFT = запрос → первый токен контента. Последующие шаги в цикле инструментов не имеют отдельного лога запросов, поэтому их TTFT оценивается с начала шага.","perf.samples":"Образцы","perf.title":"Скорость и задержка модели","perf.tps":"токенов/с","perf.ttftAvg":"Среднее значение TTFT","perf.ttftP50":"ТТФТ P50","perf.ttftP90":"TTFT P90","plan.auto":"авто","plan.balance":"Баланс","plan.code":"План кода","plan.noBalance":"не настроен баланс","plan.perMonth":"месяц","plan.period":"последние {days} дней","plan.quota":"квота","plan.remaining":"Осталось","plan.requests":"запросы","plan.subscription":"Подписка","plan.tiers":"Уровни","plan.token":"Тарифный план","plan.tokenEstimate":"оценка токенов","plan.tokens":"Токены","plan.used":"Использовано","plan.usedCost":"Стоимость использования","pricing.peakOffpeak":"пиковый/непиковый","recent.anomaly":"Аномалия стоимости (значительно выше среднего)","refresh":"Обновить","section.byCwd":"Рабочий каталог","section.byDay":"Днём","section.byModel":"По модели","section.byProvider":"По провайдеру","section.bySession":"По сеансу","section.plans":"Тарифы","section.pricing":"Тарифы (за миллион токенов)","section.recent":"Последние звонки","section.series":"Временные ряды","state.empty":"Данные об использовании токенов пока отсутствуют (нет вызовов с использованием)","state.error":"Не удалось загрузить","state.loading":"Вычисление…","state.retry":"Повторить","subscription.error":"Не удалось использовать подписку: {message}","subscription.loading":"Получение данных об использовании подписки…","subscription.notConfigured":"Настройте {refs} для отображения текущего использования подписки.","subscription.planUnknown":"План подписки","subscription.rateLimited":"Провайдер ограничивает частоту проверок; попробуйте позже.","subscription.resetDue":"Сброс квоты","subscription.resets":"Сбросится через {time}","subscription.status.notConfigured":"Не настроено","subscription.status.ok":"В прямом эфире","subscription.status.rateLimited":"Ограничение по частоте запросов","subscription.status.unauthorized":"Войдите снова","subscription.status.unavailable":"Недоступно","subscription.title":"Использование подписки","subscription.unauthorized":"Учетные данные истекли; обновите их и повторите попытку.","subscription.unavailable":"Провайдер не вернул распознаваемых окон квот.","subscription.used":"{value}% использовано","subscription.window.daily":"Ежедневное окно","subscription.window.mcp":"Ежемесячная квота MCP","subscription.window.monthly":"Ежемесячное окно","subscription.window.quota":"Общая квота","subscription.window.session":"5-часовое окно","subscription.window.weekly":"Еженедельное окно","summary.activeDays":"Активные дни","summary.avgCost":"Среднее / вызов","summary.cacheHit":"Процент попаданий в кеш","summary.cacheRead":"Чтение кэша","summary.cacheWrite":"Запись в кеш","summary.calls":"Звонки","summary.cost":"Примерная стоимость","summary.input":"Ввод","summary.output":"Вывод","summary.sessions":"Сессии","summary.streak":"Дневная серия","summary.today":"Сегодня","summary.tokens":"Всего токенов","tab.details":"Детали звонка","tab.overview":"Обзор","tab.perf":"Производительность","tab.today":"Сегодня","today.calls":"Звонков сегодня","today.cost":"Стоимость сегодня","today.empty":"Сегодня звонков еще не было","today.title":"Сегодняшние токены и стоимость","today.tokens":"Токены сегодня","usage.back":"Назад","usage.cacheRead":"Чтение кэша","usage.error":"Агрегация использования не удалась: {message}","usage.heatmap":"Ежедневное использование в этом месяце","usage.hit.today":"Сегодняшний процент попаданий в кэш","usage.hitRate":"Кэш-попадание","usage.input":"Ввод","usage.legendLess":"Меньше","usage.legendMore":"Ещё","usage.loading":"Агрегирование использования…","usage.month":"В этом месяце","usage.noModels":"Нет данных по моделям за этот день.","usage.output":"Вывод","usage.recent":"Последние 14 дней","usage.title":"Использование токенов","usage.today":"Сегодня","usage.total":"За всё время","usage.unknownModel":"Неизвестная модель","weekday.fri":"Ф","weekday.mon":"М","weekday.sat":"С","weekday.sun":"С","weekday.thu":"Т","weekday.tue":"Т","weekday.wed":"В","widget.close":"Свернуть","widget.hint":"Использование токенов & примерная стоимость","widget.hoverHint":"Нажмите, чтобы развернуть","widget.open":"Развернуть"},"workflowRun":{"member.empty":"Пустое имя участника","member.open":"Открыть {name}","phase.empty":"Пустое имя фазы","phase.unassigned":"Вне фаз","run.empty":"Ни один участник не запущен","run.members.few":"{count} участника","run.members.many":"{count} участников","run.members.one":"{count} участник","run.members.other":"{count} участников","run.title":"{name}","status.cancelled":"Отменено","status.completed":"Завершено","status.failed":"Ошибка","status.interrupted":"Прервано","status.running":"Работает","statusCount.cancelled":"Отменено: {count}","statusCount.completed":"Завершено: {count}","statusCount.failed":"Ошибок: {count}","statusCount.interrupted":"Прервано: {count}","statusCount.running":"Работает: {count}"},"workspace":{"actions.newSession.aria":"Новая сессия в {name}","actions.session.aria":"Действия с сессией {name}","actions.workspace.aria":"Действия с рабочей папкой {name}","conflict.named":"Рабочая папка «{name}» уже есть.","date.ymd":"{d}.{m}.{y}","delete.desc":"Уберёт «{name}» из списка рабочих папок. Сама папка и журналы сессий останутся, а её сессии переедут в «Без папки».","delete.pending":"Удаление рабочей папки…","delete.workspace":"Удалить рабочую папку","empty.noMatches":"Ничего не найдено","empty.none":"Сессий пока нет","field.sessionName":"Название сессии","field.workspaceName":"Название рабочей папки","folderError.retry":"Выбрать снова","folderError.title":"Не удалось открыть папку","group.ungrouped":"Без папки","groupBy.flat":"Одним списком","groupBy.label":"Группировать","groupBy.workspace":"По рабочим папкам","hover.copied":"Скопировано","hover.created":"Создано {time}","menu.addWorkspace":"Добавить рабочую папку…","menu.archiveSession":"Убрать сессию в архив","menu.fork":"Ответвить сессию","orderBy.label":"Сортировать","orderBy.manual":"Вручную","orderBy.updated":"По изменению","picker.loading":"Загрузка рабочих папок…","rename":"Переименовать","rename.session.title":"Переименовать сессию","rename.workspace.title":"Переименовать рабочую папку","search.clear":"Очистить поиск","search.hasMore":"Показаны первые {n} результатов. Уточните запрос.","search.hasMore.few":"Показаны первые {n} результата. Уточните запрос.","search.hasMore.one":"Найден один подходящий результат.","search.noMatches":"Подходящих сессий нет","search.pending":"Поиск по истории сессий…","search.placeholder":"Поиск по сессиям...","search.results.aria":"Результаты поиска","search.sessions.aria":"Поиск сессий","search.unavailable":"Поиск по содержимому временно недоступен. Показаны совпадения по названию.","section.sessions":"Сессии","section.workspaces":"Рабочие папки","session.new":"Новая сессия","sessions.collapse":"Показать меньше","sessions.count.few":"{n} сессии","sessions.count.many":"{n} сессий","sessions.count.one":"{n} сессия","sessions.count.other":"{n} сессий","sessions.expand":"Показать ещё {n}","status.completed":"Завершено","status.idle":"Простаивает","status.planReview":"План ждёт проверки","status.running":"Работает","status.subagentsRunning.few":"{n} субагента работает","status.subagentsRunning.many":"{n} субагентов работает","status.subagentsRunning.one":"{n} субагент работает","status.subagentsRunning.other":"{n} субагентов работает","status.waitingAnswer":"Ждёт ответа","status.waitingApproval":"Ждёт подтверждения","time.ago":"{t} назад","time.days":"{n} дн","time.hours":"{n} ч","time.minutes":"{n} мин","time.months":"{n} мес","time.now":"только что","time.years":"{n} г","viewOptions.label":"Параметры отображения","workspace.add":"Добавить рабочую папку"}}
361
367
 
362
368
  /** zh-строка -> ru-строка для DOM-перевода панелей вне locale-ядра. */
363
- const ZH_RU = {"Anthropic 官方技能合集(Claude Skills)": "Официальная коллекция навыков Anthropic (Claude Skills)", "DSH 加载状态": "Состояние в DSH", "DSH 技能": "Навыки DSH", "DSH 本地技能可创建、导入和移到回收站。": "Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.", "Matt Pocock 技能集": "Коллекция навыков Matt Pocock", "SKILL.md 需包含 YAML 格式的技能名称和描述": "SKILL.md должен содержать YAML-название и описание", "Superpowers 社区技能合集": "Коллекция навыков сообщества Superpowers", "ZIP 压缩包无法解压": "ZIP-архив не удаётся распаковать", "ZIP 压缩包过大,限制为 {limit} 字节": "ZIP-архив слишком велик; лимит {limit} байт", "frontmatter 缺少 description": "В frontmatter нет description", "frontmatter 缺少 name": "В frontmatter нет name", "owner/repo 或 https://github.com/…": "owner/repo или https://github.com/…", "skill 来源目录层级超过 {depth} 层: {path}": "Глубина каталога источника превышает {depth} уровней: {path}", "{count} 个已停用": "Отключено: {count}", "{count} 个已在 DSH 加载": "Загружено в DSH: {count}", "{count} 个待处理技能": "Навыков в очереди: {count}", "{count} 个技能": "Навыков: {count}", "{count} 个文件 · {size}": "Файлов: {count} · {size}", "{count} 个诊断项": "Проблем: {count}", "{repo}({count} 个技能)": "{repo} (навыков: {count})", "{result};警告:{warnings}": "{result}; предупреждения: {warnings}", "{value} 分钟前": "{value} мин назад", "{value} 周前": "{value} нед назад", "{value} 天前": "{value} дн назад", "{value} 小时前": "{value} ч назад", "“{name}”将从回收站永久删除,无法恢复。": "«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.", "“{name}”将从当前技能来源移入回收站,之后可以恢复到原位置。": "«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.", "一句话说明什么时候使用": "Одно предложение — когда использовать", "一句话说明用途(含触发词),Agent 靠它自动激活技能": "Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык", "上传内容为空": "Загрузка пуста", "上传内容包含重复路径:{path}": "Загрузка содержит дублирующийся путь: {path}", "上传内容包含非法路径:{path}": "Загрузка содержит недопустимый путь: {path}", "上传内容编码无效": "Недопустимая кодировка загружаемого содержимого", "上传内容过大,限制为 {limit} 字节": "Загрузка слишком велика; лимит {limit} байт", "上传文件过多,最多 {limit} 个": "Слишком много файлов; максимум {limit}", "上游已删 {count}": "Удалено в источнике: {count}", "上游已删除 {count} 个": "Удалено в источнике: {count}", "不支持包含符号链接的 skill 来源: {path}": "Источники навыков с символическими ссылками не поддерживаются: {path}", "不支持的请求方法": "Метод не поддерживается", "不是目录:{path}": "Это не папка: {path}", "个人": "Личные", "个人技能(未绑定上游,不检查更新)": "Личный навык (не привязан к источнику; проверки обновлений нет)", "以下技能也在其他组中开启,关闭它们会影响那些组:": "Эти навыки включены и в других группах; их закрытие затронет и те группы:", "以下技能已从上游仓库移除,本地目录将移入回收站(可恢复):": "Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):", "优先级 {rank}": "Приоритет {rank}", "例如 code-review-helper": "например code-review-helper", "保存": "Сохранить", "保存中…": "Сохранение…", "保存名称": "Сохранить название", "保存成员": "Сохранить состав", "保留开启": "Оставить включёнными", "修复并启用": "Исправить и включить", "停用": "Отключить", "全选": "Выбрать все", "全部关闭": "Закрыть все", "全部更新": "Обновить всё", "全部来源": "Все источники", "公共 Agent": "Общий Agent", "共 {count} 个技能": "Всего навыков: {count}", "关": "Выкл", "关闭": "Закрыть", "关闭后技能中枢的路由、入口与公告全部下线。": "Отключает маршруты, элементы и объявление центра навыков.", "关闭此组?": "Закрыть эту группу?", "其他来源": "Другие источники", "内置": "Встроенные", "写下技能要遵循的指令、步骤和边界…": "Опишите инструкции, шаги и границы навыка…", "分组": "По группам", "刚刚": "только что", "刚刚检查过": "Недавно проверено", "创建": "создание", "创建中…": "Создание…", "创建位置": "Место создания", "创建失败:": "Ошибка создания: ", "创建技能": "Создать навык", "删除": "удаление", "删除于 {time}": "Удалено {time}", "删除场景": "Удалить сценарий", "删除整组": "Удалить группу", "删除整组?": "Удалить группу?", "删除该分组下的全部 {count} 个技能": "Удалить все навыки ({count}) этой группы", "刷新": "Обновить", "勾选技能加入此场景(含已禁用)。": "Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).", "单文件": "Один файл", "压缩包或文件夹需包含 SKILL.md": "Архив или папка должны содержать SKILL.md", "原项目当前不在活动工作区中,无法恢复:{path}": "Исходный проект не является активной рабочей областью, восстановление невозможно: {path}", "发现 {count} 个可导入技能": "Найдено импортируемых навыков: {count}", "发现新版本 v{version}(当前 v{current})": "Доступно обновление: v{version} (текущая v{current})", "发现诊断": "Диагностика обнаружения", "取消": "Отмена", "只统计最近 N 天的使用次数,默认 14 天;0 = 全部历史。改动立即生效。": "Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.", "只读": "только чтение", "可更新 {count}": "Обновляемо: {count}", "可管理": "Управляемый", "合并": "Объединить", "同名技能已存在: {name}": "Навык с таким именем уже существует: {name}", "同步": "Синхронизировать", "同步中…": "Синхронизация…", "同步技能?": "Синхронизировать навыки?", "同步本地技能": "Обновить локальные навыки", "名称": "Название", "后台扫描会话日志的间隔,最小 1 分钟;扫描耗时会自动拉长间隔。": "Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.", "向 Agent 公告": "Объявлять агенту", "启停技能": "Вкл/выкл навык", "启停来源": "Вкл/выкл источник", "启用": "Включить", "启用或停用": "включение или отключение", "启用插件": "Включить плагин", "回收站": "Корзина", "回收站为空。": "Корзина пуста.", "回收站条目不存在: {id}": "Элемент корзины не найден: {id}", "回收站条目路径非法: {id}": "Недопустимый путь элемента корзины: {id}", "回收站里的技能会被永久删除,无法恢复。此操作不可撤销。": "Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.", "在分组标题后汇总调用次数与最近调用时间。": "После заголовков групп показывать число вызовов и время последнего вызова.", "在技能名旁显示琥珀色调用次数。": "Показывать янтарный счётчик вызовов рядом с именем навыка.", "在技能名行右侧显示相对时间(如「3 天前」)。": "Показывать относительное время в строке имени (например «3 дн назад»).", "在系统提示中加入本插件说明,用户提到技能管理时 Agent 知道如何协作。": "Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.", "场景": "Сценарии", "场景名": "Название сценария", "填写项目路径后,面板同时显示该项目 .dsh/skills 与 .agents/skills 下的技能(只读);留空回车恢复用户级视图。": "Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.", "失败 {count} 个": "Не удалось: {count}", "安装": "Установить", "对话中的 create_skill 仍创建用户级 DSH Skill;项目 Skill 可在这里选择活动项目后创建。": "Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.", "导入": "Импорт", "导入中…": "Импорт…", "导入失败": "Импорт не удался", "导入完成:{names}": "Импорт завершён: {names}", "导入成功 {count} 个": "Импортировано: {count}", "导入所选 ({count})": "Импортировать выбранные ({count})", "导入技能": "Импорт навыка", "导入时复制完整内容,不修改原始来源": "Импорт копирует содержимое целиком и не меняет источник", "导入来源不能与 DSH 技能目录相同、包含或位于其中": "Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него", "将把以下来源的可更新技能更新到上游最新版本(覆盖本地修改):": "Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:", "将把分组“{name}”下的全部 {count} 个技能移入回收站(可恢复),只读技能会跳过:": "Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:", "将用上游最新版本覆盖本地对以下技能的所有修改:": "Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:", "尚未核对上游": "источник ещё не проверен", "展开设置": "Показать настройки", "工作区路径(回车应用)": "Путь рабочей области (Enter — применить)", "已停用": "Отключён", "已创建技能:{name}": "Навык создан: {name}", "已创建:": "Создано: ", "已加载": "Загружен", "已发现": "Обнаружен", "已取消 · 已导入 {imported}/{total} 已保留,临时文件已清理": "Отменено · {imported}/{total} сохранено, временные файлы удалены", "已同步版本": "Синхронизированная ревизия", "已启用": "Включено", "已存在": "Существующие", "已导入:{imported};已跳过同名技能:{skipped}": "Импортировано: {imported}; пропущены одноимённые: {skipped}", "已恢复技能:{name}": "Навык восстановлен: {name}", "已是最新": "Актуально", "已是最新版本 v{version}": "Актуальная версия: v{version}", "已更新 {count} 个来源": "Обновлено источников: {count}", "已永久删除:{name}": "Удалён безвозвратно: {name}", "已禁用": "Отключено", "已禁用 {count}": "Отключено: {count}", "已移到回收站:{name}": "Отправлен в корзину: {name}", "已装 {count}": "Установлено: {count}", "已覆盖": "Переопределено", "已选择": "Выбрано", "市场": "Маркет", "市场源已对齐到 {ref},要同步更新以下本地技能吗?": "Источник выровнен с {ref}. Обновить эти локальные навыки?", "平铺": "Списком", "开": "Вкл", "恢复": "Восстановить", "恢复默认": "Сбросить к значению по умолчанию", "所属场景": "Группы", "所选文件夹中没有找到 SKILL.md。": "В выбранной папке не найдено SKILL.md.", "扫描": "Сканировать", "扫描中…": "Сканирование…", "批量更新全部技能?": "Обновить все навыки?", "批量来源中存在多个同名技能: {name}": "В пакетном источнике есть навыки с одинаковыми именами: {name}", "技能": "Навыки", "技能 skills": "Навыки (skills)", "技能不存在: {name}": "Навык не найден: {name}", "技能中枢": "Центр навыков", "技能中枢:浏览、分组与同步管理本地技能": "Центр навыков: просмотр, группировка и синхронизация локальных навыков", "技能内容过长": "Содержимое навыка слишком велико", "技能名称不是合法 kebab-case:{name}": "Имя навыка не соответствует kebab-case: {name}", "技能名称与描述": "Название и описание навыка", "技能名(kebab-case,如 code-review)": "Имя навыка (kebab-case, например code-review)", "技能正文不能为空": "Текст навыка обязателен", "技能简介不能为空": "Описание навыка обязательно", "技能管理器状态文件不可读,已拒绝覆盖:{path}": "Файл состояния менеджера не читается, перезапись отклонена: {path}", "技能管理器状态文件不可读;外部技能已安全停用,修复文件前不会覆盖状态:{path}": "Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}", "技能缺少完整 frontmatter,无法{action}: {name}": "У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}", "技能行/聊天 / 菜单中「仅用户可调」绿色圆点的颜色(#rrggbb)。": "Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).", "技能行/聊天 / 菜单中「模型可调」蓝色圆点的颜色(#rrggbb)。": "Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).", "技能详情": "Подробности навыка", "拖拽技能到此处": "Перетащите навык сюда", "按名称": "По названию", "按添加时间": "По дате добавления", "按调用次数": "По числу вызовов", "描述(一句话路由说明)": "Описание (одно предложение для маршрутизации)", "提供者": "Провайдер", "搜索": "Поиск", "搜索技能…": "Поиск навыков…", "搜索技能名称或描述": "Поиск по названию или описанию навыка", "操作失败:{error}": "Действие не удалось: {error}", "支持 .zip、技能文件夹或单个 SKILL.md": "Поддерживаются .zip, папка навыка или один SKILL.md", "收起设置": "Скрыть настройки", "放弃修改": "Отменить", "文件要求": "Требования к файлам", "新建场景": "Новый сценарий", "新建技能": "Новый навык", "新版本 v{version}": "Новая версия v{version}", "无法从宿主读取活动工作区,项目技能未显示:{path}": "Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}", "无法恢复,同名技能已存在: {name}": "Нельзя восстановить: навык с таким именем уже существует: {name}", "无法生成合法 kebab-case 名称(原始名: {name})": "Не удалось сгенерировать корректное имя kebab-case (исходное: {name})", "无法识别的 skill 来源: {path}": "Нераспознанный источник навыков: {path}", "无法读取目录:{path}": "Не удалось прочитать папку: {path}", "旧版本备份未清理: {path}({error})": "Резервная копия старой версии не удалена: {path} ({error})", "显示分组汇总": "Показывать сводку по группам", "显示最近调用时间": "Показывать время последнего вызова", "显示调用次数": "Показывать число вызовов", "暂无可用的发布版本": "Нет доступных релизов", "暂无来源组。从市场导入技能后自动按来源聚合。": "Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.", "更新": "Обновить", "更新 {count} 个": "Обновить {count}", "更新时间": "Обновлён", "有更新": "Есть обновления", "有更新 {count} 个": "Обновлений: {count}", "服务端返回非 JSON 响应(HTTP {status})": "Сервер вернул ответ не в формате JSON (HTTP {status})", "未保存": "Есть несохранённые", "未发现诊断问题。": "Проблем не обнаружено.", "未导入任何技能。": "Не импортировано ни одного навыка.", "未导入任何技能;已跳过同名技能:{names}": "Ничего не импортировано; пропущены существующие: {names}", "未提供简介": "Описание не указано", "未知技能来源:{root}": "Неизвестный источник навыков: {root}", "未知操作": "Неизвестное действие", "本地还没有技能。点击「新建技能」创建第一个。": "Навыков пока нет. Создайте первый.", "本部署没有挂载该设置命名空间。": "Это развёртывание не предоставляет пространство настроек.", "本部署没有接受这些值,已保留供你修改。": "Развёртывание не приняло эти значения; они оставлены для исправления.", "本部署的设置为只读。": "Настройки этого развёртывания доступны только для чтения.", "来源": "Источник", "来源:{source}": "Источник: {source}", "查看 {name} 详情(回车)": "Подробнее о навыке {name} (Enter)", "查看发布": "Открыть релиз", "查看详情": "Подробнее", "检查": "Проверить", "检查中…": "Проверка…", "检查全部": "Проверить все", "检查失败": "Проверка не удалась", "检查更新": "Проверить обновления", "检查更新失败:{error}": "Не удалось проверить обновления: {error}", "模型可调 — Agent 可自动调用": "Вызывается моделью — агенты могут вызывать автоматически", "模型可调圆点颜色": "Цвет точки «вызывается моделью»", "模板 design-templates": "Шаблоны design-templates", "正在加载技能…": "Загрузка навыков…", "正在安装…": "Установка…", "正在导入: {name} ({done}/{total})": "Импорт: {name} ({done}/{total})", "正文": "Текст", "正文(Markdown)": "Текст (Markdown)", "每个技能最多一个圆点;无圆点 = 不可被调用。": "У навыка не более одной точки; нет точки = не вызывается.", "永久删除": "Удалить безвозвратно", "永久删除?": "Удалить безвозвратно?", "没有匹配的技能。": "Подходящих навыков нет.", "没有找到可导入技能。": "Импортируемых навыков не найдено.", "添加": "Добавить", "添加时间": "Добавлен", "添加源": "Добавить источник", "清空": "Очистить", "清空回收站": "Очистить корзину", "清空回收站?": "Очистить корзину?", "清除工作区": "Очистить рабочую область", "清除搜索": "Очистить поиск", "源文件": "Исходный файл", "源文件只读": "Источник только для чтения", "点击检查上游更新": "Нажмите, чтобы проверить источник на обновления", "状态已更新。": "Состояние обновлено.", "用户 .agents": "пользователь .agents", "用户 .dsh": "пользователь .dsh", "用户 ~/.agents/skills": "Пользовательские ~/.agents/skills", "用户 ~/.dsh/skills": "Пользовательские ~/.dsh/skills", "用户可调 — 仅显式点名时触发": "Вызывается пользователем — только явный вызов", "用户可调圆点颜色": "Цвет точки «вызывается пользователем»", "目录下未找到任何 skill 条目: {path}": "В каталоге не найдено ни одного элемента навыков: {path}", "目录技能": "Набор навыков", "目录路径必须是绝对路径:{path}": "Путь к папке должен быть абсолютным: {path}", "目标目录": "Целевой каталог", "知道了": "Понятно", "确定": "Подтвердить", "确定把「{name}」移入回收站吗?可随时恢复。": "Переместить «{name}» в корзину? Его можно восстановить в любой момент.", "禁止的修改请求(缺少客户端标记)": "Запрещённый запрос на изменение (нет клиентского маркера)", "禁止的请求来源(非法 Host)": "Запрещённый источник запроса (неверный Host)", "禁用": "Отключить", "移入回收站": "В корзину", "移入回收站回滚失败,未恢复内容保留在: {path}({error})": "Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})", "移入回收站?": "В корзину?", "移到回收站": "В корзину", "移到回收站?": "Отправить в корзину?", "移除所选内容": "Убрать выбранное", "移除源": "Удалить источник", "移除源不影响已安装的技能。": "Удаление источника не затрагивает установленные навыки.", "简介": "Описание", "管理 dsh 本地技能目录:浏览、分组、来源同步与新建。": "Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.", "精选技能仓库,添加后即可扫描安装,并持续检查更新。": "Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.", "细分": "Разделить", "统一加载和管理本机 Agent Skills。": "Единая загрузка и управление Agent-навыками на этом компьютере.", "统计窗口(天)": "Окно статистики (дней)", "继承": "Наследовать", "编辑": "Изменить", "缺少完整 YAML frontmatter": "Отсутствует полный YAML frontmatter", "能力怎么选:重复方法 → 技能;外部系统 → MCP;长期资料 → 知识库。": "Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.", "自动统计间隔(分钟)": "Интервал автостатистики (минут)", "自定义": "свой каталог", "自定义目录": "Пользовательские каталоги", "被更高优先级来源 {root} 覆盖": "Перекрыт источником с более высоким приоритетом {root}", "被覆盖": "Перекрыт", "覆盖导入回滚失败,备份保留在: {path}({error})": "Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})", "设计技能合集(design-templates)": "Коллекция навыков дизайна (design-templates)", "诊断": "Диагностика", "诊断异常": "Есть проблемы", "该仓库没有正式发布,选择要跟踪的分支(默认为 main):": "У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):", "该来源不允许{action}": "Этот источник не разрешает: {action}", "该来源目录不存在或暂时没有技能。": "Этого каталога не существует или в нём пока нет навыков.", "该来源还没有导入本地技能。": "Из этого репозитория пока не импортировано ни одного навыка.", "该组没有可写技能(只读技能无法由中枢开关)": "В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)", "请求体不是合法 JSON": "Тело запроса — не корректный JSON", "请求体必须是 application/json": "Тело запроса должно быть application/json", "请求体过大": "Тело запроса слишком велико", "请选择 .zip 或单个 SKILL.md。": "Выберите .zip или один файл SKILL.md.", "读取中…": "Загрузка…", "读取技能正文…": "Загрузка текста навыка…", "调用次数": "Вызовы", "调用策略字段值无效": "Недопустимое значение политики вызова", "跟进上游删除?": "Согласиться с удалением в источнике?", "跟进删除": "Согласиться с удалением", "路径": "Путь", "路径不存在: {path}": "Путь не существует: {path}", "跳过": "Пропустить", "跳过已存在 {count} 个": "Пропущено существующих: {count}", "运行时": "Runtime", "返回列表": "К списку", "还没有场景。先新建一个,再把技能归类。": "Сценариев ещё нет. Создайте один и начните раскладывать навыки.", "还没有市场源。从下方内置市场添加,或输入一个 GitHub 仓库。": "Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.", "适用场景": "Когда применять", "选择分支": "Выберите ветку", "选择文件": "Выбрать файл", "选择文件夹": "Выбрать папку", "通过 Skills Manager 只读加载,启停不会改写源文件。": "Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.", "项目 .agents": "проект .agents", "项目 .agents/skills": "Проектные .agents/skills", "项目 .dsh": "проект .dsh", "项目 .dsh/skills": "Проектные .dsh/skills", "项目 Agent": "Проектный Agent", "项目 DSH": "Проектный DSH", "项目技能目录不安全,拒绝写入:{path}": "Каталог проектных навыков небезопасен, запись отклонена: {path}", "项目级": "Проектный", "(目录可能不完整)": "(каталог может быть неполным)"}
369
+ const ZH_RU = {"Anthropic 官方技能合集(Claude Skills)": "Официальная коллекция навыков Anthropic (Claude Skills)", "DSH 加载状态": "Состояние в DSH", "DSH 技能": "Навыки DSH", "DSH 本地技能可创建、导入和移到回收站。": "Локальные навыки DSH можно создавать, импортировать и отправлять в корзину.", "Matt Pocock 技能集": "Коллекция навыков Matt Pocock", "SKILL.md 需包含 YAML 格式的技能名称和描述": "SKILL.md должен содержать YAML-название и описание", "Superpowers 社区技能合集": "Коллекция навыков сообщества Superpowers", "ZIP 压缩包无法解压": "ZIP-архив не удаётся распаковать", "ZIP 压缩包过大,限制为 {limit} 字节": "ZIP-архив слишком велик; лимит {limit} байт", "frontmatter 缺少 description": "В frontmatter нет description", "frontmatter 缺少 name": "В frontmatter нет name", "owner/repo 或 https://github.com/…": "owner/repo или https://github.com/…", "skill 来源目录层级超过 {depth} 层: {path}": "Глубина каталога источника превышает {depth} уровней: {path}", "{count} 个已停用": "Отключено: {count}", "{count} 个已在 DSH 加载": "Загружено в DSH: {count}", "{count} 个待处理技能": "Навыков в очереди: {count}", "{count} 个技能": "Навыков: {count}", "{count} 个文件 · {size}": "Файлов: {count} · {size}", "{count} 个诊断项": "Проблем: {count}", "{repo}({count} 个技能)": "{repo} (навыков: {count})", "{result};警告:{warnings}": "{result}; предупреждения: {warnings}", "{value} 分钟前": "{value} мин назад", "{value} 周前": "{value} нед назад", "{value} 天前": "{value} дн назад", "{value} 小时前": "{value} ч назад", "“{name}”将从回收站永久删除,无法恢复。": "«{name}» будет безвозвратно удалён из корзины; восстановить невозможно.", "“{name}”将从当前技能来源移入回收站,之后可以恢复到原位置。": "«{name}» будет перемещён из текущего источника в корзину; позже его можно восстановить на прежнее место.", "一句话说明什么时候使用": "Одно предложение — когда использовать", "一句话说明用途(含触发词),Agent 靠它自动激活技能": "Одна строка — что делает (с триггерными словами); по этому описанию агенты активируют навык", "上传内容为空": "Загрузка пуста", "上传内容包含重复路径:{path}": "Загрузка содержит дублирующийся путь: {path}", "上传内容包含非法路径:{path}": "Загрузка содержит недопустимый путь: {path}", "上传内容编码无效": "Недопустимая кодировка загружаемого содержимого", "上传内容过大,限制为 {limit} 字节": "Загрузка слишком велика; лимит {limit} байт", "上传文件过多,最多 {limit} 个": "Слишком много файлов; максимум {limit}", "上游已删 {count}": "Удалено в источнике: {count}", "上游已删除 {count} 个": "Удалено в источнике: {count}", "不支持包含符号链接的 skill 来源: {path}": "Источники навыков с символическими ссылками не поддерживаются: {path}", "不支持的请求方法": "Метод не поддерживается", "不是目录:{path}": "Это не папка: {path}", "个人": "Личные", "个人技能(未绑定上游,不检查更新)": "Личный навык (не привязан к источнику; проверки обновлений нет)", "为空时恢复默认Deep diving...提示词状态": "Если пусто, возвращается исходный промпт Deep diving...", "以下技能也在其他组中开启,关闭它们会影响那些组:": "Эти навыки включены и в других группах; их закрытие затронет и те группы:", "以下技能已从上游仓库移除,本地目录将移入回收站(可恢复):": "Эти навыки удалены из источника; их локальные каталоги уйдут в корзину (восстановимо):", "优先级 {rank}": "Приоритет {rank}", "例如 code-review-helper": "например code-review-helper", "保存": "Сохранить", "保存中…": "Сохранение…", "保存名称": "Сохранить название", "保存成员": "Сохранить состав", "保留开启": "Оставить включёнными", "修复并启用": "Исправить и включить", "停用": "Отключить", "全选": "Выбрать все", "全部关闭": "Закрыть все", "全部更新": "Обновить всё", "全部来源": "Все источники", "公共 Agent": "Общий Agent", "共 {count} 个技能": "Всего навыков: {count}", "关": "Выкл", "关闭": "Закрыть", "关闭后技能中枢的路由、入口与公告全部下线。": "Отключает маршруты, элементы и объявление центра навыков.", "关闭此组?": "Закрыть эту группу?", "其他来源": "Другие источники", "内置": "Встроенные", "写下技能要遵循的指令、步骤和边界…": "Опишите инструкции, шаги и границы навыка…", "分组": "По группам", "刚刚": "только что", "刚刚检查过": "Недавно проверено", "创建": "создание", "创建中…": "Создание…", "创建位置": "Место создания", "创建失败:": "Ошибка создания: ", "创建技能": "Создать навык", "删除": "удаление", "删除于 {time}": "Удалено {time}", "删除场景": "Удалить сценарий", "删除整组": "Удалить группу", "删除整组?": "Удалить группу?", "删除该分组下的全部 {count} 个技能": "Удалить все навыки ({count}) этой группы", "刷新": "Обновить", "勾选技能加入此场景(含已禁用)。": "Отметьте навыки, чтобы добавить их в сценарий (включая отключённые).", "单文件": "Один файл", "压缩包或文件夹需包含 SKILL.md": "Архив или папка должны содержать SKILL.md", "原项目当前不在活动工作区中,无法恢复:{path}": "Исходный проект не является активной рабочей областью, восстановление невозможно: {path}", "发现 {count} 个可导入技能": "Найдено импортируемых навыков: {count}", "发现新版本 v{version}(当前 v{current})": "Доступно обновление: v{version} (текущая v{current})", "发现诊断": "Диагностика обнаружения", "取消": "Отмена", "只统计最近 N 天的使用次数,默认 14 天;0 = 全部历史。改动立即生效。": "Учитывать использование только за последние N дней (по умолчанию 14); 0 = вся история. Изменения применяются сразу.", "只读": "только чтение", "可更新 {count}": "Обновляемо: {count}", "可管理": "Управляемый", "合并": "Объединить", "同名技能已存在: {name}": "Навык с таким именем уже существует: {name}", "同步": "Синхронизировать", "同步中…": "Синхронизация…", "同步技能?": "Синхронизировать навыки?", "同步本地技能": "Обновить локальные навыки", "名称": "Название", "后台扫描会话日志的间隔,最小 1 分钟;扫描耗时会自动拉长间隔。": "Как часто фоновое сканирование журналов сессий выполняется (минимум 1); тяжёлые сканирования автоматически растягивают интервал.", "向 Agent 公告": "Объявлять агенту", "启停技能": "Вкл/выкл навык", "启停来源": "Вкл/выкл источник", "启用": "Включить", "启用或停用": "включение или отключение", "启用插件": "Включить плагин", "回收站": "Корзина", "回收站为空。": "Корзина пуста.", "回收站条目不存在: {id}": "Элемент корзины не найден: {id}", "回收站条目路径非法: {id}": "Недопустимый путь элемента корзины: {id}", "回收站里的技能会被永久删除,无法恢复。此操作不可撤销。": "Навыки в корзине будут удалены безвозвратно и не могут быть восстановлены.", "在分组标题后汇总调用次数与最近调用时间。": "После заголовков групп показывать число вызовов и время последнего вызова.", "在技能名旁显示琥珀色调用次数。": "Показывать янтарный счётчик вызовов рядом с именем навыка.", "在技能名行右侧显示相对时间(如「3 天前」)。": "Показывать относительное время в строке имени (например «3 дн назад»).", "在系统提示中加入本插件说明,用户提到技能管理时 Agent 知道如何协作。": "Добавляет раздел в системный промпт, чтобы агенты знали, как сотрудничать, когда пользователь упоминает управление навыками.", "场景": "Сценарии", "场景名": "Название сценария", "填写项目路径后,面板同时显示该项目 .dsh/skills 与 .agents/skills 下的技能(只读);留空回车恢复用户级视图。": "Укажите путь проекта, чтобы показать навыки его .dsh/skills и .agents/skills (только чтение); очистите и нажмите Enter, чтобы вернуться к пользовательскому виду.", "失败 {count} 个": "Не удалось: {count}", "安装": "Установить", "对话中的 create_skill 仍创建用户级 DSH Skill;项目 Skill 可在这里选择活动项目后创建。": "Команда create_skill в чате по-прежнему создаёт пользовательский навык DSH; проектный навык можно создать здесь, выбрав активный проект.", "导入": "Импорт", "导入中…": "Импорт…", "导入失败": "Импорт не удался", "导入完成:{names}": "Импорт завершён: {names}", "导入成功 {count} 个": "Импортировано: {count}", "导入所选 ({count})": "Импортировать выбранные ({count})", "导入技能": "Импорт навыка", "导入时复制完整内容,不修改原始来源": "Импорт копирует содержимое целиком и не меняет источник", "导入来源不能与 DSH 技能目录相同、包含或位于其中": "Источник импорта не может совпадать с каталогом навыков DSH, содержать или находиться внутри него", "将把以下来源的可更新技能更新到上游最新版本(覆盖本地修改):": "Обновляемые навыки этих источников будут перезаписаны их новейшими версиями из источника:", "将把分组“{name}”下的全部 {count} 个技能移入回收站(可恢复),只读技能会跳过:": "Все навыки ({count}) группы «{name}» будут перемещены в корзину (восстановимо); навыки «только чтение» будут пропущены:", "将用上游最新版本覆盖本地对以下技能的所有修改:": "Локальные изменения этих навыков будут перезаписаны новейшими версиями из источника:", "尚未核对上游": "источник ещё не проверен", "展开工作过程": "Развернуть процесс", "展开设置": "Развернуть настройки", "工作区路径(回车应用)": "Путь рабочей области (Enter — применить)", "已停用": "Отключён", "已创建技能:{name}": "Навык создан: {name}", "已创建:": "Создано: ", "已加载": "Загружен", "已发现": "Обнаружен", "已取消 · 已导入 {imported}/{total} 已保留,临时文件已清理": "Отменено · {imported}/{total} сохранено, временные файлы удалены", "已同步版本": "Синхронизированная ревизия", "已启用": "Включено", "已处理": "Обработано", "已存在": "Существующие", "已导入:{imported};已跳过同名技能:{skipped}": "Импортировано: {imported}; пропущены одноимённые: {skipped}", "已恢复技能:{name}": "Навык восстановлен: {name}", "已是最新": "Актуально", "已是最新版本 v{version}": "Актуальная версия: v{version}", "已更新 {count} 个来源": "Обновлено источников: {count}", "已永久删除:{name}": "Удалён безвозвратно: {name}", "已禁用": "Отключено", "已禁用 {count}": "Отключено: {count}", "已移到回收站:{name}": "Отправлен в корзину: {name}", "已装 {count}": "Установлено: {count}", "已覆盖": "Переопределено", "已选择": "Выбрано", "市场": "Маркет", "市场源已对齐到 {ref},要同步更新以下本地技能吗?": "Источник выровнен с {ref}. Обновить эти локальные навыки?", "平铺": "Списком", "开": "Вкл", "思考": "Рассуждения", "恢复": "Восстановить", "恢复默认": "По умолчанию", "所属场景": "Группы", "所选文件夹中没有找到 SKILL.md。": "В выбранной папке не найдено SKILL.md.", "扫描": "Сканировать", "扫描中…": "Сканирование…", "批量更新全部技能?": "Обновить все навыки?", "批量来源中存在多个同名技能: {name}": "В пакетном источнике есть навыки с одинаковыми именами: {name}", "技能": "Навыки", "技能 skills": "Навыки (skills)", "技能不存在: {name}": "Навык не найден: {name}", "技能中枢": "Центр навыков", "技能中枢:浏览、分组与同步管理本地技能": "Центр навыков: просмотр, группировка и синхронизация локальных навыков", "技能内容过长": "Содержимое навыка слишком велико", "技能名称不是合法 kebab-case:{name}": "Имя навыка не соответствует kebab-case: {name}", "技能名称与描述": "Название и описание навыка", "技能名(kebab-case,如 code-review)": "Имя навыка (kebab-case, например code-review)", "技能正文不能为空": "Текст навыка обязателен", "技能简介不能为空": "Описание навыка обязательно", "技能管理器状态文件不可读,已拒绝覆盖:{path}": "Файл состояния менеджера не читается, перезапись отклонена: {path}", "技能管理器状态文件不可读;外部技能已安全停用,修复文件前不会覆盖状态:{path}": "Файл состояния менеджера не читается; внешние навыки отключены, перезапись заблокирована до исправления: {path}", "技能缺少完整 frontmatter,无法{action}: {name}": "У навыка неполный frontmatter, нельзя выполнить «{action}»: {name}", "技能行/聊天 / 菜单中「仅用户可调」绿色圆点的颜色(#rrggbb)。": "Цвет зелёной точки «только пользователь» в панели навыков и чате/меню (#rrggbb).", "技能行/聊天 / 菜单中「模型可调」蓝色圆点的颜色(#rrggbb)。": "Цвет синей точки «модель может вызвать» в панели навыков и чате/меню (#rrggbb).", "技能详情": "Подробности навыка", "拖拽技能到此处": "Перетащите навык сюда", "按名称": "По названию", "按添加时间": "По дате добавления", "按调用次数": "По числу вызовов", "描述(一句话路由说明)": "Описание (одно предложение для маршрутизации)", "提供者": "Провайдер", "搜索": "Поиск", "搜索技能…": "Поиск навыков…", "搜索技能名称或描述": "Поиск по названию или описанию навыка", "操作失败:{error}": "Действие не удалось: {error}", "支持 .zip、技能文件夹或单个 SKILL.md": "Поддерживаются .zip, папка навыка или один SKILL.md", "收起工作过程": "Свернуть процесс", "收起设置": "Свернуть настройки", "放弃修改": "Отменить", "文件要求": "Требования к файлам", "新建场景": "Новый сценарий", "新建技能": "Новый навык", "新版本 v{version}": "Новая версия v{version}", "无法从宿主读取活动工作区,项目技能未显示:{path}": "Не удалось получить активную рабочую область у хоста, проектные навыки скрыты: {path}", "无法恢复,同名技能已存在: {name}": "Нельзя восстановить: навык с таким именем уже существует: {name}", "无法生成合法 kebab-case 名称(原始名: {name})": "Не удалось сгенерировать корректное имя kebab-case (исходное: {name})", "无法识别的 skill 来源: {path}": "Нераспознанный источник навыков: {path}", "无法读取目录:{path}": "Не удалось прочитать папку: {path}", "旧版本备份未清理: {path}({error})": "Резервная копия старой версии не удалена: {path} ({error})", "显示分组汇总": "Показывать сводку по группам", "显示最近调用时间": "Показывать время последнего вызова", "显示调用次数": "Показывать число вызовов", "暂无可用的发布版本": "Нет доступных релизов", "暂无来源组。从市场导入技能后自动按来源聚合。": "Групп по источникам пока нет. Импортируйте навыки из маркета — они сгруппируются по источникам.", "更新": "Обновить", "更新 {count} 个": "Обновить {count}", "更新时间": "Обновлён", "有更新": "Есть обновления", "有更新 {count} 个": "Обновлений: {count}", "服务端返回非 JSON 响应(HTTP {status})": "Сервер вернул ответ не в формате JSON (HTTP {status})", "未保存": "Не сохранено", "未发现诊断问题。": "Проблем не обнаружено.", "未导入任何技能。": "Не импортировано ни одного навыка.", "未导入任何技能;已跳过同名技能:{names}": "Ничего не импортировано; пропущены существующие: {names}", "未提供简介": "Описание не указано", "未知技能来源:{root}": "Неизвестный источник навыков: {root}", "未知操作": "Неизвестное действие", "本地还没有技能。点击「新建技能」创建第一个。": "Навыков пока нет. Создайте первый.", "本部署没有挂载该设置命名空间。": "Это развёртывание не предоставляет пространство настроек.", "本部署没有接受这些值,已保留供你修改。": "Развёртывание не приняло эти значения; они оставлены для исправления.", "本部署的设置为只读。": "Настройки этого развёртывания доступны только для чтения.", "来源": "Источник", "来源:{source}": "Источник: {source}", "查看 {name} 详情(回车)": "Подробнее о навыке {name} (Enter)", "查看发布": "Открыть релиз", "查看详情": "Подробнее", "检查": "Проверить", "检查中…": "Проверка…", "检查全部": "Проверить все", "检查失败": "Проверка не удалась", "检查更新": "Проверить обновления", "检查更新失败:{error}": "Не удалось проверить обновления: {error}", "模型可调 — Agent 可自动调用": "Вызывается моделью — агенты могут вызывать автоматически", "模型可调圆点颜色": "Цвет точки «вызывается моделью»", "模板 design-templates": "Шаблоны design-templates", "正在加载技能…": "Загрузка навыков…", "正在安装…": "Установка…", "正在导入: {name} ({done}/{total})": "Импорт: {name} ({done}/{total})", "正文": "Текст", "正文(Markdown)": "Текст (Markdown)", "每个技能最多一个圆点;无圆点 = 不可被调用。": "У навыка не более одной точки; нет точки = не вызывается.", "永久删除": "Удалить безвозвратно", "永久删除?": "Удалить безвозвратно?", "没有匹配的技能。": "Подходящих навыков нет.", "没有找到可导入技能。": "Импортируемых навыков не найдено.", "添加": "Добавить", "添加时间": "Добавлен", "添加源": "Добавить источник", "清空": "Очистить", "清空回收站": "Очистить корзину", "清空回收站?": "Очистить корзину?", "清除工作区": "Очистить рабочую область", "清除搜索": "Очистить поиск", "源文件": "Исходный файл", "源文件只读": "Источник только для чтения", "点击检查上游更新": "Нажмите, чтобы проверить источник на обновления", "状态已更新。": "Состояние обновлено.", "状态提示词": "Промпт статуса", "用户 .agents": "пользователь .agents", "用户 .dsh": "пользователь .dsh", "用户 ~/.agents/skills": "Пользовательские ~/.agents/skills", "用户 ~/.dsh/skills": "Пользовательские ~/.dsh/skills", "用户可调 — 仅显式点名时触发": "Вызывается пользователем — только явный вызов", "用户可调圆点颜色": "Цвет точки «вызывается пользователем»", "目录下未找到任何 skill 条目: {path}": "В каталоге не найдено ни одного элемента навыков: {path}", "目录技能": "Набор навыков", "目录路径必须是绝对路径:{path}": "Путь к папке должен быть абсолютным: {path}", "目标目录": "Целевой каталог", "知道了": "Понятно", "确定": "Подтвердить", "确定把「{name}」移入回收站吗?可随时恢复。": "Переместить «{name}» в корзину? Его можно восстановить в любой момент.", "禁止的修改请求(缺少客户端标记)": "Запрещённый запрос на изменение (нет клиентского маркера)", "禁止的请求来源(非法 Host)": "Запрещённый источник запроса (неверный Host)", "禁用": "Отключить", "移入回收站": "В корзину", "移入回收站回滚失败,未恢复内容保留在: {path}({error})": "Откат перемещения в корзину не удался; невосстановленное содержимое сохранено в: {path} ({error})", "移入回收站?": "В корзину?", "移到回收站": "В корзину", "移到回收站?": "Отправить в корзину?", "移除所选内容": "Убрать выбранное", "移除源": "Удалить источник", "移除源不影响已安装的技能。": "Удаление источника не затрагивает установленные навыки.", "简介": "Описание", "管理 dsh 本地技能目录:浏览、分组、来源同步与新建。": "Управление локальным каталогом навыков dsh: просмотр, группировка, синхронизация источников и создание.", "精选技能仓库,添加后即可扫描安装,并持续检查更新。": "Отобранные репозитории навыков — добавьте, чтобы сканировать и устанавливать, с постоянной проверкой обновлений.", "细分": "Разделить", "统一加载和管理本机 Agent Skills。": "Единая загрузка и управление Agent-навыками на этом компьютере.", "统计窗口(天)": "Окно статистики (дней)", "继承": "Наследовать", "编辑": "Изменить", "缺少完整 YAML frontmatter": "Отсутствует полный YAML frontmatter", "能力怎么选:重复方法 → 技能;外部系统 → MCP;长期资料 → 知识库。": "Как выбрать способность: повторяемый метод → навык; внешняя система → MCP; долгосрочные знания → база знаний.", "自动统计间隔(分钟)": "Интервал автостатистики (минут)", "自定义": "свой каталог", "自定义状态提示词": "Свой промпт статуса", "自定义目录": "Пользовательские каталоги", "被更高优先级来源 {root} 覆盖": "Перекрыт источником с более высоким приоритетом {root}", "被覆盖": "Перекрыт", "覆盖导入回滚失败,备份保留在: {path}({error})": "Откат перезаписывающего импорта не удался; резервные копии сохранены в: {path} ({error})", "设计技能合集(design-templates)": "Коллекция навыков дизайна (design-templates)", "诊断": "Диагностика", "诊断异常": "Есть проблемы", "该仓库没有正式发布,选择要跟踪的分支(默认为 main):": "У репозитория нет релизов. Выберите ветку для отслеживания (по умолчанию main):", "该来源不允许{action}": "Этот источник не разрешает: {action}", "该来源目录不存在或暂时没有技能。": "Этого каталога не существует или в нём пока нет навыков.", "该来源还没有导入本地技能。": "Из этого репозитория пока не импортировано ни одного навыка.", "该组没有可写技能(只读技能无法由中枢开关)": "В группе нет перезаписываемых навыков (состояние навыков «только чтение» нельзя менять из центра)", "请求体不是合法 JSON": "Тело запроса — не корректный JSON", "请求体必须是 application/json": "Тело запроса должно быть application/json", "请求体过大": "Тело запроса слишком велико", "请选择 .zip 或单个 SKILL.md。": "Выберите .zip или один файл SKILL.md.", "读取中…": "Загрузка…", "读取技能正文…": "Загрузка текста навыка…", "调用次数": "Вызовы", "调用策略字段值无效": "Недопустимое значение политики вызова", "跟进上游删除?": "Согласиться с удалением в источнике?", "跟进删除": "Согласиться с удалением", "路径": "Путь", "路径不存在: {path}": "Путь не существует: {path}", "跳过": "Пропустить", "跳过已存在 {count} 个": "Пропущено существующих: {count}", "运行时": "Runtime", "返回列表": "К списку", "还没有场景。先新建一个,再把技能归类。": "Сценариев ещё нет. Создайте один и начните раскладывать навыки.", "还没有市场源。从下方内置市场添加,或输入一个 GitHub 仓库。": "Источников пока нет. Добавьте из каталога ниже или введите репозиторий GitHub.", "适用场景": "Когда применять", "选择分支": "Выберите ветку", "选择文件": "Выбрать файл", "选择文件夹": "Выбрать папку", "通过 Skills Manager 只读加载,启停不会改写源文件。": "Загружается через Skills Manager только для чтения; переключения не меняют исходные файлы.", "项目 .agents": "проект .agents", "项目 .agents/skills": "Проектные .agents/skills", "项目 .dsh": "проект .dsh", "项目 .dsh/skills": "Проектные .dsh/skills", "项目 Agent": "Проектный Agent", "项目 DSH": "Проектный DSH", "项目技能目录不安全,拒绝写入:{path}": "Каталог проектных навыков небезопасен, запись отклонена: {path}", "项目级": "Проектный", "(目录可能不完整)": "(каталог может быть неполным)"}
364
370
 
365
371
  // Подписи собственной карточки настроек (namespace russian-lang).
366
372
  RU['russian-lang'] = {"cardTitle": "Русская локализация", "cardSub": "Язык интерфейса, типографика, раскладка", "enabled": "Русский язык включён", "typography": "Типографика вывода", "typographyDesc": "Исправляет типографику в тексте ответов: кавычки-«ёлочки», тире вместо дефисов, неразрывные пробелы после коротких предлогов. Код и ссылки не трогаются.", "yo": "Буква ё", "yoDesc": "Восстанавливать «ё» в частых словах (ещё, чёрный, идёт и др.), написанных через «е». Неоднозначные слова (например «все/всё») не трогаются.", "agentPrompt": "Русский промпт агента", "agentPromptDesc": "Добавляет в системный промпт инструкцию отвечать по-русски. Не по умолчанию.", "overridesCount": "Своих переопределений", "statusLoading": "Настройки загружаются…", "statusUnavailable": "Настройки недоступны на этом хосте", "hint": "Машинные переводы помечены в очереди выверки; ручная правка словарей приоритетна.", "altL": "Alt+L — конвертировать раскладку текущего поля", "reportIssue": "Сообщить об ошибке перевода", "requestPlugin": "Запросить перевод плагина"}
@@ -639,12 +645,33 @@ const makeLayout = (freq, localDict = new Set()) => {
639
645
  }
640
646
  return null
641
647
  }
648
+ // Точечные замены атрибутов и текста в плагинах с хардкодом (dsh-visualize, effort-slider)
649
+ const DOM_EN_ATTRS = {
650
+ 'Streaming preview': 'Предпросмотр стриминга',
651
+ 'Visualization streaming preview': 'Предпросмотр визуализации'
652
+ }
653
+ const DOM_EN_TEXT = {
654
+ 'Low': 'Низкий',
655
+ 'Medium': 'Средний',
656
+ 'High': 'Высокий',
657
+ 'Effort': 'Рассуждения'
658
+ }
642
659
  const ZH_WALKER = (root) => {
643
660
  try {
644
661
  const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT)
645
662
  const hits = []
646
663
  for (let node = walker.nextNode(); node; node = walker.nextNode()) {
647
- if (node.nodeValue && node.nodeValue.length >= 2 && ZH_CJK.test(node.nodeValue)) hits.push(node)
664
+ if (node.nodeValue && node.nodeValue.length >= 2 && ZH_CJK.test(node.nodeValue)) {
665
+ hits.push(node)
666
+ } else if (node.nodeValue) {
667
+ const trimmed = node.nodeValue.trim()
668
+ if (DOM_EN_TEXT[trimmed]) {
669
+ const p = node.parentElement
670
+ if (p && (p.closest('[class*="effort"], [class*="slider"], [class*="reasoning"]') || p.getAttribute('role') === 'option')) {
671
+ node.nodeValue = node.nodeValue.replace(trimmed, DOM_EN_TEXT[trimmed])
672
+ }
673
+ }
674
+ }
648
675
  }
649
676
  for (const node of hits) {
650
677
  const next = zhTranslateText(node.nodeValue)
@@ -654,12 +681,22 @@ const makeLayout = (freq, localDict = new Set()) => {
654
681
  for (const el of root.querySelectorAll ? root.querySelectorAll('[title],[placeholder],[aria-label]') : []) {
655
682
  for (const attr of ['title', 'placeholder', 'aria-label']) {
656
683
  const v = el.getAttribute && el.getAttribute(attr)
657
- if (v && v.length >= 2 && ZH_CJK.test(v)) {
658
- const next = zhTranslateText(v)
659
- if (next) el.setAttribute(attr, next)
684
+ if (v) {
685
+ if (DOM_EN_ATTRS[v]) {
686
+ el.setAttribute(attr, DOM_EN_ATTRS[v])
687
+ } else if (v.length >= 2 && ZH_CJK.test(v)) {
688
+ const next = zhTranslateText(v)
689
+ if (next) el.setAttribute(attr, next)
690
+ }
660
691
  }
661
692
  }
662
693
  }
694
+ if (root.getAttribute) {
695
+ for (const attr of ['title', 'placeholder', 'aria-label']) {
696
+ const v = root.getAttribute(attr)
697
+ if (v && DOM_EN_ATTRS[v]) root.setAttribute(attr, DOM_EN_ATTRS[v])
698
+ }
699
+ }
663
700
  } catch (err) { /* ignore */ }
664
701
  }
665
702
  let zhObserver = null
@@ -872,9 +909,10 @@ const makeLayout = (freq, localDict = new Set()) => {
872
909
  }
873
910
  const unsubscribeLayout = runtime.subscribe(layoutOnInput)
874
911
  document.addEventListener('input', layoutOnInput, true)
875
- document.addEventListener('keydown', (ev) => {
876
- // Alt (Latin 'l' код) ручной конверт текущего инпута
877
- if (ev.altKey && !ev.ctrlKey && !ev.metaKey && ev.key.toLowerCase() === 'l') {
912
+ const layoutOnKeydown = (ev) => {
913
+ // Alt+L (клавиша KeyL, Latin 'l' или русская 'д'): ручной конверт текущего инпута
914
+ const isL = ev.code === 'KeyL' || ev.key.toLowerCase() === 'l' || ev.key.toLowerCase() === 'д'
915
+ if (ev.altKey && !ev.ctrlKey && !ev.metaKey && isL) {
878
916
  const el = layoutCurrentInput()
879
917
  if (el) {
880
918
  const value = el.value || ''
@@ -887,10 +925,12 @@ const makeLayout = (freq, localDict = new Set()) => {
887
925
  }
888
926
  }
889
927
  }
890
- }, true)
928
+ }
929
+ document.addEventListener('keydown', layoutOnKeydown, true)
891
930
  ctx.effect(() => {
892
931
  unsubscribeLayout()
893
932
  document.removeEventListener('input', layoutOnInput, true)
933
+ document.removeEventListener('keydown', layoutOnKeydown, true)
894
934
  layoutDismiss()
895
935
  layoutBadgeHide()
896
936
  }, 'dsh-russian-lang: layout')
@@ -1053,7 +1093,7 @@ const makeLayout = (freq, localDict = new Set()) => {
1053
1093
  React.createElement('div', { className: 'rl-hint' }, t('altL')),
1054
1094
  React.createElement('div', { className: 'rl-actions' },
1055
1095
  React.createElement('a', {
1056
- href: makeIssueUrl({}, '0.1.32'),
1096
+ href: makeIssueUrl({}, '0.2.0'),
1057
1097
  target: '_blank',
1058
1098
  rel: 'noopener noreferrer',
1059
1099
  className: 'rl-link'