@object-ui/i18n 17.3.0 → 17.6.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +1929 -1
  2. package/README.md +41 -12
  3. package/dist/i18n.d.ts +1 -1
  4. package/dist/i18n.js +1 -2
  5. package/dist/index.d.ts +23 -21
  6. package/dist/index.js +31 -21
  7. package/dist/locales/ar.d.ts +638 -369
  8. package/dist/locales/ar.js +744 -424
  9. package/dist/locales/de.d.ts +638 -369
  10. package/dist/locales/de.js +759 -446
  11. package/dist/locales/en.d.ts +673 -404
  12. package/dist/locales/en.js +899 -406
  13. package/dist/locales/es.d.ts +638 -369
  14. package/dist/locales/es.js +739 -427
  15. package/dist/locales/fr.d.ts +638 -369
  16. package/dist/locales/fr.js +738 -423
  17. package/dist/locales/index.d.ts +6476 -3786
  18. package/dist/locales/index.js +20 -20
  19. package/dist/locales/ja.d.ts +638 -369
  20. package/dist/locales/ja.js +732 -417
  21. package/dist/locales/ko.d.ts +638 -369
  22. package/dist/locales/ko.js +736 -424
  23. package/dist/locales/pt.d.ts +638 -369
  24. package/dist/locales/pt.js +737 -425
  25. package/dist/locales/ru.d.ts +638 -369
  26. package/dist/locales/ru.js +750 -424
  27. package/dist/locales/zh.d.ts +672 -403
  28. package/dist/locales/zh.js +720 -403
  29. package/dist/pickLocalized.d.ts +58 -0
  30. package/dist/pickLocalized.js +115 -7
  31. package/dist/provider.d.ts +84 -2
  32. package/dist/provider.js +305 -31
  33. package/dist/useDisplayLocale.d.ts +49 -0
  34. package/dist/useDisplayLocale.js +55 -0
  35. package/dist/useObjectLabel.d.ts +94 -14
  36. package/dist/useObjectLabel.js +134 -21
  37. package/dist/useSafeTranslation.js +51 -3
  38. package/dist/utils/index.d.ts +4 -3
  39. package/dist/utils/index.js +4 -3
  40. package/dist/utils/number-display.d.ts +32 -0
  41. package/dist/utils/number-display.js +32 -0
  42. package/dist/utils/spec-formatters.d.ts +39 -13
  43. package/dist/utils/spec-formatters.js +3 -3
  44. package/package.json +4 -3
@@ -1,4 +1,18 @@
1
1
  const de = {
2
+ // objectui#4467 — the impersonation banner (app-shell ImpersonationBanner).
3
+ // Raised by `session.impersonatedBy`, so it survives SPA reboots; it names
4
+ // BOTH parties because the audit trail attributes the work to the impersonated
5
+ // user, and the exit states its own failure rather than appearing to succeed.
6
+ impersonation: {
7
+ banner: {
8
+ message: 'Sie handeln als {{user}} — jede Aktion wird dieser Person zugeschrieben.',
9
+ startedBy: 'Gestartet von Administrator {{admin}}.',
10
+ stop: 'Identitätswechsel beenden',
11
+ stopping: 'Wird beendet…',
12
+ stopFailed: 'Identitätswechsel konnte nicht beendet werden: {{reason}}',
13
+ notRestored: 'Der Server hat die Anfrage angenommen, aber Ihre Administratorsitzung nicht wiederhergestellt — Sie handeln weiterhin als {{user}}. Melden Sie sich ab und erneut an, um dies zu beenden.',
14
+ },
15
+ },
2
16
  // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
17
  capability: {
4
18
  label: {
@@ -16,11 +30,31 @@ const de = {
16
30
  other: 'Andere',
17
31
  },
18
32
  },
33
+ // objectui#3546 slice six — die schreibgeschützte Facetten-Zusammenfassung von
34
+ // PermissionFacetLink. "Registerkarte" (nicht "Tab") für In-App-Reiter, wie in
35
+ // console.objectView.ufTabs; "Tab" bleibt dem Browser-Tab vorbehalten.
36
+ perm: {
37
+ facet: {
38
+ none: "Keine",
39
+ more: "+{{count}} weitere",
40
+ objects: "{{count}} Objekte",
41
+ objects_one: "{{count}} Objekt",
42
+ fields: "{{count}} Feldregeln",
43
+ fields_one: "{{count}} Feldregel",
44
+ rls: "{{count}} RLS-Richtlinien",
45
+ rls_one: "{{count}} RLS-Richtlinie",
46
+ tabs: "{{count}} Registerkarten-Regeln",
47
+ tabs_one: "{{count}} Registerkarten-Regel",
48
+ adminScope: "Delegierte Administration konfiguriert",
49
+ designInStudio: "Im Studio gestalten →",
50
+ designInStudioHint: "Im Studio gestalten",
51
+ },
52
+ },
19
53
  lookup: {
20
54
  recentlyUsed: 'Zuletzt verwendet',
21
55
  allResults: 'Alle Ergebnisse',
22
56
  createNew: 'Neu erstellen',
23
- createNamed: '„{{name}}" erstellen',
57
+ createNamed: '„{{name}}“ erstellen',
24
58
  showingResults: '{{shown}} von {{total}} Ergebnissen',
25
59
  showAllResults: 'Alle Ergebnisse anzeigen ({{count}})',
26
60
  selectedBadge: 'Ausgewählt',
@@ -46,13 +80,13 @@ const de = {
46
80
  common: {
47
81
  addToFavorites: "Zu Favoriten hinzufügen",
48
82
  removeFromFavorites: "Aus Favoriten entfernen",
49
- loading: "Wird geladen...",
83
+ loading: "Wird geladen…",
50
84
  save: "Speichern",
85
+ discard: "Verwerfen",
51
86
  cancel: "Abbrechen",
52
87
  delete: "Löschen",
53
88
  edit: "Bearbeiten",
54
89
  create: "Erstellen",
55
- search: "Suchen",
56
90
  filter: "Filtern",
57
91
  reset: "Zurücksetzen",
58
92
  confirm: "Bestätigen",
@@ -76,7 +110,7 @@ const de = {
76
110
  required: "Erforderlich",
77
111
  optional: "Optional",
78
112
  selectOption: "Option auswählen",
79
- select: "Auswählen...",
113
+ select: "Auswählen…",
80
114
  openChat: "Chat öffnen",
81
115
  closeChat: "Chat schließen",
82
116
  closePanel: "Panel schließen",
@@ -85,6 +119,11 @@ const de = {
85
119
  itemCountOne: "{{count}} Element",
86
120
  toggleSidebar: "Seitenleiste umschalten",
87
121
  package: "Paket",
122
+ done: "Fertig",
123
+ editInStudio: "Im Studio bearbeiten",
124
+ record: "Datensatz",
125
+ retry: "Erneut versuchen",
126
+ printDialogHint: "Öffnet den Druckdialog Ihres Browsers (kein PDF-Export)",
88
127
  },
89
128
  actions: {
90
129
  decisionOutput: {
@@ -116,6 +155,9 @@ const de = {
116
155
  submitFailed: "Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.",
117
156
  discardTitle: "Änderungen verwerfen?",
118
157
  discardMessage: "Sie haben ungespeicherte Änderungen. Wenn Sie dieses Formular jetzt schließen, gehen Ihre Bearbeitungen verloren.",
158
+ // objectui#4024 — the create/edit dialog's `sr-only` accessible
159
+ // description, used when the form declares no `description` of its own.
160
+ dialogDescriptionFallback: "Füllen Sie die Formularfelder aus und senden Sie ab oder brechen Sie ab.",
119
161
  keepEditing: "Weiter bearbeiten",
120
162
  discard: "Verwerfen",
121
163
  conflictTitle: "Speicherkonflikt",
@@ -184,7 +226,7 @@ const de = {
184
226
  richText: {
185
227
  format: "Format: {{format}}",
186
228
  basicEditorHint: "Rich-Text-Editor (einfach)",
187
- placeholder: "Text eingeben...",
229
+ placeholder: "Text eingeben…",
188
230
  },
189
231
  options: {
190
232
  empty: "Keine Optionen verfügbar",
@@ -220,6 +262,14 @@ const de = {
220
262
  tags: {
221
263
  placeholder: "Tippen und mit der Eingabetaste hinzufügen…",
222
264
  },
265
+ // objectui#4028 — `AddressField`'s five sub-labels.
266
+ address: {
267
+ street: "Straße und Hausnummer",
268
+ city: "Stadt",
269
+ state: "Bundesland / Provinz",
270
+ postalCode: "Postleitzahl",
271
+ country: "Land",
272
+ },
223
273
  textarea: {
224
274
  characterCount: "Zeichenanzahl: {{count}} von {{max}}",
225
275
  charactersRemaining: "Verbleibende Zeichen: {{count}}",
@@ -250,7 +300,7 @@ const de = {
250
300
  saveAll: "Alle speichern ({{count}})",
251
301
  addRecord: "Datensatz hinzufügen",
252
302
  open: "Öffnen",
253
- search: "Suchen...",
303
+ search: "Suchen…",
254
304
  modified: "{{count}} Zeile geändert",
255
305
  saveFailed: 'Speichern fehlgeschlagen',
256
306
  selected: "{{count}} ausgewählt",
@@ -294,7 +344,7 @@ const de = {
294
344
  delete: "Löschen",
295
345
  export: "Exportieren",
296
346
  exportAs: "Exportieren als {{format}}",
297
- loading: "Raster wird geladen...",
347
+ loading: "Raster wird geladen…",
298
348
  errorLoading: "Fehler beim Laden des Rasters",
299
349
  pullToRefresh: "Zum Aktualisieren ziehen",
300
350
  refreshing: "Wird aktualisiert…",
@@ -305,6 +355,22 @@ const de = {
305
355
  yes: "Ja",
306
356
  no: "Nein",
307
357
  systemFields: "System",
358
+ // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
359
+ // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
360
+ // pack controls its own separator and word order.
361
+ summary: {
362
+ pattern: "{{label}}: {{value}}",
363
+ count: "Anzahl",
364
+ countEmpty: "Leer",
365
+ countFilled: "Ausgefüllt",
366
+ countUnique: "Eindeutig",
367
+ percentEmpty: "Leer",
368
+ percentFilled: "Ausgefüllt",
369
+ sum: "Summe",
370
+ avg: "Mittelwert",
371
+ min: "Min.",
372
+ max: "Max.",
373
+ },
308
374
  toolbar: {
309
375
  densityMode: "Dichte",
310
376
  densityCompact: "Kompakt",
@@ -418,12 +484,12 @@ const de = {
418
484
  templateName: "Vorlagenname",
419
485
  save: "Speichern",
420
486
  deleteTemplate: "Vorlage löschen",
421
- savedMapping: 'Saved mapping:',
422
- chooseSavedMapping: 'Choose a saved mapping…',
423
- manualMapping: '— Map columns manually —',
424
- transform: 'Transform',
425
- savedMappingHint: 'Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.',
426
- savedMappingPreviewNote: 'The preview shows your source columns; on import, mapping “{{name}}” applies rename, transforms and type coercion on the server.',
487
+ savedMapping: 'Gespeicherte Zuordnung:',
488
+ chooseSavedMapping: 'Gespeicherte Zuordnung auswählen…',
489
+ manualMapping: '— Spalten manuell zuordnen —',
490
+ transform: 'Transformation',
491
+ savedMappingHint: 'Die Zuordnung „{{name}}“ wendet auf dem Server Umbenennung + Transformationen + Typkonvertierung an. Die Spaltenzuordnung ist schreibgeschützt.',
492
+ savedMappingPreviewNote: 'Die Vorschau zeigt Ihre Quellspalten; beim Import wendet die Zuordnung „{{name}}“ auf dem Server Umbenennung, Transformationen und Typkonvertierung an.',
427
493
  csvColumn: "Spalte",
428
494
  mapsTo: "Zugeordnet zu",
429
495
  typeMismatch: "Sieht aus wie {{type}}",
@@ -483,6 +549,8 @@ const de = {
483
549
  loadErrorUnauthorizedMessage: "Ihre Sitzung ist abgelaufen oder Sie sind abgemeldet. Melden Sie sich erneut an, um diese Datensätze anzuzeigen.",
484
550
  loadErrorRejectedTitle: "Die Abfrage dieser Ansicht wurde abgelehnt",
485
551
  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.",
552
+ loadErrorApiDisabledTitle: "Dieses Objekt ist über die API nicht verfügbar",
553
+ loadErrorApiDisabledMessage: "Diese Seite kann ihre Datensätze nicht laden, weil das Objekt nicht über die API bereitgestellt wird. Das ist eine Einstellung am Objekt selbst und keine Berechtigung – ein Administrator muss den API-Zugriff dafür aktivieren, damit diese Seite funktioniert.",
486
554
  retry: "Erneut versuchen",
487
555
  managedBy: {
488
556
  system: {
@@ -507,7 +575,7 @@ const de = {
507
575
  },
508
576
  },
509
577
  refresh: "Aktualisieren",
510
- loading: 'Loading records...',
578
+ loading: "Datensätze werden geladen…",
511
579
  recordCount: "{{count}} Datensätze",
512
580
  recordCountOne: "{{count}} Datensatz",
513
581
  addRecord: "Datensatz hinzufügen",
@@ -519,7 +587,8 @@ const de = {
519
587
  sort: "Sortieren",
520
588
  sortRecords: "Datensätze sortieren",
521
589
  sortByIdSuffix: "(nach ID)",
522
- 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.",
590
+ 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. Um nach diesem Namen zu sortieren, denormalisieren Sie ihn auf dieses Objekt — als gespeichertes Feld, das bei einer Änderung der Quelle geschrieben wird — und sortieren Sie danach. Kein Formelfeld: Es ist virtuell, es wird keine Spalte dafür gespeichert, und der Server verweigert die Sortierung danach.",
591
+ resetSortToDefault: "Auf Standard der Ansicht zurücksetzen",
523
592
  group: "Gruppieren",
524
593
  groupBy: "Gruppieren nach",
525
594
  export: "Exportieren",
@@ -577,13 +646,16 @@ const de = {
577
646
  },
578
647
  kanban: {
579
648
  uncategorized: "Nicht kategorisiert",
649
+ columns: "Spalten",
580
650
  addCard: "Karte hinzufügen",
581
651
  addColumn: "Spalte hinzufügen",
582
652
  moveCard: "Karte verschieben",
583
653
  deleteCard: "Karte löschen",
584
654
  deleteColumn: "Spalte löschen",
585
655
  noCards: "Keine Karten",
586
- cardTitlePlaceholder: "Kartentitel eingeben...",
656
+ cardTitlePlaceholder: "Kartentitel eingeben…",
657
+ requiredFieldsTitle: "Erforderliche Felder ausfüllen",
658
+ requiredFieldsDescription: "Durch diese Verschiebung werden die folgenden Felder zu Pflichtfeldern. Füllen Sie sie aus, um fortzufahren.",
587
659
  },
588
660
  timeline: {
589
661
  bucket: {
@@ -596,6 +668,13 @@ const de = {
596
668
  noDate: "Kein Datum",
597
669
  unassigned: "Nicht zugewiesen",
598
670
  },
671
+ scale: {
672
+ week: "Woche {{n}}",
673
+ quarter: "Q{{quarter}} {{year}}",
674
+ },
675
+ gantt: {
676
+ rowLabel: "Elemente",
677
+ },
599
678
  },
600
679
  gantt: {
601
680
  viewMode: {
@@ -642,6 +721,18 @@ const de = {
642
721
  ff: "Ende → Ende",
643
722
  sf: "Anfang → Ende",
644
723
  },
724
+ linkEnd: {
725
+ start: "Anfang",
726
+ end: "Ende",
727
+ },
728
+ link: {
729
+ rejected: {
730
+ self: "Ein Vorgang kann nicht von sich selbst abhängen.",
731
+ locked: "Diese Zeile ist gesperrt und kann keine neue Abhängigkeit aufnehmen.",
732
+ group: "Eine Sammelzeile kann keine Abhängigkeit aufnehmen — verknüpfen Sie stattdessen einen ihrer Vorgänge.",
733
+ cycle: "Diese Verknüpfung würde eine zirkuläre Abhängigkeit erzeugen.",
734
+ },
735
+ },
645
736
  conflict: {
646
737
  title: "Terminkonflikt",
647
738
  body: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?",
@@ -650,8 +741,8 @@ const de = {
650
741
  },
651
742
  autoScheduleDlg: {
652
743
  title: "Automatisch planen",
653
- body: "{count} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
654
- skipped: "{count} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
744
+ body: "{{count}} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
745
+ skipped: "{{count}} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
655
746
  confirm: "Anwenden",
656
747
  cancel: "Abbrechen",
657
748
  none: "Alle Abhängigkeiten sind erfüllt — nichts neu zu planen.",
@@ -688,6 +779,7 @@ const de = {
688
779
  exportPng: "Als PNG exportieren",
689
780
  exportPdf: "PDF exportieren",
690
781
  saveLayout: "Layout speichern",
782
+ refresh: "Aktualisieren",
691
783
  undo: "Rückgängig",
692
784
  redo: "Wiederholen",
693
785
  prevPeriod: "Vorherige Periode",
@@ -728,11 +820,11 @@ const de = {
728
820
  defaultBadge: "Standard",
729
821
  tabActionsFor: "Ansichtsaktionen für {{name}}",
730
822
  readonlyAriaLabel: "Schreibgeschützte Ansicht",
731
- readonlyTooltip: "Systemansicht — zum Anpassen duplizieren.",
823
+ readonlyTooltip: "Systemansicht — im Code definiert, schreibgeschützt.",
732
824
  },
733
825
  designer: {
734
- undo: 'Undo',
735
- redo: 'Redo',
826
+ undo: "Rückgängig",
827
+ redo: "Wiederholen",
736
828
  },
737
829
  detail: {
738
830
  editInlineHint: "Zum Bearbeiten doppelklicken",
@@ -772,13 +864,15 @@ const de = {
772
864
  relatedRecords: "{{count}} Datensätze",
773
865
  relatedRecordOne: "{{count}} Datensatz",
774
866
  noRelatedRecords: "Keine verknüpften Datensätze gefunden",
775
- loading: "Laden...",
867
+ loading: "Laden…",
776
868
  copyToClipboard: "In Zwischenablage kopieren",
777
869
  copied: "Kopiert!",
778
870
  deleteConfirmation: "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
871
+ deleted: "Datensatz gelöscht",
779
872
  editRecord: "Datensatz bearbeiten",
780
873
  viewAll: "Alle anzeigen",
781
874
  new: "Neu",
875
+ add: "Hinzufügen",
782
876
  emptyValue: "—",
783
877
  comments: "Kommentare",
784
878
  searchComments: "Kommentare suchen…",
@@ -808,6 +902,10 @@ const de = {
808
902
  attachmentDownloadDenied: "Sie sind nicht berechtigt, diesen Anhang herunterzuladen.",
809
903
  attachmentAuthRequired: "Bitte melden Sie sich an, um diesen Anhang herunterzuladen.",
810
904
  attachmentPermissionDenied: "Sie haben keine Berechtigung für diese Aktion.",
905
+ attachmentsAccessDenied: "Sie haben keinen Zugriff auf diese Anhänge.",
906
+ attachmentsLoadFailed: "Die Anhänge dieses Datensatzes konnten nicht geladen werden.",
907
+ attachmentsApiUnavailable: "Die Anhangsliste ist für dieses Objekt nicht verfügbar.",
908
+ retryLoadAttachments: "Erneut versuchen",
811
909
  unifiedDiff: "Einheitliche Ansicht",
812
910
  sideBySideDiff: "Nebeneinander-Ansicht",
813
911
  noChanges: "Keine Änderungen",
@@ -843,6 +941,7 @@ const de = {
843
941
  loadMore: "Mehr laden",
844
942
  edited: "(bearbeitet)",
845
943
  via: "über {{source}}",
944
+ viewSource: "Quelle anzeigen",
846
945
  replyCount: "{{count}} Antwort",
847
946
  replyCountPlural: "{{count}} Antworten",
848
947
  replyPlaceholder: "Antworten…",
@@ -858,6 +957,8 @@ const de = {
858
957
  writeStrippedTitle: "Gespeichert — einige Felder wurden jedoch nicht übernommen",
859
958
  writeStrippedReadonly: "Schreibgeschützt und daher nicht übernommen: {{fields}}",
860
959
  writeStrippedByState: "Im aktuellen Status dieses Datensatzes nicht bearbeitbar und daher nicht übernommen: {{fields}}",
960
+ writeStrippedPrimaryKey: "Die Kennung des Datensatzes kann beim Speichern nicht geändert werden und wurde daher nicht übernommen: {{fields}}",
961
+ writeStrippedUnknownReason: "Vom Server nicht übernommen: {{fields}}",
861
962
  approvalPendingEditable: "In Genehmigung · bearbeitbar",
862
963
  approvalPendingTooltip: "Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; dieser Schritt erlaubt weiterhin die Bearbeitung",
863
964
  approvalProgress: "Genehmigungen — {{got}} von {{need}}",
@@ -870,6 +971,13 @@ const de = {
870
971
  cancelApprovalTooltipUnlocked: "Ausstehende Genehmigungsanfrage zurückziehen",
871
972
  cancelApprovalFailed: "Genehmigung konnte nicht zurückgezogen werden",
872
973
  cancelApprovalUnavailable: "Das Zurückziehen von Genehmigungen wird bei dieser Datenquelle nicht unterstützt",
974
+ pathLabel: 'Datensatzpfad',
975
+ pathStageCompleted: '{{stage}}, abgeschlossen',
976
+ pathStageCurrent: '{{stage}}, aktuelle Phase',
977
+ pathStageUpcoming: '{{stage}}, ausstehend',
978
+ pathStageLostCurrent: '{{stage}}, verloren, aktuelle Phase',
979
+ pathStageLostUpcoming: '{{stage}}, verloren, nicht erreicht',
980
+ pathStageWonUpcoming: '{{stage}}, Zielphase, nicht erreicht',
873
981
  linkCopied: "Link in die Zwischenablage kopiert",
874
982
  linkCopyFailed: "Link konnte nicht kopiert werden",
875
983
  cancel: "Abbrechen",
@@ -884,9 +992,11 @@ const de = {
884
992
  concurrentUpdateReload: "Aktuelle Version laden",
885
993
  concurrentUpdateOverwrite: "Trotzdem überschreiben",
886
994
  concurrentUpdateCancel: "Abbrechen",
995
+ concurrentUpdateRecordLabel: "diesem Datensatz",
887
996
  openInNewTab: "In neuem Tab öffnen",
888
997
  activity: "Aktivität",
889
998
  history: "Verlauf",
999
+ historyEmpty: "Noch kein Verlauf",
890
1000
  editRow: "Bearbeiten",
891
1001
  deleteRow: "Löschen",
892
1002
  deleteRowConfirmation: "Möchten Sie diesen Datensatz wirklich löschen?",
@@ -896,12 +1006,15 @@ const de = {
896
1006
  nextPage: "Weiter",
897
1007
  pageOf: "Seite {{current}} von {{total}}",
898
1008
  sortBy: "Sortieren nach",
899
- filterPlaceholder: "Filtern...",
1009
+ filterPlaceholder: "Filtern…",
900
1010
  highlightFields: "Schlüsselfelder",
901
1011
  createdBy: "Erstellt von",
902
1012
  updatedBy: "Aktualisiert von",
903
1013
  created: "Erstellt",
904
1014
  updated: "Aktualisiert",
1015
+ // objectui#3863 — base key. de's categories are exactly `one`/`other`, so this
1016
+ // slot is unreachable here and equals `_other` for key-set parity.
1017
+ showEmptyRelated: "+ {{count}} leer",
905
1018
  showEmptyRelated_one: "+ {{count}} leer",
906
1019
  showEmptyRelated_other: "+ {{count}} leer",
907
1020
  copyEmail: "E-Mail kopieren",
@@ -913,7 +1026,8 @@ const de = {
913
1026
  },
914
1027
  chart: {
915
1028
  noData: "Keine Diagrammdaten verfügbar",
916
- loading: "Diagramm wird geladen...",
1029
+ loading: "Diagramm wird geladen…",
1030
+ nullCategory: "(Ohne Angabe)",
917
1031
  },
918
1032
  map: {
919
1033
  searchLocations: "Orte suchen…",
@@ -922,68 +1036,9 @@ const de = {
922
1036
  invalidCoordinates: "{{count}} Datensatz mit fehlenden oder ungültigen Koordinaten von der Karte ausgeschlossen.",
923
1037
  invalidCoordinatesPlural: "{{count}} Datensätze mit fehlenden oder ungültigen Koordinaten von der Karte ausgeschlossen.",
924
1038
  },
925
- workflow: {
926
- draft: "Entwurf",
927
- active: "Aktiv",
928
- paused: "Pausiert",
929
- completed: "Abgeschlossen",
930
- cancelled: "Abgebrochen",
931
- save: "Speichern",
932
- publish: "Veröffentlichen",
933
- addNode: "Knoten hinzufügen",
934
- workflowFlow: "Workflow-Ablauf",
935
- properties: "Eigenschaften",
936
- connections: "Verbindungen",
937
- quickConnect: "Schnellverbindung",
938
- fromPlaceholder: "Von...",
939
- toPlaceholder: "Nach...",
940
- connect: "Verbinden",
941
- label: "Bezeichnung",
942
- type: "Typ",
943
- description: "Beschreibung",
944
- assignee: "Zuständiger",
945
- assigneeType: "Zuständigkeitstyp",
946
- user: "Benutzer",
947
- role: "Rolle",
948
- group: "Gruppe",
949
- expression: "Ausdruck",
950
- timeoutMinutes: "Zeitlimit (Minuten)",
951
- selectNodeToEdit: "Knoten auswählen, um Eigenschaften zu bearbeiten",
952
- workflowTitle: "Workflow-Titel",
953
- newWorkflow: "Neuer Workflow",
954
- outConnections: "{{count}} Ausgänge",
955
- start: "Start",
956
- end: "Ende",
957
- task: "Aufgabe",
958
- userTask: "Benutzeraufgabe",
959
- serviceTask: "Serviceaufgabe",
960
- scriptTask: "Skriptaufgabe",
961
- approval: "Genehmigung",
962
- condition: "Bedingung",
963
- parallelGateway: "Paralleles Gateway",
964
- joinGateway: "Zusammenführungs-Gateway",
965
- boundaryEvent: "Grenzereignis",
966
- delay: "Verzögerung",
967
- notification: "Benachrichtigung",
968
- webhook: "Webhook",
969
- allowConcurrency: "Erlauben (gleichzeitig ausführen)",
970
- forbidConcurrency: "Verbieten (neue überspringen)",
971
- replaceConcurrency: "Ersetzen (bestehende abbrechen)",
972
- queueConcurrency: "Warteschlange (nach aktuellem ausführen)",
973
- conditionEvent: "Bedingung",
974
- manualEvent: "Manuell",
975
- webhookEvent: "Webhook",
976
- timerEvent: "Timer",
977
- signalEvent: "Signal",
978
- versionHistory: "Versionshistorie",
979
- importBpmn: "BPMN importieren",
980
- exportBpmn: "BPMN exportieren",
981
- undo: "Rückgängig",
982
- redo: "Wiederholen",
983
- resetZoom: "Zoom zurücksetzen",
984
- },
985
1039
  dashboard: {
986
1040
  noRows: "Keine Zeilen",
1041
+ loading: "Wird geladen…",
987
1042
  pickMeasures: "Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.",
988
1043
  datasetUnsupported: "Diese Datenquelle unterstützt keine Dataset-Abfragen.",
989
1044
  details: "Details",
@@ -1020,6 +1075,105 @@ const de = {
1020
1075
  total: "Gesamt",
1021
1076
  noDataAvailable: "Keine Daten verfügbar",
1022
1077
  noDataSourceFor: "Keine Datenquelle verfügbar für",
1078
+ config: {
1079
+ breadcrumb: {
1080
+ dashboard: "Dashboard",
1081
+ configuration: "Konfiguration",
1082
+ widget: "Widget",
1083
+ chart: "Diagramm",
1084
+ table: "Tabelle",
1085
+ pivotTable: "Pivot-Tabelle",
1086
+ },
1087
+ section: {
1088
+ general: "Allgemein",
1089
+ layout: "Layout",
1090
+ data: "Daten",
1091
+ dataBinding: "Datenbindung",
1092
+ appearance: "Darstellung",
1093
+ },
1094
+ field: {
1095
+ title: "Titel",
1096
+ description: "Beschreibung",
1097
+ columns: "Spalten",
1098
+ gap: "Abstand",
1099
+ rowHeight: "Zeilenhöhe (px)",
1100
+ autoRefresh: "Automatisch aktualisieren",
1101
+ showDescription: "Beschreibung anzeigen",
1102
+ theme: "Design",
1103
+ widgetType: "Widget-Typ",
1104
+ colorVariant: "Farbvariante",
1105
+ dataset: "Datensatz",
1106
+ dimensions: "Dimensionen",
1107
+ values: "Werte",
1108
+ width: "Breite (Spalten)",
1109
+ height: "Höhe (Zeilen)",
1110
+ },
1111
+ placeholder: {
1112
+ dashboardTitle: "Dashboard-Titel",
1113
+ dashboardDescription: "Kurze Zusammenfassung unter dem Titel",
1114
+ widgetTitle: "Widget-Titel",
1115
+ widgetDescription: "Widget-Beschreibung",
1116
+ datasetName: "Name des Datensatzes",
1117
+ selectDataset: "Datensatz auswählen…",
1118
+ searchDatasets: "Datensätze suchen…",
1119
+ addDimension: "Dimension hinzufügen…",
1120
+ addMeasure: "Kennzahl hinzufügen…",
1121
+ searchMembers: "Suchen…",
1122
+ },
1123
+ empty: {
1124
+ datasets: "Keine Datensätze gefunden.",
1125
+ dimensions: "Keine Dimensionen ausgewählt.",
1126
+ measures: "Keine Kennzahlen ausgewählt.",
1127
+ nothingToAdd: "Nichts mehr hinzuzufügen.",
1128
+ },
1129
+ help: {
1130
+ dataset: "Der Semantic-Layer-Datensatz, an den dieses Widget gebunden ist (ADR-0021).",
1131
+ dimensions: "Werte nach diesen Datensatz-Dimensionen gruppieren/aufteilen.",
1132
+ dimensionsPivot: "Felder zum Gruppieren/Aufteilen. Die letzte Dimension wird als Spalten ausgebreitet.",
1133
+ values: "Anzuzeigende Kennzahlen aus dem Datensatz (mindestens eine).",
1134
+ },
1135
+ action: {
1136
+ add: "Hinzufügen",
1137
+ remove: "{{name}} entfernen",
1138
+ },
1139
+ refresh: {
1140
+ off: "Aus",
1141
+ every30s: "Alle 30 s",
1142
+ every1m: "Jede Minute",
1143
+ every5m: "Alle 5 Min.",
1144
+ every15m: "Alle 15 Min.",
1145
+ every30m: "Alle 30 Min.",
1146
+ every1h: "Jede Stunde",
1147
+ },
1148
+ themeOption: {
1149
+ light: "Hell",
1150
+ dark: "Dunkel",
1151
+ auto: "Automatisch",
1152
+ },
1153
+ widgetType: {
1154
+ metric: "Kennzahl",
1155
+ bar: "Balkendiagramm",
1156
+ horizontalBar: "Horizontale Balken",
1157
+ line: "Liniendiagramm",
1158
+ pie: "Kreisdiagramm",
1159
+ donut: "Ringdiagramm",
1160
+ area: "Flächendiagramm",
1161
+ scatter: "Streudiagramm",
1162
+ funnel: "Trichter",
1163
+ table: "Tabelle",
1164
+ pivot: "Pivot-Tabelle",
1165
+ },
1166
+ color: {
1167
+ default: "Standard",
1168
+ blue: "Blau",
1169
+ teal: "Petrol",
1170
+ orange: "Orange",
1171
+ purple: "Lila",
1172
+ success: "Erfolg",
1173
+ warning: "Warnung",
1174
+ danger: "Gefahr",
1175
+ },
1176
+ },
1023
1177
  trend: {
1024
1178
  vsLastQuarter: "vs. letztes Quartal",
1025
1179
  vsLastMonth: "vs. letzten Monat",
@@ -1029,24 +1183,6 @@ const de = {
1029
1183
  vsPreviousPeriod: "vs. vorherige Periode",
1030
1184
  },
1031
1185
  },
1032
- configPanel: {
1033
- save: "Speichern",
1034
- discard: "Verwerfen",
1035
- close: "Schließen",
1036
- layout: "Layout",
1037
- columns: "Spalten",
1038
- gap: "Abstand",
1039
- rowHeight: "Zeilenhöhe",
1040
- data: "Daten",
1041
- refreshInterval: "Aktualisierungsintervall",
1042
- appearance: "Darstellung",
1043
- title: "Titel",
1044
- showDescription: "Beschreibung anzeigen",
1045
- theme: "Design",
1046
- configuration: "Konfiguration",
1047
- general: "Allgemein",
1048
- advanced: "Erweitert",
1049
- },
1050
1186
  appDesigner: {
1051
1187
  createApp: "Anwendung erstellen",
1052
1188
  editApp: "Anwendung bearbeiten",
@@ -1097,8 +1233,6 @@ const de = {
1097
1233
  showSort: "Sortierung anzeigen",
1098
1234
  appearance: "Erscheinungsbild",
1099
1235
  rowHeight: "Zeilenhöhe",
1100
- stripedRows: "Gestreifte Zeilen",
1101
- bordered: "Umrandet",
1102
1236
  livePreview: "Echtzeit-Vorschau",
1103
1237
  stepBasicDesc: "Name, Titel und Layout",
1104
1238
  stepObjectsDesc: "Geschäftsobjekte auswählen",
@@ -1212,7 +1346,6 @@ const de = {
1212
1346
  unique: "Eindeutig",
1213
1347
  readOnly: "Nur lesen",
1214
1348
  hidden: "Ausgeblendet",
1215
- indexed: "Indiziert",
1216
1349
  externalId: "Externe ID",
1217
1350
  trackHistory: "Verlauf verfolgen",
1218
1351
  defaultValue: "Standardwert",
@@ -1241,6 +1374,7 @@ const de = {
1241
1374
  },
1242
1375
  },
1243
1376
  console: {
1377
+ saveAdvisoryTitle: "Gespeichert — die Autorenprüfung ergab {{count}} Hinweis(e)",
1244
1378
  settingsHub: {
1245
1379
  title: "Einstellungen",
1246
1380
  subtitle: "Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.",
@@ -1285,6 +1419,13 @@ const de = {
1285
1419
  passwordsDownload: "CSV herunterladen",
1286
1420
  },
1287
1421
  ai: {
1422
+ pendingDrafts: {
1423
+ count: "{{count}} Änderung(en) sind noch nicht veröffentlicht — Benutzer können sie nicht sehen.",
1424
+ publish: "Veröffentlichen",
1425
+ published: "Alle ausstehenden Änderungen sind live.",
1426
+ failed: "Veröffentlichen fehlgeschlagen.",
1427
+ publishedWithFindings: "Veröffentlicht, aber die Laufzeitprüfungen haben Probleme gemeldet: {{detail}}",
1428
+ },
1288
1429
  usage: {
1289
1430
  title: "KI-Nutzung",
1290
1431
  meterBuild: "Erstellen",
@@ -1307,7 +1448,7 @@ const de = {
1307
1448
  shareTitle: "Diese Unterhaltung teilen",
1308
1449
  shareDisabledTitle: "Beginnen Sie zu chatten, um das Teilen zu aktivieren",
1309
1450
  newChat: "Neu",
1310
- searchChats: "Chats durchsuchen...",
1451
+ searchChats: "Chats durchsuchen…",
1311
1452
  noChatsYet: "Noch keine Chats",
1312
1453
  noChatsDescription: "Starten Sie eine neue Unterhaltung, um sie hier zu sehen.",
1313
1454
  noMatchingChats: "Keine passenden Chats.",
@@ -1316,18 +1457,18 @@ const de = {
1316
1457
  deleteConversation: "Unterhaltung löschen",
1317
1458
  saveRename: "Umbenennung speichern",
1318
1459
  cancelRename: "Umbenennung abbrechen",
1319
- loadingHistory: "Unterhaltungsverlauf wird geladen...",
1460
+ loadingHistory: "Unterhaltungsverlauf wird geladen…",
1320
1461
  conversationReady: "Unterhaltung bereit",
1321
1462
  preparingConversation: "Neue Unterhaltung wird vorbereitet",
1322
1463
  offlineDemoMode: "Offline-Demomodus — Agentenliste nicht verfügbar",
1323
1464
  sendFailedRateLimited: "Sie senden zu schnell Nachrichten. Ihre Nachricht wird unten aufbewahrt — warten Sie einen Moment und versuchen Sie es erneut.",
1324
1465
  sendFailedGeneric: "Ihre Nachricht konnte nicht gesendet werden. Sie wird unten aufbewahrt — bitte versuchen Sie es erneut.",
1325
- askAgent: "{{agent}} fragen...",
1466
+ askAgent: "{{agent}} fragen…",
1326
1467
  assistant: "Assistent",
1327
1468
  liveCanvas: "Live-Vorschau — {{app}} (Entwurf)",
1328
1469
  liveCanvasUnlisted: "Live-App — {{app}} (nicht gelistet bis zur Veröffentlichung)",
1329
- loadingAgents: "Agenten werden geladen...",
1330
- askAnything: "Fragen Sie irgendetwas...",
1470
+ loadingAgents: "Agenten werden geladen…",
1471
+ askAnything: "Fragen Sie irgendetwas…",
1331
1472
  emptyTitle: "Unterhaltung beginnen",
1332
1473
  emptyDescription: "Fragen Sie irgendetwas — der Assistent hat Zugriff auf den Kontext Ihrer aktuellen App.",
1333
1474
  switchAssistant: "Assistenten wechseln",
@@ -1420,6 +1561,11 @@ const de = {
1420
1561
  changesConfirmed: "Bestätigt",
1421
1562
  changesConfirm: "Bestätigen",
1422
1563
  changesConfirmHint: "Antworten Sie, um diese Änderung zu bestätigen oder anzupassen.",
1564
+ changesApplying: "Wird angewendet…",
1565
+ changesApplied: "Angewendet",
1566
+ changesDrafted: "Als Entwurf gespeichert",
1567
+ changesFailed: "Nicht angewendet",
1568
+ discussing: "Thema: {{target}}",
1423
1569
  changeVerb: {
1424
1570
  createObject: "Objekt erstellen",
1425
1571
  addField: "Feld hinzufügen",
@@ -1430,9 +1576,60 @@ const de = {
1430
1576
  createSeed: "Beispieldaten erzeugen",
1431
1577
  createPackage: "App-Paket erstellen",
1432
1578
  },
1579
+ // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
1580
+ // connection banner and plan/publish cards, the ChatDock chrome, and the
1581
+ // conversation-list date buckets. `group.*` is the template-key family
1582
+ // `console.ai.group.${key}` (ConversationsSidebar), enumerated from the
1583
+ // ConversationGroupKey union — all five members, no wildcard.
1584
+ collapseToDock: "In die Seitenleiste einklappen",
1585
+ switchApp: "App wechseln",
1586
+ switchAppLabel: "Build-Unterhaltungen nach App",
1587
+ newApp: "Neue App",
1588
+ connectionWaiting: "Warten auf den Server…",
1589
+ connectionStalled: "Arbeitet noch…",
1590
+ connectionOffline: "Verbindung verloren — Neuverbindung…",
1591
+ designingPlan: "Ihre App wird entworfen…",
1592
+ designingPlanHint: {
1593
+ data: "Die Daten, die Sie erfassen möchten, werden strukturiert…",
1594
+ objects: "Objekte und ihre Felder werden geformt…",
1595
+ relations: "Verknüpfte Datensätze werden verbunden…",
1596
+ lookups: "Beziehungen und Lookups werden eingerichtet…",
1597
+ views: "Bildschirme und Ansichten werden geplant…",
1598
+ forms: "Formulare und Listen werden angeordnet…",
1599
+ defaults: "Sinnvolle Standardwerte und Validierungen werden hinzugefügt…",
1600
+ dashboard: "Ein Dashboard zur Nachverfolgung wird skizziert…",
1601
+ review: "Es wird noch einmal geprüft, ob die Struktur zusammenpasst…",
1602
+ finalize: "Der Plan wird zusammengestellt…",
1603
+ },
1604
+ planBuilding: "Wird erstellt…",
1605
+ planBuilt: "Erstellt",
1606
+ planDeferred: "Noch nicht erstellt",
1607
+ planReady: "Der Plan ist fertig. Erstellen Sie ihn jetzt, oder sagen Sie mir, was angepasst werden soll.",
1608
+ published: "Veröffentlicht",
1609
+ publishFailed: "Veröffentlichen fehlgeschlagen",
1610
+ unavailableTitle: "KI-Assistent nicht verfügbar",
1611
+ unavailableDescription: "In dieser Bereitstellung ist kein KI-Assistent aktiviert. Alles andere funktioniert wie gewohnt.",
1612
+ unavailableError: "Der KI-Dienst war nicht erreichbar. Er ist möglicherweise vorübergehend offline — versuchen Sie es erneut, oder kehren Sie zur Startseite zurück.",
1613
+ unavailableRetry: "Erneut versuchen",
1614
+ unavailableHome: "Zurück zur Startseite",
1615
+ dock: {
1616
+ title: "Assistent",
1617
+ description: "KI-Assistent-Chat",
1618
+ resize: "Chatbreite anpassen",
1619
+ collapse: "Chat einklappen",
1620
+ maximize: "Als ganze Seite öffnen",
1621
+ open: "Assistent öffnen",
1622
+ },
1623
+ group: {
1624
+ today: "Heute",
1625
+ yesterday: "Gestern",
1626
+ previous7Days: "Vorherige 7 Tage",
1627
+ previous30Days: "Vorherige 30 Tage",
1628
+ older: "Älter",
1629
+ },
1433
1630
  },
1434
1631
  title: "ObjectStack Konsole",
1435
- initializing: "Anwendung wird initialisiert...",
1632
+ initializing: "Anwendung wird initialisiert…",
1436
1633
  loadingHint: "Die Einrichtung einer neuen Umgebung kann einen Moment dauern.",
1437
1634
  breadcrumb: {
1438
1635
  dashboards: "Dashboards",
@@ -1440,6 +1637,31 @@ const de = {
1440
1637
  reports: "Berichte",
1441
1638
  system: "System",
1442
1639
  },
1640
+ // objectui#4024 — the single-namespace settings screen. Its sibling
1641
+ // `settingsHub` above already resolved through this pack; the view was the
1642
+ // one file still carrying English literals.
1643
+ settingsView: {
1644
+ backToHub: "Alle Einstellungen",
1645
+ back: "Zurück",
1646
+ noNamespace: "Kein Namensraum ausgewählt.",
1647
+ loadError: "Einstellungen konnten nicht geladen werden",
1648
+ saved: "Einstellungen gespeichert",
1649
+ saveFailed: "Speichern fehlgeschlagen",
1650
+ lockedByEnv: "Durch Umgebung gesperrt: {{key}}",
1651
+ lockedByEnvNoKey: "Durch Umgebung gesperrt",
1652
+ actionSucceeded: "Aktion erfolgreich",
1653
+ actionFailed: "Aktion fehlgeschlagen",
1654
+ discard: "Verwerfen",
1655
+ saveChanges: "Änderungen speichern",
1656
+ unsavedCount: "{{count}} nicht gespeicherte Änderungen",
1657
+ unsavedCount_one: "{{count}} nicht gespeicherte Änderung",
1658
+ unsavedCount_other: "{{count}} nicht gespeicherte Änderungen",
1659
+ cryptoRefusalTitle: "Diese Installation kann keine Geheimnisse verschlüsseln",
1660
+ cryptoRefusalSubjectSuffix: "ist als verschlüsselt deklariert, daher wurde nichts geschrieben.",
1661
+ cryptoRefusalNoSubject: "Der als verschlüsselt deklarierte Wert wurde abgelehnt, daher wurde nichts geschrieben.",
1662
+ cryptoRefusalToast: "Geheimnisse können nicht verschlüsselt werden: {{subject}}",
1663
+ cryptoRefusalToastNoSubject: "Geheimnisse können nicht verschlüsselt werden",
1664
+ },
1443
1665
  loadingSteps: {
1444
1666
  connecting: "Verbindung zur Datenquelle herstellen",
1445
1667
  loadingConfig: "Konfiguration laden",
@@ -1469,6 +1691,7 @@ const de = {
1469
1691
  general: "Allgemein",
1470
1692
  navigation: "Navigation",
1471
1693
  dataViews: "Datenansichten",
1694
+ aiChat: "KI-Assistent",
1472
1695
  preferences: "Einstellungen",
1473
1696
  },
1474
1697
  openCommandPalette: "Befehlspalette öffnen",
@@ -1479,11 +1702,13 @@ const de = {
1479
1702
  createRecord: "Neuen Datensatz erstellen",
1480
1703
  refreshData: "Daten aktualisieren",
1481
1704
  editRecord: "Ausgewählten Datensatz bearbeiten",
1705
+ newChat: "Neuer Chat",
1706
+ toggleChatsList: "Chatliste umschalten",
1482
1707
  toggleDarkMode: "Dunkelmodus umschalten",
1483
1708
  },
1484
1709
  commandPalette: {
1485
1710
  title: "Befehlspalette",
1486
- placeholder: "Befehl eingeben oder suchen...",
1711
+ placeholder: "Befehl eingeben oder suchen…",
1487
1712
  noResults: "Keine Ergebnisse gefunden.",
1488
1713
  objects: "Objekte",
1489
1714
  dashboards: "Dashboards",
@@ -1509,6 +1734,12 @@ const de = {
1509
1734
  goHome: "Zur Startseite",
1510
1735
  errorDetails: "Fehlerdetails (nur Entwicklung)",
1511
1736
  },
1737
+ // objectui#3546 slice four — the console's catch-all route (AppContent `RouteNotFound`).
1738
+ notFound: {
1739
+ title: "Seite nicht gefunden",
1740
+ description: "Die aufgerufene URL entspricht keiner Ansicht in dieser App.",
1741
+ back: "Zurück",
1742
+ },
1512
1743
  theme: {
1513
1744
  toggle: "Design umschalten",
1514
1745
  light: "Hell",
@@ -1524,115 +1755,47 @@ const de = {
1524
1755
  viewNameHelp: "Technischer Schlüssel (snake_case). Wird aus dem Titel automatisch gefüllt — bei Bedarf anpassen.",
1525
1756
  viewNameRequired: "Geben Sie einen Schlüssel ein (Kleinbuchstaben, Ziffern, Unterstrich). Bei nicht-lateinischen Titeln wird er nicht automatisch gefüllt.",
1526
1757
  viewNameInvalid: "Verwenden Sie Kleinbuchstaben, Ziffern und Unterstriche; beginnen Sie mit einem Buchstaben oder Unterstrich.",
1527
- systemViewReadonly: 'System view defined in code - duplicate to customize.',
1528
- expandToPage: 'Open as full page',
1758
+ systemViewReadonly: "Systemansicht — im Code definiert, schreibgeschützt.",
1759
+ cannotEditMetaView: "Diese Ansicht ist integriert und im Code definiert – sie kann nicht geändert werden.",
1760
+ cannotDeleteMetaView: "Diese Ansicht ist integriert und im Code definiert – sie kann nicht gelöscht werden.",
1761
+ expandToPage: "Als ganze Seite öffnen",
1529
1762
  objectNotFound: "Objekt nicht gefunden",
1530
- objectNotFoundDescription: "Das Objekt „{{objectName}}\" existiert in der aktuellen Konfiguration nicht.",
1763
+ objectNotFoundDescription: "Das Objekt „{{objectName}}“ existiert in der aktuellen Konfiguration nicht.",
1531
1764
  objectNotFoundHint: "Überprüfen Sie Ihre App-Navigationseinstellungen oder wählen Sie ein anderes Objekt aus der Seitenleiste.",
1532
1765
  filterOrNotSavable: "Dieser Filter verknüpft Bedingungen mit ODER, was eine gespeicherte Ansicht noch nicht ablegen kann. Er gilt weiterhin für diese Liste – entfernen Sie die ODER-Gruppierung, um ihn in der Ansicht zu speichern.",
1533
1766
  filterNestedNotSavable: "Dieser Filter verwendet verschachtelte Bedingungsgruppen, die eine gespeicherte Ansicht nicht ablegen kann. Reduzieren Sie ihn auf eine einzelne Bedingungsliste, um ihn in der Ansicht zu speichern.",
1534
1767
  allRecords: "Alle Datensätze",
1535
- exitDesignMode: "Designmodus beenden",
1536
- enterDesignMode: "Designmodus starten",
1537
- metadataInspector: "Metadaten-Inspektor",
1538
- editView: "Ansicht bearbeiten",
1539
- addView: "Ansicht hinzufügen",
1540
- designTools: "Design-Werkzeuge",
1541
1768
  new: "Neu",
1542
1769
  configureView: "Ansicht konfigurieren",
1543
- closePanel: "Panel schließen",
1544
- page: "Seite",
1545
- pageConfigHint: "Symbolleiste, Navigation & Ansichts-Shell-Einstellungen",
1546
- listConfigHint: "Daten-Rendering, Spalten & Erscheinungsbild für diesen Listentyp",
1547
- general: "Allgemein",
1548
- generalHint: "Ansichtstitel, Beschreibung und Typ",
1549
1770
  toolbar: "Symbolleiste",
1550
- toolbarHint: "Suche, Filter, Sortierung, Gruppierung und Dichteumschaltung",
1551
1771
  toolbarEnabledCount: "{{count}} von {{total}} aktiviert",
1552
- navigationSection: "Navigation",
1553
- navigationHint: "Zeilenklickverhalten und Detailansichtseinstellungen",
1554
- records: "Datensätze",
1555
- recordsHint: "Auswahlmodus, Datensatz hinzufügen und Inline-Bearbeitung",
1556
- exportPrint: "Export & Drucken",
1557
- exportPrintHint: "Exportformate, Drucken und Anzeige der Datensatzanzahl",
1558
- showAllFields: "Alle anzeigen",
1559
- hideAllFields: "Alle ausblenden",
1560
- searchFields: "Felder suchen...",
1772
+ searchFields: "Felder suchen…",
1561
1773
  title: "Titel",
1562
- description: "Beschreibung",
1563
- data: "Daten",
1564
- source: "Quelle",
1565
- columns: "Spalten",
1566
- filterBy: "Filtern nach",
1567
- sortBy: "Sortieren nach",
1568
- appearance: "Darstellung",
1569
- showDescription: "Beschreibung anzeigen",
1570
1774
  viewType: "Ansichtstyp",
1571
- userFilters: "Benutzerfilter",
1572
- enableSearch: "Suche aktivieren",
1573
- enableFilter: "Filter aktivieren",
1574
- enableSort: "Sortierung aktivieren",
1575
- enableHideFields: "Felder ausblenden aktivieren",
1576
- enableGroup: "Gruppierung aktivieren",
1577
- enableColor: "Farbe aktivieren",
1578
- enableDensity: "Dichte aktivieren",
1579
- userActions: "Benutzeraktionen",
1580
- addRecordViaForm: "Datensätze über Formular hinzufügen",
1581
- advanced: "Erweitert",
1582
- allowExport: "Export erlauben",
1583
1775
  recordCount: "{{count}} Datensätze",
1584
- noDescription: "Keine Beschreibung",
1585
- none: "Keine",
1586
- columnsConfigured: "{{count}} Spalten",
1587
1776
  save: "Speichern",
1588
1777
  discard: "Verwerfen",
1589
1778
  createView: "Ansicht erstellen",
1590
1779
  newView: "Neue Ansicht",
1591
- typeOptions: "Typoptionen",
1592
1780
  groupByField: "Gruppierungsfeld",
1593
1781
  startDateField: "Startdatumsfeld",
1594
1782
  titleField: "Titelfeld",
1595
1783
  latitudeField: "Breitengradfeld",
1596
1784
  longitudeField: "Längengradfeld",
1597
1785
  imageField: "Bildfeld",
1598
- dateField: "Datumsfeld",
1599
- selectField: "Feld auswählen...",
1600
- gridOptionsHint: "Die Tabellenansicht verwendet die oben konfigurierten Spalten.",
1786
+ selectField: "Feld auswählen…",
1601
1787
  groupBy: "Gruppieren nach",
1602
- prefixField: "Präfixfeld",
1603
- fields: "Felder",
1604
- fieldsVisible: "{{count}} sichtbar",
1605
- sortsCount: "{{count}} Sortierungen",
1606
- filtersCount: "{{count}} Filter",
1607
1788
  endDateField: "Enddatumsfeld",
1608
- color: "Farbe",
1609
- fieldTextColor: "Feldtextfarbe",
1610
- rowHeight: "Zeilenhöhe",
1611
- wrapHeaders: "Kopfzeilen umbrechen",
1612
- showFieldDescriptions: "Feldbeschreibungen anzeigen",
1613
- collapseAllByDefault: "Standardmäßig alle einklappen",
1614
- striped: "Gestreifte Zeilen",
1615
- bordered: "Umrandete Zellen",
1616
- inlineEdit: "Datensätze inline bearbeiten",
1617
- addDeleteRecordsInline: "Datensätze inline hinzufügen/löschen",
1618
- clickIntoRecordDetails: "Klicken für Datensatzdetails",
1619
- navigationMode: "Navigationsmodus",
1620
- navigationWidth: "Navigationsbreite",
1621
- navigationWidthHint: "Verfügbar für Schublade-, Modal- und Split-Navigationsmodi",
1622
- openNewTab: "In neuem Tab öffnen",
1623
- openNewTabHint: "Verfügbar für Seiten- und Neues-Fenster-Navigationsmodi",
1624
1789
  import: "Importieren",
1625
1790
  importTitle: "Aus CSV importieren",
1626
1791
  importedToast: "{{count}} Zeile(n) importiert.",
1627
1792
  importedWithSkipped: "{{ok}} Zeile(n) importiert; {{skipped}} übersprungen.",
1628
- showAdvancedSettings: "Erweiterte Einstellungen anzeigen",
1629
- showFewerSettings: "Weniger Einstellungen anzeigen",
1630
1793
  createViewDesc: "Wählen Sie einen Ansichtstyp und geben Sie ihm einen Namen. Alle Einstellungen können danach geändert werden.",
1631
1794
  cancel: "Abbrechen",
1632
1795
  create: "Erstellen",
1633
1796
  delete: "Löschen",
1634
1797
  deleteViewTitle: "Ansicht löschen",
1635
- deleteViewConfirm: "Möchten Sie die Ansicht „{{name}}\" wirklich löschen? Dies kann nicht rückgängig gemacht werden.",
1798
+ deleteViewConfirm: "Möchten Sie die Ansicht „{{name}}“ wirklich löschen? Dies kann nicht rückgängig gemacht werden.",
1636
1799
  bulkDeleteConfirm: "{{count}} ausgewählte Datensätze löschen? Dies kann nicht rückgängig gemacht werden.",
1637
1800
  duplicateViewName: "Eine Ansicht mit diesem Namen existiert bereits.",
1638
1801
  viewTypeGrid: "Raster",
@@ -1659,9 +1822,9 @@ const de = {
1659
1822
  latitudeFieldHelp: "Feld mit dem Breitengrad (nur Geo-Felder).",
1660
1823
  longitudeFieldHelp: "Feld mit dem Längengrad (nur Geo-Felder).",
1661
1824
  imageFieldHelp: "Das Galerie-Cover kommt aus diesem Bild- oder Anhangfeld.",
1662
- selectOption: "Auswählen...",
1825
+ selectOption: "Auswählen…",
1663
1826
  noEligibleFieldForType: "Kein geeignetes Feld dieses Typs. Fügen Sie zuerst eines zum Objekt hinzu.",
1664
- viewTypeUnavailable: "Dieses Objekt hat kein Feld, das als „{{field}}\" dienen kann.",
1827
+ viewTypeUnavailable: "Dieses Objekt hat kein Feld, das als „{{field}}“ dienen kann.",
1665
1828
  viewTypeUnavailableShort: "Nicht von diesem Objekt unterstützt.",
1666
1829
  chartType: "Diagrammtyp",
1667
1830
  chartTypeHelp: "Bestimmt, wie die Daten gerendert werden.",
@@ -1674,58 +1837,9 @@ const de = {
1674
1837
  xAxisFieldHelp: "Die kategoriale oder zeitliche Dimension.",
1675
1838
  yAxisField: "Y-Achse-Feld",
1676
1839
  yAxisFieldHelp: "Das numerische Feld zur Aggregation.",
1677
- selectionMode: "Auswahlmodus",
1678
- selectionNone: "Keine",
1679
- selectionSingle: "Einzeln",
1680
- selectionMultiple: "Mehrfach",
1681
- pageSize: "Seitengröße",
1682
- pageSizeOptions: "Seitengrößenoptionen",
1683
- exportFormats: "Exportformate",
1684
- exportMaxRecords: "Maximale Datensätze",
1685
- exportIncludeHeaders: "Kopfzeilen einschließen",
1686
- exportFileNamePrefix: "Dateinamenpräfix",
1687
- searchableFields: "Durchsuchbare Felder",
1688
- filterableFields: "Filterbare Felder",
1689
- resizableColumns: "Größenveränderbare Spalten",
1690
- densityCompact: "Kompakt",
1691
- densityComfortable: "Normal",
1692
- densitySpacious: "Großzügig",
1693
- densityMode: "Dichtemodus",
1694
- hiddenFields: "Ausgeblendete Felder",
1695
- rowActions: "Zeilenaktionen",
1696
- bulkActions: "Massenaktionen",
1697
- sharing: "Teilen",
1698
- sharingEnabled: "Teilen aktivieren",
1699
- sharingVisibility: "Sichtbarkeit",
1700
- addRecordEnabled: "Datensatz hinzufügen aktivieren",
1701
- addRecordPosition: "Position",
1702
- addRecordMode: "Modus",
1703
- addRecordFormView: "Formularansicht",
1704
- conditionalFormatting: "Bedingte Formatierung",
1705
- addRule: "Regel hinzufügen",
1706
- quickFilters: "Schnellfilter",
1707
- addQuickFilter: "Schnellfilter hinzufügen",
1708
- ufElements: "Elemente",
1709
- ufDropdown: "Dropdown",
1710
1840
  ufTabs: "Registerkarten",
1711
- ufToggle: "Umschalten",
1712
- ufAddField: "+ Filterfeld hinzufügen...",
1713
- ufNoFields: "Keine Felder verfügbar",
1714
- ufAddTab: "+ Registerkarte hinzufügen",
1715
- ufTabLabel: "Bezeichnung",
1716
- ufShowAllRecords: "Registerkarte „Alle Datensätze\" anzeigen",
1717
- ufAllowAddTab: "Registerkarten hinzufügen erlauben",
1718
- showRecordCount: "Datensatzanzahl anzeigen",
1719
- allowPrinting: "Drucken erlauben",
1720
- virtualScroll: "Virtuelles Scrollen",
1721
- emptyStateTitle: "Leerzustands-Titel",
1722
- emptyStateMessage: "Leerzustands-Nachricht",
1723
- emptyStateIcon: "Leerzustands-Symbol",
1724
- ariaLabel: "ARIA-Bezeichnung",
1725
- ariaDescribedBy: "ARIA-Beschreibung",
1726
- ariaLive: "ARIA-Live",
1727
- accessibility: "Barrierefreiheit",
1728
- viewTabs: "Ansichts-Registerkarten",
1841
+ ufAddField: "+ Filterfeld hinzufügen…",
1842
+ ufShowAllRecords: "Registerkarte „Alle Datensätze“ anzeigen",
1729
1843
  },
1730
1844
  localeSwitcher: {
1731
1845
  label: "Sprache",
@@ -1769,7 +1883,7 @@ const de = {
1769
1883
  passwordPlaceholder: "Passwort eingeben",
1770
1884
  forgotPasswordText: "Passwort vergessen?",
1771
1885
  submitButton: "Anmelden",
1772
- submittingButton: "Anmeldung läuft...",
1886
+ submittingButton: "Anmeldung läuft…",
1773
1887
  noAccountText: "Noch kein Konto?",
1774
1888
  signUpText: "Registrieren",
1775
1889
  errors: {
@@ -1777,6 +1891,18 @@ const de = {
1777
1891
  invalidCredentials: "Ungültige E-Mail oder Passwort. Bitte erneut versuchen.",
1778
1892
  emailNotVerified: "Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sich anmelden.",
1779
1893
  },
1894
+ // objectui#3546 slice three — phone/OTP sign-in. `{seconds}` is LoginForm's own
1895
+ // literal `.replace()` hole, not i18next interpolation: keep the single braces.
1896
+ emailOrPhoneLabel: "E-Mail oder Telefonnummer",
1897
+ emailOrPhonePlaceholder: "name@example.com oder +1 555 000 0000",
1898
+ phoneLabel: "Telefonnummer",
1899
+ phonePlaceholder: "+1 555 000 0000",
1900
+ otpCodeLabel: "Bestätigungscode",
1901
+ otpCodePlaceholder: "6-stelliger Code",
1902
+ sendOtpButton: "Code anfordern",
1903
+ resendOtpCountdownText: "Erneut senden in {seconds} s",
1904
+ usePhoneOtpText: "Mit Bestätigungscode anmelden",
1905
+ usePasswordSignInText: "Stattdessen mit Passwort anmelden",
1780
1906
  },
1781
1907
  register: {
1782
1908
  title: "Konto erstellen",
@@ -1792,7 +1918,7 @@ const de = {
1792
1918
  passwordMismatchError: "Passwörter stimmen nicht überein",
1793
1919
  passwordTooShortError: "Das Passwort muss mindestens 8 Zeichen lang sein",
1794
1920
  submitButton: "Konto erstellen",
1795
- submittingButton: "Konto wird erstellt...",
1921
+ submittingButton: "Konto wird erstellt…",
1796
1922
  hasAccountText: "Bereits ein Konto?",
1797
1923
  signInText: "Anmelden",
1798
1924
  errors: {
@@ -1813,12 +1939,26 @@ const de = {
1813
1939
  emailLabel: "E-Mail",
1814
1940
  emailPlaceholder: "name@example.com",
1815
1941
  submitButton: "Link zum Zurücksetzen senden",
1816
- submittingButton: "Wird gesendet...",
1942
+ submittingButton: "Wird gesendet…",
1817
1943
  successTitle: "Überprüfen Sie Ihre E-Mails",
1818
- successDescription: "Wir haben einen Link zum Zurücksetzen des Passworts an {{email}} gesendet. Bitte überprüfen Sie Ihren Posteingang.",
1944
+ successDescription: "Wir haben einen Link zum Zurücksetzen des Passworts an {email} gesendet. Bitte überprüfen Sie Ihren Posteingang.",
1819
1945
  backToSignInText: "Zurück zur Anmeldung",
1820
1946
  rememberPasswordText: "Passwort doch bekannt?",
1821
1947
  signInText: "Anmelden",
1948
+ // objectui#3546 slice three — the SMS reset branch of the same form.
1949
+ phoneLabel: "Telefonnummer",
1950
+ phonePlaceholder: "+1 555 000 0000",
1951
+ otpCodeLabel: "Bestätigungscode",
1952
+ otpCodePlaceholder: "6-stelliger Code",
1953
+ sendOtpButton: "Code anfordern",
1954
+ resendOtpCountdownText: "Erneut senden in {seconds} s",
1955
+ newPasswordLabel: "Neues Passwort",
1956
+ newPasswordPlaceholder: "Neues Passwort eingeben",
1957
+ resetButton: "Passwort zurücksetzen",
1958
+ usePhoneResetText: "Per SMS-Code zurücksetzen",
1959
+ useEmailResetText: "Stattdessen per E-Mail zurücksetzen",
1960
+ phoneSuccessTitle: "Passwort zurückgesetzt",
1961
+ phoneSuccessDescription: "Ihr Passwort wurde zurückgesetzt. Sie können sich jetzt mit dem neuen Passwort anmelden.",
1822
1962
  },
1823
1963
  resetPassword: {
1824
1964
  title: "Neues Passwort festlegen",
@@ -1857,6 +1997,8 @@ const de = {
1857
1997
  backToLogin: "Zurück zum Login",
1858
1998
  checkSpam: "E-Mail nicht erhalten? Überprüfen Sie Ihren Spam-Ordner oder kontaktieren Sie den Support.",
1859
1999
  or: "Oder",
2000
+ // objectui#3546 slice three.
2001
+ resendUnavailable: "Für diese Umgebung ist möglicherweise kein E-Mail-Versand konfiguriert. Kontaktieren Sie den Support, wenn das Problem bestehen bleibt.",
1860
2002
  },
1861
2003
  setup: {
1862
2004
  welcomeTitle: "Willkommen bei ObjectStack",
@@ -1895,6 +2037,9 @@ const de = {
1895
2037
  invalidDescription: "In der URL wurde kein Gerätecode angegeben.",
1896
2038
  loading: "Lade…",
1897
2039
  cancel: "Abbrechen",
2040
+ // objectui#3546 slice three — device-authorization plugin switched off.
2041
+ disabledTitle: "Geräteautorisierung nicht aktiviert",
2042
+ disabledDescription: "Für diese Bereitstellung ist die Geräteautorisierung nicht aktiviert, daher kann dieses Gerät hier nicht genehmigt werden.",
1898
2043
  },
1899
2044
  shell: {
1900
2045
  tenantHostHint: "Sie melden sich bei diesem Arbeitsbereich an",
@@ -1934,6 +2079,29 @@ const de = {
1934
2079
  },
1935
2080
  },
1936
2081
  },
2082
+ // objectui#3546 slice three — the /oauth/consent screen.
2083
+ oauth: {
2084
+ consent: {
2085
+ title: "{{appName}} möchte auf Ihr Konto zugreifen",
2086
+ request: "{{appName}} fordert eine Berechtigung an{{suffix}}.",
2087
+ unknownApp: "eine Anwendung",
2088
+ willAllow: "Diese App kann dann:",
2089
+ scope: {
2090
+ openid: "Ihre Identität bestätigen",
2091
+ profile: "Ihr Basisprofil lesen (Name, Bild)",
2092
+ email: "Ihre E-Mail-Adresse lesen",
2093
+ offlineAccess: "Angemeldet bleiben (Zugriff erneuern)",
2094
+ },
2095
+ deny: "Ablehnen",
2096
+ authorize: "Autorisieren",
2097
+ submitting: "Autorisiere…",
2098
+ granted: "Zugriff gewährt",
2099
+ denied: "Zugriff verweigert",
2100
+ noRedirect: "Der Server hat keine Weiterleitungs-URL zurückgegeben.",
2101
+ failed: "Zustimmung fehlgeschlagen",
2102
+ footer: "Sie können den Zugriff jederzeit in Ihren Kontoeinstellungen widerrufen.",
2103
+ },
2104
+ },
1937
2105
  profile: {
1938
2106
  title: "Profil",
1939
2107
  subtitle: "Verwalten Sie Ihre Kontoeinstellungen",
@@ -1995,6 +2163,8 @@ const de = {
1995
2163
  invite: "Mitglied einladen",
1996
2164
  members: "Mitglieder",
1997
2165
  settings: "Arbeitsbereichseinstellungen",
2166
+ multiOrgDisabled: "Das Erstellen neuer Organisationen ist auf dieser Instanz deaktiviert.",
2167
+ createFailed: 'Arbeitsbereich konnte nicht erstellt werden',
1998
2168
  },
1999
2169
  help: {
2000
2170
  onThisPage: "Auf dieser Seite",
@@ -2005,7 +2175,7 @@ const de = {
2005
2175
  },
2006
2176
  sidebar: {
2007
2177
  packageManagement: "Paketverwaltung",
2008
- searchNavigation: "Navigation durchsuchen...",
2178
+ searchNavigation: "Navigation durchsuchen…",
2009
2179
  settings: "Einstellungen",
2010
2180
  help: "Hilfe",
2011
2181
  helpTooltip: "Hilfe und Dokumentation",
@@ -2029,8 +2199,8 @@ const de = {
2029
2199
  switchObject: "Objekt wechseln",
2030
2200
  connection: {
2031
2201
  connected: "Verbunden",
2032
- connecting: "Verbindung wird hergestellt...",
2033
- reconnecting: "Verbindung wird wiederhergestellt...",
2202
+ connecting: "Verbindung wird hergestellt…",
2203
+ reconnecting: "Verbindung wird wiederhergestellt…",
2034
2204
  disconnected: "Getrennt",
2035
2205
  error: "Verbindungsfehler",
2036
2206
  },
@@ -2046,10 +2216,12 @@ const de = {
2046
2216
  build: {
2047
2217
  title: "App erstellen",
2048
2218
  subtitle: "Von Grund auf beginnen — Objekte, Formulare, Automatisierungen und Oberflächen gestalten.",
2219
+ noCapability: "Das Erstellen von Apps ist in diesem Arbeitsbereich nicht verfügbar — es erfordert die Berechtigung „Metadaten verwalten“, die Ihr Konto nicht besitzt.",
2049
2220
  },
2050
2221
  template: {
2051
2222
  title: "Mit einer Vorlage starten",
2052
2223
  subtitle: "Installieren Sie eine Vorlagen-App aus dem Marktplatz und passen Sie sie an.",
2224
+ marketplaceDisabled: "Für diese Laufzeitumgebung ist kein App-Marktplatz konfiguriert, daher gibt es hier keine Vorlagen zum Installieren.",
2053
2225
  },
2054
2226
  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.",
2055
2227
  welcomeAdminDescriptionNoBuild: "Richten Sie Ihre erste Anwendung über das Verwaltungsmenü links ein. Sobald Daten vorhanden sind, kann der KI-Assistent bei der Auswertung helfen.",
@@ -2069,6 +2241,14 @@ const de = {
2069
2241
  publishing: "Wird veröffentlicht…",
2070
2242
  published: "Veröffentlicht! Ihre Änderungen sind live.",
2071
2243
  publishFailed: "Veröffentlichen fehlgeschlagen",
2244
+ // objectui#3546 slice six — seedWarn ist derselbe englische Satz wie
2245
+ // console.ai.seedWarn, also dieselbe Übersetzung. Der "(n)"-Marker folgt
2246
+ // home.pendingDrafts.message ("Änderung(en)") in dieser Familie.
2247
+ nothing: "Nichts zu veröffentlichen.",
2248
+ probeWarn: "Veröffentlicht, aber die Überprüfung hat Probleme gefunden.",
2249
+ seedWarn: "Veröffentlicht, aber einige Beispieldaten konnten nicht geladen werden.",
2250
+ publishedVerified: "Veröffentlicht und geprüft — {{count}} Beispielzeile(n) sind live.",
2251
+ capabilityWarn: "Autorenprüfung: {{count}} Capability-Verweis(e) verweisen ins Leere.",
2072
2252
  },
2073
2253
  title: "Startseite",
2074
2254
  subtitle: "Ihr Arbeitsbereich-Dashboard",
@@ -2082,7 +2262,7 @@ const de = {
2082
2262
  title: "Erfordert Ihre Aufmerksamkeit",
2083
2263
  empty: "Alles erledigt",
2084
2264
  },
2085
- loading: "Arbeitsbereich wird geladen...",
2265
+ loading: "Arbeitsbereich wird geladen…",
2086
2266
  recent: "Kürzlich",
2087
2267
  starred: "Mit Stern",
2088
2268
  welcome: "Willkommen bei ObjectUI",
@@ -2128,7 +2308,7 @@ const de = {
2128
2308
  },
2129
2309
  gettingStarted: {
2130
2310
  title: "Startseite anpassen",
2131
- description: "Markieren Sie eine App, um sie hier anzuheften und mit einem Klick darauf zuzugreifen. Alles, was Sie öffnen, wird automatisch unter „Zuletzt geöffnet\" angezeigt.",
2311
+ description: "Markieren Sie eine App, um sie hier anzuheften und mit einem Klick darauf zuzugreifen. Alles, was Sie öffnen, wird automatisch unter „Zuletzt geöffnet“ angezeigt.",
2132
2312
  cta: "Alle Anwendungen durchsuchen",
2133
2313
  },
2134
2314
  },
@@ -2143,6 +2323,9 @@ const de = {
2143
2323
  roles: "Rollen",
2144
2324
  configuration: "Konfiguration",
2145
2325
  createApp: "App erstellen",
2326
+ administration: "Verwaltung",
2327
+ datasources: "Datenquellen",
2328
+ documentation: "Dokumentation",
2146
2329
  },
2147
2330
  appSwitcher: {
2148
2331
  switchApplication: "Anwendung wechseln",
@@ -2182,10 +2365,10 @@ const de = {
2182
2365
  search: {
2183
2366
  title: "Suche",
2184
2367
  back: "Zurück",
2185
- placeholder: "Objekte, Dashboards, Seiten, Berichte suchen...",
2368
+ placeholder: "Objekte, Dashboards, Seiten, Berichte suchen…",
2186
2369
  inputAriaLabel: "Objekte, Dashboards, Seiten, Berichte suchen",
2187
- resultsCount: "{{count}} Ergebnis für „{{query}}\"",
2188
- resultsCountPlural: "{{count}} Ergebnisse für „{{query}}\"",
2370
+ resultsCount: "{{count}} Ergebnis für „{{query}}“",
2371
+ resultsCountPlural: "{{count}} Ergebnisse für „{{query}}“",
2189
2372
  itemsAvailable: "{{count}} Elemente verfügbar",
2190
2373
  noResults: "Keine Ergebnisse gefunden",
2191
2374
  noResultsHint: "Versuchen Sie, Ihre Suchbegriffe anzupassen",
@@ -2200,36 +2383,27 @@ const de = {
2200
2383
  },
2201
2384
  empty: {
2202
2385
  objectNotFound: "Objekt nicht gefunden",
2203
- objectNotFoundDescription: "Definition des Objekts „{{name}}\" fehlt. Überprüfen Sie Ihre Konfiguration oder navigieren Sie zurück.",
2386
+ objectNotFoundDescription: "Definition des Objekts „{{name}}“ fehlt. Überprüfen Sie Ihre Konfiguration oder navigieren Sie zurück.",
2387
+ interfacePageSourceMissing: "Diese Interface-Seite verweist auf „{{name}}“, das nicht verfügbar ist.",
2204
2388
  pageNotFound: "Seite nicht gefunden",
2205
- pageNotFoundDescription: "Die Seite „{{name}}\" wurde nicht gefunden. Sie wurde möglicherweise entfernt oder umbenannt.",
2389
+ pageNotFoundDescription: "Die Seite „{{name}}“ wurde nicht gefunden. Sie wurde möglicherweise entfernt oder umbenannt.",
2206
2390
  dashboardNotFound: "Dashboard nicht gefunden",
2207
- dashboardNotFoundDescription: "Das Dashboard „{{name}}\" wurde nicht gefunden. Es wurde möglicherweise entfernt oder umbenannt.",
2391
+ dashboardNotFoundDescription: "Das Dashboard „{{name}}“ wurde nicht gefunden. Es wurde möglicherweise entfernt oder umbenannt.",
2208
2392
  reportNotFound: "Bericht nicht gefunden",
2209
- reportNotFoundDescription: "Der Bericht „{{name}}\" wurde nicht gefunden. Er wurde möglicherweise entfernt oder umbenannt.",
2393
+ reportNotFoundDescription: "Der Bericht „{{name}}“ wurde nicht gefunden. Er wurde möglicherweise entfernt oder umbenannt.",
2210
2394
  noAppsConfigured: "Keine Apps konfiguriert",
2211
2395
  noAppsConfiguredDescription: "Es sind keine Anwendungen registriert. Erstellen Sie Ihre erste App oder besuchen Sie die Systemeinstellungen.",
2396
+ appNotAvailable: "App nicht verfügbar",
2397
+ appNotAvailableDescription: "Diese App ist noch nicht verfügbar — sie wird möglicherweise noch veröffentlicht. Versuchen Sie es in einem Moment erneut.",
2398
+ appAccessDenied: "Sie haben keinen Zugriff auf diese App",
2399
+ appAccessDeniedDescription: "Diese App existiert, aber Ihr Konto ist nicht berechtigt, sie zu öffnen. Bitten Sie einen Administrator um Zugriff.",
2400
+ appAccessDeniedHome: "Zurück zur Startseite",
2212
2401
  createFirstApp: "Erste App erstellen",
2213
2402
  systemSettings: "Systemeinstellungen",
2214
2403
  back: "Zurück",
2215
2404
  recordNotFound: "Datensatz nicht gefunden",
2216
2405
  recordNotFoundDescription: "Der gesuchte Datensatz existiert nicht oder wurde möglicherweise gelöscht.",
2217
2406
  },
2218
- renderer: {
2219
- noPageSchema: "Kein Seitenschema angegeben",
2220
- noFormSchema: "Kein Formularschema angegeben",
2221
- noDashboardSchema: "Kein Dashboard-Schema angegeben",
2222
- pageRendering: "Seite wird gerendert: {{name}}",
2223
- dashboardRendering: "Dashboard wird gerendert: {{name}}",
2224
- formRenderingMode: "Formular wird im {{mode}}-Modus gerendert",
2225
- formRenderingFor: "für Datensatz {{id}}",
2226
- createRecord: "Datensatz erstellen",
2227
- editRecord: "Datensatz bearbeiten",
2228
- page: "Seite",
2229
- dashboard: "Dashboard",
2230
- save: "Speichern",
2231
- cancel: "Abbrechen",
2232
- },
2233
2407
  actionDialog: {
2234
2408
  title: "Aktionsparameter",
2235
2409
  description: "Bitte geben Sie die erforderlichen Informationen ein, um fortzufahren.",
@@ -2254,12 +2428,12 @@ const de = {
2254
2428
  delete: "Löschen",
2255
2429
  },
2256
2430
  navigationSync: {
2257
- addedPage: "Navigation aktualisiert: Seite „{{name}}\" hinzugefügt",
2258
- addedDashboard: "Navigation aktualisiert: Dashboard „{{name}}\" hinzugefügt",
2259
- removedPage: "Navigation aktualisiert: Seite „{{name}}\" entfernt",
2260
- removedDashboard: "Navigation aktualisiert: Dashboard „{{name}}\" entfernt",
2261
- renamedPage: "Navigation aktualisiert: Seite „{{oldName}}\" in „{{newName}}\" umbenannt",
2262
- renamedDashboard: "Navigation aktualisiert: Dashboard „{{oldName}}\" in „{{newName}}\" umbenannt",
2431
+ addedPage: "Navigation aktualisiert: Seite „{{name}}“ hinzugefügt",
2432
+ addedDashboard: "Navigation aktualisiert: Dashboard „{{name}}“ hinzugefügt",
2433
+ removedPage: "Navigation aktualisiert: Seite „{{name}}“ entfernt",
2434
+ removedDashboard: "Navigation aktualisiert: Dashboard „{{name}}“ entfernt",
2435
+ renamedPage: "Navigation aktualisiert: Seite „{{oldName}}“ in „{{newName}}“ umbenannt",
2436
+ renamedDashboard: "Navigation aktualisiert: Dashboard „{{oldName}}“ in „{{newName}}“ umbenannt",
2263
2437
  undoLabel: "Rückgängig",
2264
2438
  undone: "Navigationsänderung rückgängig gemacht",
2265
2439
  undoFailed: "Navigationsänderung konnte nicht rückgängig gemacht werden",
@@ -2280,7 +2454,7 @@ const de = {
2280
2454
  deleteFailed: "Ansicht konnte nicht gelöscht werden",
2281
2455
  },
2282
2456
  dashboardActions: {
2283
- pdfPreparing: "PDF-Export wird vorbereitet…",
2457
+ printDialogOpening: "Druckdialog Ihres Browsers wird geöffnet (kein PDF-Export)",
2284
2458
  exportFailed: "Export fehlgeschlagen: {{message}}",
2285
2459
  forecastSoon: "Prognoseansicht kommt bald",
2286
2460
  },
@@ -2324,126 +2498,159 @@ const de = {
2324
2498
  first: "Erster",
2325
2499
  },
2326
2500
  editor: {
2327
- breadcrumb: "Konfiguration",
2328
- basic: "Allgemein",
2329
- title: "Titel",
2330
- titlePlaceholder: "z. B. Pipeline nach Quartal",
2331
- description: "Beschreibung",
2332
- descriptionPlaceholder: "Was zeigt dieser Bericht?",
2333
- type: "Berichtstyp",
2334
- typeTabular: "Tabellarisch — flache Liste",
2335
- typeSummary: "Zusammenfassung — gruppiert mit Summen",
2336
- typeMatrix: "Matrix — Pivot Zeilen × Spalten",
2337
- typeJoined: "Verbunden — mehrere Blöcke",
2338
- typeHelp: "Wählen Sie das Layout, das zu Ihrer gewünschten Ansicht passt.",
2339
- data: "Daten",
2340
- objectName: "Datenquelle",
2341
- objectNamePlaceholder: "z. B. opportunity",
2342
- objectNameHelp: "Welches Objekt soll dieser Bericht abfragen?",
2343
- limit: "Zeilenlimit",
2344
- limitPlaceholder: "z. B. 100",
2345
- columns: "Spalten",
2346
- columnsHint: "Wählen Sie die Felder, die als Spalten erscheinen. Fügen Sie in Zusammenfassungs- oder Matrixberichten Aggregationen (Summe, Anzahl …) hinzu.",
2347
- filters: "Filter",
2348
- filtersHint: "Schränken Sie die Zeilen ein, die in diesen Bericht aufgenommen werden.",
2349
- filtersComplex: "Dieser Bericht verwendet einen erweiterten Filter, der hier nicht bearbeitet werden kann. Beim Speichern bleibt er unverändert.",
2350
- groupBy: "Gruppieren nach",
2351
- groupByHint: "Daten gruppieren und Zwischensummen berechnen.",
2352
- rows: "Zeilen",
2353
- rowsHint: "Zeilen nach diesen Feldern gruppieren.",
2354
- columnsAxis: "Spalten",
2355
- columnsAxisHint: "Diese Felder oben als Pivot anordnen.",
2356
- values: "Werte",
2357
- valuesHint: "In jeder Zelle angezeigte Zahlen. Wählen Sie ein oder mehrere Felder und setzen Sie eine Aggregation (Summe, Anzahl …).",
2358
- grouping: "Gruppierung",
2359
- addGrouping: "Gruppierung hinzufügen",
2360
- dateGranularity: "Datumsgranularität",
2361
- dateGranularityNone: "(Rohwert verwenden)",
2362
- day: "Tag",
2363
- week: "Woche",
2364
- month: "Monat",
2365
- quarter: "Quartal",
2366
- year: "Jahr",
2367
- sortAsc: "Aufsteigend",
2368
- sortDesc: "Absteigend",
2369
- chart: "Diagramm",
2370
- chartHint: "Optionale Visualisierung neben der Tabelle.",
2371
- chartType: "Diagrammtyp",
2372
- chartTitle: "Diagrammtitel",
2373
- chartTitlePlaceholder: "Standardmäßig der Berichtstitel",
2374
- chartXAxis: "X-Achse (Kategorie)",
2375
- chartYAxis: "Y-Achse (Wert)",
2376
- chartShowLegend: "Legende anzeigen",
2377
- chartShowDataLabels: "Datenbeschriftungen anzeigen",
2378
- chartNone: "(kein Diagramm)",
2379
- chartBar: "Balken",
2380
- chartLine: "Linie",
2381
- chartArea: "Fläche",
2382
- chartPie: "Kreis",
2383
- chartDonut: "Donut",
2384
- chartFunnel: "Trichter",
2385
- validationNeedsObject: "Wählen Sie eine Datenquelle, bevor Sie Spalten hinzufügen.",
2386
- validationMatrixNeedsRowsCols: "Matrixberichte benötigen mindestens eine Zeile und eine Spalte.",
2387
- validationSummaryNeedsRows: "Zusammenfassungsberichte benötigen mindestens ein Gruppierungsfeld.",
2388
- blocks: "Blöcke",
2389
- blocksHint: "Jeder Block ist eine eigene Tabelle oder ein eigenes Diagramm. Blockfilter werden mit dem Berichtsfilter UND-verknüpft.",
2390
- addBlock: "Block hinzufügen",
2391
- removeBlock: "Block entfernen",
2392
- blockName: "Blockname",
2393
- blockNamePlaceholder: "eindeutiger_blockname",
2394
- blockLabel: "Anzeigename",
2395
- blockLabelPlaceholder: "Wird über dem Block angezeigt",
2396
- blockDescription: "Beschreibung",
2397
- blockDescriptionPlaceholder: "Optionaler Kontext für diesen Block",
2398
- validationJoinedNeedsBlocks: "Verbundene Berichte benötigen mindestens einen Block.",
2399
- validationBlockNameRequired: "Jeder Block benötigt einen nicht leeren Namen.",
2400
- validationBlockNameDuplicate: "Blocknamen müssen innerhalb des Berichts eindeutig sein.",
2401
- validationBlockNeedsColumns: "Jeder Block benötigt mindestens eine Spalte.",
2402
- noneOption: "(keine)",
2403
- addCondition: "Bedingung hinzufügen",
2404
- combineLogic: "Verknüpfen mit",
2405
- opContains: "enthält",
2406
- opIsEmpty: "ist leer",
2407
- opIsNotEmpty: "ist nicht leer",
2408
- formatAuto: "Automatisch",
2409
- formatCurrency: "Währung",
2410
- formatPercent: "Prozent",
2411
- formatInteger: "Ganzzahl",
2412
- formatDate: "Datum",
2413
- formatDatetime: "Datum und Uhrzeit",
2414
- columnLabelPlaceholder: "Bezeichnung überschreiben",
2415
- aggregateColumn: "Aggregation",
2416
- formatColumn: "Format",
2417
- addColumns: "Spalten hinzufügen",
2418
- searchFields: "Felder suchen…",
2419
- noMatchingFields: "Keine Felder entsprechen Ihrer Suche.",
2420
- noFieldsAvailable: "Keine Felder verfügbar.",
2421
- columnsCount: "{n} Spalte(n) ausgewählt",
2422
- columnsEmpty: "Noch keine Spalten ausgewählt.",
2423
- fieldPickerTitle: "Felder auswählen",
2424
- fieldPickerDescription: "Wählen Sie ein oder mehrere Felder aus. Verwenden Sie das Suchfeld, um die Liste einzugrenzen.",
2425
- fieldPickerChangeTitle: "Feld ändern",
2426
- fieldPickerAddGroupingTitle: "Gruppierung hinzufügen",
2427
- fieldPickerEmpty: "(Feld auswählen)",
2428
- fieldPickerSelected: "{n} ausgewählt",
2429
- fieldPickerClear: "Auswahl aufheben",
2430
- fieldPickerAdd: "Hinzufügen",
2431
- fieldPickerAddN: "{n} hinzufügen",
2501
+ panelTitle: "Bericht bearbeiten",
2432
2502
  },
2433
2503
  },
2434
2504
  organizations: {
2435
2505
  create: "Workspace erstellen",
2436
- mine: "Meine Organisationen",
2437
- title: "Organisationen",
2438
- heading: "Ihre Organisationen",
2439
- subtitle: "Wählen Sie eine Organisation, um fortzufahren, oder erstellen Sie eine neue.",
2440
- searchPlaceholder: "Organisation suchen",
2441
- new: "Neue Organisation",
2442
- current: "Aktuelle Organisation",
2506
+ mine: "Meine Workspaces",
2507
+ title: "Workspaces",
2508
+ heading: "Ihre Workspaces",
2509
+ subtitle: "Wählen Sie einen Workspace, um fortzufahren, oder erstellen Sie einen neuen.",
2510
+ searchPlaceholder: "Workspace suchen",
2511
+ new: "Neuer Workspace",
2512
+ current: "Aktueller Workspace",
2443
2513
  manage: "Verwalten",
2444
- emptyTitle: "Noch keine Organisationen",
2445
- emptyDescription: "Erstellen Sie Ihre erste Organisation, um loszulegen.",
2446
- noMatches: "Keine Organisationen entsprechen Ihrer Suche.",
2514
+ emptyTitle: "Noch keine Workspaces",
2515
+ emptyDescription: "Erstellen Sie Ihren ersten Workspace, um loszulegen.",
2516
+ noMatches: "Keine Workspaces entsprechen Ihrer Suche.",
2517
+ },
2518
+ organization: {
2519
+ roles: {
2520
+ owner: 'Eigentümer',
2521
+ admin: 'Administrator',
2522
+ delegatedAdmin: 'Delegierter Administrator',
2523
+ member: 'Mitglied',
2524
+ },
2525
+ errors: {
2526
+ notAllowedToInvite: 'Sie dürfen keine Benutzer in diese Organisation einladen.',
2527
+ notAllowedToInviteWithRole: 'Sie dürfen keine Benutzer mit dieser Rolle einladen.',
2528
+ alreadyInvited: 'Dieser Benutzer wurde bereits in diese Organisation eingeladen.',
2529
+ organizationExists: 'Diese Organisation existiert bereits.',
2530
+ slugTaken: 'Dieser URL-Slug ist bereits vergeben.',
2531
+ notAllowedToCreate: 'Sie dürfen keine neue Organisation erstellen.',
2532
+ notTheRecipient: 'Sie sind nicht der Empfänger dieser Einladung.',
2533
+ invitationNotFound: 'Diese Einladung existiert nicht mehr oder ist abgelaufen.',
2534
+ unknown: 'Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.',
2535
+ },
2536
+ backToList: "Zurück zu den Organisationen",
2537
+ notFound: "Organisation nicht gefunden",
2538
+ notFoundDescription: "Diese Organisation existiert nicht oder Sie haben keinen Zugriff darauf.",
2539
+ tabs: {
2540
+ members: "Mitglieder",
2541
+ invitations: "Einladungen",
2542
+ settings: "Einstellungen",
2543
+ },
2544
+ members: {
2545
+ title: "Mitglieder",
2546
+ inviteMember: "Mitglied einladen",
2547
+ inviteRestrictedNote: "Nur Organisationsadministratoren können Mitglieder einladen.",
2548
+ removeMember: "Mitglied entfernen",
2549
+ removeConfirmTitle: "Mitglied entfernen?",
2550
+ removeConfirmDescription: "{{name}} wird aus der Organisation entfernt und verliert sofort den Zugriff.",
2551
+ removeConfirmAction: "Entfernen",
2552
+ memberRemoved: "Mitglied entfernt",
2553
+ removeFailed: "Mitglied konnte nicht entfernt werden",
2554
+ roleUpdated: "Rolle aktualisiert",
2555
+ roleUpdateFailed: "Rolle konnte nicht aktualisiert werden",
2556
+ memberActions: 'Mitgliedsaktionen',
2557
+ loadFailed: 'Mitglieder konnten nicht geladen werden',
2558
+ },
2559
+ invitations: {
2560
+ title: "Einladungen",
2561
+ empty: "Keine Einladungen vorhanden.",
2562
+ expiresAt: "Läuft ab am",
2563
+ linkCopied: "Einladungslink kopiert",
2564
+ copyFailed: "Link konnte nicht kopiert werden",
2565
+ canceled: "Einladung zurückgezogen",
2566
+ cancelFailed: "Einladung konnte nicht zurückgezogen werden",
2567
+ cancelTitle: "Einladung zurückziehen?",
2568
+ cancelDescription: "Die Einladung für {{email}} wird zurückgezogen.",
2569
+ cancelAction: "Einladung zurückziehen",
2570
+ inviteTitle: "Mitglied einladen",
2571
+ inviteDescription: "Die Person erhält eine Einladung, dieser Organisation beizutreten.",
2572
+ emailLabel: "E-Mail",
2573
+ roleLabel: "Rolle",
2574
+ placementLabel: "Zuordnung (optional)",
2575
+ placementDescription: "Wird angewendet, sobald die Einladung angenommen wird. Aufgeführt sind nur Einheiten und Positionen, die Sie delegieren dürfen.",
2576
+ businessUnitLabel: "Geschäftseinheit",
2577
+ businessUnitPlaceholder: "Keine Zuordnung",
2578
+ positionsLabel: "Positionen",
2579
+ sendInvite: "Einladung senden",
2580
+ sentTitle: "Einladung erstellt",
2581
+ sentDescription: "Teilen Sie den folgenden Link mit der eingeladenen Person. Sie muss sich anmelden, um anzunehmen.",
2582
+ linkLabel: "Annahme-Link",
2583
+ invitedAs: "{{email}} als {{role}} eingeladen",
2584
+ copyLinkLabel: 'Einladungslink kopieren',
2585
+ loadFailed: 'Einladungen konnten nicht geladen werden',
2586
+ inviteFailed: 'Mitglied konnte nicht eingeladen werden',
2587
+ status: {
2588
+ all: "Alle",
2589
+ pending: "Ausstehend",
2590
+ accepted: "Angenommen",
2591
+ rejected: "Abgelehnt",
2592
+ canceled: "Zurückgezogen",
2593
+ },
2594
+ },
2595
+ settings: {
2596
+ generalTitle: "Allgemein",
2597
+ generalDescription: "Aktualisieren Sie die Informationen Ihrer Organisation.",
2598
+ readOnlyNote: "Nur Eigentümer können Einstellungen ändern.",
2599
+ nameLabel: "Name der Organisation",
2600
+ slugLabel: "Slug",
2601
+ logoLabel: "Logo",
2602
+ logoUpload: "Hochladen",
2603
+ logoReplace: "Ersetzen",
2604
+ logoClear: "Entfernen",
2605
+ logoUploaded: "Logo hochgeladen — zum Anwenden speichern",
2606
+ logoUploadFailed: "Logo konnte nicht hochgeladen werden",
2607
+ save: "Änderungen speichern",
2608
+ saved: "Einstellungen gespeichert",
2609
+ saveFailed: "Einstellungen konnten nicht gespeichert werden",
2610
+ leaveTitle: "Organisation verlassen",
2611
+ leaveDescription: "Sie verlieren den Zugriff auf diese Organisation.",
2612
+ leaveAction: "Verlassen",
2613
+ leaveConfirmTitle: "Organisation verlassen?",
2614
+ leaveConfirmDescription: "Möchten Sie {{name}} wirklich verlassen? Sie verlieren sofort den Zugriff.",
2615
+ leaveConfirmAction: "Verlassen",
2616
+ leftOrg: "Sie haben die Organisation verlassen",
2617
+ leaveFailed: "Organisation konnte nicht verlassen werden",
2618
+ dangerZone: "Gefahrenbereich",
2619
+ deleteTitle: "Organisation löschen",
2620
+ deleteDescription: "Diese Organisation und alle ihre Daten dauerhaft löschen.",
2621
+ deleteAction: "Löschen",
2622
+ deleteConfirmTitle: "Organisation löschen?",
2623
+ deleteConfirmDescription: "Diese Aktion ist unwiderruflich. Alle Daten werden dauerhaft gelöscht. Geben Sie den Slug der Organisation ein, um zu bestätigen.",
2624
+ deleteConfirmSlugLabel: "Geben Sie „{{slug}}“ ein, um zu bestätigen",
2625
+ deleteConfirmAction: "Organisation löschen",
2626
+ deleted: "Organisation gelöscht",
2627
+ deleteFailed: "Organisation konnte nicht gelöscht werden",
2628
+ },
2629
+ accept: {
2630
+ title: "Sie wurden eingeladen",
2631
+ description: "Sie wurden eingeladen, {{orgName}} als {{role}} beizutreten.",
2632
+ errorTitle: "Einladung nicht verfügbar",
2633
+ goToOrgs: "Zu den Organisationen",
2634
+ loading: "Einladung wird geladen…",
2635
+ organization: "Organisation",
2636
+ role: "Rolle",
2637
+ expiresAt: "Läuft ab am",
2638
+ accept: "Einladung annehmen",
2639
+ accepted: "Einladung angenommen",
2640
+ acceptFailed: "Einladung konnte nicht angenommen werden",
2641
+ decline: "Ablehnen",
2642
+ declined: "Einladung abgelehnt",
2643
+ declineFailed: "Einladung konnte nicht abgelehnt werden",
2644
+ },
2645
+ current: {
2646
+ label: "Aktuelle Organisation",
2647
+ },
2648
+ switcher: {
2649
+ label: "Organisation wechseln",
2650
+ groupLabel: "Arbeitsorganisation",
2651
+ groupHint: "Neue Datensätze werden hier erstellt. Ansichten zeigen Daten aus allen Ihren Organisationen.",
2652
+ manageMembers: "Mitglieder verwalten",
2653
+ },
2447
2654
  },
2448
2655
  notifications: {
2449
2656
  regionLabel: "Benachrichtigungen",
@@ -2458,6 +2665,9 @@ const de = {
2458
2665
  viewApprovals: "Genehmigungen anzeigen",
2459
2666
  noPendingApprovals: "Keine ausstehenden Genehmigungen",
2460
2667
  openApprovalsInbox: "Genehmigungs-Posteingang öffnen",
2668
+ badgeTotal: "{{total}} insgesamt",
2669
+ badgeNotifications: "{{unread}} Benachrichtigungen",
2670
+ badgeApprovals: "{{approvals}} ausstehende Genehmigungen",
2461
2671
  emptyUnread: "Alles gelesen",
2462
2672
  filterUnread: "Ungelesen",
2463
2673
  filterAll: "Alle",
@@ -2482,52 +2692,6 @@ const de = {
2482
2692
  consentRequired: "Bitte akzeptieren Sie die Datenschutzrichtlinie, um fortzufahren.",
2483
2693
  rateLimited: "Bitte nehmen Sie sich einen Moment, um Ihre Antworten zu überprüfen, bevor Sie absenden.",
2484
2694
  redirectBlocked: "Einreichung akzeptiert, aber die Weiterleitungs-URL wurde aus Sicherheitsgründen blockiert.",
2485
- demo: {
2486
- contactTitle: "Kontakt aufnehmen",
2487
- contactDescription: "Erzählen Sie uns von Ihrem Projekt, und ein Vertriebsmitarbeiter wird sich innerhalb eines Werktages bei Ihnen melden.",
2488
- supportTitle: "Support-Anfrage einreichen",
2489
- supportDescription: "Schildern Sie uns das Problem — unser Team antwortet innerhalb eines Werktages.",
2490
- thankYouSalesTitle: "Danke — wir haben Ihre Nachricht erhalten!",
2491
- thankYouSalesMessage: "Ein Vertriebsmitarbeiter wird sich innerhalb eines Werktages bei Ihnen melden.",
2492
- thankYouSupportTitle: "Alles klar — Ihre Anfrage ist in der Warteschlange.",
2493
- thankYouSupportMessage: "Ein Support-Ingenieur wird sich in Kürze melden. Speichern Sie diese Seite, falls Sie weitere Screenshots hinzufügen möchten.",
2494
- field: {
2495
- firstName: "Vorname",
2496
- lastName: "Nachname",
2497
- email: "Geschäfts-E-Mail",
2498
- phone: "Telefon",
2499
- jobTitle: "Berufsbezeichnung",
2500
- company: "Unternehmen",
2501
- website: "Website",
2502
- industry: "Branche",
2503
- companySize: "Unternehmensgröße",
2504
- howCanWeHelp: "Wie können wir helfen?",
2505
- subject: "Betreff",
2506
- description: "Beschreibung",
2507
- issueType: "Problemart",
2508
- priority: "Priorität",
2509
- },
2510
- industry: {
2511
- technology: "Technologie",
2512
- software: "Software / SaaS",
2513
- finance: "Finanzen",
2514
- healthcare: "Gesundheitswesen",
2515
- retail: "Einzelhandel",
2516
- other: "Sonstiges",
2517
- },
2518
- issueType: {
2519
- question: "Frage",
2520
- problem: "Problem",
2521
- bug: "Fehler",
2522
- feature_request: "Funktionsanfrage",
2523
- },
2524
- priority: {
2525
- low: "Niedrig",
2526
- medium: "Mittel",
2527
- high: "Hoch",
2528
- critical: "Kritisch",
2529
- },
2530
- },
2531
2695
  },
2532
2696
  connectAgent: {
2533
2697
  disabled: {
@@ -2640,6 +2804,7 @@ const de = {
2640
2804
  retry: "Erneut versuchen",
2641
2805
  errors: {
2642
2806
  expired: "Die Anfrage ist abgelaufen, bevor sie genehmigt wurde. Starten Sie erneut.",
2807
+ accessDenied: "Die Verbindungsanfrage wurde abgelehnt. Starten Sie erneut.",
2643
2808
  bindFailed: "Verbindung fehlgeschlagen.",
2644
2809
  deviceCodeFailed: "Anforderung des Gerätecodes fehlgeschlagen.",
2645
2810
  },
@@ -2705,10 +2870,16 @@ const de = {
2705
2870
  installedBadge: "Installiert v{{version}}",
2706
2871
  load: {
2707
2872
  failed: "Marktplatz konnte nicht geladen werden",
2708
- failedHint: "Standardmäßig zeigt dieses Laufzeitsystem auf die öffentliche ObjectStack-Cloud. Stellen Sie sicher, dass das Laufzeitsystem online ist.",
2873
+ failedHintConfigured: "Diese Laufzeitumgebung erreicht den Marktplatz über die Control Plane unter {{url}}. Prüfen Sie, ob diese online und von hier aus erreichbar ist.",
2874
+ failedHintSameOrigin: "Diese Laufzeitumgebung stellt den Marktplatz-Katalog selbst bereit. Prüfen Sie, ob die Laufzeitumgebung online ist.",
2709
2875
  packageFailed: "Paket konnte nicht geladen werden",
2710
2876
  notFound: "Nicht gefunden.",
2711
2877
  },
2878
+ disabled: {
2879
+ title: "App-Marktplatz ist deaktiviert",
2880
+ description: "Für diese Laufzeitumgebung ist kein Marktplatz konfiguriert; es gibt hier nichts zu durchsuchen oder zu installieren.",
2881
+ hint: "Das ist der erwartete Zustand, wenn die Laufzeitumgebung mit <code>OS_CLOUD_URL=off</code> (oder <code>none</code>, <code>local</code>, <code>disabled</code>) gestartet wird. Um den Marktplatz zu aktivieren, richten Sie <code>OS_CLOUD_URL</code> auf eine Control Plane und starten Sie die Laufzeitumgebung neu.",
2882
+ },
2712
2883
  detail: {
2713
2884
  homepage: "Startseite",
2714
2885
  installedV: "Installiert · v{{version}}",
@@ -2744,6 +2915,7 @@ const de = {
2744
2915
  dismiss: "Schließen",
2745
2916
  openOnCloud: "In der Cloud öffnen",
2746
2917
  backHome: "Zurück zur Startseite",
2918
+ updateTo: "Aktualisieren",
2747
2919
  },
2748
2920
  install: {
2749
2921
  dialogTitle: "{{name}} installieren",
@@ -2756,10 +2928,41 @@ const de = {
2756
2928
  noPermission: "Sie haben keine Berechtigung, Apps in einer Umgebung zu installieren. Nur Organisationsinhaber und Administratoren können installieren.",
2757
2929
  signInFirst: "Sie müssen sich zuerst bei ObjectStack Cloud anmelden.",
2758
2930
  success: "Erfolgreich installiert. Öffnen Sie die Umgebung, um die neue App zu sehen.",
2759
- localSuccess: "v{{version}} in diesem Laufzeitsystem installiert. „{{name}}\" sollte jetzt im App-Wechsler erscheinen.",
2931
+ localSuccess: "v{{version}} in diesem Laufzeitsystem installiert. „{{name}}“ sollte jetzt im App-Wechsler erscheinen.",
2760
2932
  localManifestConflict: "{{message}}\nHinweis: Eine lokale App besitzt bereits diese manifest_id. Entfernen Sie sie zuerst aus objectstack.config.ts.",
2761
2933
  localUnauthorized: "Melden Sie sich zuerst in diesem Laufzeitsystem an.",
2762
2934
  localMarketplaceUnavailable: "Dieses Laufzeitsystem hat keine OS_CLOUD_URL konfiguriert.",
2935
+ updateTo: "Aktualisieren → v{{version}}",
2936
+ installedVersion: "Installiert v{{version}}",
2937
+ },
2938
+ // objectui#3546 — the MarketplacePage "Your organization" strip.
2939
+ org: {
2940
+ heading: "Ihre Organisation",
2941
+ install: "Installieren",
2942
+ installed: "{{name}} installiert",
2943
+ installedBadge: "Installiert",
2944
+ installing: "Installiere…",
2945
+ },
2946
+ // ADR-0025 PD4 §3.5/§3.11 — the pre-install consent panel
2947
+ // (PluginDisclosure.tsx). `runtime` is a CLOSED enum: spec
2948
+ // PluginRuntimeSchema = z.enum(['node', 'sandbox', 'worker']).
2949
+ disclosure: {
2950
+ containsCode: "Dieses Paket enthält Code",
2951
+ reviewed: "Geprüft und genehmigt",
2952
+ unreviewed: "Noch nicht geprüft",
2953
+ signed: "Signiert",
2954
+ grantsIntro: "Bei der Installation erhält dieses Paket:",
2955
+ services: "Plattformdienste",
2956
+ hooks: "Lifecycle-Hooks",
2957
+ network: "Netzwerkzugriff",
2958
+ fs: "Dateisystemzugriff",
2959
+ noPermissions: "Fordert keine besonderen Berechtigungen an.",
2960
+ acknowledge: "Ich habe verstanden, dass dieses Paket Code ausführt und die oben genannten Berechtigungen erhält.",
2961
+ runtime: {
2962
+ node: "Im Prozess · volles Vertrauen",
2963
+ sandbox: "Sandbox-isoliert",
2964
+ worker: "Außerhalb des Prozesses",
2965
+ },
2763
2966
  },
2764
2967
  uninstall: {
2765
2968
  confirm: "{{manifestId}} v{{version}} aus diesem Laufzeitsystem deinstallieren?\n\nDas zwischengespeicherte Manifest wird entfernt.",
@@ -2916,12 +3119,19 @@ const de = {
2916
3119
  submittedAgo: 'Eingereicht {{when}}',
2917
3120
  completedAt: 'Abgeschlossen {{when}}',
2918
3121
  waitingOn: 'Wartet auf',
3122
+ approverNameSeparator: ', ',
3123
+ approverUnstaffed: '{{seat}} (derzeit unbesetzt)',
2919
3124
  history: 'Aktivität',
2920
3125
  noActions: 'Noch keine Aktionen.',
2921
3126
  actSubmit: 'Eingereicht',
2922
3127
  actApprove: 'Genehmigt',
2923
3128
  actReject: 'Abgelehnt',
2924
3129
  actRecall: 'Zurückgezogen',
3130
+ overrideActionLabel: '{{action}} (Übersteuerung)',
3131
+ overrideNotice: 'Sie haben in diesem Schritt keine Genehmigerrolle. Beim Fortfahren wird Ihre Administrator-Übersteuerung verwendet: Der Schritt wird sofort abgeschlossen und alle noch nicht entschiedenen Genehmiger werden übergangen. Die Entscheidung wird als Administrator-Übersteuerung protokolliert.',
3132
+ overrideNoticeWho: 'Sie haben in diesem Schritt keine Genehmigerrolle. Beim Fortfahren wird Ihre Administrator-Übersteuerung verwendet: Der Schritt wird sofort abgeschlossen und die noch nicht entschiedenen Genehmiger werden übergangen — {{who}}. Die Entscheidung wird als Administrator-Übersteuerung protokolliert.',
3133
+ viaOverrideChip: 'Administrator-Übersteuerung',
3134
+ viaOverrideHint: 'Die handelnde Person hatte in diesem Schritt keine Genehmigerrolle — zugelassen über die Administrator-Übersteuerung.',
2925
3135
  rawData: 'Rohdaten (JSON)',
2926
3136
  copy: 'Kopieren',
2927
3137
  copied: 'Kopiert',
@@ -2948,14 +3158,14 @@ const de = {
2948
3158
  bulkApproved: '{{count}} Anfragen genehmigt',
2949
3159
  bulkRejected: '{{count}} Anfragen abgelehnt',
2950
3160
  bulkPartial: '{{ok}} erfolgreich, {{fail}} fehlgeschlagen: {{which}}',
2951
- rejectOneTitle: '"{{title}}" ablehnen?',
3161
+ rejectOneTitle: '„{{title}}“ ablehnen?',
2952
3162
  rejectOneBody: 'Die Anfrage wird abgelehnt und der Antragsteller benachrichtigt.',
2953
3163
  rejectTitle: 'Diese Anfrage ablehnen?',
2954
3164
  rejectBody: 'Die Anfrage wird als abgelehnt markiert und der Antragsteller benachrichtigt.',
2955
3165
  recallTitle: 'Diese Anfrage zurückziehen?',
2956
3166
  recallBody: 'Genehmiger können danach nicht mehr handeln; der Datensatz wird entsperrt.',
2957
- inlineApproved: '"{{title}}" genehmigt',
2958
- inlineRejected: '"{{title}}" abgelehnt',
3167
+ inlineApproved: '„{{title}}“ genehmigt',
3168
+ inlineRejected: '„{{title}}“ abgelehnt',
2959
3169
  approvedFinal: 'Genehmigt',
2960
3170
  approvedWaiting: 'Genehmigt — wartet auf die übrigen Genehmiger',
2961
3171
  rejectedToast: 'Abgelehnt',
@@ -2978,7 +3188,7 @@ const de = {
2978
3188
  empty: {
2979
3189
  loadFailedTitle: 'Entwurfsvorschau konnte nicht geladen werden',
2980
3190
  loadFailedDescription: 'Das Entwurfs-Overlay konnte nicht gelesen werden. Erneut versuchen oder Verbindung prüfen.',
2981
- notReadyTitle: '„{{app}}" ist noch nicht im Entwurf',
3191
+ notReadyTitle: '„{{app}}“ ist noch nicht im Entwurf',
2982
3192
  notReadyDescription: 'Der Build läuft möglicherweise noch oder ist fehlgeschlagen, bevor diese App bereitgestellt wurde. Prüfen Sie den Build-Status in der Konversation — dieser Bereich aktualisiert sich, sobald Entwürfe eintreffen.',
2983
3193
  nothingTitle: 'Noch nichts zur Vorschau',
2984
3194
  retry: 'Erneut versuchen',
@@ -3008,6 +3218,39 @@ const de = {
3008
3218
  detailChangedKeys: 'Ebenfalls geändert:',
3009
3219
  confirmNote: 'Beim Veröffentlichen werden alle {{count}} ausstehenden Entwürfe dieses Pakets atomar freigegeben.',
3010
3220
  publishConfirm: 'Alle veröffentlichen',
3221
+ // [objectui#5418] Pre-publish security-posture findings, shown next to
3222
+ // the confirm button so a refusal the door would issue is read BEFORE
3223
+ // the click rather than as a toast after the batch rolled back.
3224
+ securityBlockTitle: 'Veröffentlichen wird abgelehnt — {{count}} Element(e) benötigen zuerst eine Entscheidung',
3225
+ securityBlockWhere: 'Korrigieren Sie es am Objekt unter Einstellungen → Datensatzfreigabe und veröffentlichen Sie erneut.',
3226
+ },
3227
+ // ADR-0045 — the materialized-but-unlisted app banner
3228
+ // (UnpublishedAppBar.tsx), sibling of draftBar above.
3229
+ unpublishedBar: {
3230
+ message: 'Unveröffentlichte App — voll funktionsfähig, aber nur für Builder sichtbar. Veröffentlichen Sie sie, damit Ihre Benutzer sie sehen.',
3231
+ publish: 'Veröffentlichen',
3232
+ publishing: 'Wird veröffentlicht…',
3233
+ published: 'Veröffentlicht! Die App ist jetzt für Ihre Benutzer sichtbar.',
3234
+ publishFailed: 'Veröffentlichen fehlgeschlagen',
3235
+ },
3236
+ // ADR-0067 — the append-only build/revert timeline (CommitTimeline.tsx);
3237
+ // `button` is the banner's entry point into it.
3238
+ history: {
3239
+ button: 'Verlauf',
3240
+ title: 'Build-Verlauf',
3241
+ description: 'Jede Änderung an dieser App, neueste zuerst. Machen Sie jeden Schritt rückgängig — eine Veröffentlichungsbestätigung ist nicht nötig.',
3242
+ loadFailed: 'Verlauf konnte nicht geladen werden:',
3243
+ loadFailedUnavailable: 'Commit-Speicher vorübergehend nicht erreichbar — dieser Lesevorgang hat nicht stattgefunden, daher wird kein Verlauf angezeigt. Versuchen Sie es gleich erneut.',
3244
+ loading: 'Verlauf wird geladen…',
3245
+ empty: 'Für diese App gibt es noch keinen Verlauf.',
3246
+ revertLabel: 'Eine Änderung rückgängig gemacht',
3247
+ applyLabel: 'Build-Änderung',
3248
+ revert: 'rückgängig',
3249
+ items: 'Elemente',
3250
+ revertAction: 'Rückgängig',
3251
+ reverted: 'Rückgängig gemacht — die Änderung wurde zurückgenommen.',
3252
+ revertFailed: 'Rückgängig machen fehlgeschlagen',
3253
+ revertUnavailable: 'Commit-Speicher vorübergehend nicht erreichbar — das Rückgängigmachen wurde möglicherweise nicht angewendet. Öffnen Sie diesen Verlauf erneut, um dies zu prüfen, bevor Sie es noch einmal versuchen.',
3011
3254
  },
3012
3255
  },
3013
3256
  filterBuilder: {
@@ -3026,10 +3269,15 @@ const de = {
3026
3269
  noResults: "Keine Ergebnisse",
3027
3270
  searchField: "{{label}} suchen…",
3028
3271
  enterId: "{{label}}-ID eingeben",
3272
+ addValue: "Wert eingeben, Enter drücken",
3273
+ removeValue: "{{value}} entfernen",
3274
+ rangeStart: "Von",
3275
+ rangeEnd: "Bis",
3029
3276
  operators: {
3030
3277
  equals: "Gleich",
3031
3278
  notEquals: "Ungleich",
3032
3279
  contains: "Enthält",
3280
+ containsCaseInsensitive: "Enthält (Groß-/Kleinschreibung ignorieren)",
3033
3281
  notContains: "Enthält nicht",
3034
3282
  isEmpty: "Ist leer",
3035
3283
  isNotEmpty: "Ist nicht leer",
@@ -3042,6 +3290,12 @@ const de = {
3042
3290
  between: "Zwischen",
3043
3291
  in: "In",
3044
3292
  notIn: "Nicht in",
3293
+ startsWith: "Beginnt mit",
3294
+ endsWith: "Endet mit",
3295
+ isNull: "Ist null",
3296
+ isNotNull: "Ist nicht null",
3297
+ exists: "Ist gesetzt",
3298
+ notExists: "Ist nicht gesetzt",
3045
3299
  },
3046
3300
  },
3047
3301
  sortBuilder: {
@@ -3087,5 +3341,64 @@ const de = {
3087
3341
  statusIdle: "inaktiv",
3088
3342
  statusAway: "abwesend",
3089
3343
  },
3344
+ wizard: {
3345
+ missingRequired: "Bitte füllen Sie die Pflichtfelder aus: {{fields}}",
3346
+ },
3347
+ flowRunner: {
3348
+ title: 'Eingabe',
3349
+ submitting: 'Wird gesendet…',
3350
+ saveAndContinue: 'Speichern und fortfahren',
3351
+ nextStep: 'Gespeichert — nächster Schritt',
3352
+ completed: 'Flow „{{flow}}“ abgeschlossen',
3353
+ },
3354
+ appManagement: {
3355
+ title: "Anwendungen",
3356
+ subtitle: "Alle konfigurierten Anwendungen verwalten",
3357
+ newApp: "Neue App",
3358
+ searchLabel: "Apps suchen",
3359
+ searchPlaceholder: "Apps suchen…",
3360
+ selectedCount: "{{n}} ausgewählt",
3361
+ bulkEnable: "Aktivieren",
3362
+ bulkDisable: "Deaktivieren",
3363
+ selectAll: "Alle auswählen ({{n}})",
3364
+ empty: "Keine Apps gefunden.",
3365
+ defaultBadge: "Standard",
3366
+ active: "Aktiv",
3367
+ inactive: "Inaktiv",
3368
+ selectApp: "{{name}} auswählen",
3369
+ openApp: "App öffnen",
3370
+ openAppNamed: "{{name}} öffnen",
3371
+ editApp: "App bearbeiten",
3372
+ editAppNamed: "{{name}} bearbeiten",
3373
+ editWithAi: "Mit KI bearbeiten",
3374
+ editWithAiNamed: "{{name}} mit KI bearbeiten",
3375
+ enableApp: "App aktivieren",
3376
+ disableApp: "App deaktivieren",
3377
+ enableAppNamed: "{{name}} aktivieren",
3378
+ disableAppNamed: "{{name}} deaktivieren",
3379
+ setDefault: "Als Standard festlegen",
3380
+ setDefaultNamed: "{{name}} als Standard festlegen",
3381
+ deleteApp: "App löschen",
3382
+ deleteAppNamed: "{{name}} löschen",
3383
+ confirmDelete: "Zum Bestätigen erneut klicken",
3384
+ confirmDeleteNamed: "Löschen von {{name}} bestätigen",
3385
+ toast: {
3386
+ noClient: "Metadatendienst nicht erreichbar",
3387
+ unknownError: "unbekannter Fehler",
3388
+ appEnabled: "{{name}} aktiviert",
3389
+ appDisabled: "{{name}} deaktiviert",
3390
+ toggleFailed: "Ändern des App-Status fehlgeschlagen: {{reason}}",
3391
+ setDefaultDone: "{{name}} als Standard festgelegt",
3392
+ setDefaultFailed: "Festlegen der Standard-App fehlgeschlagen: {{reason}}",
3393
+ appDeleted: "{{name}} gelöscht",
3394
+ deleteFailed: "Löschen der App fehlgeschlagen: {{reason}}",
3395
+ bulkEnabled: "{{n}} Apps aktiviert",
3396
+ bulkDisabled: "{{n}} Apps deaktiviert",
3397
+ bulkFailed: "Fehlgeschlagen für {{n}}: {{details}}",
3398
+ bulkFailureEntry: "{{name}} ({{reason}})",
3399
+ bulkFailureJoiner: "; ",
3400
+ bulkOperationFailed: "Massenvorgang fehlgeschlagen: {{reason}}",
3401
+ },
3402
+ },
3090
3403
  };
3091
3404
  export default de;