@object-ui/i18n 16.1.0 → 17.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,18 @@ 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",
823
+ approvalProgress: "Genehmigungen — {{got}} von {{need}}",
824
+ approvalProgressGroups: "Freigabe — {{got}} von {{need}} Gruppen",
825
+ approvalProgressLabel: "Genehmigungsfortschritt",
490
826
  cancelApproval: "Genehmigung zurückziehen",
491
827
  cancelApprovalInFlight: "Zurückziehen…",
492
828
  cancelApprovalTooltip: "Ausstehende Genehmigungsanfrage zurückziehen, um den Datensatz zu entsperren",
829
+ cancelApprovalTooltipUnlocked: "Ausstehende Genehmigungsanfrage zurückziehen",
493
830
  cancelApprovalFailed: "Genehmigung konnte nicht zurückgezogen werden",
494
831
  cancelApprovalUnavailable: "Das Zurückziehen von Genehmigungen wird bei dieser Datenquelle nicht unterstützt",
495
832
  linkCopied: "Link in die Zwischenablage kopiert",
@@ -605,6 +942,35 @@ const de = {
605
942
  resetZoom: "Zoom zurücksetzen",
606
943
  },
607
944
  dashboard: {
945
+ noRows: "Keine Zeilen",
946
+ pickMeasures: "Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.",
947
+ datasetUnsupported: "Diese Datenquelle unterstützt keine Dataset-Abfragen.",
948
+ details: "Details",
949
+ exportCsv: "CSV exportieren",
950
+ openInList: "In Liste öffnen",
951
+ filters: {
952
+ label: "Dashboard-Filter",
953
+ dateRange: "Zeitraum",
954
+ allTime: "Gesamter Zeitraum",
955
+ custom: "Benutzerdefiniert…",
956
+ all: "Alle",
957
+ reset: "Zurücksetzen",
958
+ range: {
959
+ today: "Heute",
960
+ yesterday: "Gestern",
961
+ this_week: "Diese Woche",
962
+ last_week: "Letzte Woche",
963
+ this_month: "Dieser Monat",
964
+ last_month: "Letzter Monat",
965
+ this_quarter: "Dieses Quartal",
966
+ last_quarter: "Letztes Quartal",
967
+ this_year: "Dieses Jahr",
968
+ last_year: "Letztes Jahr",
969
+ last_7_days: "Letzte 7 Tage",
970
+ last_30_days: "Letzte 30 Tage",
971
+ last_90_days: "Letzte 90 Tage",
972
+ },
973
+ },
608
974
  addWidget: "Widget hinzufügen",
609
975
  removeWidget: "Widget entfernen",
610
976
  editLayout: "Layout bearbeiten",
@@ -732,6 +1098,7 @@ const de = {
732
1098
  navTypeGroup: "Gruppe",
733
1099
  navTypeSeparator: "Trenner",
734
1100
  navTypeAction: "Aktion",
1101
+ navTypeComponent: "Komponente",
735
1102
  navEditIcon: "Symbol bearbeiten",
736
1103
  navToggleVisible: "Sichtbarkeit umschalten",
737
1104
  navHidden: "Ausgeblendet",
@@ -833,8 +1200,199 @@ const de = {
833
1200
  },
834
1201
  },
835
1202
  console: {
1203
+ settingsHub: {
1204
+ title: "Einstellungen",
1205
+ subtitle: "Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.",
1206
+ loadError: "Einstellungen konnten nicht geladen werden",
1207
+ empty: "Keine Einstellungen registriert. Plugins können Einstellungsmanifeste über den SettingsService registrieren.",
1208
+ settingsCount: "{{n}} Einstellungen",
1209
+ beta: "Beta",
1210
+ categories: {
1211
+ Workspace: "Workspace",
1212
+ Communication: "Kommunikation",
1213
+ Security: "Sicherheit",
1214
+ Infrastructure: "Infrastruktur",
1215
+ Beta: "Beta",
1216
+ Other: "Sonstiges",
1217
+ },
1218
+ },
1219
+ objectData: {
1220
+ badge: "Daten",
1221
+ description: "Über die URL definierter Datenausschnitt — nicht an eine gespeicherte Ansicht gebunden.",
1222
+ filteredBy: "Gefiltert nach",
1223
+ removeFilter: "Filter {{field}} entfernen",
1224
+ saveAsView: "Als Ansicht speichern",
1225
+ noAccessTitle: "Zugriff verweigert",
1226
+ noAccess: "Sie haben keine Berechtigung, diese Daten anzuzeigen.",
1227
+ },
1228
+ identityImport: {
1229
+ policyTitle: "Anmelde-Einrichtung für importierte Benutzer",
1230
+ policy: {
1231
+ auto: "Automatisch (empfohlen)",
1232
+ invite: "Einladungen senden",
1233
+ temporary: "Temporäre Passwörter",
1234
+ none: "Kein Passwort (nur Identität)",
1235
+ },
1236
+ policyHint: {
1237
+ 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.",
1238
+ 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.",
1239
+ 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.",
1240
+ 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.",
1241
+ },
1242
+ passwordsNote: "Temporäre Passwörter — einmalig angezeigt, nie gespeichert. Speichern Sie sie jetzt; jeder Benutzer muss seines bei der ersten Anmeldung ändern.",
1243
+ passwordsMore: "Weitere Einträge ausgelassen — bitte den Download verwenden.",
1244
+ passwordsDownload: "CSV herunterladen",
1245
+ },
1246
+ ai: {
1247
+ usage: {
1248
+ title: "KI-Nutzung",
1249
+ meterBuild: "Erstellen",
1250
+ meterAsk: "Fragen",
1251
+ statusOk: "Reichlich übrig",
1252
+ statusLow: "Wird knapp",
1253
+ statusFull: "Limit erreicht",
1254
+ resetsDaily: "Wird heute Nacht zurückgesetzt",
1255
+ resetsMonthly: "Wird im nächsten Zyklus zurückgesetzt",
1256
+ ctaUpgrade: "Upgraden, um weiterzumachen",
1257
+ ctaTopUp: "Credits hinzufügen, um fortzufahren",
1258
+ ariaLabel: "KI-Nutzung: {{status}}",
1259
+ },
1260
+ workspaceTitle: "KI-Workspace",
1261
+ workspaceSubtitle: "Fragen stellen, prüfen und Unterhaltungen fortsetzen",
1262
+ openChats: "Chats öffnen",
1263
+ chats: "Chats",
1264
+ chatsDescription: "KI-Unterhaltungen durchsuchen und verwalten.",
1265
+ share: "Teilen",
1266
+ shareTitle: "Diese Unterhaltung teilen",
1267
+ shareDisabledTitle: "Beginnen Sie zu chatten, um das Teilen zu aktivieren",
1268
+ newChat: "Neu",
1269
+ searchChats: "Chats durchsuchen...",
1270
+ noChatsYet: "Noch keine Chats",
1271
+ noChatsDescription: "Starten Sie eine neue Unterhaltung, um sie hier zu sehen.",
1272
+ noMatchingChats: "Keine passenden Chats.",
1273
+ newConversation: "Neue Unterhaltung",
1274
+ renameConversation: "Unterhaltung umbenennen",
1275
+ deleteConversation: "Unterhaltung löschen",
1276
+ saveRename: "Umbenennung speichern",
1277
+ cancelRename: "Umbenennung abbrechen",
1278
+ loadingHistory: "Unterhaltungsverlauf wird geladen...",
1279
+ conversationReady: "Unterhaltung bereit",
1280
+ preparingConversation: "Neue Unterhaltung wird vorbereitet",
1281
+ offlineDemoMode: "Offline-Demomodus — Agentenliste nicht verfügbar",
1282
+ sendFailedRateLimited: "Sie senden zu schnell Nachrichten. Ihre Nachricht wird unten aufbewahrt — warten Sie einen Moment und versuchen Sie es erneut.",
1283
+ sendFailedGeneric: "Ihre Nachricht konnte nicht gesendet werden. Sie wird unten aufbewahrt — bitte versuchen Sie es erneut.",
1284
+ askAgent: "{{agent}} fragen...",
1285
+ assistant: "Assistent",
1286
+ liveCanvas: "Live-Vorschau — {{app}} (Entwurf)",
1287
+ liveCanvasUnlisted: "Live-App — {{app}} (nicht gelistet bis zur Veröffentlichung)",
1288
+ loadingAgents: "Agenten werden geladen...",
1289
+ askAnything: "Fragen Sie irgendetwas...",
1290
+ emptyTitle: "Unterhaltung beginnen",
1291
+ emptyDescription: "Fragen Sie irgendetwas — der Assistent hat Zugriff auf den Kontext Ihrer aktuellen App.",
1292
+ switchAssistant: "Assistenten wechseln",
1293
+ chooseAgent: "Assistenten wählen…",
1294
+ empty: {
1295
+ build: {
1296
+ title: "Mit KI erstellen",
1297
+ 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.",
1298
+ },
1299
+ ask: {
1300
+ title: "Ihre Daten fragen",
1301
+ description: "Stellen Sie Fragen zu Ihren Datensätzen — Anzahlen, Listen und Zusammenfassungen über die Daten, auf die Sie zugreifen können.",
1302
+ },
1303
+ editApp: {
1304
+ title: "„{{app}}“ wird bearbeitet",
1305
+ titleGeneric: "Diese App bearbeiten",
1306
+ description: "Was möchten Sie ändern? Ich passe diese App direkt an — ein Feld, Objekt, eine Ansicht oder Automatisierung hinzufügen oder Vorhandenes anpassen.",
1307
+ },
1308
+ },
1309
+ clearConversation: "Leeren",
1310
+ sendHint: "zum Senden",
1311
+ agentActivity: "Agentenaktivität",
1312
+ toolCompleted: "Abgeschlossen",
1313
+ toolRunning: "Läuft",
1314
+ toolAwaitingApproval: "Warten auf Freigabe",
1315
+ toolFailed: "Fehlgeschlagen",
1316
+ toolDetailsHidden: "Tool-Eingaben und Rohergebnisse sind in dieser Ansicht ausgeblendet.",
1317
+ copy: "Kopieren",
1318
+ copied: "Kopiert",
1319
+ regenerate: "Neu generieren",
1320
+ model: "Modell",
1321
+ submit: "Senden",
1322
+ uploadFiles: "Dateien hochladen",
1323
+ stopResponse: "Antwort stoppen",
1324
+ trace: "Trace",
1325
+ viewTrace: "Trace anzeigen",
1326
+ nextSteps: "Wie geht es weiter",
1327
+ publishDrafts: "Veröffentlichen",
1328
+ publishOk: "Veröffentlicht — die Objekte sind jetzt live.",
1329
+ seedWarn: "Veröffentlicht, aber einige Beispieldaten konnten nicht geladen werden.",
1330
+ openBuiltApp: "App öffnen",
1331
+ designBuiltApp: "In Studio gestalten",
1332
+ previewDraft: "Vorschau",
1333
+ previewApp: "App-Vorschau",
1334
+ resizeSplit: "Chat und Vorschau anpassen",
1335
+ hideChats: "Chats ausblenden",
1336
+ showChats: "Chats anzeigen",
1337
+ planTitle: "Vorgeschlagener Plan",
1338
+ planQuestions: "Vor dem Erstellen bestätigen",
1339
+ planAssumptions: "Annahmen",
1340
+ planApproveHint: "Antworten Sie, um diesen Plan zu genehmigen oder anzupassen.",
1341
+ planApprove: "Erstellen",
1342
+ planAdjust: "Anpassen",
1343
+ justNow: "gerade eben",
1344
+ minutesAgo: "vor {{count}} Min.",
1345
+ hoursAgo: "vor {{count}} Std.",
1346
+ daysAgo: "vor {{count}} T.",
1347
+ agentLabels: {
1348
+ ask: "Fragen",
1349
+ build: "Erstellen",
1350
+ dataChat: "Assistent",
1351
+ metadataAssistant: "Metadaten-Assistent",
1352
+ },
1353
+ suggestions: {
1354
+ dataChat: {
1355
+ userCount: "Wie viele Benutzer gibt es im System? Liste ihre E-Mail-Adressen auf.",
1356
+ recentRecords: "Liste die 5 zuletzt erstellten Datensätze auf.",
1357
+ recordCounts: "Zähle die Datensätze je Objekt.",
1358
+ },
1359
+ metadataAssistant: {
1360
+ buildCrm: "Erstelle ein Vertriebs-CRM — Kunden, Kontakte und eine Deal-Pipeline, die ich nach Phase summieren kann.",
1361
+ buildApp: "Erstelle einen Projekt-Tracker — Projekte, Aufgaben mit Verantwortlichen und Fälligkeitsdaten sowie ein Board nach Status.",
1362
+ buildFlow: "Entwirf einen Support-Desk — Tickets mit Priorität, einen Status-Workflow und Kundenverknüpfungen.",
1363
+ buildInventory: "Erstelle eine Bestands-App — Produkte, Lagerbestände, Lieferanten und Sichtbarkeit niedriger Bestände.",
1364
+ buildRecruiting: "Erstelle einen Bewerber-Tracker — Kandidaten, offene Stellen, Interviewphasen und Notizen.",
1365
+ },
1366
+ generic: {
1367
+ help: "Wobei kannst du mir helfen?",
1368
+ availableObjects: "Liste die verfügbaren Datenobjekte auf.",
1369
+ recentActivity: "Fasse meine letzten Aktivitäten zusammen.",
1370
+ },
1371
+ editApp: {
1372
+ addField: "Füge einem der Objekte ein Feld hinzu.",
1373
+ addObject: "Füge ein neues Objekt hinzu und verknüpfe es mit einem bestehenden.",
1374
+ addDashboard: "Füge ein Dashboard für die wichtigsten Kennzahlen hinzu.",
1375
+ addAutomation: "Füge eine Automatisierung hinzu — eine Freigabe, einen Statusablauf oder eine Benachrichtigung.",
1376
+ },
1377
+ },
1378
+ changesTitle: "Änderungen bestätigen",
1379
+ changesConfirmed: "Bestätigt",
1380
+ changesConfirm: "Bestätigen",
1381
+ changesConfirmHint: "Antworten Sie, um diese Änderung zu bestätigen oder anzupassen.",
1382
+ changeVerb: {
1383
+ createObject: "Objekt erstellen",
1384
+ addField: "Feld hinzufügen",
1385
+ modifyField: "Feld ändern",
1386
+ deleteField: "Feld löschen",
1387
+ createMetadata: "Erstellen",
1388
+ updateMetadata: "Ändern",
1389
+ createSeed: "Beispieldaten erzeugen",
1390
+ createPackage: "App-Paket erstellen",
1391
+ },
1392
+ },
836
1393
  title: "ObjectStack Konsole",
837
1394
  initializing: "Anwendung wird initialisiert...",
1395
+ loadingHint: "Die Einrichtung einer neuen Umgebung kann einen Moment dauern.",
838
1396
  breadcrumb: {
839
1397
  dashboards: "Dashboards",
840
1398
  pages: "Seiten",
@@ -876,6 +1434,7 @@ const de = {
876
1434
  toggleDarkMode: "Dunkelmodus umschalten",
877
1435
  },
878
1436
  commandPalette: {
1437
+ title: "Befehlspalette",
879
1438
  placeholder: "Befehl eingeben oder suchen...",
880
1439
  noResults: "Keine Ergebnisse gefunden.",
881
1440
  objects: "Objekte",
@@ -909,6 +1468,14 @@ const de = {
909
1468
  system: "System",
910
1469
  },
911
1470
  objectView: {
1471
+ viewTypeTree: "Baum",
1472
+ viewTypeTreeDesc: "Selbstreferenzierende Datensätze über ein übergeordnetes Feld zu einer Hierarchie verschachteln.",
1473
+ parentField: "Übergeordnetes Feld",
1474
+ parentFieldHelp: "Das Feld, das auf den übergeordneten Datensatz (dasselbe Objekt) verweist und die Hierarchie definiert. Nur selbstreferenzierende Felder kommen infrage.",
1475
+ viewName: "Name",
1476
+ viewNameHelp: "Technischer Schlüssel (snake_case). Wird aus dem Titel automatisch gefüllt — bei Bedarf anpassen.",
1477
+ viewNameRequired: "Geben Sie einen Schlüssel ein (Kleinbuchstaben, Ziffern, Unterstrich). Bei nicht-lateinischen Titeln wird er nicht automatisch gefüllt.",
1478
+ viewNameInvalid: "Verwenden Sie Kleinbuchstaben, Ziffern und Unterstriche; beginnen Sie mit einem Buchstaben oder Unterstrich.",
912
1479
  systemViewReadonly: 'System view defined in code - duplicate to customize.',
913
1480
  expandToPage: 'Open as full page',
914
1481
  objectNotFound: "Objekt nicht gefunden",
@@ -1122,7 +1689,28 @@ const de = {
1122
1689
  },
1123
1690
  },
1124
1691
  auth: {
1692
+ setPassword: {
1693
+ title: "Wiederherstellungspasswort festlegen",
1694
+ 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.",
1695
+ email: "E-Mail",
1696
+ newPassword: "Neues Passwort",
1697
+ confirmPassword: "Passwort bestätigen",
1698
+ submit: "Passwort festlegen",
1699
+ submitting: "Wird gespeichert…",
1700
+ success: "Lokales Passwort festgelegt",
1701
+ failed: "Passwort konnte nicht festgelegt werden",
1702
+ passwordsMismatch: "Die Passwörter stimmen nicht überein",
1703
+ noSession: "Ihre Sitzung ist abgelaufen.",
1704
+ backToSignIn: "Erneut anmelden",
1705
+ },
1125
1706
  login: {
1707
+ signingIn: "Sie werden angemeldet…",
1708
+ ssoHandoff: "Weiter zu {{target}}",
1709
+ devAdminHint: {
1710
+ title: "Entwicklungsinstanz",
1711
+ body: "Melden Sie sich mit dem vorkonfigurierten Entwickler-Admin an:",
1712
+ dismiss: "Ausblenden",
1713
+ },
1126
1714
  title: "In Ihr Konto einloggen",
1127
1715
  description: "Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um fortzufahren",
1128
1716
  emailLabel: "E-Mail",
@@ -1135,6 +1723,7 @@ const de = {
1135
1723
  noAccountText: "Noch kein Konto?",
1136
1724
  signUpText: "Registrieren",
1137
1725
  errors: {
1726
+ oauthCallbackFailed: "Die Single-Sign-on-Anmeldung konnte nicht abgeschlossen werden — der Anmeldelink ist abgelaufen oder wurde bereits verwendet. Bitte versuchen Sie es erneut.",
1138
1727
  invalidCredentials: "Ungültige E-Mail oder Passwort. Bitte erneut versuchen.",
1139
1728
  emailNotVerified: "Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sich anmelden.",
1140
1729
  },
@@ -1260,6 +1849,40 @@ const de = {
1260
1849
  shell: {
1261
1850
  tenantHostHint: "Sie melden sich bei diesem Arbeitsbereich an",
1262
1851
  },
1852
+ layout: {
1853
+ headline: "Leistungsstarke Geschäftsanwendungen schneller entwickeln.",
1854
+ subhead: "Die universelle Plattform für Unternehmensdatenverwaltung, Workflows und Analysen.",
1855
+ },
1856
+ remediation: {
1857
+ signOut: "Stattdessen abmelden",
1858
+ password: {
1859
+ title: "Ihr Passwort ist abgelaufen",
1860
+ fallbackMessage: "Bitte legen Sie ein neues Passwort fest, um fortzufahren.",
1861
+ current: "Aktuelles Passwort",
1862
+ next: "Neues Passwort",
1863
+ confirm: "Neues Passwort bestätigen",
1864
+ submit: "Passwort ändern & fortfahren",
1865
+ submitting: "Wird aktualisiert…",
1866
+ mismatch: "Die neuen Passwörter stimmen nicht überein.",
1867
+ failed: "Passwort konnte nicht geändert werden.",
1868
+ },
1869
+ mfa: {
1870
+ title: "Zwei-Faktor-Authentifizierung einrichten",
1871
+ fallbackMessage: "Ihre Organisation verlangt eine Authenticator-App, um fortzufahren.",
1872
+ confirmPassword: "Passwort bestätigen",
1873
+ continue: "Weiter",
1874
+ preparing: "Wird vorbereitet…",
1875
+ enrollFailed: "Registrierung konnte nicht gestartet werden.",
1876
+ scanTitle: "Mit Ihrer Authenticator-App scannen",
1877
+ scanBody: "Scannen Sie diesen QR-Code mit Google Authenticator, 1Password, Authy usw. und geben Sie dann den 6-stelligen Code ein.",
1878
+ backupTitle: "Backup-Codes speichern",
1879
+ backupBody: "Bewahren Sie diese sicher auf — jeder Code kann einmal verwendet werden, falls Sie Ihr Gerät verlieren.",
1880
+ codeLabel: "6-stelliger Code",
1881
+ verify: "Überprüfen & fortfahren",
1882
+ verifying: "Wird überprüft…",
1883
+ invalidCode: "Ungültiger Code. Bitte erneut versuchen.",
1884
+ },
1885
+ },
1263
1886
  },
1264
1887
  profile: {
1265
1888
  title: "Profil",
@@ -1324,11 +1947,15 @@ const de = {
1324
1947
  settings: "Arbeitsbereichseinstellungen",
1325
1948
  },
1326
1949
  help: {
1950
+ onThisPage: "Auf dieser Seite",
1951
+ keyboardShortcuts: "Tastenkürzel",
1327
1952
  appDocs: 'Dokumentation dieser App',
1328
1953
  allDocs: 'Gesamte Dokumentation',
1329
1954
  onlineDocs: 'Online-Dokumentation',
1330
1955
  },
1331
1956
  sidebar: {
1957
+ packageManagement: "Paketverwaltung",
1958
+ searchNavigation: "Navigation durchsuchen...",
1332
1959
  settings: "Einstellungen",
1333
1960
  help: "Hilfe",
1334
1961
  helpTooltip: "Hilfe und Dokumentation",
@@ -1345,14 +1972,66 @@ const de = {
1345
1972
  removeFromFavorites: "{{name}} aus Favoriten entfernen",
1346
1973
  },
1347
1974
  topbar: {
1975
+ openAssistant: "Assistent {{name}} öffnen",
1976
+ offline: "Offline",
1977
+ usersOnline: "Aktuell online befindliche Benutzer",
1978
+ switchView: "Ansicht wechseln",
1979
+ switchObject: "Objekt wechseln",
1980
+ connection: {
1981
+ connected: "Verbunden",
1982
+ connecting: "Verbindung wird hergestellt...",
1983
+ reconnecting: "Verbindung wird wiederhergestellt...",
1984
+ disconnected: "Getrennt",
1985
+ error: "Verbindungsfehler",
1986
+ },
1987
+ stage: {
1988
+ preview: "Vorschau",
1989
+ beta: "Beta",
1990
+ tooltip: "Diese Plattform befindet sich in der Vorschau — Funktionen können sich ändern.",
1991
+ },
1348
1992
  aiAssistant: "KI-Assistent",
1349
1993
  designInStudio: "Im Studio gestalten",
1350
1994
  },
1351
1995
  home: {
1996
+ build: {
1997
+ title: "App erstellen",
1998
+ subtitle: "Von Grund auf beginnen — Objekte, Formulare, Automatisierungen und Oberflächen gestalten.",
1999
+ },
2000
+ template: {
2001
+ title: "Mit einer Vorlage starten",
2002
+ subtitle: "Installieren Sie eine Vorlagen-App aus dem Marktplatz und passen Sie sie an.",
2003
+ },
2004
+ 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.",
2005
+ welcomeAdminDescriptionNoBuild: "Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein. Sobald Daten vorhanden sind, kann der KI-Assistent bei der Auswertung helfen.",
2006
+ welcomeAdminDescriptionNoAi: "Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein.",
2007
+ noAppsTitle: "Noch keine Anwendungen",
2008
+ noAppsDescription: "Ihr Workspace wird eingerichtet — Apps, die Ihr Administrator für Sie freigibt, erscheinen hier.",
2009
+ buildWithAI: "Mit KI erstellen",
2010
+ askAI: "KI fragen",
2011
+ recoveryReminder: {
2012
+ message: "Legen Sie ein Wiederherstellungspasswort fest, damit Sie sich auch anmelden können, wenn Single Sign-on einmal nicht verfügbar ist.",
2013
+ cta: "Passwort festlegen",
2014
+ dismiss: "Ausblenden",
2015
+ },
2016
+ pendingDrafts: {
2017
+ message: "Sie haben {{count}} unveröffentlichte Änderung(en) — veröffentlichen Sie sie, um sie live zu schalten.",
2018
+ cta: "Veröffentlichen",
2019
+ publishing: "Wird veröffentlicht…",
2020
+ published: "Veröffentlicht! Ihre Änderungen sind live.",
2021
+ publishFailed: "Veröffentlichen fehlgeschlagen",
2022
+ },
1352
2023
  title: "Startseite",
1353
2024
  subtitle: "Ihr Arbeitsbereich-Dashboard",
1354
2025
  nav: "Startseite",
1355
2026
  allApps: "Alle Anwendungen",
2027
+ yourApps: "Ihre Apps",
2028
+ showMoreApps: "Mehr",
2029
+ showLess: "Weniger anzeigen",
2030
+ continueEmpty: "Elemente, die Sie öffnen, erscheinen hier.",
2031
+ actionCenter: {
2032
+ title: "Erfordert Ihre Aufmerksamkeit",
2033
+ empty: "Alles erledigt",
2034
+ },
1356
2035
  loading: "Arbeitsbereich wird geladen...",
1357
2036
  recent: "Kürzlich",
1358
2037
  starred: "Mit Stern",
@@ -1404,7 +2083,21 @@ const de = {
1404
2083
  },
1405
2084
  },
1406
2085
  layout: {
2086
+ systemNav: {
2087
+ systemSettings: "Systemeinstellungen",
2088
+ applications: "Anwendungen",
2089
+ appMarketplace: "App-Marktplatz",
2090
+ objectManager: "Objekt-Manager",
2091
+ users: "Benutzer",
2092
+ organizations: "Organisationen",
2093
+ roles: "Rollen",
2094
+ configuration: "Konfiguration",
2095
+ createApp: "App erstellen",
2096
+ },
1407
2097
  appSwitcher: {
2098
+ switchApplication: "Anwendung wechseln",
2099
+ appsAvailable: "{{count}} Apps verfügbar",
2100
+ editNavigation: "Navigation bearbeiten",
1408
2101
  home: "Startseite",
1409
2102
  addApp: "App hinzufügen",
1410
2103
  editApp: "App bearbeiten",
@@ -1497,8 +2190,8 @@ const de = {
1497
2190
  uploading: "Wird hochgeladen…",
1498
2191
  defaultActionTitle: "Aktion",
1499
2192
  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.",
2193
+ lookupPlaceholder: "Datensatz-ID für {{label}}",
2194
+ 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
2195
  },
1503
2196
  actionConfirm: {
1504
2197
  title: "Aktion bestätigen",
@@ -1523,6 +2216,8 @@ const de = {
1523
2216
  updateFailed: "Navigation konnte nicht aktualisiert werden",
1524
2217
  },
1525
2218
  objectActions: {
2219
+ 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?",
2220
+ resetPackageSetSuccess: "Berechtigungsset auf den ausgelieferten Ausgangszustand zurückgesetzt",
1526
2221
  deleteSuccess: "{{label}} erfolgreich gelöscht",
1527
2222
  deleteFailed: "{{label}} konnte nicht gelöscht werden",
1528
2223
  noRecordId: "Keine Datensatz-ID angegeben",
@@ -1687,6 +2382,7 @@ const de = {
1687
2382
  },
1688
2383
  },
1689
2384
  organizations: {
2385
+ create: "Workspace erstellen",
1690
2386
  mine: "Meine Organisationen",
1691
2387
  title: "Organisationen",
1692
2388
  heading: "Ihre Organisationen",
@@ -1700,6 +2396,11 @@ const de = {
1700
2396
  noMatches: "Keine Organisationen entsprechen Ihrer Suche.",
1701
2397
  },
1702
2398
  notifications: {
2399
+ regionLabel: "Benachrichtigungen",
2400
+ groupCount: "{{count}} Benachrichtigungen",
2401
+ groupUnread: "{{count}} ungelesen",
2402
+ groupMarkRead: "Als gelesen markieren",
2403
+ groupMarkReadTitle: "Alle dieses Typs als gelesen markieren",
1703
2404
  empty: "Keine Benachrichtigungen",
1704
2405
  markAllRead: "Alle als gelesen markieren",
1705
2406
  viewAll: "Alle Benachrichtigungen anzeigen",
@@ -1818,7 +2519,117 @@ const de = {
1818
2519
  done: 'Fertig — ausblenden',
1819
2520
  },
1820
2521
  },
2522
+ excelImport: {
2523
+ noImportableFields: "Dieses Objekt hat keine importierbaren Felder.",
2524
+ schemaReadFailed: "Das Objektschema konnte nicht gelesen werden.",
2525
+ imported: "{{count}} Zeile(n) in {{object}} importiert.",
2526
+ importFrom: "Echte Zeilen importieren aus",
2527
+ into: "nach",
2528
+ opening: "Wird geöffnet…",
2529
+ importAction: "Importieren",
2530
+ dismiss: "Verwerfen",
2531
+ },
2532
+ cloudOnboarding: {
2533
+ hintCreate: "Erstellen Sie Ihre erste Umgebung — ein privater Arbeitsbereich mit eigener URL, Datenbank und eigenem Tarif. Die Entwicklung findet darin statt.",
2534
+ hintReady: "Ihre Produktionsumgebung ist bereit. Öffnen Sie sie, um Ihre Apps zu erstellen und auszuführen — alles geschieht innerhalb der Umgebung.",
2535
+ createEnvironment: "Umgebung erstellen",
2536
+ openProduction: "Produktion öffnen",
2537
+ manageEnvironments: "Umgebungen verwalten",
2538
+ },
2539
+ aiModelStatus: {
2540
+ summary: "Erstellen / Fragen nutzt {{conversational}} ({{conversationalSource}}); strukturiert nutzt {{structured}} ({{structuredSource}}).",
2541
+ summaryRouting: "Routing-Richtlinie: kostenlose Tarife → {{free}}, kostenpflichtige Tarife → {{paid}}.",
2542
+ modelUnknown: "unbekannt",
2543
+ sourceUnknown: "vom Adapter nicht gemeldet",
2544
+ rowConversational: "Build-/Ask-Modell",
2545
+ rowStructured: "Strukturiert (Blueprint / Seed)",
2546
+ rowReasoning: "Reasoning-Aufwand",
2547
+ 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.",
2548
+ 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.",
2549
+ overridesInEffect: "Aktive Overrides: ",
2550
+ noOverrides: "keine — es gelten die Standardwerte des bereitgestellten Codes.",
2551
+ adapter: "Adapter: ",
2552
+ sourceCodeDefault: "Code-Standard (kein env-Override)",
2553
+ sourceInherits: "wie build/ask",
2554
+ sourcePinned: "festgelegt durch {{source}}",
2555
+ },
2556
+ chatbotError: {
2557
+ title: "Antwort fehlgeschlagen",
2558
+ fallbackDetail: "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.",
2559
+ details: "Details",
2560
+ hide: "Ausblenden",
2561
+ retry: "Erneut versuchen",
2562
+ },
2563
+ chatbotQuota: {
2564
+ title: "Upgrade erforderlich",
2565
+ fallbackMessage: "Sie haben Ihr KI-Kontingent erreicht.",
2566
+ buyCredits: "Credit-Paket kaufen",
2567
+ upgradePlan: "Tarif upgraden",
2568
+ },
2569
+ environment: {
2570
+ addEnvironment: "Umgebung hinzufügen",
2571
+ setUpProduction: "Produktionsumgebung einrichten",
2572
+ addDevelopment: "Entwicklungsumgebung hinzufügen",
2573
+ // Plan/capacity dialog (EnvironmentEntitlementDialog) — cloud#959.
2574
+ entitlement: {
2575
+ productionLimitTitle: "Sie haben bereits Ihre Produktionsumgebung",
2576
+ productionLimitBody: "Jede Organisation enthält genau eine Produktionsumgebung. Erstellen Sie für eine weitere eine separate Organisation, oder sprechen Sie uns auf eine Enterprise-Vereinbarung an.",
2577
+ planLockedTitle: "Entwicklungsumgebungen sind eine kostenpflichtige Funktion",
2578
+ planLockedBody: "Ihr {{plan}} enthält eine Produktionsumgebung. Führen Sie ein Upgrade durch, um Entwicklungsumgebungen hinzuzufügen — entwickeln Sie in der Entwicklungsumgebung und veröffentlichen Sie dann in der Produktion.",
2579
+ limitTitle: "Limit für Entwicklungsumgebungen erreicht",
2580
+ limitBody: "Die Kapazität wächst mit den KI-Lizenzen. Fügen Sie eine KI-Lizenz hinzu oder archivieren Sie eine ungenutzte Entwicklungsumgebung, um Platz zu schaffen.",
2581
+ limitBodyWithCount: "Sie nutzen {{used}} von {{limit}} Entwicklungsumgebungen. Die Kapazität wächst mit den KI-Lizenzen — fügen Sie eine KI-Lizenz hinzu oder archivieren Sie eine ungenutzte Entwicklungsumgebung.",
2582
+ freePlan: "kostenloser Tarif",
2583
+ namedPlan: "Tarif {{plan}}",
2584
+ upgradeCta: "Tarif upgraden",
2585
+ contactSalesCta: "Vertrieb kontaktieren",
2586
+ },
2587
+ },
2588
+ cloudConnection: {
2589
+ checking: "Verbindung wird geprüft…",
2590
+ retry: "Erneut versuchen",
2591
+ errors: {
2592
+ expired: "Die Anfrage ist abgelaufen, bevor sie genehmigt wurde. Starten Sie erneut.",
2593
+ bindFailed: "Verbindung fehlgeschlagen.",
2594
+ deviceCodeFailed: "Anforderung des Gerätecodes fehlgeschlagen.",
2595
+ },
2596
+ waiting: {
2597
+ popupOpened: "Genehmigen Sie die Verbindung im soeben geöffneten Fenster — diese Seite aktualisiert sich von selbst.",
2598
+ polling: "Warten auf die Genehmigung in der Cloud-Konsole…",
2599
+ openApproval: "Genehmigungsseite öffnen",
2600
+ copy: "Kopieren",
2601
+ copied: "Kopiert",
2602
+ codePrefilled: "Der Code ist auf der Genehmigungsseite bereits eingetragen.",
2603
+ openItHere: "Fenster nicht erschienen? Hier öffnen",
2604
+ cancel: "Abbrechen",
2605
+ },
2606
+ bound: {
2607
+ title: "Mit ObjectStack Cloud verbunden",
2608
+ runtime: "Runtime",
2609
+ organization: "Organisation",
2610
+ approvedBy: "Genehmigt von",
2611
+ runtimeId: "Runtime-ID",
2612
+ environment: "Umgebung",
2613
+ since: "Verbunden seit",
2614
+ privatePackages: "Die privaten Pakete Ihrer Organisation erscheinen jetzt im Marktplatz unter „Ihre Organisation“.",
2615
+ disconnect: "Verbindung trennen",
2616
+ },
2617
+ unbound: {
2618
+ title: "Nicht verbunden",
2619
+ 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.",
2620
+ connect: "Verbinden",
2621
+ },
2622
+ },
1821
2623
  marketplace: {
2624
+ suggestedBindings: {
2625
+ promptEveryone: "Diese App empfiehlt, „{{set}}“ allen angemeldeten Benutzern zu gewähren (Position „Everyone“).",
2626
+ promptGuest: "Diese App empfiehlt, „{{set}}“ nicht authentifizierten Besuchern zu gewähren (Position „Guest“).",
2627
+ confirm: "Gewähren",
2628
+ confirming: "Wird gewährt…",
2629
+ dismiss: "Ausblenden",
2630
+ confirmedToast: "„{{set}}“ ist jetzt {{anchor}} gewährt.",
2631
+ dismissedToast: "Vorschlag für „{{set}}“ ausgeblendet.",
2632
+ },
1822
2633
  title: "App-Marktplatz",
1823
2634
  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
2635
  searchPlaceholder: "Apps nach Name oder Manifest-ID suchen…",
@@ -1870,6 +2681,7 @@ const de = {
1870
2681
  updateAvailable: 'Update verfügbar',
1871
2682
  },
1872
2683
  action: {
2684
+ installed: "Installiert",
1873
2685
  install: "Installieren",
1874
2686
  reinstall: "Neu installieren",
1875
2687
  working: "Verarbeite…",
@@ -1940,6 +2752,14 @@ const de = {
1940
2752
  yearsAgo: "vor {{count}} Jahren",
1941
2753
  },
1942
2754
  },
2755
+ approvals: {
2756
+ approve: 'Genehmigen',
2757
+ reject: 'Ablehnen',
2758
+ comment: 'Kommentar (optional)',
2759
+ approveSuccess: 'Genehmigt',
2760
+ rejectSuccess: 'Abgelehnt',
2761
+ rejectConfirm: 'Diese Genehmigungsanfrage ablehnen?',
2762
+ },
1943
2763
  approvalsInbox: {
1944
2764
  loadMore: 'Mehr laden',
1945
2765
  loadingMore: 'Lädt…',
@@ -1964,13 +2784,28 @@ const de = {
1964
2784
  slaRemaining: 'SLA noch {{dur}}',
1965
2785
  slaOverdue: 'SLA überfällig {{dur}}',
1966
2786
  actReassign: 'Übergeben',
2787
+ reassignFromTo: 'von {{from}} an {{to}}',
1967
2788
  actRemind: 'Erinnert',
1968
2789
  actRequestInfo: 'Rückfrage gestellt',
1969
2790
  actComment: 'Kommentiert',
1970
2791
  stepProgress: 'Genehmigungsschritte',
1971
2792
  prevRequest: 'Zurück',
1972
2793
  nextRequest: 'Weiter',
1973
- positionOf: '{{index}} von {{total}}',
2794
+ positionOf: 'Anfrage {{index}} von {{total}}',
2795
+ progressApprovals: 'Genehmigungen — {{got}} von {{need}}',
2796
+ progressGroups: 'Freigabefortschritt — {{got}} von {{need}} Gruppen',
2797
+ progressEligible: '{{count}} berechtigte Genehmiger',
2798
+ progressBar: 'Entscheidungsfortschritt',
2799
+ declaredActions: 'Aktionen',
2800
+ attachmentChip: 'Anhang',
2801
+ attachmentOpenFailed: 'Anhang konnte nicht geöffnet werden – bitte erneut versuchen',
2802
+ approveOneTitle: '„{{title}}“ genehmigen?',
2803
+ approveOneBody: 'Die Anfrage wird mit Ihrer Identität genehmigt. Um einen Kommentar oder Anhang hinzuzufügen, öffnen Sie die Anfrage.',
2804
+ flowOrigin: 'Vom Flow gestartet',
2805
+ sortBy: 'Sortieren',
2806
+ sortRecent: 'Neueste zuerst',
2807
+ sortOldest: 'Älteste zuerst',
2808
+ sortAmount: 'Betrag (hoch→niedrig)',
1974
2809
  quickPhrase1: 'Genehmigt — erfüllt die Anforderungen.',
1975
2810
  quickPhrase2: 'Unter Vorbehalt genehmigt — bitte Umsetzung beobachten.',
1976
2811
  quickPhrase3: 'Bitte Unterlagen ergänzen und erneut einreichen.',
@@ -2099,6 +2934,10 @@ const de = {
2099
2934
  retry: 'Erneut versuchen',
2100
2935
  },
2101
2936
  draftBar: {
2937
+ messageClean: "Entwurfsvorschau — keine unveröffentlichten Änderungen; alles hier ist bereits live.",
2938
+ sampleDataTitle: "Beispieldaten erscheinen nach dem Veröffentlichen",
2939
+ sampleDataBody: "Sie sehen eine Vorschau der Struktur Ihrer App. Veröffentlichen Sie sie, um Beispieldatensätze zu laden und sie live zu schalten.",
2940
+ publishCta: "Veröffentlichen und live ansehen",
2102
2941
  message: 'Entwurfsvorschau — Sie sehen unveröffentlichte Änderungen. Nichts ist live, bis Sie veröffentlichen.',
2103
2942
  publish: 'Veröffentlichen',
2104
2943
  publishing: 'Wird veröffentlicht…',