feat(ui): add locales and split catalogs

Adds Spanish, French, Russian, Japanese, and Simplified Chinese catalogs and wires supported locales into the i18n layer.
This commit is contained in:
Shantur Rathore
2026-01-26 12:56:26 +00:00
parent 5b1e21345f
commit feccbd13bd
89 changed files with 4531 additions and 30 deletions

View File

@@ -0,0 +1,6 @@
export const advancedSettingsMessages = {
"advancedSettings.title": "Расширенные настройки",
"advancedSettings.environmentVariables.title": "Переменные окружения",
"advancedSettings.environmentVariables.subtitle": "Применяются при запуске нового экземпляра OpenCode",
"advancedSettings.actions.close": "Закрыть",
} as const

View File

@@ -0,0 +1,29 @@
export const appMessages = {
"app.launchError.title": "Не удалось запустить OpenCode",
"app.launchError.description": "Не удалось запустить выбранный бинарник OpenCode. Просмотрите вывод ошибки ниже или выберите другой бинарник в расширенных настройках.",
"app.launchError.binaryPathLabel": "Путь к бинарнику",
"app.launchError.errorOutputLabel": "Вывод ошибки",
"app.launchError.openAdvancedSettings": "Открыть расширенные настройки",
"app.launchError.close": "Закрыть",
"app.launchError.closeTitle": "Закрыть (Esc)",
"app.launchError.fallbackMessage": "Не удалось запустить рабочее пространство",
"app.stopInstance.confirmMessage": "Остановить экземпляр OpenCode? Это остановит сервер.",
"app.stopInstance.title": "Остановить экземпляр",
"app.stopInstance.confirmLabel": "Остановить",
"app.stopInstance.cancelLabel": "Оставить запущенным",
"emptyState.logoAlt": "Логотип CodeNomad",
"emptyState.brandTitle": "CodeNomad",
"emptyState.tagline": "Выберите папку, чтобы начать писать код с AI",
"emptyState.actions.selectFolder": "Выбрать папку",
"emptyState.actions.selecting": "Выбор…",
"emptyState.keyboardShortcut": "Горячая клавиша: {shortcut}",
"emptyState.examples": "Примеры: {example}",
"emptyState.multipleInstances": "Можно иметь несколько экземпляров одной и той же папки",
"releases.upgradeRequired.title": "Требуется обновление",
"releases.upgradeRequired.message.withVersion": "Обновите CodeNomad до версии {version}, чтобы использовать последний UI.",
"releases.upgradeRequired.message.noVersion": "Обновите CodeNomad, чтобы использовать последний UI.",
"releases.upgradeRequired.action.getUpdate": "Получить обновление",
} as const

View File

@@ -0,0 +1,160 @@
export const commandMessages = {
"commandPalette.title": "Палитра команд",
"commandPalette.description": "Поиск и запуск команд",
"commandPalette.searchPlaceholder": "Введите команду или начните поиск…",
"commandPalette.empty": "Команды по запросу \"{query}\" не найдены",
"commandPalette.category.customCommands": "Пользовательские команды",
"commandPalette.category.instance": "Экземпляр",
"commandPalette.category.session": "Сессия",
"commandPalette.category.agentModel": "Агент и модель",
"commandPalette.category.inputFocus": "Ввод и фокус",
"commandPalette.category.system": "Система",
"commandPalette.category.other": "Другое",
"commands.newInstance.label": "Новый экземпляр",
"commands.newInstance.description": "Открыть выбор папки для создания нового экземпляра",
"commands.newInstance.keywords": "папка, проект, рабочее пространство",
"commands.closeInstance.label": "Закрыть экземпляр",
"commands.closeInstance.description": "Остановить сервер текущего экземпляра",
"commands.closeInstance.keywords": "остановить, выйти, закрыть",
"commands.nextInstance.label": "Следующий экземпляр",
"commands.nextInstance.description": "Переключиться на следующую вкладку экземпляра",
"commands.nextInstance.keywords": "переключить, навигация",
"commands.previousInstance.label": "Предыдущий экземпляр",
"commands.previousInstance.description": "Переключиться на предыдущую вкладку экземпляра",
"commands.previousInstance.keywords": "переключить, навигация",
"commands.newSession.label": "Новая сессия",
"commands.newSession.description": "Создать новую родительскую сессию",
"commands.newSession.keywords": "создать, начать",
"commands.closeSession.label": "Закрыть сессию",
"commands.closeSession.description": "Закрыть текущую родительскую сессию",
"commands.closeSession.keywords": "закрыть, остановить",
"commands.scrubSessions.label": "Очистить сессии",
"commands.scrubSessions.description": "Удалить пустые сессии, завершенные сессии субагентов и лишние форкнутые сессии.",
"commands.scrubSessions.keywords": "очистка, пустые, сессии, удалить, убрать",
"commands.instanceInfo.label": "Информация об экземпляре",
"commands.instanceInfo.description": "Открыть обзор экземпляра с логами и статусом",
"commands.instanceInfo.keywords": "информация, логи, консоль, вывод",
"commands.nextSession.label": "Следующая сессия",
"commands.nextSession.description": "Переключиться на следующую вкладку сессии",
"commands.nextSession.keywords": "переключить, навигация",
"commands.previousSession.label": "Предыдущая сессия",
"commands.previousSession.description": "Переключиться на предыдущую вкладку сессии",
"commands.previousSession.keywords": "переключить, навигация",
"commands.compactSession.label": "Компактировать сессию",
"commands.compactSession.description": "Суммировать и компактировать текущую сессию",
"commands.compactSession.keywords": "суммировать, сжать",
"commands.compactSession.errorFallback": "Не удалось компактировать сессию",
"commands.compactSession.alert.title": "Компактация не удалась",
"commands.compactSession.alert.message": "Компактация не удалась: {message}",
"commands.undoLastMessage.label": "Отменить последнее сообщение",
"commands.undoLastMessage.description": "Откатить последнее сообщение",
"commands.undoLastMessage.keywords": "откат, отмена",
"commands.undoLastMessage.none.title": "Нечего отменять",
"commands.undoLastMessage.none.message": "Нечего отменять",
"commands.undoLastMessage.failed.title": "Не удалось отменить",
"commands.undoLastMessage.failed.message": "Не удалось откатить сообщение",
"commands.openModelSelector.label": "Открыть выбор модели",
"commands.openModelSelector.description": "Выбрать другую модель",
"commands.openModelSelector.keywords": "модель, llm, ai",
"commands.selectModelVariant.label": "Выбрать вариант модели",
"commands.selectModelVariant.description": "Выбрать интенсивность размышлений для текущей модели",
"commands.selectModelVariant.keywords": "вариант, thinking, reasoning, интенсивность",
"commands.openAgentSelector.label": "Открыть выбор агента",
"commands.openAgentSelector.description": "Выбрать другого агента",
"commands.openAgentSelector.keywords": "агент, режим",
"commands.clearInput.label": "Очистить ввод",
"commands.clearInput.description": "Очистить поле prompt",
"commands.clearInput.keywords": "очистить, сброс",
"commands.thinkingBlocks.label.show": "Показать блоки размышлений",
"commands.thinkingBlocks.label.hide": "Скрыть блоки размышлений",
"commands.thinkingBlocks.description": "Показать/скрыть процесс рассуждений AI",
"commands.thinkingBlocks.keywords": "thinking, reasoning, переключить, показать, скрыть",
"commands.timelineToolCalls.label.show": "Показать Tool Calls в таймлайне",
"commands.timelineToolCalls.label.hide": "Скрыть Tool Calls в таймлайне",
"commands.timelineToolCalls.description": "Переключить отображение вызовов инструментов в таймлайне сообщений",
"commands.timelineToolCalls.keywords": "таймлайн, tool, переключить",
"commands.common.expanded": "Развернуто",
"commands.common.collapsed": "Свернуто",
"commands.common.visible": "Видимо",
"commands.common.hidden": "Скрыто",
"commands.common.enabled": "Включено",
"commands.common.disabled": "Выключено",
"commands.thinkingBlocksDefault.label": "Блоки размышлений по умолчанию · {state}",
"commands.thinkingBlocksDefault.description": "Переключить, разворачивать ли блоки размышлений по умолчанию",
"commands.thinkingBlocksDefault.keywords": "thinking, reasoning, развернуть, свернуть, по умолчанию",
"commands.diffViewSplit.label": "Раздельный просмотр diff",
"commands.diffViewSplit.description": "Показывать diff вызовов инструментов рядом",
"commands.diffViewSplit.keywords": "diff, split, просмотр",
"commands.diffViewUnified.label": "Единый просмотр diff",
"commands.diffViewUnified.description": "Показывать diff вызовов инструментов в одну колонку",
"commands.diffViewUnified.keywords": "diff, unified, просмотр",
"commands.toolOutputsDefault.label": "Выводы инструментов по умолчанию · {state}",
"commands.toolOutputsDefault.description": "Переключить, разворачивать ли выводы инструментов по умолчанию",
"commands.toolOutputsDefault.keywords": "tool, output, развернуть, свернуть",
"commands.diagnosticsDefault.label": "Диагностика по умолчанию · {state}",
"commands.diagnosticsDefault.description": "Переключить, разворачивать ли вывод диагностики по умолчанию",
"commands.diagnosticsDefault.keywords": "diagnostics, развернуть, свернуть",
"commands.tokenUsageDisplay.label": "Отображение token-статистики · {state}",
"commands.tokenUsageDisplay.description": "Показать или скрыть статистику token и стоимости для сообщений ассистента",
"commands.tokenUsageDisplay.keywords": "token, usage, cost, статистика",
"commands.autoCleanupBlankSessions.label": "Авто-очистка пустых сессий · {state}",
"commands.autoCleanupBlankSessions.description": "Автоматически очищать пустые сессии при создании новых",
"commands.autoCleanupBlankSessions.keywords": "auto, cleanup, пустые, сессии, переключить",
"commands.showHelp.label": "Показать справку",
"commands.showHelp.description": "Показать горячие клавиши и справку",
"commands.showHelp.keywords": "горячие клавиши, справка",
"commands.custom.argumentsPrompt.message": "Аргументы для /{name}",
"commands.custom.argumentsPrompt.title": "Пользовательская команда",
"commands.custom.argumentsPrompt.inputLabel": "Аргументы",
"commands.custom.argumentsPrompt.inputPlaceholder": "например: foo bar",
"commands.custom.argumentsPrompt.confirmLabel": "Запустить",
"commands.custom.argumentsPrompt.cancelLabel": "Отмена",
"commands.custom.argumentsPrompt.openFailed.message": "Не удалось открыть prompt аргументов.",
"commands.custom.argumentsPrompt.openFailed.title": "Аргументы команды",
"commands.custom.entries.descriptionFallback": "Пользовательская команда",
"commands.custom.sessionRequired.message": "Выберите сессию перед запуском пользовательской команды.",
"commands.custom.sessionRequired.title": "Требуется сессия",
"commands.custom.runFailed.message": "Не удалось запустить пользовательскую команду. Проверьте консоль для подробностей.",
"commands.custom.runFailed.title": "Команда не выполнена",
"unifiedPicker.loading.searching": "Поиск…",
"unifiedPicker.loading.loadingWorkspace": "Загрузка рабочего пространства…",
"unifiedPicker.title.command": "Выберите команду",
"unifiedPicker.title.mention": "Выберите агента или файл",
"unifiedPicker.empty": "Ничего не найдено",
"unifiedPicker.sections.commands": "КОМАНДЫ",
"unifiedPicker.sections.agents": "АГЕНТЫ",
"unifiedPicker.sections.files": "ФАЙЛЫ",
"unifiedPicker.badge.subagent": "субагент",
"unifiedPicker.footer.navigate": "навигация",
"unifiedPicker.footer.select": "выбрать",
"unifiedPicker.footer.close": "закрыть",
} as const

View File

@@ -0,0 +1,16 @@
export const dialogMessages = {
"alertDialog.fallbackTitle.info": "Внимание",
"alertDialog.fallbackTitle.warning": "Пожалуйста, проверьте",
"alertDialog.fallbackTitle.error": "Что-то пошло не так",
"alertDialog.actions.confirm": "Подтвердить",
"alertDialog.actions.run": "Запустить",
"alertDialog.actions.ok": "ОК",
"alertDialog.actions.cancel": "Отмена",
"alertDialog.prompt.inputLabel": "Ввод",
"backgroundProcessOutputDialog.title": "Фоновый вывод",
"backgroundProcessOutputDialog.actions.close": "Закрыть",
"backgroundProcessOutputDialog.loading": "Загрузка вывода…",
"backgroundProcessOutputDialog.truncatedNotice": "Вывод обрезан для отображения.",
"backgroundProcessOutputDialog.loadErrorFallback": "Не удалось загрузить вывод.",
} as const

View File

@@ -0,0 +1,43 @@
export const filesystemMessages = {
"directoryBrowser.defaultDescription": "Просматривайте папки в пределах настроенного корня рабочего пространства.",
"directoryBrowser.close": "Закрыть",
"directoryBrowser.currentFolder": "Текущая папка",
"directoryBrowser.selectCurrent": "Выбрать текущую",
"directoryBrowser.newFolder": "Новая папка",
"directoryBrowser.creating": "Создание…",
"directoryBrowser.loadingFolders": "Загрузка папок…",
"directoryBrowser.noFolders": "Папки недоступны.",
"directoryBrowser.upOneLevel": "На уровень выше",
"directoryBrowser.select": "Выбрать",
"directoryBrowser.load.errorFallback": "Не удалось загрузить файловую систему",
"directoryBrowser.createFolder.promptMessage": "Создайте новую папку в текущем каталоге.",
"directoryBrowser.createFolder.title": "Новая папка",
"directoryBrowser.createFolder.inputLabel": "Имя папки",
"directoryBrowser.createFolder.inputPlaceholder": "например my-new-project",
"directoryBrowser.createFolder.confirmLabel": "Создать",
"directoryBrowser.createFolder.cancelLabel": "Отмена",
"directoryBrowser.createFolder.invalidNameMessage": "Введите одно имя папки.",
"directoryBrowser.createFolder.invalidNameDetail": "Имя папки не может содержать слэши, '..' или '~'.",
"directoryBrowser.createFolder.errorFallback": "Не удалось создать папку",
"filesystemBrowser.descriptionFallback": "Найдите путь в пределах настроенного корня рабочего пространства.",
"filesystemBrowser.rootLabel": "Корень: {root}",
"filesystemBrowser.actions.close": "Закрыть",
"filesystemBrowser.actions.retry": "Повторить",
"filesystemBrowser.actions.select": "Выбрать",
"filesystemBrowser.filterLabel": "Фильтр",
"filesystemBrowser.search.placeholder.directories": "Поиск папок",
"filesystemBrowser.search.placeholder.files": "Поиск файлов",
"filesystemBrowser.currentFolder.label": "Текущая папка",
"filesystemBrowser.currentFolder.selectCurrent": "Выбрать текущую",
"filesystemBrowser.loading.filesystem": "файловую систему",
"filesystemBrowser.loading.workspaceRoot": "корень рабочего пространства",
"filesystemBrowser.loading.loadingWithPath": "Загрузка {path}…",
"filesystemBrowser.empty.noEntries": "Ничего не найдено.",
"filesystemBrowser.navigation.upOneLevel": "На уровень выше",
"filesystemBrowser.hints.navigate": "Навигация",
"filesystemBrowser.hints.select": "Выбрать",
"filesystemBrowser.hints.close": "Закрыть",
"filesystemBrowser.errors.loadFilesystemFallback": "Не удалось загрузить файловую систему",
"filesystemBrowser.errors.openDirectoryFallback": "Не удалось открыть каталог",
} as const

View File

@@ -0,0 +1,34 @@
export const folderSelectionMessages = {
"folderSelection.logoAlt": "Логотип CodeNomad",
"folderSelection.tagline": "Выберите папку, чтобы начать писать код с AI",
"folderSelection.links.github": "GitHub CodeNomad",
"folderSelection.links.githubStars": "Звезды GitHub CodeNomad",
"folderSelection.links.discord": "Discord CodeNomad",
"folderSelection.empty.title": "Нет недавних папок",
"folderSelection.empty.description": "Выберите папку, чтобы начать",
"folderSelection.recent.title": "Недавние папки",
"folderSelection.recent.subtitle.one": "Доступна {count} папка",
"folderSelection.recent.subtitle.other": "Доступно {count} папок",
"folderSelection.recent.remove": "Убрать из недавних",
"folderSelection.browse.title": "Выбрать папку",
"folderSelection.browse.subtitle": "Выберите любую папку на компьютере",
"folderSelection.browse.button": "Обзор папок",
"folderSelection.browse.buttonOpening": "Открытие…",
"folderSelection.advancedSettings": "Расширенные настройки",
"folderSelection.hints.navigate": "Навигация",
"folderSelection.hints.select": "Выбрать",
"folderSelection.hints.remove": "Убрать",
"folderSelection.hints.browse": "Обзор",
"folderSelection.loading.title": "Запуск экземпляра…",
"folderSelection.loading.subtitle": "Подождите, пока мы подготовим рабочее пространство.",
"folderSelection.dialog.title": "Выберите рабочее пространство",
"folderSelection.dialog.description": "Выберите рабочее пространство, чтобы начать писать код.",
} as const

View File

@@ -0,0 +1,36 @@
import { advancedSettingsMessages } from "./advancedSettings"
import { appMessages } from "./app"
import { commandMessages } from "./commands"
import { dialogMessages } from "./dialogs"
import { filesystemMessages } from "./filesystem"
import { folderSelectionMessages } from "./folderSelection"
import { instanceMessages } from "./instance"
import { loadingScreenMessages } from "./loadingScreen"
import { logMessages } from "./logs"
import { markdownMessages } from "./markdown"
import { messagingMessages } from "./messaging"
import { remoteAccessMessages } from "./remoteAccess"
import { sessionMessages } from "./session"
import { settingsMessages } from "./settings"
import { timeMessages } from "./time"
import { toolCallMessages } from "./toolCall"
import { mergeMessageParts } from "../merge"
export const ruMessages = mergeMessageParts(
folderSelectionMessages,
advancedSettingsMessages,
loadingScreenMessages,
timeMessages,
appMessages,
dialogMessages,
filesystemMessages,
instanceMessages,
logMessages,
sessionMessages,
messagingMessages,
toolCallMessages,
markdownMessages,
settingsMessages,
remoteAccessMessages,
commandMessages,
)

View File

@@ -0,0 +1,125 @@
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.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.sections.plan": "План",
"instanceShell.rightPanel.sections.backgroundProcesses": "Фоновые Shell",
"instanceShell.rightPanel.sections.mcp": "MCP-серверы",
"instanceShell.rightPanel.sections.lsp": "LSP-серверы",
"instanceShell.rightPanel.sections.plugins": "Плагины",
"instanceShell.plan.noSessionSelected": "Выберите сессию, чтобы просмотреть план.",
"instanceShell.plan.empty": "Пока ничего не запланировано.",
"instanceShell.backgroundProcesses.empty": "Нет фоновых процессов.",
"instanceShell.backgroundProcesses.status": "Статус: {status}",
"instanceShell.backgroundProcesses.output": "Вывод: {sizeKb}KB",
"instanceShell.backgroundProcesses.actions.output": "Вывод",
"instanceShell.backgroundProcesses.actions.stop": "Остановить",
"instanceShell.backgroundProcesses.actions.terminate": "Завершить",
"versionPill.appWithVersion": "Приложение {version}",
"versionPill.ui": "UI",
"versionPill.uiWithVersion": "UI {version}",
"versionPill.source": " ({source})",
"opencodeBinarySelector.title": "OpenCode Binary",
"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

View File

@@ -0,0 +1,17 @@
export const loadingScreenMessages = {
"loadingScreen.logoAlt": "Логотип CodeNomad",
"loadingScreen.status.issue": "Возникла проблема",
"loadingScreen.actions.showAnother": "Показать другое",
"loadingScreen.errors.missingRoot": "Корневой элемент загрузки не найден",
"loadingScreen.phrases.neurons": "Разогреваем нейроны AI…",
"loadingScreen.phrases.daydreaming": "Убеждаем AI перестать мечтать…",
"loadingScreen.phrases.goggles": "Полируем кодовые очки AI…",
"loadingScreen.phrases.reorganizingFiles": "Просим AI перестать реорганизовывать ваши файлы…",
"loadingScreen.phrases.coffee": "Подкармливаем AI дополнительным кофе…",
"loadingScreen.phrases.nodeModules": "Учимся не удалять node_modules (снова)…",
"loadingScreen.phrases.actNatural": "Просим AI вести себя естественно до вашего прихода…",
"loadingScreen.phrases.rewritingHistory": "Просим AI перестать переписывать историю…",
"loadingScreen.phrases.stretch": "Даем AI размяться перед кодинг-спринтом…",
"loadingScreen.phrases.keyboardControl": "Убеждаем AI вернуть вам управление клавиатурой…",
} as const

View File

@@ -0,0 +1,18 @@
export const logMessages = {
"logsView.title": "Логи сервера",
"logsView.actions.show": "Показать логи сервера",
"logsView.actions.hide": "Скрыть логи сервера",
"logsView.envVars.title": "Переменные окружения ({count})",
"logsView.paused.title": "Логи сервера приостановлены",
"logsView.paused.description": "Включите стриминг, чтобы наблюдать за активностью сервера OpenCode.",
"logsView.empty.waiting": "Ожидание вывода сервера…",
"logsView.scrollToBottom": "Прокрутить вниз",
"infoView.logs.title": "Логи сервера",
"infoView.logs.actions.show": "Показать логи сервера",
"infoView.logs.actions.hide": "Скрыть логи сервера",
"infoView.logs.paused.title": "Логи сервера приостановлены",
"infoView.logs.paused.description": "Включите стриминг, чтобы наблюдать за активностью сервера OpenCode.",
"infoView.logs.empty.waiting": "Ожидание вывода сервера…",
"infoView.logs.scrollToBottom": "Прокрутить вниз",
} as const

View File

@@ -0,0 +1,7 @@
export const markdownMessages = {
"markdown.codeBlock.copy.label": "Копировать",
"markdown.codeBlock.copy.copied": "Скопировано!",
"markdown.codeBlock.copy.failed": "Не удалось",
"markdown.copy": "Копировать",
} as const

View File

@@ -0,0 +1,109 @@
export const messagingMessages = {
"messageListHeader.sidebar.openSessionListAriaLabel": "Открыть список сессий",
"messageListHeader.metrics.usedLabel": "Использовано",
"messageListHeader.metrics.availableLabel": "Доступно",
"messageListHeader.commandPalette.ariaLabel": "Открыть палитру команд",
"messageListHeader.commandPalette.button": "Палитра команд",
"messageListHeader.connection.connected": "Подключено",
"messageListHeader.connection.connecting": "Подключение…",
"messageListHeader.connection.disconnected": "Отключено",
"messageSection.empty.logoAlt": "Логотип CodeNomad",
"messageSection.empty.brandTitle": "CodeNomad",
"messageSection.empty.title": "Начните разговор",
"messageSection.empty.description": "Введите сообщение ниже или откройте палитру команд:",
"messageSection.empty.tips.commandPalette": "Палитра команд",
"messageSection.empty.tips.askAboutCodebase": "Спросите о своей кодовой базе",
"messageSection.empty.tips.attachFilesPrefix": "Прикрепляйте файлы через",
"messageSection.loading.messages": "Загрузка сообщений…",
"messageSection.scroll.toFirstAriaLabel": "Прокрутить к первому сообщению",
"messageSection.scroll.toLatestAriaLabel": "Прокрутить к последнему сообщению",
"messageSection.quote.addAsQuote": "Добавить как цитату",
"messageSection.quote.addAsCode": "Добавить как код",
"messageTimeline.ariaLabel": "Таймлайн сообщений",
"messageTimeline.segment.user.label": "Вы",
"messageTimeline.segment.assistant.label": "Асс.",
"messageTimeline.segment.compaction.label": "Компактация",
"messageTimeline.tool.fallbackLabel": "Вызов инструмента",
"messageTimeline.tooltip.userFallback": "Сообщение пользователя",
"messageTimeline.tooltip.assistantFallback": "Ответ ассистента",
"messageTimeline.tooltip.compaction.auto": "Автокомпактация",
"messageTimeline.tooltip.compaction.manual": "Компактация пользователем",
"messageTimeline.text.filePrefix": "[Файл] {filename}",
"messageTimeline.text.attachment": "Вложение",
"messageBlock.tool.header": "Вызов инструмента",
"messageBlock.tool.unknown": "неизвестно",
"messageBlock.tool.goToSession.label": "Перейти к сессии",
"messageBlock.tool.goToSession.title": "Перейти к сессии",
"messageBlock.tool.goToSession.unavailableTitle": "Сессия пока недоступна",
"messageBlock.compaction.ariaLabel": "Компактация сессии",
"messageBlock.compaction.autoLabel": "Сессия автоматически компактирована",
"messageBlock.compaction.manualLabel": "Сессия компактирована вами",
"messageBlock.usage.input": "Ввод",
"messageBlock.usage.output": "Вывод",
"messageBlock.usage.reasoning": "Рассуждения",
"messageBlock.usage.cacheRead": "Чтение кэша",
"messageBlock.usage.cacheWrite": "Запись кэша",
"messageBlock.usage.cost": "Стоимость",
"messageBlock.step.agentLabel": "Агент: {agent}",
"messageBlock.step.modelLabel": "Модель: {model}",
"messageBlock.reasoning.thinkingLabel": "Размышления",
"messageBlock.reasoning.expandAriaLabel": "Развернуть размышления",
"messageBlock.reasoning.collapseAriaLabel": "Свернуть размышления",
"messageBlock.reasoning.indicator.hide": "Скрыть",
"messageBlock.reasoning.indicator.view": "Показать",
"messageBlock.reasoning.detailsAriaLabel": "Детали рассуждений",
"codeBlockInline.actions.copy": "Копировать",
"codeBlockInline.actions.copied": "Скопировано!",
"messageItem.speaker.you": "Вы",
"messageItem.speaker.assistant": "Ассистент",
"messageItem.actions.revert": "Откатить",
"messageItem.actions.revertTitle": "Откатиться к этому сообщению",
"messageItem.actions.fork": "Форк",
"messageItem.actions.forkTitle": "Форкнуть от этого сообщения",
"messageItem.actions.copy": "Копировать",
"messageItem.actions.copyTitle": "Копировать сообщение",
"messageItem.actions.copied": "Скопировано!",
"messageItem.status.queued": "В ОЧЕРЕДИ",
"messageItem.status.generating": "Генерация…",
"messageItem.status.sending": "Отправка…",
"messageItem.status.failedToSend": "Не удалось отправить сообщение",
"messageItem.attachment.defaultName": "вложение",
"messageItem.attachment.downloadAriaLabel": "Скачать {name}",
"messageItem.agentMeta.agentLabel": "Агент: {agent}",
"messageItem.agentMeta.modelLabel": "Модель: {model}",
"messageItem.errors.authenticationFallback": "Ошибка аутентификации",
"messageItem.errors.outputLengthExceeded": "Превышена длина вывода сообщения",
"messageItem.errors.requestAborted": "Запрос был прерван",
"messageItem.errors.unknownFallback": "Произошла неизвестная ошибка",
"attachmentChip.removeAriaLabel": "Удалить вложение",
"expandButton.toggleAriaLabel": "Переключить высоту поля ввода",
"promptInput.placeholder.shell": "Выполнить команду shell (Esc для выхода)…",
"promptInput.placeholder.default": "Введите сообщение, @file, @agent или вставьте изображения и текст…",
"promptInput.hints.shell.exit": "чтобы выйти из режима shell",
"promptInput.hints.shell.enable": "Режим shell",
"promptInput.hints.commands": "Команды",
"promptInput.history.previousAriaLabel": "Предыдущий prompt",
"promptInput.history.nextAriaLabel": "Следующий prompt",
"promptInput.overlay.newLine": "Новая строка",
"promptInput.overlay.send": "Отправить",
"promptInput.overlay.filesAgents": "Файлы/агенты",
"promptInput.overlay.history": "История",
"promptInput.overlay.attachments": "• прикреплено файлов: {count}",
"promptInput.overlay.shellModeActive": "Режим shell активен",
"promptInput.overlay.press": "Нажмите",
"promptInput.overlay.againToAbort": "еще раз, чтобы прервать сессию",
"promptInput.stopSession.ariaLabel": "Остановить сессию",
"promptInput.stopSession.title": "Остановить сессию",
"promptInput.send.ariaLabel": "Отправить сообщение",
"promptInput.send.errorFallback": "Не удалось отправить сообщение",
"promptInput.send.errorTitle": "Не удалось отправить",
} as const

View File

@@ -0,0 +1,51 @@
export const remoteAccessMessages = {
"remoteAccess.eyebrow": "Удаленная передача управления",
"remoteAccess.title": "Подключитесь к CodeNomad удаленно",
"remoteAccess.subtitle": "Используйте адреса ниже, чтобы открыть CodeNomad с другого устройства.",
"remoteAccess.close": "Закрыть удаленный доступ",
"remoteAccess.refresh": "Обновить",
"remoteAccess.sections.listeningMode.label": "Режим прослушивания",
"remoteAccess.sections.listeningMode.help": "Разрешайте или ограничивайте удаленную передачу управления, привязываясь ко всем интерфейсам или только к localhost.",
"remoteAccess.toggle.on": "Вкл",
"remoteAccess.toggle.off": "Выкл",
"remoteAccess.toggle.title": "Разрешить подключения с других IP",
"remoteAccess.toggle.caption.all": "Привязка к 0.0.0.0",
"remoteAccess.toggle.caption.local": "Привязка к 127.0.0.1",
"remoteAccess.toggle.note": "Изменение требует перезапуска и временно остановит все активные экземпляры. Поделитесь адресами ниже после перезапуска сервера.",
"remoteAccess.listeningMode.restartConfirm.message": "Перезапустить, чтобы применить режим прослушивания? Это остановит все запущенные экземпляры.",
"remoteAccess.listeningMode.restartConfirm.title.all": "Открыть для других устройств",
"remoteAccess.listeningMode.restartConfirm.title.local": "Ограничить этим устройством",
"remoteAccess.listeningMode.restartConfirm.confirmLabel": "Перезапустить сейчас",
"remoteAccess.listeningMode.restartConfirm.cancelLabel": "Отмена",
"remoteAccess.restart.errorManual": "Не удалось перезапустить автоматически. Перезапустите приложение, чтобы применить изменение.",
"remoteAccess.sections.serverPassword.label": "Пароль сервера",
"remoteAccess.sections.serverPassword.help": "Для удаленной передачи управления требуется пароль. Установите запоминающийся пароль, чтобы разрешить вход с других устройств.",
"remoteAccess.authStatus.unavailable": "Статус аутентификации недоступен.",
"remoteAccess.username": "Имя пользователя: {username}",
"remoteAccess.password.status.set": "Для удаленного доступа установлен пароль.",
"remoteAccess.password.status.unset": "Пока не установлен запоминающийся пароль. Установите его, чтобы разрешить вход при удаленной передаче управления.",
"remoteAccess.password.actions.cancel": "Отмена",
"remoteAccess.password.actions.change": "Изменить пароль",
"remoteAccess.password.actions.set": "Установить пароль",
"remoteAccess.password.form.newPassword": "Новый пароль",
"remoteAccess.password.form.confirmPassword": "Подтвердите пароль",
"remoteAccess.password.form.placeholder": "Не менее 8 символов",
"remoteAccess.password.error.tooShort": "Пароль должен быть не короче 8 символов.",
"remoteAccess.password.error.mismatch": "Пароли не совпадают.",
"remoteAccess.password.save.saving": "Сохранение…",
"remoteAccess.password.save.label": "Сохранить пароль",
"remoteAccess.sections.addresses.label": "Доступные адреса",
"remoteAccess.sections.addresses.help": "Откройте или отсканируйте с другой машины, чтобы передать управление.",
"remoteAccess.addresses.loading": "Загрузка адресов…",
"remoteAccess.addresses.none": "Пока нет доступных адресов.",
"remoteAccess.address.scope.network": "Сеть",
"remoteAccess.address.scope.loopback": "Loopback",
"remoteAccess.address.scope.internal": "Внутренний",
"remoteAccess.address.open": "Открыть",
"remoteAccess.address.showQr": "Показать QR",
"remoteAccess.address.hideQr": "Скрыть QR",
"remoteAccess.address.qrAlt": "QR для {url}",
} as const

View File

@@ -0,0 +1,67 @@
export const sessionMessages = {
"sessionPicker.title": "OpenCode • {folder}",
"sessionPicker.empty.noPrevious": "Нет предыдущих сессий",
"sessionPicker.resume.title": "Продолжить сессию ({count}):",
"sessionPicker.session.untitled": "Без названия",
"sessionPicker.divider.or": "или",
"sessionPicker.new.title": "Начать новую сессию:",
"sessionPicker.agents.loading": "Загрузка агентов…",
"sessionPicker.actions.creating": "Создание…",
"sessionPicker.actions.createSession": "Создать сессию",
"sessionPicker.actions.cancel": "Отмена",
"sessionList.header.title": "Сессии",
"sessionList.session.untitled": "Без названия",
"sessionList.status.working": "Работает",
"sessionList.status.compacting": "Компактация",
"sessionList.status.idle": "Простой",
"sessionList.status.needsPermission": "Требуется разрешение",
"sessionList.status.needsInput": "Требуется ввод",
"sessionList.expand.collapseAriaLabel": "Свернуть сессию",
"sessionList.expand.expandAriaLabel": "Развернуть сессию",
"sessionList.expand.collapseTitle": "Свернуть",
"sessionList.expand.expandTitle": "Развернуть",
"sessionList.actions.copyId.ariaLabel": "Скопировать ID сессии",
"sessionList.actions.copyId.title": "Скопировать ID сессии",
"sessionList.actions.rename.ariaLabel": "Переименовать сессию",
"sessionList.actions.rename.title": "Переименовать сессию",
"sessionList.actions.delete.ariaLabel": "Удалить сессию",
"sessionList.actions.delete.title": "Удалить сессию",
"sessionList.copyId.success": "ID сессии скопирован",
"sessionList.copyId.error": "Не удалось скопировать ID сессии",
"sessionList.delete.error": "Не удалось удалить сессию",
"sessionList.rename.error": "Не удалось переименовать сессию",
"sessionRenameDialog.title": "Переименовать сессию",
"sessionRenameDialog.description.withLabel": "Обновите название для \"{label}\".",
"sessionRenameDialog.description.default": "Установите новое название для этой сессии.",
"sessionRenameDialog.input.label": "Название сессии",
"sessionRenameDialog.input.placeholder": "Введите название сессии",
"sessionRenameDialog.actions.cancel": "Отмена",
"sessionRenameDialog.actions.rename": "Переименовать",
"sessionRenameDialog.actions.renaming": "Переименование…",
"sessionView.fallback.sessionNotFound": "Сессия не найдена",
"sessionView.alerts.abortFailed.message": "Не удалось остановить сессию",
"sessionView.alerts.abortFailed.title": "Не удалось остановить",
"sessionView.alerts.revertFailed.message": "Не удалось откатиться к сообщению",
"sessionView.alerts.revertFailed.title": "Не удалось откатиться",
"sessionView.alerts.forkFailed.message": "Не удалось форкнуть сессию",
"sessionView.alerts.forkFailed.title": "Не удалось форкнуть",
"sessionView.attachments.expandPastedTextAriaLabel": "Развернуть вставленный текст",
"sessionView.attachments.insertPastedTextTitle": "Вставить вставленный текст",
"sessionView.attachments.removeAriaLabel": "Удалить вложение",
"sessionEvents.sessionCompactedToast": "Сессия {label} была компактирована",
"sessionEvents.sessionError.unknown": "Неизвестная ошибка",
"sessionEvents.sessionError.title": "Ошибка сессии",
"sessionEvents.sessionError.message": "Ошибка: {message}",
"sessionState.cleanup.deepConfirm.message": "Эта очистка может быть медленной и может удалить сессии, которые вы не хотели удалять. Вы уверены?",
"sessionState.cleanup.deepConfirm.title": "Глубокая очистка сессий",
"sessionState.cleanup.deepConfirm.detail": "Глубокая очистка сессий удалит все сессии без сообщений, уберет завершенные сессии субагентов и очистит неиспользуемые форки сессий.",
"sessionState.cleanup.deepConfirm.confirmLabel": "Продолжить",
"sessionState.cleanup.deepConfirm.cancelLabel": "Отмена",
"sessionState.cleanup.toast.one": "Удалена {count} пустая сессия",
"sessionState.cleanup.toast.other": "Удалено {count} пустых сессий",
} as const

View File

@@ -0,0 +1,54 @@
export const settingsMessages = {
"instanceServiceStatus.sections.lsp": "LSP-серверы",
"instanceServiceStatus.sections.mcp": "MCP-серверы",
"instanceServiceStatus.sections.plugins": "Плагины",
"instanceServiceStatus.lsp.loading": "Загрузка LSP-серверов…",
"instanceServiceStatus.lsp.empty": "LSP-серверы не обнаружены.",
"instanceServiceStatus.lsp.status.connected": "Подключено",
"instanceServiceStatus.lsp.status.error": "Ошибка",
"instanceServiceStatus.mcp.loading": "Загрузка MCP-серверов…",
"instanceServiceStatus.mcp.empty": "MCP-серверы не обнаружены.",
"instanceServiceStatus.mcp.toggleAriaLabel": "Переключить MCP-сервер {name}",
"instanceServiceStatus.plugins.loading": "Загрузка плагинов…",
"instanceServiceStatus.plugins.empty": "Плагины не настроены.",
"permissionBanner.pendingRequests.one": "{count} ожидающий запрос",
"permissionBanner.pendingRequests.other": "{count} ожидающих запросов",
"permissionBanner.detail.permission.one": "{count} разрешение",
"permissionBanner.detail.permission.other": "{count} разрешений",
"permissionBanner.detail.question.one": "{count} вопрос",
"permissionBanner.detail.question.other": "{count} вопросов",
"permissionBanner.detail.wrapper": " ({detail})",
"agentSelector.placeholder": "Выберите агента…",
"agentSelector.badge.subagent": "субагент",
"agentSelector.none": "Нет",
"agentSelector.trigger.primary": "Агент: {agent}",
"modelSelector.placeholder.search": "Поиск моделей…",
"modelSelector.none": "Нет",
"modelSelector.trigger.primary": "Модель: {model}",
"thinkingSelector.variant.default": "По умолчанию",
"thinkingSelector.label": "Размышления: {variant}",
"envEditor.title": "Переменные окружения",
"envEditor.count.one": "({count} переменная)",
"envEditor.count.other": "({count} переменных)",
"envEditor.fields.name.placeholder": "Имя переменной",
"envEditor.fields.name.readOnlyTitle": "Имя переменной (только чтение)",
"envEditor.fields.value.placeholder": "Значение переменной",
"envEditor.actions.remove.title": "Удалить переменную",
"envEditor.actions.add.title": "Добавить переменную",
"envEditor.empty": "Переменные окружения не настроены. Добавьте переменные выше, чтобы настроить окружение OpenCode.",
"envEditor.help": "Эти переменные будут доступны в окружении OpenCode при запуске экземпляров.",
"contextUsagePanel.headings.tokens": "Tokens",
"contextUsagePanel.headings.context": "Контекст",
"contextUsagePanel.labels.input": "Ввод",
"contextUsagePanel.labels.output": "Вывод",
"contextUsagePanel.labels.cost": "Стоимость",
"contextUsagePanel.labels.used": "Использовано",
"contextUsagePanel.labels.available": "Доступно",
"contextUsagePanel.unavailable": "--",
} as const

View File

@@ -0,0 +1,6 @@
export const timeMessages = {
"time.relative.justNow": "только что",
"time.relative.daysAgoShort": "{count}д назад",
"time.relative.hoursAgoShort": "{count}ч назад",
"time.relative.minutesAgoShort": "{count}м назад",
} as const

View File

@@ -0,0 +1,121 @@
export const toolCallMessages = {
"toolCall.pending.waitingToRun": "Ожидание запуска…",
"toolCall.error.label": "Ошибка:",
"toolCall.diff.label": "Diff",
"toolCall.diff.label.withPath": "Diff · {path}",
"toolCall.diff.viewMode.ariaLabel": "Режим просмотра diff",
"toolCall.diff.viewMode.split": "Раздельный",
"toolCall.diff.viewMode.unified": "Единый",
"toolCall.diagnostics.title": "Диагностика",
"toolCall.diagnostics.ariaLabel": "Диагностика",
"toolCall.diagnostics.ariaLabel.withLabel": "Диагностика {label}",
"toolCall.diagnostics.severity.error.short": "ERR",
"toolCall.diagnostics.severity.warning.short": "WARN",
"toolCall.diagnostics.severity.info.short": "INFO",
"toolCall.renderer.toolName.shell": "Shell",
"toolCall.renderer.toolName.fetch": "Fetch",
"toolCall.renderer.toolName.invalid": "Неверный",
"toolCall.renderer.toolName.plan": "План",
"toolCall.renderer.toolName.applyPatch": "Применить патч",
"toolCall.renderer.action.working": "Выполняется…",
"toolCall.renderer.action.writingCommand": "Запись команды…",
"toolCall.renderer.action.preparingEdit": "Подготовка правки…",
"toolCall.renderer.action.readingFile": "Чтение файла…",
"toolCall.renderer.action.preparingWrite": "Подготовка записи…",
"toolCall.renderer.action.preparingPatch": "Подготовка патча…",
"toolCall.renderer.action.planning": "Планирование…",
"toolCall.renderer.action.fetchingFromWeb": "Получение из интернета…",
"toolCall.renderer.action.findingFiles": "Поиск файлов…",
"toolCall.renderer.action.searchingContent": "Поиск по содержимому…",
"toolCall.renderer.action.listingDirectory": "Просмотр каталога…",
"toolCall.renderer.bash.title.timeout": "Таймаут: {timeout}",
"toolCall.renderer.read.detail.offset": "Смещение: {offset}",
"toolCall.renderer.read.detail.limit": "Лимит: {limit}",
"toolCall.renderer.todo.empty": "Пока нет пунктов плана.",
"toolCall.renderer.todo.status.pending": "Ожидает",
"toolCall.renderer.todo.status.inProgress": "В процессе",
"toolCall.renderer.todo.status.completed": "Завершено",
"toolCall.renderer.todo.status.cancelled": "Отменено",
"toolCall.renderer.todo.title.plan": "План",
"toolCall.renderer.todo.title.creating": "Создание плана",
"toolCall.renderer.todo.title.completing": "Завершение плана",
"toolCall.renderer.todo.title.updating": "Обновление плана",
"toolCall.permission.status.required": "Требуется разрешение",
"toolCall.permission.status.queued": "Разрешение в очереди",
"toolCall.permission.requestedDiff.label": "Запрошенный diff",
"toolCall.permission.requestedDiff.withPath": "Запрошенный diff · {path}",
"toolCall.permission.queuedText": "Ожидание предыдущих ответов по разрешениям.",
"toolCall.permission.actions.allowOnce": "Разрешить один раз",
"toolCall.permission.actions.alwaysAllow": "Всегда разрешать",
"toolCall.permission.actions.deny": "Запретить",
"toolCall.permission.shortcuts.allowOnce": "Разрешить один раз",
"toolCall.permission.shortcuts.alwaysAllow": "Всегда разрешать",
"toolCall.permission.shortcuts.deny": "Запретить",
"toolCall.permission.errors.unableToUpdate": "Не удалось обновить разрешение",
"permissionApproval.title": "Запросы",
"permissionApproval.empty": "Нет ожидающих запросов.",
"permissionApproval.kind.permission": "Разрешение",
"permissionApproval.kind.question": "Вопрос",
"permissionApproval.questionCount.one": "{count} вопрос",
"permissionApproval.questionCount.other": "{count} вопросов",
"permissionApproval.status.active": "Активно",
"permissionApproval.actions.closeAriaLabel": "Закрыть",
"permissionApproval.actions.goToSession": "Перейти к сессии",
"permissionApproval.actions.loadingSession": "Загрузка…",
"permissionApproval.actions.loadSession": "Загрузить сессию",
"permissionApproval.actions.allowOnce": "Разрешить один раз",
"permissionApproval.actions.alwaysAllow": "Всегда разрешать",
"permissionApproval.actions.deny": "Запретить",
"permissionApproval.fallbackHint": "Загрузите сессию для получения подробностей.",
"permissionApproval.errors.unableToUpdatePermission": "Не удалось обновить разрешение",
"toolCall.question.status.required": "Требуется ответ",
"toolCall.question.status.queued": "Вопрос в очереди",
"toolCall.question.status.questions": "Вопросы",
"toolCall.question.action.awaitingAnswers": "Ожидание ответов…",
"toolCall.question.title.questions": "Вопросы",
"toolCall.question.title.askingQuestions": "Задаем вопросы",
"toolCall.question.type.one": "Вопрос",
"toolCall.question.type.other": "Вопросы",
"toolCall.question.number": "В{number}:",
"toolCall.question.multiple": "Несколько",
"toolCall.question.custom.title": "Введите свой ответ",
"toolCall.question.custom.label": "Свой ответ",
"toolCall.question.custom.placeholder": "Введите свой ответ",
"toolCall.question.actions.submit": "Отправить",
"toolCall.question.actions.dismiss": "Скрыть",
"toolCall.question.shortcuts.submit": "Отправить",
"toolCall.question.shortcuts.dismiss": "Скрыть",
"toolCall.question.queuedText": "Ожидание предыдущих ответов.",
"toolCall.question.validation.answerAll": "Ответьте на все вопросы перед отправкой.",
"toolCall.question.errors.unableToReply": "Не удалось ответить",
"toolCall.question.errors.unableToDismiss": "Не удалось скрыть",
"toolCall.task.action.delegating": "Делегирование…",
"toolCall.task.sections.prompt": "Prompt",
"toolCall.task.sections.steps": "Шаги",
"toolCall.task.sections.output": "Вывод",
"toolCall.task.steps.count": "{count} шагов",
"toolCall.task.meta.agentModel": "Агент: {agent} • Модель: {model}",
"toolCall.task.meta.agent": "Агент: {agent}",
"toolCall.task.meta.model": "Модель: {model}",
"toolCall.status.pending": "В ожидании",
"toolCall.status.running": "Выполняется",
"toolCall.status.completed": "Завершено",
"toolCall.status.error": "Ошибка",
"toolCall.status.unknown": "Неизвестно",
"toolCall.applyPatch.action.preparing": "Подготовка apply_patch…",
"toolCall.applyPatch.title.withFileCount.one": "{tool} ({count} файл)",
"toolCall.applyPatch.title.withFileCount.other": "{tool} ({count} файлов)",
"toolCall.applyPatch.fileFallback": "Файл {number}",
} as const