-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Expand file tree
/
Copy pathindex.ts
More file actions
992 lines (990 loc) · 54.6 KB
/
Copy pathindex.ts
File metadata and controls
992 lines (990 loc) · 54.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
import type { TranslationShape } from '../en-US';
// German locale.
// Translate values only; do not change keys, placeholders or structure.
export const deDE = {
common: {
search: "Suchen...",
create: "Neu",
new: "Neu",
cancel: "Abbrechen",
delete: "Löschen",
edit: "Bearbeiten",
theme: "Design",
signOut: "Abmelden",
noMatches: "Keine Treffer gefunden",
tryDifferentSearch: "Versuche es mit einem anderen Suchbegriff.",
light: "Hell",
dark: "Dunkel",
system: "System",
loading: "Laden...",
note: "Notiz",
insight: "Erkenntnis",
newSource: "Neue Quelle",
newNotebook: "Neues Notebook",
newPodcast: "Neuer Podcast",
language: "Sprache",
english: "Englisch",
chinese: "简体中文",
japanese: "日本語",
french: "Français",
russian: "Русский",
bengali: "বাংলা",
spanish: "Español",
catalan: "Català",
german: "Deutsch",
polish: "Polski",
turkish: "Türkçe",
source: "Quelle",
notebook: "Notebook",
podcast: "Podcast",
quickActions: "Schnellaktionen",
quickActionsDesc: "Navigation, Suche, Fragen, Design",
appName: "Open Notebook",
add: "Hinzufügen",
remove: "Entfernen",
confirm: "Bestätigen",
warning: "Warnung",
error: "Fehler",
success: "Erfolg",
model: "Modell",
back: "Zurück",
next: "Weiter",
done: "Fertig",
processing: "Verarbeitung...",
creating: "Erstellen...",
linked: "Verknüpft",
adding: "Hinzufügen...",
addSelected: "Ausgewählte hinzufügen",
customModel: "Benutzerdefiniertes Modell",
failed: "fehlgeschlagen",
current: "Aktuell",
save: "Speichern",
writeNote: "Notiz schreiben",
batchMode: "Stapelmodus",
optional: "Optional",
type: "Typ",
title: "Titel",
created: "Erstellt {{time}}",
updated: "Aktualisiert {{time}}",
actions: "Aktionen",
noResults: "Keine Ergebnisse",
references: "Referenzen",
refreshPage: "Bitte versuche, die Seite neu zu laden",
refresh: "Aktualisieren",
aiGenerated: "KI-generiert",
human: "Menschlich",
unknown: "Unbekannt",
notes: "Notizen",
chat: "Chat",
deleteForever: "Endgültig löschen",
connectionError: "Verbindungsfehler",
unableToConnect: "Keine Verbindung zum API-Server möglich",
retryConnection: "Verbindung erneut versuchen",
diagnosticInfo: "Diagnoseinformationen",
version: "Version",
built: "Build",
apiUrl: "API-URL",
frontendUrl: "Frontend-URL",
checkConsoleLogs: "Prüfe die Browserkonsole auf detaillierte Logs (suche nach 🔧 [Config]-Meldungen)",
yes: "Ja",
no: "Nein",
saving: "Speichern...",
description: "Beschreibung",
saveToNote: "In Notiz speichern",
copyToClipboard: "In Zwischenablage kopieren",
close: "Schließen",
insights: "Erkenntnisse",
progress: "Fortschritt",
deleting: "Löschen...",
created_label: "Erstellt",
updated_label: "Aktualisiert",
download: "Herunterladen",
saveChanges: "Änderungen speichern",
name: "Name",
default: "Standard",
nameRequired: "Name ist erforderlich",
modelConfiguration: "Modellkonfiguration",
resetToDefault: "Auf Standard zurücksetzen",
reasoning: "Denkprozess",
searchTerms: "Suchbegriffe",
strategy: "Strategie",
individualAnswers: "Einzelantworten ({{count}})",
finalAnswer: "Endgültige Antwort",
notebookLabel: "Notebook: {{name}}",
itemNotFound: "{{type}} konnte nicht gefunden werden",
contentUnavailable: {
notFoundTitle: "Dieser Inhalt existiert nicht mehr",
notFoundDescription: "Er wurde möglicherweise gelöscht. Verweise in älteren Nachrichten können auf inzwischen entfernte Inhalte zeigen.",
errorTitle: "Dieser Inhalt konnte nicht geladen werden",
errorDescription: "Beim Laden ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
},
accessibility: {
transformationViews: "Transformationsansichten",
searchKB: "Wissensbasis fragen oder durchsuchen",
enterQuestion: "Gib deine Frage an die Wissensbasis ein",
enterSearch: "Suchanfrage eingeben",
searchKBBtn: "Wissensbasis durchsuchen",
podcastViews: "Podcast-Ansichten",
ytVideo: "YouTube-Video",
askResponse: "Antwort auf Frage",
searchNotebooks: "Notebooks suchen",
},
url: "URL",
errorDetails: "Fehlerdetails",
editTransformation: "Transformation bearbeiten",
retry: "Erneut versuchen",
traditionalChinese: "繁體中文",
portuguese: "Português",
completed: "abgeschlossen",
saveSuccess: "Erfolgreich gespeichert",
contextModes: {
off: "Nicht im Chat enthalten",
insights: "Nur Insights",
full: "Vollständiger Inhalt",
clickToCycle: "Klicken zum Wechseln",
},
clickToEdit: "Zum Bearbeiten klicken",
},
apiErrors: {
notebookNotFound: "Notebook nicht gefunden",
sourceNotFound: "Quelle nicht gefunden",
transformationNotFound: "Transformation nicht gefunden",
fileUploadFailed: "Datei-Upload fehlgeschlagen",
urlRequired: "Für den Typ Link ist eine URL erforderlich",
contentRequired: "Für den Typ Text ist Inhalt erforderlich",
invalidSourceType: "Ungültiger Quellentyp",
processingFailed: "Verarbeitung fehlgeschlagen",
failedToQueue: "Verarbeitung konnte nicht in die Warteschlange gestellt werden",
invalidSortBy: "Sortierfeld muss type, title, created, updated, insights_count oder embedded sein",
invalidSortOrder: "Sortierreihenfolge muss „asc“ oder „desc“ sein",
accessDenied: "Zugriff auf Datei verweigert",
fileNotFoundOnServer: "Datei auf dem Server nicht gefunden",
searchFailed: "Suche fehlgeschlagen",
askFailed: "Frage konnte nicht verarbeitet werden",
pleaseEnterQuestion: "Bitte gib eine Frage ein",
pleaseConfigureModels: "Bitte konfiguriere alle erforderlichen Modelle",
failedToCreateSession: "Sitzung konnte nicht erstellt werden",
failedToUpdateSession: "Sitzung konnte nicht aktualisiert werden",
failedToDeleteSession: "Sitzung konnte nicht gelöscht werden",
failedToSendMessage: "Nachricht konnte nicht gesendet werden",
unauthorized: "Nicht autorisierter Zugriff. Bitte prüfe dein Passwort",
invalidPassword: "Ungültiges Passwort",
embeddingModelRequired: "Diese Funktion benötigt ein Embedding-Modell. Bitte konfiguriere eines im Bereich Modelle.",
strategyModelNotFound: "Strategiemodell nicht gefunden",
answerModelNotFound: "Antwortmodell nicht gefunden",
finalAnswerModelNotFound: "Modell für die finale Antwort nicht gefunden",
noAnswerGenerated: "Es konnte keine Antwort erzeugt werden",
genericError: "Es ist ein unerwarteter Fehler aufgetreten",
},
connectionErrors: {
apiTitle: "Keine Verbindung zum API-Server möglich",
apiDesc: "Der Open Notebook API-Server konnte nicht erreicht werden",
dbTitle: "Datenbankverbindung fehlgeschlagen",
dbDesc: "Der API-Server läuft, aber die Datenbank ist nicht erreichbar",
troubleshooting: "Das bedeutet normalerweise:",
apiUnreachable1: "Der API-Server läuft nicht",
apiUnreachable2: "Der API-Server läuft unter einer anderen Adresse",
apiUnreachable3: "Probleme mit der Netzwerkverbindung",
dbFailed1: "SurrealDB läuft nicht",
dbFailed2: "Die Datenbankverbindung ist falsch konfiguriert",
dbFailed3: "Netzwerkprobleme zwischen API und Datenbank",
quickFixes: "Schnelle Lösungen:",
setApiUrl: "Setze die Umgebungsvariable API_URL:",
checkSurreal: "Prüfe, ob SurrealDB läuft:",
seeDocumentation: "Ausführliche Einrichtungsanweisungen findest du hier:",
docLink: "Open Notebook-Dokumentation",
showTechnical: "Technische Details anzeigen",
attemptedUrl: "Versuchte URL",
message: "Meldung",
technicalDetails: "Technische Details",
stackTrace: "Stacktrace",
retryLabel: "Verbindung erneut versuchen",
retryHint: "Drücke R oder klicke auf den Button, um es erneut zu versuchen",
dockerLabel: "Für Docker",
localDevLabel: "Für lokale Entwicklung",
},
auth: {
loginTitle: "Open Notebook",
loginDesc: "Gib dein Passwort ein, um auf die Anwendung zuzugreifen",
passwordPlaceholder: "Passwort",
signingIn: "Anmelden...",
signIn: "Anmelden",
connectErrorHint: "Keine Verbindung zum Server möglich. Bitte prüfe, ob die API läuft.",
},
navigation: {
collect: "Sammeln",
process: "Verarbeiten",
create: "Erstellen",
manage: "Verwalten",
sources: "Quellen",
notebooks: "Notebooks",
askAndSearch: "Fragen und Suchen",
podcasts: "Podcasts",
models: "Modelle",
transformations: "Transformationen",
transformation: "Transformation",
settings: "Einstellungen",
advanced: "Erweitert",
nav: "Navigation",
language: "Sprache wechseln",
theme: "Design",
ask: "Fragen",
},
notebooks: {
title: "Notebooks",
newNotebook: "Neues Notebook",
searchPlaceholder: "Notebooks suchen...",
archived: "Archiviert",
archive: "Archivieren",
unarchive: "Aus Archiv wiederherstellen",
deleteNotebook: "Notebook löschen",
deleteNotebookDesc: "Möchtest du „{{name}}“ wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
deleteNotebookLoading: "Löschvorschau wird geladen...",
deleteNotebookNotes: "{{count}} Notiz(en) werden dauerhaft gelöscht.",
deleteNotebookNoNotes: "Keine Notizen zum Löschen vorhanden.",
deleteNotebookExclusiveSources: "{{count}} Quelle(n) existieren nur in diesem Notebook.",
deleteNotebookSharedSources: "{{count}} Quelle(n) werden auch in anderen Notebooks verwendet und nur aus diesem Notebook entfernt.",
deleteNotebookNoSources: "Keine Quellen in diesem Notebook.",
deleteExclusiveSourcesLabel: "Exklusive Quellen löschen",
keepExclusiveSourcesLabel: "Verknüpfung lösen und behalten",
activeNotebooks: "Aktive Notebooks",
archivedNotebooks: "Archivierte Notebooks",
tileView: "Kachelansicht",
listView: "Listenansicht",
notFound: "Notebook nicht gefunden",
notFoundDesc: "Das angeforderte Notebook existiert nicht.",
updated: "Aktualisiert",
namePlaceholder: "Notebook-Name",
addDescription: "Beschreibung hinzufügen...",
noNotesYet: "Noch keine Notizen",
deleteNote: "Notiz löschen",
deleteNoteConfirm: "Möchtest du diese Notiz wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
noteCreatedSuccess: "Notiz erfolgreich erstellt",
failedToCreateNote: "Notiz konnte nicht erstellt werden",
noteUpdatedSuccess: "Notiz erfolgreich aktualisiert",
failedToUpdateNote: "Notiz konnte nicht aktualisiert werden",
noteDeletedSuccess: "Notiz erfolgreich gelöscht",
failedToDeleteNote: "Notiz konnte nicht gelöscht werden",
createNew: "Neues Notebook erstellen",
createNewDesc: "Gib einen Namen und optional eine Beschreibung ein, um zu starten.",
descPlaceholder: "Füge hier weitere Informationen zu diesem Notebook hinzu...",
createSuccess: "Notebook erfolgreich erstellt",
updateSuccess: "Notebook erfolgreich aktualisiert",
deleteSuccess: "Notebook erfolgreich gelöscht",
recentlyViewed: "Zuletzt angesehen",
toggleRecentlyViewed: "Zuletzt angesehen ein-/ausblenden",
recentlyViewedNotebook: "Notebook",
recentlyViewedSource: "Quelle",
lastViewed: "Angesehen {{time}}",
},
sources: {
newSource: "Neue Quelle",
bulkContext: "Kontext",
includeAllInContext: "Alle in den Kontext aufnehmen",
includeAllInsights: "Alle aufnehmen (nur Erkenntnisse)",
includeAllFull: "Alle aufnehmen (vollständiger Inhalt)",
excludeAllFromContext: "Alle aus dem Kontext ausschließen",
title: "Quellen",
add: "Quelle hinzufügen",
addNew: "Neue Quelle hinzufügen",
addExisting: "Vorhandene Quelle hinzufügen",
delete: "Quelle löschen",
statusPreparing: "Wird vorbereitet",
statusQueued: "In Warteschlange",
statusProcessing: "Wird verarbeitet",
statusCompleted: "Abgeschlossen",
statusFailed: "Fehlgeschlagen",
statusPreparingDesc: "Verarbeitung wird vorbereitet",
statusQueuedDesc: "Wartet auf Verarbeitung",
statusProcessingDesc: "Wird gerade verarbeitet",
statusCompletedDesc: "Erfolgreich verarbeitet",
statusFailedDesc: "Verarbeitung fehlgeschlagen",
failedToLoad: "Quellen konnten nicht geladen werden",
allSourcesDesc: "Hier findest du alle deine Quellen. Du kannst neue Quellen hinzufügen oder vorhandene verwalten.",
allSources: "Alle Quellen",
insights: "Erkenntnisse",
yes: "Ja",
no: "Nein",
loadingMore: "Weitere werden geladen...",
noSourcesYet: "Noch keine Quellen vorhanden",
allSourcesDescShort: "Hier findest du alle deine Quellen.",
cannotSaveNoteNoNotebook: "Notiz kann nicht gespeichert werden: Notebook-ID nicht verfügbar",
createFirstSource: "Füge deine erste Quelle hinzu, um deine Wissensbasis aufzubauen.",
deleteSourceConfirm: "Möchtest du diese Quelle wirklich löschen?",
deleteConfirm: "Möchtest du das wirklich löschen?",
deleteConfirmWithTitle: "Möchtest du „{{title}}“ wirklich löschen?",
deleteSuccess: "Quelle erfolgreich gelöscht. Hinweis: Um die Datei auch aus dem Speicher zu löschen, musst du in den Einstellungen die Option „Datei löschen“ aktivieren.",
failedToDelete: "Quelle konnte nicht gelöscht werden",
sourceQueued: "Quelle eingereiht",
sourceQueuedDesc: "Quelle wurde zur Hintergrundverarbeitung eingereicht. Den Fortschritt kannst du in der Quellenliste verfolgen.",
sourceAddedSuccess: "Quelle erfolgreich hinzugefügt",
failedToAddSource: "Quelle konnte nicht hinzugefügt werden",
sourceUpdatedSuccess: "Quelle erfolgreich aktualisiert",
failedToUpdateSource: "Quelle konnte nicht aktualisiert werden",
sourceDeletedSuccess: "Quelle erfolgreich gelöscht",
failedToDeleteSource: "Quelle konnte nicht gelöscht werden",
fileUploadedSuccess: "Datei erfolgreich hochgeladen",
failedToUploadFile: "Datei konnte nicht hochgeladen werden",
sourceRequeued: "Quelle erneut eingereiht",
sourceRequeuedDesc: "Die Quelle wurde erneut zur Verarbeitung in die Warteschlange gestellt.",
failedToRetry: "Erneuter Versuch fehlgeschlagen",
sourcesAddedToNotebook: "{{count}} Quelle(n) zum Notebook hinzugefügt",
failedToAddSourcesToNotebook: "Quellen konnten nicht zum Notebook hinzugefügt werden",
partialAddSuccess: "{{success}} Quelle(n) hinzugefügt, {{failed}} fehlgeschlagen",
sourceRemovedFromNotebook: "Quelle erfolgreich aus dem Notebook entfernt",
failedToRemoveSourceFromNotebook: "Quelle konnte nicht aus dem Notebook entfernt werden",
removeConfirm: "Möchtest du dies wirklich aus dem Notebook entfernen?",
checking: "Wird geprüft...",
untitledSource: "Unbenannte Quelle",
maxItems: "max. {{count}}",
insightsCount: "{{count}} Erkenntnisse",
details: "Details",
detailsTitle: "Quellendetails",
content: "Inhalt",
metadata: "Metadaten",
type: {
link: "Link",
file: "Datei",
text: "Text",
},
id: "Quellen-ID",
topics: "Themen",
embedded: "Eingebettet",
notEmbedded: "Nicht eingebettet",
embedContent: "Inhalt einbetten",
embedding: "Wird eingebettet...",
alreadyEmbedded: "Bereits eingebettet",
downloadFile: "Datei herunterladen",
fileUnavailable: "Datei nicht verfügbar",
preparing: "Wird vorbereitet...",
generateNewInsight: "Neue Erkenntnis erzeugen",
selectTransformation: "Transformation auswählen...",
noInsightsYet: "Noch keine Erkenntnisse vorhanden",
createFirstInsight: "Erzeuge deine erste Erkenntnis mit einer der obigen Transformationen",
viewInsight: "Erkenntnis anzeigen",
deleteInsight: "Erkenntnis löschen",
deleteInsightConfirm: "Möchtest du diese Erkenntnis wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
insightGenerationStarted: "Erzeugung der Erkenntnis gestartet. Sie erscheint in Kürze.",
editNote: "Notiz bearbeiten",
createNote: "Notiz erstellen",
addTitle: "Titel hinzufügen...",
untitledNote: "Unbenannte Notiz",
writeNotePlaceholder: "Schreibe den Inhalt deiner Notiz hier hinein...",
saveNote: "Notiz speichern",
createNoteBtn: "Notiz erstellen",
createFirstNote: "Erstelle deine erste Notiz, um Erkenntnisse und Beobachtungen festzuhalten.",
urlLabel: "URL(s) *",
fileLabel: "Datei(en) *",
textContentLabel: "Textinhalt *",
enterUrlsPlaceholder: "URLs eingeben, eine pro Zeile\nhttps://example.com/artikel1\nhttps://example.com/artikel2",
batchUrlHint: "Füge mehrere URLs ein, jeweils eine pro Zeile, um sie gesammelt zu importieren",
invalidUrlsDetected: "Ungültige URLs gefunden:",
lineLabel: "Zeile {{line}}",
fixInvalidUrls: "Bitte korrigiere oder entferne ungültige URLs, um fortzufahren",
selectMultipleFilesHint: "Wähle mehrere Dateien für den Sammelimport aus. Unterstützt werden: Dokumente (PDF, DOC, DOCX, PPT, XLS, EPUB, TXT, MD), Medien (MP4, MP3, WAV, M4A), Bilder (JPG, PNG), Archive (ZIP)",
selectedFiles: "Ausgewählte Dateien:",
textPlaceholder: "Füge deinen Inhalt hier ein oder schreibe ihn direkt hinein...",
htmlDetected: "HTML-Inhalt erkannt. Er wird nach der Verarbeitung in Markdown umgewandelt.",
titlePlaceholder: "Gib deiner Quelle einen aussagekräftigen Titel",
batchTitlesAuto: "Titel werden für jede Quelle automatisch erzeugt.",
batchCommonSettings: " Dieselben Notebooks und Transformationen werden auf alle Elemente angewendet.",
urlsCount: "{{count}} URL(s)",
filesCount: "{{count}} Datei(en)",
addSource: "Quelle hinzufügen",
notEmbeddedAlert: "Inhalt nicht eingebettet",
notEmbeddedDesc: "Dieser Inhalt wurde noch nicht für die Vektorsuche eingebettet. Einbettung ermöglicht erweiterte Suchfunktionen und eine bessere Auffindbarkeit der Inhalte.",
openOnYoutube: "Auf YouTube öffnen",
urlCopied: "URL in die Zwischenablage kopiert",
viewSource: "Quelle anzeigen",
noInsightSelected: "Keine Erkenntnis ausgewählt",
sourceInsight: "Quellen-Erkenntnis",
manageNotebooks: "Notebooks verwalten",
manageNotebooksDesc: "Verwalte, welche Notebooks diese Quelle enthalten",
noNotebooksAvailable: "Keine Notebooks verfügbar",
removeFromNotebook: "Aus Notebook entfernen",
retryProcessing: "Verarbeitung erneut versuchen",
refreshContent: "Inhalt aktualisieren",
deleteSource: "Quelle löschen",
retry: "Erneut versuchen",
addExistingTitle: "Vorhandene Quellen hinzufügen",
addExistingDesc: "Wähle vorhandene Quellen aus allen Notebooks aus, um sie dem aktuellen Notebook hinzuzufügen.",
searchPlaceholder: "Quellen nach Name oder URL suchen...",
noNotebooksFound: "Keine Notebooks gefunden.",
showingFirst100: "Die ersten 100 Quellen werden angezeigt. Nutze die Suche, um bestimmte Quellen zu finden.",
selectedCount: "{{count}} Quellen ausgewählt",
added: "Hinzugefügt am {{date}}",
addUrl: "URL hinzufügen",
uploadFile: "Datei hochladen",
enterText: "Text eingeben",
processDescription: "Inhalt wird verarbeitet und von der KI analysiert.",
processingFiles: "Deine Dateien werden verarbeitet...",
titleRequired: "Für Textinhalt ist ein Titel erforderlich",
titleGenerated: "Wenn du dieses Feld leer lässt, wird aus dem Inhalt ein Titel erzeugt",
batchCount: "Wird verarbeitet: {{count}} × {{type}}",
enableEmbedding: "Einbettung für die Suche aktivieren",
embeddingDesc: "Ermöglicht, dass diese Quelle in Vektorsuchen und KI-Abfragen gefunden wird",
embeddingAlways: "Einbettung automatisch aktiviert",
embeddingAlwaysDesc: "Deine Einstellungen sind so konfiguriert, dass Inhalte immer für die Vektorsuche eingebettet werden.",
embeddingNever: "Einbettung deaktiviert",
embeddingNeverDesc: "Deine Einstellungen sind so konfiguriert, dass Einbettung übersprungen wird. Die Vektorsuche ist für diese Quelle nicht verfügbar.",
changeInSettings: "Du kannst das in den Einstellungen ändern",
noContent: "Kein Inhalt verfügbar",
insightsDesc: "Erkenntnisse aus der Modellanalyse",
uploadedFile: "Hochgeladene Datei",
fileUnavailableDesc: "Diese Datei ist derzeit aus Gründen des Speichersystems nicht verfügbar.",
batchSuccess: "{{count}} Quelle(n) erfolgreich erstellt",
batchFailed: "Nicht alle {{count}} Quellen konnten erstellt werden",
batchPartial: "{{success}} erfolgreich, {{failed}} fehlgeschlagen",
submittingSource: "Quelle wird zur Verarbeitung übermittelt...",
processingBatchSources: "{{count}} Quellen werden verarbeitet. Das kann einen Moment dauern.",
processingSource: "Deine Quelle wird verarbeitet. Das kann einen Moment dauern.",
maxFilesAllowed: "Maximal {{count}} Dateien pro Sammelimport erlaubt",
},
chat: {
sessions: "Sitzungen",
sessionTitlePlaceholder: "Titel hier eingeben...",
noSessions: "Noch keine Chat-Sitzungen",
deleteSession: "Sitzung löschen",
deleteSessionDesc: "Möchtest du diese Chat-Sitzung wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
sendPlaceholder: "Frage etwas zu deinen Quellen...",
sessionsTitle: "Chat-Sitzungen",
chatWith: "Chat mit {{name}}",
startConversation: "Starte eine Unterhaltung zu {{type}}",
askQuestions: "Stelle Fragen, um den Inhalt besser zu verstehen",
pressToSend: "Drücke {{key}} zum Senden",
model: "Modell",
createToStart: "Erstelle eine Sitzung, um zu starten.",
chatWithNotebook: "Mit Notebook chatten",
unableToLoadChat: "Chat konnte nicht geladen werden",
noDescription: "Keine Beschreibung",
startByCreating: "Erstelle zuerst dein erstes Notebook, um deine Recherche zu organisieren.",
messagesCount: "{{count}} Nachrichten",
sessionCreated: "Chat-Sitzung erstellt",
sessionUpdated: "Sitzung aktualisiert",
sessionDeleted: "Sitzung gelöscht",
stop: "Stoppen",
},
searchPage: {
askAndSearch: "Fragen und Suchen",
chooseAMode: "Modus wählen",
askBeta: "Fragen (Beta)",
search: "Suchen",
askYourKb: "Wissensbasis fragen (Beta)",
askYourKbDesc: "Das KI-Modell beantwortet deine Anfrage anhand der Dokumente in deiner Wissensbasis.",
question: "Frage",
enterQuestionPlaceholder: "Frage eingeben...",
pressToSubmit: "Drücke Cmd/Ctrl+Enter zum Absenden",
noEmbeddingModel: "Du kannst diese Funktion nicht nutzen, weil kein Embedding-Modell ausgewählt ist. Bitte richte eines auf der Modellseite ein.",
usingCustomModels: "Benutzerdefinierte Modelle werden verwendet",
usingDefaultModels: "Standardmodelle werden verwendet",
advanced: "Erweitert",
strategy: "Strategie",
answer: "Antwort",
final: "Endantwort",
ask: "Fragen",
processing: "Wird verarbeitet...",
saveToNotebooks: "In Notebooks speichern",
searchDesc: "Durchsuche deine Wissensbasis nach bestimmten Stichwörtern oder Konzepten",
enterSearchPlaceholder: "Suchanfrage eingeben...",
pressToSearch: "Drücke Enter zum Suchen",
searchCoverageText: "Die Textsuche findet Quellen-Titel und -Inhalt, Erkenntnisse sowie Notiz-Titel und -Inhalt.",
searchCoverageVector: "Die Vektorsuche findet Quellen-Inhalt, Erkenntnisse und Notiz-Inhalt anhand semantischer Ähnlichkeit. Titel werden nicht berücksichtigt.",
searchType: "Suchtyp",
vectorSearchWarning: "Vektorsuche benötigt ein Embedding-Modell. Es ist nur Textsuche verfügbar.",
textSearch: "Textsuche",
vectorSearch: "Vektorsuche",
searchIn: "Suchen in",
searchSources: "Quellen durchsuchen",
searchNotes: "Notizen durchsuchen",
scopeNotebooks: "Notizbücher",
scopeAllNotebooks: "Alle Notizbücher",
scopeNotebooksSelected: "{{count}} ausgewählt",
scopeClear: "Zurücksetzen",
scopeHint: "Nichts auswählen, um die gesamte Wissensdatenbank zu durchsuchen.",
scopeNoNotebooks: "Noch keine Notizbücher.",
resultsFound: "{{count}} Ergebnisse gefunden",
matches: "Treffer ({{count}})",
noResultsFor: "Keine Ergebnisse für „{{query}}“ gefunden",
notSet: "Nicht festgelegt",
saveToNotebook: "In Notebook speichern",
saveSuccess: "Erfolgreich im Notebook gespeichert",
saveError: "Speichern im Notebook fehlgeschlagen",
selectNotebook: "Notebook auswählen",
searchAndAsk: "Suchen & Fragen",
searchResultsFor: "Suchergebnisse für „{{query}}“",
askAbout: "Fragen zu „{{query}}“",
orSearchKb: "Oder deine Wissensbasis durchsuchen",
saving: "Speichern...",
advancedModelTitle: "Erweiterte Modellauswahl",
advancedModelDesc: "Wähle bestimmte Modelle für jede Phase des Frageprozesses aus",
strategyModel: "Strategiemodell",
answerModel: "Antwortmodell",
finalAnswerModel: "Modell für finale Antwort",
selectStrategyPlaceholder: "Strategiemodell auswählen",
selectAnswerPlaceholder: "Antwortmodell auswählen",
selectFinalPlaceholder: "Modell für finale Antwort auswählen",
saveChanges: "Änderungen speichern",
processingQuestion: "Deine Frage wird verarbeitet...",
},
podcasts: {
generateEpisode: "Podcast-Episode erzeugen",
generateEpisodeDesc: "Wähle die Inhalte aus und konfiguriere die Episodendetails, bevor eine neue Podcast-Episode erzeugt wird.",
content: "Inhalt",
contentDesc: "Wähle Notebooks, Quellen und Notizen aus, die in diese Episode aufgenommen werden sollen.",
itemsSelected: "{{count}} Elemente ausgewählt",
tokens: "{{value}} Tokens",
chars: "{{value}} Zeichen",
loadingNotebooks: "Notebooks werden geladen...",
noNotebooksFoundInPodcasts: "Keine Notebooks gefunden. Erstelle ein Notebook und füge Inhalte hinzu, bevor du einen Podcast erzeugst.",
noContentSelected: "Kein Inhalt ausgewählt",
summary: "Zusammenfassung",
fullContent: "Vollständiger Inhalt",
untitledSource: "Unbenannte Quelle",
untitledNote: "Unbenannte Notiz",
episodeSettings: "Episodeneinstellungen",
episodeProfile: "Episodenprofil",
episodeProfilePlaceholder: "Episodenprofil auswählen",
episodeName: "Episodenname",
episodeNamePlaceholder: "z. B. KI und die Zukunft der Arbeit",
additionalInstructions: "Zusätzliche Anweisungen",
instructionsPlaceholder: "Zusätzliche Hinweise, die an das Episoden-Briefing angehängt werden sollen...",
generating: "Wird erzeugt...",
generate: "Erzeugen",
hostPlaceholder: "Moderator {{number}}",
profileRequired: "Episodenprofil erforderlich",
profileRequiredDesc: "Wähle ein Episodenprofil aus, bevor du einen Podcast erzeugst.",
nameRequired: "Episodenname erforderlich",
nameRequiredDesc: "Gib einen Namen für die Episode an.",
addContext: "Kontext hinzufügen",
addContextDesc: "Wähle mindestens eine Quelle oder Notiz aus, die in die Episode aufgenommen werden soll.",
generationFailed: "Podcast-Erzeugung fehlgeschlagen",
speakerProfileMissing: "Sprecherprofil fehlt",
speakerProfileMissingDesc: "Dieses Episodenprofil verweist auf ein Sprecherprofil, das nicht mehr existiert. Bearbeiten Sie das Profil und wählen Sie ein Sprecherprofil aus.",
speakerProfile: "Sprecherprofil",
usesSpeakerProfile: "Verwendet Sprecherprofil",
sources: "Quellen",
notes: "Notizen",
noSources: "In diesem Notebook sind keine Quellen verfügbar.",
noNotes: "In diesem Notebook sind keine Notizen verfügbar.",
selectMode: "Modus auswählen",
buildContextFailed: "Kontext konnte nicht erstellt werden. Bitte prüfe deine Auswahl.",
podcastTaskStarted: "Podcast-Aufgabe gestartet",
loadingProfiles: "Episodenprofile werden geladen...",
noProfilesFound: "Keine Episodenprofile gefunden. Erstelle ein Episodenprofil, bevor du einen Podcast erzeugst.",
listTitle: "Podcasts",
listDesc: "Behalte erzeugte Episoden im Blick und verwalte wiederverwendbare Profile.",
chooseAView: "Ansicht auswählen",
episodesTab: "Episoden",
templatesTab: "Profile",
overviewTitle: "Episodenübersicht",
overviewDesc: "Überwache Podcast-Erzeugungsaufträge und prüfe die fertigen Ergebnisse.",
generateBtn: "Podcast erzeugen",
total: "Gesamt",
processingLabel: "In Verarbeitung",
completedLabel: "Abgeschlossen",
failedLabel: "Fehlgeschlagen",
pendingLabel: "Ausstehend",
loadErrorTitle: "Episoden konnten nicht geladen werden",
loadErrorDesc: "Die neuesten Podcast-Episoden konnten nicht abgerufen werden. Versuche es gleich erneut.",
loadingEpisodes: "Episoden werden geladen…",
noEpisodesYet: "Noch keine Podcast-Episoden. Erzeuge deine erste Episode über die Chat-Oberflächen eines Notebooks oder einer Quelle.",
statusRunningTitle: "Aktuell in Verarbeitung",
statusRunningDesc: "Episoden, deren Inhalte gerade erzeugt werden.",
statusPendingTitle: "In Warteschlange / ausstehend",
statusPendingDesc: "Eingereichte Episoden, die auf den Start der Verarbeitung warten.",
statusCompletedTitle: "Abgeschlossene Episoden",
statusCompletedDesc: "Bereit zum Prüfen, Herunterladen oder Veröffentlichen.",
statusFailedTitle: "Fehlgeschlagene Episoden",
statusFailedDesc: "Episoden, bei deren Erzeugung Probleme aufgetreten sind.",
templatesWorkspaceTitle: "Profil-Arbeitsbereich",
templatesWorkspaceDesc: "Erstelle wiederverwendbare Episoden- und Sprecherkonfigurationen für schnelle Podcast-Produktion.",
howTemplatesPowerTitle: "Wie Profile die Podcast-Erzeugung steuern",
howTemplatesPowerDesc: "Profile teilen den Podcast-Workflow in zwei wiederverwendbare Bausteine. Kombiniere sie beliebig, wenn du eine neue Episode erzeugst.",
episodeProfilesSetFormat: "Episodenprofile legen das Format fest",
episodeProfilesList1: "Lege die Anzahl der Segmente fest und wie die Geschichte aufgebaut ist",
episodeProfilesList2: "Wähle die Sprachmodelle für Briefing, Gliederung und Skripterstellung aus",
episodeProfilesList3: "Speichere Standard-Briefings, damit jede Episode mit einem einheitlichen Ton startet",
speakerProfilesBringVoices: "Sprecherprofile bringen Stimmen zum Leben",
speakerProfilesList1: "Wähle den Text-to-Speech-Anbieter und das Modell aus",
speakerProfilesList2: "Erfasse Persönlichkeit, Hintergrundgeschichte und Aussprachehinweise pro Sprecher",
speakerProfilesList3: "Verwende dieselben Moderatoren- oder Gaststimmen in verschiedenen Episodenformaten erneut",
recommendedWorkflow: "Empfohlener Ablauf",
workflowStep1: "Erstelle Sprecherprofile für jede benötigte Stimme",
workflowStep2: "Erstelle Episodenprofile, die diese Sprecher namentlich referenzieren",
workflowStep3: "Erzeuge Podcasts, indem du das zur Geschichte passende Episodenprofil auswählst",
workflowHint: "Episodenprofile referenzieren Sprecherprofile nach Namen. Wenn du mit den Sprechern beginnst, vermeidest du später fehlende Stimmenzuweisungen.",
failedToLoadTemplates: "Profildaten konnten nicht geladen werden",
failedToLoadTemplatesDesc: "Stelle sicher, dass die API läuft, und versuche es erneut. Einige Bereiche können unvollständig sein.",
loadingTemplates: "Profile werden geladen…",
speakerProfilesTitle: "Sprecherprofile",
speakerProfilesDesc: "Konfiguriere Stimmen und Persönlichkeiten für erzeugte Episoden.",
createSpeaker: "Sprecher erstellen",
noSpeakerProfiles: "Noch keine Sprecherprofile. Erstelle eines, damit Episodenprofile verfügbar werden.",
noDescription: "Keine Beschreibung angegeben.",
usedByCount_one: "Von 1 Episode verwendet",
usedByCount_other: "Von {{count}} Episoden verwendet",
usedByCount: "Von {{count}} Episoden verwendet",
unused: "Nicht verwendet",
voiceId: "Stimmen-ID",
backstory: "Hintergrundgeschichte",
personality: "Persönlichkeit",
edit: "Bearbeiten",
duplicate: "Duplizieren",
deleteSpeakerProfileTitle: "Sprecherprofil löschen?",
deleteSpeakerProfileDesc: "Das Löschen von „{{name}}“ kann nicht rückgängig gemacht werden.",
deleteSpeakerDisabledHint: "Entferne diesen Sprecher aus den Episodenprofilen, bevor du ihn löschst.",
deleting: "Wird gelöscht…",
episodeProfilesTitle: "Episodenprofile",
episodeProfilesDesc: "Definiere wiederverwendbare Erzeugungseinstellungen für deine Sendungen.",
createProfile: "Profil erstellen",
createSpeakerFirst: "Erstelle ein Sprecherprofil, bevor du ein Episodenprofil hinzufügst.",
noEpisodeProfiles: "Noch keine Episodenprofile. Erstelle eines, um die Podcast-Erzeugung zu starten.",
speakerCreated: "Sprecher erstellt",
speakerCreatedDesc: "Der Sprecher „{{name}}“ wurde erfolgreich hinzugefügt.",
failedToCreateSpeaker: "Sprecherprofil konnte nicht erstellt werden",
speakerUpdated: "Sprecher aktualisiert",
speakerUpdatedDesc: "Der Sprecher „{{name}}“ wurde erfolgreich aktualisiert.",
failedToUpdateSpeaker: "Sprecherprofil konnte nicht aktualisiert werden",
speakerDeleted: "Sprecher gelöscht",
speakerDeletedDesc: "Der Sprecher „{{name}}“ wurde erfolgreich entfernt.",
failedToDeleteSpeaker: "Sprecherprofil konnte nicht gelöscht werden",
speakerDuplicated: "Sprecher dupliziert",
speakerDuplicatedDesc: "Der Sprecher „{{name}}“ wurde erfolgreich dupliziert.",
failedToDuplicateSpeaker: "Sprecherprofil konnte nicht dupliziert werden",
generationStarted: "Erzeugung gestartet",
generationStartedDesc: "Die Podcast-Erzeugung wurde in die Warteschlange eingereiht.",
failedToStartGeneration: "Erzeugung konnte nicht gestartet werden",
tryAgainMoment: "Bitte versuche es gleich erneut.",
deleteProfileTitle: "Profil löschen?",
deleteProfileDesc: "Dadurch wird „{{name}}“ entfernt. Vorhandene Episoden behalten ihre Daten, aber neue Episoden verwenden diese Konfiguration nicht mehr.",
profileCreated: "Profil erstellt",
profileCreatedDesc: "Das Episodenprofil „{{name}}“ wurde erfolgreich erstellt.",
failedToCreateProfile: "Profil konnte nicht erstellt werden",
profileUpdated: "Profil aktualisiert",
profileUpdatedDesc: "Das Episodenprofil „{{name}}“ wurde erfolgreich aktualisiert.",
failedToUpdateProfile: "Profil konnte nicht aktualisiert werden",
profileDeleted: "Profil gelöscht",
profileDeletedDesc: "Das Episodenprofil „{{name}}“ wurde erfolgreich entfernt.",
failedToDeleteProfile: "Profil konnte nicht gelöscht werden",
failedToDeleteProfileDesc: "Das Episodenprofil konnte nicht entfernt werden.",
profileDuplicated: "Profil dupliziert",
profileDuplicatedDesc: "Das Episodenprofil „{{name}}“ wurde erfolgreich dupliziert.",
failedToDuplicateProfile: "Profil konnte nicht dupliziert werden",
episodeDeleted: "Episode gelöscht",
episodeDeletedDesc: "Die Episode wurde erfolgreich gelöscht.",
failedToDeleteEpisode: "Episode konnte nicht gelöscht werden",
failedToDeleteSpeakerDesc: "Das Sprecherprofil konnte nicht entfernt werden.",
outlineModel: "Gliederungsmodell",
transcriptModel: "Transkriptmodell",
segments: "Segmente",
maxTokens: "Maximale Ausgabe-Tokens",
maxTokensPlaceholder: "Für Standardwerte leer lassen",
maxTokensHelp: "Optional. Begrenzt, wie viele Tokens jeder Generierungsschritt erzeugen kann — die Gliederung und das vollständige Transkript —, kein Limit pro Gesprächsrunde oder Unterhaltung. Leer lassen, um die eingebauten Standardwerte zu verwenden (3000 für die Gliederung, 5000 für das Transkript). Für längere Episoden erhöhen; ein zu niedriger Wert kann das Transkript abschneiden.",
defaultBriefingTitle: "Standard-Briefing",
created: "Erstellt am {{time}}",
details: "Details",
summaryTab: "Zusammenfassung",
outlineTab: "Gliederung",
transcriptTab: "Transkript",
briefing: "Briefing",
noOutline: "Keine Gliederung verfügbar.",
noTranscript: "Kein Transkript verfügbar.",
deleteEpisodeTitle: "Episode löschen?",
deleteEpisodeDesc: "Dadurch werden „{{name}}“ und die zugehörige Audiodatei dauerhaft entfernt.",
audioUnavailable: "Audio nicht verfügbar",
segment: "Abschnitt",
speaker: "Sprecher",
profile: "Profil",
link: "Link",
file: "Datei",
embedded: "Eingebettet",
notEmbedded: "Nicht eingebettet",
noSpeakerProfilesAvailable: "Keine Sprecherprofile verfügbar",
editEpisodeProfile: "Episodenprofil bearbeiten",
createEpisodeProfile: "Episodenprofil erstellen",
episodeProfileFormDesc: "Lege fest, wie Episoden erzeugt werden sollen und welche Sprecherkonfiguration standardmäßig verwendet wird.",
noSpeakerProfilesDesc: "Erstelle ein Sprecherprofil, bevor du ein Episodenprofil konfigurierst.",
profileName: "Profilname",
profileNamePlaceholder: "z. B. Technikgespräch",
descriptionPlaceholder: "Kurze Zusammenfassung, wann dieses Profil verwendet werden soll",
speakerConfig: "Sprecherkonfiguration",
selectSpeakerProfile: "Sprecherprofil auswählen",
outlineGeneration: "Gliederungserzeugung",
transcriptGeneration: "Transkripterzeugung",
defaultBriefingPlaceholder: "Beschreibe Struktur, Ton und Ziele für dieses Episodenformat",
editSpeakerProfile: "Sprecherprofil bearbeiten",
createSpeakerProfile: "Sprecherprofil erstellen",
speakerProfileFormDesc: "Konfiguriere Text-to-Speech-Einstellungen und definiere bis zu vier Sprecher.",
speakers: "Sprecher",
speakersDesc: "Konfiguriere zwischen einer und vier Stimmen für dieses Profil.",
addSpeaker: "Sprecher hinzufügen",
speakerNumber: "Sprecher {{number}}",
backstoryPlaceholder: "Kurze Biografie oder Kontext für den Sprecher",
personalityPlaceholder: "Beschreibe Stil und Ton",
outlineModelRequired: "Gliederungsmodell ist erforderlich",
transcriptModelRequired: "Transkriptmodell ist erforderlich",
defaultBriefingRequired: "Standard-Briefing ist erforderlich",
segmentsInteger: "Muss eine ganze Zahl sein",
segmentsMin: "Mindestens 3 Segmente",
segmentsMax: "Maximal 20 Segmente",
maxTokensInteger: "Muss eine ganze Zahl sein",
maxTokensPositive: "Muss eine positive ganze Zahl sein",
voiceIdRequired: "Stimmen-ID ist erforderlich",
backstoryRequired: "Hintergrundgeschichte ist erforderlich",
personalityRequired: "Persönlichkeit ist erforderlich",
speakerCountMin: "Mindestens ein Sprecher ist erforderlich",
speakerCountMax: "Du kannst bis zu 4 Sprecher konfigurieren",
delete: "Löschen",
failedToDelete: "Podcast konnte nicht gelöscht werden",
retry: "Erneut versuchen",
retrying: "Wird erneut versucht…",
retryStarted: "Neuer Versuch gestartet",
retryStartedDesc: "Ein neuer Auftrag zur Podcast-Erzeugung wurde eingereicht.",
failedToRetry: "Episode konnte nicht erneut versucht werden",
errorDetails: "Fehlerdetails",
language: "Sprache",
languagePlaceholder: "Sprache auswählen (optional)",
podcastLanguage: "Podcast-Sprache",
selectOutlineModel: "Gliederungsmodell auswählen",
selectTranscriptModel: "Transkriptmodell auswählen",
voiceModel: "Stimmenmodell",
voiceModelRequired: "Stimmenmodell ist erforderlich",
selectVoiceModel: "Stimmenmodell auswählen",
perSpeakerTtsOverride: "TTS-Überschreibung pro Sprecher (optional)",
useProfileDefault: "Profilstandard verwenden",
setupRequired: "Einrichtung erforderlich",
setupRequiredDesc: "Für einige Profile sind noch keine Modelle konfiguriert. Bearbeite sie und wähle Modelle aus, bevor du Podcasts erzeugst.",
notConfigured: "Nicht konfiguriert",
},
settings: {
contentProcessing: "Inhaltsverarbeitung",
contentProcessingDesc: "Konfiguriere, wie Dokumente und URLs verarbeitet werden",
docEngine: "Engine für Dokumentverarbeitung",
docEnginePlaceholder: "Engine für Dokumentverarbeitung auswählen",
urlEngine: "Engine für URL-Verarbeitung",
urlEnginePlaceholder: "Engine für URL-Verarbeitung auswählen",
autoRecommended: "Auto (empfohlen)",
simple: "Einfach",
docling: "Docling",
helpMeChoose: "Hilf mir bei der Auswahl",
docHelp: "· Docling ist etwas langsamer, aber genauer, besonders wenn Dokumente Tabellen und Bilder enthalten. · Einfach extrahiert Inhalte aus dem Dokument ohne Formatierung. · Auto (empfohlen) versucht zuerst Docling und fällt bei Bedarf auf Einfach zurück.",
firecrawl: "Firecrawl",
jina: "Jina",
crawl4ai: "Crawl4AI",
enableDoclingHint: "Docling ist optional. Aktiviere es mit OPEN_NOTEBOOK_ENABLE_DOCLING=true — es wird beim ersten Start installiert (großer Download).",
enableCrawl4aiHint: "Lokales Crawl4AI ist optional. Aktiviere es mit OPEN_NOTEBOOK_ENABLE_CRAWL4AI=true (wird beim ersten Start installiert) oder setze CRAWL4AI_API_URL, um einen Remote-Server zu verwenden.",
urlHelp: "· Firecrawl ist ein kostenpflichtiger Dienst mit kostenlosem Einstiegstarif und sehr leistungsfähig. · Jina ist ebenfalls eine gute Option und bietet auch einen kostenlosen Einstiegstarif. · Crawl4AI rendert JavaScript-Seiten lokal (oder über einen Crawl4AI-Server, wenn CRAWL4AI_API_URL gesetzt ist), ohne API-Schlüssel. · Einfach nutzt eine grundlegende HTTP-Extraktion und kann Inhalte auf JavaScript-basierten Websites übersehen. · Auto (empfohlen) versucht zuerst Firecrawl, dann Jina, dann Crawl4AI und fällt zuletzt auf Einfach zurück.",
embeddingAndSearch: "Embeddings und Suche",
embeddingAndSearchDesc: "Konfiguriere Such- und Embedding-Optionen",
defaultEmbeddingOption: "Standardoption für Embeddings",
embeddingOptionPlaceholder: "Embedding-Option auswählen",
ask: "Nachfragen",
always: "Immer",
never: "Nie",
embeddingHelp: "Durch Embeddings lassen sich Inhalte leichter von dir und deinen KI-Agenten finden. Wenn du ein lokales Embedding-Modell verwendest, zum Beispiel Ollama, musst du dir um Kosten keine Sorgen machen und kannst alles einbetten.",
fileManagement: "Dateiverwaltung",
fileManagementDesc: "Konfiguriere Dateiverarbeitung und Speicheroptionen",
autoDeleteFiles: "Dateien automatisch löschen",
ocrEnabled: "OCR aktivieren",
ocrHelp: "Extrahiert Text aus gescannten PDFs und Bildern bei Verwendung der Docling-Engine. Langsamere Verarbeitung.",
formulasEnabled: "Formeln extrahieren",
formulasHelp: "Extrahiert mathematische Formeln als strukturiertes Markup bei Verwendung der Docling-Engine. Erhöht die Verarbeitungszeit.",
visionEnabled: "Bilder und Diagramme beschreiben",
visionHelp: "Verwendet ein Vision-Modell, um Bilder zu beschreiben und Diagrammdaten zu extrahieren, bei Verwendung der Docling-Engine. Deutlich langsamer und ruft möglicherweise ein Vision-Modell auf.",
autoDeletePlaceholder: "Option für automatisches Löschen auswählen",
filesHelp: "Nachdem deine Dateien hochgeladen und verarbeitet wurden, werden sie nicht mehr benötigt. Die meisten Nutzer sollten Open Notebook erlauben, hochgeladene Dateien automatisch aus dem Upload-Ordner zu löschen.",
loadFailed: "Einstellungen konnten nicht geladen werden",
},
advanced: {
title: "Erweiterte Werkzeuge",
desc: "Erweiterte Werkzeuge und Hilfsfunktionen für erfahrene Nutzer",
systemInfo: "Systeminformationen",
rebuildEmbeddings: "Embeddings neu aufbauen",
rebuildEmbeddingsDesc: "Vektorsuchindex für alle Quellen neu aufbauen",
currentVersion: "Aktuelle Version",
latestVersion: "Neueste Version",
status: "Status",
updateAvailable: "Version {{version}} verfügbar",
updateAvailableDesc: "Eine neue Version von Open Notebook ist verfügbar.",
upToDate: "Aktuell",
unknown: "Unbekannt",
viewOnGithub: "Auf GitHub ansehen",
updateCheckFailed: "Updates konnten nicht geprüft werden. GitHub ist möglicherweise nicht erreichbar.",
rebuild: {
mode: "Modus für Neuaufbau",
existing: "Vorhandene",
all: "Alle",
existingDesc: "Nur Elemente erneut einbetten, die bereits Embeddings haben (schneller, für Modellwechsel)",
allDesc: "Vorhandene Elemente erneut einbetten und Embeddings für Elemente ohne Embeddings erstellen (langsamer, vollständig)",
include: "In Neuaufbau einbeziehen",
selectOneError: "Bitte wähle mindestens einen Elementtyp für den Neuaufbau aus",
starting: "Neuaufbau wird gestartet...",
startBtn: "🚀 Neuaufbau starten",
queued: "In Warteschlange",
running: "Jobs werden übermittelt...",
completed: "Jobs übermittelt!",
failed: "Fehlgeschlagen",
leavePageHint: "Du kannst diese Seite verlassen, da der Vorgang im Hintergrund läuft",
startNew: "Neuen Neuaufbau starten",
itemsProcessed: "{{processed}}/{{total}} Jobs übermittelt ({{percent}}%)",
failedItems: "{{count}} Jobs konnten nicht übermittelt werden",
time: "Zeit",
whenToRebuild: "Wann sollte ich Embeddings neu aufbauen?",
whenToRebuildAns: "Du solltest Embeddings neu aufbauen, wenn du Modelle wechselst, Versionen aktualisierst, beschädigte Daten korrigierst oder viele Inhalte importiert hast.",
howLong: "Wie lange dauert der Neuaufbau?",
howLongAns: "Die Verarbeitungszeit hängt von der Anzahl der Elemente, der Modellgeschwindigkeit und den API-Rate-Limits ab. Lokale Modelle sind meist sehr schnell.",
isSafe: "Ist der Neuaufbau sicher, während die App verwendet wird?",
isSafeAns: "Ja, der Neuaufbau ist sicher! Er löscht keine Inhalte, sondern ersetzt nur Embeddings und behandelt Fehler kontrolliert.",
},
},
transformations: {
title: "Transformationen",
desc: "Transformationen sind Prompts, mit denen das LLM eine Quelle verarbeitet und Erkenntnisse, Zusammenfassungen usw. extrahiert.",
workspace: "Arbeitsbereich auswählen",
playground: "Spielwiese",
defaultPrompt: "Standard-Prompt für Transformationen",
defaultPromptDesc: "Dieser Text wird zu allen deinen Transformations-Prompts hinzugefügt",
defaultPromptPlaceholder: "Standardanweisungen für Transformationen eingeben...",
listTitle: "Eigene Transformationen",
createNew: "Neu erstellen",
inputLabel: "Eingabetext",
inputPlaceholder: "Text zum Transformieren eingeben...",
outputLabel: "Ausgabe",
runTest: "Transformation ausführen",
running: "Wird ausgeführt...",
selectToStart: "Wähle eine Transformation aus, um zu starten",
name: "Name",
namePlaceholder: "Eindeutige Kennung, z. B. key_topics",
titlePlaceholder: "Angezeigter Titel, standardmäßig der Name",
promptPlaceholder: "Schreibe den Prompt, der diese Transformation steuert...",
descriptionPlaceholder: "Beschreibe, was diese Transformation macht.",
suggestDefault: "Standardmäßig bei neuen Quellen vorschlagen",
promptHint: "Prompts sollten mit Blick auf den Quellinhalt geschrieben werden. Du kannst das Modell bitten, zusammenzufassen, Erkenntnisse zu extrahieren oder strukturierte Ausgaben wie Tabellen zu erzeugen.",
createSuccess: "Transformation erfolgreich erstellt",
updateSuccess: "Transformation erfolgreich aktualisiert",
deleteSuccess: "Transformation erfolgreich gelöscht",
noTransformations: "Noch keine Transformationen",
createOne: "Erstelle eine Transformation, um loszulegen",
selectModel: "Modell auswählen",
deleteConfirm: "Möchtest du diese Transformation wirklich löschen?",
model: "Modell",
systemPrompt: "System-Prompt",
overrideModelDesc: "Überschreibe das Standardmodell für diese Chat-Sitzung. Leer lassen, um den Systemstandard zu verwenden.",
sessionUseReplacement: "Diese Sitzung verwendet {{name}} statt des Standardmodells.",
systemDefault: "Systemstandard",
},
models: {
embedding: "Embedding-Modelle",
tts: "Text-to-Speech (TTS)",
stt: "Speech-to-Text (STT)",
apiKey: "API-Schlüssel",
deleteSuccess: "Modell erfolgreich gelöscht",
saveSuccess: "Modell erfolgreich gespeichert",
noModels: "Keine Modelle",
discoverModels: "Modelle erkennen",
noModelsFound: "Bei diesem Anbieter wurden keine Modelle gefunden",
modelType: "Modelltyp",
modelTypeHint: "Wähle den Typ der Modelle aus, die du hinzufügen möchtest. Wenn du unterschiedliche Typen benötigst, füge sie in getrennten Durchläufen hinzu.",
deleteModel: "Modell löschen",
defaultAssignments: "Standardmodell-Zuweisungen",
defaultAssignmentsDesc: "Konfiguriere, welche Modelle Open Notebook für verschiedene Zwecke verwendet",
missingRequiredModels: "Erforderliche Modelle fehlen: {{models}}. Open Notebook funktioniert ohne diese möglicherweise nicht korrekt.",
selectModelPlaceholder: "Modell auswählen",
noneOption: "Keines",
noneFallbackToChat: "Fallback verwenden (Chat-Standard)",
usingChatModelHint: "Chat-Modell wird verwendet ({{model}})",
ttsUnsetHint: "Nicht festgelegt — Audioerzeugung nicht verfügbar, bis konfiguriert",
sttUnsetHint: "Nicht festgelegt — Transkription nicht verfügbar, bis konfiguriert",
requiredModelPlaceholder: "⚠️ Erforderlich – Modell auswählen",
chatModelLabel: "Chat-Modell",
chatModelDesc: "Wird für Chat-Unterhaltungen verwendet",
transformationModelLabel: "Transformationsmodell",
transformationModelDesc: "Wird für Zusammenfassungen, Erkenntnisse und Transformationen verwendet",
toolsModelLabel: "Tool-Modell",
toolsModelDesc: "Wird für Function Calling verwendet – OpenAI oder Anthropic empfohlen",
largeContextModelLabel: "Modell mit großem Kontextfenster",
largeContextModelDesc: "Wird für die Verarbeitung großer Dokumente verwendet – Gemini empfohlen",
embeddingModelLabel: "Embedding-Modell",
embeddingModelDesc: "Wird für semantische Suche und Vektor-Embeddings verwendet",
ttsModelLabel: "Text-to-Speech-Modell",
ttsModelDesc: "Wird für die Podcast-Erstellung verwendet",
sttModelLabel: "Speech-to-Text-Modell",
sttModelDesc: "Wird für Audiotranskription verwendet",
embeddingChangeTitle: "Embedding-Modell ändern",
embeddingChangeConfirm: "Du bist dabei, dein Embedding-Modell von {{from}} auf {{to}} zu ändern.",
rebuildRequired: "Wichtig: Neuaufbau erforderlich",
rebuildReason: "Wenn du dein Embedding-Modell änderst, müssen alle vorhandenen Embeddings neu aufgebaut werden, damit die Ergebnisse konsistent bleiben. Ohne Neuaufbau können Suchergebnisse falsch oder unvollständig sein.",
whatHappensNext: "Was als Nächstes passiert:",
step1: "Dein Standard-Embedding-Modell wird aktualisiert",
step2: "Vorhandene Embeddings bleiben bis zum Neuaufbau unverändert",
step3: "Neue Inhalte verwenden das neue Embedding-Modell",
step4: "Du solltest die Embeddings möglichst bald neu aufbauen",
proceedToRebuildPrompt: "Möchtest du zur Seite Erweitert wechseln, um den Neuaufbau jetzt zu starten?",
changeModelOnly: "Nur Modell ändern",
changeAndRebuild: "Ändern & zum Neuaufbau wechseln",
autoAssign: "Standardmodelle automatisch zuweisen",
autoAssigning: "Wird zugewiesen...",
autoAssignSuccess: "{{count}} Standardmodelle automatisch zugewiesen",
autoAssignNoModels: "Keine Modelle zum Zuweisen verfügbar. Bitte synchronisiere zuerst die Modelle.",
autoAssignAlreadySet: "Alle Standardmodelle sind bereits konfiguriert",
testModel: "Modell testen",
testModelSuccess: "Modelltest bestanden",
testModelFailed: "Modelltest fehlgeschlagen",
searchOrAddModel: "Modell suchen oder Modellnamen eingeben...",
addCustomModel: "\"{{name}}\" hinzufügen",
},
apiKeys: {
title: "Modelle",
description: "Verbinde deine KI-Anbieter und speichere ihre Zugangsdaten sicher.",
encryptionRequired: "Verschlüsselungsschlüssel nicht konfiguriert",
encryptionRequiredDescription: "Setze die Umgebungsvariable OPEN_NOTEBOOK_ENCRYPTION_KEY auf eine beliebige geheime Zeichenkette, um API-Schlüssel in der Datenbank speichern zu können.",
configured: "Konfiguriert",
notConfigured: "Nicht konfiguriert",
providersLoadFailed: "Anbieter konnten nicht geladen werden",
providersLoadFailedDescription: "Stellen Sie sicher, dass die API läuft, und versuchen Sie es erneut.",
migrationAvailable: "Umgebungsvariablen erkannt",
migrationDescription: "{{count}} API-Schlüssel sind über Umgebungsvariablen konfiguriert und können zur einfacheren Verwaltung in die Datenbank migriert werden.",
migrateToDatabase: "In Datenbank migrieren",
migrating: "Wird migriert...",
migrationSuccess: "{{count}} API-Schlüssel erfolgreich migriert",
migrationErrors: "{{count}} Schlüssel konnten nicht migriert werden",
migrationNothingToMigrate: "Alle Schlüssel sind bereits in der Datenbank",
learnMore: "Erfahre, wie du KI-Anbieter verbindest →",
testConnection: "Verbindung testen",
testSuccess: "Verbindung erfolgreich",
testFailed: "Verbindungstest fehlgeschlagen",
syncModels: "Modelle synchronisieren",
syncSuccess: "{{discovered}} Modelle erkannt, {{new}} neue hinzugefügt",
syncNoNew: "{{count}} Modelle erkannt, alle bereits registriert",
syncFailed: "Modelle konnten nicht synchronisiert werden",
getApiKey: "API-Schlüssel abrufen",
vertexProject: "GCP-Projekt-ID",
vertexLocation: "Region",
vertexCredentials: "Pfad zur Service-Account-JSON",
addConfig: "Konfiguration hinzufügen",
editConfig: "Konfiguration bearbeiten",
deleteConfig: "Konfiguration löschen",
configName: "Konfigurationsname",
configNameHint: "Ein beschreibender Name für diese Konfiguration, z. B. 'Produktion' oder 'Entwicklung'",
baseUrl: "Basis-URL",
baseUrlOverrideHint: "Nur ändern, wenn du den Standard-API-Endpunkt des Anbieters überschreiben musst.",
openAICompatibleBaseUrlHint: "Füge den von deinem Server benötigten API-Versionspfad ein. Verwende für LM Studio in Docker http://host.docker.internal:1234/v1.",
numCtx: "Kontextfenster (num_ctx)",
numCtxHint: "Maximales Kontextfenster für Ollama-Modelle. Leer lassen, um den Standardwert (8192) zu verwenden. Nur erhöhen, wenn deine Hardware ein größeres Fenster verarbeiten kann.",
deleteConfigConfirm: "Möchtest du '{{name}}' wirklich löschen? Dies kann nicht rückgängig gemacht werden.",
configSaveSuccess: "Konfiguration erfolgreich gespeichert",
configUpdateSuccess: "Konfiguration erfolgreich aktualisiert",
configDeleteSuccess: "Konfiguration erfolgreich gelöscht",
apiKeyEditHint: "Leer lassen, um den vorhandenen API-Schlüssel beizubehalten",
decryptionError: "Entschlüsselungsfehler",
decryptionErrorDescription: "Der API-Schlüssel dieser Zugangsdaten konnte nicht entschlüsselt werden. Möglicherweise hat sich der Verschlüsselungsschlüssel geändert. Lösche diese Zugangsdaten und erstelle sie mit dem richtigen Schlüssel neu.",
},
setupBanner: {
encryptionRequired: "Verschlüsselungsschlüssel nicht konfiguriert",
encryptionRequiredDescription: "Setze die Umgebungsvariable OPEN_NOTEBOOK_ENCRYPTION_KEY, um Zugangsdaten sicher zu speichern.",
migrationAvailable: "API-Key-Migration verfügbar",
migrationDescription: "{{count}} Anbieter haben API-Keys über Umgebungsvariablen gesetzt. Migriere sie zur einfacheren Verwaltung in die Datenbank.",
goToSettings: "Zu den Einstellungen",
viewDocs: "Dokumentation anzeigen",
},
} satisfies TranslationShape;