@object-ui/i18n 17.3.0 → 17.5.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 (41) hide show
  1. package/CHANGELOG.md +1295 -1
  2. package/README.md +0 -13
  3. package/dist/index.d.ts +3 -1
  4. package/dist/index.js +11 -1
  5. package/dist/locales/ar.d.ts +466 -107
  6. package/dist/locales/ar.js +559 -153
  7. package/dist/locales/de.d.ts +466 -107
  8. package/dist/locales/de.js +574 -175
  9. package/dist/locales/en.d.ts +502 -143
  10. package/dist/locales/en.js +678 -145
  11. package/dist/locales/es.d.ts +466 -107
  12. package/dist/locales/es.js +553 -155
  13. package/dist/locales/fr.d.ts +466 -107
  14. package/dist/locales/fr.js +553 -152
  15. package/dist/locales/index.d.ts +4734 -1144
  16. package/dist/locales/ja.d.ts +466 -107
  17. package/dist/locales/ja.js +545 -146
  18. package/dist/locales/ko.d.ts +466 -107
  19. package/dist/locales/ko.js +551 -153
  20. package/dist/locales/pt.d.ts +466 -107
  21. package/dist/locales/pt.js +552 -154
  22. package/dist/locales/ru.d.ts +466 -107
  23. package/dist/locales/ru.js +563 -153
  24. package/dist/locales/zh.d.ts +501 -142
  25. package/dist/locales/zh.js +542 -142
  26. package/dist/pickLocalized.d.ts +21 -0
  27. package/dist/pickLocalized.js +40 -7
  28. package/dist/provider.d.ts +83 -1
  29. package/dist/provider.js +303 -29
  30. package/dist/useDisplayLocale.d.ts +49 -0
  31. package/dist/useDisplayLocale.js +55 -0
  32. package/dist/useObjectLabel.d.ts +8 -2
  33. package/dist/useObjectLabel.js +28 -8
  34. package/dist/useSafeTranslation.js +50 -2
  35. package/dist/utils/index.d.ts +1 -0
  36. package/dist/utils/index.js +1 -0
  37. package/dist/utils/number-display.d.ts +32 -0
  38. package/dist/utils/number-display.js +32 -0
  39. package/dist/utils/spec-formatters.d.ts +39 -13
  40. package/dist/utils/spec-formatters.js +3 -3
  41. 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,12 @@ 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",
51
85
  cancel: "Abbrechen",
52
86
  delete: "Löschen",
53
87
  edit: "Bearbeiten",
54
88
  create: "Erstellen",
55
- search: "Suchen",
56
89
  filter: "Filtern",
57
90
  reset: "Zurücksetzen",
58
91
  confirm: "Bestätigen",
@@ -76,7 +109,7 @@ const de = {
76
109
  required: "Erforderlich",
77
110
  optional: "Optional",
78
111
  selectOption: "Option auswählen",
79
- select: "Auswählen...",
112
+ select: "Auswählen…",
80
113
  openChat: "Chat öffnen",
81
114
  closeChat: "Chat schließen",
82
115
  closePanel: "Panel schließen",
@@ -85,6 +118,11 @@ const de = {
85
118
  itemCountOne: "{{count}} Element",
86
119
  toggleSidebar: "Seitenleiste umschalten",
87
120
  package: "Paket",
121
+ done: "Fertig",
122
+ editInStudio: "Im Studio bearbeiten",
123
+ record: "Datensatz",
124
+ retry: "Erneut versuchen",
125
+ printDialogHint: "Öffnet den Druckdialog Ihres Browsers (kein PDF-Export)",
88
126
  },
89
127
  actions: {
90
128
  decisionOutput: {
@@ -116,6 +154,9 @@ const de = {
116
154
  submitFailed: "Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.",
117
155
  discardTitle: "Änderungen verwerfen?",
118
156
  discardMessage: "Sie haben ungespeicherte Änderungen. Wenn Sie dieses Formular jetzt schließen, gehen Ihre Bearbeitungen verloren.",
157
+ // objectui#4024 — the create/edit dialog's `sr-only` accessible
158
+ // description, used when the form declares no `description` of its own.
159
+ dialogDescriptionFallback: "Füllen Sie die Formularfelder aus und senden Sie ab oder brechen Sie ab.",
119
160
  keepEditing: "Weiter bearbeiten",
120
161
  discard: "Verwerfen",
121
162
  conflictTitle: "Speicherkonflikt",
@@ -184,7 +225,7 @@ const de = {
184
225
  richText: {
185
226
  format: "Format: {{format}}",
186
227
  basicEditorHint: "Rich-Text-Editor (einfach)",
187
- placeholder: "Text eingeben...",
228
+ placeholder: "Text eingeben…",
188
229
  },
189
230
  options: {
190
231
  empty: "Keine Optionen verfügbar",
@@ -250,7 +291,7 @@ const de = {
250
291
  saveAll: "Alle speichern ({{count}})",
251
292
  addRecord: "Datensatz hinzufügen",
252
293
  open: "Öffnen",
253
- search: "Suchen...",
294
+ search: "Suchen…",
254
295
  modified: "{{count}} Zeile geändert",
255
296
  saveFailed: 'Speichern fehlgeschlagen',
256
297
  selected: "{{count}} ausgewählt",
@@ -294,7 +335,7 @@ const de = {
294
335
  delete: "Löschen",
295
336
  export: "Exportieren",
296
337
  exportAs: "Exportieren als {{format}}",
297
- loading: "Raster wird geladen...",
338
+ loading: "Raster wird geladen…",
298
339
  errorLoading: "Fehler beim Laden des Rasters",
299
340
  pullToRefresh: "Zum Aktualisieren ziehen",
300
341
  refreshing: "Wird aktualisiert…",
@@ -305,6 +346,22 @@ const de = {
305
346
  yes: "Ja",
306
347
  no: "Nein",
307
348
  systemFields: "System",
349
+ // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
350
+ // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
351
+ // pack controls its own separator and word order.
352
+ summary: {
353
+ pattern: "{{label}}: {{value}}",
354
+ count: "Anzahl",
355
+ countEmpty: "Leer",
356
+ countFilled: "Ausgefüllt",
357
+ countUnique: "Eindeutig",
358
+ percentEmpty: "Leer",
359
+ percentFilled: "Ausgefüllt",
360
+ sum: "Summe",
361
+ avg: "Mittelwert",
362
+ min: "Min.",
363
+ max: "Max.",
364
+ },
308
365
  toolbar: {
309
366
  densityMode: "Dichte",
310
367
  densityCompact: "Kompakt",
@@ -418,12 +475,12 @@ const de = {
418
475
  templateName: "Vorlagenname",
419
476
  save: "Speichern",
420
477
  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.',
478
+ savedMapping: 'Gespeicherte Zuordnung:',
479
+ chooseSavedMapping: 'Gespeicherte Zuordnung auswählen…',
480
+ manualMapping: '— Spalten manuell zuordnen —',
481
+ transform: 'Transformation',
482
+ savedMappingHint: 'Die Zuordnung „{{name}}“ wendet auf dem Server Umbenennung + Transformationen + Typkonvertierung an. Die Spaltenzuordnung ist schreibgeschützt.',
483
+ savedMappingPreviewNote: 'Die Vorschau zeigt Ihre Quellspalten; beim Import wendet die Zuordnung „{{name}}“ auf dem Server Umbenennung, Transformationen und Typkonvertierung an.',
427
484
  csvColumn: "Spalte",
428
485
  mapsTo: "Zugeordnet zu",
429
486
  typeMismatch: "Sieht aus wie {{type}}",
@@ -483,6 +540,8 @@ const de = {
483
540
  loadErrorUnauthorizedMessage: "Ihre Sitzung ist abgelaufen oder Sie sind abgemeldet. Melden Sie sich erneut an, um diese Datensätze anzuzeigen.",
484
541
  loadErrorRejectedTitle: "Die Abfrage dieser Ansicht wurde abgelehnt",
485
542
  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.",
543
+ loadErrorApiDisabledTitle: "Dieses Objekt ist über die API nicht verfügbar",
544
+ 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
545
  retry: "Erneut versuchen",
487
546
  managedBy: {
488
547
  system: {
@@ -507,7 +566,7 @@ const de = {
507
566
  },
508
567
  },
509
568
  refresh: "Aktualisieren",
510
- loading: 'Loading records...',
569
+ loading: "Datensätze werden geladen…",
511
570
  recordCount: "{{count}} Datensätze",
512
571
  recordCountOne: "{{count}} Datensatz",
513
572
  addRecord: "Datensatz hinzufügen",
@@ -519,7 +578,8 @@ const de = {
519
578
  sort: "Sortieren",
520
579
  sortRecords: "Datensätze sortieren",
521
580
  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.",
581
+ 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.",
582
+ resetSortToDefault: "Auf Standard der Ansicht zurücksetzen",
523
583
  group: "Gruppieren",
524
584
  groupBy: "Gruppieren nach",
525
585
  export: "Exportieren",
@@ -577,13 +637,16 @@ const de = {
577
637
  },
578
638
  kanban: {
579
639
  uncategorized: "Nicht kategorisiert",
640
+ columns: "Spalten",
580
641
  addCard: "Karte hinzufügen",
581
642
  addColumn: "Spalte hinzufügen",
582
643
  moveCard: "Karte verschieben",
583
644
  deleteCard: "Karte löschen",
584
645
  deleteColumn: "Spalte löschen",
585
646
  noCards: "Keine Karten",
586
- cardTitlePlaceholder: "Kartentitel eingeben...",
647
+ cardTitlePlaceholder: "Kartentitel eingeben…",
648
+ requiredFieldsTitle: "Erforderliche Felder ausfüllen",
649
+ requiredFieldsDescription: "Durch diese Verschiebung werden die folgenden Felder zu Pflichtfeldern. Füllen Sie sie aus, um fortzufahren.",
587
650
  },
588
651
  timeline: {
589
652
  bucket: {
@@ -596,6 +659,13 @@ const de = {
596
659
  noDate: "Kein Datum",
597
660
  unassigned: "Nicht zugewiesen",
598
661
  },
662
+ scale: {
663
+ week: "Woche {{n}}",
664
+ quarter: "Q{{quarter}} {{year}}",
665
+ },
666
+ gantt: {
667
+ rowLabel: "Elemente",
668
+ },
599
669
  },
600
670
  gantt: {
601
671
  viewMode: {
@@ -642,6 +712,18 @@ const de = {
642
712
  ff: "Ende → Ende",
643
713
  sf: "Anfang → Ende",
644
714
  },
715
+ linkEnd: {
716
+ start: "Anfang",
717
+ end: "Ende",
718
+ },
719
+ link: {
720
+ rejected: {
721
+ self: "Ein Vorgang kann nicht von sich selbst abhängen.",
722
+ locked: "Diese Zeile ist gesperrt und kann keine neue Abhängigkeit aufnehmen.",
723
+ group: "Eine Sammelzeile kann keine Abhängigkeit aufnehmen — verknüpfen Sie stattdessen einen ihrer Vorgänge.",
724
+ cycle: "Diese Verknüpfung würde eine zirkuläre Abhängigkeit erzeugen.",
725
+ },
726
+ },
645
727
  conflict: {
646
728
  title: "Terminkonflikt",
647
729
  body: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?",
@@ -650,8 +732,8 @@ const de = {
650
732
  },
651
733
  autoScheduleDlg: {
652
734
  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.",
735
+ body: "{{count}} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
736
+ skipped: "{{count}} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
655
737
  confirm: "Anwenden",
656
738
  cancel: "Abbrechen",
657
739
  none: "Alle Abhängigkeiten sind erfüllt — nichts neu zu planen.",
@@ -688,6 +770,7 @@ const de = {
688
770
  exportPng: "Als PNG exportieren",
689
771
  exportPdf: "PDF exportieren",
690
772
  saveLayout: "Layout speichern",
773
+ refresh: "Aktualisieren",
691
774
  undo: "Rückgängig",
692
775
  redo: "Wiederholen",
693
776
  prevPeriod: "Vorherige Periode",
@@ -728,11 +811,11 @@ const de = {
728
811
  defaultBadge: "Standard",
729
812
  tabActionsFor: "Ansichtsaktionen für {{name}}",
730
813
  readonlyAriaLabel: "Schreibgeschützte Ansicht",
731
- readonlyTooltip: "Systemansicht — zum Anpassen duplizieren.",
814
+ readonlyTooltip: "Systemansicht — im Code definiert, schreibgeschützt.",
732
815
  },
733
816
  designer: {
734
- undo: 'Undo',
735
- redo: 'Redo',
817
+ undo: "Rückgängig",
818
+ redo: "Wiederholen",
736
819
  },
737
820
  detail: {
738
821
  editInlineHint: "Zum Bearbeiten doppelklicken",
@@ -772,13 +855,15 @@ const de = {
772
855
  relatedRecords: "{{count}} Datensätze",
773
856
  relatedRecordOne: "{{count}} Datensatz",
774
857
  noRelatedRecords: "Keine verknüpften Datensätze gefunden",
775
- loading: "Laden...",
858
+ loading: "Laden…",
776
859
  copyToClipboard: "In Zwischenablage kopieren",
777
860
  copied: "Kopiert!",
778
861
  deleteConfirmation: "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
862
+ deleted: "Datensatz gelöscht",
779
863
  editRecord: "Datensatz bearbeiten",
780
864
  viewAll: "Alle anzeigen",
781
865
  new: "Neu",
866
+ add: "Hinzufügen",
782
867
  emptyValue: "—",
783
868
  comments: "Kommentare",
784
869
  searchComments: "Kommentare suchen…",
@@ -843,6 +928,7 @@ const de = {
843
928
  loadMore: "Mehr laden",
844
929
  edited: "(bearbeitet)",
845
930
  via: "über {{source}}",
931
+ viewSource: "Quelle anzeigen",
846
932
  replyCount: "{{count}} Antwort",
847
933
  replyCountPlural: "{{count}} Antworten",
848
934
  replyPlaceholder: "Antworten…",
@@ -884,9 +970,11 @@ const de = {
884
970
  concurrentUpdateReload: "Aktuelle Version laden",
885
971
  concurrentUpdateOverwrite: "Trotzdem überschreiben",
886
972
  concurrentUpdateCancel: "Abbrechen",
973
+ concurrentUpdateRecordLabel: "diesem Datensatz",
887
974
  openInNewTab: "In neuem Tab öffnen",
888
975
  activity: "Aktivität",
889
976
  history: "Verlauf",
977
+ historyEmpty: "Noch kein Verlauf",
890
978
  editRow: "Bearbeiten",
891
979
  deleteRow: "Löschen",
892
980
  deleteRowConfirmation: "Möchten Sie diesen Datensatz wirklich löschen?",
@@ -896,12 +984,15 @@ const de = {
896
984
  nextPage: "Weiter",
897
985
  pageOf: "Seite {{current}} von {{total}}",
898
986
  sortBy: "Sortieren nach",
899
- filterPlaceholder: "Filtern...",
987
+ filterPlaceholder: "Filtern…",
900
988
  highlightFields: "Schlüsselfelder",
901
989
  createdBy: "Erstellt von",
902
990
  updatedBy: "Aktualisiert von",
903
991
  created: "Erstellt",
904
992
  updated: "Aktualisiert",
993
+ // objectui#3863 — base key. de's categories are exactly `one`/`other`, so this
994
+ // slot is unreachable here and equals `_other` for key-set parity.
995
+ showEmptyRelated: "+ {{count}} leer",
905
996
  showEmptyRelated_one: "+ {{count}} leer",
906
997
  showEmptyRelated_other: "+ {{count}} leer",
907
998
  copyEmail: "E-Mail kopieren",
@@ -913,7 +1004,8 @@ const de = {
913
1004
  },
914
1005
  chart: {
915
1006
  noData: "Keine Diagrammdaten verfügbar",
916
- loading: "Diagramm wird geladen...",
1007
+ loading: "Diagramm wird geladen…",
1008
+ nullCategory: "(Ohne Angabe)",
917
1009
  },
918
1010
  map: {
919
1011
  searchLocations: "Orte suchen…",
@@ -935,8 +1027,8 @@ const de = {
935
1027
  properties: "Eigenschaften",
936
1028
  connections: "Verbindungen",
937
1029
  quickConnect: "Schnellverbindung",
938
- fromPlaceholder: "Von...",
939
- toPlaceholder: "Nach...",
1030
+ fromPlaceholder: "Von…",
1031
+ toPlaceholder: "Nach…",
940
1032
  connect: "Verbinden",
941
1033
  label: "Bezeichnung",
942
1034
  type: "Typ",
@@ -984,6 +1076,7 @@ const de = {
984
1076
  },
985
1077
  dashboard: {
986
1078
  noRows: "Keine Zeilen",
1079
+ loading: "Wird geladen…",
987
1080
  pickMeasures: "Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.",
988
1081
  datasetUnsupported: "Diese Datenquelle unterstützt keine Dataset-Abfragen.",
989
1082
  details: "Details",
@@ -1241,6 +1334,7 @@ const de = {
1241
1334
  },
1242
1335
  },
1243
1336
  console: {
1337
+ saveAdvisoryTitle: "Gespeichert — die Autorenprüfung ergab {{count}} Hinweis(e)",
1244
1338
  settingsHub: {
1245
1339
  title: "Einstellungen",
1246
1340
  subtitle: "Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.",
@@ -1307,7 +1401,7 @@ const de = {
1307
1401
  shareTitle: "Diese Unterhaltung teilen",
1308
1402
  shareDisabledTitle: "Beginnen Sie zu chatten, um das Teilen zu aktivieren",
1309
1403
  newChat: "Neu",
1310
- searchChats: "Chats durchsuchen...",
1404
+ searchChats: "Chats durchsuchen…",
1311
1405
  noChatsYet: "Noch keine Chats",
1312
1406
  noChatsDescription: "Starten Sie eine neue Unterhaltung, um sie hier zu sehen.",
1313
1407
  noMatchingChats: "Keine passenden Chats.",
@@ -1316,18 +1410,18 @@ const de = {
1316
1410
  deleteConversation: "Unterhaltung löschen",
1317
1411
  saveRename: "Umbenennung speichern",
1318
1412
  cancelRename: "Umbenennung abbrechen",
1319
- loadingHistory: "Unterhaltungsverlauf wird geladen...",
1413
+ loadingHistory: "Unterhaltungsverlauf wird geladen…",
1320
1414
  conversationReady: "Unterhaltung bereit",
1321
1415
  preparingConversation: "Neue Unterhaltung wird vorbereitet",
1322
1416
  offlineDemoMode: "Offline-Demomodus — Agentenliste nicht verfügbar",
1323
1417
  sendFailedRateLimited: "Sie senden zu schnell Nachrichten. Ihre Nachricht wird unten aufbewahrt — warten Sie einen Moment und versuchen Sie es erneut.",
1324
1418
  sendFailedGeneric: "Ihre Nachricht konnte nicht gesendet werden. Sie wird unten aufbewahrt — bitte versuchen Sie es erneut.",
1325
- askAgent: "{{agent}} fragen...",
1419
+ askAgent: "{{agent}} fragen…",
1326
1420
  assistant: "Assistent",
1327
1421
  liveCanvas: "Live-Vorschau — {{app}} (Entwurf)",
1328
1422
  liveCanvasUnlisted: "Live-App — {{app}} (nicht gelistet bis zur Veröffentlichung)",
1329
- loadingAgents: "Agenten werden geladen...",
1330
- askAnything: "Fragen Sie irgendetwas...",
1423
+ loadingAgents: "Agenten werden geladen…",
1424
+ askAnything: "Fragen Sie irgendetwas…",
1331
1425
  emptyTitle: "Unterhaltung beginnen",
1332
1426
  emptyDescription: "Fragen Sie irgendetwas — der Assistent hat Zugriff auf den Kontext Ihrer aktuellen App.",
1333
1427
  switchAssistant: "Assistenten wechseln",
@@ -1430,9 +1524,60 @@ const de = {
1430
1524
  createSeed: "Beispieldaten erzeugen",
1431
1525
  createPackage: "App-Paket erstellen",
1432
1526
  },
1527
+ // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
1528
+ // connection banner and plan/publish cards, the ChatDock chrome, and the
1529
+ // conversation-list date buckets. `group.*` is the template-key family
1530
+ // `console.ai.group.${key}` (ConversationsSidebar), enumerated from the
1531
+ // ConversationGroupKey union — all five members, no wildcard.
1532
+ collapseToDock: "In die Seitenleiste einklappen",
1533
+ switchApp: "App wechseln",
1534
+ switchAppLabel: "Build-Unterhaltungen nach App",
1535
+ newApp: "Neue App",
1536
+ connectionWaiting: "Warten auf den Server…",
1537
+ connectionStalled: "Arbeitet noch…",
1538
+ connectionOffline: "Verbindung verloren — Neuverbindung…",
1539
+ designingPlan: "Ihre App wird entworfen…",
1540
+ designingPlanHint: {
1541
+ data: "Die Daten, die Sie erfassen möchten, werden strukturiert…",
1542
+ objects: "Objekte und ihre Felder werden geformt…",
1543
+ relations: "Verknüpfte Datensätze werden verbunden…",
1544
+ lookups: "Beziehungen und Lookups werden eingerichtet…",
1545
+ views: "Bildschirme und Ansichten werden geplant…",
1546
+ forms: "Formulare und Listen werden angeordnet…",
1547
+ defaults: "Sinnvolle Standardwerte und Validierungen werden hinzugefügt…",
1548
+ dashboard: "Ein Dashboard zur Nachverfolgung wird skizziert…",
1549
+ review: "Es wird noch einmal geprüft, ob die Struktur zusammenpasst…",
1550
+ finalize: "Der Plan wird zusammengestellt…",
1551
+ },
1552
+ planBuilding: "Wird erstellt…",
1553
+ planBuilt: "Erstellt",
1554
+ planDeferred: "Noch nicht erstellt",
1555
+ planReady: "Der Plan ist fertig. Erstellen Sie ihn jetzt, oder sagen Sie mir, was angepasst werden soll.",
1556
+ published: "Veröffentlicht",
1557
+ publishFailed: "Veröffentlichen fehlgeschlagen",
1558
+ unavailableTitle: "KI-Assistent nicht verfügbar",
1559
+ unavailableDescription: "In dieser Bereitstellung ist kein KI-Assistent aktiviert. Alles andere funktioniert wie gewohnt.",
1560
+ 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.",
1561
+ unavailableRetry: "Erneut versuchen",
1562
+ unavailableHome: "Zurück zur Startseite",
1563
+ dock: {
1564
+ title: "Assistent",
1565
+ description: "KI-Assistent-Chat",
1566
+ resize: "Chatbreite anpassen",
1567
+ collapse: "Chat einklappen",
1568
+ maximize: "Als ganze Seite öffnen",
1569
+ open: "Assistent öffnen",
1570
+ },
1571
+ group: {
1572
+ today: "Heute",
1573
+ yesterday: "Gestern",
1574
+ previous7Days: "Vorherige 7 Tage",
1575
+ previous30Days: "Vorherige 30 Tage",
1576
+ older: "Älter",
1577
+ },
1433
1578
  },
1434
1579
  title: "ObjectStack Konsole",
1435
- initializing: "Anwendung wird initialisiert...",
1580
+ initializing: "Anwendung wird initialisiert…",
1436
1581
  loadingHint: "Die Einrichtung einer neuen Umgebung kann einen Moment dauern.",
1437
1582
  breadcrumb: {
1438
1583
  dashboards: "Dashboards",
@@ -1440,6 +1585,31 @@ const de = {
1440
1585
  reports: "Berichte",
1441
1586
  system: "System",
1442
1587
  },
1588
+ // objectui#4024 — the single-namespace settings screen. Its sibling
1589
+ // `settingsHub` above already resolved through this pack; the view was the
1590
+ // one file still carrying English literals.
1591
+ settingsView: {
1592
+ backToHub: "Alle Einstellungen",
1593
+ back: "Zurück",
1594
+ noNamespace: "Kein Namensraum ausgewählt.",
1595
+ loadError: "Einstellungen konnten nicht geladen werden",
1596
+ saved: "Einstellungen gespeichert",
1597
+ saveFailed: "Speichern fehlgeschlagen",
1598
+ lockedByEnv: "Durch Umgebung gesperrt: {{key}}",
1599
+ lockedByEnvNoKey: "Durch Umgebung gesperrt",
1600
+ actionSucceeded: "Aktion erfolgreich",
1601
+ actionFailed: "Aktion fehlgeschlagen",
1602
+ discard: "Verwerfen",
1603
+ saveChanges: "Änderungen speichern",
1604
+ unsavedCount: "{{count}} nicht gespeicherte Änderungen",
1605
+ unsavedCount_one: "{{count}} nicht gespeicherte Änderung",
1606
+ unsavedCount_other: "{{count}} nicht gespeicherte Änderungen",
1607
+ cryptoRefusalTitle: "Diese Installation kann keine Geheimnisse verschlüsseln",
1608
+ cryptoRefusalSubjectSuffix: "ist als verschlüsselt deklariert, daher wurde nichts geschrieben.",
1609
+ cryptoRefusalNoSubject: "Der als verschlüsselt deklarierte Wert wurde abgelehnt, daher wurde nichts geschrieben.",
1610
+ cryptoRefusalToast: "Geheimnisse können nicht verschlüsselt werden: {{subject}}",
1611
+ cryptoRefusalToastNoSubject: "Geheimnisse können nicht verschlüsselt werden",
1612
+ },
1443
1613
  loadingSteps: {
1444
1614
  connecting: "Verbindung zur Datenquelle herstellen",
1445
1615
  loadingConfig: "Konfiguration laden",
@@ -1469,6 +1639,7 @@ const de = {
1469
1639
  general: "Allgemein",
1470
1640
  navigation: "Navigation",
1471
1641
  dataViews: "Datenansichten",
1642
+ aiChat: "KI-Assistent",
1472
1643
  preferences: "Einstellungen",
1473
1644
  },
1474
1645
  openCommandPalette: "Befehlspalette öffnen",
@@ -1479,11 +1650,13 @@ const de = {
1479
1650
  createRecord: "Neuen Datensatz erstellen",
1480
1651
  refreshData: "Daten aktualisieren",
1481
1652
  editRecord: "Ausgewählten Datensatz bearbeiten",
1653
+ newChat: "Neuer Chat",
1654
+ toggleChatsList: "Chatliste umschalten",
1482
1655
  toggleDarkMode: "Dunkelmodus umschalten",
1483
1656
  },
1484
1657
  commandPalette: {
1485
1658
  title: "Befehlspalette",
1486
- placeholder: "Befehl eingeben oder suchen...",
1659
+ placeholder: "Befehl eingeben oder suchen…",
1487
1660
  noResults: "Keine Ergebnisse gefunden.",
1488
1661
  objects: "Objekte",
1489
1662
  dashboards: "Dashboards",
@@ -1509,6 +1682,12 @@ const de = {
1509
1682
  goHome: "Zur Startseite",
1510
1683
  errorDetails: "Fehlerdetails (nur Entwicklung)",
1511
1684
  },
1685
+ // objectui#3546 slice four — the console's catch-all route (AppContent `RouteNotFound`).
1686
+ notFound: {
1687
+ title: "Seite nicht gefunden",
1688
+ description: "Die aufgerufene URL entspricht keiner Ansicht in dieser App.",
1689
+ back: "Zurück",
1690
+ },
1512
1691
  theme: {
1513
1692
  toggle: "Design umschalten",
1514
1693
  light: "Hell",
@@ -1524,10 +1703,12 @@ const de = {
1524
1703
  viewNameHelp: "Technischer Schlüssel (snake_case). Wird aus dem Titel automatisch gefüllt — bei Bedarf anpassen.",
1525
1704
  viewNameRequired: "Geben Sie einen Schlüssel ein (Kleinbuchstaben, Ziffern, Unterstrich). Bei nicht-lateinischen Titeln wird er nicht automatisch gefüllt.",
1526
1705
  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',
1706
+ systemViewReadonly: "Systemansicht — im Code definiert, schreibgeschützt.",
1707
+ cannotEditMetaView: "Diese Ansicht ist integriert und im Code definiert – sie kann nicht geändert werden.",
1708
+ cannotDeleteMetaView: "Diese Ansicht ist integriert und im Code definiert – sie kann nicht gelöscht werden.",
1709
+ expandToPage: "Als ganze Seite öffnen",
1529
1710
  objectNotFound: "Objekt nicht gefunden",
1530
- objectNotFoundDescription: "Das Objekt „{{objectName}}\" existiert in der aktuellen Konfiguration nicht.",
1711
+ objectNotFoundDescription: "Das Objekt „{{objectName}}“ existiert in der aktuellen Konfiguration nicht.",
1531
1712
  objectNotFoundHint: "Überprüfen Sie Ihre App-Navigationseinstellungen oder wählen Sie ein anderes Objekt aus der Seitenleiste.",
1532
1713
  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
1714
  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.",
@@ -1557,7 +1738,7 @@ const de = {
1557
1738
  exportPrintHint: "Exportformate, Drucken und Anzeige der Datensatzanzahl",
1558
1739
  showAllFields: "Alle anzeigen",
1559
1740
  hideAllFields: "Alle ausblenden",
1560
- searchFields: "Felder suchen...",
1741
+ searchFields: "Felder suchen…",
1561
1742
  title: "Titel",
1562
1743
  description: "Beschreibung",
1563
1744
  data: "Daten",
@@ -1596,7 +1777,7 @@ const de = {
1596
1777
  longitudeField: "Längengradfeld",
1597
1778
  imageField: "Bildfeld",
1598
1779
  dateField: "Datumsfeld",
1599
- selectField: "Feld auswählen...",
1780
+ selectField: "Feld auswählen…",
1600
1781
  gridOptionsHint: "Die Tabellenansicht verwendet die oben konfigurierten Spalten.",
1601
1782
  groupBy: "Gruppieren nach",
1602
1783
  prefixField: "Präfixfeld",
@@ -1632,7 +1813,7 @@ const de = {
1632
1813
  create: "Erstellen",
1633
1814
  delete: "Löschen",
1634
1815
  deleteViewTitle: "Ansicht löschen",
1635
- deleteViewConfirm: "Möchten Sie die Ansicht „{{name}}\" wirklich löschen? Dies kann nicht rückgängig gemacht werden.",
1816
+ deleteViewConfirm: "Möchten Sie die Ansicht „{{name}}“ wirklich löschen? Dies kann nicht rückgängig gemacht werden.",
1636
1817
  bulkDeleteConfirm: "{{count}} ausgewählte Datensätze löschen? Dies kann nicht rückgängig gemacht werden.",
1637
1818
  duplicateViewName: "Eine Ansicht mit diesem Namen existiert bereits.",
1638
1819
  viewTypeGrid: "Raster",
@@ -1659,9 +1840,9 @@ const de = {
1659
1840
  latitudeFieldHelp: "Feld mit dem Breitengrad (nur Geo-Felder).",
1660
1841
  longitudeFieldHelp: "Feld mit dem Längengrad (nur Geo-Felder).",
1661
1842
  imageFieldHelp: "Das Galerie-Cover kommt aus diesem Bild- oder Anhangfeld.",
1662
- selectOption: "Auswählen...",
1843
+ selectOption: "Auswählen…",
1663
1844
  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.",
1845
+ viewTypeUnavailable: "Dieses Objekt hat kein Feld, das als „{{field}}“ dienen kann.",
1665
1846
  viewTypeUnavailableShort: "Nicht von diesem Objekt unterstützt.",
1666
1847
  chartType: "Diagrammtyp",
1667
1848
  chartTypeHelp: "Bestimmt, wie die Daten gerendert werden.",
@@ -1709,11 +1890,11 @@ const de = {
1709
1890
  ufDropdown: "Dropdown",
1710
1891
  ufTabs: "Registerkarten",
1711
1892
  ufToggle: "Umschalten",
1712
- ufAddField: "+ Filterfeld hinzufügen...",
1893
+ ufAddField: "+ Filterfeld hinzufügen…",
1713
1894
  ufNoFields: "Keine Felder verfügbar",
1714
1895
  ufAddTab: "+ Registerkarte hinzufügen",
1715
1896
  ufTabLabel: "Bezeichnung",
1716
- ufShowAllRecords: "Registerkarte „Alle Datensätze\" anzeigen",
1897
+ ufShowAllRecords: "Registerkarte „Alle Datensätze“ anzeigen",
1717
1898
  ufAllowAddTab: "Registerkarten hinzufügen erlauben",
1718
1899
  showRecordCount: "Datensatzanzahl anzeigen",
1719
1900
  allowPrinting: "Drucken erlauben",
@@ -1769,7 +1950,7 @@ const de = {
1769
1950
  passwordPlaceholder: "Passwort eingeben",
1770
1951
  forgotPasswordText: "Passwort vergessen?",
1771
1952
  submitButton: "Anmelden",
1772
- submittingButton: "Anmeldung läuft...",
1953
+ submittingButton: "Anmeldung läuft…",
1773
1954
  noAccountText: "Noch kein Konto?",
1774
1955
  signUpText: "Registrieren",
1775
1956
  errors: {
@@ -1777,6 +1958,18 @@ const de = {
1777
1958
  invalidCredentials: "Ungültige E-Mail oder Passwort. Bitte erneut versuchen.",
1778
1959
  emailNotVerified: "Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sich anmelden.",
1779
1960
  },
1961
+ // objectui#3546 slice three — phone/OTP sign-in. `{seconds}` is LoginForm's own
1962
+ // literal `.replace()` hole, not i18next interpolation: keep the single braces.
1963
+ emailOrPhoneLabel: "E-Mail oder Telefonnummer",
1964
+ emailOrPhonePlaceholder: "name@example.com oder +1 555 000 0000",
1965
+ phoneLabel: "Telefonnummer",
1966
+ phonePlaceholder: "+1 555 000 0000",
1967
+ otpCodeLabel: "Bestätigungscode",
1968
+ otpCodePlaceholder: "6-stelliger Code",
1969
+ sendOtpButton: "Code anfordern",
1970
+ resendOtpCountdownText: "Erneut senden in {seconds} s",
1971
+ usePhoneOtpText: "Mit Bestätigungscode anmelden",
1972
+ usePasswordSignInText: "Stattdessen mit Passwort anmelden",
1780
1973
  },
1781
1974
  register: {
1782
1975
  title: "Konto erstellen",
@@ -1792,7 +1985,7 @@ const de = {
1792
1985
  passwordMismatchError: "Passwörter stimmen nicht überein",
1793
1986
  passwordTooShortError: "Das Passwort muss mindestens 8 Zeichen lang sein",
1794
1987
  submitButton: "Konto erstellen",
1795
- submittingButton: "Konto wird erstellt...",
1988
+ submittingButton: "Konto wird erstellt…",
1796
1989
  hasAccountText: "Bereits ein Konto?",
1797
1990
  signInText: "Anmelden",
1798
1991
  errors: {
@@ -1813,12 +2006,26 @@ const de = {
1813
2006
  emailLabel: "E-Mail",
1814
2007
  emailPlaceholder: "name@example.com",
1815
2008
  submitButton: "Link zum Zurücksetzen senden",
1816
- submittingButton: "Wird gesendet...",
2009
+ submittingButton: "Wird gesendet…",
1817
2010
  successTitle: "Überprüfen Sie Ihre E-Mails",
1818
2011
  successDescription: "Wir haben einen Link zum Zurücksetzen des Passworts an {{email}} gesendet. Bitte überprüfen Sie Ihren Posteingang.",
1819
2012
  backToSignInText: "Zurück zur Anmeldung",
1820
2013
  rememberPasswordText: "Passwort doch bekannt?",
1821
2014
  signInText: "Anmelden",
2015
+ // objectui#3546 slice three — the SMS reset branch of the same form.
2016
+ phoneLabel: "Telefonnummer",
2017
+ phonePlaceholder: "+1 555 000 0000",
2018
+ otpCodeLabel: "Bestätigungscode",
2019
+ otpCodePlaceholder: "6-stelliger Code",
2020
+ sendOtpButton: "Code anfordern",
2021
+ resendOtpCountdownText: "Erneut senden in {seconds} s",
2022
+ newPasswordLabel: "Neues Passwort",
2023
+ newPasswordPlaceholder: "Neues Passwort eingeben",
2024
+ resetButton: "Passwort zurücksetzen",
2025
+ usePhoneResetText: "Per SMS-Code zurücksetzen",
2026
+ useEmailResetText: "Stattdessen per E-Mail zurücksetzen",
2027
+ phoneSuccessTitle: "Passwort zurückgesetzt",
2028
+ phoneSuccessDescription: "Ihr Passwort wurde zurückgesetzt. Sie können sich jetzt mit dem neuen Passwort anmelden.",
1822
2029
  },
1823
2030
  resetPassword: {
1824
2031
  title: "Neues Passwort festlegen",
@@ -1857,6 +2064,8 @@ const de = {
1857
2064
  backToLogin: "Zurück zum Login",
1858
2065
  checkSpam: "E-Mail nicht erhalten? Überprüfen Sie Ihren Spam-Ordner oder kontaktieren Sie den Support.",
1859
2066
  or: "Oder",
2067
+ // objectui#3546 slice three.
2068
+ resendUnavailable: "Für diese Umgebung ist möglicherweise kein E-Mail-Versand konfiguriert. Kontaktieren Sie den Support, wenn das Problem bestehen bleibt.",
1860
2069
  },
1861
2070
  setup: {
1862
2071
  welcomeTitle: "Willkommen bei ObjectStack",
@@ -1895,6 +2104,9 @@ const de = {
1895
2104
  invalidDescription: "In der URL wurde kein Gerätecode angegeben.",
1896
2105
  loading: "Lade…",
1897
2106
  cancel: "Abbrechen",
2107
+ // objectui#3546 slice three — device-authorization plugin switched off.
2108
+ disabledTitle: "Geräteautorisierung nicht aktiviert",
2109
+ disabledDescription: "Für diese Bereitstellung ist die Geräteautorisierung nicht aktiviert, daher kann dieses Gerät hier nicht genehmigt werden.",
1898
2110
  },
1899
2111
  shell: {
1900
2112
  tenantHostHint: "Sie melden sich bei diesem Arbeitsbereich an",
@@ -1934,6 +2146,29 @@ const de = {
1934
2146
  },
1935
2147
  },
1936
2148
  },
2149
+ // objectui#3546 slice three — the /oauth/consent screen.
2150
+ oauth: {
2151
+ consent: {
2152
+ title: "{{appName}} möchte auf Ihr Konto zugreifen",
2153
+ request: "{{appName}} fordert eine Berechtigung an{{suffix}}.",
2154
+ unknownApp: "eine Anwendung",
2155
+ willAllow: "Diese App kann dann:",
2156
+ scope: {
2157
+ openid: "Ihre Identität bestätigen",
2158
+ profile: "Ihr Basisprofil lesen (Name, Bild)",
2159
+ email: "Ihre E-Mail-Adresse lesen",
2160
+ offlineAccess: "Angemeldet bleiben (Zugriff erneuern)",
2161
+ },
2162
+ deny: "Ablehnen",
2163
+ authorize: "Autorisieren",
2164
+ submitting: "Autorisiere…",
2165
+ granted: "Zugriff gewährt",
2166
+ denied: "Zugriff verweigert",
2167
+ noRedirect: "Der Server hat keine Weiterleitungs-URL zurückgegeben.",
2168
+ failed: "Zustimmung fehlgeschlagen",
2169
+ footer: "Sie können den Zugriff jederzeit in Ihren Kontoeinstellungen widerrufen.",
2170
+ },
2171
+ },
1937
2172
  profile: {
1938
2173
  title: "Profil",
1939
2174
  subtitle: "Verwalten Sie Ihre Kontoeinstellungen",
@@ -1995,6 +2230,8 @@ const de = {
1995
2230
  invite: "Mitglied einladen",
1996
2231
  members: "Mitglieder",
1997
2232
  settings: "Arbeitsbereichseinstellungen",
2233
+ multiOrgDisabled: "Das Erstellen neuer Organisationen ist auf dieser Instanz deaktiviert.",
2234
+ createFailed: 'Arbeitsbereich konnte nicht erstellt werden',
1998
2235
  },
1999
2236
  help: {
2000
2237
  onThisPage: "Auf dieser Seite",
@@ -2005,7 +2242,7 @@ const de = {
2005
2242
  },
2006
2243
  sidebar: {
2007
2244
  packageManagement: "Paketverwaltung",
2008
- searchNavigation: "Navigation durchsuchen...",
2245
+ searchNavigation: "Navigation durchsuchen…",
2009
2246
  settings: "Einstellungen",
2010
2247
  help: "Hilfe",
2011
2248
  helpTooltip: "Hilfe und Dokumentation",
@@ -2029,8 +2266,8 @@ const de = {
2029
2266
  switchObject: "Objekt wechseln",
2030
2267
  connection: {
2031
2268
  connected: "Verbunden",
2032
- connecting: "Verbindung wird hergestellt...",
2033
- reconnecting: "Verbindung wird wiederhergestellt...",
2269
+ connecting: "Verbindung wird hergestellt…",
2270
+ reconnecting: "Verbindung wird wiederhergestellt…",
2034
2271
  disconnected: "Getrennt",
2035
2272
  error: "Verbindungsfehler",
2036
2273
  },
@@ -2069,6 +2306,14 @@ const de = {
2069
2306
  publishing: "Wird veröffentlicht…",
2070
2307
  published: "Veröffentlicht! Ihre Änderungen sind live.",
2071
2308
  publishFailed: "Veröffentlichen fehlgeschlagen",
2309
+ // objectui#3546 slice six — seedWarn ist derselbe englische Satz wie
2310
+ // console.ai.seedWarn, also dieselbe Übersetzung. Der "(n)"-Marker folgt
2311
+ // home.pendingDrafts.message ("Änderung(en)") in dieser Familie.
2312
+ nothing: "Nichts zu veröffentlichen.",
2313
+ probeWarn: "Veröffentlicht, aber die Überprüfung hat Probleme gefunden.",
2314
+ seedWarn: "Veröffentlicht, aber einige Beispieldaten konnten nicht geladen werden.",
2315
+ publishedVerified: "Veröffentlicht und geprüft — {{count}} Beispielzeile(n) sind live.",
2316
+ capabilityWarn: "Autorenprüfung: {{count}} Capability-Verweis(e) verweisen ins Leere.",
2072
2317
  },
2073
2318
  title: "Startseite",
2074
2319
  subtitle: "Ihr Arbeitsbereich-Dashboard",
@@ -2082,7 +2327,7 @@ const de = {
2082
2327
  title: "Erfordert Ihre Aufmerksamkeit",
2083
2328
  empty: "Alles erledigt",
2084
2329
  },
2085
- loading: "Arbeitsbereich wird geladen...",
2330
+ loading: "Arbeitsbereich wird geladen…",
2086
2331
  recent: "Kürzlich",
2087
2332
  starred: "Mit Stern",
2088
2333
  welcome: "Willkommen bei ObjectUI",
@@ -2128,7 +2373,7 @@ const de = {
2128
2373
  },
2129
2374
  gettingStarted: {
2130
2375
  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.",
2376
+ 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
2377
  cta: "Alle Anwendungen durchsuchen",
2133
2378
  },
2134
2379
  },
@@ -2143,6 +2388,9 @@ const de = {
2143
2388
  roles: "Rollen",
2144
2389
  configuration: "Konfiguration",
2145
2390
  createApp: "App erstellen",
2391
+ administration: "Verwaltung",
2392
+ datasources: "Datenquellen",
2393
+ documentation: "Dokumentation",
2146
2394
  },
2147
2395
  appSwitcher: {
2148
2396
  switchApplication: "Anwendung wechseln",
@@ -2182,10 +2430,10 @@ const de = {
2182
2430
  search: {
2183
2431
  title: "Suche",
2184
2432
  back: "Zurück",
2185
- placeholder: "Objekte, Dashboards, Seiten, Berichte suchen...",
2433
+ placeholder: "Objekte, Dashboards, Seiten, Berichte suchen…",
2186
2434
  inputAriaLabel: "Objekte, Dashboards, Seiten, Berichte suchen",
2187
- resultsCount: "{{count}} Ergebnis für „{{query}}\"",
2188
- resultsCountPlural: "{{count}} Ergebnisse für „{{query}}\"",
2435
+ resultsCount: "{{count}} Ergebnis für „{{query}}“",
2436
+ resultsCountPlural: "{{count}} Ergebnisse für „{{query}}“",
2189
2437
  itemsAvailable: "{{count}} Elemente verfügbar",
2190
2438
  noResults: "Keine Ergebnisse gefunden",
2191
2439
  noResultsHint: "Versuchen Sie, Ihre Suchbegriffe anzupassen",
@@ -2200,15 +2448,21 @@ const de = {
2200
2448
  },
2201
2449
  empty: {
2202
2450
  objectNotFound: "Objekt nicht gefunden",
2203
- objectNotFoundDescription: "Definition des Objekts „{{name}}\" fehlt. Überprüfen Sie Ihre Konfiguration oder navigieren Sie zurück.",
2451
+ objectNotFoundDescription: "Definition des Objekts „{{name}}“ fehlt. Überprüfen Sie Ihre Konfiguration oder navigieren Sie zurück.",
2452
+ interfacePageSourceMissing: "Diese Interface-Seite verweist auf „{{name}}“, das nicht verfügbar ist.",
2204
2453
  pageNotFound: "Seite nicht gefunden",
2205
- pageNotFoundDescription: "Die Seite „{{name}}\" wurde nicht gefunden. Sie wurde möglicherweise entfernt oder umbenannt.",
2454
+ pageNotFoundDescription: "Die Seite „{{name}}“ wurde nicht gefunden. Sie wurde möglicherweise entfernt oder umbenannt.",
2206
2455
  dashboardNotFound: "Dashboard nicht gefunden",
2207
- dashboardNotFoundDescription: "Das Dashboard „{{name}}\" wurde nicht gefunden. Es wurde möglicherweise entfernt oder umbenannt.",
2456
+ dashboardNotFoundDescription: "Das Dashboard „{{name}}“ wurde nicht gefunden. Es wurde möglicherweise entfernt oder umbenannt.",
2208
2457
  reportNotFound: "Bericht nicht gefunden",
2209
- reportNotFoundDescription: "Der Bericht „{{name}}\" wurde nicht gefunden. Er wurde möglicherweise entfernt oder umbenannt.",
2458
+ reportNotFoundDescription: "Der Bericht „{{name}}“ wurde nicht gefunden. Er wurde möglicherweise entfernt oder umbenannt.",
2210
2459
  noAppsConfigured: "Keine Apps konfiguriert",
2211
2460
  noAppsConfiguredDescription: "Es sind keine Anwendungen registriert. Erstellen Sie Ihre erste App oder besuchen Sie die Systemeinstellungen.",
2461
+ appNotAvailable: "App nicht verfügbar",
2462
+ appNotAvailableDescription: "Diese App ist noch nicht verfügbar — sie wird möglicherweise noch veröffentlicht. Versuchen Sie es in einem Moment erneut.",
2463
+ appAccessDenied: "Sie haben keinen Zugriff auf diese App",
2464
+ appAccessDeniedDescription: "Diese App existiert, aber Ihr Konto ist nicht berechtigt, sie zu öffnen. Bitten Sie einen Administrator um Zugriff.",
2465
+ appAccessDeniedHome: "Zurück zur Startseite",
2212
2466
  createFirstApp: "Erste App erstellen",
2213
2467
  systemSettings: "Systemeinstellungen",
2214
2468
  back: "Zurück",
@@ -2254,12 +2508,12 @@ const de = {
2254
2508
  delete: "Löschen",
2255
2509
  },
2256
2510
  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",
2511
+ addedPage: "Navigation aktualisiert: Seite „{{name}}“ hinzugefügt",
2512
+ addedDashboard: "Navigation aktualisiert: Dashboard „{{name}}“ hinzugefügt",
2513
+ removedPage: "Navigation aktualisiert: Seite „{{name}}“ entfernt",
2514
+ removedDashboard: "Navigation aktualisiert: Dashboard „{{name}}“ entfernt",
2515
+ renamedPage: "Navigation aktualisiert: Seite „{{oldName}}“ in „{{newName}}“ umbenannt",
2516
+ renamedDashboard: "Navigation aktualisiert: Dashboard „{{oldName}}“ in „{{newName}}“ umbenannt",
2263
2517
  undoLabel: "Rückgängig",
2264
2518
  undone: "Navigationsänderung rückgängig gemacht",
2265
2519
  undoFailed: "Navigationsänderung konnte nicht rückgängig gemacht werden",
@@ -2280,7 +2534,7 @@ const de = {
2280
2534
  deleteFailed: "Ansicht konnte nicht gelöscht werden",
2281
2535
  },
2282
2536
  dashboardActions: {
2283
- pdfPreparing: "PDF-Export wird vorbereitet…",
2537
+ printDialogOpening: "Druckdialog Ihres Browsers wird geöffnet (kein PDF-Export)",
2284
2538
  exportFailed: "Export fehlgeschlagen: {{message}}",
2285
2539
  forecastSoon: "Prognoseansicht kommt bald",
2286
2540
  },
@@ -2324,111 +2578,7 @@ const de = {
2324
2578
  first: "Erster",
2325
2579
  },
2326
2580
  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",
2581
+ panelTitle: "Bericht bearbeiten",
2432
2582
  },
2433
2583
  },
2434
2584
  organizations: {
@@ -2445,6 +2595,140 @@ const de = {
2445
2595
  emptyDescription: "Erstellen Sie Ihre erste Organisation, um loszulegen.",
2446
2596
  noMatches: "Keine Organisationen entsprechen Ihrer Suche.",
2447
2597
  },
2598
+ organization: {
2599
+ roles: {
2600
+ owner: 'Eigentümer',
2601
+ admin: 'Administrator',
2602
+ delegatedAdmin: 'Delegierter Administrator',
2603
+ member: 'Mitglied',
2604
+ },
2605
+ errors: {
2606
+ notAllowedToInvite: 'Sie dürfen keine Benutzer in diese Organisation einladen.',
2607
+ notAllowedToInviteWithRole: 'Sie dürfen keine Benutzer mit dieser Rolle einladen.',
2608
+ alreadyInvited: 'Dieser Benutzer wurde bereits in diese Organisation eingeladen.',
2609
+ organizationExists: 'Diese Organisation existiert bereits.',
2610
+ slugTaken: 'Dieser URL-Slug ist bereits vergeben.',
2611
+ notAllowedToCreate: 'Sie dürfen keine neue Organisation erstellen.',
2612
+ notTheRecipient: 'Sie sind nicht der Empfänger dieser Einladung.',
2613
+ invitationNotFound: 'Diese Einladung existiert nicht mehr oder ist abgelaufen.',
2614
+ unknown: 'Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.',
2615
+ },
2616
+ backToList: "Zurück zu den Organisationen",
2617
+ notFound: "Organisation nicht gefunden",
2618
+ notFoundDescription: "Diese Organisation existiert nicht oder Sie haben keinen Zugriff darauf.",
2619
+ tabs: {
2620
+ members: "Mitglieder",
2621
+ invitations: "Einladungen",
2622
+ settings: "Einstellungen",
2623
+ },
2624
+ members: {
2625
+ title: "Mitglieder",
2626
+ inviteMember: "Mitglied einladen",
2627
+ inviteRestrictedNote: "Nur Organisationsadministratoren können Mitglieder einladen.",
2628
+ removeMember: "Mitglied entfernen",
2629
+ removeConfirmTitle: "Mitglied entfernen?",
2630
+ removeConfirmDescription: "{{name}} wird aus der Organisation entfernt und verliert sofort den Zugriff.",
2631
+ removeConfirmAction: "Entfernen",
2632
+ memberRemoved: "Mitglied entfernt",
2633
+ removeFailed: "Mitglied konnte nicht entfernt werden",
2634
+ roleUpdated: "Rolle aktualisiert",
2635
+ roleUpdateFailed: "Rolle konnte nicht aktualisiert werden",
2636
+ memberActions: 'Mitgliedsaktionen',
2637
+ loadFailed: 'Mitglieder konnten nicht geladen werden',
2638
+ },
2639
+ invitations: {
2640
+ title: "Einladungen",
2641
+ empty: "Keine Einladungen vorhanden.",
2642
+ expiresAt: "Läuft ab am",
2643
+ linkCopied: "Einladungslink kopiert",
2644
+ copyFailed: "Link konnte nicht kopiert werden",
2645
+ canceled: "Einladung zurückgezogen",
2646
+ cancelFailed: "Einladung konnte nicht zurückgezogen werden",
2647
+ cancelTitle: "Einladung zurückziehen?",
2648
+ cancelDescription: "Die Einladung für {{email}} wird zurückgezogen.",
2649
+ cancelAction: "Einladung zurückziehen",
2650
+ inviteTitle: "Mitglied einladen",
2651
+ inviteDescription: "Die Person erhält eine Einladung, dieser Organisation beizutreten.",
2652
+ emailLabel: "E-Mail",
2653
+ roleLabel: "Rolle",
2654
+ placementLabel: "Zuordnung (optional)",
2655
+ placementDescription: "Wird angewendet, sobald die Einladung angenommen wird. Aufgeführt sind nur Einheiten und Positionen, die Sie delegieren dürfen.",
2656
+ businessUnitLabel: "Geschäftseinheit",
2657
+ businessUnitPlaceholder: "Keine Zuordnung",
2658
+ positionsLabel: "Positionen",
2659
+ sendInvite: "Einladung senden",
2660
+ sentTitle: "Einladung erstellt",
2661
+ sentDescription: "Teilen Sie den folgenden Link mit der eingeladenen Person. Sie muss sich anmelden, um anzunehmen.",
2662
+ linkLabel: "Annahme-Link",
2663
+ invitedAs: "{{email}} als {{role}} eingeladen",
2664
+ copyLinkLabel: 'Einladungslink kopieren',
2665
+ loadFailed: 'Einladungen konnten nicht geladen werden',
2666
+ inviteFailed: 'Mitglied konnte nicht eingeladen werden',
2667
+ status: {
2668
+ all: "Alle",
2669
+ pending: "Ausstehend",
2670
+ accepted: "Angenommen",
2671
+ rejected: "Abgelehnt",
2672
+ canceled: "Zurückgezogen",
2673
+ },
2674
+ },
2675
+ settings: {
2676
+ generalTitle: "Allgemein",
2677
+ generalDescription: "Aktualisieren Sie die Informationen Ihrer Organisation.",
2678
+ readOnlyNote: "Nur Eigentümer können Einstellungen ändern.",
2679
+ nameLabel: "Name der Organisation",
2680
+ slugLabel: "Slug",
2681
+ logoLabel: "Logo",
2682
+ logoUpload: "Hochladen",
2683
+ logoReplace: "Ersetzen",
2684
+ logoClear: "Entfernen",
2685
+ logoUploaded: "Logo hochgeladen — zum Anwenden speichern",
2686
+ logoUploadFailed: "Logo konnte nicht hochgeladen werden",
2687
+ save: "Änderungen speichern",
2688
+ saved: "Einstellungen gespeichert",
2689
+ saveFailed: "Einstellungen konnten nicht gespeichert werden",
2690
+ leaveTitle: "Organisation verlassen",
2691
+ leaveDescription: "Sie verlieren den Zugriff auf diese Organisation.",
2692
+ leaveAction: "Verlassen",
2693
+ leaveConfirmTitle: "Organisation verlassen?",
2694
+ leaveConfirmDescription: "Möchten Sie {{name}} wirklich verlassen? Sie verlieren sofort den Zugriff.",
2695
+ leaveConfirmAction: "Verlassen",
2696
+ leftOrg: "Sie haben die Organisation verlassen",
2697
+ leaveFailed: "Organisation konnte nicht verlassen werden",
2698
+ dangerZone: "Gefahrenbereich",
2699
+ deleteTitle: "Organisation löschen",
2700
+ deleteDescription: "Diese Organisation und alle ihre Daten dauerhaft löschen.",
2701
+ deleteAction: "Löschen",
2702
+ deleteConfirmTitle: "Organisation löschen?",
2703
+ deleteConfirmDescription: "Diese Aktion ist unwiderruflich. Alle Daten werden dauerhaft gelöscht. Geben Sie den Slug der Organisation ein, um zu bestätigen.",
2704
+ deleteConfirmSlugLabel: "Geben Sie „{{slug}}“ ein, um zu bestätigen",
2705
+ deleteConfirmAction: "Organisation löschen",
2706
+ deleted: "Organisation gelöscht",
2707
+ deleteFailed: "Organisation konnte nicht gelöscht werden",
2708
+ },
2709
+ accept: {
2710
+ title: "Sie wurden eingeladen",
2711
+ description: "Sie wurden eingeladen, {{orgName}} als {{role}} beizutreten.",
2712
+ errorTitle: "Einladung nicht verfügbar",
2713
+ goToOrgs: "Zu den Organisationen",
2714
+ loading: "Einladung wird geladen…",
2715
+ organization: "Organisation",
2716
+ role: "Rolle",
2717
+ expiresAt: "Läuft ab am",
2718
+ accept: "Einladung annehmen",
2719
+ accepted: "Einladung angenommen",
2720
+ acceptFailed: "Einladung konnte nicht angenommen werden",
2721
+ decline: "Ablehnen",
2722
+ declined: "Einladung abgelehnt",
2723
+ declineFailed: "Einladung konnte nicht abgelehnt werden",
2724
+ },
2725
+ switcher: {
2726
+ label: "Organisation wechseln",
2727
+ groupLabel: "Arbeitsorganisation",
2728
+ groupHint: "Neue Datensätze werden hier erstellt. Ansichten zeigen Daten aus allen Ihren Organisationen.",
2729
+ manageMembers: "Mitglieder verwalten",
2730
+ },
2731
+ },
2448
2732
  notifications: {
2449
2733
  regionLabel: "Benachrichtigungen",
2450
2734
  groupCount: "{{count}} Benachrichtigungen",
@@ -2458,6 +2742,9 @@ const de = {
2458
2742
  viewApprovals: "Genehmigungen anzeigen",
2459
2743
  noPendingApprovals: "Keine ausstehenden Genehmigungen",
2460
2744
  openApprovalsInbox: "Genehmigungs-Posteingang öffnen",
2745
+ badgeTotal: "{{total}} insgesamt",
2746
+ badgeNotifications: "{{unread}} Benachrichtigungen",
2747
+ badgeApprovals: "{{approvals}} ausstehende Genehmigungen",
2461
2748
  emptyUnread: "Alles gelesen",
2462
2749
  filterUnread: "Ungelesen",
2463
2750
  filterAll: "Alle",
@@ -2744,6 +3031,7 @@ const de = {
2744
3031
  dismiss: "Schließen",
2745
3032
  openOnCloud: "In der Cloud öffnen",
2746
3033
  backHome: "Zurück zur Startseite",
3034
+ updateTo: "Aktualisieren",
2747
3035
  },
2748
3036
  install: {
2749
3037
  dialogTitle: "{{name}} installieren",
@@ -2756,10 +3044,41 @@ const de = {
2756
3044
  noPermission: "Sie haben keine Berechtigung, Apps in einer Umgebung zu installieren. Nur Organisationsinhaber und Administratoren können installieren.",
2757
3045
  signInFirst: "Sie müssen sich zuerst bei ObjectStack Cloud anmelden.",
2758
3046
  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.",
3047
+ localSuccess: "v{{version}} in diesem Laufzeitsystem installiert. „{{name}}“ sollte jetzt im App-Wechsler erscheinen.",
2760
3048
  localManifestConflict: "{{message}}\nHinweis: Eine lokale App besitzt bereits diese manifest_id. Entfernen Sie sie zuerst aus objectstack.config.ts.",
2761
3049
  localUnauthorized: "Melden Sie sich zuerst in diesem Laufzeitsystem an.",
2762
3050
  localMarketplaceUnavailable: "Dieses Laufzeitsystem hat keine OS_CLOUD_URL konfiguriert.",
3051
+ updateTo: "Aktualisieren → v{{version}}",
3052
+ installedVersion: "Installiert v{{version}}",
3053
+ },
3054
+ // objectui#3546 — the MarketplacePage "Your organization" strip.
3055
+ org: {
3056
+ heading: "Ihre Organisation",
3057
+ install: "Installieren",
3058
+ installed: "{{name}} installiert",
3059
+ installedBadge: "Installiert",
3060
+ installing: "Installiere…",
3061
+ },
3062
+ // ADR-0025 PD4 §3.5/§3.11 — the pre-install consent panel
3063
+ // (PluginDisclosure.tsx). `runtime` is a CLOSED enum: spec
3064
+ // PluginRuntimeSchema = z.enum(['node', 'sandbox', 'worker']).
3065
+ disclosure: {
3066
+ containsCode: "Dieses Paket enthält Code",
3067
+ reviewed: "Geprüft und genehmigt",
3068
+ unreviewed: "Noch nicht geprüft",
3069
+ signed: "Signiert",
3070
+ grantsIntro: "Bei der Installation erhält dieses Paket:",
3071
+ services: "Plattformdienste",
3072
+ hooks: "Lifecycle-Hooks",
3073
+ network: "Netzwerkzugriff",
3074
+ fs: "Dateisystemzugriff",
3075
+ noPermissions: "Fordert keine besonderen Berechtigungen an.",
3076
+ acknowledge: "Ich habe verstanden, dass dieses Paket Code ausführt und die oben genannten Berechtigungen erhält.",
3077
+ runtime: {
3078
+ node: "Im Prozess · volles Vertrauen",
3079
+ sandbox: "Sandbox-isoliert",
3080
+ worker: "Außerhalb des Prozesses",
3081
+ },
2763
3082
  },
2764
3083
  uninstall: {
2765
3084
  confirm: "{{manifestId}} v{{version}} aus diesem Laufzeitsystem deinstallieren?\n\nDas zwischengespeicherte Manifest wird entfernt.",
@@ -2948,14 +3267,14 @@ const de = {
2948
3267
  bulkApproved: '{{count}} Anfragen genehmigt',
2949
3268
  bulkRejected: '{{count}} Anfragen abgelehnt',
2950
3269
  bulkPartial: '{{ok}} erfolgreich, {{fail}} fehlgeschlagen: {{which}}',
2951
- rejectOneTitle: '"{{title}}" ablehnen?',
3270
+ rejectOneTitle: '„{{title}}“ ablehnen?',
2952
3271
  rejectOneBody: 'Die Anfrage wird abgelehnt und der Antragsteller benachrichtigt.',
2953
3272
  rejectTitle: 'Diese Anfrage ablehnen?',
2954
3273
  rejectBody: 'Die Anfrage wird als abgelehnt markiert und der Antragsteller benachrichtigt.',
2955
3274
  recallTitle: 'Diese Anfrage zurückziehen?',
2956
3275
  recallBody: 'Genehmiger können danach nicht mehr handeln; der Datensatz wird entsperrt.',
2957
- inlineApproved: '"{{title}}" genehmigt',
2958
- inlineRejected: '"{{title}}" abgelehnt',
3276
+ inlineApproved: '„{{title}}“ genehmigt',
3277
+ inlineRejected: '„{{title}}“ abgelehnt',
2959
3278
  approvedFinal: 'Genehmigt',
2960
3279
  approvedWaiting: 'Genehmigt — wartet auf die übrigen Genehmiger',
2961
3280
  rejectedToast: 'Abgelehnt',
@@ -2978,7 +3297,7 @@ const de = {
2978
3297
  empty: {
2979
3298
  loadFailedTitle: 'Entwurfsvorschau konnte nicht geladen werden',
2980
3299
  loadFailedDescription: 'Das Entwurfs-Overlay konnte nicht gelesen werden. Erneut versuchen oder Verbindung prüfen.',
2981
- notReadyTitle: '„{{app}}" ist noch nicht im Entwurf',
3300
+ notReadyTitle: '„{{app}}“ ist noch nicht im Entwurf',
2982
3301
  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
3302
  nothingTitle: 'Noch nichts zur Vorschau',
2984
3303
  retry: 'Erneut versuchen',
@@ -3009,6 +3328,34 @@ const de = {
3009
3328
  confirmNote: 'Beim Veröffentlichen werden alle {{count}} ausstehenden Entwürfe dieses Pakets atomar freigegeben.',
3010
3329
  publishConfirm: 'Alle veröffentlichen',
3011
3330
  },
3331
+ // ADR-0045 — the materialized-but-unlisted app banner
3332
+ // (UnpublishedAppBar.tsx), sibling of draftBar above.
3333
+ unpublishedBar: {
3334
+ message: 'Unveröffentlichte App — voll funktionsfähig, aber nur für Builder sichtbar. Veröffentlichen Sie sie, damit Ihre Benutzer sie sehen.',
3335
+ publish: 'Veröffentlichen',
3336
+ publishing: 'Wird veröffentlicht…',
3337
+ published: 'Veröffentlicht! Die App ist jetzt für Ihre Benutzer sichtbar.',
3338
+ publishFailed: 'Veröffentlichen fehlgeschlagen',
3339
+ },
3340
+ // ADR-0067 — the append-only build/revert timeline (CommitTimeline.tsx);
3341
+ // `button` is the banner's entry point into it.
3342
+ history: {
3343
+ button: 'Verlauf',
3344
+ title: 'Build-Verlauf',
3345
+ description: 'Jede Änderung an dieser App, neueste zuerst. Machen Sie jeden Schritt rückgängig — eine Veröffentlichungsbestätigung ist nicht nötig.',
3346
+ loadFailed: 'Verlauf konnte nicht geladen werden:',
3347
+ loadFailedUnavailable: 'Commit-Speicher vorübergehend nicht erreichbar — dieser Lesevorgang hat nicht stattgefunden, daher wird kein Verlauf angezeigt. Versuchen Sie es gleich erneut.',
3348
+ loading: 'Verlauf wird geladen…',
3349
+ empty: 'Für diese App gibt es noch keinen Verlauf.',
3350
+ revertLabel: 'Eine Änderung rückgängig gemacht',
3351
+ applyLabel: 'Build-Änderung',
3352
+ revert: 'rückgängig',
3353
+ items: 'Elemente',
3354
+ revertAction: 'Rückgängig',
3355
+ reverted: 'Rückgängig gemacht — die Änderung wurde zurückgenommen.',
3356
+ revertFailed: 'Rückgängig machen fehlgeschlagen',
3357
+ 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.',
3358
+ },
3012
3359
  },
3013
3360
  filterBuilder: {
3014
3361
  where: "Wo",
@@ -3087,5 +3434,57 @@ const de = {
3087
3434
  statusIdle: "inaktiv",
3088
3435
  statusAway: "abwesend",
3089
3436
  },
3437
+ wizard: {
3438
+ missingRequired: "Bitte füllen Sie die Pflichtfelder aus: {{fields}}",
3439
+ },
3440
+ appManagement: {
3441
+ title: "Anwendungen",
3442
+ subtitle: "Alle konfigurierten Anwendungen verwalten",
3443
+ newApp: "Neue App",
3444
+ searchLabel: "Apps suchen",
3445
+ searchPlaceholder: "Apps suchen…",
3446
+ selectedCount: "{{n}} ausgewählt",
3447
+ bulkEnable: "Aktivieren",
3448
+ bulkDisable: "Deaktivieren",
3449
+ selectAll: "Alle auswählen ({{n}})",
3450
+ empty: "Keine Apps gefunden.",
3451
+ defaultBadge: "Standard",
3452
+ active: "Aktiv",
3453
+ inactive: "Inaktiv",
3454
+ selectApp: "{{name}} auswählen",
3455
+ openApp: "App öffnen",
3456
+ openAppNamed: "{{name}} öffnen",
3457
+ editApp: "App bearbeiten",
3458
+ editAppNamed: "{{name}} bearbeiten",
3459
+ editWithAi: "Mit KI bearbeiten",
3460
+ editWithAiNamed: "{{name}} mit KI bearbeiten",
3461
+ enableApp: "App aktivieren",
3462
+ disableApp: "App deaktivieren",
3463
+ enableAppNamed: "{{name}} aktivieren",
3464
+ disableAppNamed: "{{name}} deaktivieren",
3465
+ setDefault: "Als Standard festlegen",
3466
+ setDefaultNamed: "{{name}} als Standard festlegen",
3467
+ deleteApp: "App löschen",
3468
+ deleteAppNamed: "{{name}} löschen",
3469
+ confirmDelete: "Zum Bestätigen erneut klicken",
3470
+ confirmDeleteNamed: "Löschen von {{name}} bestätigen",
3471
+ toast: {
3472
+ noClient: "Metadatendienst nicht erreichbar",
3473
+ unknownError: "unbekannter Fehler",
3474
+ appEnabled: "{{name}} aktiviert",
3475
+ appDisabled: "{{name}} deaktiviert",
3476
+ toggleFailed: "Ändern des App-Status fehlgeschlagen: {{reason}}",
3477
+ setDefaultDone: "{{name}} als Standard festgelegt",
3478
+ setDefaultFailed: "Festlegen der Standard-App fehlgeschlagen: {{reason}}",
3479
+ appDeleted: "{{name}} gelöscht",
3480
+ deleteFailed: "Löschen der App fehlgeschlagen: {{reason}}",
3481
+ bulkEnabled: "{{n}} Apps aktiviert",
3482
+ bulkDisabled: "{{n}} Apps deaktiviert",
3483
+ bulkFailed: "Fehlgeschlagen für {{n}}: {{details}}",
3484
+ bulkFailureEntry: "{{name}} ({{reason}})",
3485
+ bulkFailureJoiner: "; ",
3486
+ bulkOperationFailed: "Massenvorgang fehlgeschlagen: {{reason}}",
3487
+ },
3488
+ },
3090
3489
  };
3091
3490
  export default de;