@cosmicdrift/kumiko-locale-de 0.369.0 → 0.371.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 +2 -2
- package/src/__tests__/en-catalog.ts +12 -0
- package/src/__tests__/formal.test.ts +17 -0
- package/src/changes.json +6 -0
- package/src/formal.ts +21 -0
- package/src/strings.ts +24 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-locale-de",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.371.0",
|
|
4
4
|
"description": "German UI and mail copy for Kumiko framework screens. Opt in by mounting localeDe() + localeDeClient().",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
31
|
+
"@cosmicdrift/kumiko-framework": "0.371.0"
|
|
32
32
|
},
|
|
33
33
|
"publishConfig": {
|
|
34
34
|
"registry": "https://registry.npmjs.org",
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// i18n-parity test. Regenerate when that test reports a drift.
|
|
3
3
|
|
|
4
4
|
export const frameworkEnCatalog: Readonly<Record<string, string>> = {
|
|
5
|
+
"account-security:nav.accountSecurity": "Account & Security",
|
|
6
|
+
"screen:account-security.title": "Account & Security",
|
|
5
7
|
"admin-shell:nav.myCaps": "Plans & Caps",
|
|
6
8
|
"admin-shell:nav.platformOverview": "Overview",
|
|
7
9
|
"admin-shell:nav.tenantCaps": "Plans & Caps",
|
|
@@ -491,6 +493,7 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
|
|
|
491
493
|
"errors.access.denied": "You don't have permission to do this.",
|
|
492
494
|
"errors.cap.exceeded": "Limit reached. Upgrade your plan or wait for the next period.",
|
|
493
495
|
"errors.conflict": "Conflict — the operation could not be completed.",
|
|
496
|
+
"errors.demoReadOnly": "This live demo is read-only.",
|
|
494
497
|
"errors.download.urlMissing": "Download unavailable — please try again.",
|
|
495
498
|
"errors.feature.disabled": "This feature is currently unavailable.",
|
|
496
499
|
"errors.internal": "Something went wrong. Please try again later.",
|
|
@@ -1139,9 +1142,14 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
|
|
|
1139
1142
|
"mail.unsubscribe.doneTitle": "Unsubscribed",
|
|
1140
1143
|
"mail.unsubscribe.doneMessage": "You have been unsubscribed.",
|
|
1141
1144
|
"mail.unsubscribe.undoButton": "Undo",
|
|
1145
|
+
"mail.unsubscribe.undoHint": "Unsubscribed by mistake? You can undo it within the next hour.",
|
|
1142
1146
|
"mail.unsubscribe.resubscribedTitle": "Subscribed again",
|
|
1143
1147
|
"mail.unsubscribe.resubscribedMessage": "You have been subscribed again.",
|
|
1144
1148
|
"mail.unsubscribe.failed": "That did not work. Please try again later.",
|
|
1149
|
+
"mail.unsubscribe.failedTitle": "Something went wrong",
|
|
1150
|
+
"mail.unsubscribe.invalidTitle": "Link no longer valid",
|
|
1151
|
+
"mail.unsubscribe.invalidMessage":
|
|
1152
|
+
"This link is invalid or has expired. Please use the unsubscribe link in a more recent email.",
|
|
1145
1153
|
"templateResolver.errors.systemOnlyTemplate":
|
|
1146
1154
|
"Only the platform maintains this template; it cannot be overridden per tenant.",
|
|
1147
1155
|
"templateResolver.errors.template.targetExists":
|
|
@@ -1405,6 +1413,7 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
|
|
|
1405
1413
|
"waitlist:entity:waitlistEntry:field:portfolio": "Portfolio",
|
|
1406
1414
|
"waitlist:entity:waitlistEntry:field:status": "Status",
|
|
1407
1415
|
"waitlist:entity:waitlistEntry:field:status:option:invited": "Invited",
|
|
1416
|
+
"waitlist:entity:waitlistEntry:field:status:option:provisioned": "Provisioned",
|
|
1408
1417
|
"waitlist:entity:waitlistEntry:field:status:option:pending": "Pending",
|
|
1409
1418
|
"waitlist:entity:waitlistEntry:field:status:option:rejected": "Rejected",
|
|
1410
1419
|
"waitlist:entity:waitlistEntry:field:submittedAt": "Created",
|
|
@@ -1625,6 +1634,9 @@ export const frameworkEnCatalog: Readonly<Record<string, string>> = {
|
|
|
1625
1634
|
"documentDesigner.mail.props.senderDefault": "Default sender of the tenant",
|
|
1626
1635
|
"documentDesigner.mail.props.senderPlaceholder": "Name shown to recipients",
|
|
1627
1636
|
"documentDesigner.mail.props.senderHint": "The address comes from the platform's mail delivery.",
|
|
1637
|
+
"documentDesigner.mail.props.senderHintTenant":
|
|
1638
|
+
"The address comes from your organization's email sending settings.",
|
|
1639
|
+
"documentDesigner.mail.props.senderSettingsLink": "Open email sending",
|
|
1628
1640
|
"documentDesigner.mail.props.replyTo": "Reply to",
|
|
1629
1641
|
"documentDesigner.mail.props.category": "Category",
|
|
1630
1642
|
"documentDesigner.mail.props.transactional": "Transactional",
|
|
@@ -18,7 +18,24 @@ 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.
|
|
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/;
|
|
25
|
+
|
|
26
|
+
const DESIGNER_FORMAL_ALLOWLIST: ReadonlySet<string> = new Set<string>();
|
|
27
|
+
|
|
21
28
|
describe("locale-de formal overrides", () => {
|
|
29
|
+
test("informal bundle has no formal address in documentDesigner keys", () => {
|
|
30
|
+
const offenders = Object.entries(localeDeBundle)
|
|
31
|
+
.filter(([key]) => key.startsWith("documentDesigner."))
|
|
32
|
+
.filter(
|
|
33
|
+
([key, value]) => !DESIGNER_FORMAL_ALLOWLIST.has(key) && formalAddressRegex.test(value),
|
|
34
|
+
)
|
|
35
|
+
.map(([key]) => key);
|
|
36
|
+
expect(offenders).toEqual([]);
|
|
37
|
+
});
|
|
38
|
+
|
|
22
39
|
test("every override key exists in localeDeBundle", () => {
|
|
23
40
|
const orphaned = Object.keys(localeDeFormalOverrides).filter(
|
|
24
41
|
(k) => localeDeBundle[k] === undefined,
|
package/src/changes.json
CHANGED
package/src/formal.ts
CHANGED
|
@@ -13,6 +13,26 @@ export const localeDeFormalOverrides: Readonly<Record<string, string>> = {
|
|
|
13
13
|
"Ihr eigenes Layout wird entfernt, danach gilt wieder das System-Layout.",
|
|
14
14
|
"documentDesigner.editor.dirtySwitch.description":
|
|
15
15
|
"Beim Wechsel der Layout-Art gehen Ihre ungespeicherten Änderungen verloren.",
|
|
16
|
+
"documentDesigner.origin.draftBesideActive":
|
|
17
|
+
"Verschickt wird Version {active}, Ihr Entwurf (Version {draft}) ist noch nicht veröffentlicht.",
|
|
18
|
+
"documentDesigner.mail.origin.tenantOnly": "Diese Vorlage gibt es nur für Ihren Mandanten.",
|
|
19
|
+
"documentDesigner.mail.origin.system":
|
|
20
|
+
"Sie sehen die System-Vorlage v{version}. Speichern legt eine Anpassung für Ihren Mandanten an.",
|
|
21
|
+
"documentDesigner.mail.props.senderHintTenant":
|
|
22
|
+
"Die Adresse kommt aus dem E-Mail-Versand Ihres Mandanten.",
|
|
23
|
+
"documentDesigner.mail.origin.copyNote":
|
|
24
|
+
"Beim Kopieren einer System-Fassung kommen Bilder und Anhänge nicht mit; laden Sie sie danach neu hoch.",
|
|
25
|
+
"documentDesigner.mail.origin.creating":
|
|
26
|
+
"Neue Fassung für {language}. Sie wird erst mit Speichern angelegt.",
|
|
27
|
+
"documentDesigner.mail.reset.description":
|
|
28
|
+
"Ihre Anpassung dieser Vorlage wird in allen Sprachen entfernt. Danach gilt wieder die System-Vorlage.",
|
|
29
|
+
"documentDesigner.mail.discard.description": "Ihre ungespeicherten Änderungen gehen verloren.",
|
|
30
|
+
"documentDesigner.mail.leave.description":
|
|
31
|
+
"Speichern Sie Ihre Änderungen als Entwurf, verwerfen Sie sie oder bleiben Sie auf dieser Seite.",
|
|
32
|
+
"documentDesigner.mail.testMail.ownAddress": "Ihre Adresse",
|
|
33
|
+
"documentDesigner.mail.testMail.hint":
|
|
34
|
+
"Versand über den normalen Zustellweg des Mandanten an Ihre eigene Adresse.",
|
|
35
|
+
"documentDesigner.mail.testMail.sent": "Test-Mail an Ihre Adresse gesendet: {subject}",
|
|
16
36
|
"auth.errors.accountRestricted":
|
|
17
37
|
"Konto nach Art. 18 DSGVO eingeschränkt. Heben Sie die Einschränkung auf, um sich wieder anzumelden.",
|
|
18
38
|
"auth.errors.invalidResetToken":
|
|
@@ -126,6 +146,7 @@ export const localeDeFormalOverrides: Readonly<Record<string, string>> = {
|
|
|
126
146
|
"dispatcher.errors.network":
|
|
127
147
|
"Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
|
|
128
148
|
"errors.access.denied": "Dazu haben Sie keine Berechtigung.",
|
|
149
|
+
"errors.demoReadOnly": "Diese Live-Demo ist schreibgeschützt.",
|
|
129
150
|
"errors.download.urlMissing": "Download nicht verfügbar. Bitte versuchen Sie es erneut.",
|
|
130
151
|
"errors.internal": "Etwas ist schiefgegangen. Bitte versuchen Sie es später erneut.",
|
|
131
152
|
"errors.rate_limited": "Zu viele Anfragen. Bitte versuchen Sie es in Kürze erneut.",
|
package/src/strings.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
// and extend this table (the parity test in use-all-bundled fails otherwise).
|
|
4
4
|
|
|
5
5
|
export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
6
|
+
"account-security:nav.accountSecurity": "Konto & Sicherheit",
|
|
7
|
+
"screen:account-security.title": "Konto & Sicherheit",
|
|
6
8
|
"admin-shell:nav.myCaps": "Tarife & Limits",
|
|
7
9
|
"admin-shell:nav.platformOverview": "Übersicht",
|
|
8
10
|
"admin-shell:nav.tenantCaps": "Tarife & Limits",
|
|
@@ -513,6 +515,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
513
515
|
"errors.cap.exceeded":
|
|
514
516
|
"Limit erreicht. Bitte Tarif upgraden oder auf die nächste Periode warten.",
|
|
515
517
|
"errors.conflict": "Der Vorgang konnte wegen eines Konflikts nicht abgeschlossen werden.",
|
|
518
|
+
"errors.demoReadOnly": "Diese Live-Demo ist schreibgeschützt.",
|
|
516
519
|
"errors.download.urlMissing": "Download nicht verfügbar. Bitte versuche es erneut.",
|
|
517
520
|
"errors.feature.disabled": "Diese Funktion ist derzeit nicht verfügbar.",
|
|
518
521
|
"errors.internal": "Etwas ist schiefgegangen. Bitte versuche es später erneut.",
|
|
@@ -1172,9 +1175,15 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1172
1175
|
"mail.unsubscribe.doneTitle": "Abgemeldet",
|
|
1173
1176
|
"mail.unsubscribe.doneMessage": "Diese E-Mails kommen nicht mehr.",
|
|
1174
1177
|
"mail.unsubscribe.undoButton": "Rückgängig",
|
|
1178
|
+
"mail.unsubscribe.undoHint":
|
|
1179
|
+
"Aus Versehen abgemeldet? Das lässt sich innerhalb der nächsten Stunde rückgängig machen.",
|
|
1175
1180
|
"mail.unsubscribe.resubscribedTitle": "Wieder angemeldet",
|
|
1176
1181
|
"mail.unsubscribe.resubscribedMessage": "Diese E-Mails kommen wieder.",
|
|
1177
1182
|
"mail.unsubscribe.failed": "Das hat nicht geklappt. Bitte später noch einmal versuchen.",
|
|
1183
|
+
"mail.unsubscribe.failedTitle": "Etwas ist schiefgelaufen",
|
|
1184
|
+
"mail.unsubscribe.invalidTitle": "Link nicht mehr gültig",
|
|
1185
|
+
"mail.unsubscribe.invalidMessage":
|
|
1186
|
+
"Dieser Link ist ungültig oder abgelaufen. Bitte den Abmeldelink aus einer neueren E-Mail verwenden.",
|
|
1178
1187
|
"templateResolver.errors.systemOnlyTemplate":
|
|
1179
1188
|
"Diese Vorlage pflegt nur die Plattform; sie lässt sich nicht pro Mandant überschreiben.",
|
|
1180
1189
|
"templateResolver.errors.template.targetExists":
|
|
@@ -1443,6 +1452,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1443
1452
|
"waitlist:entity:waitlistEntry:field:portfolio": "Portfolio",
|
|
1444
1453
|
"waitlist:entity:waitlistEntry:field:status": "Status",
|
|
1445
1454
|
"waitlist:entity:waitlistEntry:field:status:option:invited": "Eingeladen",
|
|
1455
|
+
"waitlist:entity:waitlistEntry:field:status:option:provisioned": "Eingerichtet",
|
|
1446
1456
|
"waitlist:entity:waitlistEntry:field:status:option:pending": "Ausstehend",
|
|
1447
1457
|
"waitlist:entity:waitlistEntry:field:status:option:rejected": "Abgelehnt",
|
|
1448
1458
|
"waitlist:entity:waitlistEntry:field:submittedAt": "Erstellt",
|
|
@@ -1474,7 +1484,7 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1474
1484
|
"documentDesigner.origin.system": "System-Vorlage",
|
|
1475
1485
|
"documentDesigner.origin.override": "Mandanten-Anpassung",
|
|
1476
1486
|
"documentDesigner.origin.draftBesideActive":
|
|
1477
|
-
"Verschickt wird Version {active},
|
|
1487
|
+
"Verschickt wird Version {active}, dein Entwurf (Version {draft}) ist noch nicht veröffentlicht.",
|
|
1478
1488
|
"documentDesigner.status.active": "Aktiv",
|
|
1479
1489
|
"documentDesigner.status.draft": "Entwurf",
|
|
1480
1490
|
"documentDesigner.status.archived": "Archiviert",
|
|
@@ -1595,13 +1605,13 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1595
1605
|
"documentDesigner.mail.language.en": "Englisch",
|
|
1596
1606
|
"documentDesigner.mail.language.es": "Spanisch",
|
|
1597
1607
|
"documentDesigner.mail.origin.overrides": "Überschreibt die System-Vorlage v{version}.",
|
|
1598
|
-
"documentDesigner.mail.origin.tenantOnly": "Diese Vorlage gibt es nur für
|
|
1608
|
+
"documentDesigner.mail.origin.tenantOnly": "Diese Vorlage gibt es nur für deinen Mandanten.",
|
|
1599
1609
|
"documentDesigner.mail.origin.activeSince": "Aktiv seit {when}.",
|
|
1600
1610
|
"documentDesigner.mail.origin.notPublished": "Noch nicht veröffentlicht.",
|
|
1601
1611
|
"documentDesigner.mail.origin.archived": "Archiviert.",
|
|
1602
1612
|
"documentDesigner.mail.origin.reset": "Zurücksetzen",
|
|
1603
1613
|
"documentDesigner.mail.origin.system":
|
|
1604
|
-
"
|
|
1614
|
+
"Du siehst die System-Vorlage v{version}. Speichern legt eine Anpassung für deinen Mandanten an.",
|
|
1605
1615
|
"documentDesigner.mail.origin.platform":
|
|
1606
1616
|
"System-Vorlage v{version}. Speichern ändert sie für alle Mandanten ohne eigene Anpassung.",
|
|
1607
1617
|
"documentDesigner.mail.origin.missing": "Für {language} gibt es noch keine Fassung.",
|
|
@@ -1613,13 +1623,13 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1613
1623
|
"documentDesigner.mail.languageAdjective.en": "englische",
|
|
1614
1624
|
"documentDesigner.mail.languageAdjective.es": "spanische",
|
|
1615
1625
|
"documentDesigner.mail.origin.copyNote":
|
|
1616
|
-
"Beim Kopieren einer System-Fassung kommen Bilder und Anhänge nicht mit;
|
|
1626
|
+
"Beim Kopieren einer System-Fassung kommen Bilder und Anhänge nicht mit; lade sie danach neu hoch.",
|
|
1617
1627
|
"documentDesigner.mail.origin.createBlank": "Leer anlegen",
|
|
1618
1628
|
"documentDesigner.mail.origin.creating":
|
|
1619
|
-
"Neue Fassung für {language}.
|
|
1629
|
+
"Neue Fassung für {language}. Die Fassung wird erst mit Speichern angelegt.",
|
|
1620
1630
|
"documentDesigner.mail.reset.title": "Auf System-Vorlage zurücksetzen?",
|
|
1621
1631
|
"documentDesigner.mail.reset.description":
|
|
1622
|
-
"
|
|
1632
|
+
"Deine Anpassung dieser Vorlage wird in allen Sprachen entfernt. Danach gilt wieder die System-Vorlage.",
|
|
1623
1633
|
"documentDesigner.mail.reset.confirm": "Zurücksetzen",
|
|
1624
1634
|
"documentDesigner.mail.placeholder.title": "Platzhalter",
|
|
1625
1635
|
"documentDesigner.mail.placeholder.missing": "fehlt",
|
|
@@ -1665,6 +1675,9 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1665
1675
|
"documentDesigner.mail.props.senderDefault": "Standard-Absender des Mandanten",
|
|
1666
1676
|
"documentDesigner.mail.props.senderPlaceholder": "Name, den Empfänger sehen",
|
|
1667
1677
|
"documentDesigner.mail.props.senderHint": "Die Adresse kommt vom Mail-Versand der Plattform.",
|
|
1678
|
+
"documentDesigner.mail.props.senderHintTenant":
|
|
1679
|
+
"Die Adresse kommt aus dem E-Mail-Versand deines Mandanten.",
|
|
1680
|
+
"documentDesigner.mail.props.senderSettingsLink": "E-Mail-Versand öffnen",
|
|
1668
1681
|
"documentDesigner.mail.props.replyTo": "Antwort an",
|
|
1669
1682
|
"documentDesigner.mail.props.category": "Kategorie",
|
|
1670
1683
|
"documentDesigner.mail.props.transactional": "Transaktional",
|
|
@@ -1716,11 +1729,11 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1716
1729
|
"documentDesigner.mail.footer.ok": "Bereit zum Veröffentlichen.",
|
|
1717
1730
|
"documentDesigner.mail.footer.savedAt": "Zuletzt gespeichert {when}",
|
|
1718
1731
|
"documentDesigner.mail.discard.title": "Änderungen verwerfen?",
|
|
1719
|
-
"documentDesigner.mail.discard.description": "
|
|
1732
|
+
"documentDesigner.mail.discard.description": "Deine ungespeicherten Änderungen gehen verloren.",
|
|
1720
1733
|
"documentDesigner.mail.discard.confirm": "Verwerfen",
|
|
1721
1734
|
"documentDesigner.mail.leave.title": "Ungespeicherte Änderungen",
|
|
1722
1735
|
"documentDesigner.mail.leave.description":
|
|
1723
|
-
"
|
|
1736
|
+
"Speichere deine Änderungen als Entwurf, verwirf sie oder bleib auf dieser Seite.",
|
|
1724
1737
|
"documentDesigner.mail.leave.save": "Als Entwurf speichern",
|
|
1725
1738
|
"documentDesigner.mail.leave.discard": "Verwerfen",
|
|
1726
1739
|
"documentDesigner.mail.preview.bar":
|
|
@@ -1748,15 +1761,15 @@ export const localeDeBundle: Readonly<Record<string, string>> = {
|
|
|
1748
1761
|
"Das hat der Server beim Rendern dieser Mail gefunden.",
|
|
1749
1762
|
"documentDesigner.mail.testMail.title": "Test-Mail",
|
|
1750
1763
|
"documentDesigner.mail.testMail.recipient": "Empfänger",
|
|
1751
|
-
"documentDesigner.mail.testMail.ownAddress": "
|
|
1764
|
+
"documentDesigner.mail.testMail.ownAddress": "Deine Adresse",
|
|
1752
1765
|
"documentDesigner.mail.testMail.changeAddress": "Adresse ändern",
|
|
1753
1766
|
"documentDesigner.mail.testMail.prefixSubject": "Betreff mit Präfix [TEST]",
|
|
1754
1767
|
"documentDesigner.mail.testMail.attachments": "Anhang mitsenden",
|
|
1755
1768
|
"documentDesigner.mail.testMail.noAttachments": "Diese Vorlage hat keine Anhänge",
|
|
1756
1769
|
"documentDesigner.mail.testMail.send": "Test-Mail senden",
|
|
1757
1770
|
"documentDesigner.mail.testMail.hint":
|
|
1758
|
-
"Versand über den normalen Zustellweg des Mandanten an
|
|
1759
|
-
"documentDesigner.mail.testMail.sent": "Test-Mail an
|
|
1771
|
+
"Versand über den normalen Zustellweg des Mandanten an deine eigene Adresse.",
|
|
1772
|
+
"documentDesigner.mail.testMail.sent": "Test-Mail an deine Adresse gesendet: {subject}",
|
|
1760
1773
|
"documentDesigner.mail.testMail.rateLimited":
|
|
1761
1774
|
"Zu viele Test-Mails, bitte später erneut versuchen.",
|
|
1762
1775
|
"screen:mail-foundation-tenant.title": "E-Mail-Versand",
|