@object-ui/i18n 17.2.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 +1817 -1
  2. package/README.md +26 -13
  3. package/dist/index.d.ts +3 -1
  4. package/dist/index.js +14 -1
  5. package/dist/locales/ar.d.ts +550 -107
  6. package/dist/locales/ar.js +646 -156
  7. package/dist/locales/de.d.ts +550 -107
  8. package/dist/locales/de.js +661 -178
  9. package/dist/locales/en.d.ts +586 -143
  10. package/dist/locales/en.js +851 -143
  11. package/dist/locales/es.d.ts +550 -107
  12. package/dist/locales/es.js +647 -160
  13. package/dist/locales/fr.d.ts +550 -107
  14. package/dist/locales/fr.js +640 -155
  15. package/dist/locales/index.d.ts +5587 -1157
  16. package/dist/locales/ja.d.ts +550 -107
  17. package/dist/locales/ja.js +632 -149
  18. package/dist/locales/ko.d.ts +550 -107
  19. package/dist/locales/ko.js +638 -156
  20. package/dist/locales/pt.d.ts +550 -107
  21. package/dist/locales/pt.js +639 -157
  22. package/dist/locales/ru.d.ts +550 -107
  23. package/dist/locales/ru.js +650 -156
  24. package/dist/locales/zh.d.ts +588 -145
  25. package/dist/locales/zh.js +629 -145
  26. package/dist/pickLocalized.d.ts +21 -0
  27. package/dist/pickLocalized.js +40 -7
  28. package/dist/provider.d.ts +125 -1
  29. package/dist/provider.js +380 -4
  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 +67 -3
  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 +5 -4
@@ -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,11 +109,20 @@ 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",
115
+ closePanel: "Panel schließen",
116
+ resizeDrawer: "Panelbreite anpassen",
117
+ itemCount: "{{count}} Elemente",
118
+ itemCountOne: "{{count}} Element",
82
119
  toggleSidebar: "Seitenleiste umschalten",
83
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)",
84
126
  },
85
127
  actions: {
86
128
  decisionOutput: {
@@ -103,6 +145,7 @@ const de = {
103
145
  url: "Bitte geben Sie eine gültige URL ein",
104
146
  pattern: "{{field}} hat ein ungültiges Format",
105
147
  formInvalid: "Bitte überprüfen Sie die markierten Felder: {{fields}}",
148
+ formInvalidJoiner: ", ",
106
149
  unique: "{{field}} muss eindeutig sein",
107
150
  type: "{{field}} muss ein gültiger {{type}} sein",
108
151
  },
@@ -111,6 +154,9 @@ const de = {
111
154
  submitFailed: "Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.",
112
155
  discardTitle: "Änderungen verwerfen?",
113
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.",
114
160
  keepEditing: "Weiter bearbeiten",
115
161
  discard: "Verwerfen",
116
162
  conflictTitle: "Speicherkonflikt",
@@ -127,12 +173,21 @@ const de = {
127
173
  stepOf: "Schritt {{current}} von {{total}}",
128
174
  createTitle: "{{object}} erstellen",
129
175
  editTitle: "{{object}} bearbeiten",
176
+ viewTitle: "{{object}} anzeigen",
177
+ createTargetOrg: "Wird in {{org}} erstellt",
130
178
  saveRecord: "Datensatz speichern",
131
179
  create: "Erstellen",
132
180
  update: "Aktualisieren",
133
181
  createSuccess: "{{object}} erfolgreich erstellt",
134
182
  updateSuccess: "{{object}} erfolgreich aktualisiert",
135
183
  deleteSuccess: "{{object}} erfolgreich gelöscht",
184
+ fullscreen: {
185
+ title: "Text bearbeiten",
186
+ description: "Bearbeiten Sie den vollständigen Textwert und speichern oder verwerfen Sie dann Ihre Änderungen.",
187
+ done: "Fertig",
188
+ toggle: "{{label}} im Vollbild bearbeiten",
189
+ textFallback: "Text",
190
+ },
136
191
  },
137
192
  fields: {
138
193
  image: {
@@ -170,7 +225,11 @@ const de = {
170
225
  richText: {
171
226
  format: "Format: {{format}}",
172
227
  basicEditorHint: "Rich-Text-Editor (einfach)",
173
- placeholder: "Text eingeben...",
228
+ placeholder: "Text eingeben…",
229
+ },
230
+ options: {
231
+ empty: "Keine Optionen verfügbar",
232
+ selectFirst: "Zuerst {{fields}} auswählen",
174
233
  },
175
234
  objectRef: {
176
235
  loading: "Objekte werden geladen…",
@@ -199,6 +258,13 @@ const de = {
199
258
  editAsJson: "Als JSON bearbeiten",
200
259
  useVisualBuilder: "Visuellen Builder verwenden",
201
260
  },
261
+ tags: {
262
+ placeholder: "Tippen und mit der Eingabetaste hinzufügen…",
263
+ },
264
+ textarea: {
265
+ characterCount: "Zeichenanzahl: {{count}} von {{max}}",
266
+ charactersRemaining: "Verbleibende Zeichen: {{count}}",
267
+ },
202
268
  },
203
269
  table: {
204
270
  rowsPerPage: "Zeilen pro Seite",
@@ -225,7 +291,7 @@ const de = {
225
291
  saveAll: "Alle speichern ({{count}})",
226
292
  addRecord: "Datensatz hinzufügen",
227
293
  open: "Öffnen",
228
- search: "Suchen...",
294
+ search: "Suchen…",
229
295
  modified: "{{count}} Zeile geändert",
230
296
  saveFailed: 'Speichern fehlgeschlagen',
231
297
  selected: "{{count}} ausgewählt",
@@ -269,7 +335,7 @@ const de = {
269
335
  delete: "Löschen",
270
336
  export: "Exportieren",
271
337
  exportAs: "Exportieren als {{format}}",
272
- loading: "Raster wird geladen...",
338
+ loading: "Raster wird geladen…",
273
339
  errorLoading: "Fehler beim Laden des Rasters",
274
340
  pullToRefresh: "Zum Aktualisieren ziehen",
275
341
  refreshing: "Wird aktualisiert…",
@@ -280,6 +346,22 @@ const de = {
280
346
  yes: "Ja",
281
347
  no: "Nein",
282
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
+ },
283
365
  toolbar: {
284
366
  densityMode: "Dichte",
285
367
  densityCompact: "Kompakt",
@@ -393,12 +475,12 @@ const de = {
393
475
  templateName: "Vorlagenname",
394
476
  save: "Speichern",
395
477
  deleteTemplate: "Vorlage löschen",
396
- savedMapping: 'Saved mapping:',
397
- chooseSavedMapping: 'Choose a saved mapping…',
398
- manualMapping: '— Map columns manually —',
399
- transform: 'Transform',
400
- savedMappingHint: 'Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.',
401
- 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.',
402
484
  csvColumn: "Spalte",
403
485
  mapsTo: "Zugeordnet zu",
404
486
  typeMismatch: "Sieht aus wie {{type}}",
@@ -458,6 +540,8 @@ const de = {
458
540
  loadErrorUnauthorizedMessage: "Ihre Sitzung ist abgelaufen oder Sie sind abgemeldet. Melden Sie sich erneut an, um diese Datensätze anzuzeigen.",
459
541
  loadErrorRejectedTitle: "Die Abfrage dieser Ansicht wurde abgelehnt",
460
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.",
461
545
  retry: "Erneut versuchen",
462
546
  managedBy: {
463
547
  system: {
@@ -482,7 +566,7 @@ const de = {
482
566
  },
483
567
  },
484
568
  refresh: "Aktualisieren",
485
- loading: 'Loading records...',
569
+ loading: "Datensätze werden geladen…",
486
570
  recordCount: "{{count}} Datensätze",
487
571
  recordCountOne: "{{count}} Datensatz",
488
572
  addRecord: "Datensatz hinzufügen",
@@ -494,7 +578,8 @@ const de = {
494
578
  sort: "Sortieren",
495
579
  sortRecords: "Datensätze sortieren",
496
580
  sortByIdSuffix: "(nach ID)",
497
- sortRelationalHint: "Spalten, die auf einen anderen Datensatz verweisen, werden nicht aufgeführt: Sie lassen sich nur nach der gespeicherten ID sortieren, nicht nach dem in der Zelle angezeigten Namen. Fügen Sie ein Formelfeld mit diesem Namen hinzu, um danach zu sortieren.",
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",
498
583
  group: "Gruppieren",
499
584
  groupBy: "Gruppieren nach",
500
585
  export: "Exportieren",
@@ -552,13 +637,16 @@ const de = {
552
637
  },
553
638
  kanban: {
554
639
  uncategorized: "Nicht kategorisiert",
640
+ columns: "Spalten",
555
641
  addCard: "Karte hinzufügen",
556
642
  addColumn: "Spalte hinzufügen",
557
643
  moveCard: "Karte verschieben",
558
644
  deleteCard: "Karte löschen",
559
645
  deleteColumn: "Spalte löschen",
560
646
  noCards: "Keine Karten",
561
- 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.",
562
650
  },
563
651
  timeline: {
564
652
  bucket: {
@@ -571,6 +659,13 @@ const de = {
571
659
  noDate: "Kein Datum",
572
660
  unassigned: "Nicht zugewiesen",
573
661
  },
662
+ scale: {
663
+ week: "Woche {{n}}",
664
+ quarter: "Q{{quarter}} {{year}}",
665
+ },
666
+ gantt: {
667
+ rowLabel: "Elemente",
668
+ },
574
669
  },
575
670
  gantt: {
576
671
  viewMode: {
@@ -617,6 +712,18 @@ const de = {
617
712
  ff: "Ende → Ende",
618
713
  sf: "Anfang → Ende",
619
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
+ },
620
727
  conflict: {
621
728
  title: "Terminkonflikt",
622
729
  body: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?",
@@ -625,8 +732,8 @@ const de = {
625
732
  },
626
733
  autoScheduleDlg: {
627
734
  title: "Automatisch planen",
628
- body: "{count} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
629
- skipped: "{count} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
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.",
630
737
  confirm: "Anwenden",
631
738
  cancel: "Abbrechen",
632
739
  none: "Alle Abhängigkeiten sind erfüllt — nichts neu zu planen.",
@@ -637,6 +744,12 @@ const de = {
637
744
  over: "überlastet",
638
745
  empty: "Keine Vorgänge zum Zuweisen.",
639
746
  },
747
+ quickFilter: {
748
+ all: "Alle",
749
+ clear: "Filter zurücksetzen",
750
+ empty: "Keine Optionen",
751
+ resultSummary: "{shown} / {total} Vorgänge werden angezeigt",
752
+ },
640
753
  readOnly: "Schreibgeschützt",
641
754
  readOnlyHint: "Die Bearbeitung ist in dieser Ansicht deaktiviert.",
642
755
  lockedHint: "Keine Bearbeitungsberechtigung",
@@ -657,6 +770,7 @@ const de = {
657
770
  exportPng: "Als PNG exportieren",
658
771
  exportPdf: "PDF exportieren",
659
772
  saveLayout: "Layout speichern",
773
+ refresh: "Aktualisieren",
660
774
  undo: "Rückgängig",
661
775
  redo: "Wiederholen",
662
776
  prevPeriod: "Vorherige Periode",
@@ -697,11 +811,11 @@ const de = {
697
811
  defaultBadge: "Standard",
698
812
  tabActionsFor: "Ansichtsaktionen für {{name}}",
699
813
  readonlyAriaLabel: "Schreibgeschützte Ansicht",
700
- readonlyTooltip: "Systemansicht — zum Anpassen duplizieren.",
814
+ readonlyTooltip: "Systemansicht — im Code definiert, schreibgeschützt.",
701
815
  },
702
816
  designer: {
703
- undo: 'Undo',
704
- redo: 'Redo',
817
+ undo: "Rückgängig",
818
+ redo: "Wiederholen",
705
819
  },
706
820
  detail: {
707
821
  editInlineHint: "Zum Bearbeiten doppelklicken",
@@ -719,6 +833,15 @@ const de = {
719
833
  viewHistory: "Verlauf anzeigen",
720
834
  delete: "Löschen",
721
835
  moreActions: "Weitere Aktionen",
836
+ addReaction: "Reaktion hinzufügen",
837
+ pageHeaderActions: "Aktionen der Seitenkopfzeile",
838
+ emojiPicker: "Emoji-Auswahl",
839
+ reactionCount: "{{emoji}} {{count}} Reaktionen",
840
+ reactionCountOne: "{{emoji}} {{count}} Reaktion",
841
+ recordDetail: "Datensatzdetails",
842
+ recordDetailWithLabel: "{{label}}-Details",
843
+ openAsFullPage: "Als ganze Seite öffnen",
844
+ recordDetailOverlay: "Detail-Overlay des Datensatzes für {{title}}.",
722
845
  addToFavorites: "Zu Favoriten hinzufügen",
723
846
  removeFromFavorites: "Aus Favoriten entfernen",
724
847
  previousRecord: "Vorheriger Datensatz",
@@ -732,13 +855,15 @@ const de = {
732
855
  relatedRecords: "{{count}} Datensätze",
733
856
  relatedRecordOne: "{{count}} Datensatz",
734
857
  noRelatedRecords: "Keine verknüpften Datensätze gefunden",
735
- loading: "Laden...",
858
+ loading: "Laden…",
736
859
  copyToClipboard: "In Zwischenablage kopieren",
737
860
  copied: "Kopiert!",
738
861
  deleteConfirmation: "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
862
+ deleted: "Datensatz gelöscht",
739
863
  editRecord: "Datensatz bearbeiten",
740
864
  viewAll: "Alle anzeigen",
741
865
  new: "Neu",
866
+ add: "Hinzufügen",
742
867
  emptyValue: "—",
743
868
  comments: "Kommentare",
744
869
  searchComments: "Kommentare suchen…",
@@ -803,6 +928,7 @@ const de = {
803
928
  loadMore: "Mehr laden",
804
929
  edited: "(bearbeitet)",
805
930
  via: "über {{source}}",
931
+ viewSource: "Quelle anzeigen",
806
932
  replyCount: "{{count}} Antwort",
807
933
  replyCountPlural: "{{count}} Antworten",
808
934
  replyPlaceholder: "Antworten…",
@@ -815,14 +941,15 @@ const de = {
815
941
  saving: "Speichern…",
816
942
  lockedByApproval: "Zur Genehmigung gesperrt",
817
943
  lockedTooltip: "Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; die Bearbeitung ist gesperrt",
818
- writeStrippedTitle: "Einige Felder wurden nicht gespeichert",
819
- writeStrippedReadonly: "Schreibgeschützt und daher nicht gespeichert: {{fields}}",
820
- writeStrippedByState: "Im aktuellen Status dieses Datensatzes nicht bearbeitbar und daher nicht gespeichert: {{fields}}",
944
+ writeStrippedTitle: "Gespeichert — einige Felder wurden jedoch nicht übernommen",
945
+ writeStrippedReadonly: "Schreibgeschützt und daher nicht übernommen: {{fields}}",
946
+ writeStrippedByState: "Im aktuellen Status dieses Datensatzes nicht bearbeitbar und daher nicht übernommen: {{fields}}",
821
947
  approvalPendingEditable: "In Genehmigung · bearbeitbar",
822
948
  approvalPendingTooltip: "Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; dieser Schritt erlaubt weiterhin die Bearbeitung",
823
949
  approvalProgress: "Genehmigungen — {{got}} von {{need}}",
824
950
  approvalProgressGroups: "Freigabe — {{got}} von {{need}} Gruppen",
825
951
  approvalProgressLabel: "Genehmigungsfortschritt",
952
+ approvalsPanelTitle: "Genehmigungen",
826
953
  cancelApproval: "Genehmigung zurückziehen",
827
954
  cancelApprovalInFlight: "Zurückziehen…",
828
955
  cancelApprovalTooltip: "Ausstehende Genehmigungsanfrage zurückziehen, um den Datensatz zu entsperren",
@@ -843,9 +970,11 @@ const de = {
843
970
  concurrentUpdateReload: "Aktuelle Version laden",
844
971
  concurrentUpdateOverwrite: "Trotzdem überschreiben",
845
972
  concurrentUpdateCancel: "Abbrechen",
973
+ concurrentUpdateRecordLabel: "diesem Datensatz",
846
974
  openInNewTab: "In neuem Tab öffnen",
847
975
  activity: "Aktivität",
848
976
  history: "Verlauf",
977
+ historyEmpty: "Noch kein Verlauf",
849
978
  editRow: "Bearbeiten",
850
979
  deleteRow: "Löschen",
851
980
  deleteRowConfirmation: "Möchten Sie diesen Datensatz wirklich löschen?",
@@ -855,12 +984,15 @@ const de = {
855
984
  nextPage: "Weiter",
856
985
  pageOf: "Seite {{current}} von {{total}}",
857
986
  sortBy: "Sortieren nach",
858
- filterPlaceholder: "Filtern...",
987
+ filterPlaceholder: "Filtern…",
859
988
  highlightFields: "Schlüsselfelder",
860
989
  createdBy: "Erstellt von",
861
990
  updatedBy: "Aktualisiert von",
862
991
  created: "Erstellt",
863
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",
864
996
  showEmptyRelated_one: "+ {{count}} leer",
865
997
  showEmptyRelated_other: "+ {{count}} leer",
866
998
  copyEmail: "E-Mail kopieren",
@@ -872,7 +1004,8 @@ const de = {
872
1004
  },
873
1005
  chart: {
874
1006
  noData: "Keine Diagrammdaten verfügbar",
875
- loading: "Diagramm wird geladen...",
1007
+ loading: "Diagramm wird geladen…",
1008
+ nullCategory: "(Ohne Angabe)",
876
1009
  },
877
1010
  map: {
878
1011
  searchLocations: "Orte suchen…",
@@ -894,8 +1027,8 @@ const de = {
894
1027
  properties: "Eigenschaften",
895
1028
  connections: "Verbindungen",
896
1029
  quickConnect: "Schnellverbindung",
897
- fromPlaceholder: "Von...",
898
- toPlaceholder: "Nach...",
1030
+ fromPlaceholder: "Von…",
1031
+ toPlaceholder: "Nach…",
899
1032
  connect: "Verbinden",
900
1033
  label: "Bezeichnung",
901
1034
  type: "Typ",
@@ -943,6 +1076,7 @@ const de = {
943
1076
  },
944
1077
  dashboard: {
945
1078
  noRows: "Keine Zeilen",
1079
+ loading: "Wird geladen…",
946
1080
  pickMeasures: "Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.",
947
1081
  datasetUnsupported: "Diese Datenquelle unterstützt keine Dataset-Abfragen.",
948
1082
  details: "Details",
@@ -1200,6 +1334,7 @@ const de = {
1200
1334
  },
1201
1335
  },
1202
1336
  console: {
1337
+ saveAdvisoryTitle: "Gespeichert — die Autorenprüfung ergab {{count}} Hinweis(e)",
1203
1338
  settingsHub: {
1204
1339
  title: "Einstellungen",
1205
1340
  subtitle: "Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.",
@@ -1266,7 +1401,7 @@ const de = {
1266
1401
  shareTitle: "Diese Unterhaltung teilen",
1267
1402
  shareDisabledTitle: "Beginnen Sie zu chatten, um das Teilen zu aktivieren",
1268
1403
  newChat: "Neu",
1269
- searchChats: "Chats durchsuchen...",
1404
+ searchChats: "Chats durchsuchen…",
1270
1405
  noChatsYet: "Noch keine Chats",
1271
1406
  noChatsDescription: "Starten Sie eine neue Unterhaltung, um sie hier zu sehen.",
1272
1407
  noMatchingChats: "Keine passenden Chats.",
@@ -1275,18 +1410,18 @@ const de = {
1275
1410
  deleteConversation: "Unterhaltung löschen",
1276
1411
  saveRename: "Umbenennung speichern",
1277
1412
  cancelRename: "Umbenennung abbrechen",
1278
- loadingHistory: "Unterhaltungsverlauf wird geladen...",
1413
+ loadingHistory: "Unterhaltungsverlauf wird geladen…",
1279
1414
  conversationReady: "Unterhaltung bereit",
1280
1415
  preparingConversation: "Neue Unterhaltung wird vorbereitet",
1281
1416
  offlineDemoMode: "Offline-Demomodus — Agentenliste nicht verfügbar",
1282
1417
  sendFailedRateLimited: "Sie senden zu schnell Nachrichten. Ihre Nachricht wird unten aufbewahrt — warten Sie einen Moment und versuchen Sie es erneut.",
1283
1418
  sendFailedGeneric: "Ihre Nachricht konnte nicht gesendet werden. Sie wird unten aufbewahrt — bitte versuchen Sie es erneut.",
1284
- askAgent: "{{agent}} fragen...",
1419
+ askAgent: "{{agent}} fragen…",
1285
1420
  assistant: "Assistent",
1286
1421
  liveCanvas: "Live-Vorschau — {{app}} (Entwurf)",
1287
1422
  liveCanvasUnlisted: "Live-App — {{app}} (nicht gelistet bis zur Veröffentlichung)",
1288
- loadingAgents: "Agenten werden geladen...",
1289
- askAnything: "Fragen Sie irgendetwas...",
1423
+ loadingAgents: "Agenten werden geladen…",
1424
+ askAnything: "Fragen Sie irgendetwas…",
1290
1425
  emptyTitle: "Unterhaltung beginnen",
1291
1426
  emptyDescription: "Fragen Sie irgendetwas — der Assistent hat Zugriff auf den Kontext Ihrer aktuellen App.",
1292
1427
  switchAssistant: "Assistenten wechseln",
@@ -1389,9 +1524,60 @@ const de = {
1389
1524
  createSeed: "Beispieldaten erzeugen",
1390
1525
  createPackage: "App-Paket erstellen",
1391
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
+ },
1392
1578
  },
1393
1579
  title: "ObjectStack Konsole",
1394
- initializing: "Anwendung wird initialisiert...",
1580
+ initializing: "Anwendung wird initialisiert…",
1395
1581
  loadingHint: "Die Einrichtung einer neuen Umgebung kann einen Moment dauern.",
1396
1582
  breadcrumb: {
1397
1583
  dashboards: "Dashboards",
@@ -1399,6 +1585,31 @@ const de = {
1399
1585
  reports: "Berichte",
1400
1586
  system: "System",
1401
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
+ },
1402
1613
  loadingSteps: {
1403
1614
  connecting: "Verbindung zur Datenquelle herstellen",
1404
1615
  loadingConfig: "Konfiguration laden",
@@ -1414,6 +1625,13 @@ const de = {
1414
1625
  retry: "Erneut versuchen",
1415
1626
  retrying: "Wird wiederholt…",
1416
1627
  },
1628
+ serverAction: {
1629
+ openingTitle: "Wird geöffnet…",
1630
+ openingBody: "Wird geöffnet… das kann einen Moment dauern.",
1631
+ popupBlockedTitle: "Pop-up blockiert",
1632
+ popupBlockedDescription: "Der Browser hat das Öffnen des neuen Tabs blockiert.",
1633
+ popupBlockedAction: "In neuem Tab öffnen",
1634
+ },
1417
1635
  shortcuts: {
1418
1636
  title: "Tastenkürzel",
1419
1637
  description: "Kurzreferenz für alle verfügbaren Tastenkürzel.",
@@ -1421,6 +1639,7 @@ const de = {
1421
1639
  general: "Allgemein",
1422
1640
  navigation: "Navigation",
1423
1641
  dataViews: "Datenansichten",
1642
+ aiChat: "KI-Assistent",
1424
1643
  preferences: "Einstellungen",
1425
1644
  },
1426
1645
  openCommandPalette: "Befehlspalette öffnen",
@@ -1431,11 +1650,13 @@ const de = {
1431
1650
  createRecord: "Neuen Datensatz erstellen",
1432
1651
  refreshData: "Daten aktualisieren",
1433
1652
  editRecord: "Ausgewählten Datensatz bearbeiten",
1653
+ newChat: "Neuer Chat",
1654
+ toggleChatsList: "Chatliste umschalten",
1434
1655
  toggleDarkMode: "Dunkelmodus umschalten",
1435
1656
  },
1436
1657
  commandPalette: {
1437
1658
  title: "Befehlspalette",
1438
- placeholder: "Befehl eingeben oder suchen...",
1659
+ placeholder: "Befehl eingeben oder suchen…",
1439
1660
  noResults: "Keine Ergebnisse gefunden.",
1440
1661
  objects: "Objekte",
1441
1662
  dashboards: "Dashboards",
@@ -1461,6 +1682,12 @@ const de = {
1461
1682
  goHome: "Zur Startseite",
1462
1683
  errorDetails: "Fehlerdetails (nur Entwicklung)",
1463
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
+ },
1464
1691
  theme: {
1465
1692
  toggle: "Design umschalten",
1466
1693
  light: "Hell",
@@ -1476,11 +1703,15 @@ const de = {
1476
1703
  viewNameHelp: "Technischer Schlüssel (snake_case). Wird aus dem Titel automatisch gefüllt — bei Bedarf anpassen.",
1477
1704
  viewNameRequired: "Geben Sie einen Schlüssel ein (Kleinbuchstaben, Ziffern, Unterstrich). Bei nicht-lateinischen Titeln wird er nicht automatisch gefüllt.",
1478
1705
  viewNameInvalid: "Verwenden Sie Kleinbuchstaben, Ziffern und Unterstriche; beginnen Sie mit einem Buchstaben oder Unterstrich.",
1479
- systemViewReadonly: 'System view defined in code - duplicate to customize.',
1480
- 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",
1481
1710
  objectNotFound: "Objekt nicht gefunden",
1482
- objectNotFoundDescription: "Das Objekt „{{objectName}}\" existiert in der aktuellen Konfiguration nicht.",
1711
+ objectNotFoundDescription: "Das Objekt „{{objectName}}“ existiert in der aktuellen Konfiguration nicht.",
1483
1712
  objectNotFoundHint: "Überprüfen Sie Ihre App-Navigationseinstellungen oder wählen Sie ein anderes Objekt aus der Seitenleiste.",
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.",
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.",
1484
1715
  allRecords: "Alle Datensätze",
1485
1716
  exitDesignMode: "Designmodus beenden",
1486
1717
  enterDesignMode: "Designmodus starten",
@@ -1507,7 +1738,7 @@ const de = {
1507
1738
  exportPrintHint: "Exportformate, Drucken und Anzeige der Datensatzanzahl",
1508
1739
  showAllFields: "Alle anzeigen",
1509
1740
  hideAllFields: "Alle ausblenden",
1510
- searchFields: "Felder suchen...",
1741
+ searchFields: "Felder suchen…",
1511
1742
  title: "Titel",
1512
1743
  description: "Beschreibung",
1513
1744
  data: "Daten",
@@ -1546,7 +1777,7 @@ const de = {
1546
1777
  longitudeField: "Längengradfeld",
1547
1778
  imageField: "Bildfeld",
1548
1779
  dateField: "Datumsfeld",
1549
- selectField: "Feld auswählen...",
1780
+ selectField: "Feld auswählen…",
1550
1781
  gridOptionsHint: "Die Tabellenansicht verwendet die oben konfigurierten Spalten.",
1551
1782
  groupBy: "Gruppieren nach",
1552
1783
  prefixField: "Präfixfeld",
@@ -1582,7 +1813,7 @@ const de = {
1582
1813
  create: "Erstellen",
1583
1814
  delete: "Löschen",
1584
1815
  deleteViewTitle: "Ansicht löschen",
1585
- 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.",
1586
1817
  bulkDeleteConfirm: "{{count}} ausgewählte Datensätze löschen? Dies kann nicht rückgängig gemacht werden.",
1587
1818
  duplicateViewName: "Eine Ansicht mit diesem Namen existiert bereits.",
1588
1819
  viewTypeGrid: "Raster",
@@ -1609,9 +1840,9 @@ const de = {
1609
1840
  latitudeFieldHelp: "Feld mit dem Breitengrad (nur Geo-Felder).",
1610
1841
  longitudeFieldHelp: "Feld mit dem Längengrad (nur Geo-Felder).",
1611
1842
  imageFieldHelp: "Das Galerie-Cover kommt aus diesem Bild- oder Anhangfeld.",
1612
- selectOption: "Auswählen...",
1843
+ selectOption: "Auswählen…",
1613
1844
  noEligibleFieldForType: "Kein geeignetes Feld dieses Typs. Fügen Sie zuerst eines zum Objekt hinzu.",
1614
- viewTypeUnavailable: "Dieses Objekt hat kein Feld, das als „{{field}}\" dienen kann.",
1845
+ viewTypeUnavailable: "Dieses Objekt hat kein Feld, das als „{{field}}“ dienen kann.",
1615
1846
  viewTypeUnavailableShort: "Nicht von diesem Objekt unterstützt.",
1616
1847
  chartType: "Diagrammtyp",
1617
1848
  chartTypeHelp: "Bestimmt, wie die Daten gerendert werden.",
@@ -1659,11 +1890,11 @@ const de = {
1659
1890
  ufDropdown: "Dropdown",
1660
1891
  ufTabs: "Registerkarten",
1661
1892
  ufToggle: "Umschalten",
1662
- ufAddField: "+ Filterfeld hinzufügen...",
1893
+ ufAddField: "+ Filterfeld hinzufügen…",
1663
1894
  ufNoFields: "Keine Felder verfügbar",
1664
1895
  ufAddTab: "+ Registerkarte hinzufügen",
1665
1896
  ufTabLabel: "Bezeichnung",
1666
- ufShowAllRecords: "Registerkarte „Alle Datensätze\" anzeigen",
1897
+ ufShowAllRecords: "Registerkarte „Alle Datensätze“ anzeigen",
1667
1898
  ufAllowAddTab: "Registerkarten hinzufügen erlauben",
1668
1899
  showRecordCount: "Datensatzanzahl anzeigen",
1669
1900
  allowPrinting: "Drucken erlauben",
@@ -1719,7 +1950,7 @@ const de = {
1719
1950
  passwordPlaceholder: "Passwort eingeben",
1720
1951
  forgotPasswordText: "Passwort vergessen?",
1721
1952
  submitButton: "Anmelden",
1722
- submittingButton: "Anmeldung läuft...",
1953
+ submittingButton: "Anmeldung läuft…",
1723
1954
  noAccountText: "Noch kein Konto?",
1724
1955
  signUpText: "Registrieren",
1725
1956
  errors: {
@@ -1727,6 +1958,18 @@ const de = {
1727
1958
  invalidCredentials: "Ungültige E-Mail oder Passwort. Bitte erneut versuchen.",
1728
1959
  emailNotVerified: "Bitte bestätigen Sie Ihre E-Mail-Adresse, bevor Sie sich anmelden.",
1729
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",
1730
1973
  },
1731
1974
  register: {
1732
1975
  title: "Konto erstellen",
@@ -1742,7 +1985,7 @@ const de = {
1742
1985
  passwordMismatchError: "Passwörter stimmen nicht überein",
1743
1986
  passwordTooShortError: "Das Passwort muss mindestens 8 Zeichen lang sein",
1744
1987
  submitButton: "Konto erstellen",
1745
- submittingButton: "Konto wird erstellt...",
1988
+ submittingButton: "Konto wird erstellt…",
1746
1989
  hasAccountText: "Bereits ein Konto?",
1747
1990
  signInText: "Anmelden",
1748
1991
  errors: {
@@ -1763,12 +2006,26 @@ const de = {
1763
2006
  emailLabel: "E-Mail",
1764
2007
  emailPlaceholder: "name@example.com",
1765
2008
  submitButton: "Link zum Zurücksetzen senden",
1766
- submittingButton: "Wird gesendet...",
2009
+ submittingButton: "Wird gesendet…",
1767
2010
  successTitle: "Überprüfen Sie Ihre E-Mails",
1768
2011
  successDescription: "Wir haben einen Link zum Zurücksetzen des Passworts an {{email}} gesendet. Bitte überprüfen Sie Ihren Posteingang.",
1769
2012
  backToSignInText: "Zurück zur Anmeldung",
1770
2013
  rememberPasswordText: "Passwort doch bekannt?",
1771
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.",
1772
2029
  },
1773
2030
  resetPassword: {
1774
2031
  title: "Neues Passwort festlegen",
@@ -1807,6 +2064,8 @@ const de = {
1807
2064
  backToLogin: "Zurück zum Login",
1808
2065
  checkSpam: "E-Mail nicht erhalten? Überprüfen Sie Ihren Spam-Ordner oder kontaktieren Sie den Support.",
1809
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.",
1810
2069
  },
1811
2070
  setup: {
1812
2071
  welcomeTitle: "Willkommen bei ObjectStack",
@@ -1845,6 +2104,9 @@ const de = {
1845
2104
  invalidDescription: "In der URL wurde kein Gerätecode angegeben.",
1846
2105
  loading: "Lade…",
1847
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.",
1848
2110
  },
1849
2111
  shell: {
1850
2112
  tenantHostHint: "Sie melden sich bei diesem Arbeitsbereich an",
@@ -1884,6 +2146,29 @@ const de = {
1884
2146
  },
1885
2147
  },
1886
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
+ },
1887
2172
  profile: {
1888
2173
  title: "Profil",
1889
2174
  subtitle: "Verwalten Sie Ihre Kontoeinstellungen",
@@ -1945,6 +2230,8 @@ const de = {
1945
2230
  invite: "Mitglied einladen",
1946
2231
  members: "Mitglieder",
1947
2232
  settings: "Arbeitsbereichseinstellungen",
2233
+ multiOrgDisabled: "Das Erstellen neuer Organisationen ist auf dieser Instanz deaktiviert.",
2234
+ createFailed: 'Arbeitsbereich konnte nicht erstellt werden',
1948
2235
  },
1949
2236
  help: {
1950
2237
  onThisPage: "Auf dieser Seite",
@@ -1955,7 +2242,7 @@ const de = {
1955
2242
  },
1956
2243
  sidebar: {
1957
2244
  packageManagement: "Paketverwaltung",
1958
- searchNavigation: "Navigation durchsuchen...",
2245
+ searchNavigation: "Navigation durchsuchen…",
1959
2246
  settings: "Einstellungen",
1960
2247
  help: "Hilfe",
1961
2248
  helpTooltip: "Hilfe und Dokumentation",
@@ -1979,8 +2266,8 @@ const de = {
1979
2266
  switchObject: "Objekt wechseln",
1980
2267
  connection: {
1981
2268
  connected: "Verbunden",
1982
- connecting: "Verbindung wird hergestellt...",
1983
- reconnecting: "Verbindung wird wiederhergestellt...",
2269
+ connecting: "Verbindung wird hergestellt…",
2270
+ reconnecting: "Verbindung wird wiederhergestellt…",
1984
2271
  disconnected: "Getrennt",
1985
2272
  error: "Verbindungsfehler",
1986
2273
  },
@@ -2019,6 +2306,14 @@ const de = {
2019
2306
  publishing: "Wird veröffentlicht…",
2020
2307
  published: "Veröffentlicht! Ihre Änderungen sind live.",
2021
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.",
2022
2317
  },
2023
2318
  title: "Startseite",
2024
2319
  subtitle: "Ihr Arbeitsbereich-Dashboard",
@@ -2032,7 +2327,7 @@ const de = {
2032
2327
  title: "Erfordert Ihre Aufmerksamkeit",
2033
2328
  empty: "Alles erledigt",
2034
2329
  },
2035
- loading: "Arbeitsbereich wird geladen...",
2330
+ loading: "Arbeitsbereich wird geladen…",
2036
2331
  recent: "Kürzlich",
2037
2332
  starred: "Mit Stern",
2038
2333
  welcome: "Willkommen bei ObjectUI",
@@ -2078,7 +2373,7 @@ const de = {
2078
2373
  },
2079
2374
  gettingStarted: {
2080
2375
  title: "Startseite anpassen",
2081
- 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.",
2082
2377
  cta: "Alle Anwendungen durchsuchen",
2083
2378
  },
2084
2379
  },
@@ -2093,6 +2388,9 @@ const de = {
2093
2388
  roles: "Rollen",
2094
2389
  configuration: "Konfiguration",
2095
2390
  createApp: "App erstellen",
2391
+ administration: "Verwaltung",
2392
+ datasources: "Datenquellen",
2393
+ documentation: "Dokumentation",
2096
2394
  },
2097
2395
  appSwitcher: {
2098
2396
  switchApplication: "Anwendung wechseln",
@@ -2132,10 +2430,10 @@ const de = {
2132
2430
  search: {
2133
2431
  title: "Suche",
2134
2432
  back: "Zurück",
2135
- placeholder: "Objekte, Dashboards, Seiten, Berichte suchen...",
2433
+ placeholder: "Objekte, Dashboards, Seiten, Berichte suchen…",
2136
2434
  inputAriaLabel: "Objekte, Dashboards, Seiten, Berichte suchen",
2137
- resultsCount: "{{count}} Ergebnis für „{{query}}\"",
2138
- resultsCountPlural: "{{count}} Ergebnisse für „{{query}}\"",
2435
+ resultsCount: "{{count}} Ergebnis für „{{query}}“",
2436
+ resultsCountPlural: "{{count}} Ergebnisse für „{{query}}“",
2139
2437
  itemsAvailable: "{{count}} Elemente verfügbar",
2140
2438
  noResults: "Keine Ergebnisse gefunden",
2141
2439
  noResultsHint: "Versuchen Sie, Ihre Suchbegriffe anzupassen",
@@ -2150,15 +2448,21 @@ const de = {
2150
2448
  },
2151
2449
  empty: {
2152
2450
  objectNotFound: "Objekt nicht gefunden",
2153
- 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.",
2154
2453
  pageNotFound: "Seite nicht gefunden",
2155
- 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.",
2156
2455
  dashboardNotFound: "Dashboard nicht gefunden",
2157
- 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.",
2158
2457
  reportNotFound: "Bericht nicht gefunden",
2159
- 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.",
2160
2459
  noAppsConfigured: "Keine Apps konfiguriert",
2161
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",
2162
2466
  createFirstApp: "Erste App erstellen",
2163
2467
  systemSettings: "Systemeinstellungen",
2164
2468
  back: "Zurück",
@@ -2204,12 +2508,12 @@ const de = {
2204
2508
  delete: "Löschen",
2205
2509
  },
2206
2510
  navigationSync: {
2207
- addedPage: "Navigation aktualisiert: Seite „{{name}}\" hinzugefügt",
2208
- addedDashboard: "Navigation aktualisiert: Dashboard „{{name}}\" hinzugefügt",
2209
- removedPage: "Navigation aktualisiert: Seite „{{name}}\" entfernt",
2210
- removedDashboard: "Navigation aktualisiert: Dashboard „{{name}}\" entfernt",
2211
- renamedPage: "Navigation aktualisiert: Seite „{{oldName}}\" in „{{newName}}\" umbenannt",
2212
- 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",
2213
2517
  undoLabel: "Rückgängig",
2214
2518
  undone: "Navigationsänderung rückgängig gemacht",
2215
2519
  undoFailed: "Navigationsänderung konnte nicht rückgängig gemacht werden",
@@ -2230,7 +2534,7 @@ const de = {
2230
2534
  deleteFailed: "Ansicht konnte nicht gelöscht werden",
2231
2535
  },
2232
2536
  dashboardActions: {
2233
- pdfPreparing: "PDF-Export wird vorbereitet…",
2537
+ printDialogOpening: "Druckdialog Ihres Browsers wird geöffnet (kein PDF-Export)",
2234
2538
  exportFailed: "Export fehlgeschlagen: {{message}}",
2235
2539
  forecastSoon: "Prognoseansicht kommt bald",
2236
2540
  },
@@ -2274,111 +2578,7 @@ const de = {
2274
2578
  first: "Erster",
2275
2579
  },
2276
2580
  editor: {
2277
- breadcrumb: "Konfiguration",
2278
- basic: "Allgemein",
2279
- title: "Titel",
2280
- titlePlaceholder: "z. B. Pipeline nach Quartal",
2281
- description: "Beschreibung",
2282
- descriptionPlaceholder: "Was zeigt dieser Bericht?",
2283
- type: "Berichtstyp",
2284
- typeTabular: "Tabellarisch — flache Liste",
2285
- typeSummary: "Zusammenfassung — gruppiert mit Summen",
2286
- typeMatrix: "Matrix — Pivot Zeilen × Spalten",
2287
- typeJoined: "Verbunden — mehrere Blöcke",
2288
- typeHelp: "Wählen Sie das Layout, das zu Ihrer gewünschten Ansicht passt.",
2289
- data: "Daten",
2290
- objectName: "Datenquelle",
2291
- objectNamePlaceholder: "z. B. opportunity",
2292
- objectNameHelp: "Welches Objekt soll dieser Bericht abfragen?",
2293
- limit: "Zeilenlimit",
2294
- limitPlaceholder: "z. B. 100",
2295
- columns: "Spalten",
2296
- columnsHint: "Wählen Sie die Felder, die als Spalten erscheinen. Fügen Sie in Zusammenfassungs- oder Matrixberichten Aggregationen (Summe, Anzahl …) hinzu.",
2297
- filters: "Filter",
2298
- filtersHint: "Schränken Sie die Zeilen ein, die in diesen Bericht aufgenommen werden.",
2299
- filtersComplex: "Dieser Bericht verwendet einen erweiterten Filter, der hier nicht bearbeitet werden kann. Beim Speichern bleibt er unverändert.",
2300
- groupBy: "Gruppieren nach",
2301
- groupByHint: "Daten gruppieren und Zwischensummen berechnen.",
2302
- rows: "Zeilen",
2303
- rowsHint: "Zeilen nach diesen Feldern gruppieren.",
2304
- columnsAxis: "Spalten",
2305
- columnsAxisHint: "Diese Felder oben als Pivot anordnen.",
2306
- values: "Werte",
2307
- valuesHint: "In jeder Zelle angezeigte Zahlen. Wählen Sie ein oder mehrere Felder und setzen Sie eine Aggregation (Summe, Anzahl …).",
2308
- grouping: "Gruppierung",
2309
- addGrouping: "Gruppierung hinzufügen",
2310
- dateGranularity: "Datumsgranularität",
2311
- dateGranularityNone: "(Rohwert verwenden)",
2312
- day: "Tag",
2313
- week: "Woche",
2314
- month: "Monat",
2315
- quarter: "Quartal",
2316
- year: "Jahr",
2317
- sortAsc: "Aufsteigend",
2318
- sortDesc: "Absteigend",
2319
- chart: "Diagramm",
2320
- chartHint: "Optionale Visualisierung neben der Tabelle.",
2321
- chartType: "Diagrammtyp",
2322
- chartTitle: "Diagrammtitel",
2323
- chartTitlePlaceholder: "Standardmäßig der Berichtstitel",
2324
- chartXAxis: "X-Achse (Kategorie)",
2325
- chartYAxis: "Y-Achse (Wert)",
2326
- chartShowLegend: "Legende anzeigen",
2327
- chartShowDataLabels: "Datenbeschriftungen anzeigen",
2328
- chartNone: "(kein Diagramm)",
2329
- chartBar: "Balken",
2330
- chartLine: "Linie",
2331
- chartArea: "Fläche",
2332
- chartPie: "Kreis",
2333
- chartDonut: "Donut",
2334
- chartFunnel: "Trichter",
2335
- validationNeedsObject: "Wählen Sie eine Datenquelle, bevor Sie Spalten hinzufügen.",
2336
- validationMatrixNeedsRowsCols: "Matrixberichte benötigen mindestens eine Zeile und eine Spalte.",
2337
- validationSummaryNeedsRows: "Zusammenfassungsberichte benötigen mindestens ein Gruppierungsfeld.",
2338
- blocks: "Blöcke",
2339
- blocksHint: "Jeder Block ist eine eigene Tabelle oder ein eigenes Diagramm. Blockfilter werden mit dem Berichtsfilter UND-verknüpft.",
2340
- addBlock: "Block hinzufügen",
2341
- removeBlock: "Block entfernen",
2342
- blockName: "Blockname",
2343
- blockNamePlaceholder: "eindeutiger_blockname",
2344
- blockLabel: "Anzeigename",
2345
- blockLabelPlaceholder: "Wird über dem Block angezeigt",
2346
- blockDescription: "Beschreibung",
2347
- blockDescriptionPlaceholder: "Optionaler Kontext für diesen Block",
2348
- validationJoinedNeedsBlocks: "Verbundene Berichte benötigen mindestens einen Block.",
2349
- validationBlockNameRequired: "Jeder Block benötigt einen nicht leeren Namen.",
2350
- validationBlockNameDuplicate: "Blocknamen müssen innerhalb des Berichts eindeutig sein.",
2351
- validationBlockNeedsColumns: "Jeder Block benötigt mindestens eine Spalte.",
2352
- noneOption: "(keine)",
2353
- addCondition: "Bedingung hinzufügen",
2354
- combineLogic: "Verknüpfen mit",
2355
- opContains: "enthält",
2356
- opIsEmpty: "ist leer",
2357
- opIsNotEmpty: "ist nicht leer",
2358
- formatAuto: "Automatisch",
2359
- formatCurrency: "Währung",
2360
- formatPercent: "Prozent",
2361
- formatInteger: "Ganzzahl",
2362
- formatDate: "Datum",
2363
- formatDatetime: "Datum und Uhrzeit",
2364
- columnLabelPlaceholder: "Bezeichnung überschreiben",
2365
- aggregateColumn: "Aggregation",
2366
- formatColumn: "Format",
2367
- addColumns: "Spalten hinzufügen",
2368
- searchFields: "Felder suchen…",
2369
- noMatchingFields: "Keine Felder entsprechen Ihrer Suche.",
2370
- noFieldsAvailable: "Keine Felder verfügbar.",
2371
- columnsCount: "{n} Spalte(n) ausgewählt",
2372
- columnsEmpty: "Noch keine Spalten ausgewählt.",
2373
- fieldPickerTitle: "Felder auswählen",
2374
- fieldPickerDescription: "Wählen Sie ein oder mehrere Felder aus. Verwenden Sie das Suchfeld, um die Liste einzugrenzen.",
2375
- fieldPickerChangeTitle: "Feld ändern",
2376
- fieldPickerAddGroupingTitle: "Gruppierung hinzufügen",
2377
- fieldPickerEmpty: "(Feld auswählen)",
2378
- fieldPickerSelected: "{n} ausgewählt",
2379
- fieldPickerClear: "Auswahl aufheben",
2380
- fieldPickerAdd: "Hinzufügen",
2381
- fieldPickerAddN: "{n} hinzufügen",
2581
+ panelTitle: "Bericht bearbeiten",
2382
2582
  },
2383
2583
  },
2384
2584
  organizations: {
@@ -2395,6 +2595,140 @@ const de = {
2395
2595
  emptyDescription: "Erstellen Sie Ihre erste Organisation, um loszulegen.",
2396
2596
  noMatches: "Keine Organisationen entsprechen Ihrer Suche.",
2397
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
+ },
2398
2732
  notifications: {
2399
2733
  regionLabel: "Benachrichtigungen",
2400
2734
  groupCount: "{{count}} Benachrichtigungen",
@@ -2408,6 +2742,9 @@ const de = {
2408
2742
  viewApprovals: "Genehmigungen anzeigen",
2409
2743
  noPendingApprovals: "Keine ausstehenden Genehmigungen",
2410
2744
  openApprovalsInbox: "Genehmigungs-Posteingang öffnen",
2745
+ badgeTotal: "{{total}} insgesamt",
2746
+ badgeNotifications: "{{unread}} Benachrichtigungen",
2747
+ badgeApprovals: "{{approvals}} ausstehende Genehmigungen",
2411
2748
  emptyUnread: "Alles gelesen",
2412
2749
  filterUnread: "Ungelesen",
2413
2750
  filterAll: "Alle",
@@ -2694,6 +3031,7 @@ const de = {
2694
3031
  dismiss: "Schließen",
2695
3032
  openOnCloud: "In der Cloud öffnen",
2696
3033
  backHome: "Zurück zur Startseite",
3034
+ updateTo: "Aktualisieren",
2697
3035
  },
2698
3036
  install: {
2699
3037
  dialogTitle: "{{name}} installieren",
@@ -2706,10 +3044,41 @@ const de = {
2706
3044
  noPermission: "Sie haben keine Berechtigung, Apps in einer Umgebung zu installieren. Nur Organisationsinhaber und Administratoren können installieren.",
2707
3045
  signInFirst: "Sie müssen sich zuerst bei ObjectStack Cloud anmelden.",
2708
3046
  success: "Erfolgreich installiert. Öffnen Sie die Umgebung, um die neue App zu sehen.",
2709
- 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.",
2710
3048
  localManifestConflict: "{{message}}\nHinweis: Eine lokale App besitzt bereits diese manifest_id. Entfernen Sie sie zuerst aus objectstack.config.ts.",
2711
3049
  localUnauthorized: "Melden Sie sich zuerst in diesem Laufzeitsystem an.",
2712
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
+ },
2713
3082
  },
2714
3083
  uninstall: {
2715
3084
  confirm: "{{manifestId}} v{{version}} aus diesem Laufzeitsystem deinstallieren?\n\nDas zwischengespeicherte Manifest wird entfernt.",
@@ -2898,14 +3267,14 @@ const de = {
2898
3267
  bulkApproved: '{{count}} Anfragen genehmigt',
2899
3268
  bulkRejected: '{{count}} Anfragen abgelehnt',
2900
3269
  bulkPartial: '{{ok}} erfolgreich, {{fail}} fehlgeschlagen: {{which}}',
2901
- rejectOneTitle: '"{{title}}" ablehnen?',
3270
+ rejectOneTitle: '„{{title}}“ ablehnen?',
2902
3271
  rejectOneBody: 'Die Anfrage wird abgelehnt und der Antragsteller benachrichtigt.',
2903
3272
  rejectTitle: 'Diese Anfrage ablehnen?',
2904
3273
  rejectBody: 'Die Anfrage wird als abgelehnt markiert und der Antragsteller benachrichtigt.',
2905
3274
  recallTitle: 'Diese Anfrage zurückziehen?',
2906
3275
  recallBody: 'Genehmiger können danach nicht mehr handeln; der Datensatz wird entsperrt.',
2907
- inlineApproved: '"{{title}}" genehmigt',
2908
- inlineRejected: '"{{title}}" abgelehnt',
3276
+ inlineApproved: '„{{title}}“ genehmigt',
3277
+ inlineRejected: '„{{title}}“ abgelehnt',
2909
3278
  approvedFinal: 'Genehmigt',
2910
3279
  approvedWaiting: 'Genehmigt — wartet auf die übrigen Genehmiger',
2911
3280
  rejectedToast: 'Abgelehnt',
@@ -2928,7 +3297,7 @@ const de = {
2928
3297
  empty: {
2929
3298
  loadFailedTitle: 'Entwurfsvorschau konnte nicht geladen werden',
2930
3299
  loadFailedDescription: 'Das Entwurfs-Overlay konnte nicht gelesen werden. Erneut versuchen oder Verbindung prüfen.',
2931
- notReadyTitle: '„{{app}}" ist noch nicht im Entwurf',
3300
+ notReadyTitle: '„{{app}}“ ist noch nicht im Entwurf',
2932
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.',
2933
3302
  nothingTitle: 'Noch nichts zur Vorschau',
2934
3303
  retry: 'Erneut versuchen',
@@ -2959,6 +3328,34 @@ const de = {
2959
3328
  confirmNote: 'Beim Veröffentlichen werden alle {{count}} ausstehenden Entwürfe dieses Pakets atomar freigegeben.',
2960
3329
  publishConfirm: 'Alle veröffentlichen',
2961
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
+ },
2962
3359
  },
2963
3360
  filterBuilder: {
2964
3361
  where: "Wo",
@@ -3003,5 +3400,91 @@ const de = {
3003
3400
  addSort: "Sortierung hinzufügen",
3004
3401
  removeSort: "Sortierung entfernen",
3005
3402
  },
3403
+ collaboration: {
3404
+ commentCount: "{{count}} Kommentare",
3405
+ commentCountOne: "{{count}} Kommentar",
3406
+ resolvedSuffix: " · Gelöst",
3407
+ sortComments: "Kommentare sortieren",
3408
+ sortOldest: "Älteste zuerst",
3409
+ sortNewest: "Neueste zuerst",
3410
+ resolve: "Lösen",
3411
+ reopen: "Erneut öffnen",
3412
+ justNow: "gerade eben",
3413
+ minutesAgo: "vor {{count}} Min.",
3414
+ hoursAgo: "vor {{count}} Std.",
3415
+ daysAgo: "vor {{count}} T.",
3416
+ edited: "(bearbeitet)",
3417
+ reactionCount: "{{count}} Reaktionen",
3418
+ reactionCountOne: "{{count}} Reaktion",
3419
+ addThumbsUp: "Daumen hoch hinzufügen",
3420
+ reply: "Antworten",
3421
+ reactThumbsUp: "Mit Daumen hoch reagieren",
3422
+ reactHeart: "Mit Herz reagieren",
3423
+ cancelReply: "Antwort abbrechen",
3424
+ replyingTo: "Antwort an {{name}} …",
3425
+ replyingToComment: "Antwort auf Kommentar …",
3426
+ commentPlaceholder: "Kommentar hinzufügen … (@ für Erwähnungen)",
3427
+ send: "Senden",
3428
+ presentUserCount: "{{count}} anwesende Benutzer",
3429
+ presentUserCountOne: "{{count}} anwesender Benutzer",
3430
+ moreUserCount: "{{count}} weitere Benutzer",
3431
+ moreUserCountOne: "{{count}} weiterer Benutzer",
3432
+ userStatusTitle: "{{name}} ({{status}})",
3433
+ statusActive: "aktiv",
3434
+ statusIdle: "inaktiv",
3435
+ statusAway: "abwesend",
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
+ },
3006
3489
  };
3007
3490
  export default de;