Files
CodeNomad/packages/ui/src/lib/i18n/messages/ru/instance.ts
Pascal André 0ba1371348 feat(ui): add markdown preview to file viewer (#352)
Fixes #331

## Summary
- add an optional Markdown preview toggle for markdown files in the
Files tab
- add a word-wrap toggle for the source editor
- escape raw HTML in preview mode and limit preview to plain Markdown
file extensions

## Why
The Files tab only showed raw source, which makes Markdown files harder
to read quickly.

This change adds a lightweight preview/source switch without introducing
a larger viewer registry.

## What Changed
-
`packages/ui/src/components/instance/shell/right-panel/tabs/FilesTab.tsx`
  - added `Preview Markdown` / `Show source` toggle for markdown files
  - added a word-wrap toggle for the Monaco source viewer
  - restricted preview mode to plain Markdown extensions
  - escaped raw HTML in markdown preview mode
- `packages/ui/src/components/file-viewer/monaco-file-viewer.tsx`
  - added configurable word-wrap support
- `packages/ui/src/components/instance/shell/right-panel/RightPanel.tsx`
- moved file-viewer word-wrap state up so it persists across tab
switches
- `packages/ui/src/components/instance/shell/storage.ts`
  - added storage key for file-viewer word wrap
- `packages/ui/src/lib/i18n/messages/*/instance.ts`
  - added strings for preview/source and word-wrap controls

## Validation
- `npm run build --workspace @codenomad/ui`
2026-04-26 21:24:19 +01:00

226 lines
19 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const instanceMessages = {
"instanceTabs.new.title": "Новый экземпляр (Cmd/Ctrl+N)",
"instanceTabs.new.ariaLabel": "Новый экземпляр",
"instanceTabs.remote.title": "Удаленное подключение",
"instanceTabs.remote.ariaLabel": "Удаленное подключение",
"instanceInfo.title": "Информация об экземпляре",
"instanceInfo.labels.folder": "Папка",
"instanceInfo.labels.project": "Проект",
"instanceInfo.labels.versionControl": "Система контроля версий",
"instanceInfo.labels.opencodeVersion": "Версия OpenCode",
"instanceInfo.labels.binaryPath": "Путь к бинарнику",
"instanceInfo.labels.environmentVariables": "Переменные окружения ({count})",
"instanceInfo.loading": "Загрузка…",
"instanceInfo.server.title": "Сервер",
"instanceInfo.server.port": "Порт:",
"instanceInfo.server.pid": "PID:",
"instanceInfo.server.status": "Статус:",
"instanceTab.status.permission": "Ожидание разрешения",
"instanceTab.status.compacting": "Компактация",
"instanceTab.status.working": "Работает",
"instanceTab.status.idle": "Простой",
"instanceTab.status.ariaLabel": "Статус экземпляра: {status}",
"instanceTab.actions.close.ariaLabel": "Закрыть экземпляр",
"instanceShell.leftPanel.sessionsTitle": "Сессии",
"instanceShell.leftPanel.instanceInfo": "Информация об экземпляре",
"instanceShell.leftDrawer.pin": "Закрепить левую панель",
"instanceShell.leftDrawer.unpin": "Открепить левую панель",
"instanceShell.leftDrawer.toggle.pinned": "Левая панель закреплена",
"instanceShell.leftDrawer.toggle.open": "Открыть левую панель",
"instanceShell.leftDrawer.toggle.close": "Закрыть левую панель",
"instanceShell.rightDrawer.pin": "Закрепить правую панель",
"instanceShell.rightDrawer.unpin": "Открепить правую панель",
"instanceShell.rightDrawer.toggle.pinned": "Правая панель закреплена",
"instanceShell.rightDrawer.toggle.open": "Открыть правую панель",
"instanceShell.rightDrawer.toggle.close": "Закрыть правую панель",
"instanceShell.fullscreen.enter": "Полный экран",
"instanceShell.fullscreen.exit": "Выйти из полного экрана",
"instanceShell.metrics.usedLabel": "Использовано",
"instanceShell.metrics.availableLabel": "Доступно",
"instanceShell.commandPalette.openAriaLabel": "Открыть палитру команд",
"instanceShell.commandPalette.button": "Палитра команд",
"instanceShell.connection.ariaLabel": "Соединение {status}",
"instanceShell.connection.connected": "Подключено",
"instanceShell.connection.connecting": "Подключение…",
"instanceShell.connection.disconnected": "Отключено",
"instanceShell.connection.unknown": "Неизвестно",
"instanceWelcome.shortcuts.newSession": "Новая сессия",
"instanceWelcome.empty.title": "Нет предыдущих сессий",
"instanceWelcome.empty.description": "Создайте новую сессию ниже, чтобы начать",
"instanceWelcome.loading.title": "Загрузка сессий",
"instanceWelcome.loading.description": "Получаем ваши предыдущие сессии…",
"instanceWelcome.resume.title": "Продолжить сессию",
"instanceWelcome.resume.subtitle.one": "{count} сессия доступна",
"instanceWelcome.resume.subtitle.other": "{count} сессий доступно",
"instanceWelcome.session.untitled": "Сессия без названия",
"instanceWelcome.new.title": "Начать новую сессию",
"instanceWelcome.new.subtitle": "Мы автоматически используем последнего агента/модель",
"instanceWelcome.new.createButton": "Создать сессию",
"instanceWelcome.overlay.close": "Закрыть",
"instanceWelcome.actions.viewInstanceInfo": "Показать информацию об экземпляре",
"instanceWelcome.actions.renameTitle": "Переименовать сессию",
"instanceWelcome.actions.deleteTitle": "Удалить сессию",
"instanceWelcome.hints.navigate": "Навигация",
"instanceWelcome.hints.jump": "Перейти",
"instanceWelcome.hints.firstLast": "Первый/последний",
"instanceWelcome.hints.resume": "Продолжить",
"instanceWelcome.hints.delete": "Удалить",
"instanceWelcome.toasts.renameError": "Не удалось переименовать сессию",
"instanceDisconnected.title": "Экземпляр отключен",
"instanceDisconnected.folderFallback": "это рабочее пространство",
"instanceDisconnected.reasonFallback": "Сервер перестал отвечать",
"instanceDisconnected.description": "{folder} больше недоступно. Закройте вкладку, чтобы продолжить работу.",
"instanceDisconnected.details.title": "Подробности",
"instanceDisconnected.details.folderLabel": "Папка:",
"instanceDisconnected.actions.closeInstance": "Закрыть экземпляр",
"instanceShell.empty.title": "Сессия не выбрана",
"instanceShell.empty.description": "Выберите сессию, чтобы просмотреть сообщения",
"instanceShell.rightPanel.title": "Панель состояния",
"instanceShell.rightPanel.tabs.changes": "Изменения",
"instanceShell.rightPanel.tabs.gitChanges": "Изменения Git",
"instanceShell.rightPanel.tabs.files": "Файлы",
"instanceShell.rightPanel.tabs.status": "Статус",
"instanceShell.rightPanel.tabs.ariaLabel": "Вкладки правой панели",
"instanceShell.rightPanel.actions.refresh": "Обновить",
"instanceShell.rightPanel.actions.save": "Сохранить (Ctrl+S)",
"instanceShell.rightPanel.actions.saveConfirm.message": "Сохранить изменения в \"{path}\" перед переключением?",
"instanceShell.rightPanel.actions.saveConfirm.confirmLabel": "Сохранить",
"instanceShell.rightPanel.actions.saveConfirm.cancelLabel": "Отменить изменения",
"instanceShell.rightPanel.actions.conflict.message": "Файл был изменён агентом. Перезаписать изменения агента?",
"instanceShell.rightPanel.actions.conflict.confirmLabel": "Перезаписать",
"instanceShell.rightPanel.actions.conflict.cancelLabel": "Отмена",
"instanceShell.rightPanel.actions.refreshDirty.message": "Файл имеет несохранённые изменения. Обновление отменит ваши правки. Продолжить?",
"instanceShell.rightPanel.actions.refreshDirty.confirmLabel": "Обновить",
"instanceShell.rightPanel.actions.refreshDirty.cancelLabel": "Отмена",
"instanceShell.rightPanel.toast.saveSuccess": "Файл успешно сохранён",
"instanceShell.rightPanel.toast.saveError": "Не удалось сохранить файл",
"instanceShell.rightPanel.sections.yoloMode": "Режим Yolo",
"instanceShell.rightPanel.sections.yoloMode.tooltip": "Автоматически одобряет запросы разрешений для текущей сессии. Включайте только если доверяете запускаемым инструментам.",
"instanceShell.rightPanel.sections.sessionChanges": "Изменения сессии",
"instanceShell.rightPanel.sections.sessionChanges.tooltip": "Файлы, измененные в текущей сессии. Показывает добавления и удаления для каждого файла.",
"instanceShell.rightPanel.sections.plan": "План",
"instanceShell.rightPanel.sections.plan.tooltip": "Дорожная карта агента для этой сессии. Отслеживает задачи и их статус выполнения.",
"instanceShell.rightPanel.sections.backgroundProcesses": "Фоновые оболочки",
"instanceShell.rightPanel.sections.backgroundProcesses.tooltip": "Долгоработающие процессы, запущенные агентом. Вы можете следить за их выводом, останавливать или завершать их.",
"instanceShell.rightPanel.sections.mcp": "MCP-серверы",
"instanceShell.rightPanel.sections.mcp.tooltip": "Серверы протокола Model Context Protocol, расширяющие возможности агента внешними инструментами.",
"instanceShell.rightPanel.sections.lsp": "LSP-серверы",
"instanceShell.rightPanel.sections.lsp.tooltip": "Серверы протокола Language Server Protocol, обеспечивающие интеллектуальную поддержку кода и диагностику.",
"instanceShell.rightPanel.sections.plugins": "Плагины",
"instanceShell.rightPanel.sections.plugins.tooltip": "Плагины, настраивающие поведение интерфейса и сервера, добавляющие функции поверх MCP и LSP.",
"instanceShell.sessionChanges.noSessionSelected": "Выберите сессию, чтобы просмотреть изменения.",
"instanceShell.sessionChanges.loading": "Загрузка изменений...",
"instanceShell.sessionChanges.empty": "Пока нет изменений.",
"instanceShell.sessionChanges.filesChanged": "Изменено файлов: {count}",
"instanceShell.sessionChanges.actions.show": "Показать изменения",
"instanceShell.gitChanges.loading": "Загрузка изменений Git...",
"instanceShell.gitChanges.empty": "Изменений Git пока нет.",
"instanceShell.gitChanges.deleted": "Удалено",
"instanceShell.gitChanges.binaryViewer": "Невозможно показать бинарный файл",
"instanceShell.gitChanges.sections.staged": "Подготовленные изменения",
"instanceShell.gitChanges.sections.unstaged": "Изменения",
"instanceShell.gitChanges.actions.insertContext": "Добавить в промпт",
"instanceShell.gitChanges.actions.stage": "Подготовить файл",
"instanceShell.gitChanges.actions.unstage": "Убрать из staging",
"instanceShell.gitChanges.commit.placeholder": "Введите сообщение коммита",
"instanceShell.gitChanges.commit.submit": "Commit",
"instanceShell.gitChanges.commit.submitting": "Создание commit...",
"instanceShell.gitChanges.commit.success": "Commit успешно создан",
"instanceShell.gitChanges.commit.error": "Не удалось создать commit",
"instanceShell.filesShell.fileListTitle": "Список файлов",
"instanceShell.filesShell.mobileSelectorLabel": "Выбрать файл",
"instanceShell.filesShell.mobileSelectorEmpty": "Выберите файл",
"instanceShell.filesShell.viewerTitle": "Просмотр изменений",
"instanceShell.filesShell.viewerPlaceholder": "Подробный рендер изменений будет добавлен на следующем этапе.",
"instanceShell.filesShell.viewerEmpty": "Файл не выбран.",
"instanceShell.filesShell.listEmpty": "В этой папке нет файлов.",
"instanceShell.filesShell.search.placeholder": "Фильтровать файлы в этой папке",
"instanceShell.filesShell.search.ariaLabel": "Фильтровать файлы в этой папке",
"instanceShell.filesShell.search.empty": "Совпадающих файлов нет.",
"instanceShell.filesShell.actions.copyPath": "Скопировать путь",
"instanceShell.filesShell.toast.copyPathSuccess": "Путь скопирован",
"instanceShell.filesShell.toast.copyPathError": "Не удалось скопировать путь",
"instanceShell.filesShell.previewMarkdown": "Предпросмотр Markdown",
"instanceShell.filesShell.showSource": "Показать исходник",
"instanceShell.filesShell.enableWordWrap": "Включить перенос строк",
"instanceShell.filesShell.disableWordWrap": "Отключить перенос строк",
"instanceShell.plan.noSessionSelected": "Выберите сессию, чтобы просмотреть план.",
"instanceShell.plan.empty": "Пока ничего не запланировано.",
"instanceShell.yoloMode.noSessionSelected": "Выберите сессию, чтобы настроить режим Yolo.",
"instanceShell.yoloMode.title": "Режим Yolo",
"instanceShell.yoloMode.description": "Автоматически одобряет запросы разрешений для этой сессии. По умолчанию выключен.",
"instanceShell.yoloMode.badge": "Yolo",
"instanceShell.yoloMode.badgeAriaLabel": "Режим Yolo включен",
"instanceShell.backgroundProcesses.empty": "Нет фоновых процессов.",
"instanceShell.backgroundProcesses.status": "Статус: {status}",
"instanceShell.backgroundProcesses.output": "Вывод: {sizeKb}KB",
"instanceShell.backgroundProcesses.notify.enabled": "Уведомление о завершении включено",
"instanceShell.backgroundProcesses.notify.disabled": "Уведомление о завершении выключено",
"instanceShell.backgroundProcesses.actions.output": "Вывод",
"instanceShell.backgroundProcesses.actions.stop": "Остановить",
"instanceShell.backgroundProcesses.actions.terminate": "Завершить",
"instanceShell.worktree.delete.error.title": "Удаление не удалось",
"instanceShell.worktree.delete.error.fallback": "Не удалось удалить worktree",
"instanceShell.worktree.delete.error.causeLabel": "Вероятная причина:",
"instanceShell.worktree.delete.error.nextStepLabel": "Рекомендуемый следующий шаг:",
"instanceShell.worktree.delete.error.summary.localChanges": "Git отказался удалять этот worktree, потому что в нем есть измененные или неотслеживаемые файлы.",
"instanceShell.worktree.delete.error.summary.inUse": "CodeNomad не смог удалить этот worktree, потому что что-то все еще использует файлы в каталоге.",
"instanceShell.worktree.delete.error.summary.notFound": "CodeNomad не смог удалить этот worktree, потому что каталог или запись worktree не найдены.",
"instanceShell.worktree.delete.error.summary.permissionDenied": "CodeNomad не смог удалить этот worktree, потому что доступ к каталогу был запрещен.",
"instanceShell.worktree.delete.error.summary.unknown": "CodeNomad не смог удалить этот worktree.",
"instanceShell.worktree.delete.error.cause.localChanges": "Локальные изменения",
"instanceShell.worktree.delete.error.cause.inUse": "Другой процесс использует этот worktree",
"instanceShell.worktree.delete.error.cause.notFound": "Каталог или запись worktree отсутствуют",
"instanceShell.worktree.delete.error.cause.permissionDenied": "Недостаточно прав файловой системы",
"instanceShell.worktree.delete.error.cause.unknown": "Бэкенд вернул неклассифицированную ошибку удаления",
"instanceShell.worktree.delete.error.nextStep.localChanges": "Включите принудительное удаление, если хотите отбросить локальные изменения, либо очистите worktree и попробуйте снова.",
"instanceShell.worktree.delete.error.nextStep.inUse": "Закройте терминалы, редакторы, watcher-процессы или фоновые процессы, использующие этот worktree, и попробуйте снова.",
"instanceShell.worktree.delete.error.nextStep.notFound": "Обновите список worktree и попробуйте снова. Если ошибка сохранится, проверьте путь worktree на диске.",
"instanceShell.worktree.delete.error.nextStep.permissionDenied": "Проверьте права файловой системы и закройте приложения, которые могут удерживать этот каталог, затем попробуйте снова.",
"instanceShell.worktree.delete.error.nextStep.unknown": "Посмотрите необработанную ошибку ниже, затем попробуйте снова после устранения указанной проблемы.",
"instanceShell.worktree.delete.error.copyRaw": "Копировать ошибку",
"instanceShell.worktree.delete.error.copySanitized": "Копировать обезличенную",
"instanceShell.worktree.delete.error.copySuccess": "Ошибка удаления скопирована",
"instanceShell.worktree.delete.error.copySanitizedSuccess": "Обезличенная ошибка удаления скопирована",
"instanceShell.worktree.delete.error.copyFailure": "Не удалось скопировать ошибку удаления",
"versionPill.appWithVersion": "Приложение {version}",
"versionPill.ui": "UI",
"versionPill.uiWithVersion": "UI {version}",
"versionPill.source": " ({source})",
"opencodeBinarySelector.title": "Бинарник OpenCode",
"opencodeBinarySelector.subtitle": "Выберите, какой исполняемый файл OpenCode запускать",
"opencodeBinarySelector.customPath.placeholder": "Введите путь к бинарнику opencode…",
"opencodeBinarySelector.actions.add": "Добавить",
"opencodeBinarySelector.actions.browse": "Выбрать бинарник…",
"opencodeBinarySelector.actions.removeTitle": "Удалить бинарник",
"opencodeBinarySelector.badge.systemPath": "Использовать бинарник из системного PATH",
"opencodeBinarySelector.status.checkingVersions": "Проверка версий…",
"opencodeBinarySelector.status.checking": "Проверка…",
"opencodeBinarySelector.dialog.title": "Выберите бинарник OpenCode",
"opencodeBinarySelector.dialog.description": "Просматривайте файлы, доступные через CLI-сервер.",
"opencodeBinarySelector.validation.invalidBinary": "Неверный бинарник OpenCode",
"opencodeBinarySelector.validation.alreadyValidating": "Проверка уже выполняется",
"opencodeBinarySelector.display.systemPath": "{name} (system PATH)",
"opencodeBinarySelector.versionLabel": "v{version}",
} as const