@goodandready/dsh-russian-lang 0.2.0 → 0.2.2

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.
@@ -0,0 +1,308 @@
1
+ {
2
+ "config-manager": {
3
+ "section.label": "Резервное копирование и миграция",
4
+ "section.description": "Экспорт / импорт / миграция конфигурации DSH (секреты исключены; опционально шифрование архива)",
5
+ "view.transfer": "Экспорт и импорт",
6
+ "view.export": "Export",
7
+ "view.import": "Import",
8
+ "view.snapshots": "Backup & Snapshots",
9
+ "view.sync": "Remote Sync",
10
+ "view.market": "Marketplace",
11
+ "view.about": "About",
12
+ "view.more": "More",
13
+ "view.profiles": "Управление профилями",
14
+ "common.close": "Закрыть",
15
+ "common.cancel": "Отмена",
16
+ "common.back": "Назад",
17
+ "common.next": "Далее",
18
+ "common.done": "Готово",
19
+ "common.retry": "Повторить",
20
+ "common.confirm": "Confirm",
21
+ "common.loading": "Загрузка…",
22
+ "common.unknownError": "Неизвестная ошибка",
23
+ "status.ready": "Config Manager ready (plugin {version} · DSH {dsh} · {platform})",
24
+ "status.unavailable": "Config Manager service unavailable — verify the plugin is mounted.",
25
+ "export.mode.quick": "Quick Export",
26
+ "export.mode.quickHint": "One-click export of recommended sections (portable, no device-specific data) for routine backups.",
27
+ "export.mode.custom": "Custom Export",
28
+ "export.mode.customHint": "Select sections per group.",
29
+ "export.security": "Security options",
30
+ "export.encrypt": "Encrypt backup",
31
+ "export.encryptHint": "Encrypt the entire backup file with a password (AES-256-GCM). The password is used once and never written into the backup or any config file; it is required to unlock the backup on import.",
32
+ "export.password": "Backup encryption password",
33
+ "export.passwordConfirm": "Confirm password",
34
+ "export.passwordMismatch": "Passwords do not match",
35
+ "export.passwordRequired": "An encryption password is required when encrypting the backup",
36
+ "export.includeSecrets": "Export secrets",
37
+ "export.includeSecretsHint": "Write the real secrets (credential values) into the backup. Secrets must be stored encrypted: checking this also checks «Encrypt backup»; unchecking «Encrypt backup» unchecks this.",
38
+ "export.run": "Start Export",
39
+ "export.preview": "Preview export contents",
40
+ "export.previewing": "Counting…",
41
+ "export.previewSummary": "Will package {sections} section(s), approx. {size} (no secrets)",
42
+ "export.previewSkipped": "{count} section(s) failed to export and were skipped",
43
+ "export.running": "Exporting…",
44
+ "export.download": "Download backup file",
45
+ "export.saved": "Saved to downloads: {name}",
46
+ "export.selectionWarnings": "Device-specific sections may not apply on another machine:",
47
+ "export.group.unknown": "Other",
48
+ "export.included": "Included",
49
+ "export.excluded": "Excluded",
50
+ "export.naming": "File name & note (optional)",
51
+ "export.fileName": "Custom file name",
52
+ "export.fileNameHint": "Leave empty to auto-name (dsh-config-<date>.zip); no need to type .zip — it is appended automatically. Letters, digits, spaces, — _ . only.",
53
+ "export.fileNameInvalid": "Invalid file name: letters, digits, spaces, — _ . only, no path separators.",
54
+ "export.note": "Note",
55
+ "export.notePlaceholder": "e.g. Full backup before migration / 2026-08 archive",
56
+ "export.noteHint": "The note is shown in the local backup list (and travels with the config backup) so you can tell exports apart.",
57
+ "import.select.title": "Select Backup File",
58
+ "import.select.hint": "Pick a dsh-config-*.zip backup exported from DSH to begin. Analysis is read-only and changes nothing.",
59
+ "import.select.browse": "Choose ZIP file",
60
+ "import.select.reselect": "Reselect",
61
+ "import.select.cancel": "Cancel selection",
62
+ "import.select.file": "Selected: {name}",
63
+ "import.analyzing": "Analyzing backup…",
64
+ "import.compatibility.title": "Compatibility",
65
+ "import.compatibility.score": "Compatibility score: {score}",
66
+ "import.compatibility.ok": "The backup can be imported",
67
+ "import.compatibility.fail": "Backup analysis failed: {reason}",
68
+ "import.preview.title": "Import Preview",
69
+ "import.preview.willChange": "{count} item(s) will change",
70
+ "import.preview.unchanged": "{count} item(s) already identical (skipped)",
71
+ "import.preview.settings": "{count} settings update(s)",
72
+ "import.preview.plugins": "{count} plugin(s) to install",
73
+ "import.preview.mcp": "{count} MCP server(s) added",
74
+ "import.preview.prompts": "{count} prompt(s)",
75
+ "import.preview.paths": "{count} path mapping(s) needed",
76
+ "import.preview.secrets": "{count} secret(s) to re-enter",
77
+ "import.preview.conflicts": "{count} conflict(s)",
78
+ "import.preview.restart": "A DSH restart is required after import",
79
+ "import.confirm.execute": "Confirm Import",
80
+ "import.confirm.warning": "Import modifies the current DSH configuration; a safety snapshot is created first and everything rolls back on failure.",
81
+ "import.confirm.encrypted": "The backup password will decrypt and restore {count} credential(s).",
82
+ "import.rollbackOnError": "Roll back everything on failure (recommended)",
83
+ "import.importing": "Importing… (installing many plugins may take a few minutes; keep this page open)",
84
+ "import.log.title": "Import Log",
85
+ "import.log.empty": "Waiting for command output…",
86
+ "import.log.newOutput": "↓ New output",
87
+ "import.skipCurrent": "Skip current plugin",
88
+ "import.skipPending": "Skipping… the rest of the import continues",
89
+ "import.retrySkipped": "Retry failed/skipped items ({count})",
90
+ "import.secrets.title": "Re-enter Secrets",
91
+ "import.secrets.hint": "These credentials were not exported with the backup (security by design). Enter them manually to use them here; leave blank to skip.",
92
+ "import.secrets.optional": "(optional)",
93
+ "import.secrets.required": "(required)",
94
+ "import.decrypt.badge": "encrypted backup",
95
+ "import.decryptArchive.title": "Unlock Encrypted Backup",
96
+ "import.decryptArchive.hint": "This backup is fully encrypted (the whole file is password-protected). Enter the password set at export time to decrypt and continue — encrypted credentials inside are restored with the same password, so this is the only password prompt. It is used once and never written to disk.",
97
+ "import.decryptArchive.passwordPlaceholder": "Enter backup encryption password",
98
+ "import.decryptArchive.unlock": "Unlock & Continue",
99
+ "import.decryptArchive.unlocking": "Unlocking…",
100
+ "import.decrypt.previewHint": "Encrypted backup: credentials are restored automatically by the unlock password — no further password prompt.",
101
+ "import.conflicts.title": "Resolve Conflicts",
102
+ "import.conflicts.hint": "These items already exist on this machine and differ from the backup. Decide per item.",
103
+ "import.conflicts.keepCurrent": "Keep current",
104
+ "import.conflicts.useImported": "Use backup",
105
+ "import.conflicts.review": "Decide later",
106
+ "import.conflicts.unresolved": "{count} item(s) unresolved",
107
+ "import.conflicts.keepCurrentAll": "Keep all current",
108
+ "import.conflicts.useImportedAll": "Use all backup",
109
+ "import.paths.title": "Path Mapping",
110
+ "import.paths.hint": "Absolute paths in the backup may not exist on this machine. Map each path to a new location (leave blank to skip).",
111
+ "import.paths.old": "Original path",
112
+ "import.paths.new": "New path",
113
+ "import.paths.unresolved": "{count} path(s) unmapped",
114
+ "snapshots.title": "Backup & Snapshots",
115
+ "snapshots.hint": "Export backups = portable ZIPs (download / one-click import / delete, incl. scheduled full backups). Snapshot restore = back to the pre-import state: whole-file restore of settings/patch, uninstall plugins added during import, compensate modified files; current files are backed up to a safe location first.",
116
+ "snapshots.subTab.restore": "Snapshot Restore",
117
+ "snapshots.subTab.files": "Backup Files",
118
+ "snapshots.subTab.recovery": "Recovery",
119
+ "snapshots.empty": "No snapshots yet. A safety snapshot is created automatically on import.",
120
+ "snapshots.loading": "Loading snapshots…",
121
+ "snapshots.selectHint": "Select a snapshot to preview its restore plan (read-only preview, changes nothing):",
122
+ "snapshots.createdAt": "Created",
123
+ "snapshots.sourceZip": "Source",
124
+ "snapshots.status": "Status",
125
+ "snapshots.entries": "Entries",
126
+ "snapshots.plugins": "Plugins",
127
+ "snapshots.actions": "Actions",
128
+ "snapshots.retentionHint": "Up to {count} snapshots are kept automatically (oldest pruned); pinned snapshots are exempt from auto-pruning and can only be deleted manually.",
129
+ "snapshots.pin": "Pin",
130
+ "snapshots.unpin": "Unpin",
131
+ "snapshots.delete": "Delete",
132
+ "snapshots.deleteConfirmTitle": "Delete Snapshot",
133
+ "snapshots.deleteConfirm": "Delete the snapshot created at {time}? This pre-import rollback point will be permanently removed and cannot be recovered.",
134
+ "snapshots.status.pending": "Pending",
135
+ "snapshots.status.done": "Done",
136
+ "snapshots.status.rolled-back": "Rolled back",
137
+ "snapshots.status.unknown": "Unknown",
138
+ "snapshots.planTitle": "Restore Plan Preview",
139
+ "snapshots.viewPlan": "View restore plan",
140
+ "snapshots.noActions": "No restorable actions for this snapshot (or all skipped).",
141
+ "snapshots.execute": "Restore now",
142
+ "snapshots.executing": "Restoring…",
143
+ "snapshots.confirmTitle": "Confirm restore",
144
+ "snapshots.confirmRestore": "Confirm restore? Current files are first backed up to a safe location, then plugins added during the import are removed.",
145
+ "snapshots.reportTitle": "Restore Report",
146
+ "snapshots.restored": "Restored",
147
+ "snapshots.removedPlugins": "Removed plugins",
148
+ "snapshots.manualHints": "Manual action needed",
149
+ "snapshots.failed": "Failed",
150
+ "snapshots.skipped": "Skipped",
151
+ "snapshots.kind.hostFileRestore": "Restore whole file",
152
+ "snapshots.kind.hostFileRemove": "Remove whole file",
153
+ "snapshots.kind.pluginRemove": "Uninstall plugin",
154
+ "snapshots.kind.fileRestore": "Restore file",
155
+ "snapshots.kind.fileRemove": "Remove file",
156
+ "snapshots.kind.credentialHint": "Manual hint",
157
+ "snapshots.kind.skip": "Skip",
158
+ "snapshots.kind.unknown": "Unknown",
159
+ "snapshots.summary": "{hostFileRestores} whole-file restore · {hostFileRemoves} whole-file remove · {pluginRemoves} plugin uninstall · {fileRestores} file restore · {fileRemoves} file remove · {credentialHints} credential hints · {skips} skip",
160
+ "backupSchedule.title": "Scheduled Full Backups",
161
+ "backupSchedule.hint": "Automatically export a full backup ZIP in the background on a fixed cadence (secrets are never included, never encrypted — use manual export for encryption). Config lives in sync/backup-schedule.json and migrates with the self section.",
162
+ "backupSchedule.enabled": "Enable scheduled backups",
163
+ "backupSchedule.enabledHint": "When on, DSH backs up automatically on the cadence below; one run fires on every startup (skipped if less than 1h since the last run).",
164
+ "backupSchedule.interval": "Backup interval",
165
+ "backupSchedule.interval.6h": "Every 6 hours",
166
+ "backupSchedule.interval.12h": "Every 12 hours",
167
+ "backupSchedule.interval.24h": "Every 24 hours",
168
+ "backupSchedule.interval.7d": "Every 7 days",
169
+ "backupSchedule.interval.custom": "Custom (weekly at a fixed time)",
170
+ "backupSchedule.customHint": "Runs a full backup once a week at the selected weekday and time (missed triggers are not backfilled)",
171
+ "backupSchedule.weekday.sunday": "Sunday",
172
+ "backupSchedule.weekday.monday": "Monday",
173
+ "backupSchedule.weekday.tuesday": "Tuesday",
174
+ "backupSchedule.weekday.wednesday": "Wednesday",
175
+ "backupSchedule.weekday.thursday": "Thursday",
176
+ "backupSchedule.weekday.friday": "Friday",
177
+ "backupSchedule.weekday.saturday": "Saturday",
178
+ "backupSchedule.save": "Save settings",
179
+ "backupSchedule.saved": "Settings saved",
180
+ "backupSchedule.runNow": "Back up now",
181
+ "backupSchedule.running": "Backing up…",
182
+ "backupSchedule.lastRun": "Last run",
183
+ "backupSchedule.never": "Never run",
184
+ "backupSchedule.status.success": "Success",
185
+ "backupSchedule.status.skipped": "Skipped",
186
+ "backupSchedule.status.failed": "Failed",
187
+ "backupSchedule.consecutiveFailures": "Scheduled backups failed {count} time(s) in a row — check the configuration (disk space / permissions / section export errors)",
188
+ "backupSchedule.loading": "Loading scheduled backup settings…",
189
+ "backupSchedule.error": "Failed to load scheduled backup settings",
190
+ "backupFiles.title": "Backup Files",
191
+ "backupFiles.hint": "All export artifacts (manual exports and scheduled backups) are managed here: download to your machine, import to restore, or delete. Scheduled backups auto-keep the latest 10.",
192
+ "backupFiles.empty": "No backup files yet. They appear here after a manual export or once scheduled backups are enabled.",
193
+ "backupFiles.loading": "Loading backup files…",
194
+ "backupFiles.error": "Failed to load backup files",
195
+ "backupFiles.source.auto": "Scheduled",
196
+ "backupFiles.source.manual": "Manual",
197
+ "backupFiles.download": "Download",
198
+ "backupFiles.import": "Import",
199
+ "backupFiles.delete": "Delete",
200
+ "backupFiles.deleteConfirmTitle": "Delete backup file",
201
+ "backupFiles.deleteConfirm": "Delete backup file \\«{name}\\»? This cannot be undone.",
202
+ "backupFiles.searchPlaceholder": "Search by file name or note…",
203
+ "backupFiles.searchEmpty": "No matching backup files",
204
+ "backupFiles.inspect": "Inspect / Compare",
205
+ "backupFiles.inspectLoading": "Analyzing backup contents…",
206
+ "backupFiles.inspectEmpty": "This backup could not be analyzed (corrupt or unsupported format)",
207
+ "backupFiles.inspectSections": "Sections included",
208
+ "backupFiles.inspectDiff": "Diff against this backup (read-only preview)",
209
+ "backupFiles.inspectItems": "Change details",
210
+ "backupFiles.inspectGroup.conflicts": "Conflicts (need decision)",
211
+ "backupFiles.inspectGroup.changes": "Changes (will apply)",
212
+ "backupFiles.inspectGroup.paths": "Path mappings (need handling)",
213
+ "backupFiles.inspectGroup.skipped": "Identical (nothing to do)",
214
+ "backupFiles.inspectGroup.others": "Others",
215
+ "report.export.title": "Export Complete",
216
+ "report.import.title": "Import Result",
217
+ "report.rollback.title": "Rollback Report",
218
+ "report.action.fixIssues": "View failures",
219
+ "report.action.viewDetails": "View details",
220
+ "report.action.done": "Done",
221
+ "report.needsRestart": "Plugin / MCP changes take effect after restarting DSH.",
222
+ "error.title": "Operation failed",
223
+ "error.hint": "Error messages are auto-redacted and never leak secrets.",
224
+ "starPrompt.title": "Enjoying Config Manager?",
225
+ "starPrompt.body": "If you find this plugin useful, please give it a ⭐ on GitHub — your support keeps it maintained!",
226
+ "starPrompt.star": "Star on GitHub",
227
+ "starPrompt.dismiss": "Don't ask again",
228
+ "about.title": "About DSH Config Manager",
229
+ "about.subtitle": "Plugin info, author and feedback links",
230
+ "about.official": "Official",
231
+ "about.version": "Version {version}",
232
+ "about.dshVersion": "DSH {version}",
233
+ "about.links": "Links",
234
+ "about.star": "⭐ Star on GitHub",
235
+ "about.repo": "GitHub Repository",
236
+ "about.docs": "Documentation",
237
+ "about.issues": "Issues",
238
+ "about.authorLabel": "Author",
239
+ "about.loading": "Loading version info…",
240
+ "about.retryStatus": "Retry",
241
+ "about.releaseNotes": "Release Notes",
242
+ "about.releaseNotes.title": "Release Notes",
243
+ "about.releaseNotes.loading": "Loading release notes…",
244
+ "about.releaseNotes.loadingMore": "Loading more releases…",
245
+ "about.releaseNotes.empty": "No releases found.",
246
+ "about.releaseNotes.error": "Failed to load release notes. Please check your network connection or try again later.",
247
+ "about.releaseNotes.retry": "Retry",
248
+ "about.releaseNotes.viewOnGithub": "View all releases on GitHub",
249
+ "about.releaseNotes.viewSingleOnGithub": "View on GitHub",
250
+ "about.releaseNotes.allLoaded": "All releases loaded",
251
+ "about.releaseNotes.prerelease": "Pre-release",
252
+ "about.releaseNotes.latest": "Latest",
253
+ "about.releaseNotes.noBody": "No description provided for this release.",
254
+ "about.releaseNotes.confirm": "Confirm",
255
+ "about.releaseNotes.neverShow": "Don't show again",
256
+ "about.cli.title": "CLI Rescue Tool",
257
+ "about.cli.hint": "The GUI lives inside DSH — when DSH cannot start, the separately installed CLI (dsh-config-manager) is your first rescue tool: list snapshots / offline restore / one-click DSH reinstall, no DSH runtime needed. Install once and use it on any machine:",
258
+ "about.cli.docs": "CLI documentation",
259
+ "profiles.title": "Profiles",
260
+ "profiles.subtitle": "Save your current DSH configuration as multiple switchable profiles (Work / Personal / …); switching includes preview + auto snapshot + rollback on failure.",
261
+ "profiles.save.title": "Save current config as a profile",
262
+ "profiles.save.hint": "Pick a name and save: contents reuse the export pipeline (no secrets), file sections (skills / presets) are embedded too.",
263
+ "profiles.save.placeholder": "e.g. Work / Personal / Minimal",
264
+ "profiles.save.action": "Save profile",
265
+ "profiles.save.saving": "Saving…",
266
+ "profiles.nameInvalid": "Invalid profile name: letters, digits and common characters only; no path separators (/ \\\\) or \\«..\\»",
267
+ "profiles.name": "Name",
268
+ "profiles.sections": "Sections",
269
+ "profiles.updatedAt": "Updated",
270
+ "profiles.loading": "Loading profiles…",
271
+ "profiles.empty": "No profiles yet. Save the current configuration to get started.",
272
+ "profiles.switch": "Switch",
273
+ "profiles.previewHint": "Click to preview the switch (read-only)",
274
+ "profiles.rename": "Rename",
275
+ "profiles.delete": "Delete",
276
+ "profiles.renameTitle": "Rename profile",
277
+ "profiles.renameMessage": "Rename profile \\«{name}\\» to:",
278
+ "profiles.deleteTitle": "Delete profile",
279
+ "profiles.deleteMessage": "Delete profile \\«{name}\\»? This group of configuration snapshots will be permanently removed.",
280
+ "profiles.import.title": "Import profile",
281
+ "profiles.import.hint": "Import an exported profile.json (from this or another machine; file sections are embedded).",
282
+ "profiles.import.choose": "Choose JSON file",
283
+ "profiles.switchPreviewTitle": "Switch preview: {name}",
284
+ "profiles.previewing": "Analyzing switch plan…",
285
+ "profiles.previewSummary": "Switch impact",
286
+ "profiles.previewWillChange": "{count} item(s) will change",
287
+ "profiles.previewUnchanged": "{count} identical",
288
+ "profiles.previewConflicts": "{count} conflict(s)",
289
+ "profiles.previewSecrets": "{count} secret(s) to re-enter",
290
+ "profiles.previewRestart": "DSH restart required",
291
+ "profiles.previewNote": "Read-only preview above (zero writes). After confirmation a snapshot is created automatically and everything rolls back on failure.",
292
+ "profiles.previewSections": "Sections in this profile",
293
+ "profiles.previewItems": "Change details",
294
+ "profiles.switchConfirm": "Confirm switch",
295
+ "profiles.switching": "Switching… (auto snapshot + staged apply)",
296
+ "profiles.switchDone": "Switch complete: {count} item(s) applied",
297
+ "profiles.switchFailed": "Switch failed (some items not applied)",
298
+ "profiles.switchRolledBack": "Switch failed — fully rolled back",
299
+ "nextSteps.title": "Next steps",
300
+ "nextSteps.done": "All done — nothing else to handle",
301
+ "nextSteps.restart.title": "Restart DSH to apply ({count})",
302
+ "nextSteps.restart.hint": "These changes only take effect after restarting DSH:",
303
+ "nextSteps.secrets.title": "Re-enter credentials ({count})",
304
+ "nextSteps.secrets.hint": "These credentials were not exported with the backup; re-enter them on this machine:",
305
+ "nextSteps.unresolved.title": "Failed / skipped ({count})",
306
+ "nextSteps.unresolved.hint": "These items were not applied; you can retry them from the result page:"
307
+ }
308
+ }
@@ -0,0 +1,177 @@
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
+ }
177
+ }
@@ -0,0 +1,135 @@
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
+ }
135
+ }