@cosmicdrift/kumiko-locale-de 0.413.1 → 0.415.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-locale-de",
3
- "version": "0.413.1",
3
+ "version": "0.415.0",
4
4
  "description": "German UI and mail copy for Kumiko framework screens. Opt in by mounting localeDe() + localeDeClient().",
5
5
  "license": "MIT",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -28,7 +28,7 @@
28
28
  }
29
29
  },
30
30
  "dependencies": {
31
- "@cosmicdrift/kumiko-framework": "0.413.1"
31
+ "@cosmicdrift/kumiko-framework": "0.415.0"
32
32
  },
33
33
  "publishConfig": {
34
34
  "registry": "https://registry.npmjs.org",
@@ -346,6 +346,8 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
346
346
  "This tenant has no active subscription to switch.",
347
347
  "billing-foundation.errors.planSwitchNotSupported":
348
348
  "This provider does not support switching plans.",
349
+ "billing-foundation.errors.planSwitchPending":
350
+ "A plan switch is already being processed. Wait a moment for it to complete.",
349
351
  "billing-foundation.errors.planTiersShareProduct":
350
352
  "Each plan needs its own Stripe product. Contact support.",
351
353
  "billing-foundation.errors.priceUnavailable": "This plan's price is temporarily unavailable.",
@@ -426,6 +428,7 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
426
428
  "cap-overview.list.filter.tier": "Tier",
427
429
  "cap-overview.notMeasured": "Not measured yet",
428
430
  "cap-overview.notIncluded": "Not included",
431
+ "cap-overview.notIncludedButUsed": "{used} · not included",
429
432
  "cap-overview.platform.filter.tenant": "Tenant",
430
433
  "cap-overview.unlimited": "{used} · unlimited",
431
434
  "compliance-profiles:entity:__action-form__:field:profileKey": "Compliance profile",
@@ -446,6 +449,15 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
446
449
  "config.secret.channel-telegram.bot-token.hint":
447
450
  'Token from @BotFather. Used for every Telegram chat the tenant addresses via route: { telegram: "<chat id>" }.',
448
451
  "config.secret.channel-telegram.bot-token.label": "Telegram bot token",
452
+ "config.secret.channel-whatsapp.access-token.hint":
453
+ "System-user access token of the Meta app. Used to send messages and to download media.",
454
+ "config.secret.channel-whatsapp.access-token.label": "WhatsApp access token",
455
+ "config.secret.channel-whatsapp.app-secret.hint":
456
+ "App secret of the Meta app. Verifies the signature of every incoming webhook.",
457
+ "config.secret.channel-whatsapp.app-secret.label": "WhatsApp app secret",
458
+ "config.secret.channel-whatsapp.verify-token.hint":
459
+ "Any string you also enter in the Meta webhook settings; answers Meta's subscription handshake.",
460
+ "config.secret.channel-whatsapp.verify-token.label": "WhatsApp verify token",
449
461
  "config.secret.file-provider-s3.s3-secret-access-key.hint":
450
462
  "Private half of the S3 key pair. Hetzner calls it 'Secret Key', AWS calls it 'Secret Access Key'.",
451
463
  "config.secret.file-provider-s3.s3-secret-access-key.label": "S3 secret access key",
@@ -561,9 +573,20 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
561
573
  "errors.validation.too_big": "Too big or too long (maximum: {maximum}).",
562
574
  "kumiko.boolean.no": "No",
563
575
  "kumiko.boolean.yes": "Yes",
576
+ "kumiko.editor.device.desktop": "Desktop",
577
+ "kumiko.editor.device.mobile": "Mobile 375 px",
578
+ "kumiko.editor.deviceSwitch": "Preview width",
579
+ "kumiko.editor.discard": "Discard changes",
580
+ "kumiko.editor.localeSwitch": "Language",
581
+ "kumiko.editor.modeSwitch": "Mode",
582
+ "kumiko.editor.noChanges": "No unsaved changes",
583
+ "kumiko.editor.publish": "Publish",
584
+ "kumiko.editor.savedAt": "Last saved {when}",
585
+ "kumiko.editor.unsavedChanges": "Unsaved changes",
564
586
  "kumiko.field.file-list.download": "Download",
565
587
  "kumiko.field.file-list.hidePreview": "Hide preview",
566
588
  "kumiko.field.file-list.preview": "Preview",
589
+ "kumiko.field.file-list.view": "View",
567
590
  "kumiko.validation.number.min": "Must be at least {minimum}.",
568
591
  "kumiko.validation.number.max": "Must be {maximum} or less.",
569
592
  "errors.validation.too_small": "Too small or too short (minimum: {minimum}).",
@@ -735,6 +758,10 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
735
758
  "kumiko.dashboard.chart.forecast": "Forecast",
736
759
  "kumiko.dashboard.chart.markers": "Events",
737
760
  "kumiko.dashboard.filter.all": "All",
761
+ "kumiko.dashboard.list.line-more": "{count} more",
762
+ "kumiko.dashboard.list.more": "{count} more",
763
+ "kumiko.dashboard.list.open-row": "Open",
764
+ "kumiko.dashboard.list.shown-of-total": "{shown} of {total}",
738
765
  "kumiko.dashboard.panel.error.isolated": "The other panels are not affected.",
739
766
  "kumiko.dashboard.panel.error.retry": "Try again",
740
767
  "kumiko.dashboard.panel.error.title": "{label} could not be loaded",
@@ -757,7 +784,6 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
757
784
  "kumiko.dashboard.brush-end": "Window end",
758
785
  "kumiko.dashboard.brush-start": "Window start",
759
786
  "kumiko.dashboard.today": "Today",
760
- "kumiko.dashboard.updated-at": "As of {time}",
761
787
  "kumiko.dialog.cancel": "Cancel",
762
788
  "kumiko.dialog.close": "Close",
763
789
  "kumiko.list.actions": "Actions",
@@ -796,6 +822,7 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
796
822
  "kumiko.field.embedded-list.remove-row": "Remove row",
797
823
  "kumiko.field.file-list.add": "Add file",
798
824
  "kumiko.field.file-list.empty": "No files yet.",
825
+ "kumiko.field.dropzone.file-unavailable": "File no longer available",
799
826
  "kumiko.field.dropzone.limit-count": "up to {count} files",
800
827
  "kumiko.field.dropzone.limit-size": "up to {size} per file",
801
828
  "kumiko.field.dropzone.title": "Drop files here or click to choose",
@@ -855,9 +882,12 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
855
882
  "kumiko.list.empty.defaultFiltered":
856
883
  "No entries match the default filter. Show all to include entries outside it.",
857
884
  "kumiko.list.empty.showAll": "Show all",
885
+ "kumiko.list.empty.resetFilter": "Reset filter",
886
+ "kumiko.list.named-filter.all": "All",
858
887
  "kumiko.list.empty.hint": "Create the first one to get started.",
859
888
  "kumiko.list.empty.title": "No entries yet.",
860
889
  "kumiko.list.end-of-list": "— End of list —",
890
+ "kumiko.list.filter.all": "All",
861
891
  "kumiko.list.filter.reset": "Reset",
862
892
  "kumiko.list.filter.toggle": "Filters",
863
893
  "kumiko.list.no-entries": "No entries.",
@@ -886,7 +916,23 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
886
916
  "kumiko.list.bulk.result.not-started": "Not run: {count}",
887
917
  "kumiko.list.bulk.result.dismiss": "Dismiss",
888
918
  "kumiko.list.search-placeholder": "Search…",
919
+ "kumiko.list.hint.empty": "Nothing open",
920
+ "kumiko.list.hint.reason": "Why?",
921
+ "kumiko.detail.steps.title": "Next steps",
922
+ "kumiko.detail.steps.empty": "Nothing to do",
923
+ "kumiko.detail.progress.step-of": "Step {current} of {total}",
924
+ "kumiko.detail.steps.less": "Show fewer steps",
925
+ "kumiko.detail.steps.more.one": "1 more step",
926
+ "kumiko.detail.steps.more.other": "{count} more steps",
927
+ "kumiko.detail.steps.reason": "Why?",
928
+ "kumiko.detail.breadcrumb": "Path",
929
+ "kumiko.pwa.dismiss": "Not now",
930
+ "kumiko.pwa.install": "Install",
931
+ "kumiko.pwa.install-hint": "Install this app on your device to open it like any other app.",
932
+ "kumiko.pwa.install-hint-ios": "To install this app, tap Share and then “Add to Home Screen”.",
889
933
  "kumiko.list.sort.by": "Sorted by {column}",
934
+ "kumiko.list.sort.prefix": "Sorted by",
935
+ "kumiko.list.sort.summary": "Sorted by {sort} {direction} · {count} {noun}",
890
936
  "kumiko.list.sort.label": "Sort",
891
937
  "kumiko.list.sort.unsorted": "Unsorted",
892
938
  "kumiko.list.reset-all": "Reset",
@@ -900,6 +946,7 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
900
946
  "kumiko.list.view.density": "Density",
901
947
  "kumiko.list.view.density.comfortable": "Comfortable",
902
948
  "kumiko.list.view.density.compact": "Compact",
949
+ "kumiko.list.view.density.relaxed": "Relaxed",
903
950
  "kumiko.list.view.reset": "Reset view",
904
951
  "kumiko.list.group.by": "Group by",
905
952
  "kumiko.list.group.none": "None",
@@ -941,13 +988,12 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
941
988
  "kumiko.notifications.loadMore": "Load more",
942
989
  "kumiko.notifications.unread": "Unread",
943
990
  "kumiko.notifications.loadFailed": "Notifications could not be loaded.",
991
+ "kumiko.pager.goToPage": "Page {page}",
944
992
  "kumiko.pager.nextPage": "Next page",
945
- "kumiko.pager.pageOf": "Page {page} of {pages}",
946
993
  "kumiko.pager.pageSize": "{size} per page",
947
994
  "kumiko.pager.pageSizeLabel": "Entries per page",
948
995
  "kumiko.pager.previousPage": "Previous page",
949
996
  "kumiko.pager.status": "{from}–{to} of {total}",
950
- "kumiko.pager.status.noun": "{from}–{to} of {total} {noun}",
951
997
  "kumiko.planCard.current": "Current plan",
952
998
  "kumiko.planCard.priceUnavailable": "Price not available",
953
999
  "kumiko.reference.system-tenant": "System",
@@ -1010,6 +1056,8 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
1010
1056
  "kumiko.widget.message-thread.showImages": "Load images",
1011
1057
  "kumiko.widget.message-reader.mail": "Mail",
1012
1058
  "kumiko.widget.step-list.progress": "{done} of {total} done",
1059
+ "kumiko.widget.step-list.total.one": "1 step",
1060
+ "kumiko.widget.step-list.total.other": "{count} steps",
1013
1061
  "kumiko.widget.step-list.progressLabel": "Progress",
1014
1062
  "kumiko.widget.step-list.moreSteps": "and {count} more steps",
1015
1063
  "kumiko.widget.step-list.waitingFor": "Waiting for: {reason}",
@@ -1063,6 +1111,13 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
1063
1111
  "managed-pages:body.lossy.blockquote": "block quotes",
1064
1112
  "managed-pages:body.lossy.code": "code",
1065
1113
  "managed-pages:body.lossy.deepHeading": "headings below level 3",
1114
+ "managed-pages:editor.noValue": "Not set",
1115
+ "managed-pages:editor.infoEdit":
1116
+ "Edit the page on the left; the right side holds its address and settings.",
1117
+ "managed-pages:editor.infoPreview": "Preview of the unsaved draft, as visitors will see it.",
1118
+ "managed-pages:editor.railPage": "Page",
1119
+ "managed-pages:editor.create": "Create page",
1120
+ "managed-pages:editor.loadFailed": "The page could not be loaded.",
1066
1121
  "managed-pages:branding.section.custom-css": "Custom CSS",
1067
1122
  "managed-pages:branding.section.identity": "Identity",
1068
1123
  "managed-pages:confirms.page-delete": "Delete this page?",
@@ -1083,8 +1138,6 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
1083
1138
  "managed-pages:entity:page:field:published:option:true": "Published",
1084
1139
  "managed-pages:entity:page:field:slug": "Slug",
1085
1140
  "managed-pages:entity:page:field:title": "Title",
1086
- "managed-pages:section.body": "Content",
1087
- "managed-pages:section.meta": "Metadata",
1088
1141
  "metrics.errors.tenantFilterUnsupported":
1089
1142
  "This metric's source has no tenant column, so it cannot be narrowed to one tenant.",
1090
1143
  "metrics:deliveryChannel.email": "Email",
@@ -1264,7 +1317,6 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
1264
1317
  "subscription-paddle.client-token": "Paddle client-side token",
1265
1318
  "subscription-paddle.environment": "Paddle environment",
1266
1319
  "subscription-paddle.settings": "Paddle",
1267
- "subscription-paddle.tenant-binding-key": "Paddle tenant binding key",
1268
1320
  "subscription-paddle.webhook-secret": "Paddle webhook secret",
1269
1321
  "subscription-stripe.api-key": "Stripe API key",
1270
1322
  "subscription-stripe.billing-live": "Live billing",
@@ -1369,6 +1421,18 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
1369
1421
  "template-resolver.editor.newEntry": "New entry",
1370
1422
  "template-resolver.editor.newEntryTitle": "New {label}",
1371
1423
  "template-resolver.editor.readOnly": "Read-only. Your role does not allow changes here.",
1424
+ "template-resolver.editor.infoPreviewPlain":
1425
+ "Preview of the unsaved state, as the page shows it. The site's header and footer are not included.",
1426
+ "template-resolver.preview.frameTitle": "Text preview",
1427
+ "template-resolver.editor.infoEdit":
1428
+ "Edit the title and the content. The preview shows it with example values for the placeholders.",
1429
+ "template-resolver.editor.infoPreview":
1430
+ "This is how the text looks with the example values, including changes you have not saved yet.",
1431
+ "template-resolver.editor.localeLabel": "Language",
1432
+ "template-resolver.editor.railDetails": "Entry",
1433
+ "template-resolver.editor.railExamples": "Example values",
1434
+ "template-resolver.editor.railPlaceholders": "Placeholders",
1435
+ "template-resolver.editor.railPlaceholdersHint": "These names can be used in the text.",
1372
1436
  "template-resolver.editor.save": "Save",
1373
1437
  "template-resolver.editor.saveFailed": "Save failed.",
1374
1438
  "template-resolver.editor.saved": "Saved.",
@@ -1383,6 +1447,8 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
1383
1447
  "The button target “{detail}” must be a placeholder.",
1384
1448
  "templateResolver.errors.document.disallowedLinkHref":
1385
1449
  "Link target “{detail}” is not allowed; use https, http, mailto, tel, a relative path or a placeholder.",
1450
+ "templateResolver.errors.document.relativeLinkWithoutBase":
1451
+ "Link target “{detail}” is relative, but mails and PDF documents have no base address; use an absolute https link.",
1386
1452
  "templateResolver.errors.document.documentRequiresHtmlFormat":
1387
1453
  "This template kind requires the html format, got “{detail}”.",
1388
1454
  "templateResolver.errors.document.layoutRequiresMjmlFormat":
@@ -2108,6 +2174,8 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
2108
2174
  "inboundMail.accounts.errors.addressAlreadyConnected": "This mailbox is already connected.",
2109
2175
  "inboundMail.accounts.errors.addressDisconnected":
2110
2176
  "This mailbox was disconnected before. Use Reactivate in the mailbox list to keep its history.",
2177
+ "inboundMail.accounts.errors.personalAddressNotOwn":
2178
+ "A personal mailbox can only be connected with the email address of your own account. An admin connects other addresses as a shared mailbox.",
2111
2179
  "inboundMail.accounts.reactivate": "Reactivate",
2112
2180
  "inboundMail.accounts.quarantine": "Quarantine",
2113
2181
  "inboundMail.accounts.errors.credentialRequired":
@@ -2167,14 +2235,14 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
2167
2235
  "inboundMail.imap.connect.errors.loginRejected":
2168
2236
  "The IMAP server rejected the sign-in. Check the user name and password.",
2169
2237
  "inboundMail.imap.connect.errors.tlsFailed":
2170
- "The encrypted connection failed. Check the port and the TLS setting.",
2238
+ "The encrypted connection failed. Check that the port is the IMAPS port (usually 993).",
2171
2239
  "inboundMail.imap.connect.errors.connectFailed":
2172
2240
  "No connection to the IMAP server. Check the server name and port.",
2173
2241
  "inbound-provider-imap:entity:__action-form__:field:smtpHost": "Outgoing server (SMTP)",
2174
2242
  "inbound-provider-imap:entity:__action-form__:field:smtpPort": "SMTP port",
2175
2243
  "inboundMail.imap.connect.outgoing": "Sending",
2176
2244
  "inboundMail.imap.connect.outgoingHint":
2177
- "Replies go out from this address over your own mail server, with the same user name and password. Leave the field empty if the server is called like the IMAP server, with smtp. instead of imap. Usually 587, even when your provider lists 465/SSL.",
2245
+ "Replies go out from this address over your own mail server, with the same user name and password. Leave the field empty if the server is called like the IMAP server, with smtp. instead of imap. Usually 587, even when your provider lists 465/SSL. Port 465 means SSL/TLS, every other port means STARTTLS.",
2178
2246
  "inbound-provider-imap:entity:__action-form__:field:trustedAuthservId": "Mail server ID",
2179
2247
  "inboundMail.imap.connect.senderCheck": "Sender check",
2180
2248
  "inboundMail.imap.connect.senderCheckHint":
@@ -2281,6 +2349,7 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
2281
2349
  "audit.log.event.waitlist-exported": "Waitlist exported",
2282
2350
  "audit.log.event.waitlist-purged": "Waitlist purged",
2283
2351
  "audit.log.event.feature-toggle-set": "Feature toggle changed",
2352
+ "audit.log.event.consumer-state-changed": "Event consumer state changed",
2284
2353
  "audit.log.event.contract-termination-requested": "Contract termination requested",
2285
2354
  "audit.log.event.contract-termination-declared": "Contract termination declared",
2286
2355
  "audit.log.event.contract-termination-unmatched": "Contract termination not matched",
@@ -18,19 +18,20 @@ const duFormRegex = /\b(du|dich|dir|dein\w*|Du|Dich|Dir|Dein\w*)\b/;
18
18
  const informalImperativeRegex =
19
19
  /(^|[.!?]\s+)(Gib|Wähle|Speichere|Klicke|Bestätige|Fordere|Scanne|Kopiere|Lege|Melde|Versuche|Prüfe|Öffne|Setze|Trage|Nutze|Verwende|Wende)(?![\p{L}])/u;
20
20
 
21
- // Designer strings are du in the default bundle; extend the allowlist only for
22
- // genuine 3rd-person "Sie" referring to a noun.
21
+ // The default bundle is du throughout; extend the allowlist only for genuine
22
+ // 3rd-person "Sie" referring to a noun.
23
23
  const formalAddressRegex =
24
- /\b(Ihr\w*|Ihnen|(Speichern|Nutzen|Laden|Wählen|Geben|Verwenden|Klicken|Prüfen|Legen|Fügen|Löschen|Bestätigen|Verwerfen|Bearbeiten|Öffnen|Setzen|Ziehen|Versuchen) Sie|Sie (sehen|können|müssen|haben|sind|werden|wollen|möchten|erhalten|benötigen))\b/;
24
+ /\b(Ihr\w*|Ihnen|(Speichern|Nutzen|Laden|Wählen|Geben|Verwenden|Klicken|Prüfen|Legen|Fügen|Löschen|Bestätigen|Verwerfen|Bearbeiten|Öffnen|Setzen|Ziehen|Versuchen|verwenden|ersetzen|ändern|prüfen|wählen|entfernen|schränken) Sie|Sie (sehen|können|müssen|haben|sind|werden|wollen|möchten|erhalten|benötigen))\b/;
25
25
 
26
- const DESIGNER_FORMAL_ALLOWLIST: ReadonlySet<string> = new Set<string>();
26
+ const THIRD_PERSON_SIE_ALLOWLIST: ReadonlySet<string> = new Set<string>([
27
+ "auth.mfa.enable.recoveryHint",
28
+ ]);
27
29
 
28
30
  describe("locale-de formal overrides", () => {
29
- test("informal bundle has no formal address in documentDesigner keys", () => {
31
+ test("informal bundle has no formal address", () => {
30
32
  const offenders = Object.entries(localeDeBundle)
31
- .filter(([key]) => key.startsWith("documentDesigner."))
32
33
  .filter(
33
- ([key, value]) => !DESIGNER_FORMAL_ALLOWLIST.has(key) && formalAddressRegex.test(value),
34
+ ([key, value]) => !THIRD_PERSON_SIE_ALLOWLIST.has(key) && formalAddressRegex.test(value),
34
35
  )
35
36
  .map(([key]) => key);
36
37
  expect(offenders).toEqual([]);
package/src/changes.json CHANGED
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.415.0",
4
+ "type": "fix",
5
+ "title": "Informal German bundle says du throughout",
6
+ "detail": "Fourteen strings in the informal bundle addressed the user with Sie. They now say du. Apps with address formal keep the previous wording through the formal overrides."
7
+ },
2
8
  {
3
9
  "version": "0.409.0",
4
10
  "type": "improvement",
package/src/formal.ts CHANGED
@@ -4,6 +4,29 @@ import { localeDeBundle } from "./strings";
4
4
  export type GermanAddress = "informal" | "formal";
5
5
 
6
6
  export const localeDeFormalOverrides: Readonly<Record<string, string>> = {
7
+ "admin-shell:overview.scope.notice":
8
+ "Sie sehen Daten aller Mandanten. Mandantenübergreifende Abfragen werden im Ereignisprotokoll vermerkt.",
9
+ "config.secret.channel-whatsapp.verify-token.hint":
10
+ "Beliebiger Text, den Sie auch in den Meta-Webhook-Einstellungen eintragen; beantwortet den Abonnement-Handshake von Meta.",
11
+ "kumiko.screen.forbidden": "Sie haben keinen Zugriff auf diese Seite.",
12
+ "managed-pages:body.lossy.warning":
13
+ "Diese Seite wurde in Markdown geschrieben. Bei der Umwandlung in den Editor gehen verloren: {features}. Prüfen Sie das Ergebnis vor dem Speichern.",
14
+ "template-resolver.editor.readOnly": "Nur lesbar. Ihre Rolle erlaubt hier keine Änderungen.",
15
+ "templateResolver.errors.patch.textAmbiguous":
16
+ "Der Text {find} kommt {count}-mal im Block vor; verwenden Sie einen längeren Text.",
17
+ "templateResolver.errors.patch.textSpansFormatting":
18
+ "Der Text {find} überspannt einen Formatwechsel im Block; ersetzen Sie jeden formatierten Teil einzeln.",
19
+ "templateResolver.errors.patch.placeholderNotReplaceable":
20
+ "Der Platzhalter {find} lässt sich nicht als Text ersetzen; ändern Sie den Text drumherum mit einer anderen Operation oder entfernen Sie den Block.",
21
+ "templateResolver.errors.collection.slugExists":
22
+ "Ein Eintrag mit dem Kürzel „{detail}“ existiert bereits. Wählen Sie ein anderes.",
23
+ "userDataRights.privacyCenter.subtitle":
24
+ "Laden Sie eine Kopie Ihrer Daten herunter (Art. 20), schränken Sie die Verarbeitung Ihres Kontos ein (Art. 18) oder löschen Sie es (Art. 17).",
25
+ "userDataRights.privacyCenter.subtitleWithoutDeletion":
26
+ "Laden Sie eine Kopie Ihrer Daten herunter (Art. 20) oder schränken Sie die Verarbeitung Ihres Kontos ein (Art. 18).",
27
+ "screen:my-mail-accounts.title": "Ihre Postfächer",
28
+ "inboundMail.accounts.reactivateOauth.confirm":
29
+ "Sie werden zur Anmeldeseite des Anbieters weitergeleitet. Nach der Anmeldung ruft das Postfach wieder Mails ab und behält seinen Verlauf.",
7
30
  "documentDesigner.editor.mjmlNotice.tenant":
8
31
  "Sie sehen das System-Layout. Speichern legt ein eigenes Layout für Ihren Mandanten an.",
9
32
  "documentDesigner.editor.origin.system":
@@ -187,6 +210,10 @@ export const localeDeFormalOverrides: Readonly<Record<string, string>> = {
187
210
  "kumiko.drawer.discard.body": "Ihre Eingaben in diesem Formular gehen verloren.",
188
211
  "kumiko.field.reference-created-no-id":
189
212
  "Der Eintrag wurde angelegt, aber nicht automatisch ausgewählt. Bitte wählen Sie ihn manuell aus.",
213
+ "kumiko.pwa.install-hint":
214
+ "Installieren Sie diese App auf Ihrem Gerät, dann öffnet sie sich wie jede andere App.",
215
+ "kumiko.pwa.install-hint-ios":
216
+ "Zum Installieren tippen Sie auf Teilen und dann auf „Zum Home-Bildschirm“.",
190
217
  "kumiko.form.draft.resume-multiple":
191
218
  "Mehrere offene Entwürfe für dieses Formular gefunden. Welchen möchten Sie fortsetzen?",
192
219
  "kumiko.form.draft.resume-single":
@@ -264,11 +291,11 @@ export const localeDeFormalOverrides: Readonly<Record<string, string>> = {
264
291
  "inboundMail.imap.connect.errors.loginRejected":
265
292
  "Der IMAP-Server hat die Anmeldung abgelehnt. Prüfen Sie Benutzername und Passwort.",
266
293
  "inboundMail.imap.connect.errors.tlsFailed":
267
- "Die verschlüsselte Verbindung ist fehlgeschlagen. Prüfen Sie Port und TLS-Einstellung.",
294
+ "Die verschlüsselte Verbindung ist fehlgeschlagen. Prüfen Sie, ob der Port der IMAPS-Port ist (meist 993).",
268
295
  "inboundMail.imap.connect.errors.connectFailed":
269
296
  "Keine Verbindung zum IMAP-Server. Prüfen Sie Servernamen und Port.",
270
297
  "inboundMail.imap.connect.outgoingHint":
271
- "Antworten gehen von dieser Adresse über Ihren eigenen Mailserver raus, mit demselben Benutzernamen und Passwort. Lassen Sie das Feld leer, wenn der Server wie der IMAP-Server heißt, nur mit smtp. statt imap. Meist 587, auch wenn Ihr Anbieter 465/SSL nennt.",
298
+ "Antworten gehen von dieser Adresse über Ihren eigenen Mailserver raus, mit demselben Benutzernamen und Passwort. Lassen Sie das Feld leer, wenn der Server wie der IMAP-Server heißt, nur mit smtp. statt imap. Meist 587, auch wenn Ihr Anbieter 465/SSL nennt. Port 465 bedeutet SSL/TLS, jeder andere Port STARTTLS.",
272
299
  "inboundMail.imap.connect.errors.smtpHostUnreachable":
273
300
  "Empfang ok, Senden geht nicht: Der Postausgangsserver ist nicht erreichbar oder nicht erlaubt. Prüfen Sie seinen Namen.",
274
301
  "inboundMail.send.errors.notConfigured":
package/src/strings.ts CHANGED
@@ -39,7 +39,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
39
39
  "admin-shell:overview.range.7d": "7 Tage",
40
40
  "admin-shell:overview.scope.badge": "Alle Mandanten",
41
41
  "admin-shell:overview.scope.notice":
42
- "Sie sehen Daten aller Mandanten. Mandantenübergreifende Abfragen werden im Ereignisprotokoll vermerkt.",
42
+ "Du siehst Daten aller Mandanten. Mandantenübergreifende Abfragen werden im Ereignisprotokoll vermerkt.",
43
43
  "admin-shell:workspace.platform": "Plattform",
44
44
  "admin-shell:workspace.tenant": "Administration",
45
45
  "audit.errors.systemScopeRequiresSystemAdmin": "Nur SystemAdmin darf Systemereignisse lesen.",
@@ -365,6 +365,8 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
365
365
  "Dieser Mandant hat kein aktives Abo zum Wechseln.",
366
366
  "billing-foundation.errors.planSwitchNotSupported":
367
367
  "Dieser Anbieter unterstützt keinen Tarifwechsel.",
368
+ "billing-foundation.errors.planSwitchPending":
369
+ "Ein Tarifwechsel wird bereits verarbeitet. Warte einen Moment, bis er abgeschlossen ist.",
368
370
  "billing-foundation.errors.planTiersShareProduct":
369
371
  "Jeder Tarif braucht ein eigenes Stripe-Produkt. Bitte den Support kontaktieren.",
370
372
  "billing-foundation.errors.priceUnavailable":
@@ -445,6 +447,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
445
447
  "cap-overview.list.filter.tier": "Tier",
446
448
  "cap-overview.notMeasured": "Noch nicht gemessen",
447
449
  "cap-overview.notIncluded": "Nicht enthalten",
450
+ "cap-overview.notIncludedButUsed": "{used} · nicht enthalten",
448
451
  "cap-overview.platform.filter.tenant": "Mandant",
449
452
  "cap-overview.unlimited": "{used} · unbegrenzt",
450
453
  "compliance-profiles:entity:__action-form__:field:profileKey": "Compliance-Profil",
@@ -465,6 +468,15 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
465
468
  "config.secret.channel-telegram.bot-token.hint":
466
469
  'Token von @BotFather. Gilt für jeden Telegram-Chat, den der Mandant per route: { telegram: "<Chat-ID>" } anspricht.',
467
470
  "config.secret.channel-telegram.bot-token.label": "Telegram-Bot-Token",
471
+ "config.secret.channel-whatsapp.access-token.hint":
472
+ "Systembenutzer-Zugriffstoken der Meta-App. Wird zum Senden von Nachrichten und zum Laden von Medien verwendet.",
473
+ "config.secret.channel-whatsapp.access-token.label": "WhatsApp-Zugriffstoken",
474
+ "config.secret.channel-whatsapp.app-secret.hint":
475
+ "App-Secret der Meta-App. Prüft die Signatur jedes eingehenden Webhooks.",
476
+ "config.secret.channel-whatsapp.app-secret.label": "WhatsApp-App-Secret",
477
+ "config.secret.channel-whatsapp.verify-token.hint":
478
+ "Beliebiger Text, den du auch in den Meta-Webhook-Einstellungen einträgst; beantwortet den Abonnement-Handshake von Meta.",
479
+ "config.secret.channel-whatsapp.verify-token.label": "WhatsApp-Verifizierungstoken",
468
480
  "config.secret.file-provider-s3.s3-secret-access-key.hint":
469
481
  "Privater Teil des S3-Schlüsselpaars. Hetzner nennt ihn „Secret Key“, AWS „Secret Access Key“.",
470
482
  "config.secret.file-provider-s3.s3-secret-access-key.label": "S3 Secret Access Key",
@@ -587,9 +599,20 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
587
599
  "errors.validation.too_big": "Zu groß oder zu lang. Maximal erlaubt: {maximum}.",
588
600
  "kumiko.boolean.no": "Nein",
589
601
  "kumiko.boolean.yes": "Ja",
602
+ "kumiko.editor.device.desktop": "Desktop",
603
+ "kumiko.editor.device.mobile": "Mobil 375 px",
604
+ "kumiko.editor.deviceSwitch": "Breite der Vorschau",
605
+ "kumiko.editor.discard": "Änderungen verwerfen",
606
+ "kumiko.editor.localeSwitch": "Sprache",
607
+ "kumiko.editor.modeSwitch": "Modus",
608
+ "kumiko.editor.noChanges": "Keine ungespeicherten Änderungen",
609
+ "kumiko.editor.publish": "Veröffentlichen",
610
+ "kumiko.editor.savedAt": "Zuletzt gespeichert {when}",
611
+ "kumiko.editor.unsavedChanges": "Ungespeicherte Änderungen",
590
612
  "kumiko.field.file-list.download": "Herunterladen",
591
613
  "kumiko.field.file-list.hidePreview": "Vorschau ausblenden",
592
614
  "kumiko.field.file-list.preview": "Vorschau",
615
+ "kumiko.field.file-list.view": "Ansehen",
593
616
  "kumiko.validation.number.min": "Muss mindestens {minimum} sein.",
594
617
  "kumiko.validation.number.max": "Darf höchstens {maximum} sein.",
595
618
  "errors.validation.too_small": "Zu klein oder zu kurz. Mindestens erforderlich: {minimum}.",
@@ -763,6 +786,10 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
763
786
  "kumiko.dashboard.chart.forecast": "Prognose",
764
787
  "kumiko.dashboard.chart.markers": "Ereignisse",
765
788
  "kumiko.dashboard.filter.all": "Alle",
789
+ "kumiko.dashboard.list.line-more": "{count} weitere",
790
+ "kumiko.dashboard.list.more": "Weitere {count} Einträge",
791
+ "kumiko.dashboard.list.open-row": "Öffnen",
792
+ "kumiko.dashboard.list.shown-of-total": "{shown} von {total}",
766
793
  "kumiko.dashboard.panel.error.isolated": "Die anderen Bereiche sind nicht betroffen.",
767
794
  "kumiko.dashboard.panel.error.retry": "Erneut versuchen",
768
795
  "kumiko.dashboard.panel.error.title": "{label} konnte nicht geladen werden",
@@ -776,18 +803,17 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
776
803
  "kumiko.error.reference": "Fehler-ID: {id}",
777
804
  "kumiko.error.copyReference": "Kopieren",
778
805
  "kumiko.error.referenceCopied": "Kopiert!",
779
- "kumiko.screen-access-denied.title": "Sie haben keinen Zugriff auf diese Seite.",
806
+ "kumiko.screen-access-denied.title": "Du hast keinen Zugriff auf diese Seite.",
780
807
  "kumiko.screen-missing.home": "Zur Startseite",
781
808
  "kumiko.screen-missing.hint":
782
809
  "Sie ist für dein Konto nicht freigeschaltet oder existiert nicht mehr.",
783
810
  "kumiko.screen-missing.title": "Diese Seite ist nicht verfügbar",
784
- "kumiko.screen.forbidden": "Sie haben keinen Zugriff auf diese Seite.",
811
+ "kumiko.screen.forbidden": "Du hast keinen Zugriff auf diese Seite.",
785
812
  "kumiko.screen.notFound": "Diese Seite wurde nicht gefunden.",
786
813
  "kumiko.screen.unavailable": "Diese Seite ist derzeit nicht verfügbar.",
787
814
  "kumiko.dashboard.brush-end": "Fensterende",
788
815
  "kumiko.dashboard.brush-start": "Fensterbeginn",
789
816
  "kumiko.dashboard.today": "Heute",
790
- "kumiko.dashboard.updated-at": "Stand {time}",
791
817
  "kumiko.dialog.cancel": "Abbrechen",
792
818
  "kumiko.dialog.close": "Schließen",
793
819
  "kumiko.dialog.confirm": "Bestätigen",
@@ -820,6 +846,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
820
846
  "kumiko.field.embedded-list.remove-row": "Zeile entfernen",
821
847
  "kumiko.field.file-list.add": "Datei hinzufügen",
822
848
  "kumiko.field.file-list.empty": "Noch keine Dateien.",
849
+ "kumiko.field.dropzone.file-unavailable": "Datei nicht mehr verfügbar",
823
850
  "kumiko.field.dropzone.limit-count": "bis zu {count} Dateien",
824
851
  "kumiko.field.dropzone.limit-size": "bis zu {size} pro Datei",
825
852
  "kumiko.field.dropzone.title": "Dateien hierher ziehen oder klicken zum Auswählen",
@@ -844,6 +871,12 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
844
871
  "kumiko.field.writeOnly.maskedSet": "•••••••••• gesetzt",
845
872
  "kumiko.field.writeOnly.replace": "Ersetzen",
846
873
  "kumiko.pii.erased": "Gelöscht",
874
+ "kumiko.pwa.dismiss": "Nicht jetzt",
875
+ "kumiko.pwa.install": "Installieren",
876
+ "kumiko.pwa.install-hint":
877
+ "Installiere diese App auf deinem Gerät, dann öffnet sie sich wie jede andere App.",
878
+ "kumiko.pwa.install-hint-ios":
879
+ "Zum Installieren tippe auf Teilen und dann auf „Zum Home-Bildschirm“.",
847
880
  "kumiko.record.not-found.back": "Zurück zur Liste",
848
881
  "kumiko.record.not-found.hint":
849
882
  "Er wurde möglicherweise gelöscht, oder der Link ist nicht mehr gültig.",
@@ -881,9 +914,12 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
881
914
  "kumiko.list.empty.defaultFiltered":
882
915
  "Keine Einträge im Standardfilter. Mit „Alle anzeigen“ erscheinen auch Einträge außerhalb davon.",
883
916
  "kumiko.list.empty.showAll": "Alle anzeigen",
917
+ "kumiko.list.empty.resetFilter": "Filter zurücksetzen",
918
+ "kumiko.list.named-filter.all": "Alle",
884
919
  "kumiko.list.empty.hint": "Lege den ersten an, um loszulegen.",
885
920
  "kumiko.list.empty.title": "Noch keine Einträge.",
886
921
  "kumiko.list.end-of-list": "— Ende der Liste —",
922
+ "kumiko.list.filter.all": "Alle",
887
923
  "kumiko.list.filter.reset": "Zurücksetzen",
888
924
  "kumiko.list.filter.toggle": "Filter",
889
925
  "kumiko.list.no-entries": "Noch keine Einträge.",
@@ -918,7 +954,19 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
918
954
  "kumiko.list.bulk.result.not-started": "Nicht ausgeführt: {count}",
919
955
  "kumiko.list.bulk.result.dismiss": "Schließen",
920
956
  "kumiko.list.search-placeholder": "Suchen…",
957
+ "kumiko.list.hint.empty": "Nichts offen",
958
+ "kumiko.list.hint.reason": "Warum?",
959
+ "kumiko.detail.steps.title": "Nächste Schritte",
960
+ "kumiko.detail.steps.empty": "Nichts zu tun",
961
+ "kumiko.detail.progress.step-of": "Schritt {current} von {total}",
962
+ "kumiko.detail.steps.less": "Weniger Schritte",
963
+ "kumiko.detail.steps.more.one": "1 weiterer Schritt",
964
+ "kumiko.detail.steps.more.other": "{count} weitere Schritte",
965
+ "kumiko.detail.steps.reason": "Warum?",
966
+ "kumiko.detail.breadcrumb": "Pfad",
921
967
  "kumiko.list.sort.by": "Sortiert nach {column}",
968
+ "kumiko.list.sort.prefix": "Sortiert nach",
969
+ "kumiko.list.sort.summary": "Sortiert nach {sort} {direction} · {count} {noun}",
922
970
  "kumiko.list.sort.label": "Sortieren",
923
971
  "kumiko.list.sort.unsorted": "Unsortiert",
924
972
  "kumiko.list.reset-all": "Zurücksetzen",
@@ -932,6 +980,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
932
980
  "kumiko.list.view.density": "Dichte",
933
981
  "kumiko.list.view.density.comfortable": "Komfortabel",
934
982
  "kumiko.list.view.density.compact": "Kompakt",
983
+ "kumiko.list.view.density.relaxed": "Weit",
935
984
  "kumiko.list.view.reset": "Ansicht zurücksetzen",
936
985
  "kumiko.list.group.by": "Gruppieren nach",
937
986
  "kumiko.list.group.none": "Keine",
@@ -974,13 +1023,12 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
974
1023
  "kumiko.notifications.loadMore": "Mehr laden",
975
1024
  "kumiko.notifications.unread": "Ungelesen",
976
1025
  "kumiko.notifications.loadFailed": "Benachrichtigungen konnten nicht geladen werden.",
1026
+ "kumiko.pager.goToPage": "Seite {page}",
977
1027
  "kumiko.pager.nextPage": "Nächste Seite",
978
- "kumiko.pager.pageOf": "Seite {page} von {pages}",
979
1028
  "kumiko.pager.pageSize": "{size} pro Seite",
980
1029
  "kumiko.pager.pageSizeLabel": "Einträge pro Seite",
981
1030
  "kumiko.pager.previousPage": "Vorherige Seite",
982
1031
  "kumiko.pager.status": "{from}–{to} von {total}",
983
- "kumiko.pager.status.noun": "{from}–{to} von {total} {noun}",
984
1032
  "kumiko.planCard.current": "Aktueller Tarif",
985
1033
  "kumiko.planCard.priceUnavailable": "Preis nicht verfügbar",
986
1034
  "kumiko.reference.system-tenant": "System",
@@ -1043,6 +1091,8 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1043
1091
  "kumiko.widget.message-thread.showImages": "Bilder laden",
1044
1092
  "kumiko.widget.message-reader.mail": "Mail",
1045
1093
  "kumiko.widget.step-list.progress": "{done} von {total} erledigt",
1094
+ "kumiko.widget.step-list.total.one": "1 Schritt",
1095
+ "kumiko.widget.step-list.total.other": "{count} Schritte",
1046
1096
  "kumiko.widget.step-list.progressLabel": "Fortschritt",
1047
1097
  "kumiko.widget.step-list.moreSteps": "und {count} weitere Schritte",
1048
1098
  "kumiko.widget.step-list.waitingFor": "Wartet auf: {reason}",
@@ -1090,11 +1140,19 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1090
1140
  "managed-pages:actions.edit": "Bearbeiten",
1091
1141
  "managed-pages.errors.document.rejected": "Der Inhalt enthält nicht erlaubte Elemente: {detail}",
1092
1142
  "managed-pages:body.lossy.warning":
1093
- "Diese Seite wurde in Markdown geschrieben. Bei der Umwandlung in den Editor gehen verloren: {features}. Prüfen Sie das Ergebnis vor dem Speichern.",
1143
+ "Diese Seite wurde in Markdown geschrieben. Bei der Umwandlung in den Editor gehen verloren: {features}. Prüfe das Ergebnis vor dem Speichern.",
1094
1144
  "managed-pages:body.lossy.image": "externe Bilder",
1095
1145
  "managed-pages:body.lossy.blockquote": "Zitate",
1096
1146
  "managed-pages:body.lossy.code": "Code",
1097
1147
  "managed-pages:body.lossy.deepHeading": "Überschriften unterhalb von Ebene 3",
1148
+ "managed-pages:editor.noValue": "Nicht gesetzt",
1149
+ "managed-pages:editor.infoEdit":
1150
+ "Seite links bearbeiten; rechts stehen Adresse und Einstellungen.",
1151
+ "managed-pages:editor.infoPreview":
1152
+ "Vorschau des ungespeicherten Entwurfs, so sehen ihn Besucher.",
1153
+ "managed-pages:editor.railPage": "Seite",
1154
+ "managed-pages:editor.create": "Seite anlegen",
1155
+ "managed-pages:editor.loadFailed": "Die Seite konnte nicht geladen werden.",
1098
1156
  "managed-pages:branding.section.custom-css": "Eigenes CSS",
1099
1157
  "managed-pages:branding.section.identity": "Identität",
1100
1158
  "managed-pages:confirms.page-delete": "Diese Seite wirklich löschen?",
@@ -1115,8 +1173,6 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1115
1173
  "managed-pages:entity:page:field:published:option:true": "Veröffentlicht",
1116
1174
  "managed-pages:entity:page:field:slug": "Slug",
1117
1175
  "managed-pages:entity:page:field:title": "Titel",
1118
- "managed-pages:section.body": "Inhalt",
1119
- "managed-pages:section.meta": "Metadaten",
1120
1176
  "metrics.errors.tenantFilterUnsupported":
1121
1177
  "Die Datenquelle dieser Kennzahl hat keine Mandantenspalte und lässt sich nicht auf einen Mandanten eingrenzen.",
1122
1178
  "metrics:deliveryChannel.email": "E-Mail",
@@ -1299,7 +1355,6 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1299
1355
  "subscription-paddle.client-token": "Paddle Client-Token",
1300
1356
  "subscription-paddle.environment": "Paddle Umgebung",
1301
1357
  "subscription-paddle.settings": "Paddle",
1302
- "subscription-paddle.tenant-binding-key": "Paddle Mandanten-Bindungsschlüssel",
1303
1358
  "subscription-paddle.webhook-secret": "Paddle Webhook-Secret",
1304
1359
  "subscription-stripe.api-key": "Stripe API Key",
1305
1360
  "subscription-stripe.billing-live": "Stripe Billing live",
@@ -1406,7 +1461,19 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1406
1461
  "template-resolver.editor.networkError": "Netzwerkfehler beim Speichern.",
1407
1462
  "template-resolver.editor.newEntry": "Neuer Eintrag",
1408
1463
  "template-resolver.editor.newEntryTitle": "Neu: {label}",
1409
- "template-resolver.editor.readOnly": "Nur lesbar. Ihre Rolle erlaubt hier keine Änderungen.",
1464
+ "template-resolver.editor.readOnly": "Nur lesbar. Deine Rolle erlaubt hier keine Änderungen.",
1465
+ "template-resolver.editor.infoPreviewPlain":
1466
+ "Vorschau des ungespeicherten Stands, so wie die Seite ihn zeigt. Kopf und Fuß der Website sind nicht enthalten.",
1467
+ "template-resolver.preview.frameTitle": "Textvorschau",
1468
+ "template-resolver.editor.infoEdit":
1469
+ "Titel und Inhalt bearbeiten. Die Vorschau zeigt ihn mit Beispielwerten für die Platzhalter.",
1470
+ "template-resolver.editor.infoPreview":
1471
+ "So sieht der Text mit den Beispielwerten aus, auch mit Änderungen, die noch nicht gespeichert sind.",
1472
+ "template-resolver.editor.localeLabel": "Sprache",
1473
+ "template-resolver.editor.railDetails": "Eintrag",
1474
+ "template-resolver.editor.railExamples": "Beispielwerte",
1475
+ "template-resolver.editor.railPlaceholders": "Platzhalter",
1476
+ "template-resolver.editor.railPlaceholdersHint": "Diese Namen lassen sich im Text verwenden.",
1410
1477
  "template-resolver.editor.save": "Speichern",
1411
1478
  "template-resolver.editor.saveFailed": "Speichern fehlgeschlagen.",
1412
1479
  "template-resolver.editor.saved": "Gespeichert.",
@@ -1421,6 +1488,8 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1421
1488
  "Das Ziel der Schaltfläche „{detail}“ muss ein Platzhalter sein.",
1422
1489
  "templateResolver.errors.document.disallowedLinkHref":
1423
1490
  "Das Linkziel „{detail}“ ist nicht erlaubt; verwende https, http, mailto, tel, einen relativen Pfad oder einen Platzhalter.",
1491
+ "templateResolver.errors.document.relativeLinkWithoutBase":
1492
+ "Das Linkziel „{detail}“ ist relativ, aber Mails und PDF-Dokumente haben keine Basisadresse; verwende einen absoluten https-Link.",
1424
1493
  "templateResolver.errors.document.documentRequiresHtmlFormat":
1425
1494
  "Diese Vorlagenart erfordert das Format html, erhalten: „{detail}“.",
1426
1495
  "templateResolver.errors.document.layoutRequiresMjmlFormat":
@@ -1472,11 +1541,11 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1472
1541
  "Der Block {blockId} wurde von einem früheren Schritt bereits entfernt.",
1473
1542
  "templateResolver.errors.patch.textNotFound": "Der Text {find} wurde im Block nicht gefunden.",
1474
1543
  "templateResolver.errors.patch.textAmbiguous":
1475
- "Der Text {find} kommt {count}-mal im Block vor; verwenden Sie einen längeren Text.",
1544
+ "Der Text {find} kommt {count}-mal im Block vor; verwende einen längeren Text.",
1476
1545
  "templateResolver.errors.patch.textSpansFormatting":
1477
- "Der Text {find} überspannt einen Formatwechsel im Block; ersetzen Sie jeden formatierten Teil einzeln.",
1546
+ "Der Text {find} überspannt einen Formatwechsel im Block; ersetze jeden formatierten Teil einzeln.",
1478
1547
  "templateResolver.errors.patch.placeholderNotReplaceable":
1479
- "Der Platzhalter {find} lässt sich nicht als Text ersetzen; ändern Sie den Text drumherum mit einer anderen Operation oder entfernen Sie den Block.",
1548
+ "Der Platzhalter {find} lässt sich nicht als Text ersetzen; ändere den Text drumherum mit einer anderen Operation oder entferne den Block.",
1480
1549
  "templateResolver.errors.patch.blockNotAllowed":
1481
1550
  "Der Blocktyp {type} ist in {kind}-Vorlagen nicht verfügbar.",
1482
1551
  "templateResolver.errors.patch.blockTypeMismatch":
@@ -1511,7 +1580,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1511
1580
  "templateResolver.errors.collection.kindNotAllowed":
1512
1581
  "„{detail}“-Vorlagen werden im eigenen Editor gepflegt, nicht über eine Sammlung.",
1513
1582
  "templateResolver.errors.collection.slugExists":
1514
- "Ein Eintrag mit dem Kürzel „{detail}“ existiert bereits. Wählen Sie ein anderes.",
1583
+ "Ein Eintrag mit dem Kürzel „{detail}“ existiert bereits. Wähle ein anderes.",
1515
1584
  "templateResolver.errors.noSystemTemplate":
1516
1585
  "Es gibt keine aktive Systemvorlage, auf die zurückgesetzt werden könnte.",
1517
1586
  "templateResolver.errors.noDraft": "Es gibt keinen Entwurf, der verworfen werden könnte.",
@@ -1725,9 +1794,9 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
1725
1794
  "userDataRights.privacyCenter.restriction.restrict": "Konto einschränken",
1726
1795
  "userDataRights.privacyCenter.restriction.title": "Verarbeitung einschränken · Art. 18",
1727
1796
  "userDataRights.privacyCenter.subtitle":
1728
- "Laden Sie eine Kopie Ihrer Daten herunter (Art. 20), schränken Sie die Verarbeitung Ihres Kontos ein (Art. 18) oder löschen Sie es (Art. 17).",
1797
+ "Lade eine Kopie deiner Daten herunter (Art. 20), schränke die Verarbeitung deines Kontos ein (Art. 18) oder lösche es (Art. 17).",
1729
1798
  "userDataRights.privacyCenter.subtitleWithoutDeletion":
1730
- "Laden Sie eine Kopie Ihrer Daten herunter (Art. 20) oder schränken Sie die Verarbeitung Ihres Kontos ein (Art. 18).",
1799
+ "Lade eine Kopie deiner Daten herunter (Art. 20) oder schränke die Verarbeitung deines Kontos ein (Art. 18).",
1731
1800
  "admin-shell.screen.platform-overview.subtitle":
1732
1801
  "Zustand von Mandanten, Benutzern, Jobs und Zustellungen der gesamten Installation.",
1733
1802
  "admin-shell.screen.tenant-overview.subtitle":
@@ -2134,7 +2203,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
2134
2203
  "mail-transport-smtp.from.description":
2135
2204
  "Von dieser Adresse kommen die Mails, zum Beispiel status@example.com. Dein Anbieter muss sie erlauben.",
2136
2205
  "screen:mail-accounts.title": "Postfächer",
2137
- "screen:my-mail-accounts.title": "Ihre Postfächer",
2206
+ "screen:my-mail-accounts.title": "Deine Postfächer",
2138
2207
  "screen:mail-account-edit.title": "Postfach bearbeiten",
2139
2208
  "screen:mail-account-sender-check.title": "Absenderprüfung",
2140
2209
  "inboundMail.accounts.col.name": "Name",
@@ -2159,6 +2228,8 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
2159
2228
  "inboundMail.accounts.errors.addressAlreadyConnected": "Dieses Postfach ist bereits verbunden.",
2160
2229
  "inboundMail.accounts.errors.addressDisconnected":
2161
2230
  "Dieses Postfach wurde früher getrennt. In der Postfachliste „Reaktivieren“ wählen, damit der Verlauf erhalten bleibt.",
2231
+ "inboundMail.accounts.errors.personalAddressNotOwn":
2232
+ "Ein persönliches Postfach lässt sich nur mit der E-Mail-Adresse des eigenen Kontos verbinden. Andere Adressen verbindet ein Admin als gemeinsames Postfach.",
2162
2233
  "inboundMail.accounts.reactivate": "Reaktivieren",
2163
2234
  "inboundMail.accounts.quarantine": "Quarantäne",
2164
2235
  "inboundMail.accounts.errors.credentialRequired":
@@ -2195,7 +2266,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
2195
2266
  "inboundMail.accounts.connectImap": "Postfach verbinden",
2196
2267
  "screen:mail-account-connect-imap.title": "Postfach verbinden",
2197
2268
  "inboundMail.accounts.reactivateOauth.confirm":
2198
- "Sie werden zur Anmeldeseite des Anbieters weitergeleitet. Nach der Anmeldung ruft das Postfach wieder Mails ab und behält seinen Verlauf.",
2269
+ "Du wirst zur Anmeldeseite des Anbieters weitergeleitet. Nach der Anmeldung ruft das Postfach wieder Mails ab und behält seinen Verlauf.",
2199
2270
  "inboundMail.accounts.reconnect.invalidRow":
2200
2271
  "Dieses Postfach lässt sich hier nicht reaktivieren.",
2201
2272
  "screen:mail-account-reconnect-imap.title": "Postfach neu verbinden",
@@ -2220,14 +2291,14 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
2220
2291
  "inboundMail.imap.connect.errors.loginRejected":
2221
2292
  "Der IMAP-Server hat die Anmeldung abgelehnt. Prüfe Benutzername und Passwort.",
2222
2293
  "inboundMail.imap.connect.errors.tlsFailed":
2223
- "Die verschlüsselte Verbindung ist fehlgeschlagen. Prüfe Port und TLS-Einstellung.",
2294
+ "Die verschlüsselte Verbindung ist fehlgeschlagen. Prüfe, ob der Port der IMAPS-Port ist (meist 993).",
2224
2295
  "inboundMail.imap.connect.errors.connectFailed":
2225
2296
  "Keine Verbindung zum IMAP-Server. Prüfe Servernamen und Port.",
2226
2297
  "inbound-provider-imap:entity:__action-form__:field:smtpHost": "Postausgangsserver (SMTP)",
2227
2298
  "inbound-provider-imap:entity:__action-form__:field:smtpPort": "SMTP-Port",
2228
2299
  "inboundMail.imap.connect.outgoing": "Senden",
2229
2300
  "inboundMail.imap.connect.outgoingHint":
2230
- "Antworten gehen von dieser Adresse über deinen eigenen Mailserver raus, mit demselben Benutzernamen und Passwort. Lass das Feld leer, wenn der Server wie der IMAP-Server heißt, nur mit smtp. statt imap. Meist 587, auch wenn dein Anbieter 465/SSL nennt.",
2301
+ "Antworten gehen von dieser Adresse über deinen eigenen Mailserver raus, mit demselben Benutzernamen und Passwort. Lass das Feld leer, wenn der Server wie der IMAP-Server heißt, nur mit smtp. statt imap. Meist 587, auch wenn dein Anbieter 465/SSL nennt. Port 465 bedeutet SSL/TLS, jeder andere Port STARTTLS.",
2231
2302
  "inbound-provider-imap:entity:__action-form__:field:trustedAuthservId": "Kennung des Mailservers",
2232
2303
  "inboundMail.imap.connect.senderCheck": "Absenderprüfung",
2233
2304
  "inboundMail.imap.connect.senderCheckHint":
@@ -2334,6 +2405,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
2334
2405
  "audit.log.event.waitlist-exported": "Warteliste exportiert",
2335
2406
  "audit.log.event.waitlist-purged": "Warteliste bereinigt",
2336
2407
  "audit.log.event.feature-toggle-set": "Funktionsschalter geändert",
2408
+ "audit.log.event.consumer-state-changed": "Event-Consumer-Status geändert",
2337
2409
  "audit.log.event.contract-termination-requested": "Vertragskündigung angefordert",
2338
2410
  "audit.log.event.contract-termination-declared": "Vertragskündigung erklärt",
2339
2411
  "audit.log.event.contract-termination-unmatched": "Vertragskündigung nicht zugeordnet",