@object-ui/i18n 16.1.0 → 17.1.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.
@@ -1,6 +1,15 @@
1
1
  const de = {
2
2
  // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
3
  capability: {
4
+ label: {
5
+ manage_users: "Benutzer verwalten",
6
+ manage_org_users: "Organisationsbenutzer verwalten",
7
+ manage_metadata: "Metadaten verwalten",
8
+ manage_platform_settings: "Plattformeinstellungen verwalten",
9
+ setup_access: "Zugriff auf die Einrichtung",
10
+ setup_write: "Einstellungen schreiben",
11
+ studio_access: "Studio-Zugriff",
12
+ },
4
13
  group: {
5
14
  platform: 'Plattform',
6
15
  org: 'Organisation',
@@ -74,6 +83,10 @@ const de = {
74
83
  package: "Paket",
75
84
  },
76
85
  actions: {
86
+ decisionOutput: {
87
+ help: 'Wird dem Flow als Entscheidungsausgabe übergeben.',
88
+ helpMultiValue: 'Wird dem Flow als Entscheidungsausgabe übergeben. Mehrere Werte durch Komma trennen.',
89
+ },
77
90
  resultDialog: {
78
91
  defaultTitle: 'Diesen Wert jetzt speichern',
79
92
  acknowledge: 'Ich habe ihn gespeichert',
@@ -94,6 +107,16 @@ const de = {
94
107
  type: "{{field}} muss ein gültiger {{type}} sein",
95
108
  },
96
109
  form: {
110
+ noPermissionToSave: "Sie haben keine Berechtigung, diesen Datensatz zu speichern.",
111
+ submitFailed: "Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.",
112
+ discardTitle: "Änderungen verwerfen?",
113
+ discardMessage: "Sie haben ungespeicherte Änderungen. Wenn Sie dieses Formular jetzt schließen, gehen Ihre Bearbeitungen verloren.",
114
+ keepEditing: "Weiter bearbeiten",
115
+ discard: "Verwerfen",
116
+ conflictTitle: "Speicherkonflikt",
117
+ conflictMessage: "Dieser Datensatz wurde während Ihrer Bearbeitung von jemand anderem geändert. Beim Überschreiben werden dessen Änderungen durch Ihre ersetzt.",
118
+ conflictLatestVersion: "Deren Speicherung: {{time}}",
119
+ conflictOverwrite: "Überschreiben",
97
120
  addItem: "Element hinzufügen",
98
121
  removeItem: "Element entfernen",
99
122
  fieldRequired: "Dieses Feld ist erforderlich",
@@ -104,8 +127,6 @@ const de = {
104
127
  stepOf: "Schritt {{current}} von {{total}}",
105
128
  createTitle: "{{object}} erstellen",
106
129
  editTitle: "{{object}} bearbeiten",
107
- createDescription: "Neues {{object}} zur Datenbank hinzufügen.",
108
- editDescription: "Details für {{object}} aktualisieren",
109
130
  saveRecord: "Datensatz speichern",
110
131
  create: "Erstellen",
111
132
  update: "Aktualisieren",
@@ -114,14 +135,70 @@ const de = {
114
135
  deleteSuccess: "{{object}} erfolgreich gelöscht",
115
136
  },
116
137
  fields: {
138
+ image: {
139
+ upload: "Bild hochladen",
140
+ addMore: "Weitere Bilder hinzufügen",
141
+ uploading: "Wird hochgeladen…",
142
+ imageAlt: "Bild {{index}}",
143
+ crop: "Bild {{index}} zuschneiden",
144
+ remove: "Bild {{index}} entfernen",
145
+ enlarge: "{{name}} vergrößern",
146
+ preview: "Bildvorschau",
147
+ previous: "Vorheriges Bild",
148
+ next: "Nächstes Bild",
149
+ counter: "{{current}} / {{total}}",
150
+ },
117
151
  relativeDate: {
118
152
  overdue: "{{count}} T. überfällig",
119
153
  },
154
+ file: {
155
+ dragDropHere: 'Dateien hierher ziehen und ablegen',
156
+ dropFilesHere: 'Dateien hier ablegen',
157
+ browseHint: 'oder zum Durchsuchen klicken',
158
+ browseHintCamera: 'oder zum Durchsuchen klicken • Kamera-Schaltfläche unten verwenden',
159
+ takePhoto: 'Foto aufnehmen',
160
+ takeSelfie: 'Selfie aufnehmen',
161
+ cameraCapture: 'Kameraaufnahme',
162
+ uploading: 'Wird hochgeladen…',
163
+ uploadingPct: 'Wird hochgeladen… ({{pct}} %)',
164
+ fileFallback: 'Datei',
165
+ upload: 'Hochladen',
166
+ remove: '{{name}} entfernen',
167
+ exceedsMaxSize: '„{{name}}“ überschreitet die maximale Größe ({{max}} MB)',
168
+ uploadFailed: 'Hochladen von „{{name}}“ fehlgeschlagen: {{error}}',
169
+ },
120
170
  richText: {
121
171
  format: "Format: {{format}}",
122
172
  basicEditorHint: "Rich-Text-Editor (einfach)",
123
173
  placeholder: "Text eingeben...",
124
174
  },
175
+ objectRef: {
176
+ loading: "Objekte werden geladen…",
177
+ placeholder: "Objekt auswählen",
178
+ search: "Objekte suchen…",
179
+ empty: "Keine Objekte gefunden",
180
+ },
181
+ recipient: {
182
+ selectTypeFirst: "Wählen Sie zuerst einen Empfängertyp.",
183
+ loading: "Wird geladen…",
184
+ search: "Suchen…",
185
+ empty: "Keine Treffer",
186
+ select: "Empfänger auswählen",
187
+ selectUser: "Benutzer auswählen",
188
+ selectTeam: "Team auswählen",
189
+ selectBusinessUnit: "Geschäftseinheit auswählen",
190
+ selectPosition: "Position auswählen",
191
+ selectUnitAndSubordinates: "Geschäftseinheit auswählen",
192
+ },
193
+ filterCondition: {
194
+ selectObjectFirst: "Wählen Sie zuerst ein Objekt.",
195
+ noCriteria: "Keine Kriterien – diese Regel teilt nichts",
196
+ criteriaRequired: "Fügen Sie mindestens eine Bedingung hinzu. Eine Regel ohne Kriterien würde jeden Datensatz teilen und kann daher nicht gespeichert werden.",
197
+ invalidJson: "Ungültiges JSON — die Regel trifft auf keinen Datensatz zu, bis dies behoben ist.",
198
+ jsonOnly: "Dieses Kriterium kann nur als JSON bearbeitet werden",
199
+ editAsJson: "Als JSON bearbeiten",
200
+ useVisualBuilder: "Visuellen Builder verwenden",
201
+ },
125
202
  },
126
203
  table: {
127
204
  rowsPerPage: "Zeilen pro Seite",
@@ -156,6 +233,37 @@ const de = {
156
233
  delete: "Löschen",
157
234
  },
158
235
  grid: {
236
+ bulkSelected: "{{count}} ausgewählt",
237
+ bulkSelectedAllMatches: "{{count}} ausgewählt (alle Treffer)",
238
+ bulkClear: "Auswahl aufheben",
239
+ bulkAllOnPage: "Alle {{count}} auf dieser Seite sind ausgewählt.",
240
+ bulkSelectAllMatching: "Alle {{count}} Treffer auswählen",
241
+ bulkAllMatchingSelected: "Alle {{count}} übereinstimmenden Datensätze sind ausgewählt.",
242
+ bulk: {
243
+ confirmDefault: "Dies wird auf {{count}} Datensätze angewendet.",
244
+ overLimit: "Die Auswahl ({{count}}) überschreitet das Aktionslimit ({{limit}}). Verkleinern Sie die Auswahl, um fortzufahren.",
245
+ affectedRecords: "Betroffene Datensätze ({{count}}):",
246
+ skippedIneligible: '{{count}} der ausgewählten Datensätze sind für diese Aktion nicht zulässig und werden übersprungen.',
247
+ rowFallback: "Zeile {{index}}",
248
+ andMore: "… und {{count}} weitere",
249
+ processed: "{{count}} / {{total}} verarbeitet",
250
+ processedFailed: " · {{count}} fehlgeschlagen",
251
+ undonePrefix: "Rückgängig gemacht — ",
252
+ succeeded: "Erfolgreich {{count}} / {{total}}",
253
+ resultFailed: " · Fehlgeschlagen {{count}}",
254
+ retry: "Erneut versuchen",
255
+ downloadErrorCsv: "Fehler-CSV herunterladen",
256
+ cancel: "Abbrechen",
257
+ back: "Zurück",
258
+ next: "Weiter",
259
+ run: "Ausführen",
260
+ running: "Wird ausgeführt…",
261
+ undo: "Rückgängig",
262
+ undoing: "Wird rückgängig gemacht…",
263
+ done: "Fertig",
264
+ selectPlaceholder: "Auswählen…",
265
+ loading: "Wird geladen…",
266
+ },
159
267
  actions: "Aktionen",
160
268
  edit: "Bearbeiten",
161
269
  delete: "Löschen",
@@ -181,7 +289,88 @@ const de = {
181
289
  densityCycleShortHint: "Klicken zum Wechseln",
182
290
  },
183
291
  import: {
292
+ downloadTemplate: "Vorlage herunterladen",
293
+ downloadTemplateHint: "Laden Sie eine CSV mit den richtigen Spalten herunter (Pflichtfelder sind mit * markiert).",
294
+ templateFileName: "{{object}}-import-template",
295
+ autoMatched: "Automatisch zugeordnet",
296
+ autoMatchedSummary: "{{count}} Spalte(n) automatisch zugeordnet — unten prüfen und anpassen.",
297
+ confidence: {
298
+ high: "Hohe Konfidenz",
299
+ medium: "Mittlere Konfidenz",
300
+ low: "Geringe Konfidenz",
301
+ },
302
+ asyncQueued: "In Warteschlange — Import wird vorbereitet…",
303
+ asyncProcessing: "{{processed}} von {{total}} Zeilen werden importiert… {{progress}} %",
304
+ asyncLargeHint: "Diese Datei ist groß und wird daher im Hintergrund importiert.",
305
+ largeSampleNotice: "Vorschau der ersten {{shown}} von {{total}} Zeilen.",
306
+ cancelImport: "Import abbrechen",
307
+ importCancelled: "Import abgebrochen",
308
+ resultsTruncated: "Es werden die ersten {{count}} Zeilenergebnisse (von {{total}}) angezeigt.",
309
+ createdCount: "{{count}} erstellt",
310
+ updatedCount: "{{count}} aktualisiert",
311
+ downloadFailed: "Fehlgeschlagene Zeilen herunterladen",
312
+ options: "Importoptionen",
313
+ writeMode: "Wenn eine Zeile zu einem vorhandenen Datensatz passt",
314
+ writeModeOpt: {
315
+ insert: "Immer neu anlegen",
316
+ update: "Vorhandene aktualisieren (ohne Treffer überspringen)",
317
+ upsert: "Bei Treffer aktualisieren, sonst anlegen",
318
+ },
319
+ matchFields: "Abgleich über",
320
+ matchFieldsPlaceholder: "Abgleichsfeld(er) wählen…",
321
+ matchFieldsHint: "Zeilen werden über diese Felder vorhandenen Datensätzen zugeordnet.",
322
+ needMatchFields: "Wählen Sie mindestens ein Feld für den Abgleich aus.",
323
+ matchOnlyField: "(nur Abgleich)",
324
+ optCreateOptions: "Unbekannte Optionswerte beibehalten",
325
+ optRunAutomations: "Automatisierungen und Trigger ausführen",
326
+ optTreatHistorical: "Als historische Daten importieren",
327
+ optTreatHistoricalHint: "(abgeschlossene Datensätze unverändert importieren — Zustandsautomat-Prüfungen überspringen und die ursprünglichen Zeitstempel und Autoren beibehalten, statt jetzt zu stempeln)",
328
+ optSkipBlankKey: "Zeilen mit leerem Abgleichswert überspringen",
329
+ optBackground: "Im Hintergrund importieren",
330
+ optBackgroundHint: "(läuft als rückgängig machbarer Auftrag)",
331
+ validate: "Daten prüfen",
332
+ validating: "Wird geprüft…",
333
+ validateHint: "Jede Zeile vor dem Import auf dem Server prüfen.",
334
+ validatePassed: "Alle {{ok}} Zeilen sind gültig.",
335
+ validateFailed: "{{ok}} gültig, {{errors}} mit Fehlern.",
336
+ errorRowPrefix: "Zeile {{row}}: ",
337
+ referenceNotFound: "Kein passender Datensatz für „{{value}}“",
338
+ referenceAmbiguous: "„{{value}}“ passt zu mehreren Datensätzen — verwenden Sie einen eindeutigen Wert oder die Datensatz-ID",
339
+ invalidBoolean: "„{{value}}“ ist kein gültiger Wahr/Falsch-Wert",
340
+ invalidNumber: "„{{value}}“ ist keine gültige Zahl",
341
+ invalidDate: "„{{value}}“ ist kein gültiges Datum",
342
+ invalidOption: "„{{value}}“ gehört nicht zu den zulässigen Optionen",
343
+ requiredValue: "Dieses Feld ist erforderlich",
344
+ matchAmbiguous: "Passt zu mehreren vorhandenen Datensätzen — verwenden Sie einen eindeutigen Wert oder die Datensatz-ID",
345
+ history: "Verlauf",
346
+ historyBack: "Zurück zum Import",
347
+ historyDescription: "Letzte Importe für dieses Objekt.",
348
+ historyHint: "Hintergrund-Importaufträge, neueste zuerst.",
349
+ historyRefresh: "Aktualisieren",
350
+ historyLoading: "Wird geladen…",
351
+ historyEmpty: "Noch keine Importe.",
352
+ historyUnsupported: "Für diese Datenquelle ist kein Importverlauf verfügbar.",
353
+ historyColStatus: "Status",
354
+ historyColRows: "Zeilen",
355
+ historyColResult: "Ergebnis",
356
+ historyColTime: "Wann",
357
+ errorCount: "{{count}} Fehler",
358
+ undoImport: "Import rückgängig machen",
359
+ undoing: "Wird rückgängig gemacht…",
360
+ undoConfirm: "Diesen Import rückgängig machen? Dabei erstellte Datensätze werden gelöscht und aktualisierte Datensätze auf ihre vorherigen Werte zurückgesetzt.",
361
+ reverted: "Rückgängig gemacht",
362
+ jobStatus: {
363
+ pending: "Ausstehend",
364
+ running: "Läuft",
365
+ succeeded: "Erfolgreich",
366
+ failed: "Fehlgeschlagen",
367
+ cancelled: "Abgebrochen",
368
+ },
369
+ legacyReferenceBlocked: "Import blockiert: {{fields}} sind Beziehungsfelder, die den Server-Importweg benötigen, um Namen in Datensatz-IDs aufzulösen — diese Verbindung unterstützt das nicht. Ein Import als reiner Text würde die Daten beschädigen. Aktualisieren Sie Backend/Client, oder heben Sie die Zuordnung dieser Spalten auf und importieren Sie sie separat.",
370
+ missingRequiredHint: "Fortfahren nicht möglich — nicht zugeordnete Pflichtfelder: {{fields}}. Fügen Sie Ihrer Datei eine passende Spalte hinzu oder gehen Sie zurück und laden Sie eine Datei hoch, die sie enthält.",
371
+ legacyFallbackNotice: "Über einen Kompatibilitäts-Fallback importiert: Diese Verbindung unterstützt den Server-Importweg nicht, daher wurden die Werte ohne serverseitige Typkonvertierung als Text gespeichert. Aktualisieren Sie Backend/Client für vollständige Importunterstützung (Typkonvertierung und Beziehungssuche).",
184
372
  title: "{{object}} importieren",
373
+ notAllowed: "Dieses Objekt ist nicht für den Import freigegeben.",
185
374
  stepUpload: "Hochladen",
186
375
  stepMapping: "Zuordnung",
187
376
  stepPreview: "Vorschau",
@@ -257,6 +446,42 @@ const de = {
257
446
  moreEvents: "+{{count}} weitere",
258
447
  },
259
448
  list: {
449
+ firstRunTitle: "Hier ist noch nichts",
450
+ firstRunMessage: "Legen Sie Ihren ersten Datensatz an, um loszulegen.",
451
+ noMatches: "Keine passenden Datensätze",
452
+ noMatchesMessage: "Keine Datensätze entsprechen Ihren aktuellen Filtern oder Ihrer Suche. Passen Sie sie an oder setzen Sie sie zurück.",
453
+ loadErrorTitle: "Datensätze konnten nicht geladen werden",
454
+ loadErrorMessage: "Beim Laden dieser Daten ist etwas schiefgelaufen. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
455
+ loadErrorForbiddenTitle: "Kein Zugriff",
456
+ loadErrorForbiddenMessage: "Sie haben keine Berechtigung, diese Datensätze anzuzeigen. Wenden Sie sich an Ihren Administrator, wenn Sie Zugriff benötigen.",
457
+ loadErrorUnauthorizedTitle: "Anmeldung erforderlich",
458
+ loadErrorUnauthorizedMessage: "Ihre Sitzung ist abgelaufen oder Sie sind abgemeldet. Melden Sie sich erneut an, um diese Datensätze anzuzeigen.",
459
+ loadErrorRejectedTitle: "Die Abfrage dieser Ansicht wurde abgelehnt",
460
+ loadErrorRejectedMessage: "Der Server konnte den Filter oder die Abfrageoptionen dieser Ansicht nicht verarbeiten. Das Zurücksetzen der Filter behebt das meist; ist die Ansicht so gespeichert, muss ein Administrator sie korrigieren.",
461
+ retry: "Erneut versuchen",
462
+ managedBy: {
463
+ system: {
464
+ title: "Hier ist noch nichts",
465
+ message: "Einträge erscheinen automatisch, wenn die zugehörige Aktion ausgeführt wird (z. B. Zur Genehmigung einreichen, Teilen, Einladen). Lösen Sie eine davon an einem Quelldatensatz aus, um eine Zeile zu erzeugen.",
466
+ },
467
+ appendOnly: {
468
+ title: "Keine Ereignisse erfasst",
469
+ message: "Dies ist ein unveränderliches Audit-Protokoll. Zeilen werden von der Plattform geschrieben, wenn Ereignisse eintreten — Sie können den Verlauf exportieren, aber hier keine Einträge anlegen.",
470
+ },
471
+ betterAuth: {
472
+ title: "Keine Identitätsdatensätze",
473
+ message: "Diese Datensätze werden vom Authentifizierungsanbieter erstellt — durch Anmeldung, Bereitstellung und Sicherheitsabläufe — und nicht hier von Hand hinzugefügt.",
474
+ },
475
+ betterAuthUser: {
476
+ title: "Noch keine Benutzer",
477
+ message: "Benutzerkonten werden vom Authentifizierungsanbieter bereitgestellt und nicht hier erstellt. Laden Sie Kolleginnen und Kollegen in Ihre Organisation ein — sie erscheinen bei der ersten Anmeldung automatisch (SSO Just-in-time-Provisionierung). Endnutzer Ihrer App kommen hinzu, sobald sie sich über Ihre App registrieren.",
478
+ },
479
+ betterAuthTeam: {
480
+ title: "Noch keine Teams",
481
+ message: "Teams fassen Mitglieder innerhalb einer Organisation zusammen. Legen Sie eines über „Team erstellen“ an, oder sie entstehen über die Organisations- und SSO-Provisionierung Ihres Authentifizierungsanbieters.",
482
+ },
483
+ },
484
+ refresh: "Aktualisieren",
260
485
  loading: 'Loading records...',
261
486
  recordCount: "{{count}} Datensätze",
262
487
  recordCountOne: "{{count}} Datensatz",
@@ -268,6 +493,8 @@ const de = {
268
493
  filterRecords: "Datensätze filtern",
269
494
  sort: "Sortieren",
270
495
  sortRecords: "Datensätze sortieren",
496
+ sortByIdSuffix: "(nach ID)",
497
+ sortRelationalHint: "Spalten, die auf einen anderen Datensatz verweisen, werden nicht aufgeführt: Sie lassen sich nur nach der gespeicherten ID sortieren, nicht nach dem in der Zelle angezeigten Namen. Fügen Sie ein Formelfeld mit diesem Namen hinzu, um danach zu sortieren.",
271
498
  group: "Gruppieren",
272
499
  groupBy: "Gruppieren nach",
273
500
  export: "Exportieren",
@@ -297,6 +524,11 @@ const de = {
297
524
  recordEditingTitle: "Datensatzbearbeitung",
298
525
  },
299
526
  managedByBadge: {
527
+ systemWritable: {
528
+ short: "Plattform-Schema",
529
+ title: "Plattformdefiniert, für Admins beschreibbar",
530
+ body: "Das Schema dieses Objekts wird von der Plattform definiert, seine Zeilen können Sie hier jedoch selbst anlegen und bearbeiten. Wer schreiben darf, regeln die delegierte Administration und die Datensatzsicherheit — nicht dieses Abzeichen.",
531
+ },
300
532
  config: {
301
533
  short: "Admin-Konfiguration",
302
534
  title: "Administrator-Konfiguration",
@@ -319,6 +551,7 @@ const de = {
319
551
  },
320
552
  },
321
553
  kanban: {
554
+ uncategorized: "Nicht kategorisiert",
322
555
  addCard: "Karte hinzufügen",
323
556
  addColumn: "Spalte hinzufügen",
324
557
  moveCard: "Karte verschieben",
@@ -340,12 +573,92 @@ const de = {
340
573
  },
341
574
  },
342
575
  gantt: {
576
+ viewMode: {
577
+ day: "Tag",
578
+ week: "Woche",
579
+ month: "Monat",
580
+ quarter: "Quartal",
581
+ year: "Jahr",
582
+ },
583
+ row: {
584
+ expand: "Aufklappen",
585
+ collapse: "Zuklappen",
586
+ open: "Details öffnen",
587
+ },
588
+ aria: {
589
+ taskList: "Vorgangsliste",
590
+ },
591
+ tooltip: {
592
+ days: "T",
593
+ },
594
+ menu: {
595
+ view: "Details anzeigen",
596
+ edit: "Inline bearbeiten",
597
+ delete: "Löschen",
598
+ addPredecessor: "Vorgänger hinzufügen…",
599
+ addSuccessor: "Nachfolger hinzufügen…",
600
+ removeDependency: "Abhängigkeit entfernen",
601
+ noCandidates: "Keine verfügbaren Vorgänge",
602
+ searchTasks: "Vorgänge suchen…",
603
+ },
604
+ delete: {
605
+ title: "Diesen Vorgang löschen?",
606
+ body: "„{{title}}“ wird dauerhaft entfernt. Diese Aktion kann nicht rückgängig gemacht werden.",
607
+ cancel: "Abbrechen",
608
+ confirm: "Löschen",
609
+ deleting: "Wird gelöscht…",
610
+ },
611
+ drawer: {
612
+ fallbackTitle: "Vorgangsdetails",
613
+ },
614
+ linkType: {
615
+ fs: "Ende → Anfang",
616
+ ss: "Anfang → Anfang",
617
+ ff: "Ende → Ende",
618
+ sf: "Anfang → Ende",
619
+ },
620
+ conflict: {
621
+ title: "Terminkonflikt",
622
+ body: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?",
623
+ confirm: "Automatisch neu planen",
624
+ cancel: "Unverändert lassen",
625
+ },
626
+ autoScheduleDlg: {
627
+ title: "Automatisch planen",
628
+ body: "{count} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
629
+ skipped: "{count} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
630
+ confirm: "Anwenden",
631
+ cancel: "Abbrechen",
632
+ none: "Alle Abhängigkeiten sind erfüllt — nichts neu zu planen.",
633
+ },
634
+ resource: {
635
+ header: "Ressource",
636
+ peak: "Spitze",
637
+ over: "überlastet",
638
+ empty: "Keine Vorgänge zum Zuweisen.",
639
+ },
640
+ readOnly: "Schreibgeschützt",
641
+ readOnlyHint: "Die Bearbeitung ist in dieser Ansicht deaktiviert.",
642
+ lockedHint: "Keine Bearbeitungsberechtigung",
643
+ writeFailed: "Speichern fehlgeschlagen — die Änderung wurde zurückgenommen",
343
644
  column: {
344
645
  taskName: "Aufgabenname",
345
646
  start: "Start",
346
647
  end: "Ende",
347
648
  },
348
649
  toolbar: {
650
+ thisWeek: "Diese Woche",
651
+ thisMonth: "Dieser Monat",
652
+ viewMode: "Zeitachsen-Granularität",
653
+ enterFullscreen: "Vollbild aktivieren",
654
+ exitFullscreen: "Vollbild beenden",
655
+ criticalPath: "Kritischen Pfad hervorheben",
656
+ autoSchedule: "Abhängigkeiten automatisch planen",
657
+ exportPng: "Als PNG exportieren",
658
+ exportPdf: "PDF exportieren",
659
+ saveLayout: "Layout speichern",
660
+ undo: "Rückgängig",
661
+ redo: "Wiederholen",
349
662
  prevPeriod: "Vorherige Periode",
350
663
  nextPeriod: "Nächste Periode",
351
664
  zoomIn: "Vergrößern",
@@ -391,6 +704,9 @@ const de = {
391
704
  redo: 'Redo',
392
705
  },
393
706
  detail: {
707
+ editInlineHint: "Zum Bearbeiten doppelklicken",
708
+ systemActor: "System",
709
+ unknownUser: "Unbekannt",
394
710
  back: "Zurück",
395
711
  edit: "Bearbeiten",
396
712
  editInline: "Bearbeiten",
@@ -440,6 +756,18 @@ const de = {
440
756
  attachmentCount: "{{count}} Anhang",
441
757
  attachmentCountPlural: "{{count}} Anhänge",
442
758
  removeAttachment: "Anhang entfernen",
759
+ // Record Attachments panel (enable.files, objectstack#4358)
760
+ attachments: "Anhänge",
761
+ uploadAttachment: "Hochladen",
762
+ loadingAttachments: "Anhänge werden geladen…",
763
+ noAttachments: "Noch keine Anhänge. Laden Sie eine Datei hoch, um zu beginnen.",
764
+ downloadAttachment: "Herunterladen",
765
+ deleteAttachment: "Anhang löschen",
766
+ attachmentDeleteDenied: "Nur die hochladende Person oder jemand mit Bearbeitungsrecht für diesen Datensatz darf diesen Anhang löschen.",
767
+ attachmentParentAccessDenied: "Sie sind nicht berechtigt, Dateien an diesen Datensatz anzuhängen.",
768
+ attachmentDownloadDenied: "Sie sind nicht berechtigt, diesen Anhang herunterzuladen.",
769
+ attachmentAuthRequired: "Bitte melden Sie sich an, um diesen Anhang herunterzuladen.",
770
+ attachmentPermissionDenied: "Sie haben keine Berechtigung für diese Aktion.",
443
771
  unifiedDiff: "Einheitliche Ansicht",
444
772
  sideBySideDiff: "Nebeneinander-Ansicht",
445
773
  noChanges: "Keine Änderungen",
@@ -487,9 +815,15 @@ const de = {
487
815
  saving: "Speichern…",
488
816
  lockedByApproval: "Zur Genehmigung gesperrt",
489
817
  lockedTooltip: "Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; die Bearbeitung ist gesperrt",
818
+ writeStrippedTitle: "Einige Felder wurden nicht gespeichert",
819
+ writeStrippedReadonly: "Schreibgeschützt und daher nicht gespeichert: {{fields}}",
820
+ writeStrippedByState: "Im aktuellen Status dieses Datensatzes nicht bearbeitbar und daher nicht gespeichert: {{fields}}",
821
+ approvalPendingEditable: "In Genehmigung · bearbeitbar",
822
+ approvalPendingTooltip: "Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; dieser Schritt erlaubt weiterhin die Bearbeitung",
490
823
  cancelApproval: "Genehmigung zurückziehen",
491
824
  cancelApprovalInFlight: "Zurückziehen…",
492
825
  cancelApprovalTooltip: "Ausstehende Genehmigungsanfrage zurückziehen, um den Datensatz zu entsperren",
826
+ cancelApprovalTooltipUnlocked: "Ausstehende Genehmigungsanfrage zurückziehen",
493
827
  cancelApprovalFailed: "Genehmigung konnte nicht zurückgezogen werden",
494
828
  cancelApprovalUnavailable: "Das Zurückziehen von Genehmigungen wird bei dieser Datenquelle nicht unterstützt",
495
829
  linkCopied: "Link in die Zwischenablage kopiert",
@@ -605,6 +939,35 @@ const de = {
605
939
  resetZoom: "Zoom zurücksetzen",
606
940
  },
607
941
  dashboard: {
942
+ noRows: "Keine Zeilen",
943
+ pickMeasures: "Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.",
944
+ datasetUnsupported: "Diese Datenquelle unterstützt keine Dataset-Abfragen.",
945
+ details: "Details",
946
+ exportCsv: "CSV exportieren",
947
+ openInList: "In Liste öffnen",
948
+ filters: {
949
+ label: "Dashboard-Filter",
950
+ dateRange: "Zeitraum",
951
+ allTime: "Gesamter Zeitraum",
952
+ custom: "Benutzerdefiniert…",
953
+ all: "Alle",
954
+ reset: "Zurücksetzen",
955
+ range: {
956
+ today: "Heute",
957
+ yesterday: "Gestern",
958
+ this_week: "Diese Woche",
959
+ last_week: "Letzte Woche",
960
+ this_month: "Dieser Monat",
961
+ last_month: "Letzter Monat",
962
+ this_quarter: "Dieses Quartal",
963
+ last_quarter: "Letztes Quartal",
964
+ this_year: "Dieses Jahr",
965
+ last_year: "Letztes Jahr",
966
+ last_7_days: "Letzte 7 Tage",
967
+ last_30_days: "Letzte 30 Tage",
968
+ last_90_days: "Letzte 90 Tage",
969
+ },
970
+ },
608
971
  addWidget: "Widget hinzufügen",
609
972
  removeWidget: "Widget entfernen",
610
973
  editLayout: "Layout bearbeiten",
@@ -732,6 +1095,7 @@ const de = {
732
1095
  navTypeGroup: "Gruppe",
733
1096
  navTypeSeparator: "Trenner",
734
1097
  navTypeAction: "Aktion",
1098
+ navTypeComponent: "Komponente",
735
1099
  navEditIcon: "Symbol bearbeiten",
736
1100
  navToggleVisible: "Sichtbarkeit umschalten",
737
1101
  navHidden: "Ausgeblendet",
@@ -833,8 +1197,199 @@ const de = {
833
1197
  },
834
1198
  },
835
1199
  console: {
1200
+ settingsHub: {
1201
+ title: "Einstellungen",
1202
+ subtitle: "Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.",
1203
+ loadError: "Einstellungen konnten nicht geladen werden",
1204
+ empty: "Keine Einstellungen registriert. Plugins können Einstellungsmanifeste über den SettingsService registrieren.",
1205
+ settingsCount: "{{n}} Einstellungen",
1206
+ beta: "Beta",
1207
+ categories: {
1208
+ Workspace: "Workspace",
1209
+ Communication: "Kommunikation",
1210
+ Security: "Sicherheit",
1211
+ Infrastructure: "Infrastruktur",
1212
+ Beta: "Beta",
1213
+ Other: "Sonstiges",
1214
+ },
1215
+ },
1216
+ objectData: {
1217
+ badge: "Daten",
1218
+ description: "Über die URL definierter Datenausschnitt — nicht an eine gespeicherte Ansicht gebunden.",
1219
+ filteredBy: "Gefiltert nach",
1220
+ removeFilter: "Filter {{field}} entfernen",
1221
+ saveAsView: "Als Ansicht speichern",
1222
+ noAccessTitle: "Zugriff verweigert",
1223
+ noAccess: "Sie haben keine Berechtigung, diese Daten anzuzeigen.",
1224
+ },
1225
+ identityImport: {
1226
+ policyTitle: "Anmelde-Einrichtung für importierte Benutzer",
1227
+ policy: {
1228
+ auto: "Automatisch (empfohlen)",
1229
+ invite: "Einladungen senden",
1230
+ temporary: "Temporäre Passwörter",
1231
+ none: "Kein Passwort (nur Identität)",
1232
+ },
1233
+ policyHint: {
1234
+ auto: "Erreichbare Benutzer erhalten eine Einladung (E-Mail oder SMS); wer nicht erreichbar ist, erhält ein Einmalpasswort, das NUR EINMAL auf dem Ergebnisbildschirm angezeigt wird. Funktioniert mit und ohne E-Mail-/SMS-Dienst.",
1235
+ invite: "Jeder angelegte Benutzer erhält eine E-Mail zum Setzen des Passworts (oder eine Einladungs-SMS bei Zeilen mit nur Telefonnummer). Erfordert einen konfigurierten E-Mail-/SMS-Dienst — nicht erreichbare Zeilen schlagen fehl.",
1236
+ temporary: "Für Installationen ohne E-Mail/SMS: Jeder angelegte Benutzer erhält ein Einmalpasswort, das NUR EINMAL auf dem Ergebnisbildschirm angezeigt wird. Die erste Anmeldung erzwingt eine Änderung.",
1237
+ none: "Benutzer melden sich zuerst mit einem Telefon-OTP, einem Magic Link oder einem Link zum Zurücksetzen des Passworts an und legen dann ihr eigenes Passwort fest.",
1238
+ },
1239
+ passwordsNote: "Temporäre Passwörter — einmalig angezeigt, nie gespeichert. Speichern Sie sie jetzt; jeder Benutzer muss seines bei der ersten Anmeldung ändern.",
1240
+ passwordsMore: "Weitere Einträge ausgelassen — bitte den Download verwenden.",
1241
+ passwordsDownload: "CSV herunterladen",
1242
+ },
1243
+ ai: {
1244
+ usage: {
1245
+ title: "KI-Nutzung",
1246
+ meterBuild: "Erstellen",
1247
+ meterAsk: "Fragen",
1248
+ statusOk: "Reichlich übrig",
1249
+ statusLow: "Wird knapp",
1250
+ statusFull: "Limit erreicht",
1251
+ resetsDaily: "Wird heute Nacht zurückgesetzt",
1252
+ resetsMonthly: "Wird im nächsten Zyklus zurückgesetzt",
1253
+ ctaUpgrade: "Upgraden, um weiterzumachen",
1254
+ ctaTopUp: "Credits hinzufügen, um fortzufahren",
1255
+ ariaLabel: "KI-Nutzung: {{status}}",
1256
+ },
1257
+ workspaceTitle: "KI-Workspace",
1258
+ workspaceSubtitle: "Fragen stellen, prüfen und Unterhaltungen fortsetzen",
1259
+ openChats: "Chats öffnen",
1260
+ chats: "Chats",
1261
+ chatsDescription: "KI-Unterhaltungen durchsuchen und verwalten.",
1262
+ share: "Teilen",
1263
+ shareTitle: "Diese Unterhaltung teilen",
1264
+ shareDisabledTitle: "Beginnen Sie zu chatten, um das Teilen zu aktivieren",
1265
+ newChat: "Neu",
1266
+ searchChats: "Chats durchsuchen...",
1267
+ noChatsYet: "Noch keine Chats",
1268
+ noChatsDescription: "Starten Sie eine neue Unterhaltung, um sie hier zu sehen.",
1269
+ noMatchingChats: "Keine passenden Chats.",
1270
+ newConversation: "Neue Unterhaltung",
1271
+ renameConversation: "Unterhaltung umbenennen",
1272
+ deleteConversation: "Unterhaltung löschen",
1273
+ saveRename: "Umbenennung speichern",
1274
+ cancelRename: "Umbenennung abbrechen",
1275
+ loadingHistory: "Unterhaltungsverlauf wird geladen...",
1276
+ conversationReady: "Unterhaltung bereit",
1277
+ preparingConversation: "Neue Unterhaltung wird vorbereitet",
1278
+ offlineDemoMode: "Offline-Demomodus — Agentenliste nicht verfügbar",
1279
+ sendFailedRateLimited: "Sie senden zu schnell Nachrichten. Ihre Nachricht wird unten aufbewahrt — warten Sie einen Moment und versuchen Sie es erneut.",
1280
+ sendFailedGeneric: "Ihre Nachricht konnte nicht gesendet werden. Sie wird unten aufbewahrt — bitte versuchen Sie es erneut.",
1281
+ askAgent: "{{agent}} fragen...",
1282
+ assistant: "Assistent",
1283
+ liveCanvas: "Live-Vorschau — {{app}} (Entwurf)",
1284
+ liveCanvasUnlisted: "Live-App — {{app}} (nicht gelistet bis zur Veröffentlichung)",
1285
+ loadingAgents: "Agenten werden geladen...",
1286
+ askAnything: "Fragen Sie irgendetwas...",
1287
+ emptyTitle: "Unterhaltung beginnen",
1288
+ emptyDescription: "Fragen Sie irgendetwas — der Assistent hat Zugriff auf den Kontext Ihrer aktuellen App.",
1289
+ switchAssistant: "Assistenten wechseln",
1290
+ chooseAgent: "Assistenten wählen…",
1291
+ empty: {
1292
+ build: {
1293
+ title: "Mit KI erstellen",
1294
+ description: "Beschreiben Sie eine App oder einen Workflow in einfachen Worten — ich entwerfe die Objekte, Bildschirme und Automatisierungen, dann prüfen und veröffentlichen Sie.",
1295
+ },
1296
+ ask: {
1297
+ title: "Ihre Daten fragen",
1298
+ description: "Stellen Sie Fragen zu Ihren Datensätzen — Anzahlen, Listen und Zusammenfassungen über die Daten, auf die Sie zugreifen können.",
1299
+ },
1300
+ editApp: {
1301
+ title: "„{{app}}“ wird bearbeitet",
1302
+ titleGeneric: "Diese App bearbeiten",
1303
+ description: "Was möchten Sie ändern? Ich passe diese App direkt an — ein Feld, Objekt, eine Ansicht oder Automatisierung hinzufügen oder Vorhandenes anpassen.",
1304
+ },
1305
+ },
1306
+ clearConversation: "Leeren",
1307
+ sendHint: "zum Senden",
1308
+ agentActivity: "Agentenaktivität",
1309
+ toolCompleted: "Abgeschlossen",
1310
+ toolRunning: "Läuft",
1311
+ toolAwaitingApproval: "Warten auf Freigabe",
1312
+ toolFailed: "Fehlgeschlagen",
1313
+ toolDetailsHidden: "Tool-Eingaben und Rohergebnisse sind in dieser Ansicht ausgeblendet.",
1314
+ copy: "Kopieren",
1315
+ copied: "Kopiert",
1316
+ regenerate: "Neu generieren",
1317
+ model: "Modell",
1318
+ submit: "Senden",
1319
+ uploadFiles: "Dateien hochladen",
1320
+ stopResponse: "Antwort stoppen",
1321
+ trace: "Trace",
1322
+ viewTrace: "Trace anzeigen",
1323
+ nextSteps: "Wie geht es weiter",
1324
+ publishDrafts: "Veröffentlichen",
1325
+ publishOk: "Veröffentlicht — die Objekte sind jetzt live.",
1326
+ seedWarn: "Veröffentlicht, aber einige Beispieldaten konnten nicht geladen werden.",
1327
+ openBuiltApp: "App öffnen",
1328
+ designBuiltApp: "In Studio gestalten",
1329
+ previewDraft: "Vorschau",
1330
+ previewApp: "App-Vorschau",
1331
+ resizeSplit: "Chat und Vorschau anpassen",
1332
+ hideChats: "Chats ausblenden",
1333
+ showChats: "Chats anzeigen",
1334
+ planTitle: "Vorgeschlagener Plan",
1335
+ planQuestions: "Vor dem Erstellen bestätigen",
1336
+ planAssumptions: "Annahmen",
1337
+ planApproveHint: "Antworten Sie, um diesen Plan zu genehmigen oder anzupassen.",
1338
+ planApprove: "Erstellen",
1339
+ planAdjust: "Anpassen",
1340
+ justNow: "gerade eben",
1341
+ minutesAgo: "vor {{count}} Min.",
1342
+ hoursAgo: "vor {{count}} Std.",
1343
+ daysAgo: "vor {{count}} T.",
1344
+ agentLabels: {
1345
+ ask: "Fragen",
1346
+ build: "Erstellen",
1347
+ dataChat: "Assistent",
1348
+ metadataAssistant: "Metadaten-Assistent",
1349
+ },
1350
+ suggestions: {
1351
+ dataChat: {
1352
+ userCount: "Wie viele Benutzer gibt es im System? Liste ihre E-Mail-Adressen auf.",
1353
+ recentRecords: "Liste die 5 zuletzt erstellten Datensätze auf.",
1354
+ recordCounts: "Zähle die Datensätze je Objekt.",
1355
+ },
1356
+ metadataAssistant: {
1357
+ buildCrm: "Erstelle ein Vertriebs-CRM — Kunden, Kontakte und eine Deal-Pipeline, die ich nach Phase summieren kann.",
1358
+ buildApp: "Erstelle einen Projekt-Tracker — Projekte, Aufgaben mit Verantwortlichen und Fälligkeitsdaten sowie ein Board nach Status.",
1359
+ buildFlow: "Entwirf einen Support-Desk — Tickets mit Priorität, einen Status-Workflow und Kundenverknüpfungen.",
1360
+ buildInventory: "Erstelle eine Bestands-App — Produkte, Lagerbestände, Lieferanten und Sichtbarkeit niedriger Bestände.",
1361
+ buildRecruiting: "Erstelle einen Bewerber-Tracker — Kandidaten, offene Stellen, Interviewphasen und Notizen.",
1362
+ },
1363
+ generic: {
1364
+ help: "Wobei kannst du mir helfen?",
1365
+ availableObjects: "Liste die verfügbaren Datenobjekte auf.",
1366
+ recentActivity: "Fasse meine letzten Aktivitäten zusammen.",
1367
+ },
1368
+ editApp: {
1369
+ addField: "Füge einem der Objekte ein Feld hinzu.",
1370
+ addObject: "Füge ein neues Objekt hinzu und verknüpfe es mit einem bestehenden.",
1371
+ addDashboard: "Füge ein Dashboard für die wichtigsten Kennzahlen hinzu.",
1372
+ addAutomation: "Füge eine Automatisierung hinzu — eine Freigabe, einen Statusablauf oder eine Benachrichtigung.",
1373
+ },
1374
+ },
1375
+ changesTitle: "Änderungen bestätigen",
1376
+ changesConfirmed: "Bestätigt",
1377
+ changesConfirm: "Bestätigen",
1378
+ changesConfirmHint: "Antworten Sie, um diese Änderung zu bestätigen oder anzupassen.",
1379
+ changeVerb: {
1380
+ createObject: "Objekt erstellen",
1381
+ addField: "Feld hinzufügen",
1382
+ modifyField: "Feld ändern",
1383
+ deleteField: "Feld löschen",
1384
+ createMetadata: "Erstellen",
1385
+ updateMetadata: "Ändern",
1386
+ createSeed: "Beispieldaten erzeugen",
1387
+ createPackage: "App-Paket erstellen",
1388
+ },
1389
+ },
836
1390
  title: "ObjectStack Konsole",
837
1391
  initializing: "Anwendung wird initialisiert...",
1392
+ loadingHint: "Die Einrichtung einer neuen Umgebung kann einen Moment dauern.",
838
1393
  breadcrumb: {
839
1394
  dashboards: "Dashboards",
840
1395
  pages: "Seiten",
@@ -876,6 +1431,7 @@ const de = {
876
1431
  toggleDarkMode: "Dunkelmodus umschalten",
877
1432
  },
878
1433
  commandPalette: {
1434
+ title: "Befehlspalette",
879
1435
  placeholder: "Befehl eingeben oder suchen...",
880
1436
  noResults: "Keine Ergebnisse gefunden.",
881
1437
  objects: "Objekte",
@@ -909,6 +1465,14 @@ const de = {
909
1465
  system: "System",
910
1466
  },
911
1467
  objectView: {
1468
+ viewTypeTree: "Baum",
1469
+ viewTypeTreeDesc: "Selbstreferenzierende Datensätze über ein übergeordnetes Feld zu einer Hierarchie verschachteln.",
1470
+ parentField: "Übergeordnetes Feld",
1471
+ parentFieldHelp: "Das Feld, das auf den übergeordneten Datensatz (dasselbe Objekt) verweist und die Hierarchie definiert. Nur selbstreferenzierende Felder kommen infrage.",
1472
+ viewName: "Name",
1473
+ viewNameHelp: "Technischer Schlüssel (snake_case). Wird aus dem Titel automatisch gefüllt — bei Bedarf anpassen.",
1474
+ viewNameRequired: "Geben Sie einen Schlüssel ein (Kleinbuchstaben, Ziffern, Unterstrich). Bei nicht-lateinischen Titeln wird er nicht automatisch gefüllt.",
1475
+ viewNameInvalid: "Verwenden Sie Kleinbuchstaben, Ziffern und Unterstriche; beginnen Sie mit einem Buchstaben oder Unterstrich.",
912
1476
  systemViewReadonly: 'System view defined in code - duplicate to customize.',
913
1477
  expandToPage: 'Open as full page',
914
1478
  objectNotFound: "Objekt nicht gefunden",
@@ -1122,7 +1686,28 @@ const de = {
1122
1686
  },
1123
1687
  },
1124
1688
  auth: {
1689
+ setPassword: {
1690
+ title: "Wiederherstellungspasswort festlegen",
1691
+ description: "Sie haben sich über Single Sign-on angemeldet. Legen Sie ein lokales Passwort fest, damit Sie sich weiterhin direkt an dieser Umgebung anmelden können, falls SSO einmal nicht verfügbar ist.",
1692
+ email: "E-Mail",
1693
+ newPassword: "Neues Passwort",
1694
+ confirmPassword: "Passwort bestätigen",
1695
+ submit: "Passwort festlegen",
1696
+ submitting: "Wird gespeichert…",
1697
+ success: "Lokales Passwort festgelegt",
1698
+ failed: "Passwort konnte nicht festgelegt werden",
1699
+ passwordsMismatch: "Die Passwörter stimmen nicht überein",
1700
+ noSession: "Ihre Sitzung ist abgelaufen.",
1701
+ backToSignIn: "Erneut anmelden",
1702
+ },
1125
1703
  login: {
1704
+ signingIn: "Sie werden angemeldet…",
1705
+ ssoHandoff: "Weiter zu {{target}}",
1706
+ devAdminHint: {
1707
+ title: "Entwicklungsinstanz",
1708
+ body: "Melden Sie sich mit dem vorkonfigurierten Entwickler-Admin an:",
1709
+ dismiss: "Ausblenden",
1710
+ },
1126
1711
  title: "In Ihr Konto einloggen",
1127
1712
  description: "Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um fortzufahren",
1128
1713
  emailLabel: "E-Mail",
@@ -1135,6 +1720,7 @@ const de = {
1135
1720
  noAccountText: "Noch kein Konto?",
1136
1721
  signUpText: "Registrieren",
1137
1722
  errors: {
1723
+ oauthCallbackFailed: "Die Single-Sign-on-Anmeldung konnte nicht abgeschlossen werden — der Anmeldelink ist abgelaufen oder wurde bereits verwendet. Bitte versuchen Sie es erneut.",
1138
1724
  invalidCredentials: "Ungültige E-Mail oder Passwort. Bitte erneut versuchen.",
1139
1725
  emailNotVerified: "Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sich anmelden.",
1140
1726
  },
@@ -1260,6 +1846,40 @@ const de = {
1260
1846
  shell: {
1261
1847
  tenantHostHint: "Sie melden sich bei diesem Arbeitsbereich an",
1262
1848
  },
1849
+ layout: {
1850
+ headline: "Leistungsstarke Geschäftsanwendungen schneller entwickeln.",
1851
+ subhead: "Die universelle Plattform für Unternehmensdatenverwaltung, Workflows und Analysen.",
1852
+ },
1853
+ remediation: {
1854
+ signOut: "Stattdessen abmelden",
1855
+ password: {
1856
+ title: "Ihr Passwort ist abgelaufen",
1857
+ fallbackMessage: "Bitte legen Sie ein neues Passwort fest, um fortzufahren.",
1858
+ current: "Aktuelles Passwort",
1859
+ next: "Neues Passwort",
1860
+ confirm: "Neues Passwort bestätigen",
1861
+ submit: "Passwort ändern & fortfahren",
1862
+ submitting: "Wird aktualisiert…",
1863
+ mismatch: "Die neuen Passwörter stimmen nicht überein.",
1864
+ failed: "Passwort konnte nicht geändert werden.",
1865
+ },
1866
+ mfa: {
1867
+ title: "Zwei-Faktor-Authentifizierung einrichten",
1868
+ fallbackMessage: "Ihre Organisation verlangt eine Authenticator-App, um fortzufahren.",
1869
+ confirmPassword: "Passwort bestätigen",
1870
+ continue: "Weiter",
1871
+ preparing: "Wird vorbereitet…",
1872
+ enrollFailed: "Registrierung konnte nicht gestartet werden.",
1873
+ scanTitle: "Mit Ihrer Authenticator-App scannen",
1874
+ scanBody: "Scannen Sie diesen QR-Code mit Google Authenticator, 1Password, Authy usw. und geben Sie dann den 6-stelligen Code ein.",
1875
+ backupTitle: "Backup-Codes speichern",
1876
+ backupBody: "Bewahren Sie diese sicher auf — jeder Code kann einmal verwendet werden, falls Sie Ihr Gerät verlieren.",
1877
+ codeLabel: "6-stelliger Code",
1878
+ verify: "Überprüfen & fortfahren",
1879
+ verifying: "Wird überprüft…",
1880
+ invalidCode: "Ungültiger Code. Bitte erneut versuchen.",
1881
+ },
1882
+ },
1263
1883
  },
1264
1884
  profile: {
1265
1885
  title: "Profil",
@@ -1324,11 +1944,15 @@ const de = {
1324
1944
  settings: "Arbeitsbereichseinstellungen",
1325
1945
  },
1326
1946
  help: {
1947
+ onThisPage: "Auf dieser Seite",
1948
+ keyboardShortcuts: "Tastenkürzel",
1327
1949
  appDocs: 'Dokumentation dieser App',
1328
1950
  allDocs: 'Gesamte Dokumentation',
1329
1951
  onlineDocs: 'Online-Dokumentation',
1330
1952
  },
1331
1953
  sidebar: {
1954
+ packageManagement: "Paketverwaltung",
1955
+ searchNavigation: "Navigation durchsuchen...",
1332
1956
  settings: "Einstellungen",
1333
1957
  help: "Hilfe",
1334
1958
  helpTooltip: "Hilfe und Dokumentation",
@@ -1345,14 +1969,66 @@ const de = {
1345
1969
  removeFromFavorites: "{{name}} aus Favoriten entfernen",
1346
1970
  },
1347
1971
  topbar: {
1972
+ openAssistant: "Assistent {{name}} öffnen",
1973
+ offline: "Offline",
1974
+ usersOnline: "Aktuell online befindliche Benutzer",
1975
+ switchView: "Ansicht wechseln",
1976
+ switchObject: "Objekt wechseln",
1977
+ connection: {
1978
+ connected: "Verbunden",
1979
+ connecting: "Verbindung wird hergestellt...",
1980
+ reconnecting: "Verbindung wird wiederhergestellt...",
1981
+ disconnected: "Getrennt",
1982
+ error: "Verbindungsfehler",
1983
+ },
1984
+ stage: {
1985
+ preview: "Vorschau",
1986
+ beta: "Beta",
1987
+ tooltip: "Diese Plattform befindet sich in der Vorschau — Funktionen können sich ändern.",
1988
+ },
1348
1989
  aiAssistant: "KI-Assistent",
1349
1990
  designInStudio: "Im Studio gestalten",
1350
1991
  },
1351
1992
  home: {
1993
+ build: {
1994
+ title: "App erstellen",
1995
+ subtitle: "Von Grund auf beginnen — Objekte, Formulare, Automatisierungen und Oberflächen gestalten.",
1996
+ },
1997
+ template: {
1998
+ title: "Mit einer Vorlage starten",
1999
+ subtitle: "Installieren Sie eine Vorlagen-App aus dem Marktplatz und passen Sie sie an.",
2000
+ },
2001
+ welcomeAdminDescription: "Beschreiben Sie Ihr Geschäft in einem Satz — die KI erzeugt die Objekte, Bildschirme, APIs und Agent-Tools. Oder richten Sie alles selbst über das Menü links ein.",
2002
+ welcomeAdminDescriptionNoBuild: "Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein. Sobald Daten vorhanden sind, kann der KI-Assistent bei der Auswertung helfen.",
2003
+ welcomeAdminDescriptionNoAi: "Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein.",
2004
+ noAppsTitle: "Noch keine Anwendungen",
2005
+ noAppsDescription: "Ihr Workspace wird eingerichtet — Apps, die Ihr Administrator für Sie freigibt, erscheinen hier.",
2006
+ buildWithAI: "Mit KI erstellen",
2007
+ askAI: "KI fragen",
2008
+ recoveryReminder: {
2009
+ message: "Legen Sie ein Wiederherstellungspasswort fest, damit Sie sich auch anmelden können, wenn Single Sign-on einmal nicht verfügbar ist.",
2010
+ cta: "Passwort festlegen",
2011
+ dismiss: "Ausblenden",
2012
+ },
2013
+ pendingDrafts: {
2014
+ message: "Sie haben {{count}} unveröffentlichte Änderung(en) — veröffentlichen Sie sie, um sie live zu schalten.",
2015
+ cta: "Veröffentlichen",
2016
+ publishing: "Wird veröffentlicht…",
2017
+ published: "Veröffentlicht! Ihre Änderungen sind live.",
2018
+ publishFailed: "Veröffentlichen fehlgeschlagen",
2019
+ },
1352
2020
  title: "Startseite",
1353
2021
  subtitle: "Ihr Arbeitsbereich-Dashboard",
1354
2022
  nav: "Startseite",
1355
2023
  allApps: "Alle Anwendungen",
2024
+ yourApps: "Ihre Apps",
2025
+ showMoreApps: "Mehr",
2026
+ showLess: "Weniger anzeigen",
2027
+ continueEmpty: "Elemente, die Sie öffnen, erscheinen hier.",
2028
+ actionCenter: {
2029
+ title: "Erfordert Ihre Aufmerksamkeit",
2030
+ empty: "Alles erledigt",
2031
+ },
1356
2032
  loading: "Arbeitsbereich wird geladen...",
1357
2033
  recent: "Kürzlich",
1358
2034
  starred: "Mit Stern",
@@ -1404,7 +2080,21 @@ const de = {
1404
2080
  },
1405
2081
  },
1406
2082
  layout: {
2083
+ systemNav: {
2084
+ systemSettings: "Systemeinstellungen",
2085
+ applications: "Anwendungen",
2086
+ appMarketplace: "App-Marktplatz",
2087
+ objectManager: "Objekt-Manager",
2088
+ users: "Benutzer",
2089
+ organizations: "Organisationen",
2090
+ roles: "Rollen",
2091
+ configuration: "Konfiguration",
2092
+ createApp: "App erstellen",
2093
+ },
1407
2094
  appSwitcher: {
2095
+ switchApplication: "Anwendung wechseln",
2096
+ appsAvailable: "{{count}} Apps verfügbar",
2097
+ editNavigation: "Navigation bearbeiten",
1408
2098
  home: "Startseite",
1409
2099
  addApp: "App hinzufügen",
1410
2100
  editApp: "App bearbeiten",
@@ -1497,8 +2187,8 @@ const de = {
1497
2187
  uploading: "Wird hochgeladen…",
1498
2188
  defaultActionTitle: "Aktion",
1499
2189
  ok: "OK",
1500
- lookupPlaceholder: "Datensatz-ID (UUID) für {{label}} einfügen",
1501
- lookupHelpText: "Geben Sie die Datensatz-ID des referenzierten Objekts ein. Eine Auswahlhilfe kommt bald.",
2190
+ lookupPlaceholder: "Datensatz-ID für {{label}}",
2191
+ lookupHelpText: "Für diesen Parameter ist kein Referenzobjekt konfiguriert, daher ist die Datensatzauswahl nicht verfügbar. Geben Sie eine Datensatz-ID ein oder bitten Sie einen Administrator, den Aktionsparameter zu korrigieren.",
1502
2192
  },
1503
2193
  actionConfirm: {
1504
2194
  title: "Aktion bestätigen",
@@ -1523,6 +2213,8 @@ const de = {
1523
2213
  updateFailed: "Navigation konnte nicht aktualisiert werden",
1524
2214
  },
1525
2215
  objectActions: {
2216
+ resetPackageSetConfirm: "Dieses Berechtigungsset gehört zu einem installierten Paket und kann nicht entfernt werden. Beim Löschen wird es auf den ausgelieferten Ausgangszustand zurückgesetzt und Ihre Anpassungen in dieser Umgebung gehen verloren. Fortfahren?",
2217
+ resetPackageSetSuccess: "Berechtigungsset auf den ausgelieferten Ausgangszustand zurückgesetzt",
1526
2218
  deleteSuccess: "{{label}} erfolgreich gelöscht",
1527
2219
  deleteFailed: "{{label}} konnte nicht gelöscht werden",
1528
2220
  noRecordId: "Keine Datensatz-ID angegeben",
@@ -1687,6 +2379,7 @@ const de = {
1687
2379
  },
1688
2380
  },
1689
2381
  organizations: {
2382
+ create: "Workspace erstellen",
1690
2383
  mine: "Meine Organisationen",
1691
2384
  title: "Organisationen",
1692
2385
  heading: "Ihre Organisationen",
@@ -1700,6 +2393,11 @@ const de = {
1700
2393
  noMatches: "Keine Organisationen entsprechen Ihrer Suche.",
1701
2394
  },
1702
2395
  notifications: {
2396
+ regionLabel: "Benachrichtigungen",
2397
+ groupCount: "{{count}} Benachrichtigungen",
2398
+ groupUnread: "{{count}} ungelesen",
2399
+ groupMarkRead: "Als gelesen markieren",
2400
+ groupMarkReadTitle: "Alle dieses Typs als gelesen markieren",
1703
2401
  empty: "Keine Benachrichtigungen",
1704
2402
  markAllRead: "Alle als gelesen markieren",
1705
2403
  viewAll: "Alle Benachrichtigungen anzeigen",
@@ -1818,7 +2516,103 @@ const de = {
1818
2516
  done: 'Fertig — ausblenden',
1819
2517
  },
1820
2518
  },
2519
+ excelImport: {
2520
+ noImportableFields: "Dieses Objekt hat keine importierbaren Felder.",
2521
+ schemaReadFailed: "Das Objektschema konnte nicht gelesen werden.",
2522
+ imported: "{{count}} Zeile(n) in {{object}} importiert.",
2523
+ importFrom: "Echte Zeilen importieren aus",
2524
+ into: "nach",
2525
+ opening: "Wird geöffnet…",
2526
+ importAction: "Importieren",
2527
+ dismiss: "Verwerfen",
2528
+ },
2529
+ cloudOnboarding: {
2530
+ hintCreate: "Erstellen Sie Ihre erste Umgebung — ein privater Arbeitsbereich mit eigener URL, Datenbank und eigenem Tarif. Die Entwicklung findet darin statt.",
2531
+ hintReady: "Ihre Produktionsumgebung ist bereit. Öffnen Sie sie, um Ihre Apps zu erstellen und auszuführen — alles geschieht innerhalb der Umgebung.",
2532
+ createEnvironment: "Umgebung erstellen",
2533
+ openProduction: "Produktion öffnen",
2534
+ manageEnvironments: "Umgebungen verwalten",
2535
+ },
2536
+ aiModelStatus: {
2537
+ summary: "Erstellen / Fragen nutzt {{conversational}} ({{conversationalSource}}); strukturiert nutzt {{structured}} ({{structuredSource}}).",
2538
+ summaryRouting: "Routing-Richtlinie: kostenlose Tarife → {{free}}, kostenpflichtige Tarife → {{paid}}.",
2539
+ modelUnknown: "unbekannt",
2540
+ sourceUnknown: "vom Adapter nicht gemeldet",
2541
+ rowConversational: "Build-/Ask-Modell",
2542
+ rowStructured: "Strukturiert (Blueprint / Seed)",
2543
+ rowReasoning: "Reasoning-Aufwand",
2544
+ readFailed: "Das effektive KI-Modell konnte nicht gelesen werden. In dieser Umgebung läuft möglicherweise kein KI-Dienst, oder Ihnen fehlt die Berechtigung ai:read.",
2545
+ readFailedWithStatus: "Das effektive KI-Modell konnte nicht gelesen werden (HTTP {{status}}). In dieser Umgebung läuft möglicherweise kein KI-Dienst, oder Ihnen fehlt die Berechtigung ai:read.",
2546
+ overridesInEffect: "Aktive Overrides: ",
2547
+ noOverrides: "keine — es gelten die Standardwerte des bereitgestellten Codes.",
2548
+ adapter: "Adapter: ",
2549
+ sourceCodeDefault: "Code-Standard (kein env-Override)",
2550
+ sourceInherits: "wie build/ask",
2551
+ sourcePinned: "festgelegt durch {{source}}",
2552
+ },
2553
+ chatbotError: {
2554
+ title: "Antwort fehlgeschlagen",
2555
+ fallbackDetail: "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.",
2556
+ details: "Details",
2557
+ hide: "Ausblenden",
2558
+ retry: "Erneut versuchen",
2559
+ },
2560
+ chatbotQuota: {
2561
+ title: "Upgrade erforderlich",
2562
+ fallbackMessage: "Sie haben Ihr KI-Kontingent erreicht.",
2563
+ buyCredits: "Credit-Paket kaufen",
2564
+ upgradePlan: "Tarif upgraden",
2565
+ },
2566
+ environment: {
2567
+ addEnvironment: "Umgebung hinzufügen",
2568
+ setUpProduction: "Produktionsumgebung einrichten",
2569
+ addDevelopment: "Entwicklungsumgebung hinzufügen",
2570
+ },
2571
+ cloudConnection: {
2572
+ checking: "Verbindung wird geprüft…",
2573
+ retry: "Erneut versuchen",
2574
+ errors: {
2575
+ expired: "Die Anfrage ist abgelaufen, bevor sie genehmigt wurde. Starten Sie erneut.",
2576
+ bindFailed: "Verbindung fehlgeschlagen.",
2577
+ deviceCodeFailed: "Anforderung des Gerätecodes fehlgeschlagen.",
2578
+ },
2579
+ waiting: {
2580
+ popupOpened: "Genehmigen Sie die Verbindung im soeben geöffneten Fenster — diese Seite aktualisiert sich von selbst.",
2581
+ polling: "Warten auf die Genehmigung in der Cloud-Konsole…",
2582
+ openApproval: "Genehmigungsseite öffnen",
2583
+ copy: "Kopieren",
2584
+ copied: "Kopiert",
2585
+ codePrefilled: "Der Code ist auf der Genehmigungsseite bereits eingetragen.",
2586
+ openItHere: "Fenster nicht erschienen? Hier öffnen",
2587
+ cancel: "Abbrechen",
2588
+ },
2589
+ bound: {
2590
+ title: "Mit ObjectStack Cloud verbunden",
2591
+ runtime: "Runtime",
2592
+ organization: "Organisation",
2593
+ approvedBy: "Genehmigt von",
2594
+ runtimeId: "Runtime-ID",
2595
+ environment: "Umgebung",
2596
+ since: "Verbunden seit",
2597
+ privatePackages: "Die privaten Pakete Ihrer Organisation erscheinen jetzt im Marktplatz unter „Ihre Organisation“.",
2598
+ disconnect: "Verbindung trennen",
2599
+ },
2600
+ unbound: {
2601
+ title: "Nicht verbunden",
2602
+ body: "Verbinden Sie diese Runtime mit einer ObjectStack Control Plane, um die privaten Pakete Ihrer Organisation zu durchsuchen und hier zu installieren. Die Genehmigung erfolgt mit einem einzigen Klick in Ihrem Cloud-Konto — es werden keine IDs oder Zugangsdaten auf dieser Seite eingegeben.",
2603
+ connect: "Verbinden",
2604
+ },
2605
+ },
1821
2606
  marketplace: {
2607
+ suggestedBindings: {
2608
+ promptEveryone: "Diese App empfiehlt, „{{set}}“ allen angemeldeten Benutzern zu gewähren (Position „Everyone“).",
2609
+ promptGuest: "Diese App empfiehlt, „{{set}}“ nicht authentifizierten Besuchern zu gewähren (Position „Guest“).",
2610
+ confirm: "Gewähren",
2611
+ confirming: "Wird gewährt…",
2612
+ dismiss: "Ausblenden",
2613
+ confirmedToast: "„{{set}}“ ist jetzt {{anchor}} gewährt.",
2614
+ dismissedToast: "Vorschlag für „{{set}}“ ausgeblendet.",
2615
+ },
1822
2616
  title: "App-Marktplatz",
1823
2617
  subtitle: "Durchsuchen Sie genehmigte Apps, die im ObjectStack-Katalog veröffentlicht wurden. Klicken Sie auf eine App, um Details zu sehen und sie in eine Ihrer Umgebungen zu installieren.",
1824
2618
  searchPlaceholder: "Apps nach Name oder Manifest-ID suchen…",
@@ -1870,6 +2664,7 @@ const de = {
1870
2664
  updateAvailable: 'Update verfügbar',
1871
2665
  },
1872
2666
  action: {
2667
+ installed: "Installiert",
1873
2668
  install: "Installieren",
1874
2669
  reinstall: "Neu installieren",
1875
2670
  working: "Verarbeite…",
@@ -1940,6 +2735,14 @@ const de = {
1940
2735
  yearsAgo: "vor {{count}} Jahren",
1941
2736
  },
1942
2737
  },
2738
+ approvals: {
2739
+ approve: 'Genehmigen',
2740
+ reject: 'Ablehnen',
2741
+ comment: 'Kommentar (optional)',
2742
+ approveSuccess: 'Genehmigt',
2743
+ rejectSuccess: 'Abgelehnt',
2744
+ rejectConfirm: 'Diese Genehmigungsanfrage ablehnen?',
2745
+ },
1943
2746
  approvalsInbox: {
1944
2747
  loadMore: 'Mehr laden',
1945
2748
  loadingMore: 'Lädt…',
@@ -1964,13 +2767,28 @@ const de = {
1964
2767
  slaRemaining: 'SLA noch {{dur}}',
1965
2768
  slaOverdue: 'SLA überfällig {{dur}}',
1966
2769
  actReassign: 'Übergeben',
2770
+ reassignFromTo: 'von {{from}} an {{to}}',
1967
2771
  actRemind: 'Erinnert',
1968
2772
  actRequestInfo: 'Rückfrage gestellt',
1969
2773
  actComment: 'Kommentiert',
1970
2774
  stepProgress: 'Genehmigungsschritte',
1971
2775
  prevRequest: 'Zurück',
1972
2776
  nextRequest: 'Weiter',
1973
- positionOf: '{{index}} von {{total}}',
2777
+ positionOf: 'Anfrage {{index}} von {{total}}',
2778
+ progressApprovals: 'Genehmigungen — {{got}} von {{need}}',
2779
+ progressGroups: 'Freigabefortschritt — {{got}} von {{need}} Gruppen',
2780
+ progressEligible: '{{count}} berechtigte Genehmiger',
2781
+ progressBar: 'Entscheidungsfortschritt',
2782
+ declaredActions: 'Aktionen',
2783
+ attachmentChip: 'Anhang',
2784
+ attachmentOpenFailed: 'Anhang konnte nicht geöffnet werden – bitte erneut versuchen',
2785
+ approveOneTitle: '„{{title}}“ genehmigen?',
2786
+ approveOneBody: 'Die Anfrage wird mit Ihrer Identität genehmigt. Um einen Kommentar oder Anhang hinzuzufügen, öffnen Sie die Anfrage.',
2787
+ flowOrigin: 'Vom Flow gestartet',
2788
+ sortBy: 'Sortieren',
2789
+ sortRecent: 'Neueste zuerst',
2790
+ sortOldest: 'Älteste zuerst',
2791
+ sortAmount: 'Betrag (hoch→niedrig)',
1974
2792
  quickPhrase1: 'Genehmigt — erfüllt die Anforderungen.',
1975
2793
  quickPhrase2: 'Unter Vorbehalt genehmigt — bitte Umsetzung beobachten.',
1976
2794
  quickPhrase3: 'Bitte Unterlagen ergänzen und erneut einreichen.',
@@ -2099,6 +2917,10 @@ const de = {
2099
2917
  retry: 'Erneut versuchen',
2100
2918
  },
2101
2919
  draftBar: {
2920
+ messageClean: "Entwurfsvorschau — keine unveröffentlichten Änderungen; alles hier ist bereits live.",
2921
+ sampleDataTitle: "Beispieldaten erscheinen nach dem Veröffentlichen",
2922
+ sampleDataBody: "Sie sehen eine Vorschau der Struktur Ihrer App. Veröffentlichen Sie sie, um Beispieldatensätze zu laden und sie live zu schalten.",
2923
+ publishCta: "Veröffentlichen und live ansehen",
2102
2924
  message: 'Entwurfsvorschau — Sie sehen unveröffentlichte Änderungen. Nichts ist live, bis Sie veröffentlichen.',
2103
2925
  publish: 'Veröffentlichen',
2104
2926
  publishing: 'Wird veröffentlicht…',