@goodandready/dsh-russian-lang 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -53
- package/README.ru.md +0 -52
- package/docs/media/banner.jpg +0 -0
- package/lib/client.js +5 -5
- package/lib/locales/core.json +1 -1
- package/lib/locales/plugins/03-dshmarket.json +1 -1
- package/lib/locales/plugins/10-kanban.json +1 -1
- package/lib/locales/plugins/15-commandcode.json +1 -1
- package/lib/locales/plugins/17-dsh-context.json +1 -1
- package/lib/locales/plugins/20-skill-explorer.json +1 -1
- package/lib/locales/plugins/26-config-manager.json +1 -1
- package/lib/locales/plugins/27-config-manager-sync.json +1 -1
- package/lib/locales/plugins/28-config-manager-market.json +1 -1
- package/lib/locales/plugins/30-config-manager-history.json +1 -1
- package/lib/locales/plugins/34-key-rotation.json +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"config-manager":{"about.authorLabel":"Author","about.cli.docs":"CLI documentation","about.cli.hint":"The GUI lives inside DSH — when DSH cannot start, the separately installed CLI (dsh-config-manager) is your first rescue tool: list snapshots / offline restore / one-click DSH reinstall, no DSH runtime needed. Install once and use it on any machine:","about.cli.title":"CLI Rescue Tool","about.diag.bundles":"бандлы: {bundles}","about.diag.hint":"Если данные не совпадают с вашей конфигурацией, проверьте аргумент DSH --profile и переменную DSH_HOME.","about.diag.label":"Источник списка плагинов","about.diag.manifestUnreadable":"В каталоге отсутствует читаемый package.json — список плагинов пуст. Проверьте соответствие профиля DSH и переменной DSH_HOME этому пути.","about.diag.pluginCount":"Обнаружено плагинов: {count}","about.diag.profile":"Профиль: {profile}","about.diag.profileDir":"Каталог: {path}","about.docs":"Documentation","about.dshVersion":"DSH {version}","about.issues":"Issues","about.links":"Links","about.loading":"Loading version info…","about.official":"Official","about.releaseNotes":"Release Notes","about.releaseNotes.allLoaded":"All releases loaded","about.releaseNotes.confirm":"Confirm","about.releaseNotes.empty":"No releases found.","about.releaseNotes.error":"Failed to load release notes. Please check your network connection or try again later.","about.releaseNotes.latest":"Latest","about.releaseNotes.loading":"Loading release notes…","about.releaseNotes.loadingMore":"Loading more releases…","about.releaseNotes.neverShow":"Don't show again","about.releaseNotes.noBody":"No description provided for this release.","about.releaseNotes.prerelease":"Pre-release","about.releaseNotes.retry":"Retry","about.releaseNotes.title":"Release Notes","about.releaseNotes.viewOnGithub":"View all releases on GitHub","about.releaseNotes.viewSingleOnGithub":"View on GitHub","about.repo":"GitHub Repository","about.retryStatus":"Retry","about.star":"⭐ Star on GitHub","about.subtitle":"Plugin info, author and feedback links","about.title":"About DSH Config Manager","about.version":"Version {version}","backupFiles.delete":"Delete","backupFiles.deleteConfirm":"Delete backup file \\«{name}\\»? This cannot be undone.","backupFiles.deleteConfirmTitle":"Delete backup file","backupFiles.deleted":"Удалён файл бэкапа «{name}»","backupFiles.download":"Download","backupFiles.empty":"No backup files yet. They appear here after a manual export or once scheduled backups are enabled.","backupFiles.error":"Failed to load backup files","backupFiles.hint":"All export artifacts (manual exports and scheduled backups) are managed here: download to your machine, import to restore, or delete. Scheduled backups auto-keep the latest 10.","backupFiles.import":"Import","backupFiles.inspect":"Inspect / Compare","backupFiles.inspectDiff":"Diff against this backup (read-only preview)","backupFiles.inspectEmpty":"This backup could not be analyzed (corrupt or unsupported format)","backupFiles.inspectGroup.changes":"Changes (will apply)","backupFiles.inspectGroup.conflicts":"Conflicts (need decision)","backupFiles.inspectGroup.others":"Others","backupFiles.inspectGroup.paths":"Path mappings (need handling)","backupFiles.inspectGroup.skipped":"Identical (nothing to do)","backupFiles.inspectItems":"Change details","backupFiles.inspectLoading":"Analyzing backup contents…","backupFiles.inspectSections":"Sections included","backupFiles.loading":"Loading backup files…","backupFiles.name":"Файл","backupFiles.noteUnreadable":"(примечание не читается)","backupFiles.searchEmpty":"No matching backup files","backupFiles.searchPlaceholder":"Search by file name or note…","backupFiles.size":"Размер","backupFiles.source":"Источник","backupFiles.source.auto":"Scheduled","backupFiles.source.manual":"Manual","backupFiles.time":"Изменён","backupFiles.title":"Backup Files","backupSchedule.consecutiveFailures":"Scheduled backups failed {count} time(s) in a row — check the configuration (disk space / permissions / section export errors)","backupSchedule.customHint":"Runs a full backup once a week at the selected weekday and time (missed triggers are not backfilled)","backupSchedule.enabled":"Enable scheduled backups","backupSchedule.enabledHint":"When on, DSH backs up automatically on the cadence below; one run fires on every startup (skipped if less than 1h since the last run).","backupSchedule.error":"Failed to load scheduled backup settings","backupSchedule.hint":"Automatically export a full backup ZIP in the background on a fixed cadence (secrets are never included, never encrypted — use manual export for encryption). Config lives in sync/backup-schedule.json and migrates with the self section.","backupSchedule.interval":"Backup interval","backupSchedule.interval.12h":"Every 12 hours","backupSchedule.interval.24h":"Every 24 hours","backupSchedule.interval.6h":"Every 6 hours","backupSchedule.interval.7d":"Every 7 days","backupSchedule.interval.custom":"Custom (weekly at a fixed time)","backupSchedule.lastRun":"Last run","backupSchedule.loading":"Loading scheduled backup settings…","backupSchedule.never":"Never run","backupSchedule.runNow":"Back up now","backupSchedule.running":"Backing up…","backupSchedule.save":"Save settings","backupSchedule.saved":"Settings saved","backupSchedule.status.failed":"Failed","backupSchedule.status.skipped":"Skipped","backupSchedule.status.success":"Success","backupSchedule.title":"Scheduled Full Backups","backupSchedule.weekday.friday":"Friday","backupSchedule.weekday.monday":"Monday","backupSchedule.weekday.saturday":"Saturday","backupSchedule.weekday.sunday":"Sunday","backupSchedule.weekday.thursday":"Thursday","backupSchedule.weekday.tuesday":"Tuesday","backupSchedule.weekday.wednesday":"Wednesday","common.back":"Назад","common.cancel":"Отмена","common.close":"Закрыть","common.confirm":"Confirm","common.done":"Готово","common.loading":"Загрузка…","common.next":"Далее","common.retry":"Повторить","common.unknownError":"Неизвестная ошибка","error.hint":"Error messages are auto-redacted and never leak secrets.","error.title":"Operation failed","export.download":"Download backup file","export.encrypt":"Encrypt backup","export.encryptHint":"Encrypt the entire backup file with a password (AES-256-GCM). The password is used once and never written into the backup or any config file; it is required to unlock the backup on import.","export.excluded":"Excluded","export.fileName":"Custom file name","export.fileNameHint":"Leave empty to auto-name (dsh-config-<date>.zip); no need to type .zip — it is appended automatically. Letters, digits, spaces, — _ . only.","export.fileNameInvalid":"Invalid file name: letters, digits, spaces, — _ . only, no path separators.","export.group.unknown":"Other","export.includeSecrets":"Export secrets","export.includeSecretsHint":"Write the real secrets (credential values) into the backup. Secrets must be stored encrypted: checking this also checks «Encrypt backup»; unchecking «Encrypt backup» unchecks this.","export.included":"Included","export.mode.custom":"Custom Export","export.mode.customHint":"Select sections per group.","export.mode.quick":"Quick Export","export.mode.quickHint":"One-click export of recommended sections (portable, no device-specific data) for routine backups.","export.naming":"File name & note (optional)","export.note":"Note","export.noteHint":"The note is shown in the local backup list (and travels with the config backup) so you can tell exports apart.","export.notePlaceholder":"e.g. Full backup before migration / 2026-08 archive","export.password":"Backup encryption password","export.passwordConfirm":"Confirm password","export.passwordMismatch":"Passwords do not match","export.passwordRequired":"An encryption password is required when encrypting the backup","export.preview":"Preview export contents","export.previewSkipped":"{count} section(s) failed to export and were skipped","export.previewSummary":"Will package {sections} section(s), approx. {size} (no secrets)","export.previewing":"Counting…","export.run":"Start Export","export.running":"Exporting…","export.saved":"Saved to downloads: {name}","export.security":"Security options","export.selectionWarnings":"Device-specific sections may not apply on another machine:","import.analyzing":"Analyzing backup…","import.compatibility.fail":"Backup analysis failed: {reason}","import.compatibility.ok":"The backup can be imported","import.compatibility.paths":"Проблем с путями: {count}","import.compatibility.plugins":"установлено {installed} · к установке {toInstall}","import.compatibility.score":"Compatibility score: {score}","import.compatibility.score.excellent":"Отличная","import.compatibility.score.good":"Хорошая","import.compatibility.score.partial":"Частичная","import.compatibility.score.unsupported":"Не поддерживается","import.compatibility.secrets":"Секретов для повторного ввода: {count}","import.compatibility.sections":"Разделов: {count}","import.compatibility.sectionsTitle":"Разделы в этой резервной копии","import.compatibility.title":"Compatibility","import.confirm.encrypted":"The backup password will decrypt and restore {count} credential(s).","import.confirm.execute":"Confirm Import","import.confirm.warning":"Import modifies the current DSH configuration; a safety snapshot is created first and everything rolls back on failure.","import.conflicts.hint":"These items already exist on this machine and differ from the backup. Decide per item.","import.conflicts.keepCurrent":"Keep current","import.conflicts.keepCurrentAll":"Keep all current","import.conflicts.review":"Decide later","import.conflicts.title":"Resolve Conflicts","import.conflicts.unresolved":"{count} item(s) unresolved","import.conflicts.useImported":"Use backup","import.conflicts.useImportedAll":"Use all backup","import.decrypt.badge":"encrypted backup","import.decrypt.previewHint":"Encrypted backup: credentials are restored automatically by the unlock password — no further password prompt.","import.decryptArchive.hint":"This backup is fully encrypted (the whole file is password-protected). Enter the password set at export time to decrypt and continue — encrypted credentials inside are restored with the same password, so this is the only password prompt. It is used once and never written to disk.","import.decryptArchive.passwordPlaceholder":"Enter backup encryption password","import.decryptArchive.title":"Unlock Encrypted Backup","import.decryptArchive.unlock":"Unlock & Continue","import.decryptArchive.unlocking":"Unlocking…","import.importing":"Importing… (installing many plugins may take a few minutes; keep this page open)","import.log.empty":"Waiting for command output…","import.log.newOutput":"↓ New output","import.log.title":"Import Log","import.paths.hint":"Absolute paths in the backup may not exist on this machine. Map each path to a new location (leave blank to skip).","import.paths.new":"New path","import.paths.old":"Original path","import.paths.title":"Path Mapping","import.paths.unresolved":"{count} path(s) unmapped","import.preview.conflicts":"{count} conflict(s)","import.preview.mcp":"{count} MCP server(s) added","import.preview.paths":"{count} path mapping(s) needed","import.preview.plugins":"{count} plugin(s) to install","import.preview.prompts":"{count} prompt(s)","import.preview.restart":"A DSH restart is required after import","import.preview.secrets":"{count} secret(s) to re-enter","import.preview.settings":"{count} settings update(s)","import.preview.title":"Import Preview","import.preview.unchanged":"{count} item(s) already identical (skipped)","import.preview.willChange":"{count} item(s) will change","import.retrySkipped":"Retry failed/skipped items ({count})","import.rollbackOnError":"Roll back everything on failure (recommended)","import.secrets.hint":"These credentials were not exported with the backup (security by design). Enter them manually to use them here; leave blank to skip.","import.secrets.optional":"(optional)","import.secrets.required":"(required)","import.secrets.title":"Re-enter Secrets","import.select.browse":"Choose ZIP file","import.select.cancel":"Cancel selection","import.select.file":"Selected: {name}","import.select.hint":"Pick a dsh-config-*.zip backup exported from DSH to begin. Analysis is read-only and changes nothing.","import.select.reselect":"Reselect","import.select.title":"Select Backup File","import.skipCurrent":"Skip current plugin","import.skipPending":"Skipping… the rest of the import continues","import.stage.analyze":"Анализ","import.stage.confirm":"Подтверждение","import.stage.decide":"Предпросмотр и решение","import.stage.done":"Готово","import.stage.execute":"Выполнение","import.stage.select":"Выбор","import.stepper.label":"Шаг {current} из {total}: {label}","lifecycle.autoOff":"Автоснимки отключены","lifecycle.autoOn":"Автоснимки включены","lifecycle.crash.advice.check-bundles":"Перейдите в режим спасения или проверьте dsh.profile.bundles в package.json.","lifecycle.crash.advice.check-patch-tree":"Перейдите в режим спасения для отключения плагинов, затем найдите проблемный бисекцией.","lifecycle.crash.advice.repair-session":"Сначала восстановите повреждённые файлы сессий.","lifecycle.crash.advice.restore-last-good":"Рекомендуется откат к последнему заведомо работоспособному состоянию.","lifecycle.crash.lastGood":"Последнее рабочее: {time}","lifecycle.crash.reason.bundle-check":"Не удалось разрешить бандл плагина","lifecycle.crash.reason.patch-tree":"Сбой загрузки плагина (конфликт дерева монтирования)","lifecycle.crash.reason.session-corrupt":"Повреждён файл сессии","lifecycle.crash.reason.unknown":"Причина неизвестна","lifecycle.crash.restoreLastGood":"Откатить к последнему рабочему","lifecycle.crash.title":"Предыдущий запуск не был завершён","lifecycle.delete":"Удалить","lifecycle.deleteConfirm":"Удалить снимок {id}? Его больше нельзя будет использовать для отката.","lifecycle.empty":"Снимков конфигурации пока нет. При включённых автоснимках изменения сохраняются автоматически.","lifecycle.guided.action":"Открыть мастер восстановления","lifecycle.guided.desc":"Эта страница предназначена для быстрого отката в один клик (undo/redo). Если DSH не запускается из-за сбоя или прерванной транзакции, используйте мастер на странице «Резервные копии»: он покажет последствия и проверит результат.","lifecycle.guided.title":"Требуется пошаговое восстановление?","lifecycle.kind.auto":"авто","lifecycle.kind.baseline":"базовый","lifecycle.kind.manual":"ручной","lifecycle.kind.pre-restore":"до отката","lifecycle.kind.undo":"откат","lifecycle.lastAuto":"Последний автоснимок","lifecycle.never":"никогда","lifecycle.redo":"Повторить (Redo)","lifecycle.redoNone":"Нечего повторять","lifecycle.redoOk":"Восстановлено состояние {id}","lifecycle.redoTitle":"Повторить последнее отменённое изменение (если ничего не менялось)","lifecycle.rescue.active":"Режим спасения ВКЛЮЧЁН ({time}) — перезапустите DSH для применения.","lifecycle.rescue.confirm":"Режим спасения перезаписывает профильный cordis.patch.yml, очищает домашний cordis.patch.yml и сужает dsh.profile.bundles до ядра DSH и этого плагина (остальные пользовательские плагины не загружаются при старте; их пакеты НЕ удаляются). Выход полностью восстанавливает исходное состояние из резервной копии. После этого перезапустите DSH. Продолжить?","lifecycle.rescue.desc":"Если DSH не запускается из-за плагинов, этот режим сужает список монтирования до «ядро DSH + этот плагин»: перезаписывает оба слоя cordis.patch.yml и убирает сторонние плагины из dsh.profile.bundles. Пакеты не удаляются, а выход восстанавливает всё из резервной копии.","lifecycle.rescue.enter":"Войти в режим спасения","lifecycle.rescue.exit":"Выйти из режима спасения","lifecycle.rescue.exitConfirm":"Выход из режима спасения восстанавливает cordis.patch.yml и package.json из резервных копий, возвращая прежний набор плагинов. После этого необходимо перезапустить DSH. Продолжить?","lifecycle.rescue.inactive":"Режим спасения выключен","lifecycle.rescue.off":"Режим спасения отключён","lifecycle.rescue.on":"Режим спасения включён","lifecycle.rescue.restartHint":"Для применения изменений требуется перезапустить DSH.","lifecycle.rescue.stale":"Устаревший флаг спасения (смена машины или пересоздание home)","lifecycle.rescue.title":"Режим спасения","lifecycle.sections":"{count} раздел(ов)","lifecycle.snapshotCreated":"Создан снимок {id}","lifecycle.snapshotNow":"Создать снимок сейчас","lifecycle.snapshotReason":"Причина создания снимка (необязательно)","lifecycle.snapshots":"Снимки состояния конфигурации","lifecycle.undo":"Отменить (Undo)","lifecycle.undoConfirm":"Отмена вернёт конфигурацию к предыдущему отличающемуся состоянию. Текущее состояние будет сохранено перед откатом, чтобы вы могли повторить его (Redo). Продолжить?","lifecycle.undoNone":"Нечего отменять","lifecycle.undoOk":"Выполнен откат к {id}","lifecycle.undoTitle":"Отменить последнее изменение конфигурации (откат к ближайшему снимку с другим содержимым)","nav.about":"О плагине","nav.activity":"Активность","nav.backups":"Бэкапы","nav.export":"Экспорт","nav.import":"Импорт","nav.market":"Витрина","nav.overview":"Обзор","nav.profiles":"Профили","nav.recovery":"Восстановление","nav.refresh":"Обновить","nav.sync":"Синхронизация","nextSteps.done":"All done — nothing else to handle","nextSteps.restart.hint":"These changes only take effect after restarting DSH:","nextSteps.restart.title":"Restart DSH to apply ({count})","nextSteps.secrets.hint":"These credentials were not exported with the backup; re-enter them on this machine:","nextSteps.secrets.title":"Re-enter credentials ({count})","nextSteps.title":"Next steps","nextSteps.unresolved.hint":"These items were not applied; you can retry them from the result page:","nextSteps.unresolved.title":"Failed / skipped ({count})","overview.activity.copy":"Копировать","overview.activity.empty":"Активности пока нет (здесь появятся бэкапы, импорты и синхронизации)","overview.activity.redacted":"(имя файла скрыто)","overview.activity.title":"Недавняя активность","overview.activity.viewAll":"Смотреть все","overview.empty.body":"После создания первого бэкапа или снимка здесь отобразятся статус здоровья и недавняя активность.","overview.empty.title":"Начните защиту своей конфигурации","overview.health.noBackup":"Резервных копий пока нет — сначала создайте бэкап или снимок","overview.health.ok":"Конфигурация в полном порядке","overview.health.recovery":"Неразрешённые элементы восстановления требуют внимания","overview.health.recoveryAction":"Перейти к восстановлению инцидентов","overview.health.scheduleFailed":"Последний бэкап по расписанию не удался — проверьте настройки","overview.kind.autosync":"Автосинхронизация","overview.kind.backup":"Резервное копирование","overview.kind.import":"Импорт","overview.kind.other":"Другая операция","overview.kind.profile-delete":"Удаление профиля","overview.kind.profile-import":"Импорт профиля","overview.kind.profile-rename":"Переименование профиля","overview.kind.profile-save":"Сохранение профиля","overview.kind.profile-switch":"Переключение профиля","overview.kind.recovery":"Восстановление","overview.kind.restore":"Восстановление","overview.kind.rollback":"Откат","overview.kind.snapshot-delete":"Удаление снимка","overview.kind.snapshot-prune":"Очистка снимков","overview.kind.sync-apply":"Применение синхронизации","overview.loading":"Загрузка обзора…","overview.location.dir":"Каталог бэкапов","overview.location.lastRun":"Последний запуск","overview.location.nextRun":"Следующий запуск","overview.location.retention":"Снимки","overview.location.retentionValue":"{used} / {limit}","overview.location.schedule":"Расписание","overview.location.scheduleOff":"Выкл.","overview.location.scheduleOn":"{interval} · посл. {time}","overview.location.title":"Хранилище бэкапов","overview.location.totalSize":"Общий объём","overview.meta.lastBackup":"Посл.: {time}","overview.meta.never":"Никогда не запускалось","overview.meta.noBackup":"Записей пока нет","overview.meta.scheduleFail":"Сбой последнего бэкапа","overview.meta.scheduleOff":"Отключено (включите для автозащиты)","overview.meta.scheduleOn":"Включено · посл. запуск {time}","overview.meta.syncOff":"Не настроено","overview.meta.syncOn":"Настроено · посл. синхронизация {time}","overview.metric.backups":"Файлы бэкапов","overview.metric.schedule":"Бэкап по расписанию","overview.metric.snapshots":"Снимки безопасности","overview.metric.sync":"Удалённая синхронизация","overview.nav.about":"О плагине","overview.nav.activity":"Активность","overview.quick.backup":"Создать бэкап","overview.quick.backupDone":"Резервное копирование завершено","overview.quick.backupFailed":"Сбой резервного копирования","overview.quick.backupHint":"Полный снимок (без секретов), доступный для отката в любой момент","overview.quick.backupTitle":"Полный снимок с возможностью отката в любой момент","overview.quick.export":"Экспорт бэкапа","overview.quick.exportHint":"Создать переносимый ZIP-архив резервной копии","overview.quick.exportTitle":"Сформировать переносимый ZIP-бэкап и скачать его","overview.quick.import":"Импорт / восстановление","overview.quick.importHint":"Восстановить конфигурацию из файла бэкапа на этом компьютере","overview.quick.importTitle":"Восстановить из файла бэкапа или перенести на этот компьютер","overview.quick.sync":"Удалённая синхронизация","overview.quick.syncHint":"Поддерживать одинаковые настройки на разных устройствах (Git / WebDAV)","overview.quick.syncTitle":"Синхронизировать конфигурации между устройствами (Git / WebDAV)","overview.quick.title":"Быстрые действия","overview.refresh":"Обновить","overview.result.failed":"Сбой","overview.result.skipped":"Пропущено","overview.result.success":"Успешно","overview.running":"Задач выполняется: {count}","overview.sections.entries":"Элементов: {count}","overview.sections.hint":"Оценено по текущей конфигурации (предпросмотр только для чтения, без записи)","overview.sections.title":"Состав разделов","overview.sections.total":"Всего","overview.state.off":"Выкл.","overview.state.on":"Вкл.","overview.subtitle":"Здоровье конфигурации и быстрые действия (данные только для чтения из каждого раздела)","overview.suggest.schedule":"Включите бэкап по расписанию для автоматической защиты настроек","overview.suggest.sync":"Настройте удалённую синхронизацию для лёгкого переноса между устройствами","overview.suggest.title":"Рекомендации","overview.time.day":"{n} дн назад","overview.time.hour":"{n} ч назад","overview.time.min":"{n} мин назад","overview.time.now":"только что","profiles.delete":"Delete","profiles.delete.done":"Удалён профиль «{name}»","profiles.deleteMessage":"Delete profile \\«{name}\\»? This group of configuration snapshots will be permanently removed.","profiles.deleteTitle":"Delete profile","profiles.empty":"No profiles yet. Save the current configuration to get started.","profiles.import.choose":"Choose JSON file","profiles.import.done":"Импортирован профиль «{name}»","profiles.import.hint":"Import an exported profile.json (from this or another machine; file sections are embedded).","profiles.import.title":"Import profile","profiles.loading":"Loading profiles…","profiles.name":"Name","profiles.nameInvalid":"Invalid profile name: letters, digits and common characters only; no path separators (/ \\\\) or \\«..\\»","profiles.previewConflicts":"{count} conflict(s)","profiles.previewHint":"Click to preview the switch (read-only)","profiles.previewItems":"Change details","profiles.previewNote":"Read-only preview above (zero writes). After confirmation a snapshot is created automatically and everything rolls back on failure.","profiles.previewRestart":"DSH restart required","profiles.previewSecrets":"{count} secret(s) to re-enter","profiles.previewSections":"Sections in this profile","profiles.previewSummary":"Switch impact","profiles.previewUnchanged":"{count} identical","profiles.previewWillChange":"{count} item(s) will change","profiles.previewing":"Analyzing switch plan…","profiles.rename":"Rename","profiles.renameMessage":"Rename profile \\«{name}\\» to:","profiles.renameTitle":"Rename profile","profiles.save.action":"Save profile","profiles.save.done":"Сохранён профиль «{name}»","profiles.save.hint":"Pick a name and save: contents reuse the export pipeline (no secrets), file sections (skills / presets) are embedded too.","profiles.save.placeholder":"e.g. Work / Personal / Minimal","profiles.save.saving":"Saving…","profiles.save.title":"Save current config as a profile","profiles.sections":"Sections","profiles.subtitle":"Save your current DSH configuration as multiple switchable profiles (Work / Personal / …); switching includes preview + auto snapshot + rollback on failure.","profiles.switch":"Switch","profiles.switchConfirm":"Confirm switch","profiles.switchDone":"Switch complete: {count} item(s) applied","profiles.switchFailed":"Switch failed (some items not applied)","profiles.switchPreviewTitle":"Switch preview: {name}","profiles.switchRolledBack":"Switch failed — fully rolled back","profiles.switching":"Switching… (auto snapshot + staged apply)","profiles.title":"Profiles","profiles.updatedAt":"Updated","report.action.done":"Done","report.action.fixIssues":"View failures","report.action.viewDetails":"View details","report.export.title":"Export Complete","report.import.title":"Import Result","report.needsRestart":"Plugin / MCP changes take effect after restarting DSH.","report.rollback.title":"Rollback Report","retention.appliesTo":"Применяется к: снимкам перед импортом + архивам запланированных резервных копий","retention.hint":"Определяет, сколько копий сохраняет автоочистка (общее правило для снимков и бэкапов). Закреплённые снимки и незавершённые точки восстановления никогда не удаляются.","retention.invalid":"Недопустимые параметры ротации — каждое поле должно быть целым числом в разрешённом диапазоне","retention.keepLast":"Хранить последних","retention.keepLastHint":"Хранить N самых свежих копий по времени; 0 отключает уровень «недавних»","retention.keepMonthly":"Хранить ежемесячных","retention.keepMonthlyHint":"Дополнительно сохранять самую свежую копию каждого месяца, не более N месяцев; 0 отключает","retention.keepYearly":"Хранить ежегодных","retention.keepYearlyHint":"Дополнительно сохранять самую свежую копию каждого года, не более N лет; 0 отключает","retention.months":"мес.","retention.summary":"Последних {keepLast} · ежемесячных {keepMonthly} · ежегодных {keepYearly}","retention.tiersOff":"Уровни не включены (эквивалентно «хранить только N самых свежих»)","retention.title":"Политика ротации копий","retention.unit":"копий","retention.years":"лет","section.description":"Экспорт / импорт / миграция конфигурации DSH (секреты исключены; опционально шифрование архива)","section.label":"Резервное копирование и миграция","shell.drawer.title":"Активность и информация","shell.status.idle":"Ожидание","shell.status.recovery":"Ожидает восстановления","shell.status.running":"Задач выполняется: {count}","shell.version":"Плагин {plugin} · DSH {dsh}","snapshots.actions":"Actions","snapshots.confirmRestore":"Confirm restore? Current files are first backed up to a safe location, then plugins added during the import are removed.","snapshots.confirmTitle":"Confirm restore","snapshots.createdAt":"Created","snapshots.delete":"Delete","snapshots.deleteConfirm":"Delete the snapshot created at {time}? This pre-import rollback point will be permanently removed and cannot be recovered.","snapshots.deleteConfirmTitle":"Delete Snapshot","snapshots.deleted":"Снимок удалён","snapshots.empty":"No snapshots yet. A safety snapshot is created automatically on import.","snapshots.empty.body":"Снимки создаются автоматически перед импортом и восстановлением для отката в один клик. Вы также можете сделать снимок прямо сейчас.","snapshots.empty.runBackup":"Создать снимок сейчас","snapshots.empty.title":"Снимков пока нет","snapshots.empty.viewFiles":"Просмотр файлов бэкапов","snapshots.entries":"Entries","snapshots.execute":"Restore now","snapshots.executing":"Restoring…","snapshots.failed":"Failed","snapshots.hint":"Export backups = portable ZIPs (download / one-click import / delete, incl. scheduled full backups). Snapshot restore = back to the pre-import state: whole-file restore of settings/patch, uninstall plugins added during import, compensate modified files; current files are backed up to a safe location first.","snapshots.kind.credentialHint":"Manual hint","snapshots.kind.fileRemove":"Remove file","snapshots.kind.fileRestore":"Restore file","snapshots.kind.hostFileRemove":"Remove whole file","snapshots.kind.hostFileRestore":"Restore whole file","snapshots.kind.pluginRemove":"Uninstall plugin","snapshots.kind.skip":"Skip","snapshots.kind.unknown":"Unknown","snapshots.loading":"Loading snapshots…","snapshots.manualHints":"Manual action needed","snapshots.noActions":"No restorable actions for this snapshot (or all skipped).","snapshots.pin":"Pin","snapshots.planTitle":"Restore Plan Preview","snapshots.plugins":"Plugins","snapshots.removedPlugins":"Removed plugins","snapshots.reportTitle":"Restore Report","snapshots.restored":"Restored","snapshots.retentionHint":"Up to {count} snapshots are kept automatically (oldest pruned); pinned snapshots are exempt from auto-pruning and can only be deleted manually.","snapshots.selectHint":"Select a snapshot to preview its restore plan (read-only preview, changes nothing):","snapshots.skipped":"Skipped","snapshots.sourceZip":"Source","snapshots.status":"Status","snapshots.status.done":"Done","snapshots.status.pending":"Pending","snapshots.status.rolled-back":"Rolled back","snapshots.status.unknown":"Unknown","snapshots.subTab.files":"Backup Files","snapshots.subTab.recovery":"Recovery","snapshots.subTab.restore":"Snapshot Restore","snapshots.subTab.schedule":"Расписание","snapshots.summary":"{hostFileRestores} whole-file restore · {hostFileRemoves} whole-file remove · {pluginRemoves} plugin uninstall · {fileRestores} file restore · {fileRemoves} file remove · {credentialHints} credential hints · {skips} skip","snapshots.title":"Backup & Snapshots","snapshots.unpin":"Unpin","snapshots.viewPlan":"View restore plan","starPrompt.body":"If you find this plugin useful, please give it a ⭐ on GitHub — your support keeps it maintained!","starPrompt.dismiss":"Don't ask again","starPrompt.star":"Star on GitHub","starPrompt.title":"Enjoying Config Manager?","status.ready":"Config Manager ready (plugin {version} · DSH {dsh} · {platform})","status.unavailable":"Config Manager service unavailable — verify the plugin is mounted.","sync.status.lastSync":"Последняя синхронизация","sync.status.sections":"Синхронизируемые разделы","toast.copied":"Скопировано в буфер обмена","toast.copyFailed":"Не удалось скопировать — выделите текст и скопируйте вручную","toast.refreshed":"Обновлено","view.about":"About","view.export":"Export","view.import":"Import","view.market":"Marketplace","view.more":"More","view.overview":"Обзор","view.profiles":"Управление профилями","view.snapshots":"Backup & Snapshots","view.sync":"Remote Sync","view.transfer":"Экспорт и импорт"}}
|
|
1
|
+
{"config-manager":{"about.authorLabel":"Author","about.cli.docs":"CLI documentation","about.cli.hint":"The GUI lives inside DSH — when DSH cannot start, the separately installed CLI (dsh-config-manager) is your first rescue tool: list snapshots / offline restore / one-click DSH reinstall, no DSH runtime needed. Install once and use it on any machine:","about.cli.title":"CLI Rescue Tool","about.diag.bundles":"бандлы: {bundles}","about.diag.hint":"Если данные не совпадают с вашей конфигурацией, проверьте аргумент DSH --profile и переменную DSH_HOME.","about.diag.label":"Источник списка плагинов","about.diag.manifestUnreadable":"В каталоге отсутствует читаемый package.json — список плагинов пуст. Проверьте соответствие профиля DSH и переменной DSH_HOME этому пути.","about.diag.pluginCount":"Обнаружено плагинов: {count}","about.diag.profile":"Профиль: {profile}","about.diag.profileDir":"Каталог: {path}","about.docs":"Documentation","about.dshVersion":"DSH {version}","about.issues":"Issues","about.links":"Links","about.loading":"Loading version info…","about.official":"Official","about.releaseNotes":"Release Notes","about.releaseNotes.allLoaded":"All releases loaded","about.releaseNotes.confirm":"Confirm","about.releaseNotes.empty":"No releases found.","about.releaseNotes.error":"Failed to load release notes. Please check your network connection or try again later.","about.releaseNotes.latest":"Latest","about.releaseNotes.loading":"Loading release notes…","about.releaseNotes.loadingMore":"Loading more releases…","about.releaseNotes.neverShow":"Don't show again","about.releaseNotes.noBody":"No description provided for this release.","about.releaseNotes.prerelease":"Pre-release","about.releaseNotes.retry":"Retry","about.releaseNotes.title":"Release Notes","about.releaseNotes.viewOnGithub":"View all releases on GitHub","about.releaseNotes.viewSingleOnGithub":"View on GitHub","about.repo":"GitHub Repository","about.retryStatus":"Retry","about.star":"⭐ Star on GitHub","about.subtitle":"Plugin info, author and feedback links","about.title":"About DSH Config Manager","about.version":"Version {version}","backupFiles.delete":"Delete","backupFiles.deleteConfirm":"Delete backup file \\«{name}\\»? This cannot be undone.","backupFiles.deleteConfirmTitle":"Delete backup file","backupFiles.deleted":"Удалён файл бэкапа «{name}»","backupFiles.download":"Download","backupFiles.empty":"No backup files yet. They appear here after a manual export or once scheduled backups are enabled.","backupFiles.error":"Failed to load backup files","backupFiles.hint":"All export artifacts (manual exports and scheduled backups) are managed here: download to your machine, import to restore, or delete. Scheduled backups auto-keep the latest 10.","backupFiles.import":"Import","backupFiles.inspect":"Inspect / Compare","backupFiles.inspectDiff":"Diff against this backup (read-only preview)","backupFiles.inspectEmpty":"This backup could not be analyzed (corrupt or unsupported format)","backupFiles.inspectGroup.changes":"Changes (will apply)","backupFiles.inspectGroup.conflicts":"Conflicts (need decision)","backupFiles.inspectGroup.others":"Others","backupFiles.inspectGroup.paths":"Path mappings (need handling)","backupFiles.inspectGroup.skipped":"Identical (nothing to do)","backupFiles.inspectItems":"Change details","backupFiles.inspectLoading":"Analyzing backup contents…","backupFiles.inspectSections":"Sections included","backupFiles.loading":"Loading backup files…","backupFiles.name":"Файл","backupFiles.noteUnreadable":"(примечание не читается)","backupFiles.searchEmpty":"No matching backup files","backupFiles.searchPlaceholder":"Search by file name or note…","backupFiles.size":"Размер","backupFiles.source":"Источник","backupFiles.source.auto":"Scheduled","backupFiles.source.manual":"Manual","backupFiles.time":"Изменён","backupFiles.title":"Backup Files","backupSchedule.consecutiveFailures":"Scheduled backups failed {count} time(s) in a row — check the configuration (disk space / permissions / section export errors)","backupSchedule.customHint":"Runs a full backup once a week at the selected weekday and time (missed triggers are not backfilled)","backupSchedule.enabled":"Enable scheduled backups","backupSchedule.enabledHint":"When on, DSH backs up automatically on the cadence below; one run fires on every startup (skipped if less than 1h since the last run).","backupSchedule.error":"Failed to load scheduled backup settings","backupSchedule.hint":"Automatically export a full backup ZIP in the background on a fixed cadence (secrets are never included, never encrypted — use manual export for encryption). Config lives in sync/backup-schedule.json and migrates with the self section.","backupSchedule.interval":"Backup interval","backupSchedule.interval.12h":"Every 12 hours","backupSchedule.interval.24h":"Every 24 hours","backupSchedule.interval.6h":"Every 6 hours","backupSchedule.interval.7d":"Every 7 days","backupSchedule.interval.custom":"Custom (weekly at a fixed time)","backupSchedule.lastRun":"Last run","backupSchedule.loading":"Loading scheduled backup settings…","backupSchedule.never":"Never run","backupSchedule.runNow":"Back up now","backupSchedule.running":"Backing up…","backupSchedule.save":"Save settings","backupSchedule.saved":"Settings saved","backupSchedule.status.failed":"Failed","backupSchedule.status.skipped":"Skipped","backupSchedule.status.success":"Success","backupSchedule.title":"Scheduled Full Backups","backupSchedule.weekday.friday":"Friday","backupSchedule.weekday.monday":"Monday","backupSchedule.weekday.saturday":"Saturday","backupSchedule.weekday.sunday":"Sunday","backupSchedule.weekday.thursday":"Thursday","backupSchedule.weekday.tuesday":"Tuesday","backupSchedule.weekday.wednesday":"Wednesday","common.back":"Назад","common.cancel":"Отмена","common.close":"Закрыть","common.confirm":"Confirm","common.done":"Готово","common.loading":"Загрузка…","common.next":"Далее","common.retry":"Повторить","common.unknownError":"Неизвестная ошибка","error.hint":"Error messages are auto-redacted and never leak secrets.","error.title":"Operation failed","export.compositionEmpty":"Ничего не выбрано для экспорта","export.compositionHint":"Предварительный расчёт на основе текущего выбора (только чтение, без записи)","export.compositionPartial":"{sections} разд. · прочитано элементов: {units} · ~{size} (включает пока не прочитанные разделы; реальный объём не меньше)","export.compositionTitle":"Состав этого экспорта","export.download":"Download backup file","export.encrypt":"Encrypt backup","export.encryptHint":"Encrypt the entire backup file with a password (AES-256-GCM). The password is used once and never written into the backup or any config file; it is required to unlock the backup on import.","export.excluded":"Excluded","export.fileName":"Custom file name","export.fileNameHint":"Leave empty to auto-name (dsh-config-<date>.zip); no need to type .zip — it is appended automatically. Letters, digits, spaces, — _ . only.","export.fileNameInvalid":"Invalid file name: letters, digits, spaces, — _ . only, no path separators.","export.group.unknown":"Other","export.hint":"По умолчанию экспортируются рекомендуемые разделы (переносимые данные без привязки к устройству). Нажмите «Выберите элементы для экспорта», чтобы настроить каждый раздел и элемент (навыки, плагины, рабочие пространства, сессии и т. д.).","export.includeSecrets":"Export secrets","export.includeSecretsHint":"Write the real secrets (credential values) into the backup. Secrets must be stored encrypted: checking this also checks «Encrypt backup»; unchecking «Encrypt backup» unchecks this.","export.included":"Included","export.mode.custom":"Custom Export","export.mode.customHint":"Select sections per group.","export.mode.quick":"Quick Export","export.mode.quickHint":"One-click export of recommended sections (portable, no device-specific data) for routine backups.","export.naming":"File name & note (optional)","export.note":"Note","export.noteHint":"The note is shown in the local backup list (and travels with the config backup) so you can tell exports apart.","export.notePlaceholder":"e.g. Full backup before migration / 2026-08 archive","export.nothingSelected":"Ничего не выбрано — сначала отметьте нужные разделы или элементы для экспорта.","export.password":"Backup encryption password","export.passwordConfirm":"Confirm password","export.passwordMismatch":"Passwords do not match","export.passwordRequired":"An encryption password is required when encrypting the backup","export.preview":"Preview export contents","export.previewSkipped":"{count} section(s) failed to export and were skipped","export.previewSummary":"Will package {sections} section(s), approx. {size} (no secrets)","export.previewing":"Counting…","export.run":"Start Export","export.running":"Exporting…","export.saved":"Saved to downloads: {name}","export.security":"Security options","export.selectionWarnings":"Device-specific sections may not apply on another machine:","import.analyzing":"Analyzing backup…","import.compatibility.fail":"Backup analysis failed: {reason}","import.compatibility.ok":"The backup can be imported","import.compatibility.paths":"Проблем с путями: {count}","import.compatibility.plugins":"установлено {installed} · к установке {toInstall}","import.compatibility.score":"Compatibility score: {score}","import.compatibility.score.excellent":"Отличная","import.compatibility.score.good":"Хорошая","import.compatibility.score.partial":"Частичная","import.compatibility.score.unsupported":"Не поддерживается","import.compatibility.secrets":"Секретов для повторного ввода: {count}","import.compatibility.sections":"Разделов: {count}","import.compatibility.sectionsTitle":"Разделы в этой резервной копии","import.compatibility.title":"Compatibility","import.confirm.encrypted":"The backup password will decrypt and restore {count} credential(s).","import.confirm.execute":"Confirm Import","import.confirm.warning":"Import modifies the current DSH configuration; a safety snapshot is created first and everything rolls back on failure.","import.confirm.warningNoRollback":"Импорт изменяет текущую конфигурацию DSH; сначала будет создан снимок безопасности. Параметр «Откат при ошибке» выключен: ошибка отдельного элемента не остановит остальные, а уже записанные изменения не будут отменены автоматически.","import.conflicts.detailCurrent":"Текущее","import.conflicts.detailImported":"Резервная копия","import.conflicts.empty":"Нет конфликтов","import.conflicts.hint":"These items already exist on this machine and differ from the backup. Decide per item.","import.conflicts.keepCurrent":"Keep current","import.conflicts.keepCurrentAll":"Keep all current","import.conflicts.review":"Decide later","import.conflicts.severityError":"Ошибка","import.conflicts.title":"Resolve Conflicts","import.conflicts.unresolved":"{count} item(s) unresolved","import.conflicts.useImported":"Use backup","import.conflicts.useImportedAll":"Use all backup","import.consult.hint":"Анализ только для чтения: сначала ознакомьтесь с заключением и аргументами, затем выберите состав импорта.","import.consult.next":"Далее: выбрать состав импорта","import.consult.unavailable":"Отчёт консультации сейчас недоступен (импорт всё равно может быть продолжен).","import.decrypt.badge":"encrypted backup","import.decrypt.previewHint":"Encrypted backup: credentials are restored automatically by the unlock password — no further password prompt.","import.decryptArchive.hint":"This backup is fully encrypted (the whole file is password-protected). Enter the password set at export time to decrypt and continue — encrypted credentials inside are restored with the same password, so this is the only password prompt. It is used once and never written to disk.","import.decryptArchive.passwordPlaceholder":"Enter backup encryption password","import.decryptArchive.title":"Unlock Encrypted Backup","import.decryptArchive.unlock":"Unlock & Continue","import.decryptArchive.unlocking":"Unlocking…","import.excludedByUser":"Элементов исключено пользователем: {count} (не импортируются и не включаются в снимок).","import.importing":"Importing… (installing many plugins may take a few minutes; keep this page open)","import.log.empty":"Waiting for command output…","import.log.newOutput":"↓ New output","import.log.title":"Import Log","import.nothingSelected":"Ничего не выбрано для импорта — отметьте разделы или элементы, которые хотите импортировать.","import.paths.empty":"Нет путей для сопоставления","import.paths.hint":"Absolute paths in the backup may not exist on this machine. Map each path to a new location (leave blank to skip).","import.paths.new":"New path","import.paths.old":"Original path","import.paths.title":"Path Mapping","import.paths.unresolved":"{count} path(s) unmapped","import.picker.hint":"Неотмеченные элементы не импортируются и не включаются в снимок; вы можете вернуться к этому шагу в любой момент.","import.picker.title":"Выберите элементы для импорта","import.preview.conflicts":"{count} conflict(s)","import.preview.mcp":"{count} MCP server(s) added","import.preview.paths":"{count} path mapping(s) needed","import.preview.plugins":"{count} plugin(s) to install","import.preview.prompts":"{count} prompt(s)","import.preview.restart":"A DSH restart is required after import","import.preview.secrets":"{count} secret(s) to re-enter","import.preview.settings":"{count} settings update(s)","import.preview.title":"Import Preview","import.preview.unchanged":"{count} item(s) already identical (skipped)","import.preview.willChange":"{count} item(s) will change","import.retrySkipped":"Retry failed/skipped items ({count})","import.rollbackOnError":"Roll back everything on failure (recommended)","import.secrets.hint":"These credentials were not exported with the backup (security by design). Enter them manually to use them here; leave blank to skip.","import.secrets.none":"Секреты не требуются","import.secrets.optional":"(optional)","import.secrets.required":"(required)","import.secrets.title":"Re-enter Secrets","import.select.browse":"Choose ZIP file","import.select.cancel":"Cancel selection","import.select.file":"Selected: {name}","import.select.hint":"Pick a dsh-config-*.zip backup exported from DSH to begin. Analysis is read-only and changes nothing.","import.select.reselect":"Reselect","import.select.title":"Select Backup File","import.skipCurrent":"Skip current plugin","import.skipPending":"Skipping… the rest of the import continues","import.stage.analyze":"Анализ","import.stage.confirm":"Подтверждение","import.stage.decide":"Предпросмотр и решение","import.stage.done":"Готово","import.stage.execute":"Выполнение","import.stage.select":"Выбор","import.stepper.label":"Шаг {current} из {total}: {label}","lifecycle.autoOff":"Автоснимки отключены","lifecycle.autoOn":"Автоснимки включены","lifecycle.crash.advice.check-bundles":"Перейдите в режим спасения или проверьте dsh.profile.bundles в package.json.","lifecycle.crash.advice.check-patch-tree":"Перейдите в режим спасения для отключения плагинов, затем найдите проблемный бисекцией.","lifecycle.crash.advice.repair-session":"Сначала восстановите повреждённые файлы сессий.","lifecycle.crash.advice.restore-last-good":"Рекомендуется откат к последнему заведомо работоспособному состоянию.","lifecycle.crash.lastGood":"Последнее рабочее: {time}","lifecycle.crash.reason.bundle-check":"Не удалось разрешить бандл плагина","lifecycle.crash.reason.patch-tree":"Сбой загрузки плагина (конфликт дерева монтирования)","lifecycle.crash.reason.session-corrupt":"Повреждён файл сессии","lifecycle.crash.reason.unknown":"Причина неизвестна","lifecycle.crash.restoreLastGood":"Откатить к последнему рабочему","lifecycle.crash.title":"Предыдущий запуск не был завершён","lifecycle.delete":"Удалить","lifecycle.deleteConfirm":"Удалить снимок {id}? Его больше нельзя будет использовать для отката.","lifecycle.empty":"Снимков конфигурации пока нет. При включённых автоснимках изменения сохраняются автоматически.","lifecycle.guided.action":"Открыть мастер восстановления","lifecycle.guided.desc":"Эта страница предназначена для быстрого отката в один клик (undo/redo). Если DSH не запускается из-за сбоя или прерванной транзакции, используйте мастер на странице «Резервные копии»: он покажет последствия и проверит результат.","lifecycle.guided.title":"Требуется пошаговое восстановление?","lifecycle.kind.auto":"авто","lifecycle.kind.baseline":"базовый","lifecycle.kind.manual":"ручной","lifecycle.kind.pre-restore":"до отката","lifecycle.kind.undo":"откат","lifecycle.lastAuto":"Последний автоснимок","lifecycle.never":"никогда","lifecycle.redo":"Повторить (Redo)","lifecycle.redoNone":"Нечего повторять","lifecycle.redoOk":"Восстановлено состояние {id}","lifecycle.redoTitle":"Повторить последнее отменённое изменение (если ничего не менялось)","lifecycle.rescue.active":"Режим спасения ВКЛЮЧЁН ({time}) — перезапустите DSH для применения.","lifecycle.rescue.confirm":"Режим спасения перезаписывает профильный cordis.patch.yml, очищает домашний cordis.patch.yml и сужает dsh.profile.bundles до ядра DSH и этого плагина (остальные пользовательские плагины не загружаются при старте; их пакеты НЕ удаляются). Выход полностью восстанавливает исходное состояние из резервной копии. После этого перезапустите DSH. Продолжить?","lifecycle.rescue.desc":"Если DSH не запускается из-за плагинов, этот режим сужает список монтирования до «ядро DSH + этот плагин»: перезаписывает оба слоя cordis.patch.yml и убирает сторонние плагины из dsh.profile.bundles. Пакеты не удаляются, а выход восстанавливает всё из резервной копии.","lifecycle.rescue.enter":"Войти в режим спасения","lifecycle.rescue.exit":"Выйти из режима спасения","lifecycle.rescue.exitConfirm":"Выход из режима спасения восстанавливает cordis.patch.yml и package.json из резервных копий, возвращая прежний набор плагинов. После этого необходимо перезапустить DSH. Продолжить?","lifecycle.rescue.inactive":"Режим спасения выключен","lifecycle.rescue.off":"Режим спасения отключён","lifecycle.rescue.on":"Режим спасения включён","lifecycle.rescue.restartHint":"Для применения изменений требуется перезапустить DSH.","lifecycle.rescue.stale":"Устаревший флаг спасения (смена машины или пересоздание home)","lifecycle.rescue.title":"Режим спасения","lifecycle.sections":"{count} раздел(ов)","lifecycle.snapshotCreated":"Создан снимок {id}","lifecycle.snapshotNow":"Создать снимок сейчас","lifecycle.snapshotReason":"Причина создания снимка (необязательно)","lifecycle.snapshots":"Снимки состояния конфигурации","lifecycle.undo":"Отменить (Undo)","lifecycle.undoConfirm":"Отмена вернёт конфигурацию к предыдущему отличающемуся состоянию. Текущее состояние будет сохранено перед откатом, чтобы вы могли повторить его (Redo). Продолжить?","lifecycle.undoNone":"Нечего отменять","lifecycle.undoOk":"Выполнен откат к {id}","lifecycle.undoTitle":"Отменить последнее изменение конфигурации (откат к ближайшему снимку с другим содержимым)","nav.about":"О плагине","nav.activity":"Активность","nav.backups":"Бэкапы","nav.export":"Экспорт","nav.import":"Импорт","nav.market":"Витрина","nav.overview":"Обзор","nav.profiles":"Профили","nav.recovery":"Восстановление","nav.refresh":"Обновить","nav.sync":"Синхронизация","nextSteps.done":"All done — nothing else to handle","nextSteps.restart.hint":"These changes only take effect after restarting DSH:","nextSteps.restart.title":"Restart DSH to apply ({count})","nextSteps.secrets.hint":"These credentials were not exported with the backup; re-enter them on this machine:","nextSteps.secrets.title":"Re-enter credentials ({count})","nextSteps.title":"Next steps","nextSteps.unresolved.hint":"These items were not applied; you can retry them from the result page:","nextSteps.unresolved.title":"Failed / skipped ({count})","overview.activity.copy":"Копировать","overview.activity.empty":"Активности пока нет (здесь появятся бэкапы, импорты и синхронизации)","overview.activity.redacted":"(имя файла скрыто)","overview.activity.title":"Недавняя активность","overview.activity.viewAll":"Смотреть все","overview.empty.body":"После создания первого бэкапа или снимка здесь отобразятся статус здоровья и недавняя активность.","overview.empty.title":"Начните защиту своей конфигурации","overview.health.noBackup":"Резервных копий пока нет — сначала создайте бэкап или снимок","overview.health.ok":"Конфигурация в полном порядке","overview.health.recovery":"Неразрешённые элементы восстановления требуют внимания","overview.health.recoveryAction":"Перейти к восстановлению инцидентов","overview.health.scheduleFailed":"Последний бэкап по расписанию не удался — проверьте настройки","overview.kind.autosync":"Автосинхронизация","overview.kind.backup":"Резервное копирование","overview.kind.backup-manual":"Ручной бэкап","overview.kind.import":"Импорт","overview.kind.other":"Другая операция","overview.kind.profile-create":"Создан профиль","overview.kind.profile-delete":"Удаление профиля","overview.kind.profile-import":"Импорт профиля","overview.kind.profile-rename":"Переименование профиля","overview.kind.profile-save":"Сохранение профиля","overview.kind.profile-select":"Задан профиль для следующего запуска","overview.kind.profile-switch":"Переключение профиля","overview.kind.recovery":"Восстановление","overview.kind.restore":"Восстановление","overview.kind.rollback":"Откат","overview.kind.snapshot-delete":"Удаление снимка","overview.kind.snapshot-prune":"Очистка снимков","overview.kind.sync-apply":"Применение синхронизации","overview.loading":"Загрузка обзора…","overview.location.dir":"Каталог бэкапов","overview.location.lastRun":"Последний запуск","overview.location.nextRun":"Следующий запуск","overview.location.retention":"Снимки","overview.location.retentionValue":"{used} / {limit}","overview.location.schedule":"Расписание","overview.location.scheduleOff":"Выкл.","overview.location.scheduleOn":"{interval} · посл. {time}","overview.location.title":"Хранилище бэкапов","overview.location.totalSize":"Общий объём","overview.meta.lastBackup":"Посл.: {time}","overview.meta.never":"Никогда не запускалось","overview.meta.noBackup":"Записей пока нет","overview.meta.scheduleFail":"Сбой последнего бэкапа","overview.meta.scheduleOff":"Отключено (включите для автозащиты)","overview.meta.scheduleOn":"Включено · посл. запуск {time}","overview.meta.syncOff":"Не настроено","overview.meta.syncOn":"Настроено · посл. синхронизация {time}","overview.metric.backups":"Файлы бэкапов","overview.metric.schedule":"Бэкап по расписанию","overview.metric.snapshots":"Снимки безопасности","overview.metric.sync":"Удалённая синхронизация","overview.nav.about":"О плагине","overview.nav.activity":"Активность","overview.quick.backup":"Создать бэкап","overview.quick.backupDone":"Резервное копирование завершено","overview.quick.backupFailed":"Не удалось создать резервную копию: {message}","overview.quick.backupHint":"Полный снимок (без секретов), доступный для отката в любой момент","overview.quick.backupSkippedConflict":"Пропущено: выполняется другая задача (защита от дубликатов)","overview.quick.backupSkippedDisabled":"Пропущено: резервное копирование по расписанию отключено (файл бэкапа не создавался)","overview.quick.backupSkippedLocked":"Пропущено: окружение заблокировано (выполняется другая задача или требуется снятие устаревшей блокировки)","overview.quick.backupSkippedOther":"Пропущено: служба бэкапа не может быть запущена сейчас (подробности в логах хоста)","overview.quick.backupSkippedRunning":"Пропущено: предыдущий бэкап всё ещё выполняется","overview.quick.backupTitle":"Полный снимок с возможностью отката в любой момент","overview.quick.export":"Экспорт бэкапа","overview.quick.exportHint":"Создать переносимый ZIP-архив резервной копии","overview.quick.exportTitle":"Сформировать переносимый ZIP-бэкап и скачать его","overview.quick.import":"Импорт / восстановление","overview.quick.importHint":"Восстановить конфигурацию из файла бэкапа на этом компьютере","overview.quick.importTitle":"Восстановить из файла бэкапа или перенести на этот компьютер","overview.quick.sync":"Удалённая синхронизация","overview.quick.syncHint":"Поддерживать одинаковые настройки на разных устройствах (Git / WebDAV)","overview.quick.syncTitle":"Синхронизировать конфигурации между устройствами (Git / WebDAV)","overview.quick.title":"Быстрые действия","overview.refresh":"Обновить","overview.result.failed":"Сбой","overview.result.skipped":"Пропущено","overview.result.success":"Успешно","overview.running":"Задач выполняется: {count}","overview.sections.entries":"Элементов: {count}","overview.sections.hint":"Оценено по текущей конфигурации (предпросмотр только для чтения, без записи)","overview.sections.title":"Состав разделов","overview.sections.total":"Всего","overview.state.off":"Выкл.","overview.state.on":"Вкл.","overview.subtitle":"Здоровье конфигурации и быстрые действия (данные только для чтения из каждого раздела)","overview.suggest.schedule":"Включите бэкап по расписанию для автоматической защиты настроек","overview.suggest.sync":"Настройте удалённую синхронизацию для лёгкого переноса между устройствами","overview.suggest.title":"Рекомендации","overview.time.day":"{n} дн назад","overview.time.hour":"{n} ч назад","overview.time.min":"{n} мин назад","overview.time.now":"только что","picker.clearSelection":"Очистить выбор","picker.collapse":"Свернуть","picker.collapsed":"Свернуть","picker.copyAll":"Копировать всё","picker.countAll":"{count} всего","picker.countSelected":"{count} выбрано","picker.deviceSpecific":"Специфично для устройства","picker.empty":"Элементы для экспорта не найдены","picker.emptyFilter":"Нет элементов, соответствующих фильтру","picker.error":"Не удалось прочитать состав экспорта: {message}","picker.expand":"Развернуть","picker.expanded":"Развернуть","picker.export":"Экспортировать","picker.exportCount":"Экспортировать ({count})","picker.exportNothing":"Ничего не выбрано для экспорта","picker.exporting":"Формирование архива экспорта…","picker.fileCount":"{count} файл(ов)","picker.filterPh":"Фильтр разделов и элементов…","picker.groupAll":"Все разделы","picker.groupConfig":"Конфигурация","picker.groupData":"Данные и сессии","picker.groupSystem":"Системные файлы","picker.highRisk":"Высокий риск","picker.highRiskHint":"Этот раздел взят из публичного репозитория без официальной проверки: его выбор установит плагины / запишет файлы / добавит глобальные инструкции на этой машине. Перед импортом создаётся снимок отката, поэтому подтверждение риска остаётся за вами.","picker.hint":"Выберите разделы и конкретные элементы для включения в архив экспорта.","picker.import":"Импортировать","picker.importCount":"Импортировать ({count})","picker.importNothing":"Ничего не выбрано для импорта","picker.importing":"Применение импортируемых элементов…","picker.itemCount":"{count} элементов","picker.itemSelected":"{count} выбрано","picker.loading":"Чтение элементов для экспорта…","picker.loadingItems":"Чтение элементов… (большие разделы, например сессии, могут занять некоторое время)","picker.loadingSection":"Загрузка…","picker.locked":"Пакетная связка","picker.lockedHint":"Должно экспортироваться вместе со своей группой (например, объявление патча pnpm и его файл патча); снятие выбора с любого элемента очищает всю группу.","picker.partial":"Частично","picker.search":"Поиск по разделам и элементам…","picker.sectionLoadFailed":"Не удалось загрузить · экспортируется целиком","picker.selectAll":"Выбрать все","picker.selectNone":"Снять выбор","picker.selectedOf":"Выбрано {selected} из {total}","picker.sensitive":"Секретные данные","picker.showAll":"Показать все ({count})","picker.summary":"Экспорт: {sections} разд. · {units} элем. · ~{size}","picker.summaryImport":"Будет импортировано: {sections} разд. · {units} элем.","picker.title":"Выберите элементы для экспорта","picker.unitsUnavailable":"Не удалось загрузить списки элементов для некоторых разделов; они будут экспортированы целиком.","profiles.bundles":"Слои плагинов (бандлы)","profiles.bundles.count":"{count} слоёв бандлов","profiles.bundles.none":"(нет)","profiles.copied":"Команда перезапуска скопирована","profiles.copy":"Скопировать команду","profiles.create.action":"Создать профиль","profiles.create.creating":"Создание профиля…","profiles.create.done":"Создан профиль «{name}»","profiles.create.hint":"Создаёт стандартный профиль в $DSH_HOME/profiles/<name> (package.json + cordis.patch.yml + pnpm-workspace.yaml); сторонние плагины устанавливаются в профиль отдельно.","profiles.create.nameLabel":"Имя профиля","profiles.create.placeholder":"например: writing / rescue","profiles.create.templateLabel":"Начальный шаблон","profiles.create.title":"Новый профиль","profiles.current":"Работает","profiles.delete":"Delete","profiles.delete.done":"Удалён профиль «{name}»","profiles.deleteCurrentConfirm":"Всё равно удалить работающий профиль","profiles.deleteCurrentWarning":"Это работающий сейчас профиль: текущий процесс продолжит работу, но следующий запуск завершится ошибкой.","profiles.deleteMessage":"Delete profile \\«{name}\\»? This group of configuration snapshots will be permanently removed.","profiles.deleteTitle":"Delete profile","profiles.deps":"Зависимости","profiles.detail":"Подробности","profiles.detail.info":"Информация о профиле","profiles.detail.manifest":"package.json","profiles.detail.patch":"cordis.patch.yml","profiles.detail.patchMissing":"(файл патча отсутствует)","profiles.detail.patchTooLarge":"(файл патча слишком велик, содержимое не загружено)","profiles.detailTitle":"Сведения о профиле: {name}","profiles.dir":"Каталог","profiles.empty":"No profiles yet. Save the current configuration to get started.","profiles.error.currentProfile":"Эта операция не может быть применена к работающему профилю","profiles.error.exists":"Профиль с таким именем уже существует","profiles.error.generic":"Сбой операции: {message}","profiles.error.invalidName":"Недопустимое имя профиля","profiles.error.notFound":"Профиль не найден (возможно, он был удалён)","profiles.error.reservedName":"Зарезервированные имена DSH нельзя создавать вручную","profiles.error.unknownTemplate":"Неизвестный начальный шаблон","profiles.import.choose":"Choose JSON file","profiles.import.done":"Импортирован профиль «{name}»","profiles.import.hint":"Import an exported profile.json (from this or another machine; file sections are embedded).","profiles.import.title":"Import profile","profiles.issue.manifestInvalid":"package.json повреждён","profiles.issue.patchTooLarge":"файл патча слишком велик (содержимое не отображается)","profiles.list.count":"всего {count}","profiles.list.hint":"Нажмите на строку профиля для подробных сведений (слои бандлов / зависимости / исходный патч)","profiles.list.summary":"web: {web} · headless: {headless} · другие: {generic} · с плагинами: {installed}","profiles.list.title":"Все профили","profiles.loading":"Loading profiles…","profiles.name":"Name","profiles.nameInvalid":"Invalid profile name: letters, digits and common characters only; no path separators (/ \\\\) or \\«..\\»","profiles.nameRequired":"Введите имя профиля","profiles.nameReserved":"«{name}» зарезервировано в DSH (web / headless / sdk / sdk-minimal / acp / desktop) и не может создаваться вручную","profiles.nameTooLong":"Имя профиля не может быть длиннее 64 символов","profiles.nextLaunch":"Следующий запуск","profiles.nodeModules.no":"node_modules отсутствует","profiles.nodeModules.yes":"node_modules присутствует","profiles.patchEntries":"{count} записей патча","profiles.patchReload.live":"патч перезагружается на лету","profiles.patchReload.startup":"патч применяется только при запуске","profiles.previewConflicts":"{count} conflict(s)","profiles.previewHint":"Click to preview the switch (read-only)","profiles.previewItems":"Change details","profiles.previewNote":"Read-only preview above (zero writes). After confirmation a snapshot is created automatically and everything rolls back on failure.","profiles.previewRestart":"DSH restart required","profiles.previewSecrets":"{count} secret(s) to re-enter","profiles.previewSections":"Sections in this profile","profiles.previewSummary":"Switch impact","profiles.previewUnchanged":"{count} identical","profiles.previewWillChange":"{count} item(s) will change","profiles.previewing":"Analyzing switch plan…","profiles.refresh":"Обновить","profiles.rename":"Rename","profiles.rename.done":"Переименовано в «{name}»","profiles.renameMessage":"Rename profile \\«{name}\\» to:","profiles.renameTitle":"Rename profile","profiles.row.summary":"{bundles} слоёв · {patch} записей патча · {deps} зависимостей","profiles.save.action":"Save profile","profiles.save.done":"Сохранён профиль «{name}»","profiles.save.hint":"Pick a name and save: contents reuse the export pipeline (no secrets), file sections (skills / presets) are embedded too.","profiles.save.placeholder":"e.g. Work / Personal / Minimal","profiles.save.saving":"Saving…","profiles.save.title":"Save current config as a profile","profiles.sections":"Sections","profiles.select":"Использовать при следующем запуске","profiles.selectClear":"Сбросить выбор для запуска","profiles.selectCleared":"Выбор профиля для следующего запуска сброшен","profiles.selectCurrent":"«{name}» уже является активным профилем — перезапуск не требуется.","profiles.selectDone":"«{name}» будет использован при следующем запуске","profiles.selectHint":"DSH не может переключать профили на лету: выбор только фиксирует, какой профиль запустить следующим; перезапуск выполняется вручную.","profiles.selectMissing":"Выбранный для запуска профиль «{name}» больше не существует; выберите другой.","profiles.selectPending":"При следующем запуске будет использован «{name}». Команда запуска:","profiles.shape.generic":"Пользовательский","profiles.shape.headless":"Headless","profiles.shape.web":"Web","profiles.subtitle":"Save your current DSH configuration as multiple switchable profiles (Work / Personal / …); switching includes preview + auto snapshot + rollback on failure.","profiles.switch":"Switch","profiles.switchConfirm":"Confirm switch","profiles.switchDone":"Switch complete: {count} item(s) applied","profiles.switchFailed":"Switch failed (some items not applied)","profiles.switchPreviewTitle":"Switch preview: {name}","profiles.switchRolledBack":"Switch failed — fully rolled back","profiles.switching":"Switching… (auto snapshot + staged apply)","profiles.title":"Profiles","profiles.updatedAt":"Обновлено {time}","report.action.done":"Done","report.action.fixIssues":"View failures","report.action.viewDetails":"View details","report.export.title":"Export Complete","report.import.title":"Import Result","report.needsRestart":"Plugin / MCP changes take effect after restarting DSH.","report.rollback.title":"Rollback Report","retention.appliesTo":"Применяется к: снимкам перед импортом + архивам запланированных резервных копий","retention.hint":"Определяет, сколько копий сохраняет автоочистка (общее правило для снимков и бэкапов). Закреплённые снимки и незавершённые точки восстановления никогда не удаляются.","retention.invalid":"Недопустимые параметры ротации — каждое поле должно быть целым числом в разрешённом диапазоне","retention.keepLast":"Хранить последних","retention.keepLastHint":"Хранить N самых свежих копий по времени; 0 отключает уровень «недавних»","retention.keepMonthly":"Хранить ежемесячных","retention.keepMonthlyHint":"Дополнительно сохранять самую свежую копию каждого месяца, не более N месяцев; 0 отключает","retention.keepYearly":"Хранить ежегодных","retention.keepYearlyHint":"Дополнительно сохранять самую свежую копию каждого года, не более N лет; 0 отключает","retention.months":"мес.","retention.summary":"Последних {keepLast} · ежемесячных {keepMonthly} · ежегодных {keepYearly}","retention.tiersOff":"Уровни не включены (эквивалентно «хранить только N самых свежих»)","retention.title":"Политика ротации копий","retention.unit":"копий","retention.years":"лет","section.agentInstructions":"Инструкции агента","section.agentPresets":"Пресеты агента","section.credentialsStatus":"Статус учётных данных","section.description":"Экспорт / импорт / миграция конфигурации DSH (секреты исключены; опционально шифрование архива)","section.label":"Резервное копирование и миграция","section.mcp":"MCP-серверы","section.pluginFiles":"Файлы плагинов","section.plugins":"Плагины","section.prompts":"Системные промпты","section.providers":"Провайдеры и модели","section.secrets":"Секреты","section.self":"Собственная конфигурация плагина","section.sessions":"Сессии","section.settings":"Настройки","section.skills":"Навыки","section.ui":"Настройки интерфейса","section.workspaces":"Рабочие пространства","shell.drawer.title":"Активность и информация","shell.status.idle":"Ожидание","shell.status.recovery":"Ожидает восстановления","shell.status.running":"Задач выполняется: {count}","shell.version":"Плагин {plugin} · DSH {dsh}","snapshots.actions":"Actions","snapshots.confirmRestore":"Confirm restore? Current files are first backed up to a safe location, then plugins added during the import are removed.","snapshots.confirmTitle":"Confirm restore","snapshots.createdAt":"Created","snapshots.delete":"Delete","snapshots.deleteConfirm":"Delete the snapshot created at {time}? This pre-import rollback point will be permanently removed and cannot be recovered.","snapshots.deleteConfirmTitle":"Delete Snapshot","snapshots.deleted":"Снимок удалён","snapshots.empty":"No snapshots yet. A safety snapshot is created automatically on import.","snapshots.empty.body":"Снимки создаются автоматически перед импортом и восстановлением для отката в один клик. Вы также можете сделать снимок прямо сейчас.","snapshots.empty.runBackup":"Создать снимок сейчас","snapshots.empty.title":"Снимков пока нет","snapshots.empty.viewFiles":"Просмотр файлов бэкапов","snapshots.entries":"Entries","snapshots.execute":"Restore now","snapshots.executing":"Restoring…","snapshots.failed":"Failed","snapshots.hint":"Export backups = portable ZIPs (download / one-click import / delete, incl. scheduled full backups). Snapshot restore = back to the pre-import state: whole-file restore of settings/patch, uninstall plugins added during import, compensate modified files; current files are backed up to a safe location first.","snapshots.kind.credentialHint":"Manual hint","snapshots.kind.fileRemove":"Remove file","snapshots.kind.fileRestore":"Restore file","snapshots.kind.hostFileRemove":"Remove whole file","snapshots.kind.hostFileRestore":"Restore whole file","snapshots.kind.pluginRemove":"Uninstall plugin","snapshots.kind.skip":"Skip","snapshots.kind.unknown":"Unknown","snapshots.loading":"Loading snapshots…","snapshots.manualHints":"Manual action needed","snapshots.noActions":"No restorable actions for this snapshot (or all skipped).","snapshots.pin":"Pin","snapshots.plan.added":"{count} добавлено","snapshots.plan.afterLabel":"Снимок (будет восстановлен)","snapshots.plan.beforeLabel":"Текущее (на этой машине)","snapshots.plan.changed":"{count} файлов для восстановления","snapshots.plan.deleted":"{count} к удалению","snapshots.plan.diffBinary":"Двоичный файл: построчное сравнение недоступно","snapshots.plan.diffDegraded":"Слишком много различий: показана замена всего блока","snapshots.plan.diffEscape":"Путь выходит за пределы песочницы: чтение отклонено","snapshots.plan.diffIdentical":"Обе стороны идентичны — построчных различий нет","snapshots.plan.diffMissingBlob":"В снимке отсутствует содержимое этого файла (возможно, снимок неполон)","snapshots.plan.diffNotApplicable":"Это действие не связано с изменением содержимого файла","snapshots.plan.diffTooLarge":"Файл слишком велик ({size}): построчное сравнение недоступно","snapshots.plan.diffTruncated":"Показаны первые {shown} строк из {total}","snapshots.plan.diffUnreadable":"Не удалось прочитать файл (отсутствует или не является обычным файлом)","snapshots.plan.group.changes":"К восстановлению (изменения файлов)","snapshots.plan.group.deletes":"К удалению","snapshots.plan.group.hints":"Ручные шаги","snapshots.plan.group.plugins":"Удаление плагинов","snapshots.plan.group.skips":"Без изменений","snapshots.plan.hints":"{count} ручных шагов","snapshots.plan.loadingDiff":"Загрузка различий…","snapshots.plan.noStats":"Нет статистики строк (хост её не предоставил)","snapshots.plan.plugins":"{count} удалений плагинов","snapshots.plan.skips":"{count} пропущено","snapshots.plan.statSkipped.binary":"Двоичный","snapshots.plan.statSkipped.budget":"Не подсчитано (лимит файлов)","snapshots.plan.statSkipped.tooLarge":"Слишком велик для подсчёта","snapshots.plan.statSkipped.unreadable":"Не подсчитано","snapshots.plan.statsTruncated":"Слишком много или слишком большие файлы: часть не подсчитана","snapshots.plan.status.added":"Добавлено","snapshots.plan.status.deleted":"Удалено","snapshots.plan.status.hint":"Вручную","snapshots.plan.status.modified":"Изменено","snapshots.plan.status.plugin":"Плагин","snapshots.plan.status.skip":"Пропуск","snapshots.planTitle":"Restore Plan Preview","snapshots.plugins":"Plugins","snapshots.removedPlugins":"Removed plugins","snapshots.reportDone":"Готово","snapshots.reportTitle":"Restore Report","snapshots.restored":"Restored","snapshots.retentionHint":"Up to {count} snapshots are kept automatically (oldest pruned); pinned snapshots are exempt from auto-pruning and can only be deleted manually.","snapshots.selectHint":"Select a snapshot to preview its restore plan (read-only preview, changes nothing):","snapshots.skipped":"Skipped","snapshots.sourceZip":"Source","snapshots.status":"Status","snapshots.status.done":"Done","snapshots.status.pending":"Pending","snapshots.status.rolled-back":"Rolled back","snapshots.status.unknown":"Unknown","snapshots.subTab.files":"Backup Files","snapshots.subTab.recovery":"Recovery","snapshots.subTab.restore":"Snapshot Restore","snapshots.subTab.schedule":"Расписание","snapshots.summary":"{hostFileRestores} whole-file restore · {hostFileRemoves} whole-file remove · {pluginRemoves} plugin uninstall · {fileRestores} file restore · {fileRemoves} file remove · {credentialHints} credential hints · {skips} skip","snapshots.title":"Backup & Snapshots","snapshots.unpin":"Unpin","snapshots.viewPlan":"View restore plan","starPrompt.body":"If you find this plugin useful, please give it a ⭐ on GitHub — your support keeps it maintained!","starPrompt.dismiss":"Don't ask again","starPrompt.star":"Star on GitHub","starPrompt.title":"Enjoying Config Manager?","status.ready":"Config Manager ready (plugin {version} · DSH {dsh} · {platform})","status.unavailable":"Config Manager service unavailable — verify the plugin is mounted.","sync.status.lastSync":"Последняя синхронизация","sync.status.sections":"Синхронизируемые разделы","toast.copied":"Скопировано в буфер обмена","toast.copyFailed":"Не удалось скопировать — выделите текст и скопируйте вручную","toast.refreshed":"Обновлено","view.about":"About","view.export":"Export","view.import":"Import","view.market":"Marketplace","view.more":"More","view.overview":"Обзор","view.profiles":"Управление профилями","view.snapshots":"Backup & Snapshots","view.sync":"Remote Sync","view.transfer":"Экспорт и импорт"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"config-manager-sync":{"action.pull":"Pull diff preview","action.pulling":"Pulling…","action.push":"Push to remote","action.pushing":"Pushing…","autosync.description":"When enabled, DSH keeps config in sync in the background: uploads locally-changed config automatically, pulls and merges only when it detects a new remote snapshot; the timer is just a fallback poll and no-ops when nothing changed. Local writes happen only when there are no conflicts or manual-decision items.","autosync.due":"Due — running soon","autosync.enable":"Enable auto sync","autosync.failCount":"{n} consecutive failure(s)","autosync.failed":"Failed","autosync.interval":"Fallback poll interval","autosync.interval12h":"12 hr","autosync.interval15m":"15 min","autosync.interval24h":"24 hr","autosync.interval30m":"30 min","autosync.interval5m":"5 min","autosync.interval60m":"60 min","autosync.interval6h":"6 hr","autosync.intervalHint":"On interval / DSH startup, checks for a new remote snapshot and pulls+merges only if one exists (no upload); local config changes trigger an upload.","autosync.nextRun":"Next in ~{time}","autosync.partial":"Partial","autosync.running":"Auto sync running…","autosync.skipped":"Skipped","autosync.status":"Last run: {status} ({time})","autosync.statusNever":"Never run","autosync.success":"Success","autosync.title":"Auto Sync","change.total":"{total} change(s)","channel.configured":"Configured","channel.currentUrl":"Current URL","channel.git":"Git private repo","channel.notConfigured":"Not configured","channel.open":"Configure sync channel","channel.openHint":"Remote sync runs through a sync channel: a private Git repository or a WebDAV server. Click the button to configure or change it in the dialog.","channel.perChannelHint":"Auto sync, sync mode, encryption and remote snapshots are configured independently for GitHub and WebDAV channels.","channel.title":"Sync Channel","channel.webdav":"WebDAV server","common.close":"Закрыть","common.loading":"Загрузка…","common.retry":"Повторить","config.repoUrl":"Repository URL","config.repoUrlHint":"Private Git repository URL (https / ssh / local path). Use the credential field below for the auth token; never embed it in the URL.","config.save":"Save config","config.saveHint":"Form changes are saved automatically (password/token written securely into DSH credentials, never into sync files or logs); you can also save explicitly with the button.","config.saving":"Saving…","config.title":"Repository","config.token":"Auth token","config.tokenHint":"Securely written into DSH credentials (ref {ref}); never written into sync files or logs. Leave blank to reuse the saved credential.","config.tokenPlaceholder":"ghp_… (optional)","config.tokenSaved":"Credential configured","github.cancel":"Cancel","github.clientIdHint":"Requires the githubClientId plugin config (the client_id of your GitHub OAuth App).","github.description":"Authorize via the GitHub OAuth device flow: no manual token entry — after you approve in the browser, the token is written into DSH credentials automatically.","github.login":"Sign in with GitHub","github.openAuth":"Open GitHub authorization page","github.retry":"Sign in again","github.title":"GitHub Sign-in","github.tokenInvalid":"GitHub sign-in is no longer valid — please sign in again.","github.userCode":"One-time code","history.autosyncApplied":"Applied sections: {sections}","history.autosyncBoth":"Both","history.autosyncConflicted":"Skipped conflict sections: {sections}","history.autosyncDirection":"Direction: {direction}","history.autosyncError":"Error: {error}","history.autosyncNotified":"Notified (3 consecutive failures)","history.autosyncPull":"Pull","history.autosyncPush":"Push","history.autosyncReasonConflict":"Conflict","history.autosyncReasonNetwork":"Network issue","history.autosyncReasonNoRemote":"No remote snapshot","history.autosyncReasonNotConfigured":"No repository configured","history.autosyncSkipReason":"Skip reason: {reason}","history.channelGit":"GitHub","history.channelWebdav":"WebDAV","history.colDetail":"Detail","history.colKind":"Kind","history.colTime":"Time","history.column.autosync":"Auto Sync","history.column.snapshot":"Snapshot","history.detail":"Detail","history.empty":"No sync history yet","history.emptyHint":"Records appear here after your first push / one-click sync / auto sync.","history.kindAutosync":"Auto Sync","history.kindSnapshot":"Snapshot","history.sectionCount":"sections","history.stats.autosync":"Автосинхронизаций: {count}","history.stats.failed":"Сбоев: {count}","history.stats.skipped":"Пропущено: {count}","history.stats.snapshots":"Снимков: {count}","history.stats.summary":"Статистика истории синхронизации","history.stats.total":"Всего: {count}","history.title":"Sync History","load.failed":"Не удалось загрузить статус синхронизации","mode.advanced":"Advanced (Custom Export)","mode.advancedHint":"Manually select the sections to push (same as Custom Export in the Export tab); only portable sections can sync.","mode.atLeastOne":"Select at least one section to sync","mode.decryptPassword":"Decryption password (for encrypted snapshot pull/sync, optional)","mode.decryptPasswordHint":"Provide it when pulling or one-click syncing an encrypted snapshot; without it encrypted snapshots cannot be read (auto sync skips and reports them in history).","mode.default":"Default (Quick Export)","mode.defaultCount":"Will sync {n} recommended section(s)","mode.defaultHint":"Push all recommended sections (settings, providers, plugins, prompts, skills, etc.) in one click — no configuration needed.","mode.encrypt":"Encrypt backup","mode.encryptAutosyncNotice":"Encrypted snapshots are only produced/consumed by manual push/pull; auto sync has no password, so it skips encrypted snapshots and reports them in history.","mode.encryptHint":"Encrypt the sync snapshot with a password (AES-256-GCM). The password is memory-only for this push and never persisted; auto sync cannot decrypt encrypted snapshots, so it skips them and reports it in sync history.","mode.hint":"Choose which sections to export when pushing: Default = recommended sections in one click (Quick Export); Advanced = custom selection (Custom Export).","mode.includeSecrets":"Export secrets","mode.includeSecretsHint":"Write real credential values into the encrypted snapshot (auto-selects encryption when checked; secrets never enter a plaintext snapshot).","mode.password":"Encryption password","mode.passwordConfirm":"Confirm password","mode.passwordMismatch":"Passwords do not match","mode.passwordRequired":"Encryption requires a password","mode.persistHint":"The mode and section selection are saved locally: both auto sync and manual push use this configuration (persists across restarts).","mode.sectionPortable":"Portable","mode.sectionRecommended":"Recommended","mode.sectionsHint":"Only portable sections can sync: device-specific (plugin files, credentials status, sessions) and platform-specific (MCP, workspaces) sections never participate in remote sync.","mode.sectionsTitle":"Sync Sections","mode.security":"Encryption & Secret Export (Security Options)","mode.title":"Sync Mode","privateRepoHint":"Security requirement: the sync repository MUST be private (a public repo would expose your configuration). The auth token is only used for repository access and is never written into sync files, commit content, or logs.","pull.empty":"Remote snapshot matches local (no changes)","pull.needsReview":"Contains items that need human decisions (conflicts / secrets / dependencies / installs)","pull.previewHint":"Read-only diff preview above; nothing is imported. One-click import is not supported in this version; use the Import wizard to apply a downloaded backup if needed.","pull.title":"Pull Diff Preview","push.title":"Push Result","section.description":"Синхронизация переносимой конфигурации между устройствами через приватный Git-репозиторий (секреты не синхронизируются)","section.label":"Удалённая синхронизация","sections.title":"Synced Sections","status.never":"Never synced","status.title":"Sync Status","syncStatus.lastSync":"Последняя синхронизация","syncStatus.sections":"Синхронизируемые разделы","syncStatus.state":"Состояние","syncflow.adoptHint":"Check = import item; uncheck = skip","syncflow.adoptRemote":"Adopt remote","syncflow.bulkHint":"Bulk decisions only apply to conflict items; other changes are adopted by default.","syncflow.button":"One-click sync","syncflow.cancel":"Cancel","syncflow.confirmImport":"Confirm import","syncflow.conflictAncestorLabel":"Common ancestor","syncflow.conflictLocalLabel":"Current","syncflow.conflictRemoteLabel":"Backup","syncflow.conflictTitle":"Resolve conflict","syncflow.conflictUnresolved":"Conflict item {itemId} has no resolution yet (keep current / use backup)","syncflow.conflictUseLocal":"Keep current","syncflow.conflictUseRemote":"Use backup","syncflow.diff":"Diff","syncflow.diffCount":"{count} change(s)","syncflow.empty":"Remote snapshot matches local (no changes)","syncflow.importDone":"Imported {n} section(s)","syncflow.importFailed":"Import failed (rolled back)","syncflow.importWarnings":"Import warnings","syncflow.importedSections":"Written","syncflow.keepLocalAll":"Keep all current","syncflow.latestSnapshot":"Latest snapshot","syncflow.needsRestart":"Some changes require a DSH restart to take effect","syncflow.needsReviewBadge":"Needs decision","syncflow.noSnapshots":"No remote snapshots","syncflow.pushConfirm":"Push","syncflow.pushFirstBaseline":"No remote snapshots yet: this push creates the first sync baseline","syncflow.pushPreviewSections":"Sections to push","syncflow.pushPreviewTitle":"Confirm Push","syncflow.pushing":"Pushing…","syncflow.refreshSnapshots":"Refresh snapshots","syncflow.refreshingSnapshots":"Fetching…","syncflow.rollback":"Rollback","syncflow.rollbackDone":"Rolled back","syncflow.rollingBack":"Rolling back…","syncflow.selectSnapshot":"Select snapshot","syncflow.snapshotOption":"({date} · {count} sections)","syncflow.syncFailed":"Sync failed","syncflow.syncing":"Syncing…","syncflow.title":"One-Click Sync","syncflow.useRemoteAll":"Use all backup","toast.autosyncLoadFailed":"Не удалось загрузить статус автосинхронизации","toast.autosyncUpdateFailed":"Не удалось обновить параметры автосинхронизации","toast.autosyncUpdated":"Параметры автосинхронизации обновлены","toast.configNothingToSave":"Введите URL канала перед сохранением","toast.configSaveFailed":"Не удалось сохранить настройки канала","toast.configSaved":"Настройки канала сохранены","toast.pullDone":"Получение завершено","toast.pullFailed":"Ошибка получения","toast.pushDone":"Отправка завершена","toast.pushFailed":"Ошибка отправки","toast.pushPreviewFailed":"Не удалось сформировать предпросмотр отправки","toast.selectionSaveFailed":"Не удалось сохранить настройки синхронизации","toast.snapshotsLoadFailed":"Не удалось загрузить удалённые снимки","toast.snapshotsRefreshed":"Список удалённых снимков обновлён","toast.syncStartFailed":"Синхронизация в один клик не удалась","warnings.title":"Section Warnings","webdav.password":"Password","webdav.passwordHint":"Securely written into DSH credentials (ref {ref}); never written into sync files or logs. Leave blank to reuse the saved credential.","webdav.passwordPlaceholder":"Password (optional)","webdav.passwordSaved":"Credential configured","webdav.presetHint":"Pick a common WebDAV server to prefill the URL; templates containing <placeholders> need to be replaced with your real server/username.","webdav.title":"WebDAV Configuration","webdav.url":"Server URL","webdav.urlHint":"WebDAV server root URL (https://…). Sync snapshots and the index are stored under a dsh-config-manager/ subdirectory of that URL. Do not include a username/password in the URL.","webdav.username":"Username","webdav.usernameHint":"HTTP Basic auth username (not sensitive, may be shown)."}}
|
|
1
|
+
{"config-manager-sync":{"action.pull":"Pull diff preview","action.pulling":"Pulling…","action.push":"Push to remote","action.pushing":"Pushing…","autosync.description":"When enabled, DSH keeps config in sync in the background: uploads locally-changed config automatically, pulls and merges only when it detects a new remote snapshot; the timer is just a fallback poll and no-ops when nothing changed. Local writes happen only when there are no conflicts or manual-decision items.","autosync.due":"Due — running soon","autosync.enable":"Enable auto sync","autosync.failCount":"{n} consecutive failure(s)","autosync.failed":"Failed","autosync.interval":"Fallback poll interval","autosync.interval12h":"12 hr","autosync.interval15m":"15 min","autosync.interval24h":"24 hr","autosync.interval30m":"30 min","autosync.interval5m":"5 min","autosync.interval60m":"60 min","autosync.interval6h":"6 hr","autosync.intervalHint":"On interval / DSH startup, checks for a new remote snapshot and pulls+merges only if one exists (no upload); local config changes trigger an upload.","autosync.nextRun":"Next in ~{time}","autosync.partial":"Partial","autosync.running":"Auto sync running…","autosync.skipped":"Skipped","autosync.status":"Last run: {status} ({time})","autosync.statusNever":"Never run","autosync.success":"Success","autosync.title":"Auto Sync","change.total":"{total} change(s)","channel.configured":"Configured","channel.currentUrl":"Current URL","channel.git":"Git private repo","channel.notConfigured":"Not configured","channel.open":"Configure sync channel","channel.openHint":"Remote sync runs through a sync channel: a private Git repository or a WebDAV server. Click the button to configure or change it in the dialog.","channel.perChannelHint":"Auto sync, sync mode, encryption and remote snapshots are configured independently for GitHub and WebDAV channels.","channel.title":"Sync Channel","channel.webdav":"WebDAV server","common.close":"Закрыть","common.loading":"Загрузка…","common.retry":"Повторить","config.repoUrl":"Repository URL","config.repoUrlHint":"Private Git repository URL (https / ssh / local path). Use the credential field below for the auth token; never embed it in the URL.","config.save":"Save config","config.saveHint":"Form changes are saved automatically (password/token written securely into DSH credentials, never into sync files or logs); you can also save explicitly with the button.","config.saving":"Saving…","config.title":"Repository","config.token":"Auth token","config.tokenHint":"Securely written into DSH credentials (ref {ref}); never written into sync files or logs. Leave blank to reuse the saved credential.","config.tokenPlaceholder":"ghp_… (optional)","config.tokenSaved":"Credential configured","github.cancel":"Cancel","github.clientIdHint":"Requires the githubClientId plugin config (the client_id of your GitHub OAuth App).","github.description":"Authorize via the GitHub OAuth device flow: no manual token entry — after you approve in the browser, the token is written into DSH credentials automatically.","github.login":"Sign in with GitHub","github.openAuth":"Open GitHub authorization page","github.retry":"Sign in again","github.title":"GitHub Sign-in","github.tokenInvalid":"GitHub sign-in is no longer valid — please sign in again.","github.userCode":"One-time code","history.autosyncApplied":"Applied sections: {sections}","history.autosyncBoth":"Both","history.autosyncConflicted":"Skipped conflict sections: {sections}","history.autosyncDirection":"Direction: {direction}","history.autosyncError":"Error: {error}","history.autosyncNotified":"Notified (3 consecutive failures)","history.autosyncPull":"Pull","history.autosyncPush":"Push","history.autosyncReasonConflict":"Conflict","history.autosyncReasonNetwork":"Network issue","history.autosyncReasonNoRemote":"No remote snapshot","history.autosyncReasonNotConfigured":"No repository configured","history.autosyncSkipReason":"Skip reason: {reason}","history.channelGit":"GitHub","history.channelWebdav":"WebDAV","history.colDetail":"Detail","history.colKind":"Kind","history.colTime":"Time","history.column.autosync":"Auto Sync","history.column.snapshot":"Snapshot","history.detail":"Detail","history.empty":"No sync history yet","history.emptyHint":"Records appear here after your first push / one-click sync / auto sync.","history.kindAutosync":"Auto Sync","history.kindSnapshot":"Snapshot","history.sectionCount":"sections","history.stats.autosync":"Автосинхронизаций: {count}","history.stats.failed":"Сбоев: {count}","history.stats.skipped":"Пропущено: {count}","history.stats.snapshots":"Снимков: {count}","history.stats.summary":"Статистика истории синхронизации","history.stats.total":"Всего: {count}","history.title":"Sync History","load.failed":"Не удалось загрузить статус синхронизации","mode.advanced":"Advanced (Custom Export)","mode.advancedHint":"Manually select the sections to push (same as Custom Export in the Export tab); only portable sections can sync.","mode.atLeastOne":"Select at least one section to sync","mode.choose":"Выбрать разделы синхронизации","mode.clearSavedPassword":"Удалить сохранённый пароль","mode.decryptPassword":"Decryption password (for encrypted snapshot pull/sync, optional)","mode.decryptPasswordHint":"Provide it when pulling or one-click syncing an encrypted snapshot; without it encrypted snapshots cannot be read (auto sync skips and reports them in history).","mode.decryptPasswordPlaceholder":"Сохранён (оставьте пустым для повторного использования)","mode.decryptPasswordSaved":"Пароль расшифровки сохранён локально","mode.default":"Default (Quick Export)","mode.defaultCount":"Will sync {n} recommended section(s)","mode.defaultHint":"Push all recommended sections (settings, providers, plugins, prompts, skills, etc.) in one click — no configuration needed.","mode.encrypt":"Encrypt backup","mode.encryptAutosyncNotice":"Encrypted snapshots are only produced/consumed by manual push/pull; auto sync has no password, so it skips encrypted snapshots and reports them in history.","mode.encryptHint":"Encrypt the sync snapshot with a password (AES-256-GCM). The password is memory-only for this push and never persisted; auto sync cannot decrypt encrypted snapshots, so it skips them and reports it in sync history.","mode.hint":"Choose which sections to export when pushing: Default = recommended sections in one click (Quick Export); Advanced = custom selection (Custom Export).","mode.includeSecrets":"Export secrets","mode.includeSecretsHint":"Write real credential values into the encrypted snapshot (auto-selects encryption when checked; secrets never enter a plaintext snapshot).","mode.password":"Encryption password","mode.passwordClearNotice":"Снятие флажка «Шифровать бэкап» удаляет сохранённый пароль.","mode.passwordConfirm":"Confirm password","mode.passwordMismatch":"Passwords do not match","mode.passwordPlaceholder":"Сохранён (оставьте пустым для повторного использования)","mode.passwordRequired":"Encryption requires a password","mode.passwordSaved":"Пароль сохранён локально","mode.passwordSavedHint":"Пароль уже сохранён локально: оставьте поля пустыми, чтобы использовать его, или введите новый для замены.","mode.persistHint":"The mode and section selection are saved locally: both auto sync and manual push use this configuration (persists across restarts).","mode.pickerDone":"Готово","mode.pickerHint":"Изменения применяются и сохраняются немедленно (закрытие диалога завершает задачу).","mode.pickerTitle":"Выбор разделов синхронизации","mode.sectionDeviceSpecific":"Специфично для устройства","mode.sectionPortable":"Portable","mode.sectionRecommended":"Recommended","mode.sectionsHint":"Only portable sections can sync: device-specific (plugin files, credentials status, sessions) and platform-specific (MCP, workspaces) sections never participate in remote sync.","mode.sectionsTitle":"Sync Sections","mode.security":"Encryption & Secret Export (Security Options)","mode.selectedCount":"Выбрано разделов: {n}","mode.sessionsLimit":"Сколько последних сессий синхронизировать","mode.sessionsLimitHint":"Содержимое сессий конфиденциально, поэтому по умолчанию включаются только последние 5 (0 = выбрать раздел, но не переносить сессии); единицей является каталог сессии, поэтому все журналы одной сессии передаются вместе.","mode.title":"Sync Mode","privateRepoHint":"Security requirement: the sync repository MUST be private (a public repo would expose your configuration). The auth token is only used for repository access and is never written into sync files, commit content, or logs.","pull.empty":"Remote snapshot matches local (no changes)","pull.needsReview":"Contains items that need human decisions (conflicts / secrets / dependencies / installs)","pull.previewHint":"Read-only diff preview above; nothing is imported. One-click import is not supported in this version; use the Import wizard to apply a downloaded backup if needed.","pull.title":"Pull Diff Preview","push.title":"Push Result","section.description":"Синхронизация переносимой конфигурации между устройствами через приватный Git-репозиторий (секреты не синхронизируются)","section.label":"Удалённая синхронизация","sections.title":"Synced Sections","status.never":"Never synced","status.title":"Sync Status","syncStatus.lastSync":"Последняя синхронизация","syncStatus.sections":"Синхронизируемые разделы","syncStatus.state":"Состояние","syncflow.adoptHint":"Check = import item; uncheck = skip","syncflow.adoptRemote":"Adopt remote","syncflow.bulkHint":"Bulk decisions only apply to conflict items; other changes are adopted by default.","syncflow.button":"One-click sync","syncflow.cancel":"Cancel","syncflow.confirmImport":"Confirm import","syncflow.conflictAncestorLabel":"Common ancestor","syncflow.conflictLocalLabel":"Current","syncflow.conflictRemoteLabel":"Backup","syncflow.conflictTitle":"Resolve conflict","syncflow.conflictUnresolved":"Conflict item {itemId} has no resolution yet (keep current / use backup)","syncflow.conflictUseLocal":"Keep current","syncflow.conflictUseRemote":"Use backup","syncflow.diff":"Diff","syncflow.diffCount":"{count} change(s)","syncflow.empty":"Remote snapshot matches local (no changes)","syncflow.importDone":"Imported {n} section(s)","syncflow.importFailed":"Import failed (rolled back)","syncflow.importWarnings":"Import warnings","syncflow.importedSections":"Written","syncflow.keepLocalAll":"Keep all current","syncflow.latestSnapshot":"Latest snapshot","syncflow.needsRestart":"Some changes require a DSH restart to take effect","syncflow.needsReviewBadge":"Needs decision","syncflow.noSnapshots":"No remote snapshots","syncflow.pushConfirm":"Push","syncflow.pushFirstBaseline":"No remote snapshots yet: this push creates the first sync baseline","syncflow.pushPreviewSections":"Sections to push","syncflow.pushPreviewTitle":"Confirm Push","syncflow.pushing":"Pushing…","syncflow.refreshSnapshots":"Refresh snapshots","syncflow.refreshingSnapshots":"Fetching…","syncflow.rollback":"Rollback","syncflow.rollbackDone":"Rolled back","syncflow.rollingBack":"Rolling back…","syncflow.selectSnapshot":"Select snapshot","syncflow.snapshotOption":"({date} · {count} sections)","syncflow.syncFailed":"Sync failed","syncflow.syncing":"Syncing…","syncflow.title":"One-Click Sync","syncflow.useRemoteAll":"Use all backup","toast.autosyncLoadFailed":"Не удалось загрузить статус автосинхронизации","toast.autosyncUpdateFailed":"Не удалось обновить параметры автосинхронизации","toast.autosyncUpdated":"Параметры автосинхронизации обновлены","toast.configNothingToSave":"Введите URL канала перед сохранением","toast.configSaveFailed":"Не удалось сохранить настройки канала","toast.configSaved":"Настройки канала сохранены","toast.pullDone":"Получение завершено","toast.pullFailed":"Ошибка получения","toast.pushDone":"Отправка завершена","toast.pushFailed":"Ошибка отправки","toast.pushPreviewFailed":"Не удалось сформировать предпросмотр отправки","toast.selectionSaveFailed":"Не удалось сохранить настройки синхронизации","toast.snapshotsLoadFailed":"Не удалось загрузить удалённые снимки","toast.snapshotsRefreshed":"Список удалённых снимков обновлён","toast.syncStartFailed":"Синхронизация в один клик не удалась","warnings.title":"Section Warnings","webdav.password":"Password","webdav.passwordHint":"Securely written into DSH credentials (ref {ref}); never written into sync files or logs. Leave blank to reuse the saved credential.","webdav.passwordPlaceholder":"Password (optional)","webdav.passwordSaved":"Credential configured","webdav.presetHint":"Pick a common WebDAV server to prefill the URL; templates containing <placeholders> need to be replaced with your real server/username.","webdav.title":"WebDAV Configuration","webdav.url":"Server URL","webdav.urlHint":"WebDAV server root URL (https://…). Sync snapshots and the index are stored under a dsh-config-manager/ subdirectory of that URL. Do not include a username/password in the URL.","webdav.username":"Username","webdav.usernameHint":"HTTP Basic auth username (not sensitive, may be shown)."}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"config-manager-market":{"common.cancel":"Отмена","common.close":"Закрыть","common.loading":"Загрузка…","common.retry":"Повторить","common.unknownError":"Неизвестная ошибка","config.refresh":"Refresh","config.refreshed":"Индекс витрины обновлён","config.refreshing":"Refreshing…","config.title":"Market Repository","detail.approval.count":"{selected}/{total} section(s) approved","detail.approval.highRiskHint":"These sections install plugins / write files / inject global instructions / register MCP / restore sessions — high-risk changes, not imported by default. Check each one to import it.","detail.approval.requiresApproval":"Requires approval","detail.approval.safe":"Importable","detail.approval.title":"Approve sections to import","detail.back":"Back to list","detail.downloadedAt":"Downloaded: {time}","detail.emptySections":"This item contains no importable sections","detail.errors":"Verification errors:","detail.failed":"Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)","detail.impact.conflicts":"{count} conflict(s)","detail.impact.paths":"{count} path mapping(s)","detail.impact.restart":"DSH restart required","detail.impact.secrets":"{count} secret(s) to re-enter","detail.impact.unchanged":"{count} identical","detail.impact.willChange":"{count} item(s) will change","detail.import":"Confirm import","detail.needReview":"Needs human confirmation","detail.noApproval":"No sections approved — cannot import","detail.previewHint":"Read-only preview below (changes nothing). Confirming the import reuses the existing safe pipeline (snapshot + validation + rollback on failure).","detail.title":"Item Details","detail.version":"version {version}","disclaimer.confirm":"I understand, continue","disclaimer.dontAsk":"Don't ask again (no more disclaimers for this action)","disclaimer.download.text":"You are about to download configs from a public network market and import them locally.\\n\\nDownloaded content is untrusted input: not officially reviewed and may carry risks (installing plugins / writing files / changing settings).\\n· Everything is validated and shown before import; high-risk sections are not imported by default and require individual approval;\\n· A snapshot is auto-created before import and rollback is available on failure;\\n· Please verify the source and content before confirming the import.","disclaimer.install.text":"You are about to reinstall configs from your public repo to this machine.\\n\\nThis is content you uploaded before, but it still goes through the same validation and per-section approval:\\n· High-risk sections are not imported by default and require individual approval;\\n· A snapshot is auto-created before import and rollback is available on failure.","disclaimer.title":"Disclaimer","disclaimer.upload.text":"You are about to upload configs to your public repo (<login>/dsh-configs) and submit a listing request to the official market.\\n\\nUploaded content becomes publicly visible and requires human review before entering the official market. Please ensure:\\n· No real secrets / credentials are included (env-var references like $VAR are safe);\\n· No personal privacy or local environment info is included;\\n· You have the right to share these configs.","import.done":"Импорт завершён: записано элементов: {count}","import.failed":"Ошибка импорта (сбоев: {count})","import.needsRestart":"Некоторые изменения требуют перезапуска DSH","list.browse":"Browse","list.browsed":"Витрина обновлена","list.cacheCached":"cached","list.cacheFresh":"just fetched","list.cacheNone":"not cached","list.categoriesAll":"All categories","list.count":"{count} item(s)","list.download":"View details","list.empty":"The built-in market has not loaded yet. Click \\«Refresh\\» first.","list.filtered":"({count} after filter)","list.loading":"Reading market…","list.noItems":"This market has no items.","list.searchPlaceholder":"Search name / author / description…","list.sectionsAll":"All sections","list.sectionsUnknown":"{count} more item(s) not downloaded yet — cannot match by section","list.sortDefault":"Default order","list.sortName":"Name A–Z","list.sortStars":"Most starred","list.sortUpdated":"Recently updated","list.sourceAll":"All sources","list.sourceOfficial":"Official","list.sourcePersonal":"Community","list.stars":"⭐ {count}","list.starsHint":"Stars of the source repo (repo-level, not per item)","myconfigs.back":"Back to market","myconfigs.delete.confirm":"Confirm delete","myconfigs.delete.confirmText":"Delete? This permanently removes the item index and files from your config repo (not recoverable)","myconfigs.delete.confirmTitle":"Delete item","myconfigs.delete.delistStarted":"Local item deleted; a \\«delist PR\\» has been submitted (removal from the official market needs human merge; the item may still appear in the market meanwhile)","myconfigs.delete.prClosed":"Local item deleted; its pending listing PR has been closed","myconfigs.delete.run":"Delete","myconfigs.error.loadItems":"Failed to read uploaded items","myconfigs.error.loadStatus":"Failed to read sign-in status","myconfigs.install.failed":"Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)","myconfigs.item.install":"Install locally","myconfigs.item.openPr":"View listing PR","myconfigs.item.update":"Update","myconfigs.list.empty":"No configs uploaded yet","myconfigs.list.loading":"Loading…","myconfigs.list.openRepo":"Open repo","myconfigs.list.refresh":"Refresh","myconfigs.list.summary":"{total} item(s) · {listed} listed · {pending} pending · {none} not listed","myconfigs.list.title":"Uploaded","myconfigs.login.cancel":"Cancel sign-in","myconfigs.login.checking":"Checking sign-in status…","myconfigs.login.hint":"After signing in you can upload configs to your public repo (auto-created as <login>/dsh-configs) and submit a listing PR to the official market (target repo is fixed and not editable).","myconfigs.login.loggedInAs":"Signed in as {login}","myconfigs.login.openAuth":"Open authorization page","myconfigs.login.relogin":"Sign in again","myconfigs.login.repoMissing":"Config repo not created yet — it will be auto-created (public) on first upload","myconfigs.login.repoReady":"Config repo: {repo}","myconfigs.login.start":"Sign in with GitHub","myconfigs.login.targetRepo":"Listing target (fixed): {repo}","myconfigs.login.title":"GitHub sign-in","myconfigs.login.userCode":"One-time code: {code}","myconfigs.result.listingFailed":"Listing failed","myconfigs.result.listingPending":"Uploaded ✓ submitting listing in the background (fork + PR) — list status will update shortly","myconfigs.result.openPr":"View PR","myconfigs.result.openRepo":"Open repo","myconfigs.result.pr":"Listing PR #{number}","myconfigs.result.relist":"Resubmit listing","myconfigs.result.repo":"Config repo","myconfigs.result.sections":"Sections: {sections}","myconfigs.result.sha256":"SHA-256: {hash}","myconfigs.result.title":"Upload/update complete","myconfigs.result.version":"version {version}","myconfigs.tab.browse":"Browse Market","myconfigs.tab.myconfigs":"My Configs","myconfigs.update.hint":"The version will be bumped automatically (+1); item info is prefilled (name editable).","myconfigs.update.run":"Update","myconfigs.update.running":"Updating…","myconfigs.update.selectZip":"Choose new ZIP…","myconfigs.update.title":"Update config","myconfigs.update.zipHint":"Updating needs a new config zip: pick one and it will be validated automatically, then you can update.","myconfigs.upload.form.autoHint":"These fields are generated automatically:","myconfigs.upload.form.categories":"Categories (optional, comma-separated)","myconfigs.upload.form.description":"Description (optional)","myconfigs.upload.form.name":"Name","myconfigs.upload.form.nameHint":"Prefilled from the zip file name; editable","myconfigs.upload.form.title":"Item info","myconfigs.upload.mode.migrate":"Migrate (keep everything)","myconfigs.upload.mode.share":"Share (auto-exclude sensitive content)","myconfigs.upload.mode.shareHint":"Share mode auto-excludes device/platform-specific sections (credentials status / sessions / MCP / workspaces, etc.) and enforces privacy scanning — any sensitive trace blocks publishing instead of just warning.","myconfigs.upload.mode.title":"Publish mode","myconfigs.upload.reselect":"Choose again","myconfigs.upload.run":"Upload","myconfigs.upload.running":"Uploading…","myconfigs.upload.select":"Choose ZIP…","myconfigs.upload.selectHint":"Pick an exported config zip (create a backup on the \\«Export\\» tab first, then pick it here). The market channel never carries secrets — backups containing secrets are rejected.","myconfigs.upload.selected":"Selected: {name}","myconfigs.upload.title":"Upload","myconfigs.upload.validate":"Run validation","myconfigs.upload.validateInvalid":"Content validation failed — cannot upload","myconfigs.upload.validateOk":"Validation passed: valid content, no secrets","myconfigs.upload.validateSecrets":"Contains secrets: the market channel never carries secrets — upload rejected","myconfigs.upload.validating":"Validating…","section.description":"Просмотр и загрузка конфигураций сообщества (публичные Git-репозитории; загружаемый контент не является доверенным — проверяется перед импортом)","section.label":"Каталог конфигураций"}}
|
|
1
|
+
{"config-manager-market":{"common.cancel":"Отмена","common.close":"Закрыть","common.loading":"Загрузка…","common.retry":"Повторить","common.unknownError":"Неизвестная ошибка","config.refresh":"Refresh","config.refreshed":"Индекс витрины обновлён","config.refreshing":"Refreshing…","config.title":"Market Repository","detail.approval.count":"{selected}/{total} section(s) approved","detail.approval.highRiskHint":"These sections install plugins / write files / inject global instructions / register MCP / restore sessions — high-risk changes, not imported by default. Check each one to import it.","detail.approval.requiresApproval":"Requires approval","detail.approval.safe":"Importable","detail.approval.title":"Approve sections to import","detail.back":"Back to list","detail.downloadedAt":"Downloaded: {time}","detail.emptySections":"This item contains no importable sections","detail.errors":"Verification errors:","detail.failed":"Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)","detail.impact.conflicts":"{count} conflict(s)","detail.impact.paths":"{count} path mapping(s)","detail.impact.restart":"DSH restart required","detail.impact.secrets":"{count} secret(s) to re-enter","detail.impact.unchanged":"{count} identical","detail.impact.willChange":"{count} item(s) will change","detail.import":"Confirm import","detail.needReview":"Needs human confirmation","detail.noApproval":"No sections approved — cannot import","detail.previewHint":"Read-only preview below (changes nothing). Confirming the import reuses the existing safe pipeline (snapshot + validation + rollback on failure).","detail.title":"Item Details","detail.version":"version {version}","disclaimer.confirm":"I understand, continue","disclaimer.dontAsk":"Don't ask again (no more disclaimers for this action)","disclaimer.download.text":"You are about to download configs from a public network market and import them locally.\\n\\nDownloaded content is untrusted input: not officially reviewed and may carry risks (installing plugins / writing files / changing settings).\\n· Everything is validated and shown before import; high-risk sections are not imported by default and require individual approval;\\n· A snapshot is auto-created before import and rollback is available on failure;\\n· Please verify the source and content before confirming the import.","disclaimer.install.text":"You are about to reinstall configs from your public repo to this machine.\\n\\nThis is content you uploaded before, but it still goes through the same validation and per-section approval:\\n· High-risk sections are not imported by default and require individual approval;\\n· A snapshot is auto-created before import and rollback is available on failure.","disclaimer.title":"Disclaimer","disclaimer.upload.text":"You are about to upload configs to your public repo (<login>/dsh-configs) and submit a listing request to the official market.\\n\\nUploaded content becomes publicly visible and requires human review before entering the official market. Please ensure:\\n· No real secrets / credentials are included (env-var references like $VAR are safe);\\n· No personal privacy or local environment info is included;\\n· You have the right to share these configs.","import.done":"Импорт завершён: записано элементов: {count}","import.failed":"Ошибка импорта (сбоев: {count})","import.needsRestart":"Некоторые изменения требуют перезапуска DSH","list.browse":"Browse","list.browsed":"Витрина обновлена","list.cacheCached":"cached","list.cacheFresh":"just fetched","list.cacheNone":"not cached","list.categoriesAll":"All categories","list.count":"{count} item(s)","list.download":"View details","list.empty":"The built-in market has not loaded yet. Click \\«Refresh\\» first.","list.filtered":"({count} after filter)","list.loading":"Reading market…","list.noItems":"This market has no items.","list.searchPlaceholder":"Search name / author / description…","list.sectionsAll":"All sections","list.sectionsUnknown":"{count} more item(s) not downloaded yet — cannot match by section","list.sortDefault":"Default order","list.sortName":"Name A–Z","list.sortStars":"Most starred","list.sortUpdated":"Recently updated","list.sourceAll":"All sources","list.sourceOfficial":"Official","list.sourcePersonal":"Community","list.stars":"⭐ {count}","list.starsHint":"Stars of the source repo (repo-level, not per item)","myconfigs.back":"Back to market","myconfigs.delete.confirm":"Confirm delete","myconfigs.delete.confirmText":"Delete? This permanently removes the item index and files from your config repo (not recoverable)","myconfigs.delete.confirmTitle":"Delete item","myconfigs.delete.delistStarted":"Local item deleted; a \\«delist PR\\» has been submitted (removal from the official market needs human merge; the item may still appear in the market meanwhile)","myconfigs.delete.prClosed":"Local item deleted; its pending listing PR has been closed","myconfigs.delete.run":"Delete","myconfigs.error.loadItems":"Failed to read uploaded items","myconfigs.error.loadStatus":"Failed to read sign-in status","myconfigs.install.failed":"Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)","myconfigs.item.install":"Install locally","myconfigs.item.openPr":"View listing PR","myconfigs.item.update":"Update","myconfigs.list.empty":"No configs uploaded yet","myconfigs.list.loading":"Loading…","myconfigs.list.openRepo":"Open repo","myconfigs.list.refresh":"Refresh","myconfigs.list.summary":"{total} item(s) · {listed} listed · {pending} pending · {none} not listed","myconfigs.list.title":"Uploaded","myconfigs.login.cancel":"Cancel sign-in","myconfigs.login.checking":"Checking sign-in status…","myconfigs.login.hint":"After signing in you can upload configs to your public repo (auto-created as <login>/dsh-configs) and submit a listing PR to the official market (target repo is fixed and not editable).","myconfigs.login.loggedInAs":"Signed in as {login}","myconfigs.login.openAuth":"Open authorization page","myconfigs.login.relogin":"Sign in again","myconfigs.login.repoMissing":"Config repo not created yet — it will be auto-created (public) on first upload","myconfigs.login.repoReady":"Config repo: {repo}","myconfigs.login.start":"Sign in with GitHub","myconfigs.login.targetRepo":"Listing target (fixed): {repo}","myconfigs.login.title":"GitHub sign-in","myconfigs.login.userCode":"One-time code: {code}","myconfigs.result.listingFailed":"Listing failed","myconfigs.result.listingPending":"Uploaded ✓ submitting listing in the background (fork + PR) — list status will update shortly","myconfigs.result.openPr":"View PR","myconfigs.result.openRepo":"Open repo","myconfigs.result.pr":"Listing PR #{number}","myconfigs.result.relist":"Resubmit listing","myconfigs.result.repo":"Config repo","myconfigs.result.sections":"Sections: {sections}","myconfigs.result.sha256":"SHA-256: {hash}","myconfigs.result.title":"Upload/update complete","myconfigs.result.version":"version {version}","myconfigs.tab.browse":"Browse Market","myconfigs.tab.myconfigs":"My Configs","myconfigs.update.hint":"The version will be bumped automatically (+1); item info is prefilled (name editable).","myconfigs.update.run":"Update","myconfigs.update.running":"Updating…","myconfigs.update.selectZip":"Choose new ZIP…","myconfigs.update.title":"Update config","myconfigs.update.zipHint":"Updating needs a new config zip: pick one and it will be validated automatically, then you can update.","myconfigs.upload.form.autoHint":"These fields are generated automatically:","myconfigs.upload.form.categories":"Categories (optional, comma-separated)","myconfigs.upload.form.description":"Description (optional)","myconfigs.upload.form.name":"Name","myconfigs.upload.form.nameHint":"Prefilled from the zip file name; editable","myconfigs.upload.form.title":"Item info","myconfigs.upload.mode.migrate":"Migrate (keep everything)","myconfigs.upload.mode.share":"Share (auto-exclude sensitive content)","myconfigs.upload.mode.shareHint":"Share mode auto-excludes device/platform-specific sections (credentials status / sessions / MCP / workspaces, etc.) and enforces privacy scanning — any sensitive trace blocks publishing instead of just warning.","myconfigs.upload.mode.title":"Publish mode","myconfigs.upload.reselect":"Choose again","myconfigs.upload.run":"Upload","myconfigs.upload.running":"Uploading…","myconfigs.upload.select":"Choose ZIP…","myconfigs.upload.selectHint":"Pick an exported config zip (create a backup on the \\«Export\\» tab first, then pick it here). The market channel never carries secrets — backups containing secrets are rejected.","myconfigs.upload.selected":"Selected: {name}","myconfigs.upload.title":"Upload","myconfigs.upload.validate":"Run validation","myconfigs.upload.validateInvalid":"Content validation failed — cannot upload","myconfigs.upload.validateOk":"Validation passed: valid content, no secrets","myconfigs.upload.validateSecrets":"Contains secrets: the market channel never carries secrets — upload rejected","myconfigs.upload.validating":"Validating…","review.apply":"Применить импорт","review.applyFailed":"Сбой импорта: {error}","review.applyHint":"Создаёт резервный снимок перед записью файлов на эту машину.","review.applyPh":"Импорт…","review.back":"Назад к обзору","review.cancel":"Отмена","review.changeCount":"Выбрано {selected} из {total} элем.","review.changeEmpty":"У этого элемента нет доступного для выбора содержимого.","review.changeTitle":"Что изменит этот импорт","review.changeUnchanged":"{count} идентичных","review.changeWillChange":"{count} изменится","review.confirmCount":"Будет импортировано {count} элементов","review.confirmHint":"Будет создан снимок отката перед перезаписью конфигурации.","review.confirmTitle":"Подтверждение импорта","review.conflictClose":"Скрыть решения","review.conflictDesc":"Оба источника задают разные значения: выберите, какое применить.","review.conflictHint":"Конфликтов: {count} (уже присутствуют локально с другим содержимым) требуют решения; нерешённые элементы сохранят вашу текущую конфигурацию и не будут перезаписаны.","review.conflictMine":"Оставить текущее","review.conflictOpen":"Принять решение по каждому","review.conflictTheirs":"Применить из каталога","review.conflictsTitle":"Разрешение конфликтов","review.diffBinary":"Двоичный файл (построчное сравнение скрыто)","review.diffEmpty":"Нет различий","review.diffLoadFailed":"Не удалось загрузить различия: {error}","review.diffLoading":"Загрузка различий…","review.diffTitle":"Предпросмотр изменений","review.excludedCount":"{count} исключено","review.filter.all":"Все","review.filter.highRisk":"Высокий риск","review.filter.unselected":"Не выбрано","review.filter.willChange":"Будет изменено","review.filterAll":"Все","review.filterAria":"Фильтрация по содержимому","review.filterConflicts":"Конфликты","review.filterDiffs":"Изменения","review.filterEmpty":"Нет элементов, соответствующих выбранному фильтру.","review.highRiskHint":"Выбраны разделы повышенного риска ({sections}): этот элемент взят из публичного репозитория без официальной проверки, и импорт установит плагины / запишет файлы / добавит глобальные инструкции на этой машине. Перед импортом будет создан снимок отката.","review.next":"Далее","review.nextSelect":"Выбрать состав импорта","review.nothingSelected":"Ничего не выбрано — импорт невозможен","review.pickTitle":"Выберите состав импорта","review.resultFailed":"Не удалось импортировать элементов: {count}","review.resultOk":"Записано элементов: {count}","review.resultTitle":"Результат импорта","review.reviewAgain":"Назад к выбору","review.rollback":"Откатиться к снимку до импорта","review.rollbackConfirm":"Откатить сейчас","review.rollbackConfirmMessage":"Это восстановит состояние машины до импорта «{item}» (снимок {id}). Всё, что было записано этим импортом, будет перезаписано.","review.rollbackConfirmTitle":"Откатиться к снимку до импорта?","review.rollbackDone":"Выполнен откат к снимку до импорта","review.rollbackFailed":"Сбой отката: {count}","review.rollbackHint":"Восстанавливает состояние этой машины до импорта (снимок создаётся на первом шаге импорта).","review.rollbackManual":"Требуют ручной обработки: {count}","review.rollbackRemovedPlugins":"Удалено плагинов: {count}","review.rollbackReport":"Отчёт об откате","review.rollbackRestored":"Восстановлено элементов: {count}","review.rowExcluded":"Не импортируется","review.rowUnchanged":"Идентично","review.rowWillChange":"Изменится","review.sectionUnits":"Выбрано {selected} из {total} элем.","review.snapshotMissing":"У этого импорта нет пригодного снимка, поэтому откат невозможен.","review.step.confirm":"Подтверждение","review.step.conflicts":"Конфликты","review.step.preview":"Предпросмотр","review.step.result":"Результат","review.step.select":"Выбор","review.stepAria":"Шаг {current} из {total}","section.description":"Просмотр и загрузка конфигураций сообщества (публичные Git-репозитории; загружаемый контент не является доверенным — проверяется перед импортом)","section.label":"Каталог конфигураций"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"config-manager-history":{"history.corruptedBanner":"Detected unreadable or possibly tampered history entries","history.corruptedCount":"{count} entry(s) were skipped (excluded from export)","history.empty":"No migration records yet. Executing an import, restore, profile switch, sync apply, or scheduled backup will create audit entries here.","history.export.json":"Export JSON","history.export.markdown":"Export Markdown","history.exportError":"Export failed","history.exported":"Exported","history.exporting":"Exporting…","history.filter.kind":"Operation","history.filter.recent":"Time range","history.filter.recent.200":"Latest 200","history.filter.recent.50":"Latest 50","history.filter.recent.all":"All","history.filter.result":"Result","history.filter.sections":"Sections","history.filter.title":"Filter & export","history.kind.autosync":"Autosync","history.kind.backup":"Scheduled backup","history.kind.import":"Import","history.kind.profile-delete":"Profile delete","history.kind.profile-import":"Profile import","history.kind.profile-rename":"Profile rename","history.kind.profile-save":"Profile save","history.kind.profile-switch":"Profile switch","history.kind.recovery":"Recovery/rollback","history.kind.restore":"Snapshot restore","history.kind.rollback":"Rollback","history.kind.snapshot-delete":"Snapshot delete","history.kind.snapshot-prune":"Snapshot retention","history.kind.sync-apply":"Sync apply","history.loadError":"Failed to load migration history","history.loading":"Loading migration history…","history.refresh":"Refresh","history.reload":"Reload","history.result.failed":"Failed","history.result.skipped":"Skipped","history.result.success":"Success","history.search.placeholder":"Search summary / error / section…","history.stats.failed":"Failed","history.stats.skipped":"Skipped","history.stats.success":"Success","history.stats.total":"Total","history.subtitle":"Единый журнал аудита всех деструктивных и миграционных операций","history.table.kind":"Operation","history.table.result":"Result","history.table.sections":"Sections","history.table.summary":"Summary","history.table.time":"Time","history.title":"История миграций и аудита","history.updatedAt":"Updated","view.history":"История миграций"}}
|
|
1
|
+
{"config-manager-history":{"history.corruptedBanner":"Detected unreadable or possibly tampered history entries","history.corruptedCount":"{count} entry(s) were skipped (excluded from export)","history.empty":"No migration records yet. Executing an import, restore, profile switch, sync apply, or scheduled backup will create audit entries here.","history.export.json":"Export JSON","history.export.markdown":"Export Markdown","history.exportError":"Export failed","history.exported":"Exported","history.exporting":"Exporting…","history.filter.kind":"Operation","history.filter.recent":"Time range","history.filter.recent.200":"Latest 200","history.filter.recent.50":"Latest 50","history.filter.recent.all":"All","history.filter.result":"Result","history.filter.sections":"Sections","history.filter.title":"Filter & export","history.kind.autosync":"Autosync","history.kind.backup":"Scheduled backup","history.kind.backup-manual":"Ручной бэкап","history.kind.import":"Import","history.kind.profile-create":"Создан профиль","history.kind.profile-delete":"Profile delete","history.kind.profile-import":"Profile import","history.kind.profile-rename":"Profile rename","history.kind.profile-save":"Profile save","history.kind.profile-select":"Задан профиль для следующего запуска","history.kind.profile-switch":"Profile switch","history.kind.recovery":"Recovery/rollback","history.kind.restore":"Snapshot restore","history.kind.rollback":"Rollback","history.kind.snapshot-delete":"Snapshot delete","history.kind.snapshot-prune":"Snapshot retention","history.kind.sync-apply":"Sync apply","history.loadError":"Failed to load migration history","history.loading":"Loading migration history…","history.refresh":"Refresh","history.reload":"Reload","history.result.failed":"Failed","history.result.skipped":"Skipped","history.result.success":"Success","history.search.placeholder":"Search summary / error / section…","history.stats.failed":"Failed","history.stats.skipped":"Skipped","history.stats.success":"Success","history.stats.total":"Total","history.subtitle":"Единый журнал аудита всех деструктивных и миграционных операций","history.table.kind":"Operation","history.table.result":"Result","history.table.sections":"Sections","history.table.summary":"Summary","history.table.time":"Time","history.title":"История миграций и аудита","history.updatedAt":"Updated","view.history":"История миграций"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"dsh-key-rotation":{"activeBadge":"активен","addKey":"+ Добавить ключ","addKeyTitle":"Добавить API-ключ","addProvider":"+ Добавить провайдера","brokenKey":"повреждён (3× AUTH)","budgetLabel":"бюджет:","bulkApply":"Применить к выбранным","bulkCooldownPlaceholder":"Массовый таймаут (мс)","bulkRemove":"Удалить выбранные","cancel":"Отмена","cardDesc":"Ротация API-ключей для провайдеров: пулы ключей, автоматическое переключение при исчерпании квот и rate-limit, кулдаун и восстановление.","codesTitle":"Переключать при этих ошибках","confirm":"Подтвердить","confirmBulkRemoveDesc":"Выбранные провайдеры и все их ключи будут исключены из ротации. Действие можно отменить один раз сразу после удаления.","confirmBulkRemoveTitle":"Удалить выбранных провайдеров ({n})?","confirmRemoveProvDesc":"Вы уверены, что хотите удалить этого провайдера и все настроенные ключи из ротации?","confirmRemoveProvTitle":"Удалить провайдера {p}?","confirmResetDesc":"Это немедленно сбросит счётчики сбоев, таймеры охлаждения и переведёт автоматический выключатель (circuit breaker) в исходное состояние.","confirmResetTitle":"Сбросить охлаждение для {p}?","cooldown":"Кулдаун после ошибки (мс)","currentVersion":"Текущая версия","desc":"Ротация API-ключей по провайдерам. Для каждого провайдера укажите список его ключей (имена переменных окружения из DSH credentials). Плагин направляет запросы по очереди и автоматически переключается на следующий ключ при ошибках лимитов или квот.","dialogLabel":"Подтверждение","discard":"Сбросить","empty":"Провайдеры для ротации ключей не настроены.","emptyDesc":"Добавьте провайдера и хотя бы одно имя API-ключа для запуска ротации.","emptyKeys":"В пуле пока нет ключей.","emptyTitle":"Пулов пока нет","errorCount":"Ошибок: {n}","errorTitle":"Не удалось загрузить настройки","eventAt":"Время","eventCooldown":"Таймаут","eventKey":"Ключ","eventReason":"Причина","exportCsv":"Экспорт в CSV","exportOne":"Экспорт пула","exportPools":"Экспорт всех пулов в JSON","exportProvider":"Экспортировать этого провайдера","failover":"Автоматическое переключение","failoverDesc":"Переключаться на следующий ключ в пуле при получении кодов 429, 402, 403, 503","filterAll":"Все ключи","filterCooldown":"На кулдауне","filterErrors":"С ошибками","filterReady":"Готовы к работе","header.keys_badge":"настроенных ключей","header.pools_badge":"активных пулов","header.sub":"Автоматическая круговая (round-robin) ротация нескольких ключей, экспоненциальные таймауты при ошибках 429/5xx, защита цепи failover и безопасность учётных данных (~/.dsh/.credentials.yaml).","header.title":"Ротация ключей и отказоустойчивость","headerPoolsTitle":"Пулы ротации ключей","health":"Состояние пула","healthBad":"Все ключи исчерпаны или заблокированы","healthGood":"Все ключи работоспособны","healthScoreTitle":"рейтинг надёжности","healthWarn":"Часть ключей на кулдауне","hoursAgo":"{n} ч назад","importEnv":"Импорт из переменных окружения (.env)","importPools":"Импорт пулов из JSON","justNow":"только что","key":"Ключ","keyActive":"Активен","keyBlocked":"Заблокирован","keyCooldown":"Кулдаун ({time}с)","keyCooling":"охлаждение, {s}с","keyDisabled":"Отключён вручную","keyErrors":"Ошибок подряд: {n}","keyExpired":"истёк","keyExpiringSoon":"истекает через {n} дн.","keyFromEnv":"из переменных окружения, только чтение","keyHint":"Значение сохраняется в учётных данных DSH и никогда не отправляется обратно в браузер — отображаются только последние 5 символов.","keyLabel":"Ключ {n}","keyLatency":"Задержка: {time}мс","keyMissing":"учётные данные отсутствуют","keyName":"Имя ключа","keyPlaceholder":"OPENAI_API_KEY_2","keyPool":"Пул ключей","keyPriority":"Приоритет","keyQuota":"Квота исчерпана","keyRateLimit":"Превышен лимит запросов","keyReady":"готов","keyRemoved":"Ключ удалён","keySave":"Сохранить key","keySaved":"Ключ добавлен","keySuccess":"Успешных запросов: {n}","keyValuePlaceholder":"paste the key, then Сохранить","keyWeight":"Вес: {n}","keyWriteFailed":"не удалось сохранить ключ: {msg}","keysCount":"Ключей в пуле: {n}","keysTitle":"Список ключей","lastError":"Последняя ошибка: {msg}","lastSuccess":"Успешный запрос: {time}","latestVersion":"Последняя версия","liveEventStream":"Лента событий в реальном времени","liveEventStreamEmpty":"События ротации пока не зафиксированы","loadChartAria":"Распределение трафика по ключам","loadDistribution":"Распределение трафика","loading":"Загрузка пулов ротации…","metrics":"Метрики использования","metricsAvgLatency":"Средняя задержка","metricsErrors":"Ошибки","metricsSuccess":"Успешные","metricsThroughput":"Запросов/мин","metricsTotal":"Всего запросов","minutesAgo":"{n} мин назад","modalAddKey":"Добавление ключа в пул","modalAddProvider":"Добавление пула провайдера","modalClose":"Закрыть диалог","modalEditKey":"Редактирование ключа","modalEditProvider":"Редактирование провайдера","mode":"Режим выбора ключа","modeOrder":"По порядку (Sequential)","modeRandom":"Случайно (Random)","modeWeighted":"По весам / бюджету","moveDown":"Переместить вниз","moveUp":"Переместить вверх","name":"Ротация API-ключей","noActivePools":"Нет активных пулов","noProviders":"Провайдеры не добавлены","noTrafficYet":"Трафик пока не зафиксирован","notRegistered":"не зарегистрирован","notSecretShape":"сохранено, но значение не похоже на API-ключ — проверьте опечатки","pausedBudget":"приостановлен","poolActive":"Пул активен","poolDisabled":"Пул отключён","poolEmpty":"В пуле нет активных ключей","poolExhausted":"пул исчерпан — все ключи охлаждаются","poolName":"Имя пула провайдера","proactiveGuardHint":"Заранее ставить ключи на паузу при приближении к квоте или заголовку Retry-After до получения 429","proactiveGuardLabel":"Превентивная защита от лимитов (Rate-Limit Guard)","provider":"Провайдер","providerActive":"Активен","providerCatalogUnavailable":"Список провайдеров недоступен","providerDisabled":"Отключён","providerName":"Имя провайдера (например openai, openrouter)","providerPlaceholder":"openai","providerRemoved":"Провайдер удалён","providerType":"Тип провайдера","providersTitle":"Провайдеры и их ключи","quotaExhausted":"Квота исчерпана","quotaResetIn":"Сброс через {time}","rateLimit":"Превышен лимит запросов","recentFailures":"Недавние сбои ({n})","removeKey":"Удалить ключ","removeProvider":"Удалить провайдера","resetAll":"Сбросить статистику и кулдауны","resetAllSuccess":"Статистика и кулдауны успешно сброшены","resetCooldown":"Сбросить охлаждение","resetCooldowns":"Сбросить все кулдауны","resetSuccess":"Кулдауны ключей сброшены","resetting":"Сброс…","retestBroken":"Повторный тест","retestFail":"повторный тест не пройден — ключ всё ещё не работает","retry":"Повторить","retryCount":"Попыток повтора","retryInterval":"Интервал повтора (мс)","rotationMode":"Режим ротации","rotationSequential":"Последовательный (Round-Robin)","rotationWeighted":"Взвешенный (Weighted)","routingStrategyLabel":"Стратегия маршрутизации","routingStrategyLeastLoaded":"Минимальная нагрузка (по параллелизму)","routingStrategyLowestLatency":"Минимальная задержка (p95)","routingStrategyRoundRobin":"Круговой перебор (Round-Robin, по умолчанию)","rpmTitle":"запросов/мин: {u} использовано, {r} осталось","save":"Сохранить настройки","saved":"Настройки сохранены","saving":"Сохранение…","scheduleDays":"Расписание ротации (дней, 0=выкл.)","secondsAgo":"{n} с назад","sectionBackup":"Резервные копии и снимки","sectionBackupDesc":"Экспорт и импорт пулов провайдеров и создание полных снимков конфигурации плагина.","sectionFailover":"Триггеры отказа и коды ошибок","sectionFailoverDesc":"Выбор условий и ошибок, вызывающих автоматическое переключение на следующий доступный ключ.","sectionStats":"Здоровье пула и телеметрия","sectionStatsDesc":"Телеметрия активных пулов ключей в реальном времени, доступные учётные данные и статус переключения.","sectionTiming":"Тайминги и расписание ротации","sectionTimingDesc":"Настройка длительности периода охлаждения (cooldown) и окон периодической ротации.","selectProvider":"Выбрать провайдера {p}","selfHealingHint":"Периодическая проверка бесплатной моделью для возврата вышедших из строя ключей (0 — отключено)","selfHealingLabel":"Интервал автовосстановления (мин)","snapshotExport":"Снимок ⬇","snapshotImport":"Восстановить","sortUsage":"Сортировать по нагрузке","statHealthy":"Исправны / Готовы","statKeys":"Всего ключей","statPools":"Настроенных пулов","statRequests":"запросов","status":"Статус","statusAvailable":"Доступен","statusCooldown":"Кулдаун","statusDisabled":"Отключён","statusExhausted":"Исчерпан","statusFailed":"Ошибка","strategy":"Стратегия failover","subtitle":"Ротация API-ключей по провайдерам: пулы ключей, автоматическое переключение при исчерпании квот/лимитов, охлаждение и восстановление.","switchCodes":"Коды переключения (через запятую)","switchCount":"Переключений: {n}","switchesNone":"переключений пока не было","switchesSome":"переключений: {n} · последнее: {reason}, {ago}","testAll":"Проверить все ключи","testFail":"СБОЙ","testKey":"Проверить ключ","testOk":"OK","testSuccess":"Ключ валиден: ответ за {time}мс","testing":"Тестирование…","testingAllProgress":"Проверка {n} из {total}…","title":"Ротация API-ключей (dsh-key-rotation)","totalCalls":"Всего вызовов: {n}","totalErrors":"Всего сбоев: {n}","totalRequestsTitle":"всего запросов","unavailableDesc":"Хост не предоставил пространство настроек dsh-key-rotation. Откройте «Настройки» заново или проверьте, включён ли плагин.","unavailableTitle":"Мост настроек недоступен","undo":"Отменить","undoKey":"Ключ удалён","undoProvider":"Провайдер удалён","updateAvailable":"Доступно обновление","updateCheck":"Проверить обновления","updateFailed":"Сбой обновления","updateNone":"Установлена актуальная версия","updateRestart":"Обновление установлено. Перезапустите DSH для применения.","updateRun":"Обновить сейчас","updateRunning":"Обновление…","usedAgo":"{ago} назад","weight":"Вес ключа","weightHint":"вес в round-robin: сколько раз ключ участвует в цикле (1 = равная доля)"},"keyRotation":{"currentVersion":"Текущая версия","latestVersion":"Последняя версия","updateAvailable":"Доступно обновление","updateCheck":"Проверить обновления","updateFailed":"Сбой обновления","updateNone":"Установлена актуальная версия","updateRestart":"Обновление установлено. Перезапустите DSH для применения.","updateRun":"Обновить сейчас","updateRunning":"Обновление…"}}
|
|
1
|
+
{"dsh-key-rotation":{"activeBadge":"активен","addKey":"+ Добавить ключ","addKeyTitle":"Добавить API-ключ","addProvider":"+ Добавить провайдера","brokenKey":"повреждён (3× AUTH)","budgetLabel":"бюджет:","bulkApply":"Применить к выбранным","bulkCooldownPlaceholder":"Массовый таймаут (мс)","bulkRemove":"Удалить выбранные","cancel":"Отмена","cardDesc":"Ротация API-ключей для провайдеров: пулы ключей, автоматическое переключение при исчерпании квот и rate-limit, кулдаун и восстановление.","chooseProvider":"Выберите провайдера","codesTitle":"Переключать при этих ошибках","confirm":"Подтвердить","confirmBulkRemoveDesc":"Выбранные провайдеры и все их ключи будут исключены из ротации. Действие можно отменить один раз сразу после удаления.","confirmBulkRemoveTitle":"Удалить выбранных провайдеров ({n})?","confirmRemoveProvDesc":"Вы уверены, что хотите удалить этого провайдера и все настроенные ключи из ротации?","confirmRemoveProvTitle":"Удалить провайдера {p}?","confirmResetDesc":"Это немедленно сбросит счётчики сбоев, таймеры охлаждения и переведёт автоматический выключатель (circuit breaker) в исходное состояние.","confirmResetTitle":"Сбросить охлаждение для {p}?","cooldown":"Кулдаун после ошибки (мс)","currentVersion":"Текущая версия","desc":"Ротация API-ключей по провайдерам. Для каждого провайдера укажите список его ключей (имена переменных окружения из DSH credentials). Плагин направляет запросы по очереди и автоматически переключается на следующий ключ при ошибках лимитов или квот.","dialogLabel":"Подтверждение","discard":"Сбросить","empty":"Провайдеры для ротации ключей не настроены.","emptyDesc":"Добавьте провайдера и хотя бы одно имя API-ключа для запуска ротации.","emptyKeys":"В пуле пока нет ключей.","emptyTitle":"Пулов пока нет","errorCount":"Ошибок: {n}","errorTitle":"Не удалось загрузить настройки","eventAt":"Время","eventCooldown":"Таймаут","eventKey":"Ключ","eventReason":"Причина","exportCsv":"Экспорт в CSV","exportOne":"Экспорт пула","exportPools":"Экспорт всех пулов в JSON","exportProvider":"Экспортировать этого провайдера","failover":"Автоматическое переключение","failoverDesc":"Переключаться на следующий ключ в пуле при получении кодов 429, 402, 403, 503","filterAll":"Все ключи","filterCooldown":"На кулдауне","filterErrors":"С ошибками","filterReady":"Готовы к работе","header.keys_badge":"настроенных ключей","header.pools_badge":"активных пулов","header.sub":"Автоматическая круговая (round-robin) ротация нескольких ключей, экспоненциальные таймауты при ошибках 429/5xx, защита цепи failover и безопасность учётных данных (~/.dsh/.credentials.yaml).","header.title":"Ротация ключей и отказоустойчивость","headerPoolsTitle":"Пулы ротации ключей","health":"Состояние пула","healthBad":"Все ключи исчерпаны или заблокированы","healthGood":"Все ключи работоспособны","healthScoreTitle":"рейтинг надёжности","healthWarn":"Часть ключей на кулдауне","hoursAgo":"{n} ч назад","importEnv":"Импорт из переменных окружения (.env)","importPools":"Импорт пулов из JSON","justNow":"только что","key":"Ключ","keyActive":"Активен","keyBlocked":"Заблокирован","keyCooldown":"Кулдаун ({time}с)","keyCooling":"охлаждение, {s}с","keyDisabled":"Отключён вручную","keyErrors":"Ошибок подряд: {n}","keyExpired":"истёк","keyExpiringSoon":"истекает через {n} дн.","keyFromEnv":"из переменных окружения, только чтение","keyHint":"Значение сохраняется в учётных данных DSH и никогда не отправляется обратно в браузер — отображаются только последние 5 символов.","keyLabel":"Ключ {n}","keyLatency":"Задержка: {time}мс","keyMissing":"учётные данные отсутствуют","keyName":"Имя ключа","keyPlaceholder":"OPENAI_API_KEY_2","keyPool":"Пул ключей","keyPriority":"Приоритет","keyQuota":"Квота исчерпана","keyRateLimit":"Превышен лимит запросов","keyReady":"готов","keyRemoved":"Ключ удалён","keySave":"Сохранить key","keySaved":"Ключ добавлен","keySuccess":"Успешных запросов: {n}","keyValuePlaceholder":"paste the key, then Сохранить","keyWeight":"Вес: {n}","keyWriteFailed":"не удалось сохранить ключ: {msg}","keysCount":"Ключей в пуле: {n}","keysTitle":"Список ключей","lastError":"Последняя ошибка: {msg}","lastSuccess":"Успешный запрос: {time}","latestVersion":"Последняя версия","liveEventStream":"Лента событий в реальном времени","liveEventStreamEmpty":"События ротации пока не зафиксированы","loadChartAria":"Распределение трафика по ключам","loadDistribution":"Распределение трафика","loading":"Загрузка пулов ротации…","metrics":"Метрики использования","metricsAvgLatency":"Средняя задержка","metricsErrors":"Ошибки","metricsSuccess":"Успешные","metricsThroughput":"Запросов/мин","metricsTotal":"Всего запросов","minutesAgo":"{n} мин назад","modalAddKey":"Добавление ключа в пул","modalAddProvider":"Добавление пула провайдера","modalClose":"Закрыть диалог","modalEditKey":"Редактирование ключа","modalEditProvider":"Редактирование провайдера","mode":"Режим выбора ключа","modeOrder":"По порядку (Sequential)","modeRandom":"Случайно (Random)","modeWeighted":"По весам / бюджету","moveDown":"Переместить вниз","moveUp":"Переместить вверх","name":"Ротация API-ключей","noActivePools":"Нет активных пулов","noProviders":"Провайдеры не добавлены","noTrafficYet":"Трафик пока не зафиксирован","notRegistered":"не зарегистрирован","notSecretShape":"сохранено, но значение не похоже на API-ключ — проверьте опечатки","pausedBudget":"приостановлен","poolActive":"Пул активен","poolDisabled":"Пул отключён","poolEmpty":"В пуле нет активных ключей","poolExhausted":"пул исчерпан — все ключи охлаждаются","poolName":"Имя пула провайдера","proactiveGuardHint":"Заранее ставить ключи на паузу при приближении к квоте или заголовку Retry-After до получения 429","proactiveGuardLabel":"Превентивная защита от лимитов (Rate-Limit Guard)","provider":"Провайдер","providerActive":"Активен","providerCatalogUnavailable":"Список провайдеров недоступен","providerDisabled":"Отключён","providerName":"Имя провайдера (например openai, openrouter)","providerPlaceholder":"openai","providerRemoved":"Провайдер удалён","providerType":"Тип провайдера","providersTitle":"Провайдеры и их ключи","quotaExhausted":"Квота исчерпана","quotaResetIn":"Сброс через {time}","rateLimit":"Превышен лимит запросов","readOnly":"Настройки доступны только для чтения.","recentFailures":"Недавние сбои ({n})","removeKey":"Удалить ключ","removeProvider":"Удалить провайдера","resetAll":"Сбросить статистику и кулдауны","resetAllSuccess":"Статистика и кулдауны успешно сброшены","resetCooldown":"Сбросить охлаждение","resetCooldowns":"Сбросить все кулдауны","resetSuccess":"Кулдауны ключей сброшены","resetting":"Сброс…","retestBroken":"Повторный тест","retestFail":"повторный тест не пройден — ключ всё ещё не работает","retry":"Повторить","retryCount":"Попыток повтора","retryInterval":"Интервал повтора (мс)","rotationMode":"Режим ротации","rotationSequential":"Последовательный (Round-Robin)","rotationWeighted":"Взвешенный (Weighted)","routingStrategyLabel":"Стратегия маршрутизации","routingStrategyLeastLoaded":"Минимальная нагрузка (по параллелизму)","routingStrategyLowestLatency":"Минимальная задержка (p95)","routingStrategyRoundRobin":"Круговой перебор (Round-Robin, по умолчанию)","rpmTitle":"запросов/мин: {u} использовано, {r} осталось","save":"Сохранить настройки","saveRefused":"Хост отклонил это сохранение. Ваш черновик сохранён; сбросьте его для загрузки актуальных настроек.","saveUnconfirmed":"Не удалось подтвердить результат сохранения. Ваш черновик сохранён; обновите страницу перед повторной попыткой.","saved":"Настройки сохранены","saving":"Сохранение…","scheduleDays":"Расписание ротации (дней, 0=выкл.)","secondsAgo":"{n} с назад","sectionBackup":"Резервные копии и снимки","sectionBackupDesc":"Экспорт и импорт пулов провайдеров и создание полных снимков конфигурации плагина.","sectionFailover":"Триггеры отказа и коды ошибок","sectionFailoverDesc":"Выбор условий и ошибок, вызывающих автоматическое переключение на следующий доступный ключ.","sectionStats":"Здоровье пула и телеметрия","sectionStatsDesc":"Телеметрия активных пулов ключей в реальном времени, доступные учётные данные и статус переключения.","sectionTiming":"Тайминги и расписание ротации","sectionTimingDesc":"Настройка длительности периода охлаждения (cooldown) и окон периодической ротации.","selectProvider":"Выбрать провайдера {p}","selfHealingHint":"Периодическая проверка бесплатной моделью для возврата вышедших из строя ключей (0 — отключено)","selfHealingLabel":"Интервал автовосстановления (мин)","settingsChanged":"Служба настроек изменилась. Сбросьте этот черновик и обновите страницу перед сохранением.","snapshotExport":"Снимок ⬇","snapshotImport":"Восстановить","sortUsage":"Сортировать по нагрузке","statHealthy":"Исправны / Готовы","statKeys":"Всего ключей","statPools":"Настроенных пулов","statRequests":"запросов","status":"Статус","statusAvailable":"Доступен","statusCooldown":"Кулдаун","statusDisabled":"Отключён","statusExhausted":"Исчерпан","statusFailed":"Ошибка","strategy":"Стратегия failover","subtitle":"Ротация API-ключей по провайдерам: пулы ключей, автоматическое переключение при исчерпании квот/лимитов, охлаждение и восстановление.","switchCodes":"Коды переключения (через запятую)","switchCount":"Переключений: {n}","switchesNone":"переключений пока не было","switchesSome":"переключений: {n} · последнее: {reason}, {ago}","testAll":"Проверить все ключи","testFail":"СБОЙ","testKey":"Проверить ключ","testOk":"OK","testSuccess":"Ключ валиден: ответ за {time}мс","testing":"Тестирование…","testingAllProgress":"Проверка {n} из {total}…","title":"Ротация API-ключей (dsh-key-rotation)","totalCalls":"Всего вызовов: {n}","totalErrors":"Всего сбоев: {n}","totalRequestsTitle":"всего запросов","unavailableDesc":"Хост не предоставил пространство настроек dsh-key-rotation. Откройте «Настройки» заново или проверьте, включён ли плагин.","unavailableTitle":"Мост настроек недоступен","undo":"Отменить","undoKey":"Ключ удалён","undoProvider":"Провайдер удалён","updateAvailable":"Доступно обновление","updateCheck":"Проверить обновления","updateFailed":"Сбой обновления","updateNone":"Установлена актуальная версия","updateRestart":"Обновление установлено. Перезапустите DSH для применения.","updateRun":"Обновить сейчас","updateRunning":"Обновление…","usedAgo":"{ago} назад","weight":"Вес ключа","weightHint":"вес в round-robin: сколько раз ключ участвует в цикле (1 = равная доля)"},"keyRotation":{"currentVersion":"Текущая версия","latestVersion":"Последняя версия","updateAvailable":"Доступно обновление","updateCheck":"Проверить обновления","updateFailed":"Сбой обновления","updateNone":"Установлена актуальная версия","updateRestart":"Обновление установлено. Перезапустите DSH для применения.","updateRun":"Обновить сейчас","updateRunning":"Обновление…"}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-russian-lang",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"description": "Russian localization for DeepSeek Harness (DSH v0.1.6-alpha.1+) web UI: adds Русский as native language option. 100.0% coverage across 11,295 keys (127 namespaces). Features full DSH v0.1.6-alpha.1 core support (terminal, archive, command palette, Auto review, trajectory, PTC/Creator presets) and complete GoodAndReady plugin catalog (subscriptions, tts, image-gen, voice, key-limits, notify, commandcode, plugin-console).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"cordis.patch.yml",
|
|
17
17
|
"README.md",
|
|
18
18
|
"README.ru.md",
|
|
19
|
-
"LICENSE"
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"docs/media"
|
|
20
21
|
],
|
|
21
22
|
"dsh": {
|
|
22
23
|
"bundle": {
|