import type { Messages } from '../types'; export const ruTerminalMessages: Messages = { 'terminal.sudoHint.pressEnter': 'Нажмите Enter, чтобы вставить сохранённый пароль', 'terminal.passwordPicker.title': 'Сохранённые пароли', 'terminal.passwordPicker.empty': 'Нет сохранённых паролей', // Network Device Mode auto-detection tip (session header) 'terminal.networkDevice.tip.message': 'Похоже на сетевое устройство. Включите режим сетевого устройства, чтобы команды отправлялись как есть (без обёртки оболочки).', 'terminal.networkDevice.tip.action': 'Включить', 'terminal.networkDevice.tip.dismiss': 'Скрыть', 'terminal.networkDevice.tip.enabled': 'Режим сетевого устройства включён для {host}', // Connection logs 'logs.table.date': 'Дата', 'logs.table.user': 'Пользователь', 'logs.table.host': 'Хост', 'logs.table.saved': 'Сохранено', 'logs.empty.title': 'Нет журналов подключений', 'logs.empty.desc': 'История ваших подключений будет отображаться здесь, когда вы подключаетесь к хостам или открываете локальные терминалы.', 'logs.loadMore': 'Загрузить ещё {count} журналов', 'logs.ongoing': 'в процессе', 'logs.localTerminal': 'Локальный терминал', 'logs.action.save': 'Сохранить', 'logs.action.unsave': 'Убрать из сохранённых', 'logs.action.delete': 'Удалить', // Log view 'logView.customizeAppearance': 'Настроить внешний вид', 'logView.appearance': 'Внешний вид', 'logView.readOnly': 'Только чтение', 'logView.export': 'Экспорт', // Terminal toolbar / search / context menu / auth 'terminal.toolbar.openSftp': 'Открыть SFTP', 'terminal.toolbar.availableAfterConnect': 'Доступно после подключения', 'terminal.toolbar.sendYmodem': 'Отправить через YMODEM', 'terminal.toolbar.receiveYmodem': 'Получить через YMODEM', 'terminal.toolbar.sftp': 'SFTP', 'terminal.toolbar.more': 'Другие действия', 'terminal.toolbar.scripts': 'Скрипты', 'terminal.toolbar.history': 'История команд', 'terminal.toolbar.configureOsc7': 'Настроить отслеживание каталога', 'history.scope.label': 'Область истории', 'history.tab.host': 'Хост', 'history.tab.global': 'Глобальная', 'history.searchPlaceholder': 'Поиск по истории...', 'history.loading': 'Загрузка удалённой истории...', 'history.meta.count': '{count} команд', 'history.empty.noSession': 'Откройте удалённую сессию, чтобы просмотреть историю команд.', 'history.empty.unsupportedProtocol': 'История команд доступна только для сессий SSH/Mosh/ET.', 'history.empty.noHistory': 'История команд на этом хосте не найдена.', 'history.empty.noGlobalHistory': 'Глобальной истории команд пока нет. Выполненные команды появятся здесь.', 'history.action.refresh': 'Обновить', 'history.action.retry': 'Повторить', 'history.action.paste': 'Вставить в терминал', 'history.action.run': 'Выполнить в терминале', 'history.action.saveAsSnippet': 'Сохранить как сниппет', 'history.action.delete': 'Удалить из истории', 'terminal.toolbar.library': 'Библиотека', 'terminal.toolbar.noSnippets': 'Нет доступных сниппетов', 'terminal.toolbar.terminalSettings': 'Настройки терминала', 'terminal.toolbar.searchTerminal': 'Поиск по терминалу', 'terminal.toolbar.search': 'Поиск', 'terminal.toolbar.startSessionLog': 'Начать журнал сессии', 'terminal.toolbar.stopSessionLog': 'Остановить журнал сессии', 'terminal.toolbar.timestampsEnable': 'Показать время', 'terminal.toolbar.timestampsDisable': 'Скрыть время', 'terminal.toolbar.broadcast': 'Трансляция', 'terminal.toolbar.broadcastEnable': 'Включить режим трансляции', 'terminal.toolbar.broadcastDisable': 'Отключить режим трансляции', 'terminal.toolbar.composeBar': 'Строка ввода', 'terminal.composeBar.placeholder': 'Введите команду здесь и нажмите Enter для отправки...', 'terminal.composeBar.send': 'Отправить', 'terminal.composeBar.close': 'Закрыть строку ввода', 'terminal.composeBar.broadcasting': 'Трансляция во все сессии', 'terminal.composeBar.resize': 'Изменить высоту строки ввода', 'terminal.composeBar.manageSnippets': 'Управление быстрыми сниппетами', 'terminal.composeBar.searchSnippets': 'Поиск сниппетов...', 'terminal.composeBar.noPinnedSnippets': 'Закрепите сниппеты через + для быстрого доступа', 'terminal.composeBar.noMatchingSnippets': 'Сниппеты не найдены', 'terminal.composeBar.pinnedCount': 'Закреплено: {count}', 'terminal.composeBar.unpinSnippet': 'Убрать {label} из панели', 'terminal.composeBar.snippetClickHint': 'Клик — вставить · Shift+клик — отправить', 'terminal.toolbar.focus': 'Фокус', 'terminal.toolbar.focusMode': 'Режим фокуса', 'terminal.paneMagnification.magnify': 'Увеличить текущую панель', 'terminal.paneMagnification.restore': 'Восстановить раскладку панелей', 'terminal.paneMagnification.hint': 'Увеличено', 'terminal.toolbar.detach': 'Открепить в отдельную вкладку', 'terminal.toolbar.dragPane': 'Перетащить панель терминала', 'terminal.toolbar.showActions': 'Показать действия терминала', 'terminal.toolbar.encoding': 'Кодировка терминала', 'terminal.toolbar.encoding.utf8': 'UTF-8', 'terminal.toolbar.encoding.gb18030': 'GB18030', 'terminal.toolbar.closeSession': 'Закрыть сессию', 'terminal.toolbar.hostHighlight.title': 'Подсветка ключевых слов хоста', 'terminal.toolbar.hostHighlight.noRules': 'Для этого хоста не задано пользовательских правил подсветки', 'terminal.toolbar.hostHighlight.addRule': 'Добавить новое правило', 'terminal.toolbar.hostHighlight.labelPlaceholder': 'Метка (например, Error)', 'terminal.toolbar.hostHighlight.patternPlaceholder': 'Regex-шаблон (например, \\bfailed\\b)', 'terminal.toolbar.hostHighlight.invalidPattern': 'Некорректный regex-шаблон', 'terminal.toolbar.hostHighlight.clearAll': 'Очистить все', 'terminal.toolbar.hostHighlight.changeColor': 'Изменить цвет подсветки для', 'terminal.toolbar.hostHighlight.selectColor': 'Выбрать цвет для нового правила', 'terminal.statusbar.copyHostname.label': 'Копировать адрес хоста', 'terminal.statusbar.copyHostname.tooltip': 'Копировать адрес хоста ({hostname})', 'terminal.statusbar.copyHostname.toast': 'Адрес хоста скопирован: {hostname}', 'terminal.statusbar.copyHostname.error': 'Не удалось скопировать адрес хоста в буфер обмена', 'terminal.statusbar.disconnect.label': 'Отключить', 'terminal.statusbar.disconnect.tooltip': 'Отключить сессию, не закрывая вкладку', 'terminal.statusbar.reconnect.label': 'Переподключиться', 'terminal.statusbar.reconnect.tooltip': 'Переподключить эту сессию', 'terminal.serverStats.cpu': 'Использование CPU', 'terminal.serverStats.cpuCores': 'Использование ядер CPU', 'terminal.serverStats.memory': 'Использование памяти', 'terminal.serverStats.memoryDetails': 'Сведения о памяти', 'terminal.serverStats.memUsed': 'Использовано', 'terminal.serverStats.memBuffers': 'Буферы', 'terminal.serverStats.memCached': 'Кэш', 'terminal.serverStats.memFree': 'Свободно', 'terminal.serverStats.swap': 'Файл подкачки', 'terminal.serverStats.swapUsed': 'Использовано swap', 'terminal.serverStats.swapFree': 'Свободный swap', 'terminal.serverStats.swapTotal': 'Всего', 'terminal.serverStats.topProcesses': 'Топ процессов по памяти', 'terminal.serverStats.disk': 'Использование дисков', 'terminal.serverStats.diskDetails': 'Смонтированные диски', 'terminal.serverStats.network': 'Скорость сети', 'terminal.serverStats.latency': 'Сетевая задержка SSH', 'terminal.serverStats.networkDetails': 'Сетевые интерфейсы', 'terminal.serverStats.noData': 'Данные недоступны', 'terminal.dragDrop.localTitle': 'Перетащите для вставки путей', 'terminal.dragDrop.localMessage': 'Пути к файлам будут вставлены в терминал', 'terminal.dragDrop.remoteTitle': 'Перетащите для загрузки файлов', 'terminal.dragDrop.remoteZmodemMessage': 'Файлы будут загружены через ZMODEM (PTY)', 'terminal.dragDrop.remoteSftpMessage': 'Файлы будут загружены через SFTP', 'terminal.dragDrop.noFiles': 'Нет файлов для загрузки', 'terminal.dragDrop.notConnected': 'Нельзя перетащить файлы — терминал не подключён', 'terminal.dragDrop.errorTitle': 'Ошибка перетаскивания', 'terminal.dragDrop.errorMessage': 'Не удалось обработать перетащенные файлы', 'terminal.dragDrop.destinationUnknown': 'Не удалось определить текущую папку терминала. Включите отслеживание каталогов или сначала откройте SFTP и выберите папку загрузки.', 'terminal.dragDrop.uploadCancelled': 'Загрузка отменена: соединение терминала изменилось или его не удалось повторно использовать. После переподключения перетащите файлы снова.', 'terminal.dragDrop.needsSudoElevation': 'Эта папка недоступна для записи пользователю входа. Включите повышение прав Sudo в настройках хоста или вернитесь в домашний каталог и перетащите файлы снова.', 'terminal.search.placeholder': 'Поиск...', 'terminal.search.noResults': 'Ничего не найдено', 'terminal.search.prevMatch': 'Предыдущее совпадение (Shift+Enter)', 'terminal.search.nextMatch': 'Следующее совпадение (Enter)', 'terminal.menu.copy': 'Копировать', 'terminal.menu.paste': 'Вставить', 'terminal.menu.uploadClipboardImage': 'Загрузить изображение из буфера', 'terminal.menu.addSelectionToAI': 'Добавить в чат', 'terminal.menu.pasteSelection': 'Вставить выделенное', 'terminal.menu.selectAll': 'Выбрать всё', 'terminal.menu.reconnect': 'Переподключиться', 'terminal.menu.sendYmodem': 'Отправить через YMODEM', 'terminal.menu.receiveYmodem': 'Получить через YMODEM', 'terminal.menu.splitHorizontal': 'Разделить по горизонтали', 'terminal.menu.splitVertical': 'Разделить по вертикали', 'terminal.menu.clearBuffer': 'Очистить буфер', 'terminal.menu.closeTerminal': 'Закрыть терминал', 'terminal.menu.rename': 'Переименовать', 'terminal.menu.detach': 'Открепить из рабочей области', 'terminal.menu.detachSession': 'Открепить {name}', 'terminal.osc7Setup.title': 'Настроить отслеживание каталога', 'terminal.osc7Setup.desc': 'NetMesh добавит хуки OSC 7 для текущего удалённого пользователя. Это помогает SFTP следовать за каталогом терминала после sudo или su.', 'terminal.osc7Setup.targets': 'Возможные файлы для обновления', 'terminal.osc7Setup.command': 'Команда для запуска', 'terminal.osc7Setup.run': 'Запустить настройку', 'terminal.osc7Setup.running': 'Настройка...', 'terminal.osc7Setup.configured': 'Отслеживание каталога настроено', 'terminal.osc7Setup.failed': 'Не удалось настроить отслеживание каталога', 'terminal.osc7Setup.sent': 'Настройка отслеживания каталога отправлена в терминал', 'terminal.ymodem.selectFile': 'Выберите файл для отправки', 'terminal.ymodem.allFiles': 'Все файлы', 'terminal.ymodem.started': 'YMODEM отправляет {fileName}', 'terminal.ymodem.complete': 'YMODEM отправил {fileName}', 'terminal.ymodem.failed': 'Не удалось отправить через YMODEM', 'terminal.ymodem.selectReceiveDirectory': 'Выберите папку для полученных файлов', 'terminal.ymodem.receiveStarted': 'YMODEM получает...', 'terminal.ymodem.receiveComplete': 'YMODEM получил {fileName}', 'terminal.ymodem.receiveCompleteMultiple': 'YMODEM получил файлов: {count}', 'terminal.ymodem.receiveEmpty': 'Файлы YMODEM не получены', 'terminal.ymodem.receiveFailed': 'Не удалось получить через YMODEM', 'terminal.ymodem.unavailable': 'YMODEM недоступен', 'terminal.clipboardImageUpload.noImage': 'В буфере обмена нет изображения', 'terminal.clipboardImageUpload.failed': 'Не удалось загрузить изображение из буфера обмена', 'terminal.selection.addToAI': 'Добавить в чат', 'terminal.selection.addToAIDesc': 'Прикрепить выбранный вывод терминала к черновику AI', 'terminal.auth.password': 'Пароль', 'terminal.auth.sshKey': 'SSH-ключ', 'terminal.auth.username': 'Имя пользователя', 'terminal.auth.username.placeholder': 'root', 'terminal.auth.passwordLabel': 'Пароль', 'terminal.auth.password.placeholder': 'Введите пароль', 'terminal.auth.passphrase': 'Парольная фраза', 'terminal.auth.passphrase.placeholder': 'Необязательная парольная фраза для выбранного приватного ключа', 'terminal.auth.certificate': 'Сертификат', 'terminal.auth.selectKey': 'Выбрать ключ', 'terminal.auth.retryMessage': 'Ошибка аутентификации. Проверьте учётные данные и повторите попытку.', 'terminal.auth.retryLog': 'Ошибка аутентификации. Повторите попытку.', 'terminal.auth.noKeysHint': 'Нет доступных ключей. Добавьте ключи в связке ключей.', 'terminal.auth.continueSave': 'Продолжить и сохранить', 'terminal.auth.credentialsUnavailable': 'Сохранённые учётные данные не могут быть расшифрованы на этом устройстве. Пожалуйста, введите и сохраните их заново.', 'terminal.auth.jumpCredentialsUnavailable': 'У jump-хоста сохранены учётные данные, которые нельзя расшифровать на этом устройстве. Откройте настройки хоста и введите их заново.', 'terminal.auth.proxyCredentialsUnavailable': 'Учётные данные прокси не могут быть расшифрованы на этом устройстве. Откройте настройки хоста и заново введите пароль прокси.', 'terminal.auth.keyUnavailableFallbackPassword': 'Сохранённый SSH-ключ недоступен на этом устройстве. Выполняется переход на аутентификацию по паролю.', 'terminal.progress.timeoutIn': 'Тайм-аут через {seconds}с', 'terminal.progress.waitingForUserInput': 'Ожидание ввода пользователя', 'terminal.progress.disconnected': 'Отключено', 'terminal.progress.cancelling': 'Отмена...', 'terminal.progress.startOver': 'Начать заново', 'terminal.progress.enterReconnectHint': 'Нажмите Enter, чтобы подключиться снова', 'terminal.progress.reconnecting': 'Повторное подключение...', 'terminal.progress.autoReconnectScheduled': 'Соединение потеряно. Повторное подключение через {seconds} с (попытка {attempt}).', 'terminal.progress.autoReconnectAttempt': 'Попытка автоматического подключения {attempt}...', 'terminal.connection.dismissDisconnectedDialog': 'Закрыть уведомление об отключении', 'terminal.connection.chainOf': 'Цепочка {current} из {total}', 'terminal.connection.showLogs': 'Показать журналы', 'terminal.connection.hideLogs': 'Скрыть журналы', 'terminal.connection.protocol.ssh': 'SSH', 'terminal.connection.protocol.telnet': 'Telnet', 'terminal.connection.protocol.mosh': 'Mosh', 'terminal.connection.protocol.plugin': 'Подключение плагина', 'terminal.connection.protocol.serial': 'Serial', 'terminal.connection.protocol.local': 'Локальная оболочка', 'terminal.hostKey.unknownTitle': 'Подтвердите этот ключ хоста', 'terminal.hostKey.changedTitle': 'Ключ хоста изменился', 'terminal.hostKey.unknownDescription': 'Подлинность {host} пока не может быть установлена.', 'terminal.hostKey.changedDescription': 'Сохранённый ключ для {host} больше не совпадает с этим сервером.', 'terminal.hostKey.fingerprintLabel': 'Отпечаток {keyType} — SHA256:', 'terminal.hostKey.savedFingerprintLabel': 'Сохранённый отпечаток', 'terminal.hostKey.unknownHint': 'Запомните его, если этот отпечаток принадлежит серверу, к которому вы ожидали подключиться.', 'terminal.hostKey.changedHint': 'Продолжайте только если вы ожидали, что этот хост изменится.', 'terminal.hostKey.addAndContinue': 'Добавить и продолжить', 'terminal.hostKey.updateAndContinue': 'Обновить и продолжить', 'terminal.themeModal.title': 'Внешний вид терминала', 'terminal.themeModal.tab.theme': 'Тема', 'terminal.themeModal.tab.font': 'Шрифт', 'terminal.themeModal.tab.custom': 'Пользовательское', 'terminal.themeModal.globalTheme': 'Глобальная тема', 'terminal.themeModal.globalFont': 'Глобальный шрифт', 'terminal.themeModal.fontSize': 'Размер шрифта', 'terminal.themeModal.fontWeight': 'Толщина шрифта', 'terminal.themeModal.livePreview': 'Предпросмотр в реальном времени', 'terminal.themeModal.themeType': 'Тема {type}', 'terminal.hiddenTheme.title': 'Текущая скрытая тема', 'terminal.hiddenTheme.desc': 'Эта тема скрыта из ручного выбора и будет заменена, когда вы выберете другую тему.', 'topTabs.toggleTheme.systemExitTitle': 'Активна системная тема', 'topTabs.toggleTheme.systemExitMessage': 'Откройте настройки, чтобы выбрать фиксированную светлую или тёмную тему.', 'topTabs.toggleTheme.openSettings': 'Открыть настройки', // Custom Themes 'terminal.customTheme.section': 'Пользовательские темы', 'terminal.customTheme.yourThemes': 'Ваши темы', 'terminal.customTheme.new': 'Новая тема', 'terminal.customTheme.newDesc': 'Клонировать текущую тему и настроить её', 'terminal.customTheme.newTitle': 'Новая пользовательская тема', 'terminal.customTheme.editTitle': 'Редактировать тему', 'terminal.customTheme.import': 'Импорт .itermcolors', 'terminal.customTheme.importDesc': 'Импорт из файла цветовой схемы iTerm2', 'terminal.customTheme.importError': 'Не удалось разобрать выбранный файл. Убедитесь, что это корректный XML-файл .itermcolors.', 'terminal.customTheme.delete': 'Удалить тему', 'terminal.customTheme.confirmDelete': 'Подтвердить удаление', 'terminal.customTheme.name': 'Название', 'terminal.customTheme.namePlaceholder': 'Моя пользовательская тема', 'terminal.customTheme.type': 'Тип', 'terminal.customTheme.group.general': 'Общие', 'terminal.customTheme.group.normal': 'Обычные цвета', 'terminal.customTheme.group.bright': 'Яркие цвета', 'terminal.customTheme.color.background': 'Фон', 'terminal.customTheme.color.foreground': 'Текст', 'terminal.customTheme.color.cursor': 'Курсор', 'terminal.customTheme.color.selection': 'Выделение', 'terminal.customTheme.color.black': 'Чёрный', 'terminal.customTheme.color.red': 'Красный', 'terminal.customTheme.color.green': 'Зелёный', 'terminal.customTheme.color.yellow': 'Жёлтый', 'terminal.customTheme.color.blue': 'Синий', 'terminal.customTheme.color.magenta': 'Пурпурный', 'terminal.customTheme.color.cyan': 'Голубой', 'terminal.customTheme.color.white': 'Белый', 'terminal.customTheme.color.brightBlack': 'Яркий чёрный', 'terminal.customTheme.color.brightRed': 'Яркий красный', 'terminal.customTheme.color.brightGreen': 'Яркий зелёный', 'terminal.customTheme.color.brightYellow': 'Яркий жёлтый', 'terminal.customTheme.color.brightBlue': 'Яркий синий', 'terminal.customTheme.color.brightMagenta': 'Яркий пурпурный', 'terminal.customTheme.color.brightCyan': 'Яркий голубой', 'terminal.customTheme.color.brightWhite': 'Яркий белый', // Cloud Sync Settings 'cloudSync.gate.title': 'Синхронизация с end-to-end шифрованием', 'cloudSync.gate.desc': 'Ваши данные шифруются локально перед синхронизацией. Облачные провайдеры никогда не видят ваши данные в открытом виде. Задайте мастер-ключ, чтобы включить безопасную синхронизацию.', 'cloudSync.gate.masterKey': 'Мастер-ключ', 'cloudSync.gate.confirmMasterKey': 'Подтвердите мастер-ключ', 'cloudSync.gate.placeholder': 'Введите надёжный пароль', 'cloudSync.gate.confirmPlaceholder': 'Подтвердите пароль', 'cloudSync.gate.mismatch': 'Пароли не совпадают', 'cloudSync.gate.warning': 'Я понимаю, что если забуду мастер-ключ, мои данные нельзя будет восстановить. Сброс пароля невозможен.', 'cloudSync.gate.enableVault': 'Включить зашифрованное хранилище', 'cloudSync.gate.enabledToast': 'Зашифрованное хранилище включено', 'cloudSync.gate.setupFailed': 'Не удалось настроить мастер-ключ', 'cloudSync.passwordStrength.tooShort': 'Слишком короткий', 'cloudSync.passwordStrength.weak': 'Слабый', 'cloudSync.passwordStrength.moderate': 'Средний', 'cloudSync.passwordStrength.strong': 'Сильный', 'cloudSync.passwordStrength.veryStrong': 'Очень сильный', 'cloudSync.provider.notConnected': 'Не подключено', 'cloudSync.provider.sync': 'Синхронизация', 'cloudSync.provider.connect': 'Подключить', 'cloudSync.provider.connecting': 'Подключение...', 'cloudSync.provider.disconnect': 'Отключить', 'cloudSync.provider.disconnect.confirmTitle': 'Отключить "{name}"?', 'cloudSync.provider.disconnect.confirmMessage': 'Это устройство перестанет синхронизироваться с {name}. Локальное хранилище останется на этом компьютере.', 'cloudSync.provider.disconnect.confirmAction': 'Отключить', 'cloudSync.provider.webdav': 'WebDAV', 'cloudSync.provider.webdav.desc': 'Подключение к самостоятельно размещённому WebDAV endpoint', 'cloudSync.provider.s3': 'Совместимое с S3', 'cloudSync.provider.s3.desc': 'Подключение к объектному хранилищу, совместимому с S3', 'cloudSync.provider.comingSoon': 'Скоро', 'cloudSync.webdav.title': 'Настройки WebDAV', 'cloudSync.webdav.desc': 'Настройка WebDAV endpoint для зашифрованной синхронизации.', 'cloudSync.webdav.endpoint': 'Конечная точка URL', 'cloudSync.webdav.authType': 'Тип аутентификации', 'cloudSync.webdav.auth.basic': 'Базовая', 'cloudSync.webdav.auth.digest': 'Дайджест', 'cloudSync.webdav.auth.token': 'Токен', 'cloudSync.webdav.username': 'Имя пользователя', 'cloudSync.webdav.password': 'Пароль', 'cloudSync.webdav.token': 'Токен', 'cloudSync.webdav.showSecret': 'Показать секрет', 'cloudSync.webdav.allowInsecure': 'Разрешить небезопасное соединение (игнорировать ошибки сертификата)', 'cloudSync.webdav.validation.endpoint': 'Введите корректный WebDAV endpoint.', 'cloudSync.webdav.validation.credentials': 'Имя пользователя и пароль обязательны.', 'cloudSync.webdav.validation.token': 'Токен обязателен.', 'cloudSync.s3.title': 'Настройки S3', 'cloudSync.s3.desc': 'Подключение к объектному хранилищу, совместимому с S3, для зашифрованной синхронизации.', 'cloudSync.s3.endpoint': 'Конечная точка URL', 'cloudSync.s3.region': 'Регион', 'cloudSync.s3.bucket': 'Бакет', 'cloudSync.s3.accessKeyId': 'ID ключа доступа', 'cloudSync.s3.secretAccessKey': 'Секретный ключ доступа', 'cloudSync.s3.sessionToken': 'Токен сессии (необязательно)', 'cloudSync.s3.prefix': 'Префикс ключа (необязательно)', 'cloudSync.s3.forcePathStyle': 'Принудительно использовать path-style URL (для MinIO/R2 и т. д.)', 'cloudSync.s3.allowInsecure': 'Разрешить небезопасное соединение (игнорировать ошибки сертификата)', 'cloudSync.s3.showSecret': 'Показать секреты', 'cloudSync.s3.validation.required': 'Endpoint, регион, бакет, access key и secret обязательны.', 'cloudSync.smb.title': 'Настройки SMB', 'cloudSync.smb.desc': 'Подключение к файловой SMB/CIFS-шаре для зашифрованной синхронизации.', 'cloudSync.smb.share': 'Путь к шаре', 'cloudSync.smb.username': 'Имя пользователя', 'cloudSync.smb.password': 'Пароль', 'cloudSync.smb.domain': 'Домен (необязательно)', 'cloudSync.smb.domainPlaceholder': 'например, WORKGROUP', 'cloudSync.smb.port': 'Порт (необязательно)', 'cloudSync.smb.showSecret': 'Показать пароль', 'cloudSync.smb.validation.share': 'Путь к шаре обязателен.', 'cloudSync.smb.validation.port': 'Порт должен быть числом от 1 до 65535.', 'cloudSync.connect.smb.success': 'SMB успешно подключён', 'cloudSync.connect.smb.failedTitle': 'Ошибка подключения SMB', 'cloudSync.provider.smb': 'SMB-шара', 'cloudSync.connect.webdav.success': 'WebDAV успешно подключён', 'cloudSync.connect.webdav.failedTitle': 'Ошибка подключения WebDAV', 'cloudSync.connect.s3.success': 'S3 успешно подключён', 'cloudSync.connect.s3.failedTitle': 'Ошибка подключения S3', 'cloudSync.connect.plugin.success': 'Провайдер синхронизации плагина подключен', 'cloudSync.connect.plugin.failedTitle': 'Ошибка подключения синхронизации плагина', 'cloudSync.pluginConfig.title': 'Настройка {name}', 'cloudSync.pluginConfig.desc': 'Введите JSON-конфигурацию, требуемую этим провайдером синхронизации.', 'cloudSync.pluginConfig.label': 'Конфигурация провайдера (JSON)', 'cloudSync.pluginConfig.invalidJson': 'Конфигурация должна быть допустимым JSON.', 'cloudSync.pluginConfig.schemaInvalid': 'Конфигурация не соответствует схеме провайдера.', 'cloudSync.lastSync.never': 'Никогда', 'cloudSync.lastSync.justNow': 'Только что', 'cloudSync.lastSync.minutesAgo': '{minutes} мин назад', 'cloudSync.changeKey': 'Изменить ключ', 'cloudSync.providers.title': 'Облачные провайдеры', 'cloudSync.syncAll': 'Синхронизировать всех подключённых провайдеров', 'cloudSync.autoSync.title': 'Автосинхронизация', 'cloudSync.autoSync.desc': 'Автоматически синхронизировать при внесении изменений', 'cloudSync.strategy.title': 'Стратегия синхронизации', 'cloudSync.strategy.desc': 'Выберите, что делать, когда изменились и локальные, и облачные данные.', 'cloudSync.strategy.smartMerge': 'Умное объединение (рекомендуется)', 'cloudSync.strategy.smartMergeDesc': 'По возможности объединять изменения с обеих сторон; если NetMesh не сможет безопасно выбрать, он попросит вас решить вручную.', 'cloudSync.strategy.preferCloud': 'Приоритет облака', 'cloudSync.strategy.preferCloudDesc': 'Когда изменились обе стороны, скачать облачную версию и заменить локальные изменения.', 'cloudSync.strategy.preferLocal': 'Приоритет локальных данных', 'cloudSync.strategy.preferLocalDesc': 'Когда изменились обе стороны, загрузить локальную версию и заменить облачные изменения.', 'cloudSync.convergent.title': 'Сходящаяся синхронизация устройств', 'cloudSync.convergent.experimental': 'Экспериментально', 'cloudSync.convergent.desc': 'Зашифрованная CRDT-реплика сохраняет офлайн-правки, параллельные удаления и изменения всех подключённых провайдеров.', 'cloudSync.convergent.active': 'CRDT v2 активна. Каждая загрузка проверяется чтением из облака.', 'cloudSync.convergent.paused': 'CRDT v2 приостановлена на этом устройстве; облачные метаданные сохранены.', 'cloudSync.convergent.enabled': 'Сходящаяся синхронизация включена', 'cloudSync.convergent.preview.title': 'Предпросмотр миграции', 'cloudSync.convergent.preview.entities': 'Объекты', 'cloudSync.convergent.preview.providers': 'Провайдеры', 'cloudSync.convergent.preview.conflicts': 'Конфликты', 'cloudSync.convergent.preview.compatibility': 'Каждая зашифрованная нагрузка сохраняет полный снимок v1 для старых клиентов.', 'cloudSync.convergent.preview.confirm': 'Создать CRDT-реплику', 'cloudSync.convergent.preview.status.ready': 'Готово', 'cloudSync.convergent.preview.status.empty': 'Пусто', 'cloudSync.convergent.preview.status.unavailable': 'Недоступно', 'cloudSync.convergent.preview.status.blocked': 'Заблокировано', 'cloudSync.convergent.preview.schema': 'схема', 'cloudSync.convergent.field.presence': 'наличие', 'cloudSync.convergent.field.position': 'позиция', 'cloudSync.convergent.conflicts.title': 'Конфликты полей ({count})', 'cloudSync.convergent.conflict.empty': 'Пусто / удалено', 'cloudSync.convergent.conflict.secretSet': 'Секрет задан', 'cloudSync.convergent.conflict.current': 'текущий вариант', 'cloudSync.convergent.conflict.choose': 'Выбрать', 'cloudSync.convergent.conflict.resolved': 'Конфликт разрешён и синхронизирован', 'cloudSync.convergent.downgrade.desc': 'Заменить файлы v2 у всех подключённых провайдеров снимком старого формата.', 'cloudSync.convergent.downgrade.button': 'Понизить версию', 'cloudSync.convergent.downgrade.confirm': 'Понизить формат у всех подключённых провайдеров? Метаданные CRDT будут удалены после проверки записи.', 'cloudSync.convergent.downgrade.done': 'Формат сходящейся синхронизации понижен', 'cloudSync.status.title': 'Статус синхронизации', 'cloudSync.status.localVersion': 'Локальная версия', 'cloudSync.status.remoteVersion': 'Удалённая версия', 'cloudSync.history.title': 'История синхронизации', 'cloudSync.history.upload': 'Загрузка', 'cloudSync.history.download': 'Скачивание', 'cloudSync.history.resolved': 'Разрешено', 'cloudSync.history.error': 'Ошибка', 'cloudSync.localBackups.title': 'История локальных резервных копий', 'cloudSync.localBackups.desc': 'NetMesh сохраняет локальные точки восстановления перед сменой версии приложения и перед восстановлением хранилища.', 'cloudSync.localBackups.retentionTitle': 'Хранение резервных копий', 'cloudSync.localBackups.retentionDesc': 'Выберите, сколько локальных резервных копий должен хранить NetMesh.', 'cloudSync.localBackups.maxCount': 'Макс. число копий', 'cloudSync.localBackups.maxSaved': 'Хранение резервных копий: {count}', 'cloudSync.localBackups.maxInvalid': 'Введите число от 1 до 100.', 'cloudSync.localBackups.empty': 'Локальных резервных копий пока нет.', 'cloudSync.localBackups.reason.appVersionChange': 'Перед сменой версии приложения', 'cloudSync.localBackups.reason.beforeRestore': 'Перед восстановлением', 'cloudSync.localBackups.versionChange': '{from} -> {to}', 'cloudSync.localBackups.counts': '{hosts} хостов, {keys} ключей, {snippets} сниппетов, {notes} заметок', 'cloudSync.localBackups.restore': 'Восстановить', 'cloudSync.localBackups.restoreSuccess': 'Локальная резервная копия восстановлена.', 'cloudSync.localBackups.restoreFailedTitle': 'Ошибка восстановления', 'cloudSync.localBackups.restoreMissing': 'Резервная копия не найдена.', 'cloudSync.localBackups.protectiveBackupFailed': 'Не удалось создать защитную резервную копию, поэтому восстановление было прервано для защиты ваших текущих данных. Устраните основную проблему (например, доступ к keychain) и попробуйте снова. Подробности: {message}', 'cloudSync.localBackups.restoreConfirmTitle': 'Восстановить эту резервную копию?', 'cloudSync.localBackups.restoreConfirmDesc': 'Ваши текущие хосты, ключи, сниппеты и настройки будут заменены содержимым этой резервной копии. Перед этим автоматически создаётся защитный снимок текущих данных.', 'cloudSync.localBackups.restoreConfirmButton': 'Восстановить', 'cloudSync.localBackups.restoreConfirmCancel': 'Отмена', 'cloudSync.localBackups.unavailableTitle': 'Локальные резервные копии недоступны', 'cloudSync.localBackups.unavailableDesc': 'Эта платформа не предоставляет NetMesh безопасное хранилище ключей, поэтому локальные резервные копии нельзя записывать безопасно. Установите NetMesh в систему с поддерживаемым keychain, чтобы включить историю локальных резервных копий.', 'cloudSync.localBackups.lockedTitle': 'Требуется мастер-ключ', 'cloudSync.localBackups.lockedDesc': 'Настройте или разблокируйте мастер-ключ перед восстановлением резервной копии, чтобы восстановленные учётные данные оставались зашифрованными.', 'cloudSync.revisionHistory.viewButton': 'История', 'cloudSync.revisionHistory.title': 'История версий хранилища', 'cloudSync.revisionHistory.description': 'Просматривайте и восстанавливайте предыдущие версии вашего хранилища из истории ревизий Gist.', 'cloudSync.revisionHistory.empty': 'Ревизии не найдены.', 'cloudSync.revisionHistory.current': 'Текущая', 'cloudSync.revisionHistory.revision': 'Ревизия', 'cloudSync.revisionHistory.revisionPreview': 'Содержимое ревизии', 'cloudSync.revisionHistory.device': 'Устройство', 'cloudSync.revisionHistory.hosts': 'Хосты', 'cloudSync.revisionHistory.keys': 'Ключи', 'cloudSync.revisionHistory.snippets': 'Сниппеты', 'cloudSync.revisionHistory.notes': 'Заметки', 'cloudSync.revisionHistory.identities': 'Идентификаторы', 'cloudSync.revisionHistory.restoreButton': 'Восстановить эту версию', 'cloudSync.revisionHistory.restored': 'Хранилище восстановлено из выбранной ревизии.', 'cloudSync.revisionHistory.revisionNotFound': 'Ревизия не найдена или не содержит данных хранилища.', 'cloudSync.revisionHistory.decryptFailed': 'Не удалось расшифровать эту ревизию. Возможно, она была зашифрована другим мастер-паролем.', 'cloudSync.changeKey.title': 'Изменить мастер-ключ', 'cloudSync.changeKey.current': 'Текущий мастер-ключ', 'cloudSync.changeKey.new': 'Новый мастер-ключ', 'cloudSync.changeKey.confirmNew': 'Подтвердите новый мастер-ключ', 'cloudSync.changeKey.currentPlaceholder': 'Введите текущий мастер-ключ', 'cloudSync.changeKey.newPlaceholder': 'Введите новый мастер-ключ', 'cloudSync.changeKey.confirmPlaceholder': 'Подтвердите новый мастер-ключ', 'cloudSync.changeKey.fillAll': 'Пожалуйста, заполните все поля', 'cloudSync.changeKey.minLength': 'Новый мастер-ключ должен содержать не менее 8 символов', 'cloudSync.changeKey.notMatch': 'Новые мастер-ключи не совпадают', 'cloudSync.changeKey.incorrectCurrent': 'Неверный текущий мастер-ключ', 'cloudSync.changeKey.failed': 'Не удалось изменить мастер-ключ', 'cloudSync.changeKey.desc': 'Это заново зашифрует ваше хранилище. Убедитесь, что вы помните новый ключ.', 'cloudSync.changeKey.showKeys': 'Показать ключи', 'cloudSync.changeKey.updatedToast': 'Мастер-ключ обновлён', 'cloudSync.changeKey.updateButton': 'Обновить ключ', 'cloudSync.unlock.title': 'Введите мастер-ключ', 'cloudSync.unlock.masterKey': 'Мастер-ключ', 'cloudSync.unlock.desc': 'Введите мастер-ключ один раз, чтобы включить зашифрованную синхронизацию. Он будет безопасно сохранён в системном keychain.', 'cloudSync.unlock.placeholder': 'Введите мастер-ключ', 'cloudSync.unlock.empty': 'Пожалуйста, введите мастер-ключ', 'cloudSync.unlock.incorrect': 'Неверный мастер-ключ', 'cloudSync.unlock.failed': 'Не удалось разблокировать хранилище', 'cloudSync.unlock.showKey': 'Показать ключ', 'cloudSync.unlock.notNow': 'Не сейчас', 'cloudSync.unlock.readyToast': 'Хранилище готово', 'cloudSync.unlock.unlockButton': 'Разблокировать', 'cloudSync.header.vaultReady': 'Хранилище готово', 'cloudSync.header.preparingVault': 'Подготовка хранилища...', 'cloudSync.header.providersConnected': 'Подключено провайдеров: {count}', 'cloudSync.githubFlow.title': 'Подключить GitHub', 'cloudSync.githubFlow.desc': 'Скопируйте код ниже и введите его на GitHub, чтобы авторизовать NetMesh.', 'cloudSync.githubFlow.copyCode': 'Скопировать код', 'cloudSync.githubFlow.copied': 'Скопировано!', 'cloudSync.githubFlow.openGitHub': 'Открыть GitHub', 'cloudSync.githubFlow.waiting': 'Ожидание авторизации...', 'cloudSync.conflict.title': 'Обнаружен конфликт версий', 'cloudSync.conflict.desc': 'Выберите, какую версию сохранить', 'cloudSync.conflict.local': 'ЛОКАЛЬНАЯ', 'cloudSync.conflict.cloud': 'ОБЛАЧНАЯ', 'cloudSync.conflict.detailsTitle': 'Изменённые данные', 'cloudSync.conflict.detailsCounts': 'Локально {local} · Облако {cloud} · Конфликты {conflicts}', 'cloudSync.conflict.entity.hosts': 'Хосты', 'cloudSync.conflict.entity.keys': 'Ключи', 'cloudSync.conflict.entity.identities': 'Идентификаторы', 'cloudSync.conflict.entity.proxyProfiles': 'Профили прокси', 'cloudSync.conflict.entity.snippets': 'Сниппеты', 'cloudSync.conflict.entity.notes': 'Заметки', 'cloudSync.conflict.entity.noteGroups': 'Группы заметок', 'cloudSync.conflict.entity.customGroups': 'Группы', 'cloudSync.conflict.entity.snippetPackages': 'Пакеты сниппетов', 'cloudSync.conflict.entity.portForwardingRules': 'Проброс портов', 'cloudSync.conflict.entity.groupConfigs': 'Настройки групп', 'cloudSync.conflict.entity.settings': 'Настройки', 'cloudSync.conflict.keepLocal': 'Перезаписать облако (сохранить локальную)', 'cloudSync.conflict.useCloud': 'Скачать из облака (перезаписать локальную)', 'cloudSync.connect.browserContinue': 'Завершите авторизацию в браузере', 'cloudSync.connect.browserCancelled': 'Предыдущая авторизация в браузере была отменена', 'cloudSync.connect.github.success': 'GitHub успешно подключён', 'cloudSync.connect.github.failedTitle': 'Ошибка подключения GitHub', 'cloudSync.connect.github.timeout': 'Время подключения к GitHub истекло. Проверьте сеть или настройки прокси.', 'cloudSync.connect.github.networkError': 'Не удалось связаться с GitHub. Проверьте сеть или настройки прокси.', 'cloudSync.connect.google.failedTitle': 'Ошибка подключения Google', 'cloudSync.connect.onedrive.failedTitle': 'Ошибка подключения OneDrive', 'cloudSync.sync.success': 'Синхронизировано с {provider}', 'cloudSync.sync.failed': 'Синхронизация не удалась', 'cloudSync.sync.failedTitle': 'Синхронизация не удалась', 'cloudSync.sync.errorTitle': 'Ошибка синхронизации', 'cloudSync.resolve.downloaded': 'Скачаны данные из облака', 'cloudSync.resolve.uploaded': 'Загружены локальные данные', 'cloudSync.resolve.failedTitle': 'Не удалось разрешить конфликт', 'cloudSync.clearLocal.title': 'Очистить локальные данные', 'cloudSync.clearLocal.desc': 'Сбросить локальную версию и историю синхронизации. При следующей синхронизации данные будут скачаны из облака.', 'cloudSync.clearLocal.button': 'Очистить', 'cloudSync.clearLocal.dialog.title': 'Очистить локальные данные хранилища?', 'cloudSync.clearLocal.dialog.desc': 'Локальная версия будет сброшена до 0, а история синхронизации очищена. При следующей синхронизации данные будут скачаны из облака и заменят локальные.', 'cloudSync.clearLocal.dialog.cancel': 'Отмена', 'cloudSync.clearLocal.dialog.confirm': 'Очистить локальные данные', 'cloudSync.clearLocal.toast.title': 'Локальные данные очищены', 'cloudSync.clearLocal.toast.desc': 'Локальная версия сброшена до 0. Выполните синхронизацию для загрузки из облака.', // Keychain 'keychain.filter.key': 'Ключ', 'keychain.filter.certificate': 'Сертификат', 'keychain.action.generateKey': 'Создать ключ', 'keychain.action.importKey': 'Импорт. ключ', 'keychain.action.newIdentity': 'Новый ид-катор', 'keychain.action.importCertificate': 'Импорт. сертификат', 'keychain.view.grid': 'Сетка', 'keychain.view.list': 'Список', 'keychain.section.keys': 'Ключи', 'keychain.section.identities': 'Идентификаторы', 'keychain.count.items': '{count} запис(ей)', 'keychain.empty.title': 'Настройте свои ключи', 'keychain.empty.desc': 'Импортируйте или создайте SSH-ключи для безопасной аутентификации.', 'keychain.panel.generateKey': 'Сгенерировать ключ', 'keychain.panel.newKey': 'Новый ключ', 'keychain.panel.keyDetails': 'Сведения о ключе', 'keychain.panel.editKey': 'Редактировать ключ', 'keychain.panel.editIdentity': 'Редактировать идентификатор', 'keychain.panel.newIdentity': 'Новый идентификатор', 'keychain.panel.keyExport': 'Экспорт ключа', 'keychain.validation.labelRequired': 'Пожалуйста, введите метку для ключа', 'keychain.validation.labelAndPrivateKeyRequired': 'Метка и приватный ключ обязательны', 'keychain.validation.labelAndUsernameRequired': 'Метка и имя пользователя обязательны', 'keychain.error.generationUnavailable': 'Генератор ключей не работает - пожалуйста, убедитесь, что приложение работает в Electron', 'keychain.error.generateKeyPairFailed': 'Не удалось сгенерировать пару ключей', 'keychain.error.generateKeyFailed': 'Не удалось сгенерировать ключ', 'keychain.error.keyGenerationTitle': 'Генерация ключа', 'keychain.export.exportTo': 'Экспортировать в *', 'keychain.export.selectHost': 'Выберите хост', 'keychain.export.location': 'Расположение ~ $1 *', 'keychain.export.filename': 'Имя файла ~ $2 *', 'keychain.export.note': 'Экспорт ключей сейчас поддерживается только в системах {unix}. Используйте раздел {advanced} для настройки скрипта экспорта.', 'keychain.export.script': 'Скрипт *', 'keychain.export.scriptPlaceholder': 'Скрипт экспорта...', 'keychain.export.missingCredentials': 'У хоста нет сохранённого пароля или ключа. Сначала добавьте в хост учётные данные с паролем.', 'keychain.export.successTitle': 'Экспорт выполнен успешно', 'keychain.export.successMessage': 'Публичный ключ экспортирован и привязан к {host}', 'keychain.export.failedTitle': 'Ошибка экспорта', 'keychain.export.failedMessage': 'Не удалось экспортировать ключ: {error}', 'keychain.export.failedPrefix': 'Ошибка экспорта: {error}', 'keychain.export.exitCode': 'Команда завершилась с кодом {code}', 'keychain.export.exporting': 'Экспорт...', 'keychain.export.exportAndAttach': 'Экспортировать и привязать', 'keychain.export.title': 'Экспорт ключа', 'keychain.export.exportToRequired': 'Экспортировать в *', 'keychain.export.selectHostPlaceholder': 'Выберите хост...', 'keychain.export.locationLabel': 'Расположение ~ $1 *', 'keychain.export.filenameLabel': 'Имя файла ~ $2 *', 'keychain.export.advanced': 'Дополнительно', 'keychain.export.note.supportsOnly': 'Экспорт ключей сейчас поддерживается только в', 'keychain.export.note.systems': 'системах.', 'keychain.export.note.use': 'Используйте', 'keychain.export.note.customize': 'раздел для настройки скрипта экспорта.', 'keychain.export.scriptRequired': 'Скрипт *', 'keychain.export.exportToHost': 'Экспортировать на хост', 'keychain.export.failedGeneric': 'Ошибка экспорта: {message}', 'keychain.field.label': 'Метка', 'keychain.field.labelRequired': 'Метка *', 'keychain.field.labelPlaceholder': 'Метка ключа', 'keychain.field.privateKeyRequired': 'Приватный ключ *', 'keychain.field.publicKey': 'Публичный ключ', 'keychain.field.certificatePlaceholder': 'Содержимое сертификата (необязательно)', 'keychain.generate.keyType': 'Тип ключа', 'keychain.generate.keySize': 'Размер ключа', 'keychain.generate.labelPlaceholder': 'Метка ключа', 'keychain.generate.passphrasePlaceholder': 'Парольная фраза (необязательно)', 'keychain.generate.savePassphrase': 'Сохранить парольную фразу', 'keychain.generate.generate': 'Сгенерировать', 'keychain.generate.generateSave': 'Сгенерировать и сохранить', 'keychain.import.dropHint': 'Перетащите сюда файл ключа', 'keychain.import.importFromFile': 'Импортировать из файла', 'keychain.import.saveKey': 'Сохранить ключ', 'keychain.import.importedKeyLabel': 'Импортированный ключ', 'keychain.identity.usernameRequired': 'Имя пользователя *', 'keychain.identity.method.passwordOnly': 'Пароль', 'keychain.identity.summary.password': 'Пароль аутентификации', 'keychain.identity.summary.key': 'Ключ аутентификации', 'keychain.identity.summary.certificate': 'Сертификат аутентификации', 'keychain.identity.summary.passwordAndKey': 'Пароль и ключ аутентификации', 'keychain.identity.summary.passwordAndCertificate': 'Пароль и сертификат аутентификации', 'keychain.identity.summary.none': 'Нет учётных данных', 'keychain.identity.selectCredential': 'Выберите {kind}', 'keychain.identity.save': 'Сохранить', 'keychain.identity.update': 'Обновить', 'keychain.keyDialog.newTitle': 'Новый ключ', 'keychain.keyDialog.newDesc': 'Добавить новый SSH-ключ', 'keychain.keyDialog.editTitle': 'Редактировать ключ', 'keychain.keyDialog.editDesc': 'Обновить этот SSH-ключ', 'keychain.keyDialog.updateKey': 'Обновить ключ', // Tabs 'tabs.closeSessionAria': 'Закрыть сессию', 'tabs.closeLogViewAria': 'Закрыть просмотр журнала', 'tabs.closePluginViewAria': 'Закрыть {title}', 'tabs.logPrefix': 'Журнал:', 'tabs.logLocal': 'Локальный', 'tabs.copyTab': 'Копировать вкладку', 'tabs.duplicateSession': 'Дублировать сессию', 'tabs.copyTabToNewWindow': 'Копировать вкладку в новое окно', 'tabs.copyTabToNewWindowFailed': 'Не удалось открыть вкладку в новом окне', 'tabs.closeOthers': 'Закрыть остальные', 'tabs.closeToRight': 'Закрыть вкладки справа', 'tabs.closeAll': 'Закрыть все', 'keychain.edit.labelRequired': 'Метка *', 'keychain.edit.keyLabelPlaceholder': 'Метка ключа', 'keychain.edit.privateKeyRequired': 'Приватный ключ *', 'keychain.edit.publicKey': 'Публичный ключ', 'keychain.edit.certificate': 'Сертификат', 'keychain.edit.certificatePlaceholder': 'Содержимое сертификата (необязательно)', 'keychain.edit.filePath': 'Путь к файлу', 'keychain.edit.keyExport': 'Экспорт ключа', 'keychain.edit.exportToHost': 'Экспортировать на хост', // Snippets 'snippets.searchPlaceholder': 'Поиск сниппетов...', 'snippets.action.newSnippet': 'Новый сниппет', 'snippets.action.newPackage': 'Новый пакет', 'snippets.action.import': 'Импорт', 'snippets.action.selectSnippets': 'Выбрать сниппеты', 'snippets.panel.newTitle': 'Новый сниппет', 'snippets.panel.editTitle': 'Редактировать сниппет', 'snippets.panel.resizeWidth': 'Изменить ширину панели', 'snippets.field.description': 'Описание действия', 'snippets.field.descriptionPlaceholder': 'Например: проверить сетевую нагрузку', 'snippets.field.package': 'Добавить пакет', 'snippets.field.packagePlaceholder': 'Выберите или создайте пакет', 'snippets.field.createPackage': 'Создать пакет', 'snippets.field.scriptRequired': 'Скрипт *', 'snippets.scriptEditor.expand': 'Открыть в окне', 'snippets.scriptEditor.resize': 'Изменить высоту редактора', 'snippets.scriptEditor.modalTitle': 'Редактировать скрипт', 'snippets.variables.dialogTitle': 'Переменные сниппета', 'snippets.variables.dialogDesc': 'Заполните значения для "{label}" перед запуском.', 'snippets.variables.hint': 'Значения вставляются в скрипт как есть (без shell-экранирования).', 'snippets.variables.preview': 'Предпросмотр', 'snippets.variables.placeholder': 'Введите значение', 'snippets.variables.placeholderDefault': 'По умолчанию: {value}', 'snippets.variables.required': 'Эта переменная обязательна', 'snippets.variables.run': 'Запустить', 'snippets.field.variablesHelp': 'Используйте {{name}} или {{name:default}} для плейсхолдеров в скрипте.', 'snippets.field.variablesDetected': 'Переменные', 'snippets.field.variableDefault': 'по умолчанию {value}', 'snippets.targets.title': 'Цели', 'snippets.targets.add': 'Добавить цели', 'snippets.targets.selectHosts': 'Хосты', 'snippets.targets.selectGroups': 'Группы', 'snippets.targets.noGroups': 'Группы не найдены', 'snippets.history.title': 'История оболочки', 'snippets.history.subtitle': '{count} команд', 'snippets.history.emptyTitle': 'История оболочки пока пуста', 'snippets.history.emptyDesc': 'Здесь будут появляться выполненные вами команды', 'snippets.history.loadMore': 'Загрузить ещё', 'snippets.history.separator': '•', 'snippets.history.labelPlaceholder': 'Задайте метку для этого сниппета', 'snippets.history.saveAsSnippet': 'Сохранить как сниппет', 'snippets.history.time.justNow': 'только что', 'snippets.history.time.minutesAgo': '{count}м назад', 'snippets.history.time.hoursAgo': '{count}ч назад', 'snippets.history.time.daysAgo': '{count}д назад', 'snippets.breadcrumb.allPackages': 'Все пакеты', 'snippets.breadcrumb.separator': '›', 'snippets.empty.title': 'Создать сниппет', 'snippets.empty.desc': 'Сохраняйте самые используемые команды как сниппеты, чтобы повторно использовать их в один клик.', 'snippets.search.noResults.title': 'Нет совпадений', 'snippets.search.noResults.desc': 'Ни один сниппет или пакет не соответствует запросу "{query}". Попробуйте другой поисковый запрос или очистите поиск для просмотра.', 'snippets.section.packages': 'Пакеты', 'snippets.section.snippets': 'Сниппеты', 'snippets.package.count': '{count} сниппет(ов)', 'snippets.commandFallback': 'Команда', 'snippets.view.grid': 'Сетка', 'snippets.view.list': 'Список', 'snippets.selection.selected': 'Выбрано: {count}', 'snippets.selection.selectVisible': 'Выбрать видимые', 'snippets.selection.deselectAll': 'Снять выбор', 'snippets.selection.exportSelected': 'Экспорт выбранных ({count})', 'snippets.selection.deleteSelected': 'Удалить ({count})', 'snippets.selection.deleteConfirmTitle': 'Удалить выбранные элементы ({count})?', 'snippets.selection.deleteConfirmDesc': 'Выбранные элементы будут удалены без возможности восстановления.', 'snippets.selection.deleteSuccess': 'Удалено выбранных элементов: {count}.', 'snippets.export.snippet': 'Экспорт сниппета', 'snippets.export.package': 'Экспорт пакета', 'snippets.export.toast.empty': 'Нет сниппетов для экспорта.', 'snippets.export.toast.successTitle': 'Экспорт готов', 'snippets.export.toast.success': 'Экспортировано сниппетов: {count}.', 'snippets.import.toast.empty': 'Не найдено сниппетов для импорта.', 'snippets.import.toast.failedTitle': 'Импорт не удался', 'snippets.import.toast.invalidDesc': 'Это невалидный файл сниппетов NetMesh.', 'snippets.import.toast.successTitle': 'Импорт завершён', 'snippets.import.toast.summary': 'Импортировано: {imported}, перезаписано: {overwritten}, пропущено: {skipped}.', 'snippets.import.modal.title': 'Импорт сниппетов', 'snippets.import.modal.desc': 'Выберите один или несколько JSON-файлов сниппетов NetMesh. NetMesh сначала покажет результат разбора и ничего не импортирует без подтверждения.', 'snippets.import.modal.exampleTitle': 'Пример JSON', 'snippets.import.modal.noFile': 'Файл ещё не выбран. Используйте пример ниже или обычный JSON-массив сниппетов, затем выберите один или несколько файлов.', 'snippets.import.modal.chooseFile': 'Выбрать файл', 'snippets.import.modal.downloadExamples': 'Скачать примеры', 'snippets.import.modal.multipleFiles': 'Выбрано файлов: {count}', 'snippets.import.modal.parsedSummary': '{files} файл(ов), {total} сниппет(ов), {packages} пакет(ов), повторяющихся команд: {conflicts}. Привязки к хостам игнорируются.', 'snippets.import.modal.confirm': 'Подтвердить импорт', 'snippets.import.conflict.title': 'Импортировать сниппеты?', 'snippets.import.conflict.desc': 'Файл «{file}» содержит {total} сниппет(ов), из них повторяющихся команд: {conflicts}.', 'snippets.import.conflict.hostBindingsNote': 'Привязки сниппетов к хостам не импортируются и не экспортируются.', 'snippets.import.conflict.skip': 'Пропустить повторы', 'snippets.import.conflict.overwrite': 'Перезаписать повторы', 'snippets.packageDialog.title': 'Новый пакет', 'snippets.packageDialog.parent': 'Родитель: {parent}', 'snippets.packageDialog.root': 'Корень', 'snippets.packageDialog.placeholder': 'например, ops/maintenance', 'snippets.packageDialog.hint': 'Используйте "/" для создания вложенных пакетов.', // Snippets Rename Dialog 'snippets.renameDialog.title': 'Переименовать пакет', 'snippets.renameDialog.currentPath': 'Текущий путь: {path}', 'snippets.renameDialog.placeholder': 'Введите новое имя', 'snippets.renameDialog.error.empty': 'Имя пакета не может быть пустым', 'snippets.renameDialog.error.duplicate': 'Пакет с таким именем уже существует', 'snippets.renameDialog.error.invalidChars': 'Имя пакета может содержать только буквы, цифры, дефисы и подчёркивания', 'snippets.field.noAutoRun': 'Только вставить (не выполнять автоматически)', 'snippets.field.multiLineRunMode': 'Многострочный запуск', 'snippets.field.multiLineRunMode.paste': 'Отправить сразу', 'snippets.field.multiLineRunMode.lineDelay': 'Отправлять построчно', 'snippets.field.multiLineRunModeHint': 'Построчный режим подходит для логинов с подсказками и макросов устройств.', // Snippet Shortkey 'snippets.field.shortkey': 'Сочетание клавиш', 'snippets.shortkey.placeholder': 'Нажмите, чтобы задать сочетание', 'snippets.shortkey.recording': 'Нажмите сочетание клавиш...', 'snippets.shortkey.hint': 'Нажмите это сочетание в терминале, чтобы быстро отправить команду.', 'snippets.shortkey.clear': 'Очистить сочетание', 'snippets.shortkey.error.systemConflict': 'Это сочетание конфликтует с «{name}»', 'snippets.shortkey.error.snippetConflict': 'Это сочетание уже используется сниппетом: {name}', // Serial Port 'serial.button': 'Серийный', 'serial.modal.title': 'Подключение к последовательному порту', 'serial.modal.desc': 'Настройте параметры подключения к последовательному порту', 'serial.field.port': 'Последовательный порт', 'serial.field.selectPort': 'Выберите порт...', 'serial.field.baudRate': 'Скорость передачи', 'serial.field.dataBits': 'Биты данных', 'serial.field.stopBits': 'Стоп-биты', 'serial.field.stopBits15Warning': 'Стоп-биты 1,5 могут поддерживаться не всеми устройствами Windows', 'serial.field.parity': 'Чётность', 'serial.field.flowControl': 'Управление потоком', 'serial.noPorts': 'Последовательные порты не обнаружены. Подключите устройство и обновите список.', 'serial.field.customPort': 'Путь к пользовательскому порту', 'serial.field.customPortPlaceholder': 'например, /dev/ttys001 или COM1', 'serial.type.hardware': 'Аппаратный', 'serial.type.pseudo': 'Псевдотерминал', 'serial.type.custom': 'Пользовательский', 'serial.parity.none': 'Нет', 'serial.parity.even': 'Чётная', 'serial.parity.odd': 'Нечётная', 'serial.parity.mark': 'Mark', 'serial.parity.space': 'Space', 'serial.flowControl.none': 'Нет', 'serial.flowControl.xon/xoff': 'XON/XOFF (программный)', 'serial.flowControl.rts/cts': 'RTS/CTS (аппаратный)', 'serial.field.localEcho': 'Принудительное локальное эхо', 'serial.field.localEchoDesc': 'Локально отображать вводимые символы (для устройств без удалённого эха)', 'serial.field.lineMode': 'Построчный режим', 'serial.field.lineModeDesc': 'Буферизовать ввод и отправлять по Enter (вместо посимвольной отправки)', 'serial.field.backspaceBehavior': 'Клавиша Backspace', 'serial.field.backspaceBehaviorDesc': 'Используйте Ctrl+H для сетевых устройств, которые не реагируют на код Backspace по умолчанию.', 'serial.backspace.default': 'По умолчанию (DEL, 0x7F)', 'serial.backspace.ctrlH': 'Ctrl+H (BS, 0x08)', 'serial.field.charset': 'Кодировка', 'serial.connectionError': 'Не удалось подключиться к последовательному порту', 'serial.field.baudRatePlaceholder': 'Выберите или введите скорость...', 'serial.field.baudRateEmpty': 'Введите пользовательскую скорость передачи', 'serial.field.customBaudRate': 'Используется пользовательская скорость передачи', 'serial.field.saveConfig': 'Сохранить конфигурацию', 'serial.field.saveConfigDesc': 'Сохраните эту последовательную конфигурацию в хостах для быстрого доступа', 'serial.field.configLabel': 'Имя конфигурации', 'serial.field.configLabelPlaceholder': 'например, Arduino Uno', 'serial.connectAndSave': 'Подключить и сохранить', 'serial.edit.title': 'Настройки последовательного порта', // Keyboard Interactive Authentication (2FA/MFA) 'keyboard.interactive.title': 'Требуется аутентификация', 'keyboard.interactive.desc': 'Сервер требует дополнительную аутентификацию.', 'keyboard.interactive.descWithHost': 'Сервер {hostname} требует дополнительную аутентификацию.', 'keyboard.interactive.response': 'Ответ', 'keyboard.interactive.enterCode': 'Введите код подтверждения', 'keyboard.interactive.enterResponse': 'Введите ответ', 'keyboard.interactive.submit': 'Отправить', 'keyboard.interactive.verifying': 'Проверка...', 'keyboard.interactive.savePassword': 'Сохранить пароль', // Passphrase Modal for encrypted SSH keys 'passphrase.title': 'Парольная фраза SSH-ключа', 'passphrase.desc': 'Введите парольную фразу для {keyName}', 'passphrase.descWithHost': 'Введите парольную фразу для {keyName}, чтобы подключиться к {hostname}', 'passphrase.label': 'Парольная фраза', 'passphrase.keyPath': 'Ключ', 'passphrase.unlock': 'Разблокировать', 'passphrase.unlocking': 'Разблокировка...', 'passphrase.skip': 'Пропустить', 'passphrase.remember': 'Запомнить эту парольную фразу', // Text Editor 'sftp.editor.wordWrap': 'Перенос строк', 'sftp.editor.maximize': 'Развернуть', 'sftp.editor.unsavedTitle': 'Несохранённые изменения', 'sftp.editor.unsavedMessage': 'В файле {fileName} есть несохранённые изменения. Сохранить перед закрытием?', 'sftp.editor.discardChanges': 'Отбросить', 'sftp.editor.saveAndClose': 'Сохранить и закрыть', 'sftp.editor.quitBlockedByDirty': 'Есть несохранённые редакторы — перед выходом сохраните изменения или отбросьте их', };