@object-ui/i18n 17.6.0 → 17.7.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 (56) hide show
  1. package/CHANGELOG.md +4320 -0
  2. package/README.md +192 -13
  3. package/dist/builtinAggregateLabels.d.ts +40 -0
  4. package/dist/builtinAggregateLabels.js +23 -0
  5. package/dist/currency.d.ts +27 -3
  6. package/dist/currency.js +28 -4
  7. package/dist/fallbackInterpolation.d.ts +79 -0
  8. package/dist/fallbackInterpolation.js +124 -0
  9. package/dist/i18n.d.ts +27 -1
  10. package/dist/i18n.js +99 -16
  11. package/dist/index.d.ts +7 -13
  12. package/dist/index.js +41 -17
  13. package/dist/locales/ar.d.ts +946 -113
  14. package/dist/locales/ar.js +1095 -161
  15. package/dist/locales/de.d.ts +618 -113
  16. package/dist/locales/de.js +715 -134
  17. package/dist/locales/en.d.ts +632 -127
  18. package/dist/locales/en.js +1044 -162
  19. package/dist/locales/es.d.ts +700 -113
  20. package/dist/locales/es.js +794 -130
  21. package/dist/locales/fr.d.ts +700 -113
  22. package/dist/locales/fr.js +795 -132
  23. package/dist/locales/index.d.ts +6990 -1169
  24. package/dist/locales/index.js +48 -9
  25. package/dist/locales/ja.d.ts +618 -113
  26. package/dist/locales/ja.js +708 -128
  27. package/dist/locales/ko.d.ts +618 -113
  28. package/dist/locales/ko.js +712 -132
  29. package/dist/locales/pt.d.ts +700 -113
  30. package/dist/locales/pt.js +794 -130
  31. package/dist/locales/registry.d.ts +102 -0
  32. package/dist/locales/registry.js +220 -0
  33. package/dist/locales/rtl.d.ts +24 -0
  34. package/dist/locales/rtl.js +26 -0
  35. package/dist/locales/ru.d.ts +782 -113
  36. package/dist/locales/ru.js +910 -152
  37. package/dist/locales/zh.d.ts +635 -130
  38. package/dist/locales/zh.js +725 -131
  39. package/dist/pickLocalized.d.ts +30 -0
  40. package/dist/pickLocalized.js +39 -0
  41. package/dist/provider.d.ts +101 -12
  42. package/dist/provider.js +335 -50
  43. package/dist/translateFn.d.ts +29 -0
  44. package/dist/translateFn.js +8 -0
  45. package/dist/useDisplayLocale.d.ts +11 -0
  46. package/dist/useDisplayLocale.js +11 -0
  47. package/dist/useObjectLabel.d.ts +40 -18
  48. package/dist/useObjectLabel.js +46 -14
  49. package/dist/useSafeTranslation.js +40 -42
  50. package/dist/utils/formatting.d.ts +16 -0
  51. package/dist/utils/formatting.js +23 -3
  52. package/dist/utils/spec-formatters.d.ts +13 -23
  53. package/dist/utils/spec-formatters.js +41 -2
  54. package/dist/utils/spec-translations.d.ts +16 -3
  55. package/dist/utils/spec-translations.js +52 -13
  56. package/package.json +12 -6
@@ -19,10 +19,12 @@ const de = {
19
19
  manage_users: "Benutzer verwalten",
20
20
  manage_org_users: "Organisationsbenutzer verwalten",
21
21
  manage_metadata: "Metadaten verwalten",
22
+ manage_org_presentation: "Organisationsdarstellung verwalten",
22
23
  manage_platform_settings: "Plattformeinstellungen verwalten",
23
24
  setup_access: "Zugriff auf die Einrichtung",
24
25
  setup_write: "Einstellungen schreiben",
25
26
  studio_access: "Studio-Zugriff",
27
+ manage_sharing: "Freigaben verwalten",
26
28
  },
27
29
  group: {
28
30
  platform: 'Plattform',
@@ -39,12 +41,16 @@ const de = {
39
41
  more: "+{{count}} weitere",
40
42
  objects: "{{count}} Objekte",
41
43
  objects_one: "{{count}} Objekt",
44
+ objects_other: "{{count}} Objekte",
42
45
  fields: "{{count}} Feldregeln",
43
46
  fields_one: "{{count}} Feldregel",
47
+ fields_other: "{{count}} Feldregeln",
44
48
  rls: "{{count}} RLS-Richtlinien",
45
49
  rls_one: "{{count}} RLS-Richtlinie",
50
+ rls_other: "{{count}} RLS-Richtlinien",
46
51
  tabs: "{{count}} Registerkarten-Regeln",
47
52
  tabs_one: "{{count}} Registerkarten-Regel",
53
+ tabs_other: "{{count}} Registerkarten-Regeln",
48
54
  adminScope: "Delegierte Administration konfiguriert",
49
55
  designInStudio: "Im Studio gestalten →",
50
56
  designInStudioHint: "Im Studio gestalten",
@@ -63,7 +69,8 @@ const de = {
63
69
  selectFirst: 'Zuerst {{fields}} auswählen',
64
70
  selectRecord: 'Datensatz auswählen',
65
71
  recordCount: '{{count}} Datensätze',
66
- recordCountOne: '1 Datensatz',
72
+ recordCount_one: '{{count}} Datensatz',
73
+ recordCount_other: '{{count}} Datensätze',
67
74
  pageOf: 'Seite {{current}} von {{total}}',
68
75
  filters: 'Filter',
69
76
  clear: 'Zurücksetzen',
@@ -116,7 +123,8 @@ const de = {
116
123
  closePanel: "Panel schließen",
117
124
  resizeDrawer: "Panelbreite anpassen",
118
125
  itemCount: "{{count}} Elemente",
119
- itemCountOne: "{{count}} Element",
126
+ itemCount_one: "{{count}} Element",
127
+ itemCount_other: "{{count}} Elemente",
120
128
  toggleSidebar: "Seitenleiste umschalten",
121
129
  package: "Paket",
122
130
  done: "Fertig",
@@ -124,6 +132,16 @@ const de = {
124
132
  record: "Datensatz",
125
133
  retry: "Erneut versuchen",
126
134
  printDialogHint: "Öffnet den Druckdialog Ihres Browsers (kein PDF-Export)",
135
+ // The non-grid row ceiling's footnote (objectui#7210). Two keys because
136
+ // there are two conditions: a reported `total` states the fact with BOTH
137
+ // numbers, a missing one cannot name how many. Kept terse deliberately —
138
+ // this copy is eagerly loaded, and since objectui#7399 these bytes are
139
+ // budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
140
+ // headroom is deliberately NOT restated here — it moves on every
141
+ // re-baseline, and the figure that was here went stale.
142
+ // `pnpm check:eager-closure` prints it.
143
+ rowCeilingNote: "Erste {{shown}} von {{total}} Datensätzen. Filter eingrenzen.",
144
+ rowCeilingNoteUnknownTotal: "Erste {{shown}} Datensätze. Filter eingrenzen.",
127
145
  },
128
146
  actions: {
129
147
  decisionOutput: {
@@ -135,6 +153,14 @@ const de = {
135
153
  acknowledge: 'Ich habe ihn gespeichert',
136
154
  copyAll: 'Alle kopieren',
137
155
  },
156
+ notAvailableHere: '„{{action}}“ ist auf der aktuellen Seite nicht verfügbar.',
157
+ completedSuccessfully: 'Aktion erfolgreich abgeschlossen',
158
+ failed: 'Aktion fehlgeschlagen',
159
+ parallelFailed: 'Eine oder mehrere parallele Aktionen sind fehlgeschlagen',
160
+ undo: 'Rückgängig',
161
+ undone: 'Änderung rückgängig gemacht',
162
+ undoneOperation: 'Rückgängig: {{description}}',
163
+ redoneOperation: 'Wiederholen: {{description}}',
138
164
  },
139
165
  validation: {
140
166
  required: "{{field}} ist erforderlich",
@@ -152,19 +178,45 @@ const de = {
152
178
  },
153
179
  form: {
154
180
  noPermissionToSave: "Sie haben keine Berechtigung, diesen Datensatz zu speichern.",
181
+ noPermissionToCreate: "Sie haben keine Berechtigung, „{{object}}“-Datensätze zu erstellen. Die Felder sind schreibgeschützt.",
182
+ noPermissionToEdit: "Sie haben keine Berechtigung, „{{object}}“-Datensätze zu bearbeiten. Die Felder sind schreibgeschützt.",
155
183
  submitFailed: "Speichern fehlgeschlagen. Bitte versuchen Sie es erneut.",
184
+ uploadInFlight: "Warten Sie, bis der Upload abgeschlossen ist, bevor Sie speichern.",
185
+ clearedOnHide: "Geleert, was für die aktuellen Werte nicht mehr gilt: {{fields}}",
186
+ visibleWhenFaulted: "Absenden nicht möglich: Die visibleWhen-Regel von {{fields}} konnte nicht ausgewertet werden. Die Regel muss korrigiert werden, bevor dieses Formular abgesendet werden kann.",
156
187
  discardTitle: "Änderungen verwerfen?",
157
188
  discardMessage: "Sie haben ungespeicherte Änderungen. Wenn Sie dieses Formular jetzt schließen, gehen Ihre Bearbeitungen verloren.",
158
189
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
159
190
  // description, used when the form declares no `description` of its own.
160
191
  dialogDescriptionFallback: "Füllen Sie die Formularfelder aus und senden Sie ab oder brechen Sie ab.",
192
+ deniedDescription: "Sie haben keinen Bearbeitungszugriff auf dieses Feld.",
193
+ masterDetail: {
194
+ loadingColumns: "Spalten werden geladen…",
195
+ subtotal: "Zwischensumme",
196
+ tax: "Steuer ({{rate}} %)",
197
+ total: "Gesamt",
198
+ lineItem: "Position",
199
+ rowTitle: "{{title}} — Zeile {{row}}",
200
+ applyRow: "Übernehmen",
201
+ editorDescription: "Erfassen Sie den Datensatz und seine Positionen und speichern Sie anschließend.",
202
+ noChildObject: "Für diese Sammlung ist kein untergeordnetes Objekt konfiguriert: Setzen Sie {{property}} auf das Objekt, dessen Zeilen sie auflistet.",
203
+ schemaUnavailable: "Das Schema von {{object}} konnte nicht geladen werden, daher hat diese Sammlung keine Spalten zum Anzeigen. Prüfen Sie, ob das Objekt existiert und lesbar ist, und laden Sie dann neu.",
204
+ noRelationshipField: "Es konnte nicht ermittelt werden, wie {{object}} mit {{parent}} verknüpft ist: Kein lookup- oder master_detail-Feld darin verweist auf das übergeordnete Objekt. Setzen Sie {{property}} in dieser Sammlung auf das Feld, das den übergeordneten Datensatz enthält.",
205
+ },
206
+ lineItems: {
207
+ title: "Positionen",
208
+ saveRecordFirst: "Speichern Sie zuerst den Datensatz, um Positionen hinzuzufügen.",
209
+ notLoaded: "Die Positionen dieses Datensatzes wurden nicht geladen.",
210
+ loadFailed: "Positionen konnten nicht geladen werden",
211
+ saveFailed: "Positionen konnten nicht gespeichert werden",
212
+ noChildObject: "Für dieses Panel ist kein untergeordnetes Objekt konfiguriert: Setzen Sie {{property}} auf das Objekt, dessen Zeilen es auflistet.",
213
+ },
161
214
  keepEditing: "Weiter bearbeiten",
162
215
  discard: "Verwerfen",
163
216
  conflictTitle: "Speicherkonflikt",
164
217
  conflictMessage: "Dieser Datensatz wurde während Ihrer Bearbeitung von jemand anderem geändert. Beim Überschreiben werden dessen Änderungen durch Ihre ersetzt.",
165
218
  conflictLatestVersion: "Deren Speicherung: {{time}}",
166
219
  conflictOverwrite: "Überschreiben",
167
- addItem: "Element hinzufügen",
168
220
  removeItem: "Element entfernen",
169
221
  fieldRequired: "Dieses Feld ist erforderlich",
170
222
  invalidFormat: "Ungültiges Format",
@@ -182,6 +234,12 @@ const de = {
182
234
  createSuccess: "{{object}} erfolgreich erstellt",
183
235
  updateSuccess: "{{object}} erfolgreich aktualisiert",
184
236
  deleteSuccess: "{{object}} erfolgreich gelöscht",
237
+ created: "Erstellt",
238
+ saved: "Gespeichert",
239
+ savedNamed: "{{title}} gespeichert",
240
+ submitted: "Gesendet",
241
+ errorLoading: "Fehler beim Laden des Formulars",
242
+ navigateRefused: "Das für dieses Formular deklarierte `navigateOnSuccess`-Ziel wurde abgelehnt, daher fand keine Navigation statt.",
185
243
  fullscreen: {
186
244
  title: "Text bearbeiten",
187
245
  description: "Bearbeiten Sie den vollständigen Textwert und speichern oder verwerfen Sie dann Ihre Änderungen.",
@@ -206,6 +264,8 @@ const de = {
206
264
  },
207
265
  relativeDate: {
208
266
  overdue: "{{count}} T. überfällig",
267
+ overdue_one: "{{count}} T. überfällig",
268
+ overdue_other: "{{count}} T. überfällig",
209
269
  },
210
270
  file: {
211
271
  dragDropHere: 'Dateien hierher ziehen und ablegen',
@@ -222,6 +282,7 @@ const de = {
222
282
  remove: '{{name}} entfernen',
223
283
  exceedsMaxSize: '„{{name}}“ überschreitet die maximale Größe ({{max}} MB)',
224
284
  uploadFailed: 'Hochladen von „{{name}}“ fehlgeschlagen: {{error}}',
285
+ uploadIncomplete: 'Hochladen von „{{name}}“ wurde nicht abgeschlossen: Es wurde keine Datei-ID zurückgegeben, nichts wurde gespeichert',
225
286
  },
226
287
  richText: {
227
288
  format: "Format: {{format}}",
@@ -249,6 +310,9 @@ const de = {
249
310
  selectBusinessUnit: "Geschäftseinheit auswählen",
250
311
  selectPosition: "Position auswählen",
251
312
  selectUnitAndSubordinates: "Geschäftseinheit auswählen",
313
+ selectField: "Benutzerfeld auswählen",
314
+ noUserFields: "Dieses Objekt hat keine Benutzerfelder",
315
+ fieldNotUserTyped: "{{name}} — kein Benutzerfeld",
252
316
  },
253
317
  filterCondition: {
254
318
  selectObjectFirst: "Wählen Sie zuerst ein Objekt.",
@@ -259,6 +323,26 @@ const de = {
259
323
  editAsJson: "Als JSON bearbeiten",
260
324
  useVisualBuilder: "Visuellen Builder verwenden",
261
325
  },
326
+ object: {
327
+ invalidJson: "Ungültiges JSON",
328
+ },
329
+ location: {
330
+ refusedFormat: "Nicht gespeichert: Geben Sie ein Paar aus Breitengrad, Längengrad ein (Beispiel: 30.2741, 120.1551).",
331
+ refusedRange: "Nicht gespeichert: {{detail}}",
332
+ latitude: "Breitengrad",
333
+ longitude: "Längengrad",
334
+ refusedResidueOne: "Nicht gespeichert: {{name}} „{{text}}“ ist keine Zahl. Geben Sie einfache Dezimalzahlen ein (Beispiel: 30.2741, 120.1551).",
335
+ refusedResidue: "Nicht gespeichert: {{name}} „{{text}}“ und {{otherName}} „{{otherText}}“ sind keine Zahlen. Geben Sie einfache Dezimalzahlen ein (Beispiel: 30.2741, 120.1551).",
336
+ },
337
+ date: {
338
+ impossibleDay: "Der gespeicherte Wert „{{value}}“ ist kein gültiges Datum. Wählen Sie ein Datum, um ihn zu ersetzen.",
339
+ },
340
+ dateTime: {
341
+ impossibleDay: "Der gespeicherte Wert „{{value}}“ ist kein gültiges Datum. Wählen Sie Datum und Uhrzeit, um ihn zu ersetzen.",
342
+ },
343
+ number: {
344
+ badInput: "Nicht gespeichert: Der Text in diesem Feld ist keine Zahl. Geben Sie eine einfache Dezimalzahl ein (Beispiel: {{example}}).",
345
+ },
262
346
  tags: {
263
347
  placeholder: "Tippen und mit der Eingabetaste hinzufügen…",
264
348
  },
@@ -274,6 +358,16 @@ const de = {
274
358
  characterCount: "Zeichenanzahl: {{count}} von {{max}}",
275
359
  charactersRemaining: "Verbleibende Zeichen: {{count}}",
276
360
  },
361
+ grid: {
362
+ addLine: "Zeile hinzufügen",
363
+ noItems: "Keine Einträge",
364
+ noItemsAddHint: "Noch keine Einträge – klicken Sie auf „{{label}}“, um zu beginnen.",
365
+ optionalColumns: "Optionale Spalten",
366
+ computed: "Berechnet",
367
+ openRow: "Zeile öffnen",
368
+ duplicateRow: "Zeile duplizieren",
369
+ removeRow: "Zeile entfernen",
370
+ },
277
371
  },
278
372
  table: {
279
373
  rowsPerPage: "Zeilen pro Seite",
@@ -302,23 +396,35 @@ const de = {
302
396
  open: "Öffnen",
303
397
  search: "Suchen…",
304
398
  modified: "{{count}} Zeile geändert",
399
+ modified_one: "{{count}} Zeile geändert",
400
+ modified_other: "{{count}} Zeilen geändert",
305
401
  saveFailed: 'Speichern fehlgeschlagen',
306
402
  selected: "{{count}} ausgewählt",
403
+ selected_one: "{{count}} ausgewählt",
404
+ selected_other: "{{count}} ausgewählt",
307
405
  edit: "Bearbeiten",
308
406
  delete: "Löschen",
309
407
  },
310
408
  grid: {
311
409
  bulkSelected: "{{count}} ausgewählt",
410
+ bulkSelected_one: "{{count}} ausgewählt",
411
+ bulkSelected_other: "{{count}} ausgewählt",
312
412
  bulkSelectedAllMatches: "{{count}} ausgewählt (alle Treffer)",
313
413
  bulkClear: "Auswahl aufheben",
314
414
  bulkAllOnPage: "Alle {{count}} auf dieser Seite sind ausgewählt.",
415
+ bulkAllOnPage_one: "{{count}} Datensatz auf dieser Seite ist ausgewählt.",
416
+ bulkAllOnPage_other: "Alle {{count}} auf dieser Seite sind ausgewählt.",
315
417
  bulkSelectAllMatching: "Alle {{count}} Treffer auswählen",
316
418
  bulkAllMatchingSelected: "Alle {{count}} übereinstimmenden Datensätze sind ausgewählt.",
317
419
  bulk: {
318
420
  confirmDefault: "Dies wird auf {{count}} Datensätze angewendet.",
421
+ confirmDefault_one: "Dies wird auf {{count}} Datensatz angewendet.",
422
+ confirmDefault_other: "Dies wird auf {{count}} Datensätze angewendet.",
319
423
  overLimit: "Die Auswahl ({{count}}) überschreitet das Aktionslimit ({{limit}}). Verkleinern Sie die Auswahl, um fortzufahren.",
320
424
  affectedRecords: "Betroffene Datensätze ({{count}}):",
321
425
  skippedIneligible: '{{count}} der ausgewählten Datensätze sind für diese Aktion nicht zulässig und werden übersprungen.',
426
+ skippedIneligible_one: '{{count}} der ausgewählten Datensätze ist für diese Aktion nicht zulässig und wird übersprungen.',
427
+ skippedIneligible_other: '{{count}} der ausgewählten Datensätze sind für diese Aktion nicht zulässig und werden übersprungen.',
322
428
  rowFallback: "Zeile {{index}}",
323
429
  andMore: "… und {{count}} weitere",
324
430
  processed: "{{count}} / {{total}} verarbeitet",
@@ -336,7 +442,6 @@ const de = {
336
442
  undo: "Rückgängig",
337
443
  undoing: "Wird rückgängig gemacht…",
338
444
  done: "Fertig",
339
- selectPlaceholder: "Auswählen…",
340
445
  loading: "Wird geladen…",
341
446
  },
342
447
  actions: "Aktionen",
@@ -355,6 +460,14 @@ const de = {
355
460
  yes: "Ja",
356
461
  no: "Nein",
357
462
  systemFields: "System",
463
+ // objectui#10881 — the grouped grid's two refusals: over a data source
464
+ // that cannot answer the group header query, and over rows a host
465
+ // handed in while declaring them one page of more. `queryGroupHeaders`
466
+ // is the member's name and stays untranslated.
467
+ grouping: {
468
+ needsHeaderQuery: "Diese Ansicht ist gruppiert, aber ihre Datenquelle implementiert queryGroupHeaders nicht, daher können die Gruppen nicht gezählt werden. Entfernen Sie die Gruppierung, um die Datensätze anzuzeigen.",
469
+ needsWholeRows: "Die Gruppierung benötigt alle Datensätze, aber dieses Raster hat nur eine Seite davon erhalten, daher können die Gruppen nicht gezählt werden. Übergeben Sie alle Datensätze oder lassen Sie das Raster sie aus einer Datenquelle laden, die queryGroupHeaders implementiert.",
470
+ },
358
471
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
359
472
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
360
473
  // pack controls its own separator and word order.
@@ -381,10 +494,14 @@ const de = {
381
494
  },
382
495
  import: {
383
496
  downloadTemplate: "Vorlage herunterladen",
384
- downloadTemplateHint: "Laden Sie eine CSV mit den richtigen Spalten herunter (Pflichtfelder sind mit * markiert).",
497
+ downloadTemplateHint: "Laden Sie eine Excel-Datei mit den importierbaren Spalten herunter (Pflichtfelder sind mit * markiert), samt Ausfüllhinweisen.",
385
498
  templateFileName: "{{object}}-import-template",
499
+ templateDownloadFailed: "Die Vorlage konnte nicht heruntergeladen werden. Bitte versuchen Sie es erneut.",
500
+ templateNotPermitted: "Sie sind nicht berechtigt, Datensätze dieses Objekts zu erstellen, daher ist die Importvorlage nicht verfügbar.",
386
501
  autoMatched: "Automatisch zugeordnet",
387
502
  autoMatchedSummary: "{{count}} Spalte(n) automatisch zugeordnet — unten prüfen und anpassen.",
503
+ autoMatchedSummary_one: "{{count}} Spalte automatisch zugeordnet — unten prüfen und anpassen.",
504
+ autoMatchedSummary_other: "{{count}} Spalten automatisch zugeordnet — unten prüfen und anpassen.",
388
505
  confidence: {
389
506
  high: "Hohe Konfidenz",
390
507
  medium: "Mittlere Konfidenz",
@@ -397,8 +514,14 @@ const de = {
397
514
  cancelImport: "Import abbrechen",
398
515
  importCancelled: "Import abgebrochen",
399
516
  resultsTruncated: "Es werden die ersten {{count}} Zeilenergebnisse (von {{total}}) angezeigt.",
517
+ resultsTruncated_one: "Es wird das erste {{count}} Zeilenergebnis (von {{total}}) angezeigt.",
518
+ resultsTruncated_other: "Es werden die ersten {{count}} Zeilenergebnisse (von {{total}}) angezeigt.",
400
519
  createdCount: "{{count}} erstellt",
520
+ createdCount_one: "{{count}} erstellt",
521
+ createdCount_other: "{{count}} erstellt",
401
522
  updatedCount: "{{count}} aktualisiert",
523
+ updatedCount_one: "{{count}} aktualisiert",
524
+ updatedCount_other: "{{count}} aktualisiert",
402
525
  downloadFailed: "Fehlgeschlagene Zeilen herunterladen",
403
526
  options: "Importoptionen",
404
527
  writeMode: "Wenn eine Zeile zu einem vorhandenen Datensatz passt",
@@ -446,6 +569,8 @@ const de = {
446
569
  historyColResult: "Ergebnis",
447
570
  historyColTime: "Wann",
448
571
  errorCount: "{{count}} Fehler",
572
+ errorCount_one: "{{count}} Fehler",
573
+ errorCount_other: "{{count}} Fehler",
449
574
  undoImport: "Import rückgängig machen",
450
575
  undoing: "Wird rückgängig gemacht…",
451
576
  undoConfirm: "Diesen Import rückgängig machen? Dabei erstellte Datensätze werden gelöscht und aktualisierte Datensätze auf ihre vorherigen Werte zurückgesetzt.",
@@ -506,7 +631,11 @@ const de = {
506
631
  mapped: "Zugeordnet",
507
632
  skipped: "Übersprungen",
508
633
  rowsWithErrors: "{{count}} Zeile(n) mit Fehlern",
634
+ rowsWithErrors_one: "{{count}} Zeile mit Fehlern",
635
+ rowsWithErrors_other: "{{count}} Zeilen mit Fehlern",
509
636
  rowsCorrected: "{{count}} Zeile(n) korrigiert",
637
+ rowsCorrected_one: "{{count}} Zeile korrigiert",
638
+ rowsCorrected_other: "{{count}} Zeilen korrigiert",
510
639
  clickToFix: "— klicken Sie auf eine hervorgehobene Zelle, um sie zu bearbeiten.",
511
640
  showingRows: "{{shown}} von {{total}} Zeilen angezeigt",
512
641
  importing: "Importiere… {{progress}}%",
@@ -514,11 +643,15 @@ const de = {
514
643
  imported: "{{count}} importiert",
515
644
  skippedCount: "{{count}} übersprungen",
516
645
  moreErrors: "…und {{count}} weitere Fehler",
646
+ moreErrors_one: "…und {{count}} weiterer Fehler",
647
+ moreErrors_other: "…und {{count}} weitere Fehler",
517
648
  cancel: "Abbrechen",
518
649
  back: "Zurück",
519
650
  next: "Weiter",
520
651
  close: "Schließen",
521
652
  importNRows: "{{count}} Zeilen importieren",
653
+ importNRows_one: "{{count}} Zeile importieren",
654
+ importNRows_other: "{{count}} Zeilen importieren",
522
655
  importingProgress: "Importiere…",
523
656
  requiredMark: "*",
524
657
  required: "Erforderlich",
@@ -530,11 +663,37 @@ const de = {
530
663
  month: "Monat",
531
664
  week: "Woche",
532
665
  day: "Tag",
533
- agenda: "Agenda",
534
666
  allDay: "Ganztägig",
535
- noEvents: "Keine Termine",
536
667
  newEvent: "Neuer Termin",
537
668
  moreEvents: "+{{count}} weitere",
669
+ unscheduled: "Nicht geplant ({{count}})",
670
+ loading: "Kalender wird geladen…",
671
+ loadError: "Fehler: {{message}}",
672
+ configRequired: "Kalenderkonfiguration erforderlich. Bitte startDateField angeben, den einzigen erforderlichen Schlüssel des Kalenders; der Termintitel wird auch ohne titleField aufgelöst.",
673
+ configRequiredHint: "Sie gehört in den calendar-Block der Ansicht. Eine Interface-Seite hat keinen eigenen Kalender-Slot: Richten Sie ihr sourceView auf eine Ansicht, die einen deklariert.",
674
+ eventDetails: "Termindetails",
675
+ pullToRefresh: "Zum Aktualisieren ziehen",
676
+ refreshing: "Wird aktualisiert…",
677
+ onDate: "Am {{date}}",
678
+ eventTitle: "Titel",
679
+ eventTitlePlaceholder: "Worum geht es bei diesem Termin?",
680
+ creating: "Wird erstellt…",
681
+ titleRequired: "Titel ist erforderlich",
682
+ a11y: {
683
+ region: "Kalender",
684
+ grid: "Kalenderraster",
685
+ goToToday: "Zu heute springen",
686
+ previousPeriod: "Vorheriger Zeitraum",
687
+ nextPeriod: "Nächster Zeitraum",
688
+ currentDate: "Aktuelles Datum: {{date}}",
689
+ dayCell: "{{date}}, {{count}} Termine",
690
+ dayCell_one: "{{date}}, {{count}} Termin",
691
+ dayCell_other: "{{date}}, {{count}} Termine",
692
+ resizeEventEnd: "Ende des Termins ändern",
693
+ resizeEventEndHint: "Ziehen, um das Enddatum zu ändern",
694
+ resizeStart: "Beginn ändern",
695
+ resizeEnd: "Ende ändern",
696
+ },
538
697
  },
539
698
  list: {
540
699
  firstRunTitle: "Hier ist noch nichts",
@@ -577,7 +736,8 @@ const de = {
577
736
  refresh: "Aktualisieren",
578
737
  loading: "Datensätze werden geladen…",
579
738
  recordCount: "{{count}} Datensätze",
580
- recordCountOne: "{{count}} Datensatz",
739
+ recordCount_one: "{{count}} Datensatz",
740
+ recordCount_other: "{{count}} Datensätze",
581
741
  addRecord: "Datensatz hinzufügen",
582
742
  tabs: "Tabs",
583
743
  allRecords: "Alle Datensätze",
@@ -609,7 +769,7 @@ const de = {
609
769
  hideFieldsTitle: "Felder ausblenden",
610
770
  dataLimitReached: "Die ersten {{limit}} Datensätze werden angezeigt. Möglicherweise sind weitere Daten verfügbar.",
611
771
  viewSettings: "Ansichtseinstellungen",
612
- viewSettingsHint: "Gruppierung, Farbe, Dichte und sichtbare Felder.",
772
+ viewSettingsHint: "Gruppierung, Farbe, Dichte und sichtbare Felder. Gilt für alle Benutzer dieser Ansicht.",
613
773
  addGroup: "Gruppenfeld hinzufügen",
614
774
  collapsedByDefault: "Standardmäßig eingeklappt",
615
775
  removeGroup: "Entfernen",
@@ -674,6 +834,17 @@ const de = {
674
834
  },
675
835
  gantt: {
676
836
  rowLabel: "Elemente",
837
+ unusableRange: {
838
+ malformedDate: "Unbrauchbarer Gantt-Datumsbereich — {{path}} ist {{value}} und damit kein gültiges Datum. Jedes Gantt-Datum muss parsebar sein: startDate und endDate jedes Zeilenelements sowie ein am Schema gesetztes minDate / maxDate.",
839
+ malformedRow: "Unbrauchbare Gantt-Zeilen — {{path}} ist {{value}} und damit keine Zeilenform. Ein Gantt liest items als Liste von Zeilen, jede Zeile als Objekt mit label und eigenen items und die items jeder Zeile als Liste von Balken; ein null, eine Zahl, ein String oder ein einfaches Objekt an einer dieser Stellen kann nicht gezeichnet werden.",
840
+ inverted: "Unbrauchbarer Gantt-Datumsbereich — minDate {{minDate}} liegt nach maxDate {{maxDate}}. Ein gesetztes minDate / maxDate überschreibt den aus den Zeilen berechneten Bereich, daher hat diese Achse keine Spalten und es kann kein Balken platziert werden; vertauschen Sie die beiden Werte.",
841
+ },
842
+ },
843
+ unsupported: {
844
+ objectBoundGantt: "Nicht unterstützte Variante „gantt“ — eine objektgebundene Timeline rendert die Feed-Varianten ({{variants}}). Gantt benötigt literale Zeilen mit jeweils eigenen verschachtelten items; die Gantt-Achse (scale) hat hier daher keine Wirkung.",
845
+ },
846
+ unconfigured: {
847
+ noDateAxis: "Zeitachse für die Timeline erforderlich — diese Ansicht deklariert kein Datumsfeld, und eine objektgebundene Timeline erfindet keines. Deklarieren Sie eines von: {{fields}}. Das erste ist die Spec-Schreibweise, die übrigen sind veraltete Aliase.",
677
848
  },
678
849
  },
679
850
  gantt: {
@@ -691,6 +862,7 @@ const de = {
691
862
  },
692
863
  aria: {
693
864
  taskList: "Vorgangsliste",
865
+ refreshing: "Aktualisiere…",
694
866
  },
695
867
  tooltip: {
696
868
  days: "T",
@@ -736,13 +908,19 @@ const de = {
736
908
  conflict: {
737
909
  title: "Terminkonflikt",
738
910
  body: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?",
911
+ body_one: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffenen Vorgang automatisch neu planen?",
912
+ body_other: "Diese Verschiebung verstößt gegen Abhängigkeitsbedingungen. {{count}} betroffene Vorgänge automatisch neu planen?",
739
913
  confirm: "Automatisch neu planen",
740
914
  cancel: "Unverändert lassen",
741
915
  },
742
916
  autoScheduleDlg: {
743
917
  title: "Automatisch planen",
744
918
  body: "{{count}} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
919
+ body_one: "{{count}} Vorgang nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
920
+ body_other: "{{count}} Vorgänge nach hinten verschieben, um die Abhängigkeiten einzuhalten?",
745
921
  skipped: "{{count}} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
922
+ skipped_one: "{{count}} gesperrter Vorgang verletzt die Verknüpfungen ebenfalls und wurde übersprungen.",
923
+ skipped_other: "{{count}} gesperrte Vorgänge verletzen die Verknüpfungen ebenfalls und wurden übersprungen.",
746
924
  confirm: "Anwenden",
747
925
  cancel: "Abbrechen",
748
926
  none: "Alle Abhängigkeiten sind erfüllt — nichts neu zu planen.",
@@ -821,6 +999,7 @@ const de = {
821
999
  tabActionsFor: "Ansichtsaktionen für {{name}}",
822
1000
  readonlyAriaLabel: "Schreibgeschützte Ansicht",
823
1001
  readonlyTooltip: "Systemansicht — im Code definiert, schreibgeschützt.",
1002
+ malformedFilter: "Der Filter dieser Ansicht ist fehlerhaft, daher werden keine Datensätze angezeigt: Die Bedingung {{subject}} kann nicht angewendet werden.",
824
1003
  },
825
1004
  designer: {
826
1005
  undo: "Rückgängig",
@@ -846,7 +1025,8 @@ const de = {
846
1025
  pageHeaderActions: "Aktionen der Seitenkopfzeile",
847
1026
  emojiPicker: "Emoji-Auswahl",
848
1027
  reactionCount: "{{emoji}} {{count}} Reaktionen",
849
- reactionCountOne: "{{emoji}} {{count}} Reaktion",
1028
+ reactionCount_one: "{{emoji}} {{count}} Reaktion",
1029
+ reactionCount_other: "{{emoji}} {{count}} Reaktionen",
850
1030
  recordDetail: "Datensatzdetails",
851
1031
  recordDetailWithLabel: "{{label}}-Details",
852
1032
  openAsFullPage: "Als ganze Seite öffnen",
@@ -864,7 +1044,7 @@ const de = {
864
1044
  relatedRecords: "{{count}} Datensätze",
865
1045
  relatedRecordOne: "{{count}} Datensatz",
866
1046
  noRelatedRecords: "Keine verknüpften Datensätze gefunden",
867
- loading: "Laden…",
1047
+ loading: "Wird geladen…",
868
1048
  copyToClipboard: "In Zwischenablage kopieren",
869
1049
  copied: "Kopiert!",
870
1050
  deleteConfirmation: "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
@@ -873,7 +1053,6 @@ const de = {
873
1053
  viewAll: "Alle anzeigen",
874
1054
  new: "Neu",
875
1055
  add: "Hinzufügen",
876
- emptyValue: "—",
877
1056
  comments: "Kommentare",
878
1057
  searchComments: "Kommentare suchen…",
879
1058
  addCommentPlaceholder: "Kommentar hinzufügen… (Strg+Enter zum Senden)",
@@ -884,11 +1063,18 @@ const de = {
884
1063
  unpin: "Lösen",
885
1064
  justNow: "gerade eben",
886
1065
  minutesAgo: "vor {{count}} Min.",
1066
+ minutesAgo_one: "vor {{count}} Min.",
1067
+ minutesAgo_other: "vor {{count}} Min.",
887
1068
  hoursAgo: "vor {{count}} Std.",
1069
+ hoursAgo_one: "vor {{count}} Std.",
1070
+ hoursAgo_other: "vor {{count}} Std.",
888
1071
  daysAgo: "vor {{count}} Tg.",
1072
+ daysAgo_one: "vor {{count}} Tg.",
1073
+ daysAgo_other: "vor {{count}} Tg.",
889
1074
  dropFilesToUpload: "Dateien hierher ziehen oder klicken zum Hochladen",
890
1075
  attachmentCount: "{{count}} Anhang",
891
- attachmentCountPlural: "{{count}} Anhänge",
1076
+ attachmentCount_one: "{{count}} Anhang",
1077
+ attachmentCount_other: "{{count}} Anhänge",
892
1078
  removeAttachment: "Anhang entfernen",
893
1079
  // Record Attachments panel (enable.files, objectstack#4358)
894
1080
  attachments: "Anhänge",
@@ -906,11 +1092,6 @@ const de = {
906
1092
  attachmentsLoadFailed: "Die Anhänge dieses Datensatzes konnten nicht geladen werden.",
907
1093
  attachmentsApiUnavailable: "Die Anhangsliste ist für dieses Objekt nicht verfügbar.",
908
1094
  retryLoadAttachments: "Erneut versuchen",
909
- unifiedDiff: "Einheitliche Ansicht",
910
- sideBySideDiff: "Nebeneinander-Ansicht",
911
- noChanges: "Keine Änderungen",
912
- previousVersion: "Vorherige",
913
- currentVersion: "Aktuelle",
914
1095
  discussion: "Diskussion",
915
1096
  showDiscussion: "Diskussion anzeigen ({{count}})",
916
1097
  hideDiscussion: "Diskussion ausblenden",
@@ -925,25 +1106,35 @@ const de = {
925
1106
  writeComment: "Kommentar schreiben…",
926
1107
  subscribedTooltip: "Abonniert — Klicken zum Abbestellen",
927
1108
  unsubscribedTooltip: "Benachrichtigungen abonnieren",
928
- firstRecord: "Erster Datensatz (Pos1)",
929
- previousRecordKey: "Vorheriger Datensatz (←)",
930
- nextRecordKey: "Nächster Datensatz (→)",
931
- lastRecord: "Letzter Datensatz (Ende)",
932
1109
  noRecords: "Keine Datensätze",
933
- searchWhileNavigating: "Während der Navigation suchen",
934
- searchRecords: "Datensätze suchen…",
935
1110
  allActivity: "Alle Aktivitäten",
936
1111
  commentsOnly: "Nur Kommentare",
937
1112
  fieldChangesFilter: "Feldänderungen",
938
1113
  tasksOnly: "Nur Aufgaben",
939
1114
  leaveCommentPlaceholder: "Kommentar hinterlassen… (Strg+Enter zum Senden)",
940
1115
  noActivity: "Keine Aktivitäten aufgezeichnet",
1116
+ activityAccessDenied: "Sie haben keine Berechtigung, die Aktivitäten dieses Datensatzes anzuzeigen.",
1117
+ commentsAccessDenied: "Sie haben keine Berechtigung, die Kommentare zu diesem Datensatz anzuzeigen.",
1118
+ // objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
1119
+ // `detail.*` pack did not already name, and the `formatFieldChange`
1120
+ // sentences, which are assembled in code and so need interpolation holes.
1121
+ allFilter: 'Alle',
1122
+ createsFilter: 'Erstellungen',
1123
+ deletesFilter: 'Löschungen',
1124
+ statusChangesFilter: 'Statusänderungen',
1125
+ activityEmptyValue: '(leer)',
1126
+ activityFieldChanged: '{{field}} von „{{old}}“ zu „{{new}}“ geändert',
1127
+ activityCreated: 'Diesen Datensatz erstellt',
1128
+ activityDeleted: 'Diesen Datensatz gelöscht',
1129
+ activityStatusChanged: 'Status zu „{{value}}“ geändert',
1130
+ activityUpdated: 'Datensatz aktualisiert',
941
1131
  loadMore: "Mehr laden",
942
1132
  edited: "(bearbeitet)",
943
1133
  via: "über {{source}}",
944
1134
  viewSource: "Quelle anzeigen",
945
1135
  replyCount: "{{count}} Antwort",
946
- replyCountPlural: "{{count}} Antworten",
1136
+ replyCount_one: "{{count}} Antwort",
1137
+ replyCount_other: "{{count}} Antworten",
947
1138
  replyPlaceholder: "Antworten…",
948
1139
  filterActivity: "Aktivität filtern",
949
1140
  openDiscussion: "Diskussionspanel öffnen",
@@ -958,6 +1149,7 @@ const de = {
958
1149
  writeStrippedReadonly: "Schreibgeschützt und daher nicht übernommen: {{fields}}",
959
1150
  writeStrippedByState: "Im aktuellen Status dieses Datensatzes nicht bearbeitbar und daher nicht übernommen: {{fields}}",
960
1151
  writeStrippedPrimaryKey: "Die Kennung des Datensatzes kann beim Speichern nicht geändert werden und wurde daher nicht übernommen: {{fields}}",
1152
+ writeStrippedComputed: "Wird vom Server per Formel berechnet, daher wurde der gesendete Wert nicht übernommen: {{fields}}",
961
1153
  writeStrippedUnknownReason: "Vom Server nicht übernommen: {{fields}}",
962
1154
  approvalPendingEditable: "In Genehmigung · bearbeitbar",
963
1155
  approvalPendingTooltip: "Dieser Datensatz hat eine ausstehende Genehmigungsanfrage; dieser Schritt erlaubt weiterhin die Bearbeitung",
@@ -979,6 +1171,8 @@ const de = {
979
1171
  pathStageLostUpcoming: '{{stage}}, verloren, nicht erreicht',
980
1172
  pathStageWonUpcoming: '{{stage}}, Zielphase, nicht erreicht',
981
1173
  linkCopied: "Link in die Zwischenablage kopiert",
1174
+ commentFailed: "Ihr Kommentar wurde nicht veröffentlicht. Es wurde nichts gespeichert – bitte versuchen Sie es erneut.",
1175
+ reactionFailed: "Ihre Reaktion wurde nicht gespeichert. Bitte versuchen Sie es erneut.",
982
1176
  linkCopyFailed: "Link konnte nicht kopiert werden",
983
1177
  cancel: "Abbrechen",
984
1178
  cancelEdit: "Änderungen verwerfen",
@@ -1008,6 +1202,7 @@ const de = {
1008
1202
  sortBy: "Sortieren nach",
1009
1203
  filterPlaceholder: "Filtern…",
1010
1204
  highlightFields: "Schlüsselfelder",
1205
+ highlightsLabel: "Schlüsselfelder des Datensatzes",
1011
1206
  createdBy: "Erstellt von",
1012
1207
  updatedBy: "Aktualisiert von",
1013
1208
  created: "Erstellt",
@@ -1021,26 +1216,50 @@ const de = {
1021
1216
  copyPhone: "Telefonnummer kopieren",
1022
1217
  copyRecordId: "Datensatz-ID kopieren",
1023
1218
  showEmptyFields: "{{count}} leere Felder anzeigen",
1219
+ showEmptyFields_one: "{{count}} leeres Feld anzeigen",
1220
+ showEmptyFields_other: "{{count}} leere Felder anzeigen",
1024
1221
  hideEmptyFields: "Leere Felder ausblenden",
1025
1222
  noValue: "Kein Wert",
1223
+ unresolvedReference: "Nicht aufgelöste Referenz: {{value}} wurde keinem Benutzer zugeordnet",
1224
+ unresolvedLookupReference: "Nicht aufgelöste Referenz: {{value}} wurde auf dieser Ansicht keinem Datensatz zugeordnet",
1225
+ repeaterItemCount: "{{count}} Einträge",
1226
+ repeaterItemCount_one: "{{count}} Eintrag",
1227
+ repeaterItemCount_other: "{{count}} Einträge",
1228
+ fileCount: "{{count}} Dateien",
1229
+ fileCount_one: "{{count}} Datei",
1230
+ fileCount_other: "{{count}} Dateien",
1026
1231
  },
1027
1232
  chart: {
1028
- noData: "Keine Diagrammdaten verfügbar",
1029
1233
  loading: "Diagramm wird geladen…",
1234
+ refreshing: "Wird aktualisiert…",
1030
1235
  nullCategory: "(Ohne Angabe)",
1031
- },
1032
- map: {
1033
- searchLocations: "Orte suchen…",
1034
- locationDetails: "Standortdetails",
1035
- markersCount: "{{count}} Markierungen",
1036
- invalidCoordinates: "{{count}} Datensatz mit fehlenden oder ungültigen Koordinaten von der Karte ausgeschlossen.",
1037
- invalidCoordinatesPlural: "{{count}} Datensätze mit fehlenden oder ungültigen Koordinaten von der Karte ausgeschlossen.",
1236
+ scatterOneMeasure: "Ein Streudiagramm zeichnet genau eine Kennzahl. Behalten Sie nur eine Datenreihe:",
1237
+ unconfigured: {
1238
+ noCategoryAxis: "Kategorieachse des Diagramms erforderlich — ein objektgebundenes Diagramm erfindet keine. Deklarieren Sie eine davon:",
1239
+ },
1038
1240
  },
1039
1241
  dashboard: {
1040
- noRows: "Keine Zeilen",
1242
+ // objectui#7063 — the DEFAULT empty state every dashboard widget renders
1243
+ // when its query SUCCEEDED and returned nothing. It replaced the terse
1244
+ // per-widget `noRows` / `noDataAvailable` fragments at the render site;
1245
+ // objectui#7125 deleted those two keys from all ten packs once nothing
1246
+ // read them. The copy here has to read as a state rather than a failure,
1247
+ // which is why it says the widget loaded. `sourceLabel` carries its own
1248
+ // punctuation so the call site concatenates no separator (see
1249
+ // `WidgetEmptyState`).
1250
+ empty: {
1251
+ title: "Noch keine Daten",
1252
+ message: "Dieses Widget wurde erfolgreich geladen, die Abfrage hat aber noch keine Datensätze zurückgegeben.",
1253
+ sourceLabel: "Datenquelle:",
1254
+ },
1041
1255
  loading: "Wird geladen…",
1256
+ refreshing: "Wird aktualisiert…",
1257
+ refreshAll: "Alle aktualisieren",
1258
+ refreshDashboard: "Dashboard aktualisieren",
1042
1259
  pickMeasures: "Wählen Sie Kennzahlen (Werte) für dieses Dataset-Widget.",
1043
1260
  datasetUnsupported: "Diese Datenquelle unterstützt keine Dataset-Abfragen.",
1261
+ widgetForbiddenTitle: "Kein Zugriff",
1262
+ widgetForbiddenMessage: "Sie haben keine Berechtigung, die Daten dieses Widgets anzuzeigen.",
1044
1263
  details: "Details",
1045
1264
  exportCsv: "CSV exportieren",
1046
1265
  openInList: "In Liste öffnen",
@@ -1068,12 +1287,10 @@ const de = {
1068
1287
  },
1069
1288
  },
1070
1289
  addWidget: "Widget hinzufügen",
1071
- removeWidget: "Widget entfernen",
1072
1290
  editLayout: "Layout bearbeiten",
1073
1291
  saveLayout: "Layout speichern",
1074
1292
  resetLayout: "Layout zurücksetzen",
1075
1293
  total: "Gesamt",
1076
- noDataAvailable: "Keine Daten verfügbar",
1077
1294
  noDataSourceFor: "Keine Datenquelle verfügbar für",
1078
1295
  config: {
1079
1296
  breadcrumb: {
@@ -1195,10 +1412,6 @@ const de = {
1195
1412
  appDescription: "Beschreibung",
1196
1413
  appIcon: "Symbol",
1197
1414
  template: "Vorlage",
1198
- layout: "Layout",
1199
- layoutSidebar: "Seitenleiste",
1200
- layoutHeader: "Kopfzeile",
1201
- layoutEmpty: "Leer",
1202
1415
  selectObjects: "Objekte auswählen",
1203
1416
  searchObjects: "Objekte suchen…",
1204
1417
  selectAll: "Alle auswählen",
@@ -1207,7 +1420,6 @@ const de = {
1207
1420
  addGroup: "Gruppe hinzufügen",
1208
1421
  addUrl: "URL hinzufügen",
1209
1422
  addSeparator: "Trenner hinzufügen",
1210
- noNavItems: "Noch keine Navigationselemente.",
1211
1423
  logoUrl: "Logo-URL",
1212
1424
  primaryColor: "Primärfarbe",
1213
1425
  faviconUrl: "Favicon-URL",
@@ -1234,13 +1446,12 @@ const de = {
1234
1446
  appearance: "Erscheinungsbild",
1235
1447
  rowHeight: "Zeilenhöhe",
1236
1448
  livePreview: "Echtzeit-Vorschau",
1237
- stepBasicDesc: "Name, Titel und Layout",
1449
+ stepBasicDesc: "Name, Titel und Symbol",
1238
1450
  stepObjectsDesc: "Geschäftsobjekte auswählen",
1239
1451
  stepNavigationDesc: "Navigationsbaum erstellen",
1240
1452
  stepBrandingDesc: "Logo, Farben und Favicon",
1241
1453
  noObjectsFound: "Keine Objekte gefunden.",
1242
1454
  noNavItemsHint: "Noch keine Navigationselemente. Wählen Sie Objekte im vorherigen Schritt aus oder fügen Sie manuell hinzu.",
1243
- separator: "Trennlinie",
1244
1455
  separatorLabel: "— Trennlinie —",
1245
1456
  newGroup: "Neue Gruppe",
1246
1457
  newLink: "Neuer Link",
@@ -1274,6 +1485,7 @@ const de = {
1274
1485
  navTypeSeparator: "Trenner",
1275
1486
  navTypeAction: "Aktion",
1276
1487
  navTypeComponent: "Komponente",
1488
+ navTypeDoc: "Dokument",
1277
1489
  navEditIcon: "Symbol bearbeiten",
1278
1490
  navToggleVisible: "Sichtbarkeit umschalten",
1279
1491
  navHidden: "Ausgeblendet",
@@ -1351,11 +1563,8 @@ const de = {
1351
1563
  defaultValue: "Standardwert",
1352
1564
  placeholder: "Platzhalter",
1353
1565
  referenceTo: "Verweis auf",
1354
- formula: "Formel",
1355
1566
  options: "Optionen",
1356
1567
  addOption: "Option hinzufügen",
1357
- validationRules: "Validierungsregeln",
1358
- addRule: "Regel hinzufügen",
1359
1568
  systemBadge: "System",
1360
1569
  ungrouped: "Allgemein",
1361
1570
  deleteConfirmTitle: "Feld löschen?",
@@ -1374,7 +1583,21 @@ const de = {
1374
1583
  },
1375
1584
  },
1376
1585
  console: {
1586
+ studio: {
1587
+ backToHome: "Zurück zur Startseite",
1588
+ },
1377
1589
  saveAdvisoryTitle: "Gespeichert — die Autorenprüfung ergab {{count}} Hinweis(e)",
1590
+ saveAdvisoryTitle_one: "Gespeichert — die Autorenprüfung ergab {{count}} Hinweis",
1591
+ saveAdvisoryTitle_other: "Gespeichert — die Autorenprüfung ergab {{count}} Hinweise",
1592
+ publishAdvisoryTitle: "Veröffentlicht — die Autorenprüfung ergab {{count}} Hinweis(e)",
1593
+ publishAdvisoryTitle_one: "Veröffentlicht — die Autorenprüfung ergab {{count}} Hinweis",
1594
+ publishAdvisoryTitle_other: "Veröffentlicht — die Autorenprüfung ergab {{count}} Hinweise",
1595
+ importMappingsUnavailable: "Gespeicherte Importzuordnungen für {{object}} konnten nicht geladen werden",
1596
+ importMappingsRefused: "Der Server hat diese Anfrage abgelehnt. Die Liste ist also leer, weil sie nicht gelesen werden konnte — nicht, weil nichts registriert ist. Melden Sie sich erneut an oder bitten Sie eine Administratorin oder einen Administrator um Zugriff.",
1597
+ importMappingsUnreadable: "Diese Liste ist leer, weil sie nicht gelesen werden konnte, nicht weil nichts registriert ist. Versuchen Sie es erneut und melden Sie das Problem, wenn es weiterhin auftritt.",
1598
+ savedViewsUnavailable: "Gespeicherte Ansichten für {{object}} konnten nicht geladen werden",
1599
+ savedViewsRefused: "Der Server hat diese Anfrage abgelehnt. Die Liste ist also leer, weil sie nicht gelesen werden konnte — nicht, weil dieses Objekt keine gespeicherten Ansichten hätte. Melden Sie sich erneut an oder bitten Sie eine Administratorin oder einen Administrator um Zugriff.",
1600
+ savedViewsUnreadable: "Diese Liste ist leer, weil sie nicht gelesen werden konnte, nicht weil dieses Objekt keine gespeicherten Ansichten hätte. Versuchen Sie es erneut und melden Sie das Problem, wenn es weiterhin auftritt.",
1378
1601
  settingsHub: {
1379
1602
  title: "Einstellungen",
1380
1603
  subtitle: "Konfigurieren Sie Ihren Workspace, Integrationen und Feature-Flags.",
@@ -1435,9 +1658,16 @@ const de = {
1435
1658
  statusFull: "Limit erreicht",
1436
1659
  resetsDaily: "Wird heute Nacht zurückgesetzt",
1437
1660
  resetsMonthly: "Wird im nächsten Zyklus zurückgesetzt",
1661
+ resetsWeeklyDays: "Wird in {{count}} Tagen zurückgesetzt",
1662
+ resetsWeeklyDays_one: "Wird in {{count}} Tag zurückgesetzt",
1663
+ resetsWeeklyDays_other: "Wird in {{count}} Tagen zurückgesetzt",
1664
+ resetsWeeklyHours: "Wird in {{count}} Stunden zurückgesetzt",
1665
+ resetsWeeklyHours_one: "Wird in {{count}} Stunde zurückgesetzt",
1666
+ resetsWeeklyHours_other: "Wird in {{count}} Stunden zurückgesetzt",
1438
1667
  ctaUpgrade: "Upgraden, um weiterzumachen",
1439
1668
  ctaTopUp: "Credits hinzufügen, um fortzufahren",
1440
1669
  ariaLabel: "KI-Nutzung: {{status}}",
1670
+ breakdownTitle: "Bisher verbraucht",
1441
1671
  },
1442
1672
  workspaceTitle: "KI-Workspace",
1443
1673
  workspaceSubtitle: "Fragen stellen, prüfen und Unterhaltungen fortsetzen",
@@ -1447,6 +1677,31 @@ const de = {
1447
1677
  share: "Teilen",
1448
1678
  shareTitle: "Diese Unterhaltung teilen",
1449
1679
  shareDisabledTitle: "Beginnen Sie zu chatten, um das Teilen zu aktivieren",
1680
+ buildDoctor: "Build-Diagnose",
1681
+ buildDoctorTitle: "Build-Diagnose — was ist tatsächlich angekommen?",
1682
+ buildDoctorDisabledTitle: "Senden Sie zuerst eine Nachricht",
1683
+ buildDoctorDrawer: {
1684
+ description: 'Was der Agent behauptet hat und was tatsächlich live ist. Schreibgeschützte Diagnose.',
1685
+ reconciling: 'Wird abgeglichen…',
1686
+ notAvailable: 'Nicht verfügbar — die Unterhaltung wurde nicht gefunden oder Sie sind nicht berechtigt.',
1687
+ untitled: '(ohne Titel)',
1688
+ summary: '{{turns}} Runde(n) · {{messages}} Nachr. · {{tokens}} Tok. · {{seconds}} s LLM',
1689
+ allLive: 'Alle {{count}} versuchten Änderung(en) sind live — nichts ist verloren gegangen.',
1690
+ discrepancies: '{{count}} Abweichung(en) — was der Chat gesagt hat, stimmt nicht mit dem überein, was live ist.',
1691
+ orphanedTitle: 'Vorgeschlagen, aber nie angewendet',
1692
+ orphanedHint: 'Eine Bestätigungskarte, die der Agent vorgeschlagen hat, die aber keine spätere Runde angewendet hat — die Änderung ist stillschweigend verloren gegangen.',
1693
+ missingTitle: 'Behauptet, aber fehlend',
1694
+ missingHint: 'Ein Tool-Ergebnis meldete die Änderung als angewendet, aber das Artefakt ist in sys_metadata nicht live.',
1695
+ toolErrorsTitle: 'Tool-Fehler',
1696
+ toolErrorsHint: 'Tool-Aufrufe, die während des Builds einen Fehler zurückgegeben haben.',
1697
+ verifyTitle: 'Build-Prüfung (verify_build)',
1698
+ yourApp: 'Ihre App:',
1699
+ noIssues: '0 Probleme',
1700
+ issueCount: '{{count}} Problem(e)',
1701
+ platformNoise: '{{count}} Plattform-sys_*-Befund(e) ausgeblendet',
1702
+ pendingActions: 'Ausstehende Aktionen',
1703
+ timeline: 'Zeitleiste ({{count}})',
1704
+ },
1450
1705
  newChat: "Neu",
1451
1706
  searchChats: "Chats durchsuchen…",
1452
1707
  noChatsYet: "Noch keine Chats",
@@ -1476,7 +1731,7 @@ const de = {
1476
1731
  empty: {
1477
1732
  build: {
1478
1733
  title: "Mit KI erstellen",
1479
- description: "Beschreiben Sie eine App oder einen Workflow in einfachen Worten — ich entwerfe die Objekte, Bildschirme und Automatisierungen, dann prüfen und veröffentlichen Sie.",
1734
+ description: "Beschreiben Sie eine App in einfachen Worten — ich entwerfe die Objekte, Bildschirme und Beispieldaten, dann prüfen und veröffentlichen Sie.",
1480
1735
  },
1481
1736
  ask: {
1482
1737
  title: "Ihre Daten fragen",
@@ -1485,7 +1740,7 @@ const de = {
1485
1740
  editApp: {
1486
1741
  title: "„{{app}}“ wird bearbeitet",
1487
1742
  titleGeneric: "Diese App bearbeiten",
1488
- description: "Was möchten Sie ändern? Ich passe diese App direkt an — ein Feld, Objekt, eine Ansicht oder Automatisierung hinzufügen oder Vorhandenes anpassen.",
1743
+ description: "Was möchten Sie ändern? Ich passe diese App direkt an — ein Feld, Objekt, eine Ansicht oder ein Dashboard hinzufügen oder Vorhandenes anpassen.",
1489
1744
  },
1490
1745
  },
1491
1746
  clearConversation: "Leeren",
@@ -1538,23 +1793,41 @@ const de = {
1538
1793
  recentRecords: "Liste die 5 zuletzt erstellten Datensätze auf.",
1539
1794
  recordCounts: "Zähle die Datensätze je Objekt.",
1540
1795
  },
1796
+ // cloud#1984 — these five chips are the maker's own recommendations, so
1797
+ // they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
1798
+ // (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
1799
+ // wording that promises autonomous behaviour (alert / remind / notify /
1800
+ // automate / status workflow) — v1 has no flows, actions or schedules, and
1801
+ // the model silently degrades such a request into a board or a filtered
1802
+ // view, so the chip would promise an alert and deliver a page. REVERT to
1803
+ // the automation wording when ADR-0112 v2 re-adds flows and actions.
1541
1804
  metadataAssistant: {
1542
- buildCrm: "Erstelle ein Vertriebs-CRM — Kunden, Kontakte und eine Deal-Pipeline, die ich nach Phase summieren kann.",
1543
- buildApp: "Erstelle einen Projekt-Tracker — Projekte, Aufgaben mit Verantwortlichen und Fälligkeitsdaten sowie ein Board nach Status.",
1544
- buildFlow: "Entwirf einen Support-Desk — Tickets mit Priorität, einen Status-Workflow und Kundenverknüpfungen.",
1545
- buildInventory: "Erstelle eine Bestands-App — Produkte, Lagerbestände, Lieferanten und Sichtbarkeit niedriger Bestände.",
1546
- buildRecruiting: "Erstelle einen Bewerber-Tracker — Kandidaten, offene Stellen, Interviewphasen und Notizen.",
1805
+ buildCrm: "Erstelle ein Vertriebs-CRM — Kunden, Kontakte und Deals mit einem Phasenfeld sowie ein Dashboard, das den Deal-Wert je Phase summiert.",
1806
+ buildApp: "Erstelle einen Projekt-Tracker — Projekte, Aufgaben mit Verantwortlichen und Fälligkeitsdaten, ein Board nach Status und einen Kalender der Fälligkeiten.",
1807
+ buildFlow: "Entwirf einen Support-Desk — Tickets mit Prioritäts- und Statusfeld, ein Board nach Status und Verknüpfungen zu Kunden.",
1808
+ buildInventory: "Erstelle eine Bestands-App — Produkte, Lagerbestände, Lieferanten und eine Ansicht, die Artikel unter ihrem Meldebestand filtert.",
1809
+ buildRecruiting: "Erstelle einen Bewerber-Tracker — Kandidaten, offene Stellen, ein Feld für die Interviewphase und ein Board nach Phase.",
1547
1810
  },
1548
1811
  generic: {
1549
1812
  help: "Wobei kannst du mir helfen?",
1550
1813
  availableObjects: "Liste die verfügbaren Datenobjekte auf.",
1551
1814
  recentActivity: "Fasse meine letzten Aktivitäten zusammen.",
1552
1815
  },
1816
+ // objectui#7709 — the edit-mode starters, shown when the maker is bound
1817
+ // to an EXISTING app (`?package=`). Same rule as the five above: they
1818
+ // may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
1819
+ // `addAutomation` ("an approval, a status flow, or a notification") and
1820
+ // every capability it named is refused by v1 (cloud#1956 / PR #1970), so
1821
+ // it now asks for sample data — `seed` IS on v1's whitelist, and having
1822
+ // no data is what an existing app most often lacks. REVERT: when
1823
+ // ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
1824
+ // comes back as `addAutomation`; the retired string is pinned for every
1825
+ // pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
1553
1826
  editApp: {
1554
1827
  addField: "Füge einem der Objekte ein Feld hinzu.",
1555
1828
  addObject: "Füge ein neues Objekt hinzu und verknüpfe es mit einem bestehenden.",
1556
1829
  addDashboard: "Füge ein Dashboard für die wichtigsten Kennzahlen hinzu.",
1557
- addAutomation: "Füge eine Automatisierung hinzu — eine Freigabe, einen Statusablauf oder eine Benachrichtigung.",
1830
+ addSampleData: "Fülle die vorhandenen Objekte mit realistischen Beispieldatensätzen, damit ich die App vorführen kann.",
1558
1831
  },
1559
1832
  },
1560
1833
  changesTitle: "Änderungen bestätigen",
@@ -1636,6 +1909,13 @@ const de = {
1636
1909
  pages: "Seiten",
1637
1910
  reports: "Berichte",
1638
1911
  system: "System",
1912
+ marketplace: "Marktplatz",
1913
+ settings: 'Einstellungen',
1914
+ apps: 'Apps',
1915
+ profile: 'Profil',
1916
+ approvals: 'Genehmigungen',
1917
+ aiApprovals: 'KI-Genehmigungen',
1918
+ auditLog: 'Audit-Protokoll',
1639
1919
  },
1640
1920
  // objectui#4024 — the single-namespace settings screen. Its sibling
1641
1921
  // `settingsHub` above already resolved through this pack; the view was the
@@ -1727,6 +2007,21 @@ const de = {
1727
2007
  records: "Datensätze",
1728
2008
  recentRecords: "Zuletzt angesehen",
1729
2009
  },
2010
+ // objectui#9954 — see the `en` pack for what raises each case.
2011
+ readRate: {
2012
+ ratioTitle: 'Ungewöhnliches Lesevolumen in dieser Umgebung',
2013
+ ratio: 'Pro geschriebener Zeile werden {{ratio}} Zeilen gelesen. Die Plattform meldet alles über {{threshold}}. Es wird nichts begrenzt oder blockiert; dies ist ein Bericht, damit das Lesemuster geprüft werden kann.',
2014
+ noWritesTitle: 'Lesevorgänge ganz ohne Schreibvorgänge in dieser Umgebung',
2015
+ noWrites: 'Es werden Zeilen gelesen, aber überhaupt keine geschrieben, sodass die Leserate keine Obergrenze hat. Das ist der schwerwiegendste Messwert. Die Plattform meldet alles über {{threshold}}. Es wird nichts begrenzt oder blockiert; dies ist ein Bericht, damit das Lesemuster geprüft werden kann.',
2016
+ },
2017
+ // objectui#10439 — see the `en` pack for what raises each case.
2018
+ storageUsage: {
2019
+ warningTitle: 'Der Speicher ist fast voll',
2020
+ warning: '{{used}} MB von {{limit}} MB belegt. Uploads und Importe werden pausiert, sobald der Speicher voll ist.',
2021
+ blockedTitle: 'Speicher voll: Uploads und Importe sind pausiert',
2022
+ blocked: '{{used}} MB von {{limit}} MB belegt. Vorhandene Daten bleiben unverändert; Lesen, Exportieren und das Bearbeiten einzelner Datensätze funktionieren weiterhin.',
2023
+ upgrade: 'Upgraden, um fortzufahren',
2024
+ },
1730
2025
  errors: {
1731
2026
  somethingWentWrong: "Etwas ist schiefgelaufen",
1732
2027
  unexpectedError: "Beim Rendern dieser Ansicht ist ein unerwarteter Fehler aufgetreten.",
@@ -1757,6 +2052,7 @@ const de = {
1757
2052
  viewNameInvalid: "Verwenden Sie Kleinbuchstaben, Ziffern und Unterstriche; beginnen Sie mit einem Buchstaben oder Unterstrich.",
1758
2053
  systemViewReadonly: "Systemansicht — im Code definiert, schreibgeschützt.",
1759
2054
  cannotEditMetaView: "Diese Ansicht ist integriert und im Code definiert – sie kann nicht geändert werden.",
2055
+ viewConfigPermissionDenied: "Ansichtseinstellungen gelten für alle Benutzer dieser Ansicht. Ihre Änderung erfordert daher die Berechtigung „Metadaten verwalten“. Bitten Sie einen Administrator, diese Änderung vorzunehmen.",
1760
2056
  cannotDeleteMetaView: "Diese Ansicht ist integriert und im Code definiert – sie kann nicht gelöscht werden.",
1761
2057
  expandToPage: "Als ganze Seite öffnen",
1762
2058
  objectNotFound: "Objekt nicht gefunden",
@@ -1767,12 +2063,13 @@ const de = {
1767
2063
  allRecords: "Alle Datensätze",
1768
2064
  new: "Neu",
1769
2065
  configureView: "Ansicht konfigurieren",
1770
- toolbar: "Symbolleiste",
1771
2066
  toolbarEnabledCount: "{{count}} von {{total}} aktiviert",
1772
2067
  searchFields: "Felder suchen…",
1773
2068
  title: "Titel",
1774
2069
  viewType: "Ansichtstyp",
1775
2070
  recordCount: "{{count}} Datensätze",
2071
+ recordCount_one: "{{count}} Datensatz",
2072
+ recordCount_other: "{{count}} Datensätze",
1776
2073
  save: "Speichern",
1777
2074
  discard: "Verwerfen",
1778
2075
  createView: "Ansicht erstellen",
@@ -1784,11 +2081,12 @@ const de = {
1784
2081
  longitudeField: "Längengradfeld",
1785
2082
  imageField: "Bildfeld",
1786
2083
  selectField: "Feld auswählen…",
1787
- groupBy: "Gruppieren nach",
1788
2084
  endDateField: "Enddatumsfeld",
1789
2085
  import: "Importieren",
1790
2086
  importTitle: "Aus CSV importieren",
1791
2087
  importedToast: "{{count}} Zeile(n) importiert.",
2088
+ importedToast_one: "{{count}} Zeile importiert.",
2089
+ importedToast_other: "{{count}} Zeilen importiert.",
1792
2090
  importedWithSkipped: "{{ok}} Zeile(n) importiert; {{skipped}} übersprungen.",
1793
2091
  createViewDesc: "Wählen Sie einen Ansichtstyp und geben Sie ihm einen Namen. Alle Einstellungen können danach geändert werden.",
1794
2092
  cancel: "Abbrechen",
@@ -1797,6 +2095,8 @@ const de = {
1797
2095
  deleteViewTitle: "Ansicht löschen",
1798
2096
  deleteViewConfirm: "Möchten Sie die Ansicht „{{name}}“ wirklich löschen? Dies kann nicht rückgängig gemacht werden.",
1799
2097
  bulkDeleteConfirm: "{{count}} ausgewählte Datensätze löschen? Dies kann nicht rückgängig gemacht werden.",
2098
+ bulkDeleteConfirm_one: "{{count}} ausgewählten Datensatz löschen? Dies kann nicht rückgängig gemacht werden.",
2099
+ bulkDeleteConfirm_other: "{{count}} ausgewählte Datensätze löschen? Dies kann nicht rückgängig gemacht werden.",
1800
2100
  duplicateViewName: "Eine Ansicht mit diesem Namen existiert bereits.",
1801
2101
  viewTypeGrid: "Raster",
1802
2102
  viewTypeGridDesc: "Tabellenkalkulationsartige Tabelle von Datensätzen.",
@@ -1833,10 +2133,14 @@ const de = {
1833
2133
  chartTypePie: "Kreisdiagramm",
1834
2134
  chartTypeArea: "Flächendiagramm",
1835
2135
  chartTypeScatter: "Streudiagramm",
1836
- xAxisField: "X-Achse-Feld",
1837
- xAxisFieldHelp: "Die kategoriale oder zeitliche Dimension.",
1838
- yAxisField: "Y-Achse-Feld",
1839
- yAxisFieldHelp: "Das numerische Feld zur Aggregation.",
2136
+ dataset: "Datensatz",
2137
+ datasetHelp: "Das Diagramm liest seine Werte aus diesem Datensatz des Objekts.",
2138
+ chartMeasure: "Kennzahl",
2139
+ chartMeasureHelp: "Die Kennzahl des Datensatzes auf der Werteachse.",
2140
+ chartDimension: "Dimension",
2141
+ chartDimensionHelp: "Die Dimension des Datensatzes, nach der die Werte gruppiert werden (optional).",
2142
+ viewTypeUnavailableDataset: "Dieses Objekt stellt keinen Datensatz für Diagramme bereit.",
2143
+ noDatasetMeasure: "Dieser Datensatz deklariert keine Kennzahl für ein Diagramm.",
1840
2144
  ufTabs: "Registerkarten",
1841
2145
  ufAddField: "+ Filterfeld hinzufügen…",
1842
2146
  ufShowAllRecords: "Registerkarte „Alle Datensätze“ anzeigen",
@@ -1850,6 +2154,9 @@ const de = {
1850
2154
  unpinItem: "{{name}} loslösen",
1851
2155
  dragToReorder: "Zum Neuanordnen ziehen",
1852
2156
  favorites: "Favoriten",
2157
+ launcherLabel: "App-Launcher",
2158
+ menuLabel: "App-Navigation",
2159
+ menuEmpty: "Diese App hat keine Navigationseinträge, die Sie öffnen können.",
1853
2160
  },
1854
2161
  },
1855
2162
  auth: {
@@ -1903,6 +2210,8 @@ const de = {
1903
2210
  resendOtpCountdownText: "Erneut senden in {seconds} s",
1904
2211
  usePhoneOtpText: "Mit Bestätigungscode anmelden",
1905
2212
  usePasswordSignInText: "Stattdessen mit Passwort anmelden",
2213
+ socialButton: "Weiter mit {provider}",
2214
+ orText: "oder mit E-Mail fortfahren",
1906
2215
  },
1907
2216
  register: {
1908
2217
  title: "Konto erstellen",
@@ -1921,8 +2230,12 @@ const de = {
1921
2230
  submittingButton: "Konto wird erstellt…",
1922
2231
  hasAccountText: "Bereits ein Konto?",
1923
2232
  signInText: "Anmelden",
2233
+ socialButton: "Mit {provider} registrieren",
2234
+ orText: "oder mit E-Mail fortfahren",
1924
2235
  errors: {
1925
2236
  userExists: "Ein Konto mit dieser E-Mail existiert bereits. Versuchen Sie sich anzumelden.",
2237
+ selfRegistrationClosed: "Die Selbstregistrierung ist in dieser Umgebung nicht möglich. Bitten Sie einen Administrator um eine Einladung.",
2238
+ emailDomainNotAllowed: "Die Domain dieser E-Mail-Adresse ist für die Registrierung hier nicht zugelassen. Verwenden Sie die E-Mail-Adresse Ihrer Organisation oder bitten Sie einen Administrator um eine Einladung.",
1926
2239
  },
1927
2240
  verifyInbox: {
1928
2241
  title: "Überprüfen Sie Ihren Posteingang",
@@ -2022,20 +2335,20 @@ const de = {
2022
2335
  approveWarning: "Genehmigen Sie nur, wenn Sie diese Verbindung soeben selbst gestartet haben. Nach der Genehmigung kann diese Laufzeitumgebung auf die privaten Pakete Ihrer Organisation zugreifen.",
2023
2336
  loggedInAs: "Angemeldet als {{email}}",
2024
2337
  approve: "Gerät genehmigen",
2025
- approving: "Genehmige…",
2338
+ approving: "Wird genehmigt…",
2026
2339
  approvedTitle: "Gerät autorisiert",
2027
2340
  approvedDescription: "Sie können zum Gerät zurückkehren — es sollte sich in Kürze anmelden.",
2028
2341
  approveSuccess: "Gerät autorisiert",
2029
2342
  approveSuccessDescription: "Sie können dieses Fenster schließen.",
2030
2343
  approveFailed: "Genehmigung fehlgeschlagen",
2031
2344
  deny: "Anfrage ablehnen",
2032
- denying: "Ablehne…",
2345
+ denying: "Wird abgelehnt…",
2033
2346
  deniedTitle: "Zugriff verweigert",
2034
2347
  deniedDescription: "Dem Gerät wird kein Zugriff gewährt.",
2035
2348
  denyFailed: "Anfrage konnte nicht abgelehnt werden",
2036
2349
  invalidTitle: "Ungültiger Gerätelink",
2037
2350
  invalidDescription: "In der URL wurde kein Gerätecode angegeben.",
2038
- loading: "Lade…",
2351
+ loading: "Wird geladen…",
2039
2352
  cancel: "Abbrechen",
2040
2353
  // objectui#3546 slice three — device-authorization plugin switched off.
2041
2354
  disabledTitle: "Geräteautorisierung nicht aktiviert",
@@ -2121,6 +2434,15 @@ const de = {
2121
2434
  role: "Rolle",
2122
2435
  save: "Änderungen speichern",
2123
2436
  },
2437
+ language: {
2438
+ title: "Sprache",
2439
+ description: "Die Sprache für Benachrichtigungen und Nachrichten, die an Sie gesendet werden. Die Oberflächensprache wird separat über das Globus-Menü gewählt.",
2440
+ label: "Bevorzugte Sprache",
2441
+ systemDefault: "Standard der Bereitstellung verwenden",
2442
+ save: "Speichern",
2443
+ saved: "Spracheinstellung aktualisiert.",
2444
+ readOnly: "Die Sprache Ihres Kontos wird von Ihrer Administration verwaltet.",
2445
+ },
2124
2446
  password: {
2125
2447
  changeTitle: "Passwort ändern",
2126
2448
  setTitle: "Lokales Passwort festlegen",
@@ -2152,7 +2474,6 @@ const de = {
2152
2474
  label: "Arbeitsbereiche",
2153
2475
  default: "Mein Arbeitsbereich",
2154
2476
  switch: "Arbeitsbereich wechseln",
2155
- create: "Arbeitsbereich erstellen",
2156
2477
  createTitle: "Arbeitsbereich erstellen",
2157
2478
  createDescription: "Ein Arbeitsbereich ist ein gemeinsamer Raum für Ihr Team zur Zusammenarbeit.",
2158
2479
  createButton: "Arbeitsbereich erstellen",
@@ -2177,7 +2498,6 @@ const de = {
2177
2498
  packageManagement: "Paketverwaltung",
2178
2499
  searchNavigation: "Navigation durchsuchen…",
2179
2500
  settings: "Einstellungen",
2180
- help: "Hilfe",
2181
2501
  helpTooltip: "Hilfe und Dokumentation",
2182
2502
  activityFeed: "Aktivitätsfeed",
2183
2503
  notifications: "Benachrichtigungen",
@@ -2237,6 +2557,8 @@ const de = {
2237
2557
  },
2238
2558
  pendingDrafts: {
2239
2559
  message: "Sie haben {{count}} unveröffentlichte Änderung(en) — veröffentlichen Sie sie, um sie live zu schalten.",
2560
+ message_one: "Sie haben {{count}} unveröffentlichte Änderung — veröffentlichen Sie sie, um sie live zu schalten.",
2561
+ message_other: "Sie haben {{count}} unveröffentlichte Änderungen — veröffentlichen Sie sie, um sie live zu schalten.",
2240
2562
  cta: "Veröffentlichen",
2241
2563
  publishing: "Wird veröffentlicht…",
2242
2564
  published: "Veröffentlicht! Ihre Änderungen sind live.",
@@ -2251,7 +2573,6 @@ const de = {
2251
2573
  capabilityWarn: "Autorenprüfung: {{count}} Capability-Verweis(e) verweisen ins Leere.",
2252
2574
  },
2253
2575
  title: "Startseite",
2254
- subtitle: "Ihr Arbeitsbereich-Dashboard",
2255
2576
  nav: "Startseite",
2256
2577
  allApps: "Alle Anwendungen",
2257
2578
  yourApps: "Ihre Apps",
@@ -2263,8 +2584,6 @@ const de = {
2263
2584
  empty: "Alles erledigt",
2264
2585
  },
2265
2586
  loading: "Arbeitsbereich wird geladen…",
2266
- recent: "Kürzlich",
2267
- starred: "Mit Stern",
2268
2587
  welcome: "Willkommen bei ObjectUI",
2269
2588
  welcomeDescription: "Erstellen Sie zunächst Ihre erste Anwendung oder konfigurieren Sie Ihre Systemeinstellungen.",
2270
2589
  createFirstApp: "Erstellen Sie Ihre erste App",
@@ -2272,8 +2591,6 @@ const de = {
2272
2591
  browseMarketplace: "App-Marktplatz durchsuchen",
2273
2592
  quickActions: {
2274
2593
  title: "Schnellaktionen",
2275
- createApp: "App erstellen",
2276
- createAppDesc: "Beginnen Sie mit einer neuen Anwendung",
2277
2594
  manageObjects: "Objekte verwalten",
2278
2595
  manageObjectsDesc: "Datenmodelle konfigurieren",
2279
2596
  systemSettings: "Systemeinstellungen",
@@ -2289,18 +2606,15 @@ const de = {
2289
2606
  greetingNight: "Nachtschicht",
2290
2607
  heroTagline: "Machen Sie dort weiter, wo Sie aufgehört haben, oder entdecken Sie etwas Neues.",
2291
2608
  open: "Öffnen",
2292
- stats: {
2293
- apps: "Anwendungen",
2294
- starred: "Markiert",
2295
- recent: "Zuletzt verwendet",
2296
- },
2297
2609
  recentApps: {
2298
2610
  title: "Zuletzt geöffnet",
2299
2611
  itemType: {
2300
2612
  object: "Objekt",
2301
2613
  dashboard: "Dashboard",
2302
2614
  page: "Seite",
2615
+ report: "Bericht",
2303
2616
  record: "Datensatz",
2617
+ metadata: "Metadaten",
2304
2618
  },
2305
2619
  },
2306
2620
  starredApps: {
@@ -2322,7 +2636,6 @@ const de = {
2322
2636
  organizations: "Organisationen",
2323
2637
  roles: "Rollen",
2324
2638
  configuration: "Konfiguration",
2325
- createApp: "App erstellen",
2326
2639
  administration: "Verwaltung",
2327
2640
  datasources: "Datenquellen",
2328
2641
  documentation: "Dokumentation",
@@ -2347,6 +2660,7 @@ const de = {
2347
2660
  typeUpdate: "Aktualisieren",
2348
2661
  typeDelete: "Löschen",
2349
2662
  typeComment: "Kommentar",
2663
+ typeSystem: "System",
2350
2664
  relativeJustNow: "gerade eben",
2351
2665
  relativeSecondsAgo: "vor {{count}}s",
2352
2666
  relativeMinutesAgo: "vor {{count}}m",
@@ -2368,8 +2682,11 @@ const de = {
2368
2682
  placeholder: "Objekte, Dashboards, Seiten, Berichte suchen…",
2369
2683
  inputAriaLabel: "Objekte, Dashboards, Seiten, Berichte suchen",
2370
2684
  resultsCount: "{{count}} Ergebnis für „{{query}}“",
2371
- resultsCountPlural: "{{count}} Ergebnisse für „{{query}}“",
2685
+ resultsCount_one: "{{count}} Ergebnis für „{{query}}“",
2686
+ resultsCount_other: "{{count}} Ergebnisse für „{{query}}“",
2372
2687
  itemsAvailable: "{{count}} Elemente verfügbar",
2688
+ itemsAvailable_one: "{{count}} Element verfügbar",
2689
+ itemsAvailable_other: "{{count}} Elemente verfügbar",
2373
2690
  noResults: "Keine Ergebnisse gefunden",
2374
2691
  noResultsHint: "Versuchen Sie, Ihre Suchbegriffe anzupassen",
2375
2692
  typeObjects: "Objekte",
@@ -2394,7 +2711,11 @@ const de = {
2394
2711
  noAppsConfigured: "Keine Apps konfiguriert",
2395
2712
  noAppsConfiguredDescription: "Es sind keine Anwendungen registriert. Erstellen Sie Ihre erste App oder besuchen Sie die Systemeinstellungen.",
2396
2713
  appNotAvailable: "App nicht verfügbar",
2397
- appNotAvailableDescription: "Diese App ist noch nicht verfügbar — sie wird möglicherweise noch veröffentlicht. Versuchen Sie es in einem Moment erneut.",
2714
+ appNotAvailableDescription: "Diese App ist nicht verfügbar — versuchen Sie es in einem Moment erneut.",
2715
+ appNotFound: "Diese App kann nicht geöffnet werden",
2716
+ appNotFoundDescription: "Der Server hat diese App für Ihr Konto nicht zurückgegeben.",
2717
+ appUnreachable: "Der Server ist nicht erreichbar",
2718
+ appUnreachableDescription: "Diese App konnte nicht geprüft werden. Versuchen Sie es in einem Moment erneut.",
2398
2719
  appAccessDenied: "Sie haben keinen Zugriff auf diese App",
2399
2720
  appAccessDeniedDescription: "Diese App existiert, aber Ihr Konto ist nicht berechtigt, sie zu öffnen. Bitten Sie einen Administrator um Zugriff.",
2400
2721
  appAccessDeniedHome: "Zurück zur Startseite",
@@ -2409,11 +2730,11 @@ const de = {
2409
2730
  description: "Bitte geben Sie die erforderlichen Informationen ein, um fortzufahren.",
2410
2731
  selectPlaceholder: "{{label}} auswählen",
2411
2732
  requiredError: "{{label}} ist erforderlich",
2733
+ unresolvedParam: 'Dieser Parameter kann nicht angezeigt werden: Das zugrunde liegende Feld fehlt in den Objektmetadaten, daher lässt sich das benötigte Steuerelement nicht erzeugen. Bitten Sie eine Administratorin oder einen Administrator, die Aktionsdefinition zu korrigieren.',
2734
+ carryOverHint: 'Unverändert übernommen (schreibgeschützt)',
2412
2735
  cancel: "Abbrechen",
2413
2736
  confirm: "Bestätigen",
2414
2737
  uploading: "Wird hochgeladen…",
2415
- defaultActionTitle: "Aktion",
2416
- ok: "OK",
2417
2738
  lookupPlaceholder: "Datensatz-ID für {{label}}",
2418
2739
  lookupHelpText: "Für diesen Parameter ist kein Referenzobjekt konfiguriert, daher ist die Datensatzauswahl nicht verfügbar. Geben Sie eine Datensatz-ID ein oder bitten Sie einen Administrator, den Aktionsparameter zu korrigieren.",
2419
2740
  },
@@ -2422,11 +2743,6 @@ const de = {
2422
2743
  confirm: "Weiter",
2423
2744
  cancel: "Abbrechen",
2424
2745
  },
2425
- rowAction: {
2426
- openMenu: "Menü öffnen",
2427
- edit: "Bearbeiten",
2428
- delete: "Löschen",
2429
- },
2430
2746
  navigationSync: {
2431
2747
  addedPage: "Navigation aktualisiert: Seite „{{name}}“ hinzugefügt",
2432
2748
  addedDashboard: "Navigation aktualisiert: Dashboard „{{name}}“ hinzugefügt",
@@ -2447,6 +2763,8 @@ const de = {
2447
2763
  noRecordId: "Keine Datensatz-ID angegeben",
2448
2764
  deleteConfirm: "Möchten Sie diesen Datensatz wirklich löschen?",
2449
2765
  bulkDeleteSuccess: "{{count}} {{label}}-Datensätze gelöscht",
2766
+ bulkDeleteSuccess_one: "{{count}} {{label}}-Datensatz gelöscht",
2767
+ bulkDeleteSuccess_other: "{{count}} {{label}}-Datensätze gelöscht",
2450
2768
  bulkDeletePartial: "{{succeeded}} gelöscht, {{failed}} fehlgeschlagen",
2451
2769
  },
2452
2770
  objectViewActions: {
@@ -2458,15 +2776,6 @@ const de = {
2458
2776
  exportFailed: "Export fehlgeschlagen: {{message}}",
2459
2777
  forecastSoon: "Prognoseansicht kommt bald",
2460
2778
  },
2461
- recordDetail: {
2462
- viewersTooltip: "Benutzer, die diesen Datensatz gerade ansehen",
2463
- },
2464
- cellRender: {
2465
- empty: "Leer",
2466
- yes: "Ja",
2467
- no: "Nein",
2468
- systemFields: "System",
2469
- },
2470
2779
  user: {
2471
2780
  profile: "Profil",
2472
2781
  settings: "Einstellungen",
@@ -2485,7 +2794,7 @@ const de = {
2485
2794
  columnsLabel: "Spalte",
2486
2795
  allLabel: "(Alle)",
2487
2796
  emptyLabel: "(Leer)",
2488
- loading: "Laden…",
2797
+ loading: "Wird geladen…",
2489
2798
  failedToLoad: "Matrix konnte nicht geladen werden: {{message}}",
2490
2799
  needsAcross: "Matrixbericht erfordert mindestens ein `groupingsAcross`-Feld.",
2491
2800
  aggregate: {
@@ -2656,18 +2965,33 @@ const de = {
2656
2965
  regionLabel: "Benachrichtigungen",
2657
2966
  groupCount: "{{count}} Benachrichtigungen",
2658
2967
  groupUnread: "{{count}} ungelesen",
2968
+ groupUnread_one: "{{count}} ungelesen",
2969
+ groupUnread_other: "{{count}} ungelesen",
2659
2970
  groupMarkRead: "Als gelesen markieren",
2660
2971
  groupMarkReadTitle: "Alle dieses Typs als gelesen markieren",
2661
2972
  empty: "Keine Benachrichtigungen",
2662
2973
  markAllRead: "Alle als gelesen markieren",
2663
2974
  viewAll: "Alle Benachrichtigungen anzeigen",
2664
2975
  approvalsPending: "{{count}} ausstehende Genehmigungen",
2976
+ approvalsPending_one: "{{count}} ausstehende Genehmigung",
2977
+ approvalsPending_other: "{{count}} ausstehende Genehmigungen",
2665
2978
  viewApprovals: "Genehmigungen anzeigen",
2666
2979
  noPendingApprovals: "Keine ausstehenden Genehmigungen",
2667
2980
  openApprovalsInbox: "Genehmigungs-Posteingang öffnen",
2668
2981
  badgeTotal: "{{total}} insgesamt",
2669
2982
  badgeNotifications: "{{unread}} Benachrichtigungen",
2670
2983
  badgeApprovals: "{{approvals}} ausstehende Genehmigungen",
2984
+ arrivalMany: "{{count}} neue Nachrichten",
2985
+ arrivalMany_one: "{{count}} neue Nachricht",
2986
+ arrivalMany_other: "{{count}} neue Nachrichten",
2987
+ arrivalRepeats: "{{count}} neue Nachrichten zu diesem Thema",
2988
+ arrivalRepeats_one: "{{count}} neue Nachricht zu diesem Thema",
2989
+ arrivalRepeats_other: "{{count}} neue Nachrichten zu diesem Thema",
2990
+ arrivalOpen: "Ansehen",
2991
+ toastEnabled: "Hinweise in der App",
2992
+ desktopEnabled: "Desktop-Benachrichtigungen",
2993
+ desktopBlocked: "Blockiert. Erlauben Sie Benachrichtigungen für diese Website in den Browsereinstellungen.",
2994
+ desktopUnsupported: "Dieser Browser unterstützt keine Desktop-Benachrichtigungen.",
2671
2995
  emptyUnread: "Alles gelesen",
2672
2996
  filterUnread: "Ungelesen",
2673
2997
  filterAll: "Alle",
@@ -2681,12 +3005,14 @@ const de = {
2681
3005
  thankYouTitle: "Vielen Dank!",
2682
3006
  thankYouMessage: "Ihre Einreichung wurde erfolgreich empfangen.",
2683
3007
  redirecting: "Weiterleitung in {{seconds}} Sekunden…",
3008
+ redirectPending: "Weiterleitung…",
2684
3009
  unavailableTitle: "Formular nicht verfügbar",
2685
3010
  unavailableDescription: "Unter dieser URL ist kein öffentliches Formular verfügbar. Stellen Sie sicher, dass die zugrunde liegende Ansicht die anonyme Freigabe aktiviert hat.",
2686
3011
  tryDemo: "Demo ausprobieren",
2687
3012
  retry: "Erneut versuchen",
2688
3013
  loading: "Formular wird geladen…",
2689
3014
  requiredHint: "* Pflichtfeld",
3015
+ requiredFields: "Pflichtfelder: {{fields}}",
2690
3016
  consentLabelDefault: "Ich stimme der Datenschutzrichtlinie zu und willige in die Verarbeitung meiner Daten für diese Anfrage ein.",
2691
3017
  consentLink: "Datenschutzrichtlinie",
2692
3018
  consentRequired: "Bitte akzeptieren Sie die Datenschutzrichtlinie, um fortzufahren.",
@@ -2737,6 +3063,8 @@ const de = {
2737
3063
  noImportableFields: "Dieses Objekt hat keine importierbaren Felder.",
2738
3064
  schemaReadFailed: "Das Objektschema konnte nicht gelesen werden.",
2739
3065
  imported: "{{count}} Zeile(n) in {{object}} importiert.",
3066
+ imported_one: "{{count}} Zeile in {{object}} importiert.",
3067
+ imported_other: "{{count}} Zeilen in {{object}} importiert.",
2740
3068
  importFrom: "Echte Zeilen importieren aus",
2741
3069
  into: "nach",
2742
3070
  opening: "Wird geöffnet…",
@@ -2750,6 +3078,76 @@ const de = {
2750
3078
  openProduction: "Produktion öffnen",
2751
3079
  manageEnvironments: "Umgebungen verwalten",
2752
3080
  },
3081
+ cloudPlanStatus: {
3082
+ current: "Aktueller Tarif",
3083
+ },
3084
+ ai: {
3085
+ nlQuery: {
3086
+ placeholder: "Stellen Sie eine Frage zu Ihren Daten…",
3087
+ ask: "Fragen",
3088
+ results: "Ergebnisse",
3089
+ match: "{{percent}} Übereinstimmung",
3090
+ simulatedSummary: "Ergebnisse für: {{query}}",
3091
+ noResults: "Keine passenden Datensätze gefunden",
3092
+ recentQueries: "Letzte Abfragen",
3093
+ },
3094
+ formAssist: {
3095
+ title: "KI-Vorschläge",
3096
+ suggestionCount: "{{count}} Vorschläge",
3097
+ suggestionCount_one: "{{count}} Vorschlag",
3098
+ suggestionCount_other: "{{count}} Vorschläge",
3099
+ applyAll: "Alle übernehmen",
3100
+ confidence: "{{percent}} Konfidenz",
3101
+ appliedCount: "{{count}} Vorschläge übernommen",
3102
+ appliedCount_one: "{{count}} Vorschlag übernommen",
3103
+ appliedCount_other: "{{count}} Vorschläge übernommen",
3104
+ },
3105
+ recommendations: {
3106
+ title: "Empfehlungen",
3107
+ generating: "Empfehlungen werden generiert…",
3108
+ empty: "Keine Empfehlungen verfügbar",
3109
+ },
3110
+ },
3111
+ aiApprovals: {
3112
+ title: "KI-Genehmigungen",
3113
+ description: "Von einem KI-Agenten vorgeschlagene Aktionen, die vor der Ausführung eine menschliche Prüfung benötigen.",
3114
+ tabPending: "Ausstehend",
3115
+ tabDecided: "Entschieden",
3116
+ tabAll: "Alle",
3117
+ statusPending: "Ausstehend",
3118
+ statusApproved: "Genehmigt",
3119
+ statusExecuted: "Ausgeführt",
3120
+ statusFailed: "Fehlgeschlagen",
3121
+ statusRejected: "Abgelehnt",
3122
+ colTool: "Werkzeug",
3123
+ colAction: "Aktion",
3124
+ colObject: "Objekt",
3125
+ colStatus: "Status",
3126
+ colProposed: "Vorgeschlagen",
3127
+ colDecision: "Entscheidung",
3128
+ emptyTitle: "Keine wartenden Aktionen",
3129
+ emptyDescription: "Wenn die KI eine sensible Aktion vorschlägt, erscheint sie hier zur Prüfung.",
3130
+ view: "Ansehen",
3131
+ approve: "Genehmigen",
3132
+ reject: "Ablehnen",
3133
+ working: "Wird bearbeitet…",
3134
+ approveAndExecute: "Genehmigen & ausführen",
3135
+ outcomeApprove: "Genehmigung für {{id}}: {{message}}",
3136
+ outcomeReject: "Ablehnung für {{id}}: {{message}}",
3137
+ outcomeExecuteFailed: "Die Aktion ist bei der Ausführung fehlgeschlagen",
3138
+ drawerFallbackTitle: "Ausstehende Aktion",
3139
+ drawerSubtitle: "Werkzeug {{tool}} auf {{object}}",
3140
+ fieldProposedBy: "Vorgeschlagen von",
3141
+ fieldDecidedBy: "Entschieden von",
3142
+ fieldConversation: "Konversation",
3143
+ fieldToolInput: "Werkzeugeingabe",
3144
+ fieldResult: "Ergebnis",
3145
+ fieldError: "Fehler",
3146
+ fieldRejectionReason: "Ablehnungsgrund",
3147
+ rejectTitle: "Diese Aktion ablehnen?",
3148
+ rejectBody: "Der Grund wird an die KI zurückgemeldet, damit sie ihre nächste Antwort anpassen kann.",
3149
+ rejectPlaceholder: "Optionaler Grund (z. B. „Falsche Datensatz-ID — bitte zuerst mit der Nutzerin oder dem Nutzer klären.“)",
3150
+ },
2753
3151
  aiModelStatus: {
2754
3152
  summary: "Erstellen / Fragen nutzt {{conversational}} ({{conversationalSource}}); strukturiert nutzt {{structured}} ({{structuredSource}}).",
2755
3153
  summaryRouting: "Routing-Richtlinie: kostenlose Tarife → {{free}}, kostenpflichtige Tarife → {{paid}}.",
@@ -2767,6 +3165,111 @@ const de = {
2767
3165
  sourceInherits: "wie build/ask",
2768
3166
  sourcePinned: "festgelegt durch {{source}}",
2769
3167
  },
3168
+ // objectui#7254 — the AI copilot's tool cards. Three families, all of them
3169
+ // English-only until this landed while every other string on the same screen
3170
+ // was translated:
3171
+ //
3172
+ // `tool.*` — one entry per PLATFORM-PROVIDED tool name
3173
+ // (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
3174
+ // closed registry those runtimes are conformance-tested
3175
+ // against). `humanizeToolName` looks each up as
3176
+ // `chatbot.tool.<tool_name>` and falls back to its English
3177
+ // title-caser for a custom / third-party tool, so a name
3178
+ // missing here is degraded, never broken. The `en` values
3179
+ // are deliberately EQUAL to what that title-caser produces:
3180
+ // adding the key must not silently reword the English UI.
3181
+ // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3182
+ // set for both surfaces (they used to carry separate
3183
+ // tables and disagreed on casing).
3184
+ // `plan.*` — the "N objects · N views · N dashboards" strip. Plural
3185
+ // FAMILIES: one slot per CLDR category the pack's language
3186
+ // selects (objectui#11432), plus the base key for a call
3187
+ // made without a count. `all-locales-key-parity.test.ts`
3188
+ // derives the required slots from `Intl.PluralRules`.
3189
+ //
3190
+ // objectui#7481 — five `tool.*` entries are NEWER than the registry above:
3191
+ // `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
3192
+ // and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
3193
+ // `@objectstack/spec` snapshot does not list them yet. They are kept here on
3194
+ // purpose: a step label the user reads must not wait on a pin bump. When the
3195
+ // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3196
+ // against the registry instead of against its own hand-held list.
3197
+ chatbot: {
3198
+ tool: {
3199
+ aggregate_data: "Daten aggregieren",
3200
+ get_record: "Datensatz lesen",
3201
+ query_data: "Daten abfragen",
3202
+ query_records: "Datensätze abfragen",
3203
+ search_knowledge: "Wissensdatenbank durchsuchen",
3204
+ visualize_data: "Diagramm erstellen",
3205
+ add_field: "Feld hinzufügen",
3206
+ apply_blueprint: "App erstellen",
3207
+ apply_edit: "Änderungen anwenden",
3208
+ create_metadata: "Metadaten anlegen",
3209
+ create_object: "Objekt anlegen",
3210
+ create_package: "Paket anlegen",
3211
+ create_seed: "Beispieldaten erzeugen",
3212
+ delete_field: "Feld löschen",
3213
+ describe_metadata: "Metadaten ansehen",
3214
+ describe_object: "Objektstruktur ansehen",
3215
+ get_active_package: "Aktives Paket lesen",
3216
+ get_authoring_rules: "Autorenregeln lesen",
3217
+ get_metadata_schema: "Metadatenschema lesen",
3218
+ get_package: "Paket lesen",
3219
+ list_metadata: "Metadaten auflisten",
3220
+ list_objects: "Objekte auflisten",
3221
+ list_packages: "Pakete auflisten",
3222
+ load_tools: "Werkzeuge laden",
3223
+ modify_field: "Feld ändern",
3224
+ open_record: "Datensatz öffnen",
3225
+ propose_blueprint: "App-Entwurf erstellen",
3226
+ set_active_package: "Aktives Paket wechseln",
3227
+ suggest_builder: "Vorgehen vorschlagen",
3228
+ test_flow: "Flow testen",
3229
+ todo_write: "Aufgaben notieren",
3230
+ toggle_flow: "Flow ein- oder ausschalten",
3231
+ update_metadata: "Metadaten aktualisieren",
3232
+ validate_expression: "Ausdruck prüfen",
3233
+ verify_build: "Aufbau prüfen",
3234
+ },
3235
+ toolState: {
3236
+ agentActivity: "Agentenaktivität",
3237
+ pending: "Ausstehend",
3238
+ running: "Läuft",
3239
+ awaitingApproval: "Wartet auf Freigabe",
3240
+ responded: "Beantwortet",
3241
+ completed: "Abgeschlossen",
3242
+ error: "Fehler",
3243
+ denied: "Abgelehnt",
3244
+ failed: "Fehlgeschlagen",
3245
+ },
3246
+ plan: {
3247
+ countObjects: "{{count}} Objekte",
3248
+ countObjects_one: "{{count}} Objekt",
3249
+ countObjects_other: "{{count}} Objekte",
3250
+ countViews: "{{count}} Ansichten",
3251
+ countViews_one: "{{count}} Ansicht",
3252
+ countViews_other: "{{count}} Ansichten",
3253
+ countDashboards: "{{count}} Dashboards",
3254
+ countDashboards_one: "{{count}} Dashboard",
3255
+ countDashboards_other: "{{count}} Dashboards",
3256
+ countSeedData: "Beispieldaten",
3257
+ },
3258
+ build: {
3259
+ building: "{{app}} wird erstellt…",
3260
+ built: "{{app}} wurde erstellt",
3261
+ appFallback: "Ihre App",
3262
+ addingSampleData: "Beispieldaten werden hinzugefügt",
3263
+ group: {
3264
+ object: "Objekte",
3265
+ view: "Ansichten",
3266
+ dashboard: "Dashboards",
3267
+ app: "App",
3268
+ seed: "Beispieldaten",
3269
+ },
3270
+ moreArtifacts: "+{{n}} weitere",
3271
+ },
3272
+ },
2770
3273
  chatbotError: {
2771
3274
  title: "Antwort fehlgeschlagen",
2772
3275
  fallbackDetail: "Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.",
@@ -2847,7 +3350,7 @@ const de = {
2847
3350
  },
2848
3351
  title: "App-Marktplatz",
2849
3352
  subtitle: "Durchsuchen Sie genehmigte Apps, die im ObjectStack-Katalog veröffentlicht wurden. Klicken Sie auf eine App, um Details zu sehen und sie in eine Ihrer Umgebungen zu installieren.",
2850
- searchPlaceholder: "Apps nach Name oder Manifest-ID suchen…",
3353
+ searchPlaceholder: 'Apps nach Name oder App-ID suchen…',
2851
3354
  searchAria: "Marktplatz-Apps suchen",
2852
3355
  installed: "Installiert",
2853
3356
  installedCount: "Installiert ({{count}})",
@@ -2895,10 +3398,15 @@ const de = {
2895
3398
  purgeSampleData: 'Beispieldaten löschen',
2896
3399
  purgeConfirm: 'Alle von diesem Paket erzeugten Beispieldatensätze löschen? Vom Benutzer hinzugefügte Datensätze bleiben unberührt.',
2897
3400
  purgeSuccess: '{{count}} Beispieldatensatz/-sätze entfernt.',
3401
+ purgeSuccess_one: '{{count}} Beispieldatensatz entfernt.',
3402
+ purgeSuccess_other: '{{count}} Beispieldatensätze entfernt.',
2898
3403
  purgeNoData: 'Keine Beispieldatensätze zum Löschen gefunden.',
2899
3404
  reseedQueued: 'Beispieldaten werden beim nächsten Zugriff auf die Umgebung neu geladen.',
2900
3405
  reseedLocalSuccess: 'Beispieldaten neu geladen: {{inserted}} hinzugefügt, {{updated}} aktualisiert.',
2901
3406
  reseedPartialErrors: '({{count}} Datensatz/-sätze konnten nicht geschrieben werden)',
3407
+ reseedPartialErrors_one: '({{count}} Datensatz konnte nicht geschrieben werden)',
3408
+ reseedPartialErrors_other: '({{count}} Datensätze konnten nicht geschrieben werden)',
3409
+ sampleDataKernelUnavailable: 'Diese Control Plane hat keinen Umgebungs-Kernel, daher können Beispieldaten hier weder neu geladen noch gelöscht werden. Führen Sie dies im eigenen Laufzeitsystem der Umgebung aus.',
2902
3410
  updateAvailable: 'Update verfügbar',
2903
3411
  },
2904
3412
  action: {
@@ -2951,7 +3459,8 @@ const de = {
2951
3459
  reviewed: "Geprüft und genehmigt",
2952
3460
  unreviewed: "Noch nicht geprüft",
2953
3461
  signed: "Signiert",
2954
- grantsIntro: "Bei der Installation erhält dieses Paket:",
3462
+ grantsIntro: "Dieses Paket fordert an:",
3463
+ notEnforced: "Diese Liste wird bei der Installation erfasst und erneut bestätigt, wenn eine spätere Version mehr anfordert – die Laufzeit beschränkt das Paket jedoch noch nicht darauf.",
2955
3464
  services: "Plattformdienste",
2956
3465
  hooks: "Lifecycle-Hooks",
2957
3466
  network: "Netzwerkzugriff",
@@ -2990,32 +3499,21 @@ const de = {
2990
3499
  storage: "Speicher",
2991
3500
  other: "Sonstiges",
2992
3501
  },
2993
- pricing: {
2994
- free: "Kostenlos",
2995
- freemium: "Freemium",
2996
- paid: "Kostenpflichtig",
2997
- subscription: "Abonnement",
2998
- "usage-based": "Nutzungsbasiert",
2999
- "contact-sales": "Vertrieb kontaktieren",
3000
- },
3001
3502
  relativeTime: {
3002
3503
  today: "heute",
3003
3504
  daysAgo: "vor {{count}}d",
3004
3505
  monthsAgo: "vor {{count}} Monaten",
3506
+ monthsAgo_one: "vor {{count}} Monat",
3507
+ monthsAgo_other: "vor {{count}} Monaten",
3005
3508
  yearsAgo: "vor {{count}} Jahren",
3509
+ yearsAgo_one: "vor {{count}} Jahr",
3510
+ yearsAgo_other: "vor {{count}} Jahren",
3006
3511
  },
3007
3512
  },
3008
- approvals: {
3009
- approve: 'Genehmigen',
3010
- reject: 'Ablehnen',
3011
- comment: 'Kommentar (optional)',
3012
- approveSuccess: 'Genehmigt',
3013
- rejectSuccess: 'Abgelehnt',
3014
- rejectConfirm: 'Diese Genehmigungsanfrage ablehnen?',
3015
- },
3016
3513
  approvalsInbox: {
3514
+ recordUnresolvable: 'Dieser Datensatz kann nicht geöffnet werden',
3017
3515
  loadMore: 'Mehr laden',
3018
- loadingMore: 'Lädt…',
3516
+ loadingMore: 'Wird geladen…',
3019
3517
  loadedOf: '{{loaded}} von {{total}} geladen',
3020
3518
  actEscalate: 'SLA eskaliert',
3021
3519
  systemSlaActor: 'System (SLA)',
@@ -3032,6 +3530,8 @@ const de = {
3032
3530
  requestInfoSent: 'Zur Ergänzung an den Antragsteller zurückgegeben',
3033
3531
  remindBtn: 'Erinnern',
3034
3532
  remindSuccess: 'Erinnerung an {{count}} Genehmiger gesendet',
3533
+ remindSuccess_one: 'Erinnerung an {{count}} Genehmiger gesendet',
3534
+ remindSuccess_other: 'Erinnerung an {{count}} Genehmiger gesendet',
3035
3535
  remindThrottled: 'Kürzlich wurde bereits erinnert — bitte später erneut.',
3036
3536
  replyPlaceholder: 'Auf diese Anfrage antworten…',
3037
3537
  slaRemaining: 'SLA noch {{dur}}',
@@ -3048,6 +3548,8 @@ const de = {
3048
3548
  progressApprovals: 'Genehmigungen — {{got}} von {{need}}',
3049
3549
  progressGroups: 'Freigabefortschritt — {{got}} von {{need}} Gruppen',
3050
3550
  progressEligible: '{{count}} berechtigte Genehmiger',
3551
+ progressEligible_one: '{{count}} berechtigter Genehmiger',
3552
+ progressEligible_other: '{{count}} berechtigte Genehmiger',
3051
3553
  progressBar: 'Entscheidungsfortschritt',
3052
3554
  declaredActions: 'Aktionen',
3053
3555
  attachmentChip: 'Anhang',
@@ -3079,6 +3581,8 @@ const de = {
3079
3581
  filterCount: '{{shown}} von {{total}}',
3080
3582
  selected: 'ausgewählt',
3081
3583
  actionableCount: '({{count}} bearbeitbar)',
3584
+ actionableCount_one: '({{count}} bearbeitbar)',
3585
+ actionableCount_other: '({{count}} bearbeitbar)',
3082
3586
  selectAll: 'Alle auswählen',
3083
3587
  selectRow: 'Anfrage auswählen',
3084
3588
  colRequest: 'Anfrage',
@@ -3152,11 +3656,19 @@ const de = {
3152
3656
  approveN: '{{count}} genehmigen',
3153
3657
  rejectN: '{{count}} ablehnen',
3154
3658
  bulkApproveTitle: '{{count}} Anfragen genehmigen?',
3659
+ bulkApproveTitle_one: '{{count}} Anfrage genehmigen?',
3660
+ bulkApproveTitle_other: '{{count}} Anfragen genehmigen?',
3155
3661
  bulkApproveBody: 'Jede Anfrage wird mit Ihrer Identität genehmigt; der Flow folgt dem Genehmigen-Zweig.',
3156
3662
  bulkRejectTitle: '{{count}} Anfragen ablehnen?',
3663
+ bulkRejectTitle_one: '{{count}} Anfrage ablehnen?',
3664
+ bulkRejectTitle_other: '{{count}} Anfragen ablehnen?',
3157
3665
  bulkRejectBody: 'Die ausgewählten Anfragen werden abgelehnt und die Antragsteller benachrichtigt.',
3158
3666
  bulkApproved: '{{count}} Anfragen genehmigt',
3667
+ bulkApproved_one: '{{count}} Anfrage genehmigt',
3668
+ bulkApproved_other: '{{count}} Anfragen genehmigt',
3159
3669
  bulkRejected: '{{count}} Anfragen abgelehnt',
3670
+ bulkRejected_one: '{{count}} Anfrage abgelehnt',
3671
+ bulkRejected_other: '{{count}} Anfragen abgelehnt',
3160
3672
  bulkPartial: '{{ok}} erfolgreich, {{fail}} fehlgeschlagen: {{which}}',
3161
3673
  rejectOneTitle: '„{{title}}“ ablehnen?',
3162
3674
  rejectOneBody: 'Die Anfrage wird abgelehnt und der Antragsteller benachrichtigt.',
@@ -3181,8 +3693,14 @@ const de = {
3181
3693
  alreadyDecided: 'Diese Anfrage wurde bereits entschieden. Liste aktualisieren.',
3182
3694
  justNow: 'gerade eben',
3183
3695
  minutesAgo: 'vor {{count}} Min.',
3696
+ minutesAgo_one: 'vor {{count}} Min.',
3697
+ minutesAgo_other: 'vor {{count}} Min.',
3184
3698
  hoursAgo: 'vor {{count}} Std.',
3699
+ hoursAgo_one: 'vor {{count}} Std.',
3700
+ hoursAgo_other: 'vor {{count}} Std.',
3185
3701
  daysAgo: 'vor {{count}} Tagen',
3702
+ daysAgo_one: 'vor {{count}} Tag',
3703
+ daysAgo_other: 'vor {{count}} Tagen',
3186
3704
  },
3187
3705
  preview: {
3188
3706
  empty: {
@@ -3217,11 +3735,15 @@ const de = {
3217
3735
  detailNone: 'Keine Unterschiede erkannt — der Entwurf entspricht der veröffentlichten Version.',
3218
3736
  detailChangedKeys: 'Ebenfalls geändert:',
3219
3737
  confirmNote: 'Beim Veröffentlichen werden alle {{count}} ausstehenden Entwürfe dieses Pakets atomar freigegeben.',
3738
+ confirmNote_one: 'Beim Veröffentlichen wird der {{count}} ausstehende Entwurf dieses Pakets atomar freigegeben.',
3739
+ confirmNote_other: 'Beim Veröffentlichen werden alle {{count}} ausstehenden Entwürfe dieses Pakets atomar freigegeben.',
3220
3740
  publishConfirm: 'Alle veröffentlichen',
3221
- // [objectui#5418] Pre-publish security-posture findings, shown next to
3741
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3222
3742
  // the confirm button so a refusal the door would issue is read BEFORE
3223
3743
  // the click rather than as a toast after the batch rolled back.
3224
3744
  securityBlockTitle: 'Veröffentlichen wird abgelehnt — {{count}} Element(e) benötigen zuerst eine Entscheidung',
3745
+ securityBlockTitle_one: 'Veröffentlichen wird abgelehnt — {{count}} Element benötigt zuerst eine Entscheidung',
3746
+ securityBlockTitle_other: 'Veröffentlichen wird abgelehnt — {{count}} Elemente benötigen zuerst eine Entscheidung',
3225
3747
  securityBlockWhere: 'Korrigieren Sie es am Objekt unter Einstellungen → Datensatzfreigabe und veröffentlichen Sie erneut.',
3226
3748
  },
3227
3749
  // ADR-0045 — the materialized-but-unlisted app banner
@@ -3246,7 +3768,7 @@ const de = {
3246
3768
  revertLabel: 'Eine Änderung rückgängig gemacht',
3247
3769
  applyLabel: 'Build-Änderung',
3248
3770
  revert: 'rückgängig',
3249
- items: 'Elemente',
3771
+ items: 'Elemente: {{count}}',
3250
3772
  revertAction: 'Rückgängig',
3251
3773
  reverted: 'Rückgängig gemacht — die Änderung wurde zurückgenommen.',
3252
3774
  revertFailed: 'Rückgängig machen fehlgeschlagen',
@@ -3275,25 +3797,25 @@ const de = {
3275
3797
  rangeEnd: "Bis",
3276
3798
  operators: {
3277
3799
  equals: "Gleich",
3278
- notEquals: "Ungleich",
3800
+ not_equals: "Ungleich",
3279
3801
  contains: "Enthält",
3280
- containsCaseInsensitive: "Enthält (Groß-/Kleinschreibung ignorieren)",
3281
- notContains: "Enthält nicht",
3282
- isEmpty: "Ist leer",
3283
- isNotEmpty: "Ist nicht leer",
3284
- greaterThan: "Größer als",
3285
- lessThan: "Kleiner als",
3286
- greaterOrEqual: "Größer oder gleich",
3287
- lessOrEqual: "Kleiner oder gleich",
3802
+ icontains: "Enthält (Groß-/Kleinschreibung ignorieren)",
3803
+ not_contains: "Enthält nicht",
3804
+ is_empty: "Ist leer",
3805
+ is_not_empty: "Ist nicht leer",
3806
+ greater_than: "Größer als",
3807
+ less_than: "Kleiner als",
3808
+ greater_than_or_equal: "Größer oder gleich",
3809
+ less_than_or_equal: "Kleiner oder gleich",
3288
3810
  before: "Vor",
3289
3811
  after: "Nach",
3290
3812
  between: "Zwischen",
3291
3813
  in: "In",
3292
- notIn: "Nicht in",
3293
- startsWith: "Beginnt mit",
3294
- endsWith: "Endet mit",
3295
- isNull: "Ist null",
3296
- isNotNull: "Ist nicht null",
3814
+ not_in: "Nicht in",
3815
+ starts_with: "Beginnt mit",
3816
+ ends_with: "Endet mit",
3817
+ is_null: "Ist null",
3818
+ is_not_null: "Ist nicht null",
3297
3819
  exists: "Ist gesetzt",
3298
3820
  notExists: "Ist nicht gesetzt",
3299
3821
  },
@@ -3309,7 +3831,8 @@ const de = {
3309
3831
  },
3310
3832
  collaboration: {
3311
3833
  commentCount: "{{count}} Kommentare",
3312
- commentCountOne: "{{count}} Kommentar",
3834
+ commentCount_one: "{{count}} Kommentar",
3835
+ commentCount_other: "{{count}} Kommentare",
3313
3836
  resolvedSuffix: " · Gelöst",
3314
3837
  sortComments: "Kommentare sortieren",
3315
3838
  sortOldest: "Älteste zuerst",
@@ -3318,11 +3841,18 @@ const de = {
3318
3841
  reopen: "Erneut öffnen",
3319
3842
  justNow: "gerade eben",
3320
3843
  minutesAgo: "vor {{count}} Min.",
3844
+ minutesAgo_one: "vor {{count}} Min.",
3845
+ minutesAgo_other: "vor {{count}} Min.",
3321
3846
  hoursAgo: "vor {{count}} Std.",
3847
+ hoursAgo_one: "vor {{count}} Std.",
3848
+ hoursAgo_other: "vor {{count}} Std.",
3322
3849
  daysAgo: "vor {{count}} T.",
3850
+ daysAgo_one: "vor {{count}} T.",
3851
+ daysAgo_other: "vor {{count}} T.",
3323
3852
  edited: "(bearbeitet)",
3324
3853
  reactionCount: "{{count}} Reaktionen",
3325
- reactionCountOne: "{{count}} Reaktion",
3854
+ reactionCount_one: "{{count}} Reaktion",
3855
+ reactionCount_other: "{{count}} Reaktionen",
3326
3856
  addThumbsUp: "Daumen hoch hinzufügen",
3327
3857
  reply: "Antworten",
3328
3858
  reactThumbsUp: "Mit Daumen hoch reagieren",
@@ -3333,9 +3863,11 @@ const de = {
3333
3863
  commentPlaceholder: "Kommentar hinzufügen … (@ für Erwähnungen)",
3334
3864
  send: "Senden",
3335
3865
  presentUserCount: "{{count}} anwesende Benutzer",
3336
- presentUserCountOne: "{{count}} anwesender Benutzer",
3866
+ presentUserCount_one: "{{count}} anwesender Benutzer",
3867
+ presentUserCount_other: "{{count}} anwesende Benutzer",
3337
3868
  moreUserCount: "{{count}} weitere Benutzer",
3338
- moreUserCountOne: "{{count}} weiterer Benutzer",
3869
+ moreUserCount_one: "{{count}} weiterer Benutzer",
3870
+ moreUserCount_other: "{{count}} weitere Benutzer",
3339
3871
  userStatusTitle: "{{name}} ({{status}})",
3340
3872
  statusActive: "aktiv",
3341
3873
  statusIdle: "inaktiv",
@@ -3343,6 +3875,11 @@ const de = {
3343
3875
  },
3344
3876
  wizard: {
3345
3877
  missingRequired: "Bitte füllen Sie die Pflichtfelder aus: {{fields}}",
3878
+ back: "Zurück",
3879
+ submitting: "Wird gesendet…",
3880
+ stepFallback: "Schritt {{n}}",
3881
+ progressLabel: "Fortschritt",
3882
+ emptyStep: "Für diesen Schritt sind keine Felder konfiguriert",
3346
3883
  },
3347
3884
  flowRunner: {
3348
3885
  title: 'Eingabe',
@@ -3400,5 +3937,49 @@ const de = {
3400
3937
  bulkOperationFailed: "Massenvorgang fehlgeschlagen: {{reason}}",
3401
3938
  },
3402
3939
  },
3940
+ // objectui#6301 — Setup › Paketautomatisierung (ADR-0126 §7.4). Terminologie
3941
+ // wie im übrigen Pack: `common.package` = Paket, `flowRunner.completed` =
3942
+ // Flow, Anführungszeichen „…“. ⛔ Keine Herkunfts- oder Drift-Formulierungen
3943
+ // in dieser Gruppe (§9).
3944
+ packagedAutomation: {
3945
+ title: "Paketautomatisierung",
3946
+ subtitle: "Flows und Aktionen aus installierten Paketen. Schalten Sie eines für diese Installation ab oder klonen Sie einen Flow unter einem neuen Namen, um ihn anzupassen. Bearbeitet wird im Studio.",
3947
+ refresh: "Aktualisieren",
3948
+ flowsHeading: "Paket-Flows",
3949
+ actionsHeading: "Paket-Aktionen",
3950
+ colFlow: "Flow",
3951
+ colActivation: "Aktivierung",
3952
+ colActions: "Aktionen",
3953
+ toggleLabel: "Aktivierung für {{label}}",
3954
+ on: "An",
3955
+ off: "Aus",
3956
+ clone: "Klonen",
3957
+ cloneTitle: "Paket-Flow klonen",
3958
+ cloneBody: "Die Kopie übernimmt die gesamte Definition und benötigt einen neuen Maschinennamen und ein neues Label. Bearbeiten Sie die Kopie im Studio.",
3959
+ cloneName: "Neuer Maschinenname",
3960
+ cloneLabel: "Neues Label",
3961
+ cancel: "Abbrechen",
3962
+ cloneConfirm: "Klon erstellen",
3963
+ cloneCreated: "Flow „{{name}}“ erstellt.",
3964
+ emptyTitle: "Keine Paket-Flows",
3965
+ emptyBody: "In dieser Installation liefert kein installiertes Paket einen Automatisierungs-Flow. Selbst erstellte Flows finden Sie im Studio.",
3966
+ loadFailed: "Paketautomatisierung konnte nicht geladen werden.",
3967
+ toggleFailedHttp: "Aktivierung konnte nicht geändert werden (HTTP {{status}}).",
3968
+ toggleFailed: "Aktivierung konnte nicht geändert werden.",
3969
+ cloneFailedHttp: "Dieser Flow konnte nicht geklont werden (HTTP {{status}}).",
3970
+ cloneFailed: "Dieser Flow konnte nicht geklont werden.",
3971
+ actionsSubtitle: "Aktionen aus installierten Paketen. Schalten Sie eine für diese Installation ab, und sie läuft überall dort nicht mehr, wo sie angeboten wird. Eine eigene Aktion daneben zu erstellen, bleibt Ihnen im Studio offen.",
3972
+ colAction: "Aktion",
3973
+ colObject: "Objekt",
3974
+ actionToggleLabel: "Aktivierung für {{label}} auf {{object}}",
3975
+ actionsEmptyTitle: "Keine Paket-Aktionen",
3976
+ actionsEmptyBody: "In dieser Installation deklariert kein installiertes Paket eine Aktion. Selbst erstellte Aktionen finden Sie im Studio.",
3977
+ actionsLoadFailed: "Paket-Aktionen konnten nicht geladen werden.",
3978
+ },
3979
+ element: {
3980
+ number: {
3981
+ noObject: "Kein Objekt angegeben: Legen Sie object oder dataSource.object fest.",
3982
+ },
3983
+ },
3403
3984
  };
3404
3985
  export default de;