dsh-oc-tui 0.2.0-pre.13 → 0.2.0
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 +13 -6
- package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +39 -6
- package/dsh-plugin.json +5 -1
- package/lib/diagnostics.js +120 -0
- package/lib/git-branch.js +157 -0
- package/lib/image.js +5 -1
- package/lib/index.js +904 -19
- package/lib/locales/ar.js +637 -560
- package/lib/locales/de.js +606 -529
- package/lib/locales/en.js +79 -0
- package/lib/locales/es.js +606 -529
- package/lib/locales/fr.js +606 -529
- package/lib/locales/id.js +608 -531
- package/lib/locales/it.js +606 -529
- package/lib/locales/ja.js +606 -529
- package/lib/locales/ko.js +606 -529
- package/lib/locales/nl.js +606 -529
- package/lib/locales/pl.js +620 -543
- package/lib/locales/pt-BR.js +606 -529
- package/lib/locales/ru.js +620 -543
- package/lib/locales/tr.js +606 -529
- package/lib/locales/vi.js +608 -531
- package/lib/locales/zh-CN.js +607 -530
- package/lib/locales/zh-TW.js +607 -530
- package/lib/mermaid-ascii.js +20 -1
- package/lib/mermaid.js +39 -20
- package/lib/providers.js +712 -0
- package/lib/splash-opencode.js +27 -9
- package/lib/std/command-list.js +2 -1
- package/lib/term.js +13 -1
- package/lib/ui.js +326 -20
- package/lib/util.js +49 -0
- package/lib/web-settings.js +182 -142
- package/package.json +5 -4
package/lib/locales/de.js
CHANGED
|
@@ -1,530 +1,607 @@
|
|
|
1
|
-
// German catalog. Keys, order and placeholders mirror `en.js`, the source.
|
|
2
|
-
export default {
|
|
3
|
-
// ---- shared chrome ------------------------------------------------------
|
|
4
|
-
'common.selectBack': 'Enter auswählen · Esc zurück',
|
|
5
|
-
'common.selectConfirmBack': '↑/↓ auswählen · Enter bestätigen · Esc zurück',
|
|
6
|
-
'common.selectContinueExit': '↑/↓ auswählen · Enter weiter · Esc beenden',
|
|
7
|
-
'common.escBack': 'Esc zurück',
|
|
8
|
-
'common.escClose': 'Esc schließen',
|
|
9
|
-
'common.escCancel': 'Esc abbrechen',
|
|
10
|
-
'common.working': 'Läuft…',
|
|
11
|
-
'common.pleaseWait': 'bitte warten',
|
|
12
|
-
'common.on': 'an',
|
|
13
|
-
'common.off': 'aus',
|
|
14
|
-
'common.unavailable': 'nicht verfügbar',
|
|
15
|
-
'common.selected': 'ausgewählt',
|
|
16
|
-
'common.default': 'Standard',
|
|
17
|
-
'common.system': 'System',
|
|
18
|
-
'common.installed': '(installiert)',
|
|
19
|
-
'common.more': '… {count} weitere',
|
|
20
|
-
'common.moreLines': '… {count} weitere Zeilen',
|
|
21
|
-
'common.clickExpand': ' · klicken zum Aufklappen',
|
|
22
|
-
'common.clickCollapse': ' · klicken zum Zuklappen',
|
|
23
|
-
'common.unknown': 'unbekannt',
|
|
24
|
-
'common.emptyMessage': '[leere Nachricht]',
|
|
25
|
-
'value.queue': 'Warteschlange',
|
|
26
|
-
'value.steer': 'Steuern',
|
|
27
|
-
'value.auto': 'automatisch',
|
|
28
|
-
'value.local': 'lokal',
|
|
29
|
-
'value.textOnly': 'nur Text',
|
|
30
|
-
'value.textImage': 'Text + Bild',
|
|
1
|
+
// German catalog. Keys, order and placeholders mirror `en.js`, the source.
|
|
2
|
+
export default {
|
|
3
|
+
// ---- shared chrome ------------------------------------------------------
|
|
4
|
+
'common.selectBack': 'Enter auswählen · Esc zurück',
|
|
5
|
+
'common.selectConfirmBack': '↑/↓ auswählen · Enter bestätigen · Esc zurück',
|
|
6
|
+
'common.selectContinueExit': '↑/↓ auswählen · Enter weiter · Esc beenden',
|
|
7
|
+
'common.escBack': 'Esc zurück',
|
|
8
|
+
'common.escClose': 'Esc schließen',
|
|
9
|
+
'common.escCancel': 'Esc abbrechen',
|
|
10
|
+
'common.working': 'Läuft…',
|
|
11
|
+
'common.pleaseWait': 'bitte warten',
|
|
12
|
+
'common.on': 'an',
|
|
13
|
+
'common.off': 'aus',
|
|
14
|
+
'common.unavailable': 'nicht verfügbar',
|
|
15
|
+
'common.selected': 'ausgewählt',
|
|
16
|
+
'common.default': 'Standard',
|
|
17
|
+
'common.system': 'System',
|
|
18
|
+
'common.installed': '(installiert)',
|
|
19
|
+
'common.more': '… {count} weitere',
|
|
20
|
+
'common.moreLines': '… {count} weitere Zeilen',
|
|
21
|
+
'common.clickExpand': ' · klicken zum Aufklappen',
|
|
22
|
+
'common.clickCollapse': ' · klicken zum Zuklappen',
|
|
23
|
+
'common.unknown': 'unbekannt',
|
|
24
|
+
'common.emptyMessage': '[leere Nachricht]',
|
|
25
|
+
'value.queue': 'Warteschlange',
|
|
26
|
+
'value.steer': 'Steuern',
|
|
27
|
+
'value.auto': 'automatisch',
|
|
28
|
+
'value.local': 'lokal',
|
|
29
|
+
'value.textOnly': 'nur Text',
|
|
30
|
+
'value.textImage': 'Text + Bild',
|
|
31
|
+
|
|
32
|
+
// ---- title screen -------------------------------------------------------
|
|
33
|
+
'splash.hint': 'Einfach fragen... "Tests reparieren"',
|
|
34
|
+
'splash.shortcutSettings': 'Einstellungen',
|
|
35
|
+
'splash.shortcutThinking': 'Denken',
|
|
36
|
+
'splash.shortcutBranches': 'Branches',
|
|
37
|
+
|
|
38
|
+
// ---- header / sidebar / status row -------------------------------------
|
|
39
|
+
// ---- command-line help (dsh --profile tui --help) -----------------------
|
|
40
|
+
'startup.description': 'Startet die Terminal-Oberfläche von DeepSeek Harness.',
|
|
41
|
+
'startup.helpOption': 'diese Hilfe anzeigen',
|
|
42
|
+
'startup.resume': 'eine vorhandene gespeicherte Sitzung per id fortsetzen',
|
|
43
|
+
'startup.model': 'Standard-Modell-id für neue Sitzungen',
|
|
44
|
+
'startup.provider': 'Standard-Provider-Route für neue Sitzungen',
|
|
45
|
+
'startup.sidebar': 'die Sitzungs-Seitenleiste anzeigen (Standard)',
|
|
46
|
+
'startup.noSidebar': 'ohne Seitenleiste starten',
|
|
47
|
+
'startup.examples': 'Beispiele:',
|
|
48
|
+
'startup.exampleFresh': 'eine neue Sitzung starten',
|
|
49
|
+
'startup.exampleResume': 'eine gespeicherte Sitzung fortsetzen',
|
|
50
|
+
|
|
51
|
+
'header.workspace': 'ARBEITSBEREICH',
|
|
52
|
+
'sidebar.sessions': 'SITZUNGEN',
|
|
53
|
+
'sidebar.recent': 'LETZTE',
|
|
54
|
+
'sidebar.newSession': '+ Neue Sitzung',
|
|
55
|
+
'status.model': 'Modell',
|
|
56
|
+
'status.draftTokens': '{count} Entw.-Tok',
|
|
57
|
+
'status.ctrlP': 'ctrl+p Befehle',
|
|
58
|
+
'status.interrupt': 'Abbruch: ctrl+c',
|
|
59
|
+
|
|
60
|
+
// ---- composer command hints --------------------------------------------
|
|
61
|
+
'hint.help': 'Hilfe anzeigen',
|
|
62
|
+
'hint.settings': 'Einstellungen öffnen',
|
|
63
|
+
'hint.new': 'neue Sitzung',
|
|
64
|
+
'hint.resume': 'Sitzung fortsetzen',
|
|
65
|
+
'hint.model': 'Modell wählen',
|
|
66
|
+
'hint.provider': 'Anbieter wählen',
|
|
67
|
+
'hint.rewind': 'Rückspulen',
|
|
68
|
+
'hint.branch': 'Git-Branch wechseln',
|
|
69
|
+
'hint.stats': 'Sitzungsstatistik & Tokenverbrauch',
|
|
70
|
+
'hint.clear': 'Ansicht leeren',
|
|
71
|
+
'hint.cancel': 'laufende Runde abbrechen',
|
|
72
|
+
'hint.quit': 'beenden',
|
|
73
|
+
'hint.compact': 'Kontext verdichten',
|
|
74
|
+
'hint.goal': 'Ziel verwalten',
|
|
75
|
+
|
|
76
|
+
// ---- transcript blocks --------------------------------------------------
|
|
77
|
+
'transcript.turns.one': '{count} Runde',
|
|
78
|
+
'transcript.turns.other': '{count} Runden',
|
|
79
|
+
'transcript.steps.one': '{count} Schritt',
|
|
80
|
+
'transcript.steps.other': '{count} Schritte',
|
|
81
|
+
'transcript.thinking': ' Denken',
|
|
82
|
+
'transcript.streaming': ' · streamt…',
|
|
83
|
+
'transcript.steeringBadge': ' ⟲ Eingriff',
|
|
84
|
+
'transcript.tasks': 'Aufgaben',
|
|
85
|
+
'transcript.systemPrompt': ' Systemprompt',
|
|
86
|
+
'transcript.pendingInput': ' wartende Eingabe · ',
|
|
87
|
+
'transcript.steering': ' Eingriff',
|
|
88
|
+
'transcript.queued': ' in Warteschlange',
|
|
89
|
+
'note.systemReminder': 'system-reminder',
|
|
90
|
+
'note.compaction': 'Kompaktierung',
|
|
91
|
+
|
|
92
|
+
// ---- images and mermaid -------------------------------------------------
|
|
93
|
+
'image.attachment': '🖼 Bildanhang',
|
|
94
|
+
'image.rendering': '⏳ Bild wird gerendert…',
|
|
95
|
+
'image.renderFailed': '⚠ Bilddarstellung fehlgeschlagen · {error}',
|
|
96
|
+
'image.mermaidRendering': '⏳ Mermaid-Diagramm wird gerendert…',
|
|
97
|
+
'image.mermaidTooWide': '↔ Mermaid-Diagramm braucht {width} Spalten, dieser Bereich hat {budget}',
|
|
98
|
+
'image.altFallback': 'Bild',
|
|
99
|
+
|
|
100
|
+
// ---- composer / approval prompt ----------------------------------------
|
|
101
|
+
'composer.imageHint': 'Eingefügtes Bild: multimodales Modell/Plugin oder deepseek-v4-flash-vision-exp verwenden, sonst kann das Bild nicht gelesen werden',
|
|
102
|
+
'composer.approval': 'Freigabe · ',
|
|
103
|
+
'composer.summary': 'Zusammenfassung · ',
|
|
104
|
+
'composer.origin': 'Herkunft · ',
|
|
105
|
+
'composer.risk': 'Risiko · ',
|
|
106
|
+
'composer.approvalHint': 'y erlauben · n ablehnen · Esc abbrechen',
|
|
107
|
+
'risk.low': 'niedrig',
|
|
108
|
+
'risk.medium': 'mittel',
|
|
109
|
+
'risk.high': 'hoch',
|
|
110
|
+
'composer.effortHint': 'Tab / ←/→ anpassen · Esc schließen',
|
|
111
|
+
|
|
112
|
+
// ---- right status rail --------------------------------------------------
|
|
113
|
+
'rail.model': 'MODELL',
|
|
114
|
+
'rail.thinking': 'DENKEN',
|
|
115
|
+
'rail.context': 'KONTEXT',
|
|
116
|
+
'rail.session': 'SITZUNG',
|
|
117
|
+
'rail.goal': 'ZIEL',
|
|
118
|
+
'rail.subagents': 'SUBAGENTEN',
|
|
119
|
+
'rail.noData': '—',
|
|
120
|
+
'rail.percentUsed': '{percent}% genutzt',
|
|
121
|
+
'rail.tokens': '~{used} / {window} Tokens',
|
|
122
|
+
'rail.cacheHit': 'Cache {percent}% Treffer',
|
|
123
|
+
'rail.breakdown': 'System {system} · Tools {tools} · Nachrichten {messages}',
|
|
124
|
+
'rail.contextPending': 'sichtbar, sobald Nutzung gemeldet wird',
|
|
125
|
+
'rail.subagentCounts': '{running} aktiv · {total} gesamt',
|
|
126
|
+
'rail.unreadable': '{label} (nicht lesbar)',
|
|
127
|
+
'rail.more': '… +{count} weitere',
|
|
128
|
+
'rail.round': ' · Runde {started}/{max}',
|
|
129
|
+
'goal.active': 'aktiv',
|
|
130
|
+
'goal.paused': 'pausiert',
|
|
131
|
+
'goal.blocked': 'blockiert',
|
|
132
|
+
'goal.complete': 'abgeschlossen',
|
|
133
|
+
|
|
134
|
+
// ---- session stats window ----------------------------------------------
|
|
135
|
+
'stats.title': 'Sitzungsstatistik',
|
|
136
|
+
'stats.hint': 'Streifen anklicken oder /stats',
|
|
137
|
+
'stats.usage': 'Nutzung',
|
|
138
|
+
'stats.duration': 'Dauer',
|
|
139
|
+
'stats.speed': 'Tempo',
|
|
140
|
+
'stats.tokens': 'Tokens',
|
|
141
|
+
'stats.cache': 'Cache',
|
|
142
|
+
'stats.context': 'Kontext',
|
|
143
|
+
'stats.noSteps': 'noch kein abgeschlossener Schritt',
|
|
144
|
+
'stats.llmTime': 'LLM {value}',
|
|
145
|
+
'stats.toolTime': 'Tools {value}',
|
|
146
|
+
'stats.ttft': 'TTFT Ø {value}',
|
|
147
|
+
'stats.tokensPerSecond': '{value} Tok/s',
|
|
148
|
+
'stats.cacheRate': 'Cache {percent}%',
|
|
149
|
+
'stats.inOut': 'ein {input} · aus {output}',
|
|
150
|
+
'stats.cacheDetail': '{percent}% Treffer · gelesen {read} · geschrieben {write} · verfehlt {miss}',
|
|
151
|
+
'stats.contextUsed': 'genutzt {percent}% ~{used} / {window}',
|
|
152
|
+
'stats.systemPrompt': 'Systemprompt',
|
|
153
|
+
'stats.tools': 'Tools',
|
|
154
|
+
'stats.messages': 'Nachrichten',
|
|
155
|
+
'stats.compositionUnavailable': 'Zusammensetzung nicht verfügbar',
|
|
156
|
+
'stats.contextPending': 'Kontextbelegung erscheint, sobald eine Anfrage Nutzung meldet',
|
|
157
|
+
|
|
158
|
+
// ---- questions modal ----------------------------------------------------
|
|
159
|
+
'questions.title': 'Frage',
|
|
160
|
+
'questions.titleOf': 'Frage {index} von {total}',
|
|
161
|
+
'questions.defer': 'Esc später',
|
|
162
|
+
'questions.range': '{from}-{to} von {total} PgUp/PgDn',
|
|
163
|
+
'questions.other': 'Andere: ',
|
|
164
|
+
'questions.answer': 'Antwort: ',
|
|
165
|
+
'questions.placeholder': 'eigene Antwort eingeben',
|
|
166
|
+
'questions.hintCustom': 'Enter bestätigen · Esc zurück',
|
|
167
|
+
'questions.hintMulti': 'Leertaste umschalten · Enter weiter · Hoch/Runter bewegen',
|
|
168
|
+
'questions.hintSingle': 'Enter auswählen · Hoch/Runter bewegen',
|
|
169
|
+
|
|
170
|
+
// ---- secret prompt ------------------------------------------------------
|
|
171
|
+
'secret.hint': 'Enter absenden · Esc abbrechen',
|
|
172
|
+
|
|
173
|
+
// ---- settings dialog chrome --------------------------------------------
|
|
174
|
+
'settings.title': 'Einstellungen',
|
|
175
|
+
'settings.menu': 'MENÜ',
|
|
176
|
+
'settings.shared': 'Geteilt mit DeepSeek Harness WebUI',
|
|
177
|
+
'settings.footerEdit': 'Enter speichern · Esc abbrechen',
|
|
178
|
+
'settings.footerMenu': '↑/↓ bewegen · Tab Menü · Enter auswählen · Esc zurück',
|
|
179
|
+
'settings.footerPlain': '↑/↓ bewegen · Enter auswählen · Esc zurück',
|
|
180
|
+
'settings.confirmHint': '{text} · Y / N',
|
|
181
|
+
'settings.confirmDefault': 'Y bestätigen · N abbrechen',
|
|
182
|
+
'settings.confirmDeleteSession': 'Ctrl+D erneut zum Löschen',
|
|
183
|
+
'settings.confirmChange': 'Diese Änderung bestätigen?',
|
|
184
|
+
'settings.deleteTwice': 'Ctrl+D erneut drücken zum Löschen ',
|
|
185
|
+
'settings.deleteMcpTwice': 'Entf erneut drücken zum Entfernen ',
|
|
186
|
+
'settings.noSession': 'keine Sitzung ausgewählt',
|
|
187
|
+
'settings.noSessions': 'keine Sitzungen verfügbar',
|
|
188
|
+
'settings.noMcp': 'kein MCP-Server ausgewählt',
|
|
189
|
+
'settings.noOptions': 'keine Optionen für {label}',
|
|
190
|
+
'settings.saved': 'in DSH-Einstellungen gespeichert',
|
|
191
|
+
'settings.providerRemoved': 'Anbieter entfernt',
|
|
192
|
+
'settings.conflict': 'Einstellungen anderswo geändert; neu geladen',
|
|
193
|
+
'settings.error': 'Einstellungen: {error}',
|
|
194
|
+
'settings.dshSettings': 'DSH-Einstellungen',
|
|
195
|
+
'settings.optionList': 'Enter auswählen · Esc zurück',
|
|
196
|
+
|
|
197
|
+
// ---- settings left menu -------------------------------------------------
|
|
198
|
+
'menu.main': 'Start',
|
|
199
|
+
'menu.model': 'Modell',
|
|
200
|
+
'menu.update': 'Update',
|
|
201
|
+
'menu.mcp': 'MCP',
|
|
202
|
+
|
|
203
|
+
// ---- settings rows: main tab -------------------------------------------
|
|
204
|
+
'settings.general': 'Allgemein',
|
|
205
|
+
'settings.graphics': 'Grafik',
|
|
206
|
+
'settings.sessions': 'Sitzungen',
|
|
207
|
+
'settings.system': 'System',
|
|
208
|
+
'settings.busyEnter': 'Enter bei Auslastung',
|
|
209
|
+
'settings.defaultPreset': 'Standard-Preset',
|
|
210
|
+
'settings.permissionPreset': 'Berechtigungs-Preset',
|
|
211
|
+
'settings.permissionDangerConfirm': 'Uneingeschränkten Tool- und Dateizugriff aktivieren?',
|
|
212
|
+
'settings.graphicsRendering': 'Grafikdarstellung',
|
|
213
|
+
'settings.noProtocolFallback': 'Fallback ohne Protokoll',
|
|
214
|
+
'settings.imageHeightCap': 'Max. Bildhöhe (Zeilen)',
|
|
215
|
+
'settings.mermaidRendering': 'Mermaid-Darstellung',
|
|
216
|
+
'settings.newSession': 'Neue Sitzung',
|
|
217
|
+
'settings.manageSessions': 'Sitzungen verwalten',
|
|
218
|
+
'settings.providerConfig': 'Anbieter-API-Konfiguration',
|
|
219
|
+
'settings.updateManager': 'Update-Verwaltung',
|
|
220
|
+
'settings.settingsFile': 'Einstellungsdatei',
|
|
221
|
+
'settings.language': 'Sprache',
|
|
222
|
+
'settings.languageSystem': 'System ({language})',
|
|
223
|
+
'settings.languageSaved': 'Sprache: {language}',
|
|
224
|
+
|
|
225
|
+
// ---- model tab ----------------------------------------------------------
|
|
226
|
+
'model.title': 'Modell',
|
|
227
|
+
'model.subtitle': 'Enter wählt ein gelistetes Modell als Standard',
|
|
228
|
+
'model.defaultSection': 'Standard',
|
|
229
|
+
'model.defaultProvider': 'Standardanbieter',
|
|
230
|
+
'model.defaultModel': 'Standardmodell',
|
|
231
|
+
'model.reasoning': 'Reasoning',
|
|
232
|
+
'model.providerUrl': 'Anbieter-URL',
|
|
233
|
+
'model.providerApiKey': 'Anbieter-API-Schlüssel',
|
|
234
|
+
'model.displayName': 'Anzeigename',
|
|
235
|
+
'model.wireProtocol': 'Übertragungsprotokoll',
|
|
236
|
+
'model.defaultImageInput': 'Standard-Bildeingabe',
|
|
237
|
+
'model.models': 'Modelle',
|
|
238
|
+
'model.fetch': 'abrufen…',
|
|
239
|
+
'model.selectedCount': '{count} ausgewählt',
|
|
240
|
+
'model.removeProvider': 'Anbieter entfernen',
|
|
241
|
+
'model.removeProviderConfirm': '{name} und zugehörige Zugangsdaten entfernen?',
|
|
242
|
+
'model.noModels': 'keine Modelle verfügbar',
|
|
243
|
+
'model.noModelsReturned': 'Anbieter hat keine Modelle geliefert',
|
|
244
|
+
'model.fetchUnavailable': 'Auto-Abruf nicht verfügbar — gespeicherte Modelle · Enter umschalten',
|
|
245
|
+
'model.fetchOk': 'automatisch abgerufen · Enter umschalten · Esc zurück',
|
|
246
|
+
'model.fetching': 'Modelle werden abgerufen…',
|
|
247
|
+
'model.autoFetching': 'automatischer Abruf…',
|
|
248
|
+
'model.credentialConfigured': 'konfiguriert ({source})',
|
|
249
|
+
'model.credentialMissing': 'nicht konfiguriert',
|
|
250
|
+
'model.defaultTag': 'Standard',
|
|
251
|
+
'model.providerUnavailable': 'Anbieter ist nicht mehr verfügbar',
|
|
252
|
+
'model.namespaceUnavailable': 'Anbieter-Einstellungsnamespace ist nicht verfügbar',
|
|
253
|
+
'model.apiKeyEmpty': 'API-Schlüssel darf nicht leer sein',
|
|
254
|
+
'model.credentialsUnavailable': 'Zugangsdaten-Dienst ist nicht verfügbar',
|
|
255
|
+
'model.noProviderModels': 'gewählter Anbieter hat keine verfügbaren Modelle',
|
|
256
|
+
'model.addCount.one': '{count} verfügbar',
|
|
257
|
+
'model.addCount.other': '{count} verfügbar',
|
|
258
|
+
|
|
259
|
+
// ---- add-provider flow --------------------------------------------------
|
|
260
|
+
'provider.add': 'Anbieter hinzufügen',
|
|
261
|
+
'provider.empty': 'noch kein Anbieter konfiguriert',
|
|
262
|
+
'provider.pickSubtitle': 'Enter wählen · Esc zurück',
|
|
263
|
+
'provider.catalog': 'Installierte Anbieter',
|
|
264
|
+
'provider.catalogEmpty': 'alle installierten Anbieter sind bereits konfiguriert',
|
|
265
|
+
'provider.custom': 'Eigene API — Endpunkt selbst angeben',
|
|
266
|
+
'provider.form.catalog': 'Installierten Anbieter übernehmen',
|
|
267
|
+
'provider.form.custom': 'Eigenen Anbieter angeben',
|
|
268
|
+
'provider.formSubtitle': 'Enter bearbeiten · Esc zurück',
|
|
269
|
+
'provider.field.route': 'Routen-ID',
|
|
270
|
+
'provider.field.addModel': 'Modell-ID manuell hinzufügen',
|
|
271
|
+
'provider.field.save': 'Anbieter speichern',
|
|
272
|
+
'provider.hint.route': 'Kleinbuchstaben, Ziffern, Bindestriche · Schlüssel als {ref} gespeichert',
|
|
273
|
+
'provider.error.route': 'Routen-ID muss mit einem Buchstaben beginnen und nur Kleinbuchstaben, Ziffern und Bindestriche enthalten',
|
|
274
|
+
'provider.error.routeNeeded': 'Anbieter auswählen',
|
|
275
|
+
'provider.error.taken': 'diese Routen-ID wird bereits verwendet',
|
|
276
|
+
'provider.error.baseUrl': 'der Endpunkt muss eine http- oder https-URL sein',
|
|
277
|
+
'provider.error.baseUrlNeeded': 'ein eigener Anbieter braucht einen Endpunkt',
|
|
278
|
+
'provider.error.apiNeeded': 'Protokoll wählen, das dieser Endpunkt spricht',
|
|
279
|
+
'provider.error.modelsNeeded': 'ein eigener Anbieter braucht mindestens ein Modell',
|
|
280
|
+
'provider.error.modelId': 'Modell {index} braucht eine ID',
|
|
281
|
+
'provider.error.modelDuplicate': 'Modell "{id}" ist doppelt aufgeführt',
|
|
282
|
+
'provider.added': 'Anbieter hinzugefügt',
|
|
283
|
+
'provider.accountManaged': 'mit dem DeepSeek-Konto angemeldet',
|
|
284
|
+
'provider.search': 'Suchen',
|
|
285
|
+
'provider.searchPlaceholder': 'tippen zum Filtern',
|
|
286
|
+
'provider.searchEmpty': 'kein Anbieter passt zu "{query}"',
|
|
287
|
+
|
|
288
|
+
// ---- ein Modell ----------------------------------------------------------
|
|
289
|
+
'model.edit': 'Modell bearbeiten',
|
|
290
|
+
'model.editHint': 'e bearbeiten · Entf entfernen',
|
|
291
|
+
'model.refresh': 'Katalog neu laden',
|
|
292
|
+
'model.selectAll': 'Alle auswählen',
|
|
293
|
+
'model.fetchRefused': 'der Endpunkt hat keine Modellliste geliefert',
|
|
294
|
+
'model.notSaved': 'dieses Modell ist noch nicht gespeichert',
|
|
295
|
+
'model.removed': 'Modell entfernt',
|
|
296
|
+
'model.form.add': 'Modell hinzufügen',
|
|
297
|
+
'model.form.edit': 'Modell · {id}',
|
|
298
|
+
'model.form.save': 'Modell speichern',
|
|
299
|
+
'model.form.remove': 'Beim Anbieter entfernen',
|
|
300
|
+
'model.form.removeConfirm': 'Dieses Modell beim Anbieter entfernen?',
|
|
301
|
+
'model.field.id': 'Modell-ID',
|
|
302
|
+
'model.field.name': 'Anzeigename',
|
|
303
|
+
'model.field.contextWindow': 'Kontextfenster',
|
|
304
|
+
'model.field.maxTokens': 'Max. Ausgabe-Tokens',
|
|
305
|
+
'model.field.input': 'Eingabe',
|
|
306
|
+
'model.error.idNeeded': 'ein Modell braucht eine ID',
|
|
307
|
+
'model.error.idDuplicate': 'Modell "{id}" ist bereits aufgeführt',
|
|
308
|
+
'model.error.capacity': 'Kontextfenster und Max-Tokens müssen ganze Zahlen sein (256K, 1M)',
|
|
309
|
+
|
|
310
|
+
// ---- MCP tab ------------------------------------------------------------
|
|
311
|
+
'mcp.title': 'MCP',
|
|
312
|
+
'mcp.subtitle': 'Enter bearbeiten · Entf entfernen · Esc zurück',
|
|
313
|
+
'mcp.editSubtitle': 'Enter bearbeiten · Esc zurück',
|
|
314
|
+
'mcp.servers': 'MCP-Server',
|
|
315
|
+
'mcp.empty': 'Kein MCP-Server konfiguriert',
|
|
316
|
+
'mcp.add': 'MCP-Server hinzufügen',
|
|
317
|
+
'mcp.scope': 'Bereich',
|
|
318
|
+
'mcp.scopeUserPrefix': 'Benutzer · {path}',
|
|
319
|
+
'mcp.scopePathPrefix': 'Pfad · {path}',
|
|
320
|
+
'mcp.configFiles': 'Konfigurationsdateien',
|
|
321
|
+
'mcp.userScope': 'Benutzer (alle Sitzungen)',
|
|
322
|
+
'mcp.secrets': 'Geheimnisse',
|
|
323
|
+
'mcp.secretsPlain': 'Klartext in den Konfigurationsdateien',
|
|
324
|
+
'mcp.loaded': 'geladen',
|
|
325
|
+
'mcp.notCreated': 'noch nicht erstellt',
|
|
326
|
+
'mcp.type.stdio': 'Lokaler Befehl',
|
|
327
|
+
'mcp.type.http': 'HTTP',
|
|
328
|
+
'mcp.type.sse': 'SSE',
|
|
329
|
+
'mcp.state.connected': '● verbunden',
|
|
330
|
+
'mcp.state.tools.one': '● {count} Tool',
|
|
331
|
+
'mcp.state.tools.other': '● {count} Tools',
|
|
332
|
+
'mcp.state.pending': '… verbinde',
|
|
333
|
+
'mcp.state.disabled': '○ deaktiviert',
|
|
334
|
+
'mcp.state.idle': '○ nicht verbunden',
|
|
335
|
+
'mcp.form.add': 'MCP-Server hinzufügen',
|
|
336
|
+
'mcp.form.edit': 'MCP-Server bearbeiten · {name}',
|
|
337
|
+
'mcp.titleAdd': 'MCP · hinzufügen',
|
|
338
|
+
'mcp.titleEdit': 'MCP · bearbeiten',
|
|
339
|
+
'mcp.field.name': 'Name',
|
|
340
|
+
'mcp.field.type': 'Typ',
|
|
341
|
+
'mcp.field.timeout': 'Timeout (ms)',
|
|
342
|
+
'mcp.field.command': 'Befehl',
|
|
343
|
+
'mcp.field.args': 'Argumente',
|
|
344
|
+
'mcp.field.env': 'Umgebung (JSON)',
|
|
345
|
+
'mcp.field.url': 'URL',
|
|
346
|
+
'mcp.field.headers': 'Header (JSON)',
|
|
347
|
+
'mcp.field.scope': 'Bereich',
|
|
348
|
+
'mcp.field.path': 'Pfad',
|
|
349
|
+
'mcp.field.enabled': 'Aktiviert',
|
|
350
|
+
'mcp.field.save': 'Speichern',
|
|
351
|
+
'mcp.field.remove': 'Entfernen',
|
|
352
|
+
'mcp.choice.stdio': 'Lokaler Befehl (stdio)',
|
|
353
|
+
'mcp.choice.http': 'HTTP (streamfähig)',
|
|
354
|
+
'mcp.choice.sse': 'SSE (Legacy-HTTP+SSE)',
|
|
355
|
+
'mcp.choice.scopeUser': 'Benutzer — alle Sitzungen',
|
|
356
|
+
'mcp.choice.scopePath': 'Pfad — Sitzungen unter einem Verzeichnis',
|
|
357
|
+
'mcp.removeConfirm': 'Diesen MCP-Server entfernen und trennen?',
|
|
358
|
+
'mcp.saved': 'MCP-Server gespeichert',
|
|
359
|
+
'mcp.added': 'MCP-Server hinzugefügt',
|
|
360
|
+
'mcp.removed': 'MCP-Server entfernt',
|
|
361
|
+
'mcp.error.name': 'Name muss 1-32 Zeichen aus Buchstaben, Ziffern, "-" oder "_" haben',
|
|
362
|
+
'mcp.error.duplicate': 'ein MCP-Server mit dem Namen "{name}" ist bereits konfiguriert',
|
|
363
|
+
'mcp.error.timeout': 'timeoutMs muss eine ganze Zahl zwischen 1 und {max} sein',
|
|
364
|
+
'mcp.error.pathNeeded': 'ein pfadbezogener Server braucht ein Verzeichnis',
|
|
365
|
+
'mcp.error.pathAbsolute': 'der Pfadbereich muss ein absolutes Verzeichnis sein',
|
|
366
|
+
'mcp.error.commandNeeded': 'ein stdio-Server braucht einen Befehl',
|
|
367
|
+
'mcp.error.urlParse': 'URL kann nicht geparst werden',
|
|
368
|
+
'mcp.error.urlScheme': 'URL muss http oder https verwenden',
|
|
369
|
+
'mcp.error.pathNotDir': 'der Pfadbereich ist kein Verzeichnis: {path}',
|
|
370
|
+
'mcp.error.configIsDir': 'der Konfigurationsdateipfad ist ein Verzeichnis: {path}',
|
|
371
|
+
'mcp.error.notFound': 'kein MCP-Server mit dem Namen "{name}" konfiguriert',
|
|
372
|
+
'mcp.error.documentGone': 'das Dokument, das "{name}" definiert, ist weg: {error}',
|
|
373
|
+
'mcp.error.noClient': 'der Host stellt keinen MCP-Client bereit',
|
|
374
|
+
'mcp.error.connectTimeout': 'Zeitüberschreitung beim Verbinden mit {name}',
|
|
375
|
+
'mcp.error.json': 'das Dokument ist kein gültiges JSON: {error}',
|
|
376
|
+
'mcp.error.jsonObject': 'das Dokument muss ein JSON-Objekt sein',
|
|
377
|
+
'mcp.error.serversObject': '"servers" muss ein JSON-Objekt sein',
|
|
378
|
+
'mcp.error.argsArray': 'Argumente müssen ein JSON-Array von Strings sein',
|
|
379
|
+
'mcp.error.argsTypes': 'Argumente müssen Strings oder Zahlen sein',
|
|
380
|
+
'mcp.error.argsUnclosed': 'Argumente enthalten ein nicht geschlossenes Anführungszeichen',
|
|
381
|
+
'mcp.error.envObject': '{label} muss ein JSON-Objekt sein',
|
|
382
|
+
'mcp.error.envValue': '{label}-Wert "{name}" muss ein String, eine Zahl oder ein boolescher Wert sein',
|
|
383
|
+
'mcp.error.header': 'ungültiger HTTP-Header "{name}"',
|
|
384
|
+
'mcp.error.envName': 'ungültiger Umgebungsname "{name}"',
|
|
385
|
+
|
|
386
|
+
// ---- rewind -------------------------------------------------------------
|
|
387
|
+
'rewind.title': 'Rückspulen',
|
|
388
|
+
'rewind.restoreTo': 'Auf den Stand davor zurücksetzen: {label}',
|
|
389
|
+
'rewind.restorePrompt': 'Unterhaltung auf den Stand zurücksetzen vor…',
|
|
390
|
+
'rewind.empty': 'Noch nichts zum Rückspulen.',
|
|
391
|
+
'rewind.option.conversation': 'Unterhaltung wiederherstellen',
|
|
392
|
+
'rewind.option.both': 'Unterhaltung und Dateien wiederherstellen',
|
|
393
|
+
'rewind.option.code': 'Dateien wiederherstellen',
|
|
394
|
+
'rewind.option.cancel': 'Abbrechen',
|
|
395
|
+
'rewind.current': '(aktuell)',
|
|
396
|
+
'rewind.noPoints': 'keine Benutzernachrichten zum Rückspulen',
|
|
397
|
+
'rewind.unknownPoint': 'unbekannter Rücksetzpunkt "{selector}" — Zahl oder last verwenden',
|
|
398
|
+
'rewind.noPoint': 'kein Rücksetzpunkt {n} — 1..{count}',
|
|
399
|
+
'rewind.notGit': 'kein Git-Worktree',
|
|
400
|
+
'rewind.noBackup': 'kein Backup-Ort',
|
|
401
|
+
'rewind.filesNotRestored': 'Dateien nicht wiederhergestellt',
|
|
402
|
+
'rewind.filesNotRestoredReason': 'Dateien nicht wiederhergestellt ({reason})',
|
|
403
|
+
'rewind.restored.one': '{count} verfolgte Datei aus HEAD wiederhergestellt',
|
|
404
|
+
'rewind.restored.other': '{count} verfolgte Dateien aus HEAD wiederhergestellt',
|
|
405
|
+
'rewind.removed.one': '{count} neue Datei entfernt',
|
|
406
|
+
'rewind.removed.other': '{count} neue Dateien entfernt',
|
|
407
|
+
'rewind.skipped': '{count} übersprungen',
|
|
408
|
+
'rewind.previousSaved': 'vorheriger Inhalt gespeichert in {path}',
|
|
409
|
+
'rewind.noChanges': 'keine Dateiänderungen nach diesem Punkt',
|
|
410
|
+
'rewind.image': '[Bild]',
|
|
411
|
+
'rewind.images': '[{count} Bilder]',
|
|
412
|
+
'rewind.emptyMessage': '(leer)',
|
|
413
|
+
'git.title': 'Git-Branches',
|
|
414
|
+
'git.subtitle': 'Aktuell: {branch} · {path}',
|
|
415
|
+
'git.local': 'Lokale Branches',
|
|
416
|
+
'git.remote': 'Remote-Branches',
|
|
417
|
+
'git.empty': 'Keine Branches in diesem Repository.',
|
|
418
|
+
'git.detached': '(losgelöst)',
|
|
419
|
+
'git.switched': 'Zu Branch {branch} gewechselt',
|
|
420
|
+
'git.switchFailed': 'Wechsel zu {branch} nicht möglich: {error}',
|
|
421
|
+
'git.pullDone': 'Aktualisierungen abgerufen',
|
|
422
|
+
'git.pullFailed': 'Aktualisierungen können nicht abgerufen werden: {error}',
|
|
423
|
+
'git.listFailed': 'Branches können nicht aufgelistet werden: {error}',
|
|
424
|
+
'git.notRepo': 'kein Git-Arbeitsverzeichnis',
|
|
425
|
+
'git.gitMissing': 'git ist im PATH nicht verfügbar',
|
|
426
|
+
'git.timedOut': 'git hat das Zeitlimit überschritten',
|
|
427
|
+
'git.onlyTitleScreen': 'Der Branch-Wechsel ist nur auf der leeren Seite verfügbar — verlasse die Sitzung mit /new',
|
|
428
|
+
'git.footer': '↑/↓ wählen · Enter wechseln · P pull · R aktualisieren · Esc schließen',
|
|
429
|
+
|
|
430
|
+
// ---- update tab ---------------------------------------------------------
|
|
431
|
+
'update.title': 'Update',
|
|
432
|
+
'update.checking': 'Versionen werden geprüft…',
|
|
433
|
+
'update.fetching': 'Abruf aus der npm-Registry…',
|
|
434
|
+
'update.fetchingVersions': 'Versionen werden abgerufen…',
|
|
435
|
+
'update.versionsSubtitle': 'Enter herunterladen · Esc zurück',
|
|
436
|
+
'update.installed': 'Installiert',
|
|
437
|
+
'update.latest': 'Neueste (npm-Tag)',
|
|
438
|
+
'update.status': 'Status',
|
|
439
|
+
'update.versions': 'Versionen',
|
|
440
|
+
'update.selectVersion': 'Version wählen…',
|
|
441
|
+
'update.restartApply': 'Zum Anwenden von {version} neu starten',
|
|
442
|
+
'update.enterRestart': 'Enter neu starten',
|
|
443
|
+
'update.discard': 'Heruntergeladene {version} verwerfen',
|
|
444
|
+
'update.actions': 'Aktionen',
|
|
445
|
+
'update.checkNow': 'Jetzt prüfen',
|
|
446
|
+
'update.checkingShort': 'Prüfe…',
|
|
447
|
+
'update.startupCheck': 'Prüfung beim Start',
|
|
448
|
+
'update.profile': 'Profil',
|
|
449
|
+
'update.dshPackage': 'dsh (@deepseek-ai/dsh)',
|
|
450
|
+
'update.statusCorrupt': 'Installation beschädigt — unten neu installieren',
|
|
451
|
+
'update.statusError': 'Registry-Prüfung fehlgeschlagen: {error}',
|
|
452
|
+
'update.statusAvailable': 'Update verfügbar → {version}',
|
|
453
|
+
'update.statusUpToDate': 'Aktuell',
|
|
454
|
+
'update.statusNoStable': 'Keine stabile Version — unter Versionen wählen',
|
|
455
|
+
'update.notOnPath': 'nicht im PATH gefunden',
|
|
456
|
+
'update.subtitleStaged': '{package} {version} heruntergeladen — zum Anwenden neu starten',
|
|
457
|
+
'update.subtitleIdle': 'Enter auswählen · herunterladen, dann zum Anwenden neu starten',
|
|
458
|
+
'update.download': 'Herunterladen',
|
|
459
|
+
'update.contacting': 'Registry wird kontaktiert…',
|
|
460
|
+
'update.version': 'Version',
|
|
461
|
+
'update.savingTo': 'Speichern nach',
|
|
462
|
+
'update.escCancels': 'Esc bricht ab',
|
|
463
|
+
'update.restartApplyQ': '{label} {version} zum Anwenden neu starten? (bereits heruntergeladen)',
|
|
464
|
+
'update.downloadQ': '{label} {version} herunterladen und zum Anwenden neu starten?',
|
|
465
|
+
'update.localSwitch': ' — schaltet die lokale Installation auf eine Registry-Version um',
|
|
466
|
+
'update.downloaded': 'heruntergeladen · zum Anwenden neu starten',
|
|
467
|
+
'update.downloadedToast': '{label} {version} heruntergeladen · im Update-Tab anwenden',
|
|
468
|
+
'update.downloadedConfirm': 'Heruntergeladen zum Anwenden von {label} {version} neu starten? (y/n)',
|
|
469
|
+
'update.alreadyDownloadedConfirm': 'Bereits heruntergeladen · zum Anwenden von {label} {version} neu starten? (y/n)',
|
|
470
|
+
'update.downloadCancelled': 'Download abgebrochen',
|
|
471
|
+
'update.downloadFailed': 'Download fehlgeschlagen: {error}',
|
|
472
|
+
'update.stagedGone': 'der bereitgestellte Download ist weg — Version erneut wählen',
|
|
473
|
+
'update.locks.one': 'kann nicht anwenden, während dsh in {count} weiterem Prozess läuft — schließen und erneut versuchen',
|
|
474
|
+
'update.locks.other': 'kann nicht anwenden, während dsh in {count} weiteren Prozessen läuft — schließen und erneut versuchen',
|
|
475
|
+
'update.noNpm': 'Anwenden nicht möglich: npm wurde nicht gefunden',
|
|
476
|
+
'update.noDshCli': 'Anwenden nicht möglich: die dsh-CLI wurde nicht gefunden',
|
|
477
|
+
'update.installerFailed': 'Installer kann nicht gestartet werden — dsh neu starten, um {label} anzuwenden',
|
|
478
|
+
'update.applying': '{label} wird angewendet · Beenden, Neustart…',
|
|
479
|
+
'update.stagedDiscarded': 'bereitgestellter Download verworfen',
|
|
480
|
+
'update.tagCached': 'gecacht',
|
|
481
|
+
'update.tagStaged': 'bereitgestellt',
|
|
482
|
+
'update.installFailed': 'Installation fehlgeschlagen (Exit {code}) — unter Versionen erneut versuchen',
|
|
483
|
+
'update.installFailedRetry': 'Update → dsh-oc-tui → Versionen öffnen und eine Version zum erneuten Download wählen',
|
|
484
|
+
'update.installUnreadable': 'Installation meldete Erfolg, aber installiert ist {installed} (erwartet {expected}) — Reparatur: {repair}',
|
|
485
|
+
'update.registryUnreachable': 'Registry nicht erreichbar: {error}',
|
|
486
|
+
'update.notOnRegistry': '{package} ist nicht in der Registry',
|
|
487
|
+
'update.registryHttp': 'Registry gab HTTP {status} für {package} zurück',
|
|
488
|
+
'update.noTarballUrl': 'Registry-Antwort enthält keine Tarball-URL',
|
|
489
|
+
'update.downloadHttp': 'Download fehlgeschlagen: HTTP {status} für {url}',
|
|
490
|
+
'update.downloadEmpty': 'Download fehlgeschlagen: leerer Antwortinhalt',
|
|
491
|
+
'update.integrityFailed': 'Integritätsprüfung für {file} fehlgeschlagen — Download verworfen',
|
|
492
|
+
'update.npmMissing': 'npm nicht im PATH gefunden',
|
|
493
|
+
'update.npmViewFailed': 'npm view {package} endete mit {code}',
|
|
494
|
+
'update.timedOut': '\n(Zeitüberschreitung nach {ms}ms)',
|
|
495
|
+
'update.noOutput': '(keine Ausgabe)',
|
|
496
|
+
|
|
497
|
+
// ---- commands -----------------------------------------------------------
|
|
498
|
+
'command.settings': 'Die Einstellungsseiten der TUI öffnen',
|
|
499
|
+
'command.help': 'Tasten- und Befehlsreferenz der TUI anzeigen',
|
|
500
|
+
'command.stats': 'Token- und Cache-Statistik der Sitzung anzeigen',
|
|
501
|
+
'command.new': 'Eine neue Sitzung starten',
|
|
502
|
+
'command.resume': 'Eine gespeicherte Sitzung fortsetzen',
|
|
503
|
+
'command.clear': 'Das Transkript leeren',
|
|
504
|
+
'command.cancel': 'Die laufende Runde abbrechen',
|
|
505
|
+
'command.rewind': 'Die Sitzung auf einen früheren Punkt zurücksetzen',
|
|
506
|
+
'command.branch': 'Git-Branches auf der leeren Seite wechseln',
|
|
507
|
+
'command.quit': 'Die TUI verlassen',
|
|
508
|
+
|
|
509
|
+
// ---- help overlay -------------------------------------------------------
|
|
510
|
+
'help.title': 'DeepSeek Harness TUI — Hilfe',
|
|
511
|
+
'help.enter': 'Enter',
|
|
512
|
+
'help.enterDesc': 'Nachricht senden',
|
|
513
|
+
'help.ctrlEnter': 'Ctrl+Enter',
|
|
514
|
+
'help.ctrlEnterDesc': 'Zeilenumbruch einfügen',
|
|
515
|
+
'help.ctrlC': 'Ctrl+C',
|
|
516
|
+
'help.ctrlCDesc': 'laufende Runde abbrechen; erneut drücken zum Beenden',
|
|
517
|
+
'help.ctrlP': 'Ctrl+P',
|
|
518
|
+
'help.ctrlPDesc': 'Einstellungen öffnen',
|
|
519
|
+
'help.ctrlE': 'Ctrl+E',
|
|
520
|
+
'help.ctrlEDesc': 'Denkregler umschalten',
|
|
521
|
+
'help.tab': 'Tab',
|
|
522
|
+
'help.tabDesc': 'Denkintensität durchschalten',
|
|
523
|
+
'help.ctrlN': 'Ctrl+N',
|
|
524
|
+
'help.ctrlNDesc': 'neue Sitzung',
|
|
525
|
+
'help.ctrlG': 'Ctrl+G',
|
|
526
|
+
'help.ctrlGDesc': 'Git-Branch wechseln (leere Seite)',
|
|
527
|
+
'help.ctrlD': 'Ctrl+D',
|
|
528
|
+
'help.ctrlDDesc': 'Sitzung in "Sitzungen verwalten" löschen (zweimal drücken)',
|
|
529
|
+
'help.pg': 'PgUp / PgDn',
|
|
530
|
+
'help.pgDesc': 'Transkript scrollen',
|
|
531
|
+
'help.shiftArrows': 'Shift+↑/↓',
|
|
532
|
+
'help.shiftArrowsDesc': 'Statusleiste scrollen (breite Fenster)',
|
|
533
|
+
'help.upDown': 'Hoch / Runter',
|
|
534
|
+
'help.upDownDesc': 'Caret hoch/runter; Verlauf an den Rändern',
|
|
535
|
+
'help.mouse': 'Maus ziehen',
|
|
536
|
+
'help.mouseDesc': 'Text auswählen; Rechtsklick kopiert',
|
|
537
|
+
'help.wheel': 'Mausrad',
|
|
538
|
+
'help.wheelDesc': 'Transkript / Einstellungen scrollen',
|
|
539
|
+
'help.escEsc': 'Esc Esc',
|
|
540
|
+
'help.escEscDesc': 'Rückspulen-Auswahl',
|
|
541
|
+
'help.esc': 'Esc',
|
|
542
|
+
'help.escDesc': 'Overlay schließen · Runde abbrechen · Eingabe leeren',
|
|
543
|
+
'help.commands': 'Befehle:',
|
|
544
|
+
|
|
545
|
+
// ---- session manager / toasts ------------------------------------------
|
|
546
|
+
'session.newTitle': 'Neue Sitzung',
|
|
547
|
+
'session.noSaved': 'Keine gespeicherten Sitzungen',
|
|
548
|
+
'session.manageTitle': 'Sitzungen verwalten',
|
|
549
|
+
'session.manageSubtitle': 'Enter öffnen · Ctrl+D zweimal zum Löschen · Esc zurück',
|
|
550
|
+
'session.loading': 'Sitzungen werden geladen...',
|
|
551
|
+
'session.deleted': 'Sitzung {label} gelöscht',
|
|
552
|
+
'session.deleteFailed': 'Sitzung löschen: {error}',
|
|
553
|
+
'session.deleteNotFound': 'gespeichertes Sitzungsverzeichnis wurde nicht gefunden',
|
|
554
|
+
'session.deleteCancelled': 'Löschen abgebrochen',
|
|
555
|
+
'session.resumed': 'Sitzung {id} fortgesetzt',
|
|
556
|
+
'session.started': 'Sitzung {id} gestartet',
|
|
557
|
+
'session.openFailed': 'Sitzung konnte nicht geöffnet werden: {error}',
|
|
558
|
+
'session.forkSummary': '{label} von {parent} · {files}',
|
|
559
|
+
'session.forkDropped': ' · {count} geerbte wartende Eingaben verworfen',
|
|
560
|
+
'session.conversationOnly': 'nur Unterhaltung',
|
|
561
|
+
'session.rewindLabel': 'Rückspulen #{n}',
|
|
562
|
+
'session.files': 'Dateien: {summary}',
|
|
563
|
+
'session.error': 'Fehler: {error}',
|
|
564
|
+
'session.interruptFirst': 'zuerst die laufende Runde abbrechen (/cancel)',
|
|
565
|
+
'session.interruptFirstEsc': 'zuerst die laufende Runde abbrechen (Esc oder /cancel)',
|
|
566
|
+
'session.startFirst': 'zuerst eine Sitzung starten',
|
|
567
|
+
'session.noReasoningLevels': 'aktuelles Modell bietet keine Reasoning-Stufen',
|
|
568
|
+
'session.settingsUnavailable': 'Einstellungen nicht verfügbar',
|
|
569
|
+
'session.interruptRequested': 'Abbruch angefordert',
|
|
570
|
+
'session.nothingToInterrupt': 'nichts abzubrechen',
|
|
571
|
+
'session.noSessionRunning': 'keine Sitzung läuft',
|
|
572
|
+
'session.promptCleared': 'Eingabe geleert',
|
|
573
|
+
'session.exitAgain': 'Ctrl+C erneut drücken zum Beenden',
|
|
574
|
+
'session.usageResume': 'Nutzung: /resume <sessionId>',
|
|
575
|
+
'session.currentModel': 'aktuelles Modell: {model}',
|
|
576
|
+
'session.modelSet': 'Modell auf {model} gesetzt (gilt für die nächste Anfrage)',
|
|
577
|
+
'session.currentProvider': 'aktueller Anbieter: {provider}',
|
|
578
|
+
'session.providerSet': 'Anbieter auf {provider} gesetzt (gilt für die nächste Anfrage)',
|
|
579
|
+
'session.unknownCommand': 'unbekannter Befehl /{name} — /help versuchen',
|
|
580
|
+
'session.queryMissing': 'Sitzungsabfrage ist in diesem Profil nicht eingebunden',
|
|
581
|
+
'session.listHeader': 'Sitzungen:',
|
|
582
|
+
'session.noPersisted': 'keine gespeicherten Sitzungen',
|
|
583
|
+
'session.listFailed': 'Sitzungen konnten nicht aufgelistet werden: {error}',
|
|
584
|
+
'session.modelNoImages': 'Modell "{model}" unterstützt keine Bildeingabe',
|
|
585
|
+
'session.imageAttachFailed': 'Bildanhängen fehlgeschlagen: {error}',
|
|
586
|
+
'session.attachmentsUnavailable': 'Anhang-Dienst nicht verfügbar; Bild kann nicht gelesen werden',
|
|
587
|
+
'session.copied.one': '{count} Zeile in die Zwischenablage kopiert',
|
|
588
|
+
'session.copied.other': '{count} Zeilen in die Zwischenablage kopiert',
|
|
589
|
+
'session.valueRequired': 'ein Wert ist erforderlich',
|
|
590
|
+
'session.minChars': 'mindestens {count} Zeichen',
|
|
591
|
+
'session.maxChars': 'höchstens {count} Zeichen',
|
|
592
|
+
'session.answerRequired': 'eine Option wählen oder eine Antwort eingeben',
|
|
593
|
+
'session.typeAnswer': 'eine Antwort eingeben oder Esc drücken',
|
|
594
|
+
'session.updatesAvailable': 'Updates: {list} — Ctrl+P → Update',
|
|
595
|
+
'session.versionsError': 'Versionen: {error}',
|
|
596
|
+
'session.mcpError': 'MCP: {error}',
|
|
597
|
+
'session.noClipboard': 'kein Pfad zur Zwischenablage verfügbar',
|
|
598
|
+
'session.unsupportedInteraction': 'nicht unterstützte Interaktionsart: {kind}',
|
|
599
|
+
|
|
600
|
+
// ---- tool activity summaries -------------------------------------------
|
|
601
|
+
'tool.run': '{command} ausführen',
|
|
602
|
+
'tool.askUser': 'Benutzer fragen',
|
|
603
|
+
'tool.askQuestions': '{count} Fragen stellen',
|
|
31
604
|
|
|
32
|
-
// ----
|
|
33
|
-
'
|
|
34
|
-
|
|
35
|
-
'splash.shortcutThinking': 'Denken',
|
|
36
|
-
|
|
37
|
-
// ---- header / sidebar / status row -------------------------------------
|
|
38
|
-
// ---- command-line help (dsh --profile tui --help) -----------------------
|
|
39
|
-
'startup.description': 'Startet die Terminal-Oberfläche von DeepSeek Harness.',
|
|
40
|
-
'startup.helpOption': 'diese Hilfe anzeigen',
|
|
41
|
-
'startup.resume': 'eine vorhandene gespeicherte Sitzung per id fortsetzen',
|
|
42
|
-
'startup.model': 'Standard-Modell-id für neue Sitzungen',
|
|
43
|
-
'startup.provider': 'Standard-Provider-Route für neue Sitzungen',
|
|
44
|
-
'startup.sidebar': 'die Sitzungs-Seitenleiste anzeigen (Standard)',
|
|
45
|
-
'startup.noSidebar': 'ohne Seitenleiste starten',
|
|
46
|
-
'startup.examples': 'Beispiele:',
|
|
47
|
-
'startup.exampleFresh': 'eine neue Sitzung starten',
|
|
48
|
-
'startup.exampleResume': 'eine gespeicherte Sitzung fortsetzen',
|
|
49
|
-
|
|
50
|
-
'header.workspace': 'ARBEITSBEREICH',
|
|
51
|
-
'sidebar.sessions': 'SITZUNGEN',
|
|
52
|
-
'sidebar.recent': 'LETZTE',
|
|
53
|
-
'sidebar.newSession': '+ Neue Sitzung',
|
|
54
|
-
'status.model': 'Modell',
|
|
55
|
-
'status.draftTokens': '{count} Entw.-Tok',
|
|
56
|
-
'status.ctrlP': 'ctrl+p Befehle',
|
|
57
|
-
'status.interrupt': 'Abbruch: ctrl+c',
|
|
58
|
-
|
|
59
|
-
// ---- composer command hints --------------------------------------------
|
|
60
|
-
'hint.help': 'Hilfe anzeigen',
|
|
61
|
-
'hint.settings': 'Einstellungen öffnen',
|
|
62
|
-
'hint.new': 'neue Sitzung',
|
|
63
|
-
'hint.resume': 'Sitzung fortsetzen',
|
|
64
|
-
'hint.model': 'Modell wählen',
|
|
65
|
-
'hint.provider': 'Anbieter wählen',
|
|
66
|
-
'hint.rewind': 'Rückspulen',
|
|
67
|
-
'hint.stats': 'Sitzungsstatistik & Tokenverbrauch',
|
|
68
|
-
'hint.clear': 'Ansicht leeren',
|
|
69
|
-
'hint.cancel': 'laufende Runde abbrechen',
|
|
70
|
-
'hint.quit': 'beenden',
|
|
71
|
-
'hint.compact': 'Kontext verdichten',
|
|
72
|
-
'hint.goal': 'Ziel verwalten',
|
|
73
|
-
|
|
74
|
-
// ---- transcript blocks --------------------------------------------------
|
|
75
|
-
'transcript.turns.one': '{count} Runde',
|
|
76
|
-
'transcript.turns.other': '{count} Runden',
|
|
77
|
-
'transcript.steps.one': '{count} Schritt',
|
|
78
|
-
'transcript.steps.other': '{count} Schritte',
|
|
79
|
-
'transcript.thinking': ' Denken',
|
|
80
|
-
'transcript.streaming': ' · streamt…',
|
|
81
|
-
'transcript.steeringBadge': ' ⟲ Eingriff',
|
|
82
|
-
'transcript.tasks': 'Aufgaben',
|
|
83
|
-
'transcript.systemPrompt': ' Systemprompt',
|
|
84
|
-
'transcript.pendingInput': ' wartende Eingabe · ',
|
|
85
|
-
'transcript.steering': ' Eingriff',
|
|
86
|
-
'transcript.queued': ' in Warteschlange',
|
|
87
|
-
'note.systemReminder': 'system-reminder',
|
|
88
|
-
'note.compaction': 'Kompaktierung',
|
|
89
|
-
|
|
90
|
-
// ---- images and mermaid -------------------------------------------------
|
|
91
|
-
'image.attachment': '🖼 Bildanhang',
|
|
92
|
-
'image.rendering': '⏳ Bild wird gerendert…',
|
|
93
|
-
'image.renderFailed': '⚠ Bilddarstellung fehlgeschlagen · {error}',
|
|
94
|
-
'image.mermaidRendering': '⏳ Mermaid-Diagramm wird gerendert…',
|
|
95
|
-
'image.mermaidTooWide': '↔ Mermaid-Diagramm braucht {width} Spalten, dieser Bereich hat {budget}',
|
|
96
|
-
'image.altFallback': 'Bild',
|
|
97
|
-
|
|
98
|
-
// ---- composer / approval prompt ----------------------------------------
|
|
99
|
-
'composer.imageHint': 'Eingefügtes Bild: multimodales Modell/Plugin oder deepseek-v4-flash-vision-exp verwenden, sonst kann das Bild nicht gelesen werden',
|
|
100
|
-
'composer.approval': 'Freigabe · ',
|
|
101
|
-
'composer.summary': 'Zusammenfassung · ',
|
|
102
|
-
'composer.origin': 'Herkunft · ',
|
|
103
|
-
'composer.risk': 'Risiko · ',
|
|
104
|
-
'composer.approvalHint': 'y erlauben · n ablehnen · Esc abbrechen',
|
|
105
|
-
'risk.low': 'niedrig',
|
|
106
|
-
'risk.medium': 'mittel',
|
|
107
|
-
'risk.high': 'hoch',
|
|
108
|
-
'composer.effortHint': 'Tab / ←/→ anpassen · Esc schließen',
|
|
109
|
-
|
|
110
|
-
// ---- right status rail --------------------------------------------------
|
|
111
|
-
'rail.model': 'MODELL',
|
|
112
|
-
'rail.thinking': 'DENKEN',
|
|
113
|
-
'rail.context': 'KONTEXT',
|
|
114
|
-
'rail.session': 'SITZUNG',
|
|
115
|
-
'rail.goal': 'ZIEL',
|
|
116
|
-
'rail.subagents': 'SUBAGENTEN',
|
|
117
|
-
'rail.noData': '—',
|
|
118
|
-
'rail.percentUsed': '{percent}% genutzt',
|
|
119
|
-
'rail.tokens': '~{used} / {window} Tokens',
|
|
120
|
-
'rail.cacheHit': 'Cache {percent}% Treffer',
|
|
121
|
-
'rail.breakdown': 'System {system} · Tools {tools} · Nachrichten {messages}',
|
|
122
|
-
'rail.contextPending': 'sichtbar, sobald Nutzung gemeldet wird',
|
|
123
|
-
'rail.subagentCounts': '{running} aktiv · {total} gesamt',
|
|
124
|
-
'rail.unreadable': '{label} (nicht lesbar)',
|
|
125
|
-
'rail.more': '… +{count} weitere',
|
|
126
|
-
'rail.round': ' · Runde {started}/{max}',
|
|
127
|
-
'goal.active': 'aktiv',
|
|
128
|
-
'goal.paused': 'pausiert',
|
|
129
|
-
'goal.blocked': 'blockiert',
|
|
130
|
-
'goal.complete': 'abgeschlossen',
|
|
131
|
-
|
|
132
|
-
// ---- session stats window ----------------------------------------------
|
|
133
|
-
'stats.title': 'Sitzungsstatistik',
|
|
134
|
-
'stats.hint': 'Streifen anklicken oder /stats',
|
|
135
|
-
'stats.usage': 'Nutzung',
|
|
136
|
-
'stats.duration': 'Dauer',
|
|
137
|
-
'stats.speed': 'Tempo',
|
|
138
|
-
'stats.tokens': 'Tokens',
|
|
139
|
-
'stats.cache': 'Cache',
|
|
140
|
-
'stats.context': 'Kontext',
|
|
141
|
-
'stats.noSteps': 'noch kein abgeschlossener Schritt',
|
|
142
|
-
'stats.llmTime': 'LLM {value}',
|
|
143
|
-
'stats.toolTime': 'Tools {value}',
|
|
144
|
-
'stats.ttft': 'TTFT Ø {value}',
|
|
145
|
-
'stats.tokensPerSecond': '{value} Tok/s',
|
|
146
|
-
'stats.cacheRate': 'Cache {percent}%',
|
|
147
|
-
'stats.inOut': 'ein {input} · aus {output}',
|
|
148
|
-
'stats.cacheDetail': '{percent}% Treffer · gelesen {read} · geschrieben {write} · verfehlt {miss}',
|
|
149
|
-
'stats.contextUsed': 'genutzt {percent}% ~{used} / {window}',
|
|
150
|
-
'stats.systemPrompt': 'Systemprompt',
|
|
151
|
-
'stats.tools': 'Tools',
|
|
152
|
-
'stats.messages': 'Nachrichten',
|
|
153
|
-
'stats.compositionUnavailable': 'Zusammensetzung nicht verfügbar',
|
|
154
|
-
'stats.contextPending': 'Kontextbelegung erscheint, sobald eine Anfrage Nutzung meldet',
|
|
155
|
-
|
|
156
|
-
// ---- questions modal ----------------------------------------------------
|
|
157
|
-
'questions.title': 'Frage',
|
|
158
|
-
'questions.titleOf': 'Frage {index} von {total}',
|
|
159
|
-
'questions.defer': 'Esc später',
|
|
160
|
-
'questions.range': '{from}-{to} von {total} PgUp/PgDn',
|
|
161
|
-
'questions.other': 'Andere: ',
|
|
162
|
-
'questions.answer': 'Antwort: ',
|
|
163
|
-
'questions.placeholder': 'eigene Antwort eingeben',
|
|
164
|
-
'questions.hintCustom': 'Enter bestätigen · Esc zurück',
|
|
165
|
-
'questions.hintMulti': 'Leertaste umschalten · Enter weiter · Hoch/Runter bewegen',
|
|
166
|
-
'questions.hintSingle': 'Enter auswählen · Hoch/Runter bewegen',
|
|
167
|
-
|
|
168
|
-
// ---- secret prompt ------------------------------------------------------
|
|
169
|
-
'secret.hint': 'Enter absenden · Esc abbrechen',
|
|
170
|
-
|
|
171
|
-
// ---- settings dialog chrome --------------------------------------------
|
|
172
|
-
'settings.title': 'Einstellungen',
|
|
173
|
-
'settings.menu': 'MENÜ',
|
|
174
|
-
'settings.shared': 'Geteilt mit DeepSeek Harness WebUI',
|
|
175
|
-
'settings.footerEdit': 'Enter speichern · Esc abbrechen',
|
|
176
|
-
'settings.footerMenu': '↑/↓ bewegen · Tab Menü · Enter auswählen · Esc zurück',
|
|
177
|
-
'settings.footerPlain': '↑/↓ bewegen · Enter auswählen · Esc zurück',
|
|
178
|
-
'settings.confirmHint': '{text} · Y / N',
|
|
179
|
-
'settings.confirmDefault': 'Y bestätigen · N abbrechen',
|
|
180
|
-
'settings.confirmDeleteSession': 'Ctrl+D erneut zum Löschen',
|
|
181
|
-
'settings.confirmChange': 'Diese Änderung bestätigen?',
|
|
182
|
-
'settings.deleteTwice': 'Ctrl+D erneut drücken zum Löschen ',
|
|
183
|
-
'settings.deleteMcpTwice': 'Entf erneut drücken zum Entfernen ',
|
|
184
|
-
'settings.noSession': 'keine Sitzung ausgewählt',
|
|
185
|
-
'settings.noSessions': 'keine Sitzungen verfügbar',
|
|
186
|
-
'settings.noMcp': 'kein MCP-Server ausgewählt',
|
|
187
|
-
'settings.noOptions': 'keine Optionen für {label}',
|
|
188
|
-
'settings.saved': 'in DSH-Einstellungen gespeichert',
|
|
189
|
-
'settings.providerRemoved': 'Anbieter entfernt',
|
|
190
|
-
'settings.conflict': 'Einstellungen anderswo geändert; neu geladen',
|
|
191
|
-
'settings.error': 'Einstellungen: {error}',
|
|
192
|
-
'settings.dshSettings': 'DSH-Einstellungen',
|
|
193
|
-
'settings.optionList': 'Enter auswählen · Esc zurück',
|
|
194
|
-
|
|
195
|
-
// ---- settings left menu -------------------------------------------------
|
|
196
|
-
'menu.main': 'Start',
|
|
197
|
-
'menu.model': 'Modell',
|
|
198
|
-
'menu.update': 'Update',
|
|
199
|
-
'menu.mcp': 'MCP',
|
|
200
|
-
|
|
201
|
-
// ---- settings rows: main tab -------------------------------------------
|
|
202
|
-
'settings.general': 'Allgemein',
|
|
203
|
-
'settings.graphics': 'Grafik',
|
|
204
|
-
'settings.sessions': 'Sitzungen',
|
|
205
|
-
'settings.system': 'System',
|
|
206
|
-
'settings.busyEnter': 'Enter bei Auslastung',
|
|
207
|
-
'settings.defaultPreset': 'Standard-Preset',
|
|
208
|
-
'settings.permissionPreset': 'Berechtigungs-Preset',
|
|
209
|
-
'settings.permissionDangerConfirm': 'Uneingeschränkten Tool- und Dateizugriff aktivieren?',
|
|
210
|
-
'settings.graphicsRendering': 'Grafikdarstellung',
|
|
211
|
-
'settings.noProtocolFallback': 'Fallback ohne Protokoll',
|
|
212
|
-
'settings.imageHeightCap': 'Max. Bildhöhe (Zeilen)',
|
|
213
|
-
'settings.mermaidRendering': 'Mermaid-Darstellung',
|
|
214
|
-
'settings.newSession': 'Neue Sitzung',
|
|
215
|
-
'settings.manageSessions': 'Sitzungen verwalten',
|
|
216
|
-
'settings.providerConfig': 'Anbieter-API-Konfiguration',
|
|
217
|
-
'settings.updateManager': 'Update-Verwaltung',
|
|
218
|
-
'settings.settingsFile': 'Einstellungsdatei',
|
|
219
|
-
'settings.language': 'Sprache',
|
|
220
|
-
'settings.languageSystem': 'System ({language})',
|
|
221
|
-
'settings.languageSaved': 'Sprache: {language}',
|
|
222
|
-
|
|
223
|
-
// ---- model tab ----------------------------------------------------------
|
|
224
|
-
'model.title': 'Modell',
|
|
225
|
-
'model.subtitle': 'Enter wählt ein gelistetes Modell als Standard',
|
|
226
|
-
'model.defaultSection': 'Standard',
|
|
227
|
-
'model.defaultProvider': 'Standardanbieter',
|
|
228
|
-
'model.defaultModel': 'Standardmodell',
|
|
229
|
-
'model.reasoning': 'Reasoning',
|
|
230
|
-
'model.providerUrl': 'Anbieter-URL',
|
|
231
|
-
'model.providerApiKey': 'Anbieter-API-Schlüssel',
|
|
232
|
-
'model.displayName': 'Anzeigename',
|
|
233
|
-
'model.wireProtocol': 'Übertragungsprotokoll',
|
|
234
|
-
'model.defaultImageInput': 'Standard-Bildeingabe',
|
|
235
|
-
'model.models': 'Modelle',
|
|
236
|
-
'model.fetch': 'abrufen…',
|
|
237
|
-
'model.selectedCount': '{count} ausgewählt',
|
|
238
|
-
'model.removeProvider': 'Anbieter entfernen',
|
|
239
|
-
'model.removeProviderConfirm': '{name} und zugehörige Zugangsdaten entfernen?',
|
|
240
|
-
'model.noModels': 'keine Modelle verfügbar',
|
|
241
|
-
'model.noModelsReturned': 'Anbieter hat keine Modelle geliefert',
|
|
242
|
-
'model.fetchUnavailable': 'Auto-Abruf nicht verfügbar — gespeicherte Modelle · Enter umschalten',
|
|
243
|
-
'model.fetchOk': 'automatisch abgerufen · Enter umschalten · Esc zurück',
|
|
244
|
-
'model.fetching': 'Modelle werden abgerufen…',
|
|
245
|
-
'model.autoFetching': 'automatischer Abruf…',
|
|
246
|
-
'model.credentialConfigured': 'konfiguriert ({source})',
|
|
247
|
-
'model.credentialMissing': 'nicht konfiguriert',
|
|
248
|
-
'model.defaultTag': 'Standard',
|
|
249
|
-
'model.providerUnavailable': 'Anbieter ist nicht mehr verfügbar',
|
|
250
|
-
'model.namespaceUnavailable': 'Anbieter-Einstellungsnamespace ist nicht verfügbar',
|
|
251
|
-
'model.apiKeyEmpty': 'API-Schlüssel darf nicht leer sein',
|
|
252
|
-
'model.credentialsUnavailable': 'Zugangsdaten-Dienst ist nicht verfügbar',
|
|
253
|
-
'model.noProviderModels': 'gewählter Anbieter hat keine verfügbaren Modelle',
|
|
254
|
-
|
|
255
|
-
// ---- MCP tab ------------------------------------------------------------
|
|
256
|
-
'mcp.title': 'MCP',
|
|
257
|
-
'mcp.subtitle': 'Enter bearbeiten · Entf entfernen · Esc zurück',
|
|
258
|
-
'mcp.editSubtitle': 'Enter bearbeiten · Esc zurück',
|
|
259
|
-
'mcp.servers': 'MCP-Server',
|
|
260
|
-
'mcp.empty': 'Kein MCP-Server konfiguriert',
|
|
261
|
-
'mcp.add': 'MCP-Server hinzufügen',
|
|
262
|
-
'mcp.scope': 'Bereich',
|
|
263
|
-
'mcp.scopeUserPrefix': 'Benutzer · {path}',
|
|
264
|
-
'mcp.scopePathPrefix': 'Pfad · {path}',
|
|
265
|
-
'mcp.configFiles': 'Konfigurationsdateien',
|
|
266
|
-
'mcp.userScope': 'Benutzer (alle Sitzungen)',
|
|
267
|
-
'mcp.secrets': 'Geheimnisse',
|
|
268
|
-
'mcp.secretsPlain': 'Klartext in den Konfigurationsdateien',
|
|
269
|
-
'mcp.loaded': 'geladen',
|
|
270
|
-
'mcp.notCreated': 'noch nicht erstellt',
|
|
271
|
-
'mcp.type.stdio': 'Lokaler Befehl',
|
|
272
|
-
'mcp.type.http': 'HTTP',
|
|
273
|
-
'mcp.type.sse': 'SSE',
|
|
274
|
-
'mcp.state.connected': '● verbunden',
|
|
275
|
-
'mcp.state.tools.one': '● {count} Tool',
|
|
276
|
-
'mcp.state.tools.other': '● {count} Tools',
|
|
277
|
-
'mcp.state.pending': '… verbinde',
|
|
278
|
-
'mcp.state.disabled': '○ deaktiviert',
|
|
279
|
-
'mcp.state.idle': '○ nicht verbunden',
|
|
280
|
-
'mcp.form.add': 'MCP-Server hinzufügen',
|
|
281
|
-
'mcp.form.edit': 'MCP-Server bearbeiten · {name}',
|
|
282
|
-
'mcp.titleAdd': 'MCP · hinzufügen',
|
|
283
|
-
'mcp.titleEdit': 'MCP · bearbeiten',
|
|
284
|
-
'mcp.field.name': 'Name',
|
|
285
|
-
'mcp.field.type': 'Typ',
|
|
286
|
-
'mcp.field.timeout': 'Timeout (ms)',
|
|
287
|
-
'mcp.field.command': 'Befehl',
|
|
288
|
-
'mcp.field.args': 'Argumente',
|
|
289
|
-
'mcp.field.env': 'Umgebung (JSON)',
|
|
290
|
-
'mcp.field.url': 'URL',
|
|
291
|
-
'mcp.field.headers': 'Header (JSON)',
|
|
292
|
-
'mcp.field.scope': 'Bereich',
|
|
293
|
-
'mcp.field.path': 'Pfad',
|
|
294
|
-
'mcp.field.enabled': 'Aktiviert',
|
|
295
|
-
'mcp.field.save': 'Speichern',
|
|
296
|
-
'mcp.field.remove': 'Entfernen',
|
|
297
|
-
'mcp.choice.stdio': 'Lokaler Befehl (stdio)',
|
|
298
|
-
'mcp.choice.http': 'HTTP (streamfähig)',
|
|
299
|
-
'mcp.choice.sse': 'SSE (Legacy-HTTP+SSE)',
|
|
300
|
-
'mcp.choice.scopeUser': 'Benutzer — alle Sitzungen',
|
|
301
|
-
'mcp.choice.scopePath': 'Pfad — Sitzungen unter einem Verzeichnis',
|
|
302
|
-
'mcp.removeConfirm': 'Diesen MCP-Server entfernen und trennen?',
|
|
303
|
-
'mcp.saved': 'MCP-Server gespeichert',
|
|
304
|
-
'mcp.added': 'MCP-Server hinzugefügt',
|
|
305
|
-
'mcp.removed': 'MCP-Server entfernt',
|
|
306
|
-
'mcp.error.name': 'Name muss 1-32 Zeichen aus Buchstaben, Ziffern, "-" oder "_" haben',
|
|
307
|
-
'mcp.error.duplicate': 'ein MCP-Server mit dem Namen "{name}" ist bereits konfiguriert',
|
|
308
|
-
'mcp.error.timeout': 'timeoutMs muss eine ganze Zahl zwischen 1 und {max} sein',
|
|
309
|
-
'mcp.error.pathNeeded': 'ein pfadbezogener Server braucht ein Verzeichnis',
|
|
310
|
-
'mcp.error.pathAbsolute': 'der Pfadbereich muss ein absolutes Verzeichnis sein',
|
|
311
|
-
'mcp.error.commandNeeded': 'ein stdio-Server braucht einen Befehl',
|
|
312
|
-
'mcp.error.urlParse': 'URL kann nicht geparst werden',
|
|
313
|
-
'mcp.error.urlScheme': 'URL muss http oder https verwenden',
|
|
314
|
-
'mcp.error.pathNotDir': 'der Pfadbereich ist kein Verzeichnis: {path}',
|
|
315
|
-
'mcp.error.configIsDir': 'der Konfigurationsdateipfad ist ein Verzeichnis: {path}',
|
|
316
|
-
'mcp.error.notFound': 'kein MCP-Server mit dem Namen "{name}" konfiguriert',
|
|
317
|
-
'mcp.error.documentGone': 'das Dokument, das "{name}" definiert, ist weg: {error}',
|
|
318
|
-
'mcp.error.noClient': 'der Host stellt keinen MCP-Client bereit',
|
|
319
|
-
'mcp.error.connectTimeout': 'Zeitüberschreitung beim Verbinden mit {name}',
|
|
320
|
-
'mcp.error.json': 'das Dokument ist kein gültiges JSON: {error}',
|
|
321
|
-
'mcp.error.jsonObject': 'das Dokument muss ein JSON-Objekt sein',
|
|
322
|
-
'mcp.error.serversObject': '"servers" muss ein JSON-Objekt sein',
|
|
323
|
-
'mcp.error.argsArray': 'Argumente müssen ein JSON-Array von Strings sein',
|
|
324
|
-
'mcp.error.argsTypes': 'Argumente müssen Strings oder Zahlen sein',
|
|
325
|
-
'mcp.error.argsUnclosed': 'Argumente enthalten ein nicht geschlossenes Anführungszeichen',
|
|
326
|
-
'mcp.error.envObject': '{label} muss ein JSON-Objekt sein',
|
|
327
|
-
'mcp.error.envValue': '{label}-Wert "{name}" muss ein String, eine Zahl oder ein boolescher Wert sein',
|
|
328
|
-
'mcp.error.header': 'ungültiger HTTP-Header "{name}"',
|
|
329
|
-
'mcp.error.envName': 'ungültiger Umgebungsname "{name}"',
|
|
330
|
-
|
|
331
|
-
// ---- rewind -------------------------------------------------------------
|
|
332
|
-
'rewind.title': 'Rückspulen',
|
|
333
|
-
'rewind.restoreTo': 'Auf den Stand davor zurücksetzen: {label}',
|
|
334
|
-
'rewind.restorePrompt': 'Unterhaltung auf den Stand zurücksetzen vor…',
|
|
335
|
-
'rewind.empty': 'Noch nichts zum Rückspulen.',
|
|
336
|
-
'rewind.option.conversation': 'Unterhaltung wiederherstellen',
|
|
337
|
-
'rewind.option.both': 'Unterhaltung und Dateien wiederherstellen',
|
|
338
|
-
'rewind.option.code': 'Dateien wiederherstellen',
|
|
339
|
-
'rewind.option.cancel': 'Abbrechen',
|
|
340
|
-
'rewind.current': '(aktuell)',
|
|
341
|
-
'rewind.noPoints': 'keine Benutzernachrichten zum Rückspulen',
|
|
342
|
-
'rewind.unknownPoint': 'unbekannter Rücksetzpunkt "{selector}" — Zahl oder last verwenden',
|
|
343
|
-
'rewind.noPoint': 'kein Rücksetzpunkt {n} — 1..{count}',
|
|
344
|
-
'rewind.notGit': 'kein Git-Worktree',
|
|
345
|
-
'rewind.noBackup': 'kein Backup-Ort',
|
|
346
|
-
'rewind.filesNotRestored': 'Dateien nicht wiederhergestellt',
|
|
347
|
-
'rewind.filesNotRestoredReason': 'Dateien nicht wiederhergestellt ({reason})',
|
|
348
|
-
'rewind.restored.one': '{count} verfolgte Datei aus HEAD wiederhergestellt',
|
|
349
|
-
'rewind.restored.other': '{count} verfolgte Dateien aus HEAD wiederhergestellt',
|
|
350
|
-
'rewind.removed.one': '{count} neue Datei entfernt',
|
|
351
|
-
'rewind.removed.other': '{count} neue Dateien entfernt',
|
|
352
|
-
'rewind.skipped': '{count} übersprungen',
|
|
353
|
-
'rewind.previousSaved': 'vorheriger Inhalt gespeichert in {path}',
|
|
354
|
-
'rewind.noChanges': 'keine Dateiänderungen nach diesem Punkt',
|
|
355
|
-
'rewind.image': '[Bild]',
|
|
356
|
-
'rewind.images': '[{count} Bilder]',
|
|
357
|
-
'rewind.emptyMessage': '(leer)',
|
|
358
|
-
|
|
359
|
-
// ---- update tab ---------------------------------------------------------
|
|
360
|
-
'update.title': 'Update',
|
|
361
|
-
'update.checking': 'Versionen werden geprüft…',
|
|
362
|
-
'update.fetching': 'Abruf aus der npm-Registry…',
|
|
363
|
-
'update.fetchingVersions': 'Versionen werden abgerufen…',
|
|
364
|
-
'update.versionsSubtitle': 'Enter herunterladen · Esc zurück',
|
|
365
|
-
'update.installed': 'Installiert',
|
|
366
|
-
'update.latest': 'Neueste (npm-Tag)',
|
|
367
|
-
'update.status': 'Status',
|
|
368
|
-
'update.versions': 'Versionen',
|
|
369
|
-
'update.selectVersion': 'Version wählen…',
|
|
370
|
-
'update.restartApply': 'Zum Anwenden von {version} neu starten',
|
|
371
|
-
'update.enterRestart': 'Enter neu starten',
|
|
372
|
-
'update.discard': 'Heruntergeladene {version} verwerfen',
|
|
373
|
-
'update.actions': 'Aktionen',
|
|
374
|
-
'update.checkNow': 'Jetzt prüfen',
|
|
375
|
-
'update.checkingShort': 'Prüfe…',
|
|
376
|
-
'update.startupCheck': 'Prüfung beim Start',
|
|
377
|
-
'update.profile': 'Profil',
|
|
378
|
-
'update.dshPackage': 'dsh (@deepseek-ai/dsh)',
|
|
379
|
-
'update.statusCorrupt': 'Installation beschädigt — unten neu installieren',
|
|
380
|
-
'update.statusError': 'Registry-Prüfung fehlgeschlagen: {error}',
|
|
381
|
-
'update.statusAvailable': 'Update verfügbar → {version}',
|
|
382
|
-
'update.statusUpToDate': 'Aktuell',
|
|
383
|
-
'update.statusNoStable': 'Keine stabile Version — unter Versionen wählen',
|
|
384
|
-
'update.notOnPath': 'nicht im PATH gefunden',
|
|
385
|
-
'update.subtitleStaged': '{package} {version} heruntergeladen — zum Anwenden neu starten',
|
|
386
|
-
'update.subtitleIdle': 'Enter auswählen · herunterladen, dann zum Anwenden neu starten',
|
|
387
|
-
'update.download': 'Herunterladen',
|
|
388
|
-
'update.contacting': 'Registry wird kontaktiert…',
|
|
389
|
-
'update.version': 'Version',
|
|
390
|
-
'update.savingTo': 'Speichern nach',
|
|
391
|
-
'update.escCancels': 'Esc bricht ab',
|
|
392
|
-
'update.restartApplyQ': '{label} {version} zum Anwenden neu starten? (bereits heruntergeladen)',
|
|
393
|
-
'update.downloadQ': '{label} {version} herunterladen und zum Anwenden neu starten?',
|
|
394
|
-
'update.localSwitch': ' — schaltet die lokale Installation auf eine Registry-Version um',
|
|
395
|
-
'update.downloaded': 'heruntergeladen · zum Anwenden neu starten',
|
|
396
|
-
'update.downloadedToast': '{label} {version} heruntergeladen · im Update-Tab anwenden',
|
|
397
|
-
'update.downloadedConfirm': 'Heruntergeladen zum Anwenden von {label} {version} neu starten? (y/n)',
|
|
398
|
-
'update.alreadyDownloadedConfirm': 'Bereits heruntergeladen · zum Anwenden von {label} {version} neu starten? (y/n)',
|
|
399
|
-
'update.downloadCancelled': 'Download abgebrochen',
|
|
400
|
-
'update.downloadFailed': 'Download fehlgeschlagen: {error}',
|
|
401
|
-
'update.stagedGone': 'der bereitgestellte Download ist weg — Version erneut wählen',
|
|
402
|
-
'update.locks.one': 'kann nicht anwenden, während dsh in {count} weiterem Prozess läuft — schließen und erneut versuchen',
|
|
403
|
-
'update.locks.other': 'kann nicht anwenden, während dsh in {count} weiteren Prozessen läuft — schließen und erneut versuchen',
|
|
404
|
-
'update.noNpm': 'Anwenden nicht möglich: npm wurde nicht gefunden',
|
|
405
|
-
'update.noDshCli': 'Anwenden nicht möglich: die dsh-CLI wurde nicht gefunden',
|
|
406
|
-
'update.installerFailed': 'Installer kann nicht gestartet werden — dsh neu starten, um {label} anzuwenden',
|
|
407
|
-
'update.applying': '{label} wird angewendet · Beenden, Neustart…',
|
|
408
|
-
'update.stagedDiscarded': 'bereitgestellter Download verworfen',
|
|
409
|
-
'update.tagCached': 'gecacht',
|
|
410
|
-
'update.tagStaged': 'bereitgestellt',
|
|
411
|
-
'update.installFailed': 'Installation fehlgeschlagen (Exit {code}) — unter Versionen erneut versuchen',
|
|
412
|
-
'update.installFailedRetry': 'Update → dsh-oc-tui → Versionen öffnen und eine Version zum erneuten Download wählen',
|
|
413
|
-
'update.installUnreadable': 'Installation meldete Erfolg, aber installiert ist {installed} (erwartet {expected}) — Reparatur: {repair}',
|
|
414
|
-
'update.registryUnreachable': 'Registry nicht erreichbar: {error}',
|
|
415
|
-
'update.notOnRegistry': '{package} ist nicht in der Registry',
|
|
416
|
-
'update.registryHttp': 'Registry gab HTTP {status} für {package} zurück',
|
|
417
|
-
'update.noTarballUrl': 'Registry-Antwort enthält keine Tarball-URL',
|
|
418
|
-
'update.downloadHttp': 'Download fehlgeschlagen: HTTP {status} für {url}',
|
|
419
|
-
'update.downloadEmpty': 'Download fehlgeschlagen: leerer Antwortinhalt',
|
|
420
|
-
'update.integrityFailed': 'Integritätsprüfung für {file} fehlgeschlagen — Download verworfen',
|
|
421
|
-
'update.npmMissing': 'npm nicht im PATH gefunden',
|
|
422
|
-
'update.npmViewFailed': 'npm view {package} endete mit {code}',
|
|
423
|
-
'update.timedOut': '\n(Zeitüberschreitung nach {ms}ms)',
|
|
424
|
-
'update.noOutput': '(keine Ausgabe)',
|
|
425
|
-
|
|
426
|
-
// ---- commands -----------------------------------------------------------
|
|
427
|
-
'command.settings': 'Die Einstellungsseiten der TUI öffnen',
|
|
428
|
-
'command.help': 'Tasten- und Befehlsreferenz der TUI anzeigen',
|
|
429
|
-
'command.stats': 'Token- und Cache-Statistik der Sitzung anzeigen',
|
|
430
|
-
'command.new': 'Eine neue Sitzung starten',
|
|
431
|
-
'command.resume': 'Eine gespeicherte Sitzung fortsetzen',
|
|
432
|
-
'command.clear': 'Das Transkript leeren',
|
|
433
|
-
'command.cancel': 'Die laufende Runde abbrechen',
|
|
434
|
-
'command.rewind': 'Die Sitzung auf einen früheren Punkt zurücksetzen',
|
|
435
|
-
'command.quit': 'Die TUI verlassen',
|
|
436
|
-
|
|
437
|
-
// ---- help overlay -------------------------------------------------------
|
|
438
|
-
'help.title': 'DeepSeek Harness TUI — Hilfe',
|
|
439
|
-
'help.enter': 'Enter',
|
|
440
|
-
'help.enterDesc': 'Nachricht senden',
|
|
441
|
-
'help.ctrlEnter': 'Ctrl+Enter',
|
|
442
|
-
'help.ctrlEnterDesc': 'Zeilenumbruch einfügen',
|
|
443
|
-
'help.ctrlC': 'Ctrl+C',
|
|
444
|
-
'help.ctrlCDesc': 'laufende Runde abbrechen; erneut drücken zum Beenden',
|
|
445
|
-
'help.ctrlP': 'Ctrl+P',
|
|
446
|
-
'help.ctrlPDesc': 'Einstellungen öffnen',
|
|
447
|
-
'help.ctrlE': 'Ctrl+E',
|
|
448
|
-
'help.ctrlEDesc': 'Denkregler umschalten',
|
|
449
|
-
'help.tab': 'Tab',
|
|
450
|
-
'help.tabDesc': 'Denkintensität durchschalten',
|
|
451
|
-
'help.ctrlN': 'Ctrl+N',
|
|
452
|
-
'help.ctrlNDesc': 'neue Sitzung',
|
|
453
|
-
'help.ctrlD': 'Ctrl+D',
|
|
454
|
-
'help.ctrlDDesc': 'Sitzung in "Sitzungen verwalten" löschen (zweimal drücken)',
|
|
455
|
-
'help.pg': 'PgUp / PgDn',
|
|
456
|
-
'help.pgDesc': 'Transkript scrollen',
|
|
457
|
-
'help.shiftArrows': 'Shift+↑/↓',
|
|
458
|
-
'help.shiftArrowsDesc': 'Statusleiste scrollen (breite Fenster)',
|
|
459
|
-
'help.upDown': 'Hoch / Runter',
|
|
460
|
-
'help.upDownDesc': 'Caret hoch/runter; Verlauf an den Rändern',
|
|
461
|
-
'help.mouse': 'Maus ziehen',
|
|
462
|
-
'help.mouseDesc': 'Text auswählen; Rechtsklick kopiert',
|
|
463
|
-
'help.wheel': 'Mausrad',
|
|
464
|
-
'help.wheelDesc': 'Transkript / Einstellungen scrollen',
|
|
465
|
-
'help.escEsc': 'Esc Esc',
|
|
466
|
-
'help.escEscDesc': 'Rückspulen-Auswahl',
|
|
467
|
-
'help.esc': 'Esc',
|
|
468
|
-
'help.escDesc': 'Overlay schließen · Runde abbrechen · Eingabe leeren',
|
|
469
|
-
'help.commands': 'Befehle:',
|
|
470
|
-
|
|
471
|
-
// ---- session manager / toasts ------------------------------------------
|
|
472
|
-
'session.newTitle': 'Neue Sitzung',
|
|
473
|
-
'session.noSaved': 'Keine gespeicherten Sitzungen',
|
|
474
|
-
'session.manageTitle': 'Sitzungen verwalten',
|
|
475
|
-
'session.manageSubtitle': 'Enter öffnen · Ctrl+D zweimal zum Löschen · Esc zurück',
|
|
476
|
-
'session.loading': 'Sitzungen werden geladen...',
|
|
477
|
-
'session.deleted': 'Sitzung {label} gelöscht',
|
|
478
|
-
'session.deleteFailed': 'Sitzung löschen: {error}',
|
|
479
|
-
'session.deleteNotFound': 'gespeichertes Sitzungsverzeichnis wurde nicht gefunden',
|
|
480
|
-
'session.deleteCancelled': 'Löschen abgebrochen',
|
|
481
|
-
'session.resumed': 'Sitzung {id} fortgesetzt',
|
|
482
|
-
'session.started': 'Sitzung {id} gestartet',
|
|
483
|
-
'session.openFailed': 'Sitzung konnte nicht geöffnet werden: {error}',
|
|
484
|
-
'session.forkSummary': '{label} von {parent} · {files}',
|
|
485
|
-
'session.forkDropped': ' · {count} geerbte wartende Eingaben verworfen',
|
|
486
|
-
'session.conversationOnly': 'nur Unterhaltung',
|
|
487
|
-
'session.rewindLabel': 'Rückspulen #{n}',
|
|
488
|
-
'session.files': 'Dateien: {summary}',
|
|
489
|
-
'session.error': 'Fehler: {error}',
|
|
490
|
-
'session.interruptFirst': 'zuerst die laufende Runde abbrechen (/cancel)',
|
|
491
|
-
'session.interruptFirstEsc': 'zuerst die laufende Runde abbrechen (Esc oder /cancel)',
|
|
492
|
-
'session.startFirst': 'zuerst eine Sitzung starten',
|
|
493
|
-
'session.noReasoningLevels': 'aktuelles Modell bietet keine Reasoning-Stufen',
|
|
494
|
-
'session.settingsUnavailable': 'Einstellungen nicht verfügbar',
|
|
495
|
-
'session.interruptRequested': 'Abbruch angefordert',
|
|
496
|
-
'session.nothingToInterrupt': 'nichts abzubrechen',
|
|
497
|
-
'session.noSessionRunning': 'keine Sitzung läuft',
|
|
498
|
-
'session.promptCleared': 'Eingabe geleert',
|
|
499
|
-
'session.exitAgain': 'Ctrl+C erneut drücken zum Beenden',
|
|
500
|
-
'session.usageResume': 'Nutzung: /resume <sessionId>',
|
|
501
|
-
'session.currentModel': 'aktuelles Modell: {model}',
|
|
502
|
-
'session.modelSet': 'Modell auf {model} gesetzt (gilt für die nächste Anfrage)',
|
|
503
|
-
'session.currentProvider': 'aktueller Anbieter: {provider}',
|
|
504
|
-
'session.providerSet': 'Anbieter auf {provider} gesetzt (gilt für die nächste Anfrage)',
|
|
505
|
-
'session.unknownCommand': 'unbekannter Befehl /{name} — /help versuchen',
|
|
506
|
-
'session.queryMissing': 'Sitzungsabfrage ist in diesem Profil nicht eingebunden',
|
|
507
|
-
'session.listHeader': 'Sitzungen:',
|
|
508
|
-
'session.noPersisted': 'keine gespeicherten Sitzungen',
|
|
509
|
-
'session.listFailed': 'Sitzungen konnten nicht aufgelistet werden: {error}',
|
|
510
|
-
'session.modelNoImages': 'Modell "{model}" unterstützt keine Bildeingabe',
|
|
511
|
-
'session.imageAttachFailed': 'Bildanhängen fehlgeschlagen: {error}',
|
|
512
|
-
'session.attachmentsUnavailable': 'Anhang-Dienst nicht verfügbar; Bild kann nicht gelesen werden',
|
|
513
|
-
'session.copied.one': '{count} Zeile in die Zwischenablage kopiert',
|
|
514
|
-
'session.copied.other': '{count} Zeilen in die Zwischenablage kopiert',
|
|
515
|
-
'session.valueRequired': 'ein Wert ist erforderlich',
|
|
516
|
-
'session.minChars': 'mindestens {count} Zeichen',
|
|
517
|
-
'session.maxChars': 'höchstens {count} Zeichen',
|
|
518
|
-
'session.answerRequired': 'eine Option wählen oder eine Antwort eingeben',
|
|
519
|
-
'session.typeAnswer': 'eine Antwort eingeben oder Esc drücken',
|
|
520
|
-
'session.updatesAvailable': 'Updates: {list} — Ctrl+P → Update',
|
|
521
|
-
'session.versionsError': 'Versionen: {error}',
|
|
522
|
-
'session.mcpError': 'MCP: {error}',
|
|
523
|
-
'session.noClipboard': 'kein Pfad zur Zwischenablage verfügbar',
|
|
524
|
-
'session.unsupportedInteraction': 'nicht unterstützte Interaktionsart: {kind}',
|
|
525
|
-
|
|
526
|
-
// ---- tool activity summaries -------------------------------------------
|
|
527
|
-
'tool.run': '{command} ausführen',
|
|
528
|
-
'tool.askUser': 'Benutzer fragen',
|
|
529
|
-
'tool.askQuestions': '{count} Fragen stellen',
|
|
530
|
-
}
|
|
605
|
+
// ---- host diagnostics ----------------------------------------------------
|
|
606
|
+
'diagnostics.notice': 'Host-Diagnose in {path} protokolliert',
|
|
607
|
+
}
|