@goodandready/dsh-russian-lang 0.3.1 → 0.3.4

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.
@@ -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-recovery":{"common.cancel":"Отмена","common.retry":"Повторить","common.unknownError":"Неизвестная ошибка","recovery.actionError":"Operation failed","recovery.banner":"Configuration changes are protected: there is an unfinished recovery item. Resolve it before continuing.","recovery.bannerAction":"Go to recovery","recovery.completed":"Recovery complete","recovery.completed.recovered":"Recovered and verified","recovery.completed.rolledBack":"Rolled back and verified","recovery.confirm.dismiss":"Abandon recovery? The operation will be set aside (quarantined), and the related snapshot and operation records are kept, but it will not be auto-recovered.","recovery.confirm.dismissTitle":"Abandon recovery","recovery.confirm.message":"Recovery / rollback is a dangerous operation. Confirm execution? Current files are backed up to a safe location first.","recovery.confirm.retry":"Retry recovery after verification failure. Confirm running it again?","recovery.confirm.rollbackContinue":"Continue the interrupted rollback (already-completed parts are skipped and not redone).","recovery.confirm.title":"Confirm recovery","recovery.continue":"Continue","recovery.currentState.hasSnapshot":"Trusted recovery snapshot available","recovery.currentState.noSnapshot":"No trusted recovery snapshot","recovery.currentState.safeMode":"Safe mode active (config-modifying operations paused)","recovery.currentState.safeModeCleared":"Restored to normal — you can continue","recovery.currentState.title":"Current state","recovery.decision.unknown":"Unknown","recovery.dismiss":"Abandon recovery","recovery.dismissing":"Abandoning…","recovery.empty":"No recovery items to handle.","recovery.environment.compatible":"Environment matches","recovery.environment.incompatible":"Environment mismatch (may be from another machine / install)","recovery.environment.title":"Environment","recovery.error":"Failed to load recovery status","recovery.execute":"Execute recovery","recovery.executing":"Recovering…","recovery.inProgress":"Recovery in progress","recovery.incident.createdAt":"Occurred at","recovery.incident.decision":"Recommendation","recovery.incident.operationId":"Operation ID","recovery.incident.operationType":"Operation type","recovery.incident.reason":"Reason","recovery.incident.state":"State","recovery.incident.state.committed":"Completed","recovery.incident.state.needsAttention":"Manual action needed","recovery.incident.state.recovered":"Recovered","recovery.incident.state.recovering":"Recovering","recovery.incident.state.rolledBack":"Rolled back","recovery.incident.state.unknown":"Unknown","recovery.incident.title":"What happened","recovery.loading":"Checking recovery status…","recovery.manualActionRequired":"Manual action required","recovery.mismatch":"Mismatch","recovery.needsAttention":"Needs attention","recovery.needsAttention.hint":"Recovery could not complete or verification failed. Review the reason, then retry or abandon.","recovery.needsAttention.title":"Needs attention","recovery.partialMatch":"Partial match","recovery.preview.action":"Action","recovery.preview.detail":"Detail","recovery.preview.empty":"No restorable actions for this operation (or all skipped).","recovery.preview.hint":"Read-only preview below (zero writes). Recovery only runs after confirmation.","recovery.preview.loading":"Generating preview…","recovery.preview.summary":"Will execute {count} action(s)","recovery.preview.title":"Recovery preview","recovery.required":"Recovery Required","recovery.requiredHint":"An operation did not complete normally. To stay safe, all config-modifying operations are paused. Handle the recovery item(s) below to restore normal operation.","recovery.retry":"Retry","recovery.retrying":"Retrying…","recovery.rollbackContinue":"Continue rollback","recovery.rollbackRecommended":"Rollback recommended","recovery.running":"Recovery task in progress","recovery.runningHint":"Recovery / rollback is running; keep this page open.","recovery.snapshot.createdAt":"Snapshot time","recovery.snapshot.id":"Snapshot ID","recovery.snapshot.operationType":"Snapshot operation","recovery.snapshot.title":"Recovery snapshot","recovery.snapshot.verdict":"Snapshot validation","recovery.snapshot.verdict.corrupt":"Corrupt","recovery.snapshot.verdict.invalid":"Invalid","recovery.snapshot.verdict.legacy":"Legacy snapshot (explicit confirmation required)","recovery.snapshot.verdict.manual":"Manual / local (outside this operation)","recovery.snapshot.verdict.trusted":"Trusted (bound to this operation)","recovery.snapshot.verdict.unknown":"Unknown","recovery.snapshot.verdict.unsafe":"Unsafe path","recovery.snapshot.verdict.wrongEnv":"Environment mismatch","recovery.verificationError":"Verification error","recovery.verified":"Verified","recovery.verify":"Verify","recovery.verify.details":"Check details","recovery.verify.manualHints":"Manual action needed","recovery.verify.terminal.needsAttention":"Needs attention","recovery.verify.terminal.recovered":"Recovered","recovery.verify.terminal.rolledBack":"Rolled back","recovery.verify.title":"Verification result","recovery.verify.verdict.error":"Verification error: could not reliably complete verification; recovery incomplete","recovery.verify.verdict.match":"Verified: target state matches the trusted snapshot","recovery.verify.verdict.mismatch":"Verification failed: target state does not match the trusted snapshot; recovery incomplete","recovery.verify.verdict.partial":"Verified (partial match): core state matches, but some items could not be auto-verified","recovery.verify.verdict.unknown":"Unknown","recovery.verifying":"Verifying…","section.description":"Восстановление профилей и откат к предыдущим снапшотам","section.label":"Аварийное восстановление","view.recovery":"Recovery"}}
1
+ {"config-manager-recovery":{"common.cancel":"Отмена","common.retry":"Повторить","common.unknownError":"Неизвестная ошибка","recovery.actionError":"Operation failed","recovery.banner":"Configuration changes are protected: there is an unfinished recovery item. Resolve it before continuing.","recovery.bannerAction":"Go to recovery","recovery.completed":"Recovery complete","recovery.completed.recovered":"Recovered and verified","recovery.completed.rolledBack":"Rolled back and verified","recovery.confirm.dismiss":"Abandon recovery? The operation will be set aside (quarantined), and the related snapshot and operation records are kept, but it will not be auto-recovered.","recovery.confirm.dismissTitle":"Abandon recovery","recovery.confirm.message":"Recovery / rollback is a dangerous operation. Confirm execution? Current files are backed up to a safe location first.","recovery.confirm.retry":"Retry recovery after verification failure. Confirm running it again?","recovery.confirm.rollbackContinue":"Continue the interrupted rollback (already-completed parts are skipped and not redone).","recovery.confirm.title":"Confirm recovery","recovery.continue":"Continue","recovery.currentState.hasSnapshot":"Trusted recovery snapshot available","recovery.currentState.noSnapshot":"No trusted recovery snapshot","recovery.currentState.safeMode":"Safe mode active (config-modifying operations paused)","recovery.currentState.safeModeCleared":"Restored to normal — you can continue","recovery.currentState.title":"Current state","recovery.decision.unknown":"Unknown","recovery.dismiss":"Abandon recovery","recovery.dismissing":"Abandoning…","recovery.empty":"No recovery items to handle.","recovery.environment.compatible":"Environment matches","recovery.environment.incompatible":"Environment mismatch (may be from another machine / install)","recovery.environment.title":"Environment","recovery.error":"Failed to load recovery status","recovery.execute":"Execute recovery","recovery.executing":"Recovering…","recovery.inProgress":"Recovery in progress","recovery.incident.createdAt":"Occurred at","recovery.incident.decision":"Recommendation","recovery.incident.operationId":"Operation ID","recovery.incident.operationType":"Operation type","recovery.incident.reason":"Reason","recovery.incident.state":"State","recovery.incident.state.committed":"Completed","recovery.incident.state.needsAttention":"Manual action needed","recovery.incident.state.recovered":"Recovered","recovery.incident.state.recovering":"Recovering","recovery.incident.state.rolledBack":"Rolled back","recovery.incident.state.unknown":"Unknown","recovery.incident.title":"What happened","recovery.loading":"Checking recovery status…","recovery.lock.action":"Снять зависшую блокировку","recovery.lock.busy":"Снятие…","recovery.lock.confirmMessage":"Будет выполнена повторная проверка отсутствия процесса-владельца, после чего блокировка будет атомарно удалена. Если отсутствие процесса не подтвердится (например, блокировка удерживается живым процессом), действие будет отклонено и ничего не изменится.","recovery.lock.confirmTitle":"Снять зависшую блокировку конфигурации","recovery.lock.detailStale":"Обнаружена блокировка конфигурации, оставшаяся от аварийного завершения (процесс-владелец больше не существует). Она никогда не снимается автоматически: перезапуск DSH не поможет — снимите её здесь явно, и все операции сразу возобновятся.","recovery.lock.detailUnknown":"Состояние блокировки конфигурации не может быть надёжно определено (возможно, след сбоя). Перед снятием выполняется проверка отсутствия процесса; если это не доказано, ничего удалено не будет.","recovery.lock.done":"Зависшая блокировка конфигурации снята; операции восстановлены","recovery.lock.refused":"Зависшая блокировка не подтверждена — в снятии отказано (ничего не изменено)","recovery.lock.title":"Зависшая блокировка конфигурации","recovery.manualActionRequired":"Manual action required","recovery.mismatch":"Mismatch","recovery.needsAttention":"Needs attention","recovery.needsAttention.hint":"Recovery could not complete or verification failed. Review the reason, then retry or abandon.","recovery.needsAttention.title":"Needs attention","recovery.partialMatch":"Partial match","recovery.preview.action":"Action","recovery.preview.detail":"Detail","recovery.preview.empty":"No restorable actions for this operation (or all skipped).","recovery.preview.hint":"Read-only preview below (zero writes). Recovery only runs after confirmation.","recovery.preview.loading":"Generating preview…","recovery.preview.summary":"Will execute {count} action(s)","recovery.preview.title":"Recovery preview","recovery.required":"Recovery Required","recovery.requiredHint":"An operation did not complete normally. To stay safe, all config-modifying operations are paused. Handle the recovery item(s) below to restore normal operation.","recovery.retry":"Retry","recovery.retrying":"Retrying…","recovery.rollbackContinue":"Continue rollback","recovery.rollbackRecommended":"Rollback recommended","recovery.running":"Recovery task in progress","recovery.runningHint":"Recovery / rollback is running; keep this page open.","recovery.snapshot.createdAt":"Snapshot time","recovery.snapshot.id":"Snapshot ID","recovery.snapshot.operationType":"Snapshot operation","recovery.snapshot.title":"Recovery snapshot","recovery.snapshot.verdict":"Snapshot validation","recovery.snapshot.verdict.corrupt":"Corrupt","recovery.snapshot.verdict.invalid":"Invalid","recovery.snapshot.verdict.legacy":"Legacy snapshot (explicit confirmation required)","recovery.snapshot.verdict.manual":"Manual / local (outside this operation)","recovery.snapshot.verdict.trusted":"Trusted (bound to this operation)","recovery.snapshot.verdict.unknown":"Unknown","recovery.snapshot.verdict.unsafe":"Unsafe path","recovery.snapshot.verdict.wrongEnv":"Environment mismatch","recovery.verificationError":"Verification error","recovery.verified":"Verified","recovery.verify":"Verify","recovery.verify.details":"Check details","recovery.verify.manualHints":"Manual action needed","recovery.verify.terminal.needsAttention":"Needs attention","recovery.verify.terminal.recovered":"Recovered","recovery.verify.terminal.rolledBack":"Rolled back","recovery.verify.title":"Verification result","recovery.verify.verdict.error":"Verification error: could not reliably complete verification; recovery incomplete","recovery.verify.verdict.match":"Verified: target state matches the trusted snapshot","recovery.verify.verdict.mismatch":"Verification failed: target state does not match the trusted snapshot; recovery incomplete","recovery.verify.verdict.partial":"Verified (partial match): core state matches, but some items could not be auto-verified","recovery.verify.verdict.unknown":"Unknown","recovery.verifying":"Verifying…","section.description":"Восстановление профилей и откат к предыдущим снапшотам","section.label":"Аварийное восстановление","view.recovery":"Recovery"}}
@@ -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-vision-bridge":{"addChannel":"Добавить канал","advanced":"Расширенные настройки","apiKey":"Ключ API","attachMaxItems":"Макс. вложений за вызов","attachMaxItemsRange":"Количество вложений за вызов должно быть целым числом от 1 до 32","attachments":"Вложения","attachmentsHint":"Сколько изображений можно опубликовать за один вызов attach, и нужно ли скрывать инструменты бриджа от моделей с нативным зрением.","auto":"Автоматически","autoDiscoverOllama":"Автопоиск моделей Ollama","baseURL":"Базовый URL","bench":"Бенчмарк","blurFaces":"Размывать лица на изображениях","channelOrderAutoLatency":"По задержке (наименьший пинг)","channelOrderManual":"Вручную (по списку)","channelOrderMode":"Режим порядка каналов","channelOrderWeighted":"По весам провайдеров","channels":"Каналы провайдеров","channelsDesc":"Список настроенных OCR / Vision провайдеров для анализа изображений.","channelsHint":"Перетащите каналы для изменения порядка приоритета.","circuitClosed":"Норма","circuitHalfOpen":"Тест восстановления","circuitOpen":"Разомкнут (сбой)","circuitState":"Состояние предохранителя (Circuit Breaker)","compression":"Сжатие изображений","compressionDesc":"Автоматически масштабировать и сжимать большие изображения перед отправкой в API.","concurrency":"Параллельные запросы","concurrencyHint":"Максимальное количество одновременных задач распознавания","consensus":"Консенсус моделей","cropImages":"Автообрезка пустых полей","cropImagesDesc":"Удалять пустые поля для экономии токенов и ускорения анализа","current":"Текущая: {provider} / {model}","currentAuto":"Автовыбор","defaultChannel":"Основной канал","defaultModel":"Модель по умолчанию","degraded":"Деградация","deleteChannel":"Удалить канал","describeStrategy":"Стратегия описания","description":"Шлюз компьютерного зрения: анализ скриншотов, распознавание документов, OCR и обработка изображений через мультимодальные модели.","deskew":"Устранение перекоса изображений","detailLevel":"Детализация (Detail Level)","detailLevelAuto":"Авто (Auto)","detailLevelHigh":"Высокая (High Detail)","detailLevelLow":"Низкая (Low Detail - экономия токенов)","discard":"Сбросить","editChannel":"Редактировать канал","empty":"-","emptyChannels":"Каналы компьютерного зрения не настроены.","enableFacePrivacy":"Защита приватности лиц","enableFacePrivacyDesc":"Обнаруживать и скрывать лица людей на скриншотах перед отправкой во внешние API","enhanceImage":"Улучшение качества изображений","errorCount":"Ошибок: {n}","escalateAuto":"Авто (быстрый OCR → LLM)","escalateLlm":"Всегда использовать Vision LLM","escalateOff":"Отключено (сразу ошибка)","escalateOnFail":"Эскалация при сбое","escalation":"Эскалация","escalationAuto":"Автоэскалация (второй проход для сложных изображений)","escalationSimple":"Только простой режим (один проход)","failCount":"Сбоев: {n}","failed":"Не удалось загрузить/сохранить","fallbackChannel":"Резервный канал","fallbackChannelDesc":"Канал, используемый при недоступности основного провайдера","fastMode":"Быстрый режим OCR","filterProviders":"Фильтр провайдеров…","freeProviders":"Бесплатные провайдеры","healthy":"В норме","hideRedundantTools":"Скрывать инструменты бриджа у моделей со зрением","imageDimensions":"Максимальное разрешение (px)","imageDimensionsHint":"Например 2048 для ограничения максимальной стороны изображения","imageFormat":"Формат конвертации","imageFormatJpeg":"JPEG (меньший размер)","imageFormatPng":"PNG (без потерь)","imageFormatWebp":"WebP (оптимальный баланс)","imageMaxHeight":"Макс. высота (px)","imageMaxWidth":"Макс. ширина (px)","imageQuality":"Качество (1–100)","jsonrpc":"JSON-RPC","keyHidden":"неизвестно","keyMissing":"нет ключа","keyOk":"ключ в порядке","latency":"Задержка: {time}мс","latencyAvg":"Средняя задержка: {time}мс","latencyMax":"Макс. задержка: {time}мс","latencyMin":"Мин. задержка: {time}мс","latencyP95":"p95 задержка: {time}мс","loading":"Загрузка настроек Vision Bridge…","maskPII":"Маскировать персональные данные в промптах","maskSystemPaths":"Маскировать пути и IP в ответах","maxDimension":"Макс. размер стороны (px)","maxDimensionHint":"Изображения большего размера будут пропорционально уменьшены","maxTokens":"Максимум токенов вывода","method":"Метод","mode":"Режим","modeHybrid":"Гибридный (автоперезапись + инструменты)","modeLlm":"Только LLM (автоперезапись, инструменты доступны)","modeTools":"Только инструменты (без перезаписи, вызов describe_image)","model":"Модель","modelCatalog":"Каталог моделей","modelCatalogFailed":"Не удалось загрузить каталог моделей","modelCatalogLoading":"Загрузка каталога моделей…","modelInvalid":"Модель не принимает изображения","modelName":"Имя модели (например gpt-4o, claude-3-5-sonnet, qwen-vl)","modelPlaceholder":"gpt-4o","modelSelection":"Выбор модели","noChannels":"Нет доступных каналов","noModels":"Модели не найдены","noVisionModels":"В каталоге нет моделей со зрением (вход: [text, image]) — добавьте в Настройки → Модели.","nsfwFilter":"Фильтр неприемлемого контента","ocrEngine":"Движок OCR","ocrEngineAuto":"Автовыбор","ocrEngineCloud":"Облачные мультимодальные модели","ocrEngineLocal":"Локальный OCR / Ollama","ocrLanguage":"Язык распознавания текста","ocrLanguageHint":"Например rus+eng для Tesseract / локальных движков","offline":"Офлайн","orderLatency":"По минимальной задержке","orderManual":"Ручной порядок","orderRandom":"Случайный балансировщик","orderRoundRobin":"Циклический (Round Robin)","orderWeighted":"Взвешенный балансировщик","pipeline":"Пайплайн обработки","pixelDiff":"Попиксельное сравнение (Pixel Diff)","pixelDiffHint":"Точное отслеживание изменений интерфейса «до / после» на уровне пикселей.","presetCloud":"Пресет: Облако","presetLmStudio":"Пресет: LM Studio","presetLocal":"Пресет: Локальный","privacy":"Приватность и безопасность","protocol":"Протокол","protocolOpenaiChat":"openai-chat","protocolOpenaiResponses":"openai-responses","provider":"Провайдер","providerName":"Имя провайдера (например openai, anthropic, ollama)","providerNameHint":"Идентификатор провайдера в системе","providerPlaceholder":"openai","quality":"Качество сжатия (1-100)","qualityAnalysis":"Анализ качества и детекция размытия","qualityAnalysisHint":"Определение резкости (дисперсия Лапласа) и извлечение цветовой палитры.","qualityHint":"85 рекомендуется для оптимального соотношения качества и размера","qualityJpeg":"Качество JPEG (%)","qualityWebp":"Качество WebP (%)","rateLimit":"Лимит запросов в минуту (RPM)","rateLimitRpm":"Лимит RPM","rateLimitTpm":"Лимит TPM","remove":"Удалить","reqBoth":"Выберите провайдера и модель, или оставьте оба пустыми для автовыбора","requestTemplate":"Шаблон запроса","requestTimeout":"Таймаут запроса (сек)","requestTimeoutHint":"Максимальное время ожидания ответа от Vision API","requests":"Запросов","reset":"Сброс (авто)","resetCircuits":"Сбросить предохранители","resetCircuitsSuccess":"Состояния предохранителей сброшены","resolution":"Разрешение","responsePath":"Путь ответа","retryAttempts":"Попыток повтора при ошибке","retryAttemptsHint":"Количество автоматических повторов при временных сбоях сети","retryCount":"Повторов: {n}","routeDirect":"Прямой маршрут","routeFallback":"Резервный маршрут","routeStrategy":"Стратегия маршрутизации","routing":"Маршрутизация","routingBalanced":"Сбалансированная","routingQuality":"Приоритет качества","routingSpeed":"Приоритет скорости","routingStrategy":"Стратегия маршрутизации","save":"Сохранить","saveChannel":"Сохранить канал","saved":"Настройки сохранены","savedChannel":"Канал сохранён","saving":"Сохранение…","savingChannel":"Сохранение канала…","secImage":"Качество изображений","secRouting":"Маршрутизация","security":"Безопасность","selfCheck":"Визуальная самопроверка","settings.channels":"Каналы","settings.circuitBreaker":"Предохранители","settings.general":"Основные","settings.performance":"Производительность","settings.privacy":"Приватность","sglang":"SGLang","status":"Статус провайдеров","statusActive":"Канал активен и проверен","statusBenchmarking":"Тестирование задержки…","statusError":"Ошибка канала: {error}","statusIdle":"Канал ожидает запросов","strategyAuto":"Авто (использовать Vision LLM)","strategyCacheOnly":"Только кэш (без сети)","strategyLlm":"Зрительная модель (Vision LLM)","strategyOcr":"Быстрый OCR","strategyOcrLocal":"Локальный OCR (резерв)","stripEXIF":"Удалять метаданные EXIF","subtitle":"Изображения в чате обрабатываются выбранной моделью зрения. Оставьте поля пустыми для автовыбора первой подходящей модели.","successCount":"Успешных: {n}","successRate":"Успешность: {rate}%","targetFormat":"Целевой формат","telemetry":"Телеметрия канала","telemetryHint":"Задержка канала (RTT) в реальном времени, объём запросов и статус работоспособности.","testAllChannels":"Протестировать все каналы","testChannel":"Проверить канал","testFail":"Сбой: {err}","testOk":"OK ({ms}мс)","testSuccess":"Тест успешно пройден: ответ за {time}мс","testVision":"Тест зрения","testing":"Тестирование…","testingChannels":"Тестирование каналов…","tileLargeImages":"Фрагментировать большие изображения","timeoutSec":"Таймаут (сек)","title":"Шлюз компьютерного зрения (Vision Bridge)","tokenCount":"Токенов: {n}","tokenUsage":"Расход токенов","tokensAvg":"В среднем токенов: {n}","totalCalls":"Всего вызовов: {n}","totalLatency":"Суммарная задержка: {time}с","totalProcessed":"Обработано изображений: {n}","type":"Тип","updater_check":"Проверить обновления","updater_checking":"Проверка…","updater_current":"Текущая версия","updater_failed":"Не удалось проверить обновления","updater_latest":"Последняя версия","updater_success":"Обновление выполнено успешно. Перезапустите DSH.","updater_title":"Версия плагина и обновления","updater_up_to_date":"Установлена актуальная версия","updater_update_now":"Обновить до v{version}","updater_updating":"Обновление…","visionFeatures":"Функции распознавания","visionFeaturesDesc":"Анализ структуры страниц, таблиц, графиков и рукописного текста","vllm":"vLLM","weightHint":"Относительный вес канала при взвешенной балансировке","weightLabel":"Вес:"}}
1
+ {"dsh-vision-bridge":{"addChannel":"Добавить канал","advanced":"Расширенные настройки","apiKey":"Ключ API","attachMaxItems":"Макс. вложений за вызов","attachMaxItemsRange":"Количество вложений за вызов должно быть целым числом от 1 до 32","attachments":"Вложения","attachmentsHint":"Сколько изображений можно опубликовать за один вызов attach, и нужно ли скрывать инструменты бриджа от моделей с нативным зрением.","auto":"Автоматически","autoDiscoverOllama":"Автопоиск моделей Ollama","baseURL":"Базовый URL","bench":"Бенчмарк","blurFaces":"Размывать лица на изображениях","channelOrderAutoLatency":"По задержке (наименьший пинг)","channelOrderManual":"Вручную (по списку)","channelOrderMode":"Режим порядка каналов","channelOrderWeighted":"По весам провайдеров","channels":"Каналы провайдеров","channelsDesc":"Список настроенных OCR / Vision провайдеров для анализа изображений.","channelsHint":"Перетащите каналы для изменения порядка приоритета.","circuitClosed":"Норма","circuitHalfOpen":"Тест восстановления","circuitOpen":"Разомкнут (сбой)","circuitState":"Состояние предохранителя (Circuit Breaker)","compression":"Сжатие изображений","compressionDesc":"Автоматически масштабировать и сжимать большие изображения перед отправкой в API.","concurrency":"Параллельные запросы","concurrencyHint":"Максимальное количество одновременных задач распознавания","consensus":"Консенсус моделей","cropImages":"Автообрезка пустых полей","cropImagesDesc":"Удалять пустые поля для экономии токенов и ускорения анализа","current":"Текущая: {provider} / {model}","currentAuto":"Автовыбор","defaultChannel":"Основной канал","defaultModel":"Модель по умолчанию","degraded":"Деградация","deleteChannel":"Удалить канал","describeStrategy":"Стратегия описания","description":"Шлюз компьютерного зрения: анализ скриншотов, распознавание документов, OCR и обработка изображений через мультимодальные модели.","deskew":"Устранение перекоса изображений","detailLevel":"Детализация (Detail Level)","detailLevelAuto":"Авто (Auto)","detailLevelHigh":"Высокая (High Detail)","detailLevelLow":"Низкая (Low Detail - экономия токенов)","discard":"Сбросить","editChannel":"Редактировать канал","empty":"-","emptyChannels":"Каналы компьютерного зрения не настроены.","enableFacePrivacy":"Защита приватности лиц","enableFacePrivacyDesc":"Обнаруживать и скрывать лица людей на скриншотах перед отправкой во внешние API","enhanceImage":"Улучшение качества изображений","errorCount":"Ошибок: {n}","escalateAuto":"Авто (быстрый OCR → LLM)","escalateLlm":"Всегда использовать Vision LLM","escalateOff":"Отключено (сразу ошибка)","escalateOnFail":"Эскалация при сбое","escalation":"Эскалация","escalationAuto":"Автоэскалация (второй проход для сложных изображений)","escalationSimple":"Только простой режим (один проход)","failCount":"Сбоев: {n}","failed":"Не удалось загрузить/сохранить","fallbackChannel":"Резервный канал","fallbackChannelDesc":"Канал, используемый при недоступности основного провайдера","fastMode":"Быстрый режим OCR","filterProviders":"Фильтр провайдеров…","freeProviders":"Бесплатные провайдеры","healthy":"В норме","hideRedundantTools":"Скрывать инструменты бриджа у моделей со зрением","imageDimensions":"Максимальное разрешение (px)","imageDimensionsHint":"Например 2048 для ограничения максимальной стороны изображения","imageFormat":"Формат конвертации","imageFormatJpeg":"JPEG (меньший размер)","imageFormatPng":"PNG (без потерь)","imageFormatWebp":"WebP (оптимальный баланс)","imageMaxHeight":"Макс. высота (px)","imageMaxWidth":"Макс. ширина (px)","imageQuality":"Качество (1–100)","jsonrpc":"JSON-RPC","keyHidden":"неизвестно","keyMissing":"нет ключа","keyOk":"ключ в порядке","latency":"Задержка","latencyAvg":"Средняя задержка: {time}мс","latencyMax":"Макс. задержка: {time}мс","latencyMin":"Мин. задержка: {time}мс","latencyP95":"p95 задержка: {time}мс","loading":"Загрузка настроек Vision Bridge…","maskPII":"Маскировать персональные данные в промптах","maskSystemPaths":"Маскировать пути и IP в ответах","maxDimension":"Макс. размер стороны (px)","maxDimensionHint":"Изображения большего размера будут пропорционально уменьшены","maxTokens":"Максимум токенов вывода","method":"Метод","mode":"Режим","modeHybrid":"Гибридный (автоперезапись + инструменты)","modeLlm":"Только LLM (автоперезапись, инструменты доступны)","modeTools":"Только инструменты (без перезаписи, вызов describe_image)","model":"Модель","modelCatalog":"Каталог моделей","modelCatalogFailed":"Не удалось загрузить каталог моделей","modelCatalogLoading":"Загрузка каталога моделей…","modelInvalid":"Модель не принимает изображения","modelName":"Имя модели (например gpt-4o, claude-3-5-sonnet, qwen-vl)","modelPlaceholder":"gpt-4o","modelSelection":"Выбор модели","noChannels":"Нет доступных каналов","noModels":"Модели не найдены","noVisionModels":"В каталоге нет моделей со зрением (вход: [text, image]) — добавьте в Настройки → Модели.","nsfwFilter":"Фильтр неприемлемого контента","ocrEngine":"Движок OCR","ocrEngineAuto":"Автовыбор","ocrEngineCloud":"Облачные мультимодальные модели","ocrEngineLocal":"Локальный OCR / Ollama","ocrLanguage":"Язык распознавания текста","ocrLanguageHint":"Например rus+eng для Tesseract / локальных движков","offline":"Офлайн","orderLatency":"По минимальной задержке","orderManual":"Ручной порядок","orderRandom":"Случайный балансировщик","orderRoundRobin":"Циклический (Round Robin)","orderWeighted":"Взвешенный балансировщик","pipeline":"Пайплайн обработки","pixelDiff":"Попиксельное сравнение (Pixel Diff)","pixelDiffHint":"Точное отслеживание изменений интерфейса «до / после» на уровне пикселей.","presetCloud":"Пресет: Облако","presetLmStudio":"Пресет: LM Studio","presetLocal":"Пресет: Локальный","privacy":"Приватность и безопасность","protocol":"Протокол","protocolOpenaiChat":"openai-chat","protocolOpenaiResponses":"openai-responses","provider":"Провайдер","providerName":"Имя провайдера (например openai, anthropic, ollama)","providerNameHint":"Идентификатор провайдера в системе","providerPlaceholder":"openai","quality":"Качество сжатия (1-100)","qualityAnalysis":"Анализ качества и детекция размытия","qualityAnalysisHint":"Определение резкости (дисперсия Лапласа) и извлечение цветовой палитры.","qualityHint":"85 рекомендуется для оптимального соотношения качества и размера","qualityJpeg":"Качество JPEG (%)","qualityWebp":"Качество WebP (%)","rateLimit":"Лимит запросов в минуту (RPM)","rateLimitRpm":"Лимит RPM","rateLimitTpm":"Лимит TPM","remove":"Удалить","reqBoth":"Выберите провайдера и модель, или оставьте оба пустыми для автовыбора","requestTemplate":"Шаблон запроса","requestTimeout":"Таймаут запроса (сек)","requestTimeoutHint":"Максимальное время ожидания ответа от Vision API","requests":"Запросов","reset":"Сброс (авто)","resetCircuits":"Сбросить предохранители","resetCircuitsSuccess":"Состояния предохранителей сброшены","resolution":"Разрешение","responsePath":"Путь ответа","retryAttempts":"Попыток повтора при ошибке","retryAttemptsHint":"Количество автоматических повторов при временных сбоях сети","retryCount":"Повторов: {n}","routeDirect":"Прямой маршрут","routeFallback":"Резервный маршрут","routeStrategy":"Стратегия маршрутизации","routing":"Маршрутизация","routingBalanced":"Сбалансированная","routingQuality":"Приоритет качества","routingSpeed":"Приоритет скорости","routingStrategy":"Стратегия маршрутизации","save":"Сохранить","saveChannel":"Сохранить канал","saved":"Настройки сохранены","savedChannel":"Канал сохранён","saving":"Сохранение…","savingChannel":"Сохранение канала…","secImage":"Качество изображений","secRouting":"Маршрутизация","security":"Безопасность","selfCheck":"Визуальная самопроверка","settings.channels":"Каналы","settings.circuitBreaker":"Предохранители","settings.general":"Основные","settings.performance":"Производительность","settings.privacy":"Приватность","sglang":"SGLang","status":"Статус провайдеров","statusActive":"Канал активен и проверен","statusBenchmarking":"Тестирование задержки…","statusError":"Ошибка канала: {error}","statusIdle":"Канал ожидает запросов","strategyAuto":"Авто (использовать Vision LLM)","strategyCacheOnly":"Только кэш (без сети)","strategyLlm":"Зрительная модель (Vision LLM)","strategyOcr":"Быстрый OCR","strategyOcrLocal":"Локальный OCR (резерв)","stripEXIF":"Удалять метаданные EXIF","subtitle":"Изображения в чате обрабатываются выбранной моделью зрения. Оставьте поля пустыми для автовыбора первой подходящей модели.","successCount":"Успешных: {n}","successRate":"Успешность","targetFormat":"Целевой формат","telemetry":"Телеметрия канала","telemetryHint":"Задержка канала (RTT) в реальном времени, объём запросов и статус работоспособности.","testAllChannels":"Протестировать все каналы","testChannel":"Проверить канал","testFail":"Сбой: {err}","testOk":"OK ({ms}мс)","testSuccess":"Тест успешно пройден: ответ за {time}мс","testVision":"Тест зрения","testing":"Тестирование…","testingChannels":"Тестирование каналов…","tileLargeImages":"Фрагментировать большие изображения","timeoutSec":"Таймаут (сек)","title":"Шлюз компьютерного зрения (Vision Bridge)","tokenCount":"Токенов: {n}","tokenUsage":"Расход токенов","tokensAvg":"В среднем токенов: {n}","totalCalls":"Всего вызовов: {n}","totalLatency":"Суммарная задержка: {time}с","totalProcessed":"Обработано изображений: {n}","type":"Тип","updater_check":"Проверить обновления","updater_checking":"Проверка…","updater_current":"Текущая версия","updater_failed":"Не удалось проверить обновления","updater_latest":"Последняя версия","updater_success":"Обновление выполнено успешно. Перезапустите DSH.","updater_title":"Версия плагина и обновления","updater_up_to_date":"Установлена актуальная версия","updater_update_now":"Обновить до v{version}","updater_updating":"Обновление…","visionFeatures":"Функции распознавания","visionFeaturesDesc":"Анализ структуры страниц, таблиц, графиков и рукописного текста","vllm":"vLLM","weightHint":"Относительный вес канала при взвешенной балансировке","weightLabel":"Вес:"}}
@@ -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":"Активен","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":"Обновление…"}}
@@ -1 +1 @@
1
- {"@goodandready/dsh-cost-meter":{"update.available":"Доступно обновление","update.btn":"Обновить сейчас","update.checking":"Проверка...","update.done":"Обновлено успешно! Перезапустите DSH.","update.failed":"Ошибка обновления:","update.up_to_date":"Актуальная версия","update.updating":"Обновление..."},"dsh-cost-meter":{"action.copied":"Скопировано!","action.copy_report":"Скопировать сводку","action.sync_err":"Синхронизация не удалась","action.sync_now":"Синхронизировать сейчас","action.sync_ok":"Каталог обновлён","action.sync_rate_limited":"Подождите {seconds} с","action.syncing":"Синхронизация…","badge.catalog_empty":"Каталог: загрузка…","badge.catalog_err":"Каталог: ошибка","badge.catalog_off":"Каталог: отключён","badge.catalog_ok":"Каталог: моделей — {count}","badge.catalog_stale":"Кэш: офлайн","badge.deepseek":"Тариф DeepSeek: активен","budget.exceeded":"⚠️ Лимит бюджета превышен: {limit}","cacheSaved":"Сэкономлено на кэше контекста:","catalogUnavailable":"Каталог OpenRouter недоступен: ","chipRate":"тариф","chipUnknown":"тариф ?","copySummary":"Скопировать сводку","diag.last_sync":"Последняя синхронизация","diag.models_count":"Моделей в каталоге","diag.route":"Активный маршрут","diag.tariff_source":"Источник тарифов","field.budgetThreshold":"Порог бюджета сессии (USD)","field.currency":"Символ валюты","field.displayTimeZone":"Часовой пояс отображения","field.refreshHours":"Интервал обновления каталога (в часах)","field.usdRate":"Курс к USD","field.useOpenRouter":"Использовать каталог OpenRouter","flat":"фикс.","header.sub":"Мониторинг расхода токенов, автоматический расчёт тарифов и скидочные интервалы","header.title":"Счётчик расходов","hint.budgetThreshold":"Предупреждать цветом плашки при превышении расходов в сессии (0 — выключено).","hint.currency":"Символ валюты в виджете (например $, ₽, €).","hint.displayTimeZone":"Часовой пояс IANA для расписания пиковых/ночных тарифов.","hint.refreshHours":"Интервал фонового запроса каталога в часах (от 1 до 168).","hint.usdRate":"Курс обмена: количество единиц валюты за 1 USD (например 80 для ₽).","hint.useOpenRouter":"Динамически получать тарифы и окна скидок через публичный API OpenRouter.","inputCacheHit":"Ввод (попадание в кэш)","inputCacheMiss":"Ввод (промах кэша)","modal.close":"Закрыть","modal.title":"Тарифы и стоимость моделей","modelNotFound":"Модель не найдена в каталоге OpenRouter. Задайте цены вручную в настройках или сопоставьте модель через modelMap.","models.show_less":"Свернуть","models.show_more":"Показать все модели ({count})","modelsBreakdown":"Детализация по моделям","noPriceSpecified":"тариф не указан","noUsageYet":"Провайдер ещё не передал данные об использовании для этой сессии.","offPeak":"ночь","offpeak":"ночной тариф","output":"Вывод","peak":"пик","rate.cache_hit":"Вход (попадание в кэш)","rate.cache_write":"Вход (запись в кэш)","rate.custom":"Пользовательский","rate.default":"По умолчанию","rate.discountedActive":"Действует сниженный тариф","rate.input":"Вход: {price} / 1M токенов","rate.offPeak":"непиковый","rate.output":"Выход: {price} / 1M токенов","rate.peak":"пиковый","rate.per_1m":"1 млн токенов, $","rate.unit":"/ 1M ток.","routeUnknown":"маршрут неизвестен","savings.cache_saved":"⚡ Сэкономлено на кэше контекста: ≈ {amount} ({percent}%)","savings.hint":"💡 Скидка 50% начнётся через {time} ({clock} {zone})","section.diagnostics":"Диагностика и статус","section.diagnostics_desc":"Текущее состояние фоновой синхронизации и кэша тарифов","section.general":"Основные параметры","section.general_desc":"Отображение валюты, коэффициент конвертации и настройка часового пояса","section.openrouter":"Каталог тарифов OpenRouter","section.openrouter_desc":"Публичный каталог для динамического расчёта стоимости моделей и скидочных интервалов","sessionTokens":"ТОКЕНЫ СЕССИИ","sessionTotal":"Всего за сессию:","settings.loading":"Загрузка настроек…","settings.retry":"Повторить попытку","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить настройки: ","settings.saved":"Сохранено","settings.saving":"Сохранение…","settings.unavailable":"Настройки недоступны (namespace ещё не зарегистрирован).","spendByModel":"РАСХОД ПО МОДЕЛЯМ","subtitle":"Стоимость сессии в шапке, тарифы токенов и детализация по моделям","table.model":"Модель","table.provider":"Провайдер","table.rate":"Тарифная ставка","table.total":"Итого","title":"Счётчик стоимости токенов","tokens":"Токены","tokens.models_spent":"Расходы по моделям","tokens.no_usage_yet":"Провайдер пока не передал статистику использования для этой сессии.","tokens.not_priced":"Тариф не задан","tokens.session":"Токены сессии","tokens.session_total":"Всего за сессию:","tokens.tokens_col":"Токены","totalCost":"Общая стоимость","tz.invalid":"Недопустимый идентификатор часового пояса IANA","update.available":"Доступно обновление: v{latestVersion} (текущая: v{currentVersion})","update.btn":"Обновить сейчас","update.checking":"Проверка обновлений…","update.done":"Успешно обновлено до v{version}! Перезапустите DSH.","update.failed":"Ошибка обновления: {error}","update.up_to_date":"Установлена актуальная версия","update.updating":"Обновление…"}}
1
+ {"@goodandready/dsh-cost-meter":{"update.available":"Доступно обновление","update.btn":"Обновить сейчас","update.checking":"Проверка...","update.done":"Обновлено успешно! Перезапустите DSH.","update.failed":"Ошибка обновления:","update.up_to_date":"Актуальная версия","update.updating":"Обновление..."},"dsh-cost-meter":{"action.copied":"Скопировано!","action.copy_report":"Скопировать сводку","action.sync_err":"Синхронизация не удалась","action.sync_now":"Синхронизировать сейчас","action.sync_ok":"Каталог обновлён","action.sync_rate_limited":"Подождите {seconds} с","action.syncing":"Синхронизация…","badge.catalog_empty":"Каталог: загрузка…","badge.catalog_err":"Каталог: ошибка","badge.catalog_off":"Каталог: отключён","badge.catalog_ok":"Каталог: моделей — {count}","badge.catalog_stale":"Кэш: офлайн","badge.deepseek":"Тариф DeepSeek: активен","budget.exceeded":"⚠️ Лимит бюджета превышен: {limit}","cacheSaved":"Сэкономлено на кэше контекста:","catalogUnavailable":"Каталог OpenRouter недоступен: ","chipRate":"тариф","chipUnknown":"тариф ?","copySummary":"Скопировать сводку","diag.last_sync":"Последняя синхронизация","diag.models_count":"Моделей в каталоге","diag.route":"Активный маршрут","diag.tariff_source":"Источник тарифов","field.budgetThreshold":"Порог бюджета сессии (USD)","field.currency":"Символ валюты","field.displayTimeZone":"Часовой пояс отображения","field.refreshHours":"Интервал обновления каталога (в часах)","field.usdRate":"Курс к USD","field.useOpenRouter":"Использовать каталог OpenRouter","flat":"фикс.","header.sub":"Мониторинг расхода токенов, автоматический расчёт тарифов и скидочные интервалы","header.title":"Счётчик расходов","hint.budgetThreshold":"Предупреждать цветом плашки при превышении расходов в сессии (0 — выключено).","hint.currency":"Символ валюты в виджете (например $, ₽, €).","hint.displayTimeZone":"Часовой пояс IANA для расписания пиковых/ночных тарифов.","hint.refreshHours":"Интервал фонового запроса каталога в часах (от 1 до 168).","hint.usdRate":"Курс обмена: количество единиц валюты за 1 USD (например 80 для ₽).","hint.useOpenRouter":"Динамически получать тарифы и окна скидок через публичный API OpenRouter.","inputCacheHit":"Ввод (попадание в кэш)","inputCacheMiss":"Ввод (промах кэша)","modal.close":"Закрыть","modal.title":"Тарифы и стоимость моделей","modelNotFound":"Модель не найдена в каталоге OpenRouter. Задайте цены вручную в настройках или сопоставьте модель через modelMap.","models.show_less":"Свернуть","models.show_more":"Показать все модели ({count})","modelsBreakdown":"Детализация по моделям","noPriceSpecified":"тариф не указан","noUsageYet":"Провайдер ещё не передал данные об использовании для этой сессии.","offPeak":"ночь","offpeak":"ночной тариф","output":"Вывод","peak":"пик","rate.cache_hit":"Вход (попадание в кэш)","rate.cache_write":"Вход (запись в кэш)","rate.custom":"Пользовательский","rate.default":"По умолчанию","rate.discountedActive":"Действует сниженный тариф","rate.input":"Вход (промах кэша)","rate.offPeak":"непиковый","rate.output":"Выход","rate.peak":"пиковый","rate.per_1m":"1 млн токенов, $","rate.unit":"/ 1M ток.","routeUnknown":"маршрут неизвестен","savings.cache_saved":"⚡ Сэкономлено на кэше контекста: ≈ {amount} ({percent}%)","savings.hint":"💡 Скидка 50% начнётся через {time} ({clock} {zone})","section.diagnostics":"Диагностика и статус","section.diagnostics_desc":"Текущее состояние фоновой синхронизации и кэша тарифов","section.general":"Основные параметры","section.general_desc":"Отображение валюты, коэффициент конвертации и настройка часового пояса","section.openrouter":"Каталог тарифов OpenRouter","section.openrouter_desc":"Публичный каталог для динамического расчёта стоимости моделей и скидочных интервалов","sessionTokens":"ТОКЕНЫ СЕССИИ","sessionTotal":"Всего за сессию:","settings.loading":"Загрузка настроек…","settings.retry":"Повторить попытку","settings.save":"Сохранить","settings.saveFailed":"Не удалось сохранить настройки: ","settings.saved":"Сохранено","settings.saving":"Сохранение…","settings.unavailable":"Настройки недоступны (namespace ещё не зарегистрирован).","spendByModel":"РАСХОД ПО МОДЕЛЯМ","subtitle":"Стоимость сессии в шапке, тарифы токенов и детализация по моделям","table.model":"Модель","table.provider":"Провайдер","table.rate":"Тарифная ставка","table.total":"Итого","title":"Счётчик стоимости токенов","tokens":"Токены","tokens.models_spent":"Расходы по моделям","tokens.no_usage_yet":"Провайдер пока не передал статистику использования для этой сессии.","tokens.not_priced":"Тариф не задан","tokens.session":"Токены сессии","tokens.session_total":"Всего за сессию:","tokens.tokens_col":"Токены","totalCost":"Общая стоимость","tz.invalid":"Недопустимый идентификатор часового пояса IANA","update.available":"Доступно обновление: v{latestVersion} (текущая: v{currentVersion})","update.btn":"Обновить сейчас","update.checking":"Проверка обновлений…","update.done":"Успешно обновлено до v{version}! Перезапустите DSH.","update.failed":"Ошибка обновления: {error}","update.up_to_date":"Установлена актуальная версия","update.updating":"Обновление…"}}
@@ -1 +1 @@
1
- {"@goodandready/dsh-time-machine":{"allFiles":"Все файлы","autoHeal":"Восстановление промпта при сбое","autoSnapshot":"Автоснимок перед правкой файлов","close":"Закрыть","confirmDelete":"Удалить эту контрольную точку?","confirmRestoreFile":"Восстановить этот файл к состоянию контрольной точки?","confirmRollback":"Откатиться к этой контрольной точке? Это сбросит изменения в рабочей области.","create":"Создать точку сохранения","delete":"Удалить","diff":"Различия","empty":"Контрольных точек пока нет.","fileRestored":"Файл успешно восстановлен.","filesChanged":"Изменённые файлы","guideDesc":"Контрольные точки, визуальные диффы и мгновенный откат рабочей области.","guideTitle":"Машина времени","labelPh":"Название контрольной точки","list":"Хронология","loading":"Загрузка точек сохранения…","maxSnapshots":"Максимум снимков","noDiff":"Нет изменений относительно контрольной точки.","restore":"Восстановить","restoreFile":"Восстановить файл","rollback":"Откат","rollbackSuccess":"Рабочая область успешно восстановлена.","save":"Создать точку","saved":"Точка сохранена","selectFile":"Выберите файл для просмотра различий","sidebarNotice":"Снимки состояния рабочей области сохраняются автоматически перед каждым крупным действием агента.","snapshots":"Снимки состояния","sub":"Теневые снимки, diff и мгновенный откат для безопасности агента.","tabTitle":"Машина времени","title":"Машина времени (Time Machine)","unavailable":"Настройки недоступны","updaterCheck":"Проверить обновления","updaterChecking":"Проверка...","updaterCurrent":"Текущая: v{version}","updaterFailed":"Ошибка обновления: {error}","updaterLatest":"Доступна: v{version}","updaterSuccess":"Обновлено до v{version}! Перезапустите DSH.","updaterTitle":"Обновление плагина","updaterUpToDate":"Актуальная версия","updaterUpdate":"Обновить сейчас","updaterUpdateNow":"Обновить до v{version}","updaterUpdating":"Обновление...","view":"Просмотр"},"dsh-time-machine":{"allFiles":"Все файлы","autoHeal":"Восстановление промпта при сбое","autoSnapshot":"Автоснимок перед правкой файлов","close":"Закрыть","confirmDelete":"Удалить эту контрольную точку?","confirmRestoreFile":"Восстановить этот файл к состоянию контрольной точки?","confirmRollback":"Откатиться к этой контрольной точке? Это сбросит изменения в рабочей области.","create":"Создать точку сохранения","delete":"Удалить","diff":"Различия","empty":"Контрольных точек пока нет.","fileRestored":"Файл успешно восстановлен.","filesChanged":"Изменённые файлы","guideDesc":"Контрольные точки, визуальные диффы и мгновенный откат рабочей области.","guideTitle":"Машина времени","labelPh":"Название контрольной точки","list":"Хронология","loading":"Загрузка точек сохранения…","maxSnapshots":"Максимум снимков","noDiff":"Нет изменений относительно контрольной точки.","restore":"Восстановить","restoreFile":"Восстановить файл","rollback":"Откат","rollbackSuccess":"Рабочая область успешно восстановлена.","save":"Создать точку","saved":"Точка сохранена","selectFile":"Выберите файл для просмотра различий","sidebarNotice":"Снимки состояния рабочей области сохраняются автоматически перед каждым крупным действием агента.","snapshots":"Снимки состояния","sub":"Теневые снимки, diff и мгновенный откат для безопасности агента.","tabTitle":"Машина времени","title":"Машина времени (Time Machine)","unavailable":"Настройки недоступны","updaterCheck":"Проверить обновления","updaterChecking":"Проверка...","updaterCurrent":"Текущая: v{version}","updaterFailed":"Ошибка обновления: {error}","updaterLatest":"Доступна: v{version}","updaterSuccess":"Обновлено до v{version}! Перезапустите DSH.","updaterTitle":"Обновление плагина","updaterUpToDate":"Актуальная версия","updaterUpdate":"Обновить сейчас","updaterUpdateNow":"Обновить до v{version}","updaterUpdating":"Обновление...","view":"Просмотр"}}
1
+ {"@goodandready/dsh-time-machine":{"allFiles":"Все файлы","autoHeal":"Восстановление промпта при сбое","autoSnapshot":"Автоснимок перед правкой файлов","close":"Закрыть","confirmDelete":"Удалить эту контрольную точку?","confirmRestoreFile":"Восстановить этот файл к состоянию контрольной точки?","confirmRollback":"Откатиться к этой контрольной точке? Это сбросит изменения в рабочей области.","create":"Создать точку сохранения","delete":"Удалить","diff":"Различия","empty":"Контрольных точек пока нет.","fileRestored":"Файл успешно восстановлен.","filesChanged":"Изменённые файлы","guideDesc":"Контрольные точки, визуальные диффы и мгновенный откат рабочей области.","guideTitle":"Машина времени","labelPh":"Название контрольной точки","list":"Хронология","loading":"Загрузка точек сохранения…","maxSnapshots":"Максимум снимков","noDiff":"Нет изменений относительно контрольной точки.","restore":"Восстановить","restoreFile":"Восстановить файл","rollback":"Откат","rollbackSuccess":"Рабочая область успешно восстановлена.","save":"Создать точку","saved":"Точка сохранена","selectFile":"Выберите файл для просмотра различий","sidebarNotice":"Снимки состояния рабочей области сохраняются автоматически перед каждым крупным действием агента.","snapshots":"Снимки состояния","sub":"Теневые снимки, diff и мгновенный откат для безопасности агента.","tabTitle":"Машина времени","title":"Машина времени (Time Machine)","unavailable":"Настройки недоступны","updaterCheck":"Проверить обновления","updaterChecking":"Проверка...","updaterCurrent":"Текущая версия","updaterFailed":"Сбой проверки обновлений: ","updaterLatest":"Последняя версия","updaterSuccess":"Плагин успешно обновлен! Пожалуйста, перезапустите сервис DSH.","updaterTitle":"Обновление плагина","updaterUpToDate":"Актуальная версия","updaterUpdate":"Обновить сейчас","updaterUpdateNow":"Обновить до v{version}","updaterUpdating":"Обновление...","view":"Просмотр"},"dsh-time-machine":{"allFiles":"Все файлы","autoHeal":"Восстановление промпта при сбое","autoSnapshot":"Автоснимок перед правкой файлов","close":"Закрыть","confirmDelete":"Удалить эту контрольную точку?","confirmRestoreFile":"Восстановить этот файл к состоянию контрольной точки?","confirmRollback":"Откатиться к этой контрольной точке? Это сбросит изменения в рабочей области.","create":"Создать точку сохранения","delete":"Удалить","diff":"Различия","empty":"Контрольных точек пока нет.","fileRestored":"Файл успешно восстановлен.","filesChanged":"Изменённые файлы","guideDesc":"Контрольные точки, визуальные диффы и мгновенный откат рабочей области.","guideTitle":"Машина времени","labelPh":"Название контрольной точки","list":"Хронология","loading":"Загрузка точек сохранения…","maxSnapshots":"Максимум снимков","noDiff":"Нет изменений относительно контрольной точки.","restore":"Восстановить","restoreFile":"Восстановить файл","rollback":"Откат","rollbackSuccess":"Рабочая область успешно восстановлена.","save":"Создать точку","saved":"Точка сохранена","selectFile":"Выберите файл для просмотра различий","sidebarNotice":"Снимки состояния рабочей области сохраняются автоматически перед каждым крупным действием агента.","snapshots":"Снимки состояния","sub":"Теневые снимки, diff и мгновенный откат для безопасности агента.","tabTitle":"Машина времени","title":"Машина времени (Time Machine)","unavailable":"Настройки недоступны","updaterCheck":"Проверить обновления","updaterChecking":"Проверка...","updaterCurrent":"Текущая: v{version}","updaterFailed":"Ошибка обновления: {error}","updaterLatest":"Доступна: v{version}","updaterSuccess":"Обновлено до v{version}! Перезапустите DSH.","updaterTitle":"Обновление плагина","updaterUpToDate":"Актуальная версия","updaterUpdate":"Обновить сейчас","updaterUpdateNow":"Обновить до v{version}","updaterUpdating":"Обновление...","view":"Просмотр"}}