import type { LocaleCatalog } from './types.ts'

const strings: Record<string, string> = {
  'common.save': 'Сохранить',
  'common.cancel': 'Отмена',
  'common.close': 'Закрыть',
  'common.delete': 'Удалить',
  'common.remove': 'Убрать',
  'common.retry': 'Повторить',
  'common.continue': 'Продолжить',
  'common.back': 'Назад',
  'common.loading': 'Загрузка…',
  'common.yes': 'Да',
  'common.no': 'Нет',
  'common.unknown': 'Неизвестно',
  'common.version': 'Версия',

  'login.welcome': 'Добро пожаловать в {{brandName}}',
  'login.signInGoogle': 'Войти через Google',
  'login.failed': 'Не удалось войти',
  'setup.welcomeUser': 'Добро пожаловать, {{name}}',
  'setup.welcomeGeneric': 'Добро пожаловать в {{brandName}}',
  'setup.description': 'Выберите провайдера и модель по умолчанию для этого экземпляра {{brandName}}.',
  'setup.provider': 'Провайдер',
  'setup.model': 'Модель',
  'setup.continue': 'Продолжить',
  'setup.saveFailed': 'Не удалось сохранить настройки.',
  'setup.runtimeFailed': 'Не удалось запустить runtime с предоставленными учётными данными. Проверьте API-ключ и повторите.',
  'loading.boot': 'Запуск…',
  'loading.auth': 'Проверка аутентификации…',
  'loading.config': 'Загрузка конфигурации…',
  'loading.runtime': 'Запуск runtime…',
  'loading.connecting': 'Подключение к runtime…',
  'loading.almostThere': 'Почти готово…',
  'loading.runtimeNeedsAttention': 'Конфигурация runtime требует внимания.',
  'loading.error.title': '{{brandName}} не смог запустить runtime',
  'loading.error.hint': 'Исправьте неверную конфигурацию и перезапустите приложение.',

  'sidebar.home': 'Главная',
  'sidebar.agents': 'Агенты',
  'sidebar.capabilities': 'Возможности',
  'sidebar.settings': 'Настройки',
  'sidebar.threads': 'Беседы',
  'sidebar.search': 'Поиск по беседам…',
  'sidebar.searchTitle': 'Поиск по беседам (⌘K)',
  'sidebar.noThreads': 'Пока нет бесед',
  'sidebar.noMatches': 'Совпадений нет',
  'sidebar.threadFallback': 'Беседа {{id}}',
  'sidebar.newThread': 'Новая беседа',
  'sidebar.newThreadInProject': 'Новая беседа в проекте…',
  'newThread.blank': 'Пустая беседа',
  'newThread.blankHint': 'Начните с Build и доступных агентов, инструментов и навыков',
  'newThread.project': 'Открыть проект',
  'newThread.projectHint': 'Выберите папку — агент сможет читать и редактировать файлы',
  'sidebar.newChat': 'Новый чат',
  'newChat.blankUnavailableReason': 'Создание чата недоступно для этой рабочей области.',
  'newChat.unavailable': 'Недоступно',
  'newChat.blankHint': 'Локальная рабочая область - начните с Build и доступных коллег, инструментов и навыков',
  'newChat.blankCloudHint': 'Безопасное для Cloud действие - начните синхронизированный cloud-чат',
  'newChat.localOnlyAction': 'Только локальное действие',
  'newChat.cloudAction': 'Действие Cloud',
  'newChat.projectHint': 'Только локальное действие - выберите каталог проекта, который коллега сможет читать и редактировать',
  'newChat.cloudProjectHint': 'Безопасное для Cloud действие - выберите Git или загрузите явный снимок',
  'newChat.projectBlocked': 'Создание проектных чатов отключено.',
  'newChat.createFailed': 'Не удалось создать новый проектный чат. Повторите попытку.',
  'newChat.blank': 'Пустой чат',
  'newChat.cloudProjectSubtitle': 'Начните cloud-чат проекта из Git или явно загруженного снимка.',
  'newChat.createCloudProject': 'Создать проектный чат',
  'sidebar.busy': 'Выполняется',
  'sidebar.awaitingQuestion': 'Ждёт вашего ответа',

  'thread.rename': 'Переименовать',
  'thread.exportMarkdown': 'Экспорт в Markdown',
  'thread.shareLink': 'Поделиться ссылкой',
  'thread.linkCopied': 'Ссылка скопирована!',
  'thread.viewChanges': 'Показать изменения',
  'thread.delete': 'Удалить',
  'thread.deleteConfirm': 'Удалить эту беседу? Действие нельзя отменить.',
  'agent.deleteConfirm': 'Удалить агента «{{name}}»? Действие нельзя отменить.',
  'mcp.deleteConfirm': 'Удалить MCP «{{name}}»? Действие нельзя отменить.',
  'skill.deleteConfirm': 'Удалить навык «{{name}}»? Действие нельзя отменить.',

  'statusbar.ready': 'Готово',
  'statusbar.runtimeError': 'Ошибка runtime',
  'statusbar.sessionUsage': 'Использование сессии',
  'statusbar.inputTokens': 'Токены ввода',
  'statusbar.outputTokens': 'Токены вывода',
  'statusbar.reasoningTokens': 'Токены рассуждения',
  'statusbar.cacheTokens': 'Токены кеша',
  'statusbar.totalTokens': 'Всего',
  'statusbar.totalCost': 'Общая стоимость',

  'runtime.offline': 'Runtime недоступен: {{error}}',
  'runtime.offlineLabel': 'Runtime недоступен:',
  'runtime.tryAgain': 'Повторить',
  'runtime.restarting': 'Перезапуск…',

  'homepage.title': 'Состояние рабочего пространства, возможности и состояние выполнения в одном окне.',
  'homepage.subtitle': 'Используйте главную как панель наблюдаемости, а не экран приветствия. Проверьте, что загружено, что подключено, что использует OpenCode и откуда продолжить.',
  'homepage.diagnostics': 'Диагностика {{brandName}}',
  'homepage.refresh': 'Обновить',
  'homepage.refreshing': 'Обновление…',
  'homepage.range.last7d': 'Последние 7 дней',
  'homepage.range.last30d': 'Последние 30 дней',
  'homepage.range.ytd': 'С начала года',
  'homepage.range.all': 'За всё время',

  'homepage.pill.runtime': 'Runtime',
  'homepage.pill.runtimeReady': 'Готов',
  'homepage.pill.runtimeLoading': 'Загрузка диагностики',
  'homepage.pill.runtimeNotReady': 'Не готов',
  'homepage.pill.provider': 'Провайдер',
  'homepage.pill.providerNotConfigured': 'Не настроен',
  'homepage.pill.context': 'Контекст',
  'homepage.pill.contextTokens': '{{count}} токенов',
  'homepage.pill.contextUnknown': 'Лимит неизвестен',
  'homepage.pill.mcp': 'MCP',
  'homepage.pill.mcpConnected': '{{connected}}/{{total}} подключено',
  'homepage.pill.capabilities': 'Возможности',
  'homepage.pill.capabilitiesSummary': '{{tools}} инструментов · {{skills}} навыков',

  'homepage.card.toolsAndSkills': 'Инструменты и навыки',
  'homepage.card.configuredTools': 'Настроенные инструменты',
  'homepage.card.activeSkills': 'Активные навыки',
  'homepage.card.customSkills': 'Свои навыки',
  'homepage.card.customMcps': 'Свои MCP',
  'homepage.card.connectedMcps': 'Подключённые MCP',
  'homepage.card.agents': 'Встроенные и свои агенты',
  'homepage.card.primaryModes': 'Основные режимы',
  'homepage.card.builtinAgents': 'Встроенные агенты',
  'homepage.card.enabledCustomAgents': 'Свои активированы',
  'homepage.card.invalidAgents': 'Требуют внимания',
  'homepage.card.leadAgent': 'Ведущий агент',
  'homepage.card.availableSubAgents': 'Доступные под-агенты',
  'homepage.card.usage': 'Беседы, токены и стоимость',
  'homepage.card.threads': 'Беседы',
  'homepage.card.totalMessages': 'Сообщений',
  'homepage.card.trackedTokens': 'Учтённые токены',
  'homepage.card.trackedCost': 'Учтённая стоимость',
  'homepage.card.userMessages': 'Сообщения пользователя',
  'homepage.card.assistantMessages': 'Сообщения ассистента',
  'homepage.card.toolCalls': 'Вызовы инструментов',
  'homepage.card.busySessions': 'Активные сессии',
  'homepage.card.refreshedAt': 'Обновлено в {{time}}',
  'homepage.card.agentUsage': 'Использование по под-агентам',
  'homepage.card.agentUsageEmpty': 'Нет делегаций под-агентам за {{window}}.',
  'homepage.card.perf': 'Производительность гидратации и патчей',
  'homepage.card.noPerfTelemetry': 'Телеметрия производительности пока не собиралась.',
  'homepage.card.bundledTools': 'Встроенные инструменты',
  'homepage.card.customTools': 'Свои инструменты',
  'homepage.card.primaryMode': 'Основной режим',
  'homepage.card.visibleBuiltins': 'Видимые встроенные',
  'homepage.card.noToolsDiscovered': 'Инструменты пока не обнаружены.',
  'homepage.card.noBuiltinAgents': 'Встроенные агенты недоступны.',
  'homepage.card.tokenMix': 'Состав токенов',
  'homepage.card.window': 'Окно',
  'homepage.card.usageRefreshed': 'Использование обновлено',
  'homepage.card.notLoaded': 'Не загружено',
  'homepage.card.busyRightNow': 'Сейчас активны',
  'homepage.card.currentModel': 'Текущая модель',
  'homepage.card.contextWindow': 'Окно контекста',
  'homepage.card.notSet': 'Не задано',
  'homepage.card.unknownLimit': 'Неизвестно',
  'homepage.card.historicalUsageNote': 'Историческое использование сохраняется по беседе и накладывается на состояние гидратированных живых сессий, поэтому итоги больше не зависят от предварительного открытия бесед.',
  'homepage.card.backfillCompleted': ' В фоне обновлено {{count}} старых сводок.',
  'homepage.card.unknownSubAgent': 'Неизвестный под-агент',
  'homepage.card.tasks': 'задач(и)',
  'homepage.card.tokShort': 'ток',
  'homepage.card.historyLoadP95': 'Загрузка истории p95',
  'homepage.card.coldSyncP95': 'Холодная синхр. p95',
  'homepage.card.flushP95': 'Flush p95',
  'homepage.card.slowEvents': 'Медленные события',
  'homepage.card.flushWaitP95': 'Ожидание flush p95',
  'homepage.card.patchPublishes': 'Опубликованные патчи',
  'homepage.card.telemetrySamples': 'Выборки телеметрии',
  'homepage.card.perfLiveNote': 'Диагностика приходит в реальном времени из движка основного процесса. Числа берутся из тех же pipeline гидратации и патчей, что использует чат.',
  'homepage.card.perfEmptyHint': 'Телеметрия производительности пока пуста. Откройте беседу, запустите стриминг ответа и вернитесь сюда для изучения времён runtime.',

  'homepage.side.resumeThreads': 'Продолжить беседы',
  'homepage.side.resumeEmpty': 'Нет бесед за {{window}}.',
  'homepage.side.recentWork': 'Последние работы',
  'homepage.side.actions': 'Действия',
  'homepage.side.openWorkingSurface': 'Открыть рабочее пространство',
  'homepage.side.newThread': 'Новая беседа',
  'homepage.side.newThreadHint': 'Открывает новую беседу, привязанную к рабочему пространству.',
  'homepage.side.openDirectory': 'Открыть папку',
  'homepage.side.openDirectoryHint': 'Привязывает следующую сессию к реальной кодовой базе или папке проекта.',
  'homepage.side.currentInventory': 'Текущий инвентарь',
  'homepage.side.availableTools': 'Доступные инструменты',
  'homepage.side.skillBundles': 'Пакеты навыков',
  'homepage.side.runtimeInputs': 'Входы runtime',
  'homepage.side.opencodeVersion': 'OpenCode',
  'homepage.side.providerName': 'Провайдер',
  'homepage.side.providerSource': 'Источник провайдера',
  'homepage.side.model': 'Модель',
  'homepage.side.modelSource': 'Источник модели',
  'homepage.side.package': 'Пакет',
  'homepage.side.packageFallback': 'Встроенный/runtime',
  'homepage.side.providerOptions': 'Опции провайдера',
  'homepage.side.credentialOverrides': 'Переопределения учётных данных',
  'homepage.side.noOptions': 'Непубличные опции провайдера не раскрыты.',
  'homepage.side.usingDefaults': 'Используются значения по умолчанию.',

  'homepage.warning.backfillFailed': 'Не удалось восстановить {{count}} сессий — итоги могут быть занижены.',
  'homepage.warning.backfillPending': 'В фоне загружается {{count}} более старых сессий. Итоги обновятся автоматически.',

  'tokens.input': 'Ввод',
  'tokens.output': 'Вывод',
  'tokens.reasoning': 'Рассуждение',
  'tokens.cache': 'Кеш',
  'provider.none': 'Нет провайдера',
  'agent.unknown': 'Неизвестно',
  'thread.sandbox': 'Беседа-песочница',
  'runtime.source.settings': 'Переопределение настройками',
  'runtime.source.default': 'Значение по умолчанию',
  'runtime.source.fallback': 'Резервное значение',

  'settings.title': 'Настройки',
  'settings.subtitle': 'Настройте интерфейс, runtime модели и локальные разрешения.',
  'settings.done': 'Готово',
  'settings.save': 'Сохранить',
  'settings.saved': '✓ Сохранено',
  'settings.saveChanges': 'Сохранить изменения',
  'settings.saveHint': 'Изменения внешнего вида применяются сразу. Изменения провайдера и разрешений при необходимости перезапускают runtime.',
  'settings.tab.appearance': 'Внешний вид',
  'settings.tab.appearanceDescription': 'Тема, цветовая схема и шрифты',
  'settings.tab.models': 'Модели',
  'settings.tab.modelsDescription': 'Провайдер, модель и учётные данные',
  'settings.tab.permissions': 'Разрешения',
  'settings.tab.permissionsDescription': 'Доступ к локальным инструментам',
  'settings.tab.storage': 'Хранилище',
  'settings.tab.storageDescription': 'Артефакты песочницы и очистка',
  'settings.tab.language': 'Язык',
  'settings.appearance.colorScheme': 'Цветовая схема',
  'settings.appearance.theme': 'Тема',
  'settings.appearance.themeActive': 'Активна',
  'settings.appearance.uiFont': 'Шрифт интерфейса',
  'settings.appearance.monoFont': 'Моноширинный шрифт',
  'settings.appearance.preview': 'Предпросмотр',
  'settings.appearance.previewHealth': 'Состояние рабочего пространства',
  'settings.appearance.previewHealthDescription': 'Провайдер подключён, runtime готов',
  'settings.appearance.previewActive': 'Активен',
  'settings.appearance.previewMessage': 'Изменения темы применяются сразу.',
  'settings.appearance.previewMessageSecondary': 'Изменения провайдера и разрешений по-прежнему используют кнопку Сохранить ниже.',
  'settings.models.provider': 'Провайдер',
  'settings.models.model': 'Модель',
  'settings.models.featured': 'Рекомендуем',
  'settings.models.allModels': 'Все модели',
  'settings.models.refresh': 'Обновить',
  'settings.models.refreshing': 'Обновление…',
  'settings.models.refreshTitle': 'Обновить динамический каталог моделей',
  'settings.models.search': 'Поиск среди {{count}} моделей…',
  'settings.models.noMatches': 'Нет моделей, соответствующих запросу.',
  'settings.models.credentialsHeader': 'Учётные данные',
  'settings.permissions.header': 'Инструменты разработчика',
  'settings.permissions.bashTitle': 'Shell-команды',
  'settings.permissions.bashDescription': 'Разрешить агентам выполнять команды терминала в активном рабочем пространстве.',
  'settings.permissions.fileWriteTitle': 'Редактирование файлов',
  'settings.permissions.fileWriteDescription': 'Разрешить агентам создавать и изменять файлы в локальном рабочем пространстве.',
  'settings.storage.loading': 'Загрузка хранилища песочницы…',
  'settings.storage.supportDiagnostics': 'Диагностика поддержки',
  'settings.storage.supportDescription': 'Копирует текстовый отчёт (конфигурация, входы runtime, последние строки лога) в буфер обмена. Учётные данные замаскированы/удалены для безопасной вставки в баг-репорт.',
  'settings.storage.copyDiagnostics': 'Копировать диагностику',
  'settings.storage.preparing': 'Подготовка…',
  'settings.storage.copied': 'Скопировано',
  'settings.storage.copyFailed': 'Не удалось сгенерировать диагностику — повторите',
  'settings.storage.diagnosticsHint': 'Полезно при создании заявки — приложите этот отчёт.',
  'settings.storage.sandboxStorage': 'Хранилище песочницы',
  'settings.storage.totalSize': 'Общий размер',
  'settings.storage.workspaces': 'Рабочие пространства',
  'settings.storage.referenced': 'Со ссылками',
  'settings.storage.unreferenced': 'Без ссылок',
  'settings.storage.stale': 'Устарели',
  'settings.storage.retention': 'Срок хранения',
  'settings.storage.retentionDays': '{{days}} дней',
  'settings.storage.cleanup': 'Очистка',
  'settings.storage.clearOld': 'Удалить старые артефакты песочницы',
  'settings.storage.clearOldDescription': 'Удаляет рабочие пространства без ссылок старше {{days}} дней.',
  'settings.storage.clearAll': 'Удалить все неиспользуемые артефакты песочницы',
  'settings.storage.clearAllDescription': 'Удаляет все рабочие пространства песочницы без ссылок, сохраняя пространства активных бесед.',
  'settings.storage.cleaning': 'Очистка…',
  'settings.storage.lastCleanup': 'Последняя очистка удалила {{count}} рабочих пространств и освободила {{size}}.',
  'settings.storage.sandboxNote': 'Беседы в песочнице пишут в приватное рабочее пространство Cowork под {{root}}. Старые пространства без ссылок очищаются автоматически, вы также можете запустить очистку вручную здесь.',
  'settings.updates.header': 'Обновления',
  'settings.updates.checkForUpdates': 'Проверить обновления',
  'settings.updates.description': 'Запрашивает публичный API GitHub Releases о последней версии. Только чтение — без автозагрузки или автоустановки.',
  'settings.updates.checking': 'Проверка…',
  'settings.updates.newAvailable': 'Доступна новая версия: {{version}}',
  'settings.updates.upToDate': 'Вы используете последнюю версию ({{version}})',
  'settings.updates.unavailable': 'Проверка обновлений недоступна',
  'settings.updates.failed': 'Не удалось проверить обновления',
  'settings.updates.hint': 'Откроет страницу релиза GitHub, если доступна более новая сборка.',
  'settings.updates.currentHint': 'Вы на {{version}}. Нажмите ниже, чтобы открыть заметки о релизе.',
  'settings.updates.openReleaseNotes': 'Открыть заметки о релизе',
  'settings.updates.resetFailed': 'Не удалось сбросить данные: {{message}}',
  'settings.updates.resetCheckLogs': 'Сброс не удался. Проверьте логи.',
  'settings.updates.checkFailedGeneric': 'Проверка обновлений не удалась.',
  'settings.reset.header': 'Сброс',
  'settings.reset.title': 'Сбросить все данные приложения',
  'settings.reset.description': 'Удаляет все беседы, учётные данные, свои агенты, навыки и MCP с этой машины. Приложение перезапускается в режим первого запуска. Полезно перед удалением или для чистой демонстрации; разрушительно и не отменяется.',
  'settings.reset.button': 'Сбросить данные',
  'settings.reset.resetting': 'Сброс…',
  'settings.reset.requiresConfirm': 'Требуется явное подтверждение. Приложение закроется и перезапустится.',
  'settings.reset.confirm': 'Сбросить все данные приложения?\n\nЭто удалит все беседы, учётные данные, свои агенты, навыки и MCP с этой машины. Приложение перезапустится в режиме первого запуска. Не отменяется.',
  'settings.language.label': 'Язык',
  'settings.language.description': 'Выберите язык интерфейса. Выбор сохраняется на этом устройстве. Для частично переведённых языков недостающие строки показываются на английском.',
  'settings.language.systemDefault': 'Автоопределение (система)',

  'agents.tab.skills': 'Навыки',
  'agents.tab.tools': 'Инструменты',
  'agents.tab.instructions': 'Инструкции',
  'agents.tab.inference': 'Вывод',
  'agents.new': 'Новый агент',
  'agents.save': 'Сохранить изменения',
  'agents.create': 'Создать агента',
  'agents.saving': 'Сохранение…',
  'agents.openCapabilities': 'Нужно больше инструментов или навыков?',
  'agents.openCapabilitiesLink': 'Открыть инструменты и навыки',

  'capabilities.tab.tools': 'Инструменты',
  'capabilities.tab.skills': 'Навыки',
  'capabilities.addMcp': 'Добавить MCP',
  'capabilities.addSkill': 'Добавить навык',
  'capabilities.noTools': 'Пока нет доступных инструментов. Добавьте MCP на странице Возможности.',
  'capabilities.noSkills': 'Пока нет доступных навыков. Добавьте пакет на странице Возможности.',

  'chat.placeholder': 'Отправьте сообщение в {{brandName}}…',
  'chat.showContext': 'Показать контекст',
  'chat.hideContext': 'Скрыть контекст',
  'chat.thinking': 'Думаю…',

  'error.viewError': 'Ошибка отображения',
  'error.viewErrorTitle': 'Не удалось отобразить эту страницу.',
  'error.viewErrorBody': '{{brandName}} восстановил остальную часть приложения. Вернитесь на главную и повторите.',
  'error.backToHome': 'Вернуться на главную',

  'approval.sendEmail': 'Отправить письмо',
  'approval.createSpreadsheet': 'Создать таблицу',
  'approval.createDocument': 'Создать документ',
  'approval.createPresentation': 'Создать презентацию',
  'approval.delete': 'Удалить',
  'approval.shareFile': 'Поделиться файлом',
  'approval.createEvent': 'Создать событие',
  'approval.allowAction': 'Разрешить действие',
  'approval.deny': 'Отклонить',
  'approval.approve': 'Одобрить',

  'messageActions.branchHere': 'Ответвить здесь',
  'messageActions.branchHereDescription': 'Создать новую беседу, заканчивающуюся на этом сообщении',
  'messageActions.revertHere': 'Вернуться сюда',
  'messageActions.revertHereDescription': 'Вернуть состояние сессии к моменту перед этим сообщением',
  'messageActions.viewDiff': 'Показать diff',
  'messageActions.viewDiffDescription': 'Показать изменения файлов, внесённые этим сообщением',
  'messageActions.branchFailed': 'Не удалось ответвить от этого сообщения. Повторите.',
  'messageActions.revertConfirm': 'Вернуть сессию к этому сообщению? Последующие ходы будут скрыты до отмены.',
  'messageActions.revertFailed': 'Не удалось вернуть к этому сообщению. Повторите.',

  'chat.attachFile': 'Прикрепить файл',
  'chat.planMode': 'Plan',
  'chat.buildMode': 'Build',
  'chat.planModeDescription': 'Режим Plan: анализ и аудит только для чтения',
  'chat.buildModeDescription': 'Режим Build: полный доступ и делегирование',
  'chat.forkThread': 'Форкнуть беседу',
  'chat.stopGenerating': 'Остановить генерацию (Esc)',
  'chat.awaitingApproval': 'Ждёт одобрения',
  'chat.awaitingApprovalTitle': 'Одобрите или отклоните ожидающий запрос инструмента, чтобы продолжить',
  'chat.awaitingAnswer': 'Ждёт ответа',
  'chat.awaitingAnswerTitle': 'Ответьте на ожидающий вопрос, чтобы продолжить',
  'chat.placeholder.answerPending': 'Ответьте на вопрос выше, чтобы продолжить…',
  'chat.placeholder.askPlan': 'Попросите Plan проанализировать или структурировать работу…',
  'chat.placeholder.askBuild': 'Попросите Build поработать над этим…',
  'chat.placeholder.noThread': 'Сначала начните новую беседу',

  'diff.changesFromMessage': 'Изменения из этого сообщения',
  'diff.changes': 'Изменения',
  'diff.closeChanges': 'Закрыть изменения',
  'diff.loading': 'Загрузка изменений…',
  'diff.noChanges': 'Нет изменений файлов в этой сессии',
  'diff.filesChanged': '{{count}} файл(ов) изменено',
  'diff.unified': 'Единый',
  'diff.split': 'Раздельный',
  'diff.noTextual': 'Нет текстового diff (бинарный файл, переименование или только пробелы).',
  'diff.couldNotLoad': 'Не удалось загрузить содержимое файла',
  'diff.couldNotLoadWithError': 'Не удалось загрузить: {{error}}',
  'diff.showHiddenLines': 'Показать {{count}} неизменённых строк',
  'diff.collapse': 'Свернуть',
  'diff.statusNew': 'Новый',
  'diff.statusDeleted': 'Удалено',
  'diff.statusModified': 'Изменено',

  'thinking.buildCoordinating': 'Build координирует',
  'thinking.planning': 'Планирует',
  'thinking.generalWorking': 'General работает',
  'thinking.exploreWorking': 'Explore работает',
  'thinking.awaitingApproval': 'Ждёт вашего одобрения',
  'thinking.buildCoordinatingCount': 'Build координирует {{count}} агент(ов)',
  'thinking.buildMerging': 'Build объединяет результаты агентов',
  'thinking.agentWorking': '{{agent}} работает',
  'thinking.thinking': 'Думаю',
  'thinking.compacting': 'Сжатие беседы для сохранения контекста…',
  'thinking.agentPlan': 'План агента',
  'thinking.sessionTodos': 'Задачи сессии',

  'compaction.running': 'Сжатие',
  'compaction.done': 'Сжато',
  'compaction.causeOverflow': 'переполнение',
  'compaction.causeAuto': 'авто',
  'compaction.causeManual': 'вручную',
  'compaction.runningOverflow': 'Окно контекста переполнено — сокращаем старые ходы, чтобы освободить место.',
  'compaction.runningAuto': 'Приближаемся к лимиту контекста — сжимаем проактивно.',
  'compaction.runningManual': 'Ручное суммирование сессии для сокращения старых ходов.',
  'compaction.doneOverflow': 'Старые ходы были суммированы, потому что окно контекста было заполнено.',
  'compaction.doneAuto': 'Старые ходы были автоматически суммированы, чтобы освободить место для новых ответов.',
  'compaction.doneManual': 'Старые ходы были суммированы вручную.',

  'taskStatus.running': 'выполняется',
  'taskStatus.done': 'готово',
  'taskStatus.errored': 'ошибка',
  'taskStatus.queued': 'в очереди',

  'taskRun.deeperTitle': 'Этот под-агент запустил ещё {{count}} суб-задач. Щёлкните по полосе для подробностей.',
  'taskDrillIn.backToParent': 'Вернуться к родительской задаче',
  'taskDrillIn.abortTask': 'Прервать эту задачу',
  'taskDrillIn.abortTaskDescription': 'Прерывает только этого под-агента; братья и основной продолжают',
  'taskDrillIn.closeDrawer': 'Закрыть панель',
  'questionDock.pendingCount': '{{count}} вопросов ожидают в этой беседе',
  'questionDock.scrollToToolCall': 'Прокрутить к вызову инструмента этого вопроса',
  'questionDock.typeOwnAnswer': 'Введите свой ответ',

  'mermaid.zoomOut': 'Уменьшить диаграмму Mermaid',
  'mermaid.resetZoom': 'Сбросить масштаб Mermaid',
  'mermaid.zoomIn': 'Увеличить диаграмму Mermaid',
  'chatModelMenu.selectModel': 'Выбрать модель',
  'chatModelMenu.search': 'Поиск моделей…',

  'agentsPage.title': 'Агенты',
  'agentsPage.subtitle': 'Собирайте специалистов из навыков, инструментов и инструкций. Нажмите на карточку, чтобы открыть её в конструкторе.',
  'agentsPage.backToChat': 'Вернуться в чат',
  'agentsPage.search': 'Поиск агентов, навыков, инструментов или инструкций…',
  'agentsPage.importTitle': 'Импортировать своего агента из файла .cowork-agent.json',
  'agentsPage.import': 'Импорт',
  'agentsPage.importFailed': 'Не удалось импортировать {{filename}}: {{error}}',
  'agentsPage.importConflict': 'Агент с именем «{{name}}» уже существует. Заменить его импортированным?',
  'studioTeamPage.eyebrow': 'Команда',
  'studioTeamPage.title': 'Коллеги',
  'studioTeamPage.subtitle': 'Собирайте агентов OpenCode в список коллег с понятными ролями, навыками, инструментами и назначениями в чате.',
  'studioTeamPage.customCount': 'пользовательские',
  'studioTeamPage.builtInCount': 'встроенные',
  'studioTeamPage.runtimeCount': 'runtime',
  'studioTeamPage.search': 'Поиск коллег, навыков, инструментов или инструкций…',
  'studioTeamPage.filterLabel': 'Фильтр коллег',
  'studioTeamPage.importTitle': 'Импортировать своего коллегу из файла .cowork-agent.json',
  'studioTeamPage.importFailed': 'Не удалось импортировать {{filename}}: {{error}}',
  'studioTeamPage.importConflict': 'Коллега с именем «{{name}}» уже существует. Заменить его импортированным?',
  'studioTeamPage.newCoworker': 'Новый коллега',
  'studioTeamPage.customSection': 'Пользовательские коллеги',
  'studioTeamPage.customSectionHelp': 'Созданы вами; редактируйте, включайте, экспортируйте или удаляйте из карточки.',
  'studioTeamPage.noCustom': 'Пользовательских коллег пока нет. Создайте коллегу, чтобы упаковать повторяемую роль, инструкции, навыки и инструменты.',
  'studioTeamPage.noCustomMatch': 'Нет пользовательских коллег, соответствующих поиску.',
  'studioTeamPage.builtInSection': 'Встроенные коллеги',
  'studioTeamPage.builtInSectionHelp': 'Специалисты Open Cowork, собранные из встроенных навыков и инструментов.',
  'studioTeamPage.noBuiltInMatch': 'Нет встроенных коллег, соответствующих поиску.',
  'studioTeamPage.runtimeSection': 'Коллеги, зарегистрированные runtime',
  'studioTeamPage.runtimeSectionHelp': 'Коллеги, зарегистрированные SDK-плагином; поведение выполнения по-прежнему принадлежит OpenCode.',
  'studioTeamPage.noRuntimeMatch': 'Нет runtime-коллег, соответствующих поиску.',
  'studioTeamPage.noOpenCodeMatch': 'Нет стандартных агентов OpenCode, соответствующих поиску.',
  'agentCard.editAvatar': 'Изменить аватар агента',
  'agentCard.idPlaceholder': 'agent-id',
  'agentCard.descriptionPlaceholder': 'На чём специализируется этот агент?',
  'agentCard.enabledTitle': 'Виден в чате',
  'agentCard.disabledTitle': 'Отключён — не появится в чате',
  'agentCard.removeLabel': 'Убрать {{label}}',
  'agentCard.missingTool': 'Отсутствует инструмент: {{label}}',
  'avatarEditor.setColor': 'Установить цвет {{label}}',
  'skillLibrary.empty': 'Пока нет доступных навыков. Добавьте пакет на странице Возможности.',
  'skillLibrary.needsTools': 'Требуется {{count}} инструмент(ов)',
  'toolLibrary.empty': 'Пока нет доступных инструментов. Добавьте MCP на странице Возможности.',
  'toolLibrary.writeTooltip': 'Этот инструмент может записывать — увеличивает область действия агента',

  'agentCard.edit': 'Редактировать',
  'agentCard.export': 'Экспорт',
  'agentCard.exportTitle': 'Экспортировать этого агента как общий JSON-пакет',
  'agentCard.noDescription': 'Без описания',

  'capabilities.title': 'Инструменты и навыки',
  'capabilities.subtitle': 'Просматривайте инструменты и пакеты навыков, доступные в текущем контексте OpenCode, включая встроенные, машинные, проектные и пользовательские дополнения.',
  'capabilities.addTool': 'Добавить инструмент',
  'capabilities.addSkillButton': 'Добавить навык',
  'capabilities.searchTools': 'Поиск инструментов, описаний или коллег…',
  'capabilities.searchSkills': 'Поиск навыков, описаний или коллег…',
  'capabilities.details': 'Детали',
  'capabilities.connection': 'Подключение',
  'capabilities.linkedAgents': 'Связанные агенты',
  'capabilities.linkedCoworkers': 'Связанные коллеги',
  'capabilities.linkedTools': 'Связанные инструменты',
  'capabilities.skillContent': 'Содержимое навыка',
  'capabilities.usedByAgents': 'Используется агентами',
  'capabilities.usedByCoworkers': 'Используется коллегами',
  'capabilities.bundleFiles': 'Файлы пакета',
  'capabilities.noToolsDiscovered': 'Инструменты пока не обнаружены. Добавьте свой MCP, чтобы расширить runtime.',
  'capabilities.noToolsMatch': 'Нет инструментов, соответствующих поиску.',
  'capabilities.noSkillsDiscovered': 'Навыки пока не обнаружены. Добавьте свой пакет, чтобы расширить агентов.',
  'capabilities.noSkillsMatch': 'Нет навыков, соответствующих поиску.',
  'capabilities.kindOpencodeTool': 'Инструмент OpenCode',
  'capabilities.kindCustomMcp': 'Свой MCP',
  'capabilities.kindBuiltinTool': 'Встроенный инструмент',
  'capabilities.kindMcpTool': 'Инструмент MCP',
  'capabilities.kindCustomSkill': 'Свой навык',
  'capabilities.kindBuiltinSkill': 'Встроенный навык',
  'capabilities.skillSourceBundled': 'Встроенный в {{brand}} навык',
  'capabilities.skillSourceProject': 'Навык проекта',
  'capabilities.skillSourceMachine': 'Машинный навык',
  'capabilities.skillSourceBundle': 'Пакет навыков',

  'mcpForm.titleAdd': 'Добавить инструмент MCP',
  'mcpForm.titleEdit': 'Редактировать инструмент MCP — {{name}}',
  'mcpForm.subtitleAdd': 'Подключите сервер Model Context Protocol и сделайте его инструменты доступными внутри {{brand}} и OpenCode.',
  'mcpForm.subtitleEdit': 'Обновите конфигурацию этого MCP. Изменения вступят в силу после перезагрузки runtime в {{brand}}.',
  'mcpForm.saving': 'Сохранение…',
  'mcpForm.saveChanges': 'Сохранить изменения',
  'mcpForm.addMcp': 'Добавить MCP',
  'mcpForm.completeBeforeSave': 'Заполните перед сохранением',
  'mcpForm.whereToSave': 'Куда сохранить',
  'mcpForm.connectionType': 'Тип подключения',
  'mcpForm.connectionDetails': 'Детали подключения',
  'mcpForm.mcpId': 'ID MCP',
  'mcpForm.displayName': 'Отображаемое имя',
  'mcpForm.displayNamePlaceholder': 'напр. GitHub, Jira, Slack',
  'mcpForm.description': 'Описание',
  'mcpForm.descriptionPlaceholder': 'К чему этот MCP даёт доступ агентам.',
  'mcpForm.command': 'Команда',
  'mcpForm.commandPlaceholder': 'напр. npx, node, python',
  'mcpForm.arguments': 'Аргументы',
  'mcpForm.argumentsPlaceholder': 'напр. -y @modelcontextprotocol/server-github',
  'mcpForm.envVars': 'Переменные окружения',
  'mcpForm.envValuePlaceholder': 'значение',
  'mcpForm.url': 'URL',
  'mcpForm.headers': 'Заголовки',
  'mcpForm.allowPrivateNetwork': 'Разрешить приватную сеть',
  'mcpForm.linkedSkills': 'Связанные навыки',
  'mcpForm.preview': 'Предпросмотр MCP',

  'skillForm.titleAdd': 'Добавить пакет навыков',
  'skillForm.titleEdit': 'Редактировать пакет — {{name}}',
  'skillForm.subtitle': 'Создайте настоящий пакет навыков OpenCode с `SKILL.md` и любыми необходимыми ссылками, примерами или шаблонами.',
  'skillForm.addSkill': 'Добавить навык',
  'skillForm.importing': 'Импорт…',
  'skillForm.importDirectory': 'Импортировать папку',
  'skillForm.bundleIdentity': 'Идентификатор пакета',
  'skillForm.skillDirectory': 'Папка навыка',
  'skillForm.skillDirectoryPlaceholder': 'напр. code-review, data-pipeline',
  'skillForm.skillDirectoryHint': 'Сохраняется как папка пакета. Держите в нижнем регистре и стабильной.',
  'skillForm.requiredTools': 'Необходимые инструменты',
  'skillForm.additionalFiles': 'Дополнительные файлы',
  'skillForm.fileContents': 'Содержимое файла',
  'skillForm.bundlePreview': 'Предпросмотр пакета',

  'mcpRestriction.removeRestriction': 'Нажмите, чтобы снять ограничение',

  'commandPalette.search': 'Поиск действий, агентов и команд…',
  'commandPalette.noMatches': 'Ничего не найдено. Попробуйте более широкий поиск.',
  'commandPalette.hint': 'Enter для запуска. Esc для закрытия.',

  'chart.generatedChart': 'Сгенерированная диаграмма',

  'chat.composerAriaLabel': 'Редактор сообщений (перетащите файлы для прикрепления)',
  'chat.revertedSessionTitle': 'Эта сессия возвращена назад — щёлкните, чтобы восстановить последующие сообщения',
  'chat.transcriptAriaLabel': 'Стенограмма чата',

  'homepage.card.usageEyebrow': 'Использование',
  'homepage.card.agentUsageEyebrow': 'Использование агентов',
  'homepage.card.perfEyebrow': 'Производительность',
  'homepage.card.selectedWindow': 'выбранное окно',
  'homepage.side.selectedPeriod': 'выбранный период',
  'homepage.side.noRecentThreads': 'В {{window}} пока нет бесед. Начните одну из действий ниже, и главная станет вашей очередью.',

  'setup.modelIdPlaceholder': 'ID модели',

  'statusbar.thinking': 'Думаю…',
  'statusbar.agentWorking': '{{agent}} работает…',
  'statusbar.compacting': 'Сжатие…',
  'statusbar.contextPercent': '{{percent}}% контекста',
  'statusbar.contextCompactingSoon': '{{percent}}% · скоро сжатие',
  'statusbar.contextCompactingDetail': 'Сжимаю старые ходы, чтобы сохранить контекст',
  'statusbar.contextCompactedDetail': 'Сжато после {{percent}}% из {{limit}}',
  'statusbar.contextNearThreshold': '{{percent}}% из {{limit}} — автосжатие скоро сработает',
  'statusbar.contextOfLimit': '{{percent}}% из {{limit}}',
  'statusbar.tokensCount': '{{count}} токенов',
  'statusbar.cacheRead': 'Чтение из кеша',
  'statusbar.cacheWrite': 'Запись в кеш',
  'statusbar.contextWindow': 'Окно контекста',
  'statusbar.compactions': 'Сжатия',
  'statusbar.lastCompacted': 'Последнее сжатие',
  'statusbar.lastMeasuredInput': 'Последний измеренный ввод',
  'statusbar.sessionCost': 'Стоимость сессии',
  'statusbar.totalAllSessions': 'Итого (все сессии)',

  'threadList.waitingForAnswer': 'Ждёт вашего ответа',
  'threadList.working': 'Работа',
  'threadList.forked': 'Форк беседы',
  'threadList.forkedFrom': 'Форкнуто из другой беседы',
  'threadList.reverted': 'возвращено',
  'threadList.revertedTitle': 'Сессия возвращена к предыдущему сообщению',

  'agentBuilder.saveThisAgentIn': 'Сохранить этого агента в',
  'agentCard.scope': 'Область',

  'agentPreview.title': 'Статический предпросмотр',
  'agentPreview.subtitle': 'Как OpenCode увидит этого агента при вызове. Без сетевого запроса — только скомпилированное представление.',
  'agentPreview.scopeLabel': 'Область {{scope}}',
  'agentPreview.mention': 'Упоминание',
  'agentPreview.toolsResolved': 'Разрешённые инструменты',
  'agentPreview.skillsResolved': 'Разрешённые навыки',
  'agentPreview.nOfM': '{{n}} из {{m}}',
  'agentPreview.missingTools': 'Отсутствующие инструменты: {{list}}',
  'agentPreview.missingSkills': 'Отсутствующие навыки: {{list}}',
  'agentPreview.systemPrompt': 'Системный промпт',
  'agentPreview.toolPatterns': 'Шаблоны инструментов',
  'agentPreview.skillsAvailable': 'Доступные к загрузке навыки',

  'agentTemplate.title': 'Создать нового агента',
  'agentTemplate.subtitle': 'Выберите шаблон, чтобы пропустить чистый холст — потом можно всё поменять.',
  'agentTemplate.startBlank': 'Начать с нуля',
  'agentTemplate.startBlankHint': 'Никаких предвыбранных инструментов или инструкций — создайте агента с нуля.',
  'agentTemplate.temp': 'темп {{value}}',
  'agentTemplate.steps': '{{count}} шагов',
  'agentTemplate.toolHints': '{{count}} подсказ(ок) инструмента',

  'avatarEditor.avatar': 'Аватар',
  'avatarEditor.color': 'Цвет',

  'capabilities.noSkillContent': 'Пока нет доступного содержимого пакета навыков.',
  'capabilities.skillNotTiedToTool': 'Этот навык не привязан к конкретному инструменту.',

  'chart.savedAs': 'Сохранено как',

  'chatModelMenu.noMatches': 'Нет совпадений.',

  'instructions.headerHint': 'Формируйте тон, приоритеты и формат вывода. Хорошие инструкции конкретны и операциональны.',
  'instructions.addSnippet': '+ Фрагмент',
  'instructions.noInstructions': 'Нет инструкций.',
  'instructions.placeholderExamples': 'Примеры:\n- Резюмируйте находки тремя пунктами с доказательствами.\n- Предпочитайте официальные доки блогам.\n- Никогда не отправляйте email; только черновик.\n- Запрашивайте подтверждение перед внешней записью.',
  'instructions.charCount': '{{count}} символов',
  'instructions.longPromptWarning': 'Длинные промпты жгут токены — подумайте о сокращении',
  'instructions.snippet.conciseLabel': 'Будь кратким',
  'instructions.snippet.conciseBody': 'Отвечай в 3–5 пунктах. Держи текст плотным. Обрезай всё, что не несущее.',
  'instructions.snippet.askFirstLabel': 'Задавай уточняющие вопросы',
  'instructions.snippet.askFirstBody': 'Если запрос неоднозначен, задай один уточняющий вопрос перед действием.',
  'instructions.snippet.citeLabel': 'Указывай источники',
  'instructions.snippet.citeBody': 'При резюмировании находок указывай для каждого утверждения исходный документ или URL.',
  'instructions.snippet.draftOnlyLabel': 'Черновик, не отправлять',
  'instructions.snippet.draftOnlyBody': 'Создавай только черновики. Никогда не отправляй сообщения, письма или внешние действия без подтверждения.',
  'instructions.snippet.structuredLabel': 'Структурированный вывод',
  'instructions.snippet.structuredBody': 'Возвращай результаты как короткое резюме, затем нумерованную разбивку.',

  'mcpForm.mcpIdHint': 'Становится пространством имён runtime и префиксом разрешений.',
  'mcpForm.runtimeNamespace': 'Пространство имён runtime',
  'mcpForm.permissionPrefix': 'Префикс разрешений',
  'mcpForm.connectionSummary': 'Сводка подключения',
  'mcpForm.connectivityTest': 'Тест связности',
  'mcpForm.couldNotConnect': 'Не удалось подключиться к этому MCP.',
  'mcpForm.runTestHint': 'Запустите тест перед сохранением, чтобы подтвердить, что сервер отвечает и раскрывает методы.',
  'mcpForm.reloadsRuntimeNote': '{{brand}} автоматически перезагружает runtime после сохранения.',

  'questionDock.question': 'Вопрос',
  'sessionInspector.planFromTaskRuns': 'Производно от активных выполнений задач',
  'sessionInspector.session': 'Сессия',

  'skillForm.bundleId': 'ID пакета',
  'skillForm.frontmatterName': 'Имя frontmatter',
  'skillForm.noExtraBundleFiles': 'Дополнительных файлов пакета пока нет.',
  'skillForm.whatWillBeSaved': 'Что будет сохранено',

  'todo.untitled': 'Задача без названия',

  'toolTrace.artifact': 'Артефакт',
  'toolTrace.agent': 'Агент',
  'toolTrace.subAgent': 'Под-агент',
  'toolTrace.reveal': 'Показать',
  'toolTrace.saving': 'Сохранение…',
  'toolTrace.saveAs': 'Сохранить как…',
  'toolTrace.input': 'Ввод',
  'toolTrace.output': 'Вывод',
  'toolTrace.noDetails': 'Подробности недоступны',
  'toolTrace.generatedInSubAgent': 'Сгенерировано через {{tool}} в работе под-агента',
  'toolTrace.generatedInThread': 'Сгенерировано через {{tool}} в этой беседе',

  // ────────────────────────────────────────────────────────────
  // Home (welcoming landing)
  // ────────────────────────────────────────────────────────────
  'home.greeting.cowork': 'Над чем поработаем сегодня?',
  'home.subtitle': '{{brand}} · Спросите что угодно или @упомяните агента',
  'home.composer.placeholder': 'Спросите что угодно или @упомяните агента',
  'home.composer.send': 'Отправить',
  'home.composer.dropZone': 'Редактор — перетащите файлы для вложения',
  'studioHome.greeting': 'Чем займётся ваша команда сегодня?',
  'studioHome.subtitle': '{{brand}} · Выберите ведущего коллегу, @упомяните специалистов и проверьте работу в одном месте',
  'studioHome.composer.placeholder': 'Спросите что угодно или @упомяните коллегу',
  'studioHome.coachmark': 'Напишите запрос, приложите контекст или @упомяните коллегу — ⌘K для команд.',
  'studioHome.agentNudge': '@упомяните коллегу',
  'home.suggestions.title': 'Попробуйте',
  'home.recent.title': 'Продолжите с того места',
  'home.recent.untitled': 'Беседа без названия',
  'home.statusStrip.ready': 'Готово',
  'home.statusStrip.mcps': '{{connected}}/{{total}} MCP',
  'home.statusStrip.viewMore': 'Пульс',

}

export const ru: LocaleCatalog = {
  locale: 'ru',
  nativeLabel: 'Русский',
  strings,
}
