diff --git a/package-lock.json b/package-lock.json index c63b9e1..c82b651 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.22", + "version": "0.1.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govoplan/mail-webui", - "version": "0.1.22", + "version": "0.1.23", "peerDependencies": { "@govoplan/core-webui": "^0.1.18", "lucide-react": "^1.23.0", diff --git a/package.json b/package.json index 2251969..478f7f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.22", + "version": "0.1.23", "private": true, "type": "module", "main": "webui/src/index.ts", diff --git a/pyproject.toml b/pyproject.toml index 074e81e..ad89ea3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-mail" -version = "0.1.22" +version = "0.1.23" description = "GovOPlaN mail module with backend and WebUI integration." readme = "README.md" requires-python = ">=3.12" diff --git a/src/govoplan_mail/backend/german_structured_documentation.py b/src/govoplan_mail/backend/german_structured_documentation.py new file mode 100644 index 0000000..3bf50bf --- /dev/null +++ b/src/govoplan_mail/backend/german_structured_documentation.py @@ -0,0 +1,214 @@ +"""German translations for public structured documentation metadata.""" + +from __future__ import annotations + +from typing import Any + + +GERMAN_STRUCTURED_TRANSLATIONS: dict[str, dict[str, Any]] = {'mail.bounce-processing': {'verification': 'Senden Sie eine Nachricht mit einer eindeutigen ' + 'Message-ID, nehmen Sie zweimal einen DSN auf und ' + 'überprüfen Sie eine korrelierte Beobachtung, während ' + 'die SMTP-Akzeptanz intakt bleibt.'}, + 'mail.privacy.data-subject-requests': {'limitations': ['Verschlüsselte ausgehende Nutzlasten ' + 'können vom Empfänger nicht ohne eine ' + 'unabhängig bestätigte ' + 'Mail-Befehlsreferenz durchsucht werden.', + 'Die externe Mailbox-Löschung befindet ' + 'sich außerhalb des DSAR-Anbieters und ' + 'muss mit dem konfigurierten Anbieter ' + 'koordiniert werden.'], + 'steps': ['Führen Sie die Mail-Provider-Suche und ' + 'Überprüfung von Mailbox-Index, POP3-Import, ' + 'Profil, Lieferung, Abgleich und ' + 'Bounce-Dispositionen aus.', + 'Bewahren Sie den unveränderlichen ' + 'Transportnachweis mit seinem Grund auf.', + 'Koordinieren Sie die genehmigte ' + 'Mailbox-Inhaltelöschung mit der autoritativen ' + 'externen Mailbox und aktualisieren Sie dann den ' + 'abgeleiteten Index.', + 'Verwenden Sie ' + 'E-Mail-Profillebenszykluskontrollen für ' + 'genehmigte Änderungen des persönlichen Profils; ' + 'Bearbeiten Sie nicht direkt verschlüsselte ' + 'Nutzlast- oder Beweiszeilen.']}, + 'mail.profile-standard-folder-mappings': {'steps': ['Öffnen Sie einen editierbaren IMAP-Server in ' + 'einem wiederverwendbaren Mail-Profil.', + 'Wählen Sie Ordner erkennen, um die vom ' + 'Anbieter sichtbaren Ordnernamen zu laden, ' + 'oder geben Sie genaue Namen manuell ein.', + 'Wenden Sie die erkannten Zuordnungen an, ' + 'überprüfen Sie jede Rolle und lassen Sie ' + 'unsichere Rollen für automatisches Verhalten ' + 'leer.', + 'Speichern Sie das Profil und laden Sie es ' + 'neu, um zu überprüfen, ob die Zuordnungen ' + 'beibehalten wurden.'], + 'verification': 'Bestätigen Sie, dass ältere ' + 'Sent-only-Profile das gleiche ' + 'effektive Sent-Mapping zeigen, und ' + 'bestätigen Sie, dass ein ' + 'kampagnenlokaler Sent-Override ' + 'unverändert bleibt.'}, + 'mail.reference.campaign-delivery-contract': {'verification': 'Nachweisen Sie, dass veraltete ' + 'Revisionen vor der Entschlüsselung ' + 'fehlschlagen, der Batch-Preflight ' + 'vor DATA fehlschlägt, zwei ' + 'Nachrichten eine gesunde ' + 'Verbindung wiederverwenden, eine ' + 'veraltete Verbindung vor der ' + 'nächsten Nachricht wieder ' + 'verbunden wird, die Trennung nach ' + 'der DATA nie wiedergegeben wird, ' + 'systemische Ausfälle verbleibende ' + 'Jobs anhalten, Anbieterdetails ' + 'werden gelöscht und das Interface ' + '/ Versionsgate wird übergeben.'}, + 'mail.reference.credentials-egress-retirement': {'verification': 'Testen Sie DNS-Rebinding und ' + 'verweigerte Adressen, beweisen ' + 'Sie, dass der verbundene Peer ' + 'angeheftet ist, injizieren Sie ' + 'Credential-Scrub- und ' + 'Auditfehler, wiederholen Sie ' + 'die Löschung für Idempotenz und ' + 'führen Sie den ' + 'Ruhestands-Preflight gegen ' + 'einen Snapshot aus.'}, + 'mail.workflow.choose-and-test-profile': {'outcome': 'Die verbrauchende Aufgabe verweist auf ein ' + 'verfügbares Mail-eigenes Profil und enthält ' + 'keine kopierte Transportkonfiguration oder ' + 'Anmeldeinformationen.', + 'prerequisites': ['Mail ist installiert und Sie können ' + 'Profile lesen, verwenden und testen, ' + 'die im aktuellen Kontext sichtbar ' + 'sind.', + 'Ein Profiladministrator hat ' + 'Anmeldeinformationen und effektive ' + 'Richtlinien konfiguriert.'], + 'steps': ['Öffnen Sie Mail-Profile und wählen Sie ein ' + 'sichtbares aktives Profil.', + 'Überprüfen Sie den Sicherheitsumfang, die ' + 'Verfügbarkeit von SMTP/IMAP/JMAP und die ' + 'Absenderidentität, ohne Anmeldewerte zu ' + 'erwarten.', + 'Führen Sie den entsprechenden SMTP-, IMAP- ' + 'oder ' + 'JMAP-Konnektivitäts-/Authentifizierungstest ' + 'zuerst gegen ein Nicht-Produktionsziel aus.', + 'Kehren Sie zur verbrauchenden Aufgabe zurück ' + 'und wählen Sie dasselbe Profil über den ' + 'Picker aus.'], + 'verification': 'Laden Sie beide Oberflächen neu, ' + 'bestätigen Sie, dass nur die stabile ' + 'Referenz vom Verbraucher beibehalten ' + 'wird, und führen Sie die eigene ' + 'kontextbezogene Richtlinienvalidierung ' + 'des Verbrauchers durch.'}, + 'mail.workflow.legacy-pop3-import': {'fields': [{'label': 'Verkehrssicherheit', + 'user_description': 'Verwenden Sie TLS oder ' + 'STARTTLS; unverschlüsselter ' + 'Transport unterliegt ' + 'weiterhin der ' + 'Deployment-Egress-Richtlinie ' + 'und ist nicht der sichere ' + 'Standard.'}, + {'label': 'Grenzwerte für Nachrichten und Chargen', + 'user_description': 'Bound sowohl jede ' + 'heruntergeladene Nachricht ' + 'als auch die gesamte ' + 'importierte Charge, bevor ' + 'der Anbieterinhalt in den ' + 'lokalen verschlüsselten ' + 'Speicher gelangt.'}, + {'label': 'Ausdrücklich Legacy Import ermöglichen', + 'user_description': 'Hält die Quelle inaktiv, ' + 'bis die Endpunktmetadaten ' + 'und ihre verschlüsselten ' + 'Anmeldeinformationen beide ' + 'gespeichert wurden.'}, + {'label': 'Anträge auf Löschung nach Einfuhr', + 'user_description': 'Erlaubt, aber wählt niemals ' + 'die separat autorisierte ' + 'destruktive Anforderung ' + 'aus; jede Charge benötigt ' + 'noch eine explizite ' + 'Bestätigung.'}], + 'limitations': ['Ein POP3-Server muss stabile ' + 'UIDL-Identifikatoren bereitstellen; ' + 'ansonsten ist eine sichere doppelte ' + 'Verhinderung nicht verfügbar und der Import ' + 'wird abgelehnt.', + 'POP3 hat keine Ordner- oder Flag-Semantik ' + 'und ist nicht das empfohlene Protokoll für ' + 'den laufenden Mailbox-Zugriff.', + 'Die Quelllöschung kann nicht zurückgesetzt ' + 'werden und hat möglicherweise ein ' + 'unbekanntes Ergebnis, wenn die Verbindung ' + 'fehlschlägt, während QUIT Löschungen ' + 'festlegt.'], + 'operational_consequences': ['Durch das Ändern von Host-, ' + 'Port-, Sicherheits-, ' + 'Kontoidentitäts- oder ' + 'Importlimits wird die ' + 'Transportrevision geändert und ' + 'veraltete Previews ungültig ' + 'gemacht.', + 'Durch das Ermöglichen des ' + 'Löschens von Quellen entsteht ' + 'eine irreversible Grenze für ' + 'externe Effekte; unbekannte ' + 'QUIT-Ergebnisse erfordern eine ' + 'Versöhnung statt eines blinden ' + 'Wiederholens.', + 'Die Deaktivierung von ' + 'Legacy-Importen führt zu ' + 'regulierten lokalen Importen ' + 'und deren Nachweisen, die zur ' + 'Überprüfung zur Verfügung ' + 'stehen, während der Zugang ' + 'neuer Anbieter verhindert ' + 'wird.'], + 'steps': ['Bitten Sie einen Mail-Administrator, eine ' + 'dedizierte POP3-Altquelle zu konfigurieren und ' + 'explizit zu aktivieren.', + 'Testen Sie die Quelle und aktualisieren Sie eine ' + 'begrenzte Vorschau; Es werden keine ' + 'Nachrichtenflags oder Löschstatus geändert.', + 'Wählen Sie Nachrichten aus und importieren Sie ' + 'sie in verschlüsselte Pending-Review-Datensätze.', + 'Verwenden Sie delete-after-import nur, wenn ' + 'Richtlinien und eine separate destruktive ' + 'Berechtigung dies zulassen, und versöhnen Sie ' + 'dann fehlgeschlagene oder unbekannte Ergebnisse.'], + 'verification': 'Nachweisen Sie deaktivierte Richtlinien, ' + 'TLS- und Authentifizierungsdiagnostik, ' + 'zerstörungsfreie Vorschau / Import, ' + 'UIDL-Duplikate-Verhinderung, verschlüsselte ' + 'Rohdatenspeicherung, separate ' + 'Löschberechtigung, ' + 'Import-Vor-Löschen-Auditbestellung und ' + 'fehlgeschlagene oder ergebnisunbekannte ' + 'Löschnachweise.'}, + 'mail.workflow.read-mailbox': {'outcome': 'Die erforderliche Nachricht wurde inspiziert, ohne den ' + 'Status der Provider-Mailbox zu ändern.', + 'prerequisites': ['Ein aktives sichtbares Profil hat IMAP oder ' + 'JMAP konfiguriert.', + 'Sie können beide dieses profil verwenden und ' + 'seine mailbox lesen.'], + 'steps': ['Öffnen Sie Mail und wählen Sie ein autorisiertes IMAP- ' + 'oder JMAP-fähiges Profil.', + 'Wählen Sie einen Ordner aus, überprüfen Sie das ' + 'Live/Cache-Synchronisationslabel und stellen Sie den ' + 'begrenzten Nachrichtenindex auf die Seite; JMAP-Suchen ' + 'werden beim Anbieter ausgeführt.', + 'Verwenden Sie den vom Anbieter abgeleiteten ' + 'Read/Unread-Indikator und öffnen Sie dann nur die für ' + 'die Aufgabe benötigte Nachricht.', + 'Wechseln Sie bei Bedarf zwischen sicheren Klartext- und ' + 'isolierten HTML-Ansichten und überprüfen Sie die ' + 'Anhang- oder Nichtverfügbarkeitsangaben, bevor Sie die ' + 'Vorschau schließen.'], + 'verification': 'Aktualisieren Sie das Provider-Postfach ' + 'unabhängig und bestätigen Sie, dass keine Lese-, ' + 'Verschiebe-, Lösch-, Antwort- oder Flag-Mutation ' + 'durch GovOPlaN verursacht wurde.'}} diff --git a/src/govoplan_mail/backend/manifest.py b/src/govoplan_mail/backend/manifest.py index 7db87d0..225adb6 100644 --- a/src/govoplan_mail/backend/manifest.py +++ b/src/govoplan_mail/backend/manifest.py @@ -1,5 +1,8 @@ from __future__ import annotations +from govoplan_core.core.modules import with_documentation_structured_translations +from govoplan_mail.backend.german_structured_documentation import GERMAN_STRUCTURED_TRANSLATIONS + from dataclasses import replace from pathlib import Path @@ -442,7 +445,7 @@ POP3_PROVIDER = ExternalProviderDeclaration( manifest = ModuleManifest( id="mail", name="Mail", - version="0.1.22", + version="0.1.23", required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR), optional_dependencies=("campaigns", "addresses", "calendar", "postbox", "search"), provides_interfaces=( @@ -1484,5 +1487,10 @@ manifest = ModuleManifest( ) +manifest = with_documentation_structured_translations( + manifest, locale="de", translations=GERMAN_STRUCTURED_TRANSLATIONS +) + + def get_manifest() -> ModuleManifest: return manifest diff --git a/webui/package-lock.json b/webui/package-lock.json index 61ba15b..c97c9e1 100644 --- a/webui/package-lock.json +++ b/webui/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.22", + "version": "0.1.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govoplan/mail-webui", - "version": "0.1.22", + "version": "0.1.23", "devDependencies": { "typescript": "^5.7.2" }, diff --git a/webui/package.json b/webui/package.json index 22c5d08..0b67f8a 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.22", + "version": "0.1.23", "private": true, "type": "module", "main": "src/index.ts",