@goodandready/dsh-russian-lang 0.2.17 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/README.ru.md +2 -1
- package/README.zh.md +102 -0
- package/lib/client.js +242 -277
- package/lib/index.js +49 -10
- package/lib/locales/plugins/01-token-dashboard.json +1 -0
- package/lib/locales/plugins/02-subscriptions.json +1 -0
- package/lib/locales/plugins/03-dshmarket.json +1 -0
- package/lib/locales/plugins/04-context-doctor.json +1 -0
- package/lib/locales/plugins/05-plugins-store.json +1 -0
- package/lib/locales/plugins/06-im-hub.json +1 -0
- package/lib/locales/plugins/07-better-sidebar.json +1 -0
- package/lib/locales/plugins/08-task-board.json +1 -0
- package/lib/locales/plugins/09-dshmarket-1.13.json +1 -0
- package/lib/locales/plugins/10-kanban.json +1 -0
- package/lib/locales/plugins/11-skill-hub.json +1 -0
- package/lib/locales/plugins/12-skills-manager.json +1 -0
- package/lib/locales/plugins/13-agent-teams.json +1 -0
- package/lib/locales/plugins/14-ollama-cloud.json +1 -0
- package/lib/locales/plugins/15-commandcode.json +1 -0
- package/lib/locales/plugins/16-usage-stats.json +1 -0
- package/lib/locales/plugins/17-dsh-context.json +1 -0
- package/lib/locales/plugins/18-opencode-palette.json +1 -0
- package/lib/locales/plugins/19-univer-office.json +1 -0
- package/lib/locales/plugins/20-skill-explorer.json +1 -0
- package/lib/locales/plugins/21-auto-collapse.json +1 -0
- package/lib/locales/plugins/22-subagent-director.json +1 -0
- package/lib/locales/plugins/23-moa.json +1 -0
- package/lib/locales/plugins/24-personal-directive.json +1 -0
- package/lib/locales/plugins/25-hooks.json +1 -0
- package/lib/locales/plugins/26-config-manager.json +1 -0
- package/lib/locales/plugins/27-config-manager-sync.json +1 -0
- package/lib/locales/plugins/28-config-manager-market.json +1 -0
- package/lib/locales/plugins/29-config-manager-recovery.json +1 -0
- package/lib/locales/plugins/30-config-manager-history.json +1 -0
- package/lib/locales/plugins/31-dshhub-market.json +1 -0
- package/lib/locales/plugins/32-vision-bridge.json +1 -0
- package/lib/locales/plugins/33-messenger-gateway.json +1 -0
- package/lib/locales/plugins/34-key-rotation.json +1 -0
- package/lib/locales/plugins/35-gitea.json +1 -0
- package/lib/locales/plugins/36-cost-meter.json +1 -0
- package/lib/locales/plugins/37-time-machine.json +1 -0
- package/lib/locales/plugins/38-context-lens.json +1 -0
- package/lib/locales/plugins/39-shadow-auditor.json +1 -0
- package/lib/locales/plugins/40-clinebot.json +1 -0
- package/lib/locales/plugins/41-lanmode.json +1 -0
- package/lib/locales/plugins/42-plugin-console.json +1 -0
- package/lib/locales/plugins/43-better-input.json +1 -0
- package/lib/locales/plugins/44-auto-review.json +1 -0
- package/lib/locales/plugins/45-session-control.json +1 -0
- package/lib/locales/plugins/46-memory-brain.json +1 -0
- package/lib/locales/plugins/47-llm-wiki.json +1 -0
- package/lib/locales/plugins/48-task-tracker.json +1 -0
- package/lib/locales/plugins/49-usage-guard.json +1 -0
- package/lib/locales/plugins/50-automode.json +1 -0
- package/lib/locales/plugins/51-plugin-guard.json +1 -0
- package/lib/locales/plugins/52-navbar.json +1 -0
- package/lib/locales/plugins/53-remote-workspace.json +1 -0
- package/lib/locales/plugins/54-workshop-market.json +1 -0
- package/lib/locales/plugins/55-skin-center.json +1 -0
- package/lib/locales/plugins/56-cron.json +1 -0
- package/lib/locales/plugins/57-live-canvas.json +1 -0
- package/lib/locales/plugins/58-grok-xsearch.json +1 -0
- package/lib/locales/plugins/59-goal.json +1 -0
- package/lib/locales/plugins/60-model-sync.json +1 -0
- package/lib/locales/plugins/61-issue-reporter.json +1 -0
- package/lib/locales/plugins/62-model-search.json +1 -0
- package/lib/locales/plugins/63-agent-orchestrator.json +1 -0
- package/lib/locales/plugins/64-key-limits.json +1 -0
- package/lib/locales/plugins/65-subscriptions.json +1 -0
- package/lib/locales/plugins/66-tts.json +1 -0
- package/lib/locales/plugins/67-voice.json +1 -0
- package/lib/locales/plugins/68-image-gen.json +1 -0
- package/lib/locales/plugins/69-plugin-notify.json +1 -0
- package/lib/locales/plugins/70-hypotheses.json +1 -0
- package/lib/locales/zh-ru.json +1 -0
- package/lib/locales.js +32 -0
- package/lib/plugin-updater.js +8 -2
- package/package.json +6 -7
- package/docs/media/banner.jpg +0 -0
- package/docs/media/language-selector.png +0 -0
- package/docs/media/ui-russian.png +0 -0
- package/ru/01-core-small.json +0 -201
- package/ru/02-conversation.json +0 -834
- package/ru/03-models-workspace.json +0 -190
- package/ru/04-preset-cordis.json +0 -136
- package/ru/05-plugins-subagent.json +0 -158
- package/ru/06-rest.json +0 -257
- package/ru/07-sidebar-previewers.json +0 -57
- package/ru-plugins/01-token-dashboard.json +0 -83
- package/ru-plugins/02-subscriptions.json +0 -40
- package/ru-plugins/03-dshmarket.json +0 -536
- package/ru-plugins/04-context-doctor.json +0 -64
- package/ru-plugins/05-plugins-store.json +0 -81
- package/ru-plugins/06-im-hub.json +0 -97
- package/ru-plugins/07-better-sidebar.json +0 -490
- package/ru-plugins/08-task-board.json +0 -126
- package/ru-plugins/09-dshmarket-1.13.json +0 -46
- package/ru-plugins/10-kanban.json +0 -460
- package/ru-plugins/11-skill-hub.json +0 -257
- package/ru-plugins/12-skills-manager.json +0 -222
- package/ru-plugins/13-agent-teams.json +0 -193
- package/ru-plugins/14-ollama-cloud.json +0 -72
- package/ru-plugins/15-commandcode.json +0 -200
- package/ru-plugins/16-usage-stats.json +0 -126
- package/ru-plugins/17-dsh-context.json +0 -316
- package/ru-plugins/18-opencode-palette.json +0 -31
- package/ru-plugins/19-univer-office.json +0 -57
- package/ru-plugins/20-skill-explorer.json +0 -69
- package/ru-plugins/21-auto-collapse.json +0 -16
- package/ru-plugins/22-subagent-director.json +0 -142
- package/ru-plugins/23-moa.json +0 -214
- package/ru-plugins/24-personal-directive.json +0 -9
- package/ru-plugins/25-hooks.json +0 -11
- package/ru-plugins/26-config-manager.json +0 -453
- package/ru-plugins/27-config-manager-sync.json +0 -202
- package/ru-plugins/28-config-manager-market.json +0 -142
- package/ru-plugins/29-config-manager-recovery.json +0 -102
- package/ru-plugins/30-config-manager-history.json +0 -55
- package/ru-plugins/31-dshhub-market.json +0 -398
- package/ru-plugins/32-vision-bridge.json +0 -216
- package/ru-plugins/33-messenger-gateway.json +0 -236
- package/ru-plugins/34-key-rotation.json +0 -217
- package/ru-plugins/35-gitea.json +0 -174
- package/ru-plugins/36-cost-meter.json +0 -90
- package/ru-plugins/37-time-machine.json +0 -38
- package/ru-plugins/38-context-lens.json +0 -36
- package/ru-plugins/39-shadow-auditor.json +0 -67
- package/ru-plugins/40-clinebot.json +0 -142
- package/ru-plugins/41-lanmode.json +0 -164
- package/ru-plugins/42-plugin-console.json +0 -354
- package/ru-plugins/43-better-input.json +0 -127
- package/ru-plugins/44-auto-review.json +0 -83
- package/ru-plugins/45-session-control.json +0 -122
- package/ru-plugins/46-memory-brain.json +0 -33
- package/ru-plugins/47-llm-wiki.json +0 -26
- package/ru-plugins/48-task-tracker.json +0 -19
- package/ru-plugins/49-usage-guard.json +0 -51
- package/ru-plugins/50-automode.json +0 -28
- package/ru-plugins/51-plugin-guard.json +0 -12
- package/ru-plugins/52-navbar.json +0 -6
- package/ru-plugins/53-remote-workspace.json +0 -140
- package/ru-plugins/54-workshop-market.json +0 -58
- package/ru-plugins/55-skin-center.json +0 -97
- package/ru-plugins/56-cron.json +0 -334
- package/ru-plugins/57-live-canvas.json +0 -121
- package/ru-plugins/58-grok-xsearch.json +0 -80
- package/ru-plugins/59-goal.json +0 -54
- package/ru-plugins/60-model-sync.json +0 -121
- package/ru-plugins/61-issue-reporter.json +0 -192
- package/ru-plugins/62-model-search.json +0 -22
- package/ru-plugins/63-agent-orchestrator.json +0 -10
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"config-manager-sync": {
|
|
3
|
-
"section.label": "Удалённая синхронизация",
|
|
4
|
-
"section.description": "Синхронизация переносимой конфигурации между устройствами через приватный Git-репозиторий (секреты не синхронизируются)",
|
|
5
|
-
"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.",
|
|
6
|
-
"config.title": "Repository",
|
|
7
|
-
"config.repoUrl": "Repository URL",
|
|
8
|
-
"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.",
|
|
9
|
-
"config.token": "Auth token",
|
|
10
|
-
"config.tokenHint": "Securely written into DSH credentials (ref {ref}); never written into sync files or logs. Leave blank to reuse the saved credential.",
|
|
11
|
-
"config.tokenSaved": "Credential configured",
|
|
12
|
-
"config.tokenPlaceholder": "ghp_… (optional)",
|
|
13
|
-
"config.save": "Save config",
|
|
14
|
-
"config.saving": "Saving…",
|
|
15
|
-
"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.",
|
|
16
|
-
"channel.title": "Sync Channel",
|
|
17
|
-
"channel.git": "Git private repo",
|
|
18
|
-
"channel.webdav": "WebDAV server",
|
|
19
|
-
"channel.perChannelHint": "Auto sync, sync mode, encryption and remote snapshots are configured independently for GitHub and WebDAV channels.",
|
|
20
|
-
"channel.open": "Configure sync channel",
|
|
21
|
-
"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.",
|
|
22
|
-
"channel.configured": "Configured",
|
|
23
|
-
"channel.notConfigured": "Not configured",
|
|
24
|
-
"channel.currentUrl": "Current URL",
|
|
25
|
-
"webdav.title": "WebDAV Configuration",
|
|
26
|
-
"webdav.url": "Server URL",
|
|
27
|
-
"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.",
|
|
28
|
-
"webdav.username": "Username",
|
|
29
|
-
"webdav.usernameHint": "HTTP Basic auth username (not sensitive, may be shown).",
|
|
30
|
-
"webdav.password": "Password",
|
|
31
|
-
"webdav.passwordHint": "Securely written into DSH credentials (ref {ref}); never written into sync files or logs. Leave blank to reuse the saved credential.",
|
|
32
|
-
"webdav.passwordSaved": "Credential configured",
|
|
33
|
-
"webdav.passwordPlaceholder": "Password (optional)",
|
|
34
|
-
"webdav.presetHint": "Pick a common WebDAV server to prefill the URL; templates containing <placeholders> need to be replaced with your real server/username.",
|
|
35
|
-
"github.title": "GitHub Sign-in",
|
|
36
|
-
"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.",
|
|
37
|
-
"github.login": "Sign in with GitHub",
|
|
38
|
-
"github.retry": "Sign in again",
|
|
39
|
-
"github.cancel": "Cancel",
|
|
40
|
-
"github.tokenInvalid": "GitHub sign-in is no longer valid — please sign in again.",
|
|
41
|
-
"github.userCode": "One-time code",
|
|
42
|
-
"github.openAuth": "Open GitHub authorization page",
|
|
43
|
-
"github.clientIdHint": "Requires the githubClientId plugin config (the client_id of your GitHub OAuth App).",
|
|
44
|
-
"status.title": "Sync Status",
|
|
45
|
-
"status.never": "Never synced",
|
|
46
|
-
"action.push": "Push to remote",
|
|
47
|
-
"action.pull": "Pull diff preview",
|
|
48
|
-
"action.pushing": "Pushing…",
|
|
49
|
-
"action.pulling": "Pulling…",
|
|
50
|
-
"push.title": "Push Result",
|
|
51
|
-
"pull.title": "Pull Diff Preview",
|
|
52
|
-
"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.",
|
|
53
|
-
"pull.needsReview": "Contains items that need human decisions (conflicts / secrets / dependencies / installs)",
|
|
54
|
-
"pull.empty": "Remote snapshot matches local (no changes)",
|
|
55
|
-
"change.total": "{total} change(s)",
|
|
56
|
-
"sections.title": "Synced Sections",
|
|
57
|
-
"warnings.title": "Section Warnings",
|
|
58
|
-
"syncflow.title": "One-Click Sync",
|
|
59
|
-
"syncflow.button": "One-click sync",
|
|
60
|
-
"syncflow.syncing": "Syncing…",
|
|
61
|
-
"syncflow.syncFailed": "Sync failed",
|
|
62
|
-
"syncflow.snapshotOption": "({date} · {count} sections)",
|
|
63
|
-
"syncflow.selectSnapshot": "Select snapshot",
|
|
64
|
-
"syncflow.refreshSnapshots": "Refresh snapshots",
|
|
65
|
-
"syncflow.refreshingSnapshots": "Fetching…",
|
|
66
|
-
"syncflow.latestSnapshot": "Latest snapshot",
|
|
67
|
-
"syncflow.noSnapshots": "No remote snapshots",
|
|
68
|
-
"syncflow.confirmImport": "Confirm import",
|
|
69
|
-
"syncflow.cancel": "Cancel",
|
|
70
|
-
"syncflow.adoptRemote": "Adopt remote",
|
|
71
|
-
"syncflow.adoptHint": "Check = import item; uncheck = skip",
|
|
72
|
-
"syncflow.needsReviewBadge": "Needs decision",
|
|
73
|
-
"syncflow.empty": "Remote snapshot matches local (no changes)",
|
|
74
|
-
"syncflow.diffCount": "{count} change(s)",
|
|
75
|
-
"syncflow.keepLocalAll": "Keep all current",
|
|
76
|
-
"syncflow.useRemoteAll": "Use all backup",
|
|
77
|
-
"syncflow.bulkHint": "Bulk decisions only apply to conflict items; other changes are adopted by default.",
|
|
78
|
-
"syncflow.conflictTitle": "Resolve conflict",
|
|
79
|
-
"syncflow.conflictUseLocal": "Keep current",
|
|
80
|
-
"syncflow.conflictUseRemote": "Use backup",
|
|
81
|
-
"syncflow.conflictLocalLabel": "Current",
|
|
82
|
-
"syncflow.conflictRemoteLabel": "Backup",
|
|
83
|
-
"syncflow.conflictAncestorLabel": "Common ancestor",
|
|
84
|
-
"syncflow.conflictUnresolved": "Conflict item {itemId} has no resolution yet (keep current / use backup)",
|
|
85
|
-
"syncflow.diff": "Diff",
|
|
86
|
-
"syncflow.importDone": "Imported {n} section(s)",
|
|
87
|
-
"syncflow.importFailed": "Import failed (rolled back)",
|
|
88
|
-
"syncflow.importedSections": "Written",
|
|
89
|
-
"syncflow.importWarnings": "Import warnings",
|
|
90
|
-
"syncflow.rollback": "Rollback",
|
|
91
|
-
"syncflow.rollingBack": "Rolling back…",
|
|
92
|
-
"syncflow.rollbackDone": "Rolled back",
|
|
93
|
-
"syncflow.needsRestart": "Some changes require a DSH restart to take effect",
|
|
94
|
-
"syncflow.pushPreviewTitle": "Confirm Push",
|
|
95
|
-
"syncflow.pushPreviewSections": "Sections to push",
|
|
96
|
-
"syncflow.pushConfirm": "Push",
|
|
97
|
-
"syncflow.pushing": "Pushing…",
|
|
98
|
-
"syncflow.pushFirstBaseline": "No remote snapshots yet: this push creates the first sync baseline",
|
|
99
|
-
"mode.title": "Sync Mode",
|
|
100
|
-
"mode.hint": "Choose which sections to export when pushing: Default = recommended sections in one click (Quick Export); Advanced = custom selection (Custom Export).",
|
|
101
|
-
"mode.default": "Default (Quick Export)",
|
|
102
|
-
"mode.defaultHint": "Push all recommended sections (settings, providers, plugins, prompts, skills, etc.) in one click — no configuration needed.",
|
|
103
|
-
"mode.advanced": "Advanced (Custom Export)",
|
|
104
|
-
"mode.advancedHint": "Manually select the sections to push (same as Custom Export in the Export tab); only portable sections can sync.",
|
|
105
|
-
"mode.sectionsTitle": "Sync Sections",
|
|
106
|
-
"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.",
|
|
107
|
-
"mode.atLeastOne": "Select at least one section to sync",
|
|
108
|
-
"mode.defaultCount": "Will sync {n} recommended section(s)",
|
|
109
|
-
"mode.sectionPortable": "Portable",
|
|
110
|
-
"mode.sectionRecommended": "Recommended",
|
|
111
|
-
"mode.persistHint": "The mode and section selection are saved locally: both auto sync and manual push use this configuration (persists across restarts).",
|
|
112
|
-
"mode.security": "Encryption & Secret Export (Security Options)",
|
|
113
|
-
"mode.encrypt": "Encrypt backup",
|
|
114
|
-
"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.",
|
|
115
|
-
"mode.password": "Encryption password",
|
|
116
|
-
"mode.passwordConfirm": "Confirm password",
|
|
117
|
-
"mode.passwordMismatch": "Passwords do not match",
|
|
118
|
-
"mode.passwordRequired": "Encryption requires a password",
|
|
119
|
-
"mode.includeSecrets": "Export secrets",
|
|
120
|
-
"mode.includeSecretsHint": "Write real credential values into the encrypted snapshot (auto-selects encryption when checked; secrets never enter a plaintext snapshot).",
|
|
121
|
-
"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.",
|
|
122
|
-
"mode.decryptPassword": "Decryption password (for encrypted snapshot pull/sync, optional)",
|
|
123
|
-
"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).",
|
|
124
|
-
"autosync.title": "Auto Sync",
|
|
125
|
-
"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.",
|
|
126
|
-
"autosync.enable": "Enable auto sync",
|
|
127
|
-
"autosync.interval": "Fallback poll interval",
|
|
128
|
-
"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.",
|
|
129
|
-
"autosync.interval5m": "5 min",
|
|
130
|
-
"autosync.interval15m": "15 min",
|
|
131
|
-
"autosync.interval30m": "30 min",
|
|
132
|
-
"autosync.interval60m": "60 min",
|
|
133
|
-
"autosync.interval6h": "6 hr",
|
|
134
|
-
"autosync.interval12h": "12 hr",
|
|
135
|
-
"autosync.interval24h": "24 hr",
|
|
136
|
-
"autosync.status": "Last run: {status} ({time})",
|
|
137
|
-
"autosync.statusNever": "Never run",
|
|
138
|
-
"autosync.nextRun": "Next in ~{time}",
|
|
139
|
-
"autosync.due": "Due — running soon",
|
|
140
|
-
"autosync.failCount": "{n} consecutive failure(s)",
|
|
141
|
-
"autosync.running": "Auto sync running…",
|
|
142
|
-
"autosync.success": "Success",
|
|
143
|
-
"autosync.skipped": "Skipped",
|
|
144
|
-
"autosync.failed": "Failed",
|
|
145
|
-
"autosync.partial": "Partial",
|
|
146
|
-
"history.title": "Sync History",
|
|
147
|
-
"history.empty": "No sync history yet",
|
|
148
|
-
"history.emptyHint": "Records appear here after your first push / one-click sync / auto sync.",
|
|
149
|
-
"history.colTime": "Time",
|
|
150
|
-
"history.colKind": "Kind",
|
|
151
|
-
"history.colDetail": "Detail",
|
|
152
|
-
"history.kindSnapshot": "Snapshot",
|
|
153
|
-
"history.kindAutosync": "Auto Sync",
|
|
154
|
-
"history.sectionCount": "sections",
|
|
155
|
-
"history.detail": "Detail",
|
|
156
|
-
"history.autosyncDirection": "Direction: {direction}",
|
|
157
|
-
"history.autosyncPull": "Pull",
|
|
158
|
-
"history.autosyncPush": "Push",
|
|
159
|
-
"history.autosyncBoth": "Both",
|
|
160
|
-
"history.autosyncSkipReason": "Skip reason: {reason}",
|
|
161
|
-
"history.autosyncReasonConflict": "Conflict",
|
|
162
|
-
"history.autosyncReasonNoRemote": "No remote snapshot",
|
|
163
|
-
"history.autosyncReasonNotConfigured": "No repository configured",
|
|
164
|
-
"history.autosyncReasonNetwork": "Network issue",
|
|
165
|
-
"history.autosyncConflicted": "Skipped conflict sections: {sections}",
|
|
166
|
-
"history.autosyncApplied": "Applied sections: {sections}",
|
|
167
|
-
"history.autosyncError": "Error: {error}",
|
|
168
|
-
"history.autosyncNotified": "Notified (3 consecutive failures)",
|
|
169
|
-
"history.column.snapshot": "Snapshot",
|
|
170
|
-
"history.column.autosync": "Auto Sync",
|
|
171
|
-
"history.channelGit": "GitHub",
|
|
172
|
-
"history.channelWebdav": "WebDAV",
|
|
173
|
-
"common.close": "Закрыть",
|
|
174
|
-
"common.retry": "Повторить",
|
|
175
|
-
"common.loading": "Загрузка…",
|
|
176
|
-
"syncStatus.lastSync": "Последняя синхронизация",
|
|
177
|
-
"syncStatus.sections": "Синхронизируемые разделы",
|
|
178
|
-
"syncStatus.state": "Состояние",
|
|
179
|
-
"toast.autosyncLoadFailed": "Не удалось загрузить статус автосинхронизации",
|
|
180
|
-
"toast.configSaveFailed": "Не удалось сохранить настройки канала",
|
|
181
|
-
"toast.configSaved": "Настройки канала сохранены",
|
|
182
|
-
"toast.configNothingToSave": "Введите URL канала перед сохранением",
|
|
183
|
-
"toast.selectionSaveFailed": "Не удалось сохранить настройки синхронизации",
|
|
184
|
-
"toast.pushPreviewFailed": "Не удалось сформировать предпросмотр отправки",
|
|
185
|
-
"toast.pushFailed": "Ошибка отправки",
|
|
186
|
-
"toast.pushDone": "Отправка завершена",
|
|
187
|
-
"toast.pullFailed": "Ошибка получения",
|
|
188
|
-
"toast.pullDone": "Получение завершено",
|
|
189
|
-
"toast.syncStartFailed": "Синхронизация в один клик не удалась",
|
|
190
|
-
"toast.autosyncUpdateFailed": "Не удалось обновить параметры автосинхронизации",
|
|
191
|
-
"toast.autosyncUpdated": "Параметры автосинхронизации обновлены",
|
|
192
|
-
"toast.snapshotsLoadFailed": "Не удалось загрузить удалённые снимки",
|
|
193
|
-
"toast.snapshotsRefreshed": "Список удалённых снимков обновлён",
|
|
194
|
-
"load.failed": "Не удалось загрузить статус синхронизации",
|
|
195
|
-
"history.stats.total": "Всего: {count}",
|
|
196
|
-
"history.stats.snapshots": "Снимков: {count}",
|
|
197
|
-
"history.stats.autosync": "Автосинхронизаций: {count}",
|
|
198
|
-
"history.stats.failed": "Сбоев: {count}",
|
|
199
|
-
"history.stats.skipped": "Пропущено: {count}",
|
|
200
|
-
"history.stats.summary": "Статистика истории синхронизации"
|
|
201
|
-
}
|
|
202
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"config-manager-market": {
|
|
3
|
-
"section.label": "Каталог конфигураций",
|
|
4
|
-
"section.description": "Просмотр и загрузка конфигураций сообщества (публичные Git-репозитории; загружаемый контент не является доверенным — проверяется перед импортом)",
|
|
5
|
-
"config.title": "Market Repository",
|
|
6
|
-
"config.refresh": "Refresh",
|
|
7
|
-
"config.refreshing": "Refreshing…",
|
|
8
|
-
"list.empty": "The built-in market has not loaded yet. Click \\«Refresh\\» first.",
|
|
9
|
-
"list.browse": "Browse",
|
|
10
|
-
"list.loading": "Reading market…",
|
|
11
|
-
"list.noItems": "This market has no items.",
|
|
12
|
-
"list.searchPlaceholder": "Search name / author / description…",
|
|
13
|
-
"list.categoriesAll": "All categories",
|
|
14
|
-
"list.sectionsAll": "All sections",
|
|
15
|
-
"list.sectionsUnknown": "{count} more item(s) not downloaded yet — cannot match by section",
|
|
16
|
-
"list.sourceAll": "All sources",
|
|
17
|
-
"list.sourceOfficial": "Official",
|
|
18
|
-
"list.sourcePersonal": "Community",
|
|
19
|
-
"list.sortDefault": "Default order",
|
|
20
|
-
"list.sortUpdated": "Recently updated",
|
|
21
|
-
"list.sortStars": "Most starred",
|
|
22
|
-
"list.sortName": "Name A–Z",
|
|
23
|
-
"list.stars": "⭐ {count}",
|
|
24
|
-
"list.starsHint": "Stars of the source repo (repo-level, not per item)",
|
|
25
|
-
"list.count": "{count} item(s)",
|
|
26
|
-
"list.filtered": "({count} after filter)",
|
|
27
|
-
"list.cacheCached": "cached",
|
|
28
|
-
"list.cacheFresh": "just fetched",
|
|
29
|
-
"list.cacheNone": "not cached",
|
|
30
|
-
"list.download": "View details",
|
|
31
|
-
"detail.title": "Item Details",
|
|
32
|
-
"detail.downloadedAt": "Downloaded: {time}",
|
|
33
|
-
"detail.version": "version {version}",
|
|
34
|
-
"detail.errors": "Verification errors:",
|
|
35
|
-
"detail.emptySections": "This item contains no importable sections",
|
|
36
|
-
"detail.needReview": "Needs human confirmation",
|
|
37
|
-
"detail.previewHint": "Read-only preview below (changes nothing). Confirming the import reuses the existing safe pipeline (snapshot + validation + rollback on failure).",
|
|
38
|
-
"detail.impact.willChange": "{count} item(s) will change",
|
|
39
|
-
"detail.impact.unchanged": "{count} identical",
|
|
40
|
-
"detail.impact.conflicts": "{count} conflict(s)",
|
|
41
|
-
"detail.impact.secrets": "{count} secret(s) to re-enter",
|
|
42
|
-
"detail.impact.paths": "{count} path mapping(s)",
|
|
43
|
-
"detail.impact.restart": "DSH restart required",
|
|
44
|
-
"detail.import": "Confirm import",
|
|
45
|
-
"detail.back": "Back to list",
|
|
46
|
-
"detail.approval.title": "Approve sections to import",
|
|
47
|
-
"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.",
|
|
48
|
-
"detail.approval.requiresApproval": "Requires approval",
|
|
49
|
-
"detail.approval.safe": "Importable",
|
|
50
|
-
"detail.approval.count": "{selected}/{total} section(s) approved",
|
|
51
|
-
"detail.noApproval": "No sections approved — cannot import",
|
|
52
|
-
"myconfigs.tab.browse": "Browse Market",
|
|
53
|
-
"myconfigs.tab.myconfigs": "My Configs",
|
|
54
|
-
"myconfigs.back": "Back to market",
|
|
55
|
-
"myconfigs.login.title": "GitHub sign-in",
|
|
56
|
-
"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).",
|
|
57
|
-
"myconfigs.login.checking": "Checking sign-in status…",
|
|
58
|
-
"myconfigs.login.loggedInAs": "Signed in as {login}",
|
|
59
|
-
"myconfigs.login.targetRepo": "Listing target (fixed): {repo}",
|
|
60
|
-
"myconfigs.login.repoMissing": "Config repo not created yet — it will be auto-created (public) on first upload",
|
|
61
|
-
"myconfigs.login.repoReady": "Config repo: {repo}",
|
|
62
|
-
"myconfigs.login.start": "Sign in with GitHub",
|
|
63
|
-
"myconfigs.login.relogin": "Sign in again",
|
|
64
|
-
"myconfigs.login.cancel": "Cancel sign-in",
|
|
65
|
-
"myconfigs.login.userCode": "One-time code: {code}",
|
|
66
|
-
"myconfigs.login.openAuth": "Open authorization page",
|
|
67
|
-
"myconfigs.upload.title": "Upload",
|
|
68
|
-
"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.",
|
|
69
|
-
"myconfigs.upload.select": "Choose ZIP…",
|
|
70
|
-
"myconfigs.upload.reselect": "Choose again",
|
|
71
|
-
"myconfigs.upload.selected": "Selected: {name}",
|
|
72
|
-
"myconfigs.upload.validate": "Run validation",
|
|
73
|
-
"myconfigs.upload.validating": "Validating…",
|
|
74
|
-
"myconfigs.upload.validateOk": "Validation passed: valid content, no secrets",
|
|
75
|
-
"myconfigs.upload.validateSecrets": "Contains secrets: the market channel never carries secrets — upload rejected",
|
|
76
|
-
"myconfigs.upload.validateInvalid": "Content validation failed — cannot upload",
|
|
77
|
-
"myconfigs.upload.form.title": "Item info",
|
|
78
|
-
"myconfigs.upload.form.name": "Name",
|
|
79
|
-
"myconfigs.upload.form.nameHint": "Prefilled from the zip file name; editable",
|
|
80
|
-
"myconfigs.upload.form.description": "Description (optional)",
|
|
81
|
-
"myconfigs.upload.form.categories": "Categories (optional, comma-separated)",
|
|
82
|
-
"myconfigs.upload.form.autoHint": "These fields are generated automatically:",
|
|
83
|
-
"myconfigs.upload.mode.title": "Publish mode",
|
|
84
|
-
"myconfigs.upload.mode.migrate": "Migrate (keep everything)",
|
|
85
|
-
"myconfigs.upload.mode.share": "Share (auto-exclude sensitive content)",
|
|
86
|
-
"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.",
|
|
87
|
-
"myconfigs.upload.run": "Upload",
|
|
88
|
-
"myconfigs.upload.running": "Uploading…",
|
|
89
|
-
"myconfigs.update.title": "Update config",
|
|
90
|
-
"myconfigs.update.hint": "The version will be bumped automatically (+1); item info is prefilled (name editable).",
|
|
91
|
-
"myconfigs.update.run": "Update",
|
|
92
|
-
"myconfigs.update.running": "Updating…",
|
|
93
|
-
"myconfigs.update.zipHint": "Updating needs a new config zip: pick one and it will be validated automatically, then you can update.",
|
|
94
|
-
"myconfigs.update.selectZip": "Choose new ZIP…",
|
|
95
|
-
"myconfigs.result.title": "Upload/update complete",
|
|
96
|
-
"myconfigs.result.version": "version {version}",
|
|
97
|
-
"myconfigs.result.sha256": "SHA-256: {hash}",
|
|
98
|
-
"myconfigs.result.sections": "Sections: {sections}",
|
|
99
|
-
"myconfigs.result.repo": "Config repo",
|
|
100
|
-
"myconfigs.result.openRepo": "Open repo",
|
|
101
|
-
"myconfigs.result.pr": "Listing PR #{number}",
|
|
102
|
-
"myconfigs.result.openPr": "View PR",
|
|
103
|
-
"myconfigs.result.listingPending": "Uploaded ✓ submitting listing in the background (fork + PR) — list status will update shortly",
|
|
104
|
-
"myconfigs.result.listingFailed": "Listing failed",
|
|
105
|
-
"myconfigs.result.relist": "Resubmit listing",
|
|
106
|
-
"myconfigs.list.title": "Uploaded",
|
|
107
|
-
"myconfigs.list.empty": "No configs uploaded yet",
|
|
108
|
-
"myconfigs.list.loading": "Loading…",
|
|
109
|
-
"myconfigs.list.refresh": "Refresh",
|
|
110
|
-
"myconfigs.list.summary": "{total} item(s) · {listed} listed · {pending} pending · {none} not listed",
|
|
111
|
-
"myconfigs.list.openRepo": "Open repo",
|
|
112
|
-
"myconfigs.item.update": "Update",
|
|
113
|
-
"myconfigs.item.install": "Install locally",
|
|
114
|
-
"myconfigs.item.openPr": "View listing PR",
|
|
115
|
-
"myconfigs.delete.run": "Delete",
|
|
116
|
-
"myconfigs.delete.confirm": "Confirm delete",
|
|
117
|
-
"myconfigs.delete.confirmTitle": "Delete item",
|
|
118
|
-
"myconfigs.delete.confirmText": "Delete? This permanently removes the item index and files from your config repo (not recoverable)",
|
|
119
|
-
"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)",
|
|
120
|
-
"myconfigs.delete.prClosed": "Local item deleted; its pending listing PR has been closed",
|
|
121
|
-
"disclaimer.title": "Disclaimer",
|
|
122
|
-
"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.",
|
|
123
|
-
"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.",
|
|
124
|
-
"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.",
|
|
125
|
-
"disclaimer.confirm": "I understand, continue",
|
|
126
|
-
"disclaimer.dontAsk": "Don't ask again (no more disclaimers for this action)",
|
|
127
|
-
"myconfigs.error.loadStatus": "Failed to read sign-in status",
|
|
128
|
-
"myconfigs.error.loadItems": "Failed to read uploaded items",
|
|
129
|
-
"common.cancel": "Отмена",
|
|
130
|
-
"common.close": "Закрыть",
|
|
131
|
-
"common.retry": "Повторить",
|
|
132
|
-
"common.loading": "Загрузка…",
|
|
133
|
-
"common.unknownError": "Неизвестная ошибка",
|
|
134
|
-
"config.refreshed": "Индекс витрины обновлён",
|
|
135
|
-
"list.browsed": "Витрина обновлена",
|
|
136
|
-
"import.done": "Импорт завершён: записано элементов: {count}",
|
|
137
|
-
"import.failed": "Ошибка импорта (сбоев: {count})",
|
|
138
|
-
"import.needsRestart": "Некоторые изменения требуют перезапуска DSH",
|
|
139
|
-
"detail.failed": "Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)",
|
|
140
|
-
"myconfigs.install.failed": "Ошибка скачивания — закройте этот диалог и повторите (см. уведомление справа внизу)"
|
|
141
|
-
}
|
|
142
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"config-manager-recovery": {
|
|
3
|
-
"common.cancel": "Отмена",
|
|
4
|
-
"common.retry": "Повторить",
|
|
5
|
-
"common.unknownError": "Неизвестная ошибка",
|
|
6
|
-
"view.recovery": "Recovery",
|
|
7
|
-
"recovery.banner": "Configuration changes are protected: there is an unfinished recovery item. Resolve it before continuing.",
|
|
8
|
-
"recovery.bannerAction": "Go to recovery",
|
|
9
|
-
"recovery.required": "Recovery Required",
|
|
10
|
-
"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.",
|
|
11
|
-
"recovery.rollbackRecommended": "Rollback recommended",
|
|
12
|
-
"recovery.rollbackContinue": "Continue rollback",
|
|
13
|
-
"recovery.inProgress": "Recovery in progress",
|
|
14
|
-
"recovery.verified": "Verified",
|
|
15
|
-
"recovery.partialMatch": "Partial match",
|
|
16
|
-
"recovery.mismatch": "Mismatch",
|
|
17
|
-
"recovery.verificationError": "Verification error",
|
|
18
|
-
"recovery.needsAttention": "Needs attention",
|
|
19
|
-
"recovery.manualActionRequired": "Manual action required",
|
|
20
|
-
"recovery.incident.title": "What happened",
|
|
21
|
-
"recovery.incident.operationId": "Operation ID",
|
|
22
|
-
"recovery.incident.operationType": "Operation type",
|
|
23
|
-
"recovery.incident.createdAt": "Occurred at",
|
|
24
|
-
"recovery.incident.reason": "Reason",
|
|
25
|
-
"recovery.incident.decision": "Recommendation",
|
|
26
|
-
"recovery.incident.state": "State",
|
|
27
|
-
"recovery.incident.state.recovering": "Recovering",
|
|
28
|
-
"recovery.incident.state.needsAttention": "Manual action needed",
|
|
29
|
-
"recovery.incident.state.rolledBack": "Rolled back",
|
|
30
|
-
"recovery.incident.state.recovered": "Recovered",
|
|
31
|
-
"recovery.incident.state.committed": "Completed",
|
|
32
|
-
"recovery.incident.state.unknown": "Unknown",
|
|
33
|
-
"recovery.decision.unknown": "Unknown",
|
|
34
|
-
"recovery.verify.verdict.unknown": "Unknown",
|
|
35
|
-
"recovery.currentState.title": "Current state",
|
|
36
|
-
"recovery.currentState.safeMode": "Safe mode active (config-modifying operations paused)",
|
|
37
|
-
"recovery.currentState.safeModeCleared": "Restored to normal — you can continue",
|
|
38
|
-
"recovery.currentState.hasSnapshot": "Trusted recovery snapshot available",
|
|
39
|
-
"recovery.currentState.noSnapshot": "No trusted recovery snapshot",
|
|
40
|
-
"recovery.snapshot.title": "Recovery snapshot",
|
|
41
|
-
"recovery.snapshot.id": "Snapshot ID",
|
|
42
|
-
"recovery.snapshot.createdAt": "Snapshot time",
|
|
43
|
-
"recovery.snapshot.operationType": "Snapshot operation",
|
|
44
|
-
"recovery.snapshot.verdict": "Snapshot validation",
|
|
45
|
-
"recovery.snapshot.verdict.trusted": "Trusted (bound to this operation)",
|
|
46
|
-
"recovery.snapshot.verdict.manual": "Manual / local (outside this operation)",
|
|
47
|
-
"recovery.snapshot.verdict.legacy": "Legacy snapshot (explicit confirmation required)",
|
|
48
|
-
"recovery.snapshot.verdict.wrongEnv": "Environment mismatch",
|
|
49
|
-
"recovery.snapshot.verdict.corrupt": "Corrupt",
|
|
50
|
-
"recovery.snapshot.verdict.invalid": "Invalid",
|
|
51
|
-
"recovery.snapshot.verdict.unsafe": "Unsafe path",
|
|
52
|
-
"recovery.snapshot.verdict.unknown": "Unknown",
|
|
53
|
-
"recovery.environment.title": "Environment",
|
|
54
|
-
"recovery.environment.compatible": "Environment matches",
|
|
55
|
-
"recovery.environment.incompatible": "Environment mismatch (may be from another machine / install)",
|
|
56
|
-
"recovery.preview.title": "Recovery preview",
|
|
57
|
-
"recovery.preview.hint": "Read-only preview below (zero writes). Recovery only runs after confirmation.",
|
|
58
|
-
"recovery.preview.loading": "Generating preview…",
|
|
59
|
-
"recovery.preview.empty": "No restorable actions for this operation (or all skipped).",
|
|
60
|
-
"recovery.preview.action": "Action",
|
|
61
|
-
"recovery.preview.detail": "Detail",
|
|
62
|
-
"recovery.preview.summary": "Will execute {count} action(s)",
|
|
63
|
-
"recovery.confirm.title": "Confirm recovery",
|
|
64
|
-
"recovery.confirm.message": "Recovery / rollback is a dangerous operation. Confirm execution? Current files are backed up to a safe location first.",
|
|
65
|
-
"recovery.confirm.rollbackContinue": "Continue the interrupted rollback (already-completed parts are skipped and not redone).",
|
|
66
|
-
"recovery.confirm.retry": "Retry recovery after verification failure. Confirm running it again?",
|
|
67
|
-
"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.",
|
|
68
|
-
"recovery.confirm.dismissTitle": "Abandon recovery",
|
|
69
|
-
"recovery.execute": "Execute recovery",
|
|
70
|
-
"recovery.executing": "Recovering…",
|
|
71
|
-
"recovery.retry": "Retry",
|
|
72
|
-
"recovery.retrying": "Retrying…",
|
|
73
|
-
"recovery.verify": "Verify",
|
|
74
|
-
"recovery.verifying": "Verifying…",
|
|
75
|
-
"recovery.dismiss": "Abandon recovery",
|
|
76
|
-
"recovery.dismissing": "Abandoning…",
|
|
77
|
-
"recovery.continue": "Continue",
|
|
78
|
-
"recovery.verify.title": "Verification result",
|
|
79
|
-
"recovery.verify.details": "Check details",
|
|
80
|
-
"recovery.verify.manualHints": "Manual action needed",
|
|
81
|
-
"recovery.verify.verdict.match": "Verified: target state matches the trusted snapshot",
|
|
82
|
-
"recovery.verify.verdict.partial": "Verified (partial match): core state matches, but some items could not be auto-verified",
|
|
83
|
-
"recovery.verify.verdict.mismatch": "Verification failed: target state does not match the trusted snapshot; recovery incomplete",
|
|
84
|
-
"recovery.verify.verdict.error": "Verification error: could not reliably complete verification; recovery incomplete",
|
|
85
|
-
"recovery.verify.terminal.rolledBack": "Rolled back",
|
|
86
|
-
"recovery.verify.terminal.recovered": "Recovered",
|
|
87
|
-
"recovery.verify.terminal.needsAttention": "Needs attention",
|
|
88
|
-
"recovery.completed": "Recovery complete",
|
|
89
|
-
"recovery.completed.rolledBack": "Rolled back and verified",
|
|
90
|
-
"recovery.completed.recovered": "Recovered and verified",
|
|
91
|
-
"recovery.needsAttention.title": "Needs attention",
|
|
92
|
-
"recovery.needsAttention.hint": "Recovery could not complete or verification failed. Review the reason, then retry or abandon.",
|
|
93
|
-
"recovery.empty": "No recovery items to handle.",
|
|
94
|
-
"recovery.loading": "Checking recovery status…",
|
|
95
|
-
"recovery.error": "Failed to load recovery status",
|
|
96
|
-
"recovery.actionError": "Operation failed",
|
|
97
|
-
"recovery.running": "Recovery task in progress",
|
|
98
|
-
"recovery.runningHint": "Recovery / rollback is running; keep this page open.",
|
|
99
|
-
"section.label": "Аварийное восстановление",
|
|
100
|
-
"section.description": "Восстановление профилей и откат к предыдущим снапшотам"
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"config-manager-history": {
|
|
3
|
-
"view.history": "История миграций",
|
|
4
|
-
"history.title": "История миграций и аудита",
|
|
5
|
-
"history.subtitle": "Единый журнал аудита всех деструктивных и миграционных операций",
|
|
6
|
-
"history.empty": "No migration records yet. Executing an import, restore, profile switch, sync apply, or scheduled backup will create audit entries here.",
|
|
7
|
-
"history.loading": "Loading migration history…",
|
|
8
|
-
"history.corruptedBanner": "Detected unreadable or possibly tampered history entries",
|
|
9
|
-
"history.corruptedCount": "{count} entry(s) were skipped (excluded from export)",
|
|
10
|
-
"history.stats.total": "Total",
|
|
11
|
-
"history.stats.success": "Success",
|
|
12
|
-
"history.stats.failed": "Failed",
|
|
13
|
-
"history.stats.skipped": "Skipped",
|
|
14
|
-
"history.filter.kind": "Operation",
|
|
15
|
-
"history.filter.result": "Result",
|
|
16
|
-
"history.filter.recent": "Time range",
|
|
17
|
-
"history.filter.recent.all": "All",
|
|
18
|
-
"history.filter.recent.50": "Latest 50",
|
|
19
|
-
"history.filter.recent.200": "Latest 200",
|
|
20
|
-
"history.filter.sections": "Sections",
|
|
21
|
-
"history.filter.title": "Filter & export",
|
|
22
|
-
"history.search.placeholder": "Search summary / error / section…",
|
|
23
|
-
"history.export.json": "Export JSON",
|
|
24
|
-
"history.export.markdown": "Export Markdown",
|
|
25
|
-
"history.exported": "Exported",
|
|
26
|
-
"history.exporting": "Exporting…",
|
|
27
|
-
"history.exportError": "Export failed",
|
|
28
|
-
"history.loadError": "Failed to load migration history",
|
|
29
|
-
"history.reload": "Reload",
|
|
30
|
-
"history.table.time": "Time",
|
|
31
|
-
"history.table.kind": "Operation",
|
|
32
|
-
"history.table.result": "Result",
|
|
33
|
-
"history.table.sections": "Sections",
|
|
34
|
-
"history.table.summary": "Summary",
|
|
35
|
-
"history.updatedAt": "Updated",
|
|
36
|
-
"history.refresh": "Refresh",
|
|
37
|
-
"history.kind.import": "Import",
|
|
38
|
-
"history.kind.restore": "Snapshot restore",
|
|
39
|
-
"history.kind.rollback": "Rollback",
|
|
40
|
-
"history.kind.profile-switch": "Profile switch",
|
|
41
|
-
"history.kind.profile-delete": "Profile delete",
|
|
42
|
-
"history.kind.profile-rename": "Profile rename",
|
|
43
|
-
"history.kind.profile-save": "Profile save",
|
|
44
|
-
"history.kind.profile-import": "Profile import",
|
|
45
|
-
"history.kind.sync-apply": "Sync apply",
|
|
46
|
-
"history.kind.autosync": "Autosync",
|
|
47
|
-
"history.kind.recovery": "Recovery/rollback",
|
|
48
|
-
"history.kind.backup": "Scheduled backup",
|
|
49
|
-
"history.kind.snapshot-delete": "Snapshot delete",
|
|
50
|
-
"history.kind.snapshot-prune": "Snapshot retention",
|
|
51
|
-
"history.result.success": "Success",
|
|
52
|
-
"history.result.failed": "Failed",
|
|
53
|
-
"history.result.skipped": "Skipped"
|
|
54
|
-
}
|
|
55
|
-
}
|