From 5265b8f3e20af806a2df58188300dd6d65854f9c Mon Sep 17 00:00:00 2001 From: Md Bayazid Bostame Date: Tue, 24 Mar 2026 13:06:39 +0100 Subject: [PATCH] snapshot: preserve admin i18n and language stability hardening --- README.md | 3 + backend/locale/en/LC_MESSAGES/django.mo | Bin 9713 -> 19598 bytes backend/locale/en/LC_MESSAGES/django.po | 1511 +++++++++++++---- backend/workflows/forms.py | 2 + ...dingrequest_preferred_language_and_more.py | 23 + backend/workflows/models.py | 17 +- .../workflows/developer_handbook.html | 4 +- .../templates/workflows/form_builder.html | 72 +- .../templates/workflows/handbook.html | 40 +- .../workflows/integrations_setup.html | 108 +- .../templates/workflows/intro_builder.html | 54 +- .../templates/workflows/project_wiki.html | 3 +- .../templates/workflows/welcome_emails.html | 76 +- 13 files changed, 1366 insertions(+), 547 deletions(-) create mode 100644 backend/workflows/migrations/0031_alter_offboardingrequest_preferred_language_and_more.py diff --git a/README.md b/README.md index d1ae335..a8e1cfe 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,9 @@ Notes: - notification rule custom subjects and bodies in DE/EN - welcome email subject and body in DE/EN - request language capture on onboarding/offboarding to choose the correct email language +- Language stability hardening is in place: + - onboarding/offboarding request records normalize `preferred_language` at model-save time + - both request tables now have a database default of `de` - Several generated PDF business text blocks are still not fully bilingual yet. - CI now validates that translation catalogs compile successfully on push and pull request. diff --git a/backend/locale/en/LC_MESSAGES/django.mo b/backend/locale/en/LC_MESSAGES/django.mo index 031e539dbe7f39324e3d101e43a936dd89b402d4..9ce53b44289698957e96b7fb42d97eaf7afd1ef8 100644 GIT binary patch literal 19598 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 delta 2918 zcmZY932YQq9LMpuu~=@T7TQ9g)BB=Z=wS;jl+tYlN`%rX1Vo(fj_uOzjPA}-HPJ;y zOpGDulZYZkiLq+bsB6%OVnQQ`x5fb8cqArDG#-f&G4cEF4j!?Y&gZ>1Gw=A#o85W8 z@2Aeh=NW0c6@T0L&*i^4O=|!AT{&K<2CAE|1b3s{_cEsAN64YR22S?O!zQH?s)j-%7i_#3N4y&jABj#HRG#iDNLpzgOd!HhoxACt8op=3Le6#ID)eBgGk@%FqY$S ztj1r^z``l16$h|}`Z|;a-ift1jN=(!eL$fDKfy9AU=;dLotTg7aW3A7+@kJB4mH9_ z?mLJw@lllPZ=t-RkI|36VIh`GOSuwhQZ^=LQn-nNbZ{?b;y!G}=TMUP75gxkoC!;9 zM;Txj$^@RmL43(;FC%A3rX6LVHJFE+aRw$(#@Ric{H4PuXpm?QVhG>x>ecL+In>)w zIy5mGBgmm{=M=;}Ui}=-raq0%tx)_|=j6TAWC9p8a6zyqEKa31w1P<|&)VjX^p((iPB zBnVv)T^9i z0-t$)kFqCzN16BqY#4cNGRpo_ITWNrKeAZWh4OPQGuik?4&ex+197gHyU1U3`uksVAhI2HG&4?JrCWI1EJxXNDkS|Pi zq9kA<`%?9z+zG@BqpJMo^x62IbWq_1Y6BD5TNw1Gxyl$AY-a(@!X;fp8}IgB#UYo70*?5&e1_n$#kTo!cVwp$)ETH~=Hvp-U% z_s-ZdYeAjSWA<69wRg~pge;pvEZ853$71^CnRE4lnY}tQ>q)&Xd+`J#GJ23}maXUK z^yn9IF4cQymFP*cbM(&HF`b!fHg7TQKF4Sc4TfzMa0cRomhJvsFx{|Y&of%1!Tzvo z4Y={B5w}Ce+PK~8I0JrtCU-D--<&L8dNk%*k%+5r%Uh|djk1YObkJB94>LP`+~}IR z+>C~X%&1khD$I>KmS3#j$S>5r1()e#1x4B}tkzE!hLXiaWj=j<@rLA%lE-}0ueG9M zOYbT7>krGTbY_L2n=9tz47kR+@IY9tbs`aKk?JOdur<1$)fQFOBtNW7 z`1BoBSERX7vrqT>yLF)YxSl`1D90Rd!&{XZkM&tYqmT4QToty*+VtrK9TV29?x|{v zTBfVpYYe@(=Il%Y51BW_)GDXXaN@4&2;1RUzaFlgt4C|sYNKwiuBorTC}2e_*D_)d zl;HFa^#Oh5C5v>ZVWCcM+^FM?-7SIt1|B>gc&gw9Zl(ec61X+bFo`^RKJvzeSL^o| zo=YE_p%u~xnmY8N=AwTm{&w@~Dd!V6A|$ROi}Up>i?em}k|w=#NwIEfDb?|o70F{Q zQ+@iUrE8L>Tle`gR{uZoHv^^m&p?%KXwTD|+e;^rG(opToS3C^JF1dLI$}QEzr1HW zuZWm~u5Mis(C1bp^}8#xYpI8~S}GNY6_S)wEtbE}Z)|b;ZGXtImb&p?f6!43Z>zrm D_ruuW diff --git a/backend/locale/en/LC_MESSAGES/django.po b/backend/locale/en/LC_MESSAGES/django.po index 684bf9c..caddfd8 100644 --- a/backend/locale/en/LC_MESSAGES/django.po +++ b/backend/locale/en/LC_MESSAGES/django.po @@ -1,403 +1,1178 @@ msgid "" msgstr "" "Project-Id-Version: tubco-portal\n" -"POT-Creation-Date: 2026-03-24 00:00+0000\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-03-24 11:49+0000\n" "PO-Revision-Date: 2026-03-24 00:00+0000\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "%(count)s Auswahl(en) konnten nicht verarbeitet werden." -msgstr "%(count)s selection(s) could not be processed." - -msgid "%(count)s Eintrag/Einträge gelöscht." -msgstr "%(count)s entry/entries deleted." - -msgid "%(count)s Einträge sichtbar" -msgstr "%(count)s entries visible" - -msgid "14 Tage" -msgstr "14 days" - -msgid "Abmelden" -msgstr "Log out" - -msgid "Abschluss" -msgstr "Finish" - -msgid "Admin" -msgstr "Admin" - -msgid "Admin Apps" -msgstr "Admin Apps" - -msgid "Aktion" -msgstr "Action" - -msgid "Aktivität 14 Tage" -msgstr "Activity 14 Days" - -msgid "Aktivitätsverlauf" -msgstr "Activity Timeline" - -msgid "Alle Vorgänge, durchsuchbar und mit Dokumenten verknüpft." -msgstr "All requests, searchable and linked with documents." - -msgid "Alle erfassten Onboarding-Vorgänge im aktuellen System." -msgstr "All onboarding requests captured in the current system." - -msgid "Anfrage gespeichert" -msgstr "Request saved" - -msgid "Anfragen Dashboard" -msgstr "Requests Dashboard" - -msgid "Anmelden" -msgstr "Sign in" - +#: workflows/templates/registration/login.html:7 +#: workflows/templates/registration/login.html:28 msgid "Anmeldung" msgstr "Sign in" -msgid "Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen." -msgstr "Login failed. Please check your credentials." - -msgid "Apps" -msgstr "Apps" - -msgid "Austritte und Rückgaben in derselben Prozessübersicht." -msgstr "Departures and returns in the same process overview." - -msgid "Auswahl löschen" -msgstr "Delete selection" - -msgid "Beschäftigung und Termine" -msgstr "Employment and dates" - +#: workflows/templates/registration/login.html:29 msgid "Bitte melden Sie sich mit Ihrem Benutzerkonto an." msgstr "Please sign in with your user account." -msgid "Bitte prüfen Sie die markierten Felder. Ungültige Eingaben wurden erkannt." -msgstr "Please check the highlighted fields. Invalid input was detected." +#: workflows/templates/registration/login.html:34 +msgid "Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen." +msgstr "Login failed. Please check your credentials." -msgid "Checklistenpunkte für das Einweisungsprotokoll konfigurieren." -msgstr "Configure checklist items for the introduction protocol." - -msgid "Dashboard öffnen" -msgstr "Open dashboard" - -msgid "Datensätze können direkt in der Tabelle gefiltert, geöffnet, geprüft oder gelöscht werden." -msgstr "Records can be filtered, opened, checked, or deleted directly in the table." - -msgid "Die letzten 14 Tage in einer kompakten Ansicht über alle Onboarding- und Offboarding-Vorgänge." -msgstr "The last 14 days in a compact view across all onboarding and offboarding requests." - -msgid "Django Admin" -msgstr "Django Admin" - -msgid "Dokument" -msgstr "Document" - -msgid "Dokumentation, Architektur und Runbook." -msgstr "Documentation, architecture, and runbook." - -msgid "Dokumente, Status und Einweisungsaktionen in einer verdichteten Arbeitsansicht." -msgstr "Documents, status, and introduction actions in a condensed work view." - -msgid "E-Mail" -msgstr "Email" - -msgid "E-Mail Routing" -msgstr "Email routing" - -msgid "E-Mail:" -msgstr "Email:" - -msgid "Einweisung" -msgstr "Introduction" - -msgid "Einweisung wurde als Entwurf gespeichert." -msgstr "Introduction was saved as draft." - -msgid "Einweisung wurde als abgeschlossen gespeichert." -msgstr "Introduction was saved as completed." - -msgid "Einweisung wurde zurückgesetzt." -msgstr "Introduction was reset." - -msgid "Einweisung öffnen" -msgstr "Open introduction" - -msgid "Einweisungs- und Übergabeprotokoll wurde erzeugt." -msgstr "Introduction and handover protocol was generated." - -msgid "Einweisungs-Builder" -msgstr "Introduction Builder" - -msgid "Einweisungsprotokoll aus Live-Status wurde erzeugt." -msgstr "Introduction protocol from live status was generated." - -msgid "Erstellt" -msgstr "Created" - -msgid "Fast geschafft. Bitte Abschlussdaten prüfen und die Anfrage absenden." -msgstr "Almost done. Please review the final details and submit the request." - -msgid "Felder, Schritte und Optionen verwalten." -msgstr "Manage fields, steps, and options." +#: workflows/templates/registration/login.html:38 +msgid "Anmelden" +msgstr "Sign in" +#: workflows/templates/workflows/form_builder.html:7 +#: workflows/templates/workflows/form_builder.html:19 +#: workflows/templates/workflows/home.html:553 msgid "Form Builder" msgstr "Form Builder" -msgid "Geplante Welcome Mails verwalten." -msgstr "Manage scheduled welcome emails." - -msgid "Geräte, Software und Zugänge" -msgstr "Devices, software, and access" - -msgid "Gesamtbestand" -msgstr "Total records" - -msgid "Hardware-Liste" -msgstr "Hardware list" - -msgid "IT-Rückgabe" -msgstr "IT return" - -msgid "IT-Setup" -msgstr "IT setup" - -msgid "Integrationen" -msgstr "Integrations" - -msgid "Keine Einträge ausgewählt." -msgstr "No entries selected." - -msgid "Keine konfigurierten Felder in diesem Schritt." -msgstr "No configured fields in this step." - -msgid "Keine passenden Einträge gefunden." -msgstr "No matching entries found." - -msgid "Konfiguration, Tests und Steuerung." -msgstr "Configuration, tests, and controls." - -msgid "Live-Protokoll" -msgstr "Live protocol" - -msgid "Live-Protokoll öffnen" -msgstr "Open live protocol" - -msgid "Löschen" -msgstr "Delete" - -msgid "Mehrschritt-Formular" -msgstr "Multi-step form" - -msgid "Mehrseitiges Formular mit konfigurierbaren Feldern aus dem Admin." -msgstr "Multi-page form with configurable fields from the admin." - -msgid "Mitarbeitende suchen (Name oder E-Mail)" -msgstr "Search employees (name or email)" - -msgid "Mitarbeitende suchen, Daten vorbefüllen, Offboarding-Dokumente erzeugen und Rückgabe-Prozess starten." -msgstr "Search employees, prefill data, generate offboarding documents, and start the return process." - -msgid "Mitarbeiter" -msgstr "Staff" - -msgid "Nach Name oder E-Mail suchen" -msgstr "Search by name or email" - -msgid "Neu erzeugen" -msgstr "Regenerate" - -msgid "Neue Mitarbeitende erfassen, PDF mit Briefkopf erstellen, Benachrichtigungen senden und in Nextcloud ablegen." -msgstr "Capture new employees, generate a PDF with letterhead, send notifications, and store it in Nextcloud." - -msgid "Nextcloud- und E-Mail-Setup." -msgstr "Nextcloud and email setup." - -msgid "Nextcloud:" -msgstr "Nextcloud:" - -msgid "Nicht relevant" -msgstr "Not relevant" - -msgid "Noch keine Vorgänge vorhanden." -msgstr "No requests available yet." - -msgid "Noch nicht verfügbar" -msgstr "Not available yet" - -msgid "Notizen und Freigabe" -msgstr "Notes and approval" - -msgid "Offboarding" -msgstr "Offboarding" - -msgid "Offboarding starten" -msgstr "Start offboarding" - -msgid "Offboarding wurde erfolgreich gespeichert (ID: %(request_id)s). Das PDF wird im Hintergrund erzeugt." -msgstr "Offboarding was saved successfully (ID: %(request_id)s). The PDF is being generated in the background." - -msgid "Offboarding-Anfrage" -msgstr "Offboarding request" - -msgid "Offboarding-Anfrage speichern" -msgstr "Save offboarding request" - -msgid "Onboarding" -msgstr "Onboarding" - -msgid "Onboarding + Offboarding" -msgstr "Onboarding + Offboarding" - -msgid "Onboarding starten" -msgstr "Start onboarding" - -msgid "Onboarding wurde erfolgreich gespeichert (ID: %(request_id)s). Das PDF wird im Hintergrund erzeugt." -msgstr "Onboarding was saved successfully (ID: %(request_id)s). The PDF is being generated in the background." - -msgid "Onboarding-Anfrage" -msgstr "Onboarding request" - -msgid "Onboarding-Anfrage absenden" -msgstr "Submit onboarding request" - -msgid "Operations Console" -msgstr "Operations Console" - -msgid "PDF + E-Mail Workflow bereit" -msgstr "PDF + Email Workflow Ready" - -msgid "PDF Zugriff" -msgstr "PDF access" - -msgid "PDF erzeugen" -msgstr "Generate PDF" - -msgid "PDF öffnen" -msgstr "Open PDF" - -msgid "PDFs + Live-Protokolle" -msgstr "PDFs + live protocols" - -msgid "Person" -msgstr "Person" - -msgid "Person, Rolle, Abteilung" -msgstr "Person, role, department" - -msgid "Produktion" -msgstr "Production" - -msgid "Profile-Suche" -msgstr "Profile search" - -msgid "Projekt Wiki" -msgstr "Project Wiki" - -msgid "Rolle:" -msgstr "Role:" - -msgid "Schließen" -msgstr "Close" - -msgid "Sie haben keine Berechtigung für diese Aktion." -msgstr "You do not have permission for this action." - -msgid "Stammdaten" -msgstr "Master data" - -msgid "Standard-Einweisungs-PDF" -msgstr "Standard introduction PDF" - -msgid "Standard-PDF öffnen" -msgstr "Open standard PDF" - -msgid "Status" -msgstr "Status" - -msgid "Status, Suchfunktion, PDF-Links und Verlauf aller Onboarding-/Offboarding-Anfragen." -msgstr "Status, search, PDF links, and history of all onboarding/offboarding requests." - -msgid "Status:" -msgstr "Status:" - -msgid "Steuert Onboarding- und Offboarding-Prozesse an einem Ort. Die Oberfläche priorisiert Kennzahlen, Aktivität und direkte Aktionen in der Vorgangsliste." -msgstr "Controls onboarding and offboarding processes in one place. The interface prioritizes metrics, activity, and direct actions in the request list." - -msgid "Suche" -msgstr "Search" - -msgid "Suche + Bulk-Aktionen" -msgstr "Search + bulk actions" - -msgid "Suchen" -msgstr "Search" - -msgid "TUBCO Onboarding & Offboarding Portal" -msgstr "TUBCO Onboarding & Offboarding Portal" - -msgid "Testmodus" -msgstr "Test mode" - -msgid "Tipp: Die letzten Vorgänge sehen Sie jederzeit im Anfragen Dashboard." -msgstr "Tip: You can always see the latest requests in the Requests Dashboard." - -msgid "Typ" -msgstr "Type" - -msgid "Vertrag" -msgstr "Contract" - -msgid "Vollständige Datenverwaltung." -msgstr "Full data management." - -msgid "Vorbefüllt aus:" -msgstr "Prefilled from:" - -msgid "Vorgänge" -msgstr "Requests" - -msgid "Weiter" -msgstr "Next" - -msgid "Welcome E-Mails" -msgstr "Welcome Emails" - -msgid "Wählen Sie den gewünschten Prozess." -msgstr "Choose the desired process." - -msgid "Zeitraum des visuellen Aktivitätsverlaufs in dieser Übersicht." -msgstr "Time span of the visual activity timeline in this overview." - -msgid "Zentrale Arbeitsfläche für Anfragen, PDF-Generierung, E-Mail-Workflows und Ablage in Nextcloud." -msgstr "Central workspace for requests, PDF generation, email workflows, and storage in Nextcloud." - +#: workflows/templates/workflows/form_builder.html:15 +#: workflows/templates/workflows/integrations_setup.html:77 +#: workflows/templates/workflows/intro_builder.html:39 +#: workflows/templates/workflows/offboarding_form.html:30 +#: workflows/templates/workflows/onboarding_form.html:30 +#: workflows/templates/workflows/requests_dashboard.html:889 +#: workflows/templates/workflows/requests_dashboard.html:1119 +#: workflows/templates/workflows/welcome_emails.html:48 msgid "Zur Startseite" msgstr "Back to home" -msgid "Zurück" -msgstr "Back" +#: workflows/templates/workflows/form_builder.html:20 +msgid "Felder per Drag-and-Drop sortieren und pro Schritt gruppieren." +msgstr "Sort fields by drag and drop and group them by step." -msgid "Zurücksetzen" -msgstr "Reset" +#: workflows/templates/workflows/form_builder.html:38 +msgid "Reihenfolge speichern" +msgstr "Save order" +#: workflows/templates/workflows/form_builder.html:55 +msgid "Fix" +msgstr "Fixed" + +#: workflows/templates/workflows/form_builder.html:56 +msgid "Ausgeblendet" +msgstr "Hidden" + +#: workflows/templates/workflows/form_builder.html:57 +msgid "Pflicht" +msgstr "Required" + +#: workflows/templates/workflows/form_builder.html:68 +msgid "Optionen verwalten" +msgstr "Manage options" + +#: workflows/templates/workflows/form_builder.html:71 +msgid "Kategorie" +msgstr "Category" + +#: workflows/templates/workflows/form_builder.html:84 +#: workflows/templates/workflows/form_builder.html:97 +#: workflows/templates/workflows/form_builder.html:142 +msgid "Label (DE)" +msgstr "Label (DE)" + +#: workflows/templates/workflows/form_builder.html:85 +msgid "Label (EN, optional)" +msgstr "Label (EN, optional)" + +#: workflows/templates/workflows/form_builder.html:86 +msgid "Technischer Wert (optional)" +msgstr "Technical value (optional)" + +#: workflows/templates/workflows/form_builder.html:87 +msgid "Option hinzufügen" +msgstr "Add option" + +#: workflows/templates/workflows/form_builder.html:96 +#: workflows/templates/workflows/intro_builder.html:90 +msgid "Sortierung" +msgstr "Sort order" + +#: workflows/templates/workflows/form_builder.html:98 +#: workflows/templates/workflows/form_builder.html:143 +msgid "Label (EN)" +msgstr "Label (EN)" + +#: workflows/templates/workflows/form_builder.html:100 +#: workflows/templates/workflows/integrations_setup.html:290 +#: workflows/templates/workflows/intro_builder.html:97 +msgid "Aktiv" +msgstr "Active" + +#: workflows/templates/workflows/form_builder.html:101 +#: workflows/templates/workflows/form_builder.html:116 +#: workflows/templates/workflows/integrations_setup.html:292 +#: workflows/templates/workflows/intro_builder.html:98 +#: workflows/templates/workflows/intro_builder.html:134 +#: workflows/templates/workflows/requests_dashboard.html:1102 +#: workflows/templates/workflows/welcome_emails.html:110 +msgid "Löschen" +msgstr "Delete" + +#: workflows/templates/workflows/form_builder.html:109 +msgid "Ziehen zum Sortieren" +msgstr "Drag to reorder" + +#: workflows/templates/workflows/form_builder.html:116 +msgid "Option wirklich löschen?" +msgstr "Delete this option?" + +#: workflows/templates/workflows/form_builder.html:120 +msgid "Keine Optionen in dieser Kategorie." +msgstr "No options in this category." + +#: workflows/templates/workflows/form_builder.html:126 +msgid "Optionen speichern" +msgstr "Save options" + +#: workflows/templates/workflows/form_builder.html:133 +msgid "Feldtexte verwalten" +msgstr "Manage field text" + +#: workflows/templates/workflows/form_builder.html:141 +msgid "Feld" +msgstr "Field" + +#: workflows/templates/workflows/form_builder.html:144 +msgid "Hilfetext (DE)" +msgstr "Help text (DE)" + +#: workflows/templates/workflows/form_builder.html:145 +msgid "Hilfetext (EN)" +msgstr "Help text (EN)" + +#: workflows/templates/workflows/form_builder.html:155 +msgid "Fallback: Standardlabel" +msgstr "Fallback: default label" + +#: workflows/templates/workflows/form_builder.html:156 +msgid "English label" +msgstr "English label" + +#: workflows/templates/workflows/form_builder.html:157 +msgid "Optionaler Hilfetext" +msgstr "Optional help text" + +#: workflows/templates/workflows/form_builder.html:158 +msgid "Optional English help text" +msgstr "Optional English help text" + +#: workflows/templates/workflows/form_builder.html:161 +msgid "Keine Feldkonfigurationen verfügbar." +msgstr "No field configurations available." + +#: workflows/templates/workflows/form_builder.html:167 +msgid "Feldtexte speichern" +msgstr "Save field text" + +#: workflows/templates/workflows/handbook.html:7 +#: workflows/templates/workflows/handbook.html:31 +#: workflows/templates/workflows/home.html:563 +msgid "Handbook" +msgstr "Handbook" + +#: workflows/templates/workflows/handbook.html:32 +msgid "Back to Home" +msgstr "Back to home" + +#: workflows/templates/workflows/handbook.html:34 +msgid "" +"Single documentation entry point for both operational knowledge and long-" +"term engineering knowledge." +msgstr "" +"Single documentation entry point for both operational knowledge and long-" +"term engineering knowledge." + +#: workflows/templates/workflows/handbook.html:38 +msgid "Operations" +msgstr "Operations" + +#: workflows/templates/workflows/handbook.html:39 +msgid "Project Wiki" +msgstr "Project Wiki" + +#: workflows/templates/workflows/handbook.html:40 +msgid "" +"Operational and product-level documentation for onboarding, offboarding, " +"PDFs, integrations, admin tools, and system behavior." +msgstr "" +"Operational and product-level documentation for onboarding, offboarding, " +"PDFs, integrations, admin tools, and system behavior." + +#: workflows/templates/workflows/handbook.html:42 +msgid "workflow overview" +msgstr "workflow overview" + +#: workflows/templates/workflows/handbook.html:43 +msgid "admin tools and system behavior" +msgstr "admin tools and system behavior" + +#: workflows/templates/workflows/handbook.html:44 +msgid "integrations and operations" +msgstr "integrations and operations" + +#: workflows/templates/workflows/handbook.html:45 +msgid "runbook and troubleshooting" +msgstr "runbook and troubleshooting" + +#: workflows/templates/workflows/handbook.html:48 +msgid "Open Project Wiki" +msgstr "Open Project Wiki" + +#: workflows/templates/workflows/handbook.html:53 +msgid "Engineering" +msgstr "Engineering" + +#: workflows/templates/workflows/handbook.html:54 +msgid "Developer Handbook" +msgstr "Developer Handbook" + +#: workflows/templates/workflows/handbook.html:55 +msgid "" +"Engineering documentation for architecture, local setup, Docker, migrations, " +"translations, deployment, testing, and long-term maintenance." +msgstr "" +"Engineering documentation for architecture, local setup, Docker, migrations, " +"translations, deployment, testing, and long-term maintenance." + +#: workflows/templates/workflows/handbook.html:57 +msgid "repository and service structure" +msgstr "repository and service structure" + +#: workflows/templates/workflows/handbook.html:58 +msgid "Docker and migration workflow" +msgstr "Docker and migration workflow" + +#: workflows/templates/workflows/handbook.html:59 +msgid "translation and builder architecture" +msgstr "translation and builder architecture" + +#: workflows/templates/workflows/handbook.html:60 +msgid "deployment, security, and maintenance notes" +msgstr "deployment, security, and maintenance notes" + +#: workflows/templates/workflows/handbook.html:63 +msgid "Open Developer Handbook" +msgstr "Open Developer Handbook" + +#: workflows/templates/workflows/home.html:8 +#: workflows/templates/workflows/home.html:469 +#: workflows/templates/workflows/requests_dashboard.html:1118 +msgid "TUBCO Onboarding & Offboarding Portal" +msgstr "TUBCO Onboarding & Offboarding Portal" + +#: workflows/templates/workflows/home.html:460 +msgid "Abmelden" +msgstr "Log out" + +#: workflows/templates/workflows/home.html:468 +#: workflows/templates/workflows/requests_dashboard.html:897 +msgid "Operations Console" +msgstr "Operations Console" + +#: workflows/templates/workflows/home.html:470 +msgid "" +"Zentrale Arbeitsfläche für Anfragen, PDF-Generierung, E-Mail-Workflows und " +"Ablage in Nextcloud." +msgstr "" +"Central workspace for requests, PDF generation, email workflows, and storage " +"in Nextcloud." + +#: workflows/templates/workflows/home.html:472 +msgid "Rolle:" +msgstr "Role:" + +#: workflows/templates/workflows/home.html:472 +msgid "Admin" +msgstr "Admin" + +#: workflows/templates/workflows/home.html:472 +msgid "Mitarbeiter" +msgstr "Staff" + +#: workflows/templates/workflows/home.html:474 +msgid "Nextcloud:" +msgstr "Nextcloud:" + +#: workflows/templates/workflows/home.html:474 msgid "aktiv" msgstr "active" -msgid "ausgewählt" -msgstr "selected" - +#: workflows/templates/workflows/home.html:474 msgid "inaktiv" msgstr "inactive" -msgid "z. B. max.mustermann@tub.co" -msgstr "e.g. john.doe@tub.co" +#: workflows/templates/workflows/home.html:477 +msgid "E-Mail:" +msgstr "Email:" +#: workflows/templates/workflows/home.html:477 +msgid "Testmodus" +msgstr "Test mode" + +#: workflows/templates/workflows/home.html:477 +msgid "Produktion" +msgstr "Production" + +#: workflows/templates/workflows/home.html:479 +msgid "PDF + E-Mail Workflow bereit" +msgstr "PDF + Email Workflow Ready" + +#: workflows/templates/workflows/home.html:493 +msgid "Apps" +msgstr "Apps" + +#: workflows/templates/workflows/home.html:494 +msgid "Wählen Sie den gewünschten Prozess." +msgstr "Choose the desired process." + +#: workflows/templates/workflows/home.html:500 +#: workflows/templates/workflows/onboarding_form.html:36 +#: workflows/templates/workflows/requests_dashboard.html:933 +msgid "Onboarding" +msgstr "Onboarding" + +#: workflows/templates/workflows/home.html:501 +msgid "" +"Neue Mitarbeitende erfassen, PDF mit Briefkopf erstellen, Benachrichtigungen " +"senden und in Nextcloud ablegen." +msgstr "" +"Capture new employees, generate a PDF with letterhead, send notifications, " +"and store it in Nextcloud." + +#: workflows/templates/workflows/home.html:503 +msgid "Mehrschritt-Formular" +msgstr "Multi-step form" + +#: workflows/templates/workflows/home.html:505 +msgid "E-Mail Routing" +msgstr "Email routing" + +#: workflows/templates/workflows/home.html:509 +msgid "Onboarding starten" +msgstr "Start onboarding" + +#: workflows/templates/workflows/home.html:516 +#: workflows/templates/workflows/requests_dashboard.html:943 +msgid "Offboarding" +msgstr "Offboarding" + +#: workflows/templates/workflows/home.html:517 +msgid "" +"Mitarbeitende suchen, Daten vorbefüllen, Offboarding-Dokumente erzeugen und " +"Rückgabe-Prozess starten." +msgstr "" +"Search employees, prefill data, generate offboarding documents, and start " +"the return process." + +#: workflows/templates/workflows/home.html:519 +msgid "Profile-Suche" +msgstr "Profile search" + +#: workflows/templates/workflows/home.html:520 +msgid "Hardware-Liste" +msgstr "Hardware list" + +#: workflows/templates/workflows/home.html:521 +msgid "IT-Rückgabe" +msgstr "IT return" + +#: workflows/templates/workflows/home.html:525 +msgid "Offboarding starten" +msgstr "Start offboarding" + +#: workflows/templates/workflows/home.html:532 +#: workflows/templates/workflows/requests_dashboard.html:8 +#: workflows/templates/workflows/requests_dashboard.html:898 +msgid "Anfragen Dashboard" +msgstr "Requests Dashboard" + +#: workflows/templates/workflows/home.html:533 +msgid "" +"Status, Suchfunktion, PDF-Links und Verlauf aller Onboarding-/Offboarding-" +"Anfragen." +msgstr "" +"Status, search, PDF links, and history of all onboarding/offboarding " +"requests." + +#: workflows/templates/workflows/home.html:535 +msgid "Suche" +msgstr "Search" + +#: workflows/templates/workflows/home.html:536 +#: workflows/templates/workflows/welcome_emails.html:125 +msgid "Status" +msgstr "Status" + +#: workflows/templates/workflows/home.html:537 +msgid "PDF Zugriff" +msgstr "PDF access" + +#: workflows/templates/workflows/home.html:541 +msgid "Dashboard öffnen" +msgstr "Open dashboard" + +#: workflows/templates/workflows/home.html:548 +msgid "Admin Apps" +msgstr "Admin Apps" + +#: workflows/templates/workflows/home.html:549 +msgid "Konfiguration, Tests und Steuerung." +msgstr "Configuration, tests, and controls." + +#: workflows/templates/workflows/home.html:554 +msgid "Felder, Schritte und Optionen verwalten." +msgstr "Manage fields, steps, and options." + +#: workflows/templates/workflows/home.html:555 +#: workflows/templates/workflows/home.html:560 +#: workflows/templates/workflows/home.html:565 +#: workflows/templates/workflows/home.html:570 +#: workflows/templates/workflows/home.html:575 +#: workflows/templates/workflows/home.html:580 msgid "Öffnen" msgstr "Open" +#: workflows/templates/workflows/home.html:558 +#: workflows/templates/workflows/intro_builder.html:7 +#: workflows/templates/workflows/intro_builder.html:44 +msgid "Einweisungs-Builder" +msgstr "Introduction Builder" + +#: workflows/templates/workflows/home.html:559 +msgid "Checklistenpunkte für das Einweisungsprotokoll konfigurieren." +msgstr "Configure checklist items for the introduction protocol." + +#: workflows/templates/workflows/home.html:564 +msgid "Project wiki and developer documentation in one place." +msgstr "" + +#: workflows/templates/workflows/home.html:568 +msgid "Integrationen" +msgstr "Integrations" + +#: workflows/templates/workflows/home.html:569 +msgid "Nextcloud- und E-Mail-Setup." +msgstr "Nextcloud and email setup." + +#: workflows/templates/workflows/home.html:573 +#: workflows/templates/workflows/welcome_emails.html:7 +msgid "Welcome E-Mails" +msgstr "Welcome Emails" + +#: workflows/templates/workflows/home.html:574 +msgid "Geplante Welcome Mails verwalten." +msgstr "Manage scheduled welcome emails." + +#: workflows/templates/workflows/home.html:578 +msgid "Django Admin" +msgstr "Django Admin" + +#: workflows/templates/workflows/home.html:579 +msgid "Vollständige Datenverwaltung." +msgstr "Full data management." + +#: workflows/templates/workflows/home.html:625 +msgid "Tipp: Die letzten Vorgänge sehen Sie jederzeit im Anfragen Dashboard." +msgstr "Tip: You can always see the latest requests in the Requests Dashboard." + +#: workflows/templates/workflows/integrations_setup.html:7 +#: workflows/templates/workflows/integrations_setup.html:79 +msgid "Integrationen Setup" +msgstr "Integrations Setup" + +#: workflows/templates/workflows/integrations_setup.html:80 +msgid "Verwalten Sie Nextcloud- und Mail-Konfiguration ohne Backend-Wechsel." +msgstr "Manage Nextcloud and mail configuration without switching to the backend." + +#: workflows/templates/workflows/integrations_setup.html:83 +msgid "Setup Nextcloud" +msgstr "Setup Nextcloud" + +#: workflows/templates/workflows/integrations_setup.html:84 +msgid "Setup Mail" +msgstr "Setup Mail" + +#: workflows/templates/workflows/integrations_setup.html:85 +msgid "E-Mail Routing & Vorlagen" +msgstr "Email routing & templates" + +#: workflows/templates/workflows/integrations_setup.html:120 +msgid "Nextcloud speichern" +msgstr "Save Nextcloud" + +#: workflows/templates/workflows/integrations_setup.html:122 +#: workflows/templates/workflows/integrations_setup.html:162 +msgid "Leeres Passwortfeld lässt das bestehende Passwort unverändert." +msgstr "Leaving the password field empty keeps the current password unchanged." + +#: workflows/templates/workflows/integrations_setup.html:156 +msgid "SMTP SSL" +msgstr "SMTP SSL" + +#: workflows/templates/workflows/integrations_setup.html:157 +msgid "SMTP TLS" +msgstr "SMTP TLS" + +#: workflows/templates/workflows/integrations_setup.html:160 +msgid "Mail speichern" +msgstr "Save mail settings" + +#: workflows/templates/workflows/integrations_setup.html:171 +msgid "It onboarding email" +msgstr "IT onboarding email" + +#: workflows/templates/workflows/integrations_setup.html:175 +msgid "General info email" +msgstr "General info email" + +#: workflows/templates/workflows/integrations_setup.html:179 +msgid "Business card email" +msgstr "Business card email" + +#: workflows/templates/workflows/integrations_setup.html:183 +msgid "Hr works email" +msgstr "HR Works email" + +#: workflows/templates/workflows/integrations_setup.html:187 +msgid "Key notification email" +msgstr "Key notification email" + +#: workflows/templates/workflows/integrations_setup.html:191 +msgid "Diese Empfänger werden für condition-based E-Mail Routing genutzt." +msgstr "These recipients are used for condition-based email routing." + +#: workflows/templates/workflows/integrations_setup.html:218 +msgid "E-Mail Routing & Vorlagen speichern" +msgstr "Save email routing & templates" + +#: workflows/templates/workflows/integrations_setup.html:224 +msgid "Bedingungsregeln für zusätzliche E-Mails" +msgstr "Conditional rules for additional emails" + +#: workflows/templates/workflows/integrations_setup.html:225 +msgid "Zusätzliche Regeln laufen nach dem Standard-Routing." +msgstr "Additional rules run after the standard routing flow." + +#: workflows/templates/workflows/integrations_setup.html:232 +#: workflows/templates/workflows/integrations_setup.html:303 +msgid "Regelname" +msgstr "Rule name" + +#: workflows/templates/workflows/integrations_setup.html:236 +#: workflows/templates/workflows/integrations_setup.html:307 +msgid "Event" +msgstr "Event" + +#: workflows/templates/workflows/integrations_setup.html:244 +#: workflows/templates/workflows/integrations_setup.html:315 +msgid "Feldname" +msgstr "Field name" + +#: workflows/templates/workflows/integrations_setup.html:248 +#: workflows/templates/workflows/integrations_setup.html:319 +#: workflows/templates/workflows/intro_builder.html:95 +msgid "Operator" +msgstr "Operator" + +#: workflows/templates/workflows/integrations_setup.html:256 +#: workflows/templates/workflows/integrations_setup.html:327 +msgid "Vergleichswert" +msgstr "Comparison value" + +#: workflows/templates/workflows/integrations_setup.html:260 +#: workflows/templates/workflows/integrations_setup.html:331 +#: workflows/templates/workflows/welcome_emails.html:123 +msgid "Empfänger" +msgstr "Recipients" + +#: workflows/templates/workflows/integrations_setup.html:264 +#: workflows/templates/workflows/integrations_setup.html:335 +msgid "Template Key (optional)" +msgstr "Template key (optional)" + +#: workflows/templates/workflows/integrations_setup.html:266 +#: workflows/templates/workflows/integrations_setup.html:337 +msgid "-- Custom Betreff/Body verwenden --" +msgstr "-- Use custom subject/body --" + +#: workflows/templates/workflows/integrations_setup.html:273 +#: workflows/templates/workflows/integrations_setup.html:344 +msgid "Custom Subject (optional)" +msgstr "Custom subject (optional)" + +#: workflows/templates/workflows/integrations_setup.html:277 +#: workflows/templates/workflows/integrations_setup.html:348 +msgid "Custom Body (optional)" +msgstr "Custom body (optional)" + +#: workflows/templates/workflows/integrations_setup.html:281 +#: workflows/templates/workflows/integrations_setup.html:352 +msgid "Custom Subject (EN, optional)" +msgstr "Custom subject (EN, optional)" + +#: workflows/templates/workflows/integrations_setup.html:285 +#: workflows/templates/workflows/integrations_setup.html:356 +msgid "Custom Body (EN, optional)" +msgstr "Custom body (EN, optional)" + +#: workflows/templates/workflows/integrations_setup.html:291 +#: workflows/templates/workflows/integrations_setup.html:361 +msgid "PDF anhängen" +msgstr "Attach PDF" + +#: workflows/templates/workflows/integrations_setup.html:296 +msgid "Noch keine zusätzlichen Regeln vorhanden." +msgstr "No additional rules configured yet." + +#: workflows/templates/workflows/integrations_setup.html:300 +msgid "Neue Regel hinzufügen" +msgstr "Add new rule" + +#: workflows/templates/workflows/integrations_setup.html:366 +msgid "Regeln speichern" +msgstr "Save rules" + +#: workflows/templates/workflows/intro_builder.html:45 +msgid "Checklistenpunkte für das Einweisungs- und Übergabeprotokoll verwalten." +msgstr "Manage checklist items for the introduction and handover protocol." + +#: workflows/templates/workflows/intro_builder.html:47 +msgid "Zum Dashboard" +msgstr "Go to dashboard" + +#: workflows/templates/workflows/intro_builder.html:61 +#: workflows/templates/workflows/intro_builder.html:91 +msgid "Abschnitt" +msgstr "Section" + +#: workflows/templates/workflows/intro_builder.html:69 +#: workflows/templates/workflows/intro_builder.html:92 +msgid "Checklistenpunkt (DE)" +msgstr "Checklist item (DE)" + +#: workflows/templates/workflows/intro_builder.html:70 +msgid "z. B. Nextcloud Ordnerstruktur erklärt" +msgstr "e.g. Nextcloud folder structure explained" + +#: workflows/templates/workflows/intro_builder.html:73 +msgid "Checklist item (EN)" +msgstr "Checklist item (EN)" + +#: workflows/templates/workflows/intro_builder.html:74 +msgid "e.g. Nextcloud folder structure explained" +msgstr "e.g. Nextcloud folder structure explained" + +#: workflows/templates/workflows/intro_builder.html:77 +msgid "Punkt hinzufügen" +msgstr "Add item" + +#: workflows/templates/workflows/intro_builder.html:80 +msgid "" +"Bedingungen und Sortierung können anschließend in der Tabelle bearbeitet " +"werden." +msgstr "" +"Conditions and sort order can then be edited in the table." + +#: workflows/templates/workflows/intro_builder.html:93 +msgid "Checklistenpunkt (EN)" +msgstr "Checklist item (EN)" + +#: workflows/templates/workflows/intro_builder.html:94 +msgid "Feld-Bedingung" +msgstr "Field condition" + +#: workflows/templates/workflows/intro_builder.html:96 +msgid "Wert" +msgstr "Value" + +#: workflows/templates/workflows/intro_builder.html:131 +msgid "z. B. HR Works" +msgstr "e.g. HR Works" + +#: workflows/templates/workflows/intro_builder.html:134 +msgid "Checklistenpunkt wirklich löschen?" +msgstr "Delete this checklist item?" + +#: workflows/templates/workflows/intro_builder.html:138 +msgid "" +"Noch keine benutzerdefinierten Checklistenpunkte angelegt. Solange die Liste " +"leer ist, nutzt das System die integrierten Standardpunkte." +msgstr "" +"No custom checklist items have been created yet. As long as the list is " +"empty, the system uses the built-in default items." + +#: workflows/templates/workflows/intro_builder.html:143 +msgid "Reihenfolge folgt derzeit der Tabellenreihenfolge beim Speichern." +msgstr "Order currently follows the table order when saving." + +#: workflows/templates/workflows/intro_builder.html:145 +msgid "Checkliste speichern" +msgstr "Save checklist" + +#: workflows/templates/workflows/offboarding_form.html:8 +#: workflows/templates/workflows/offboarding_form.html:32 +msgid "Offboarding-Anfrage" +msgstr "Offboarding request" + +#: workflows/templates/workflows/offboarding_form.html:15 +#: workflows/templates/workflows/onboarding_form.html:15 +msgid "Anfrage gespeichert" +msgstr "Request saved" + +#: workflows/templates/workflows/offboarding_form.html:16 +#, python-format +msgid "" +"Offboarding wurde erfolgreich gespeichert (ID: %(request_id)s). Das PDF wird " +"im Hintergrund erzeugt." +msgstr "" +"Offboarding was saved successfully (ID: %(request_id)s). The PDF is being " +"generated in the background." + +#: workflows/templates/workflows/offboarding_form.html:17 +#: workflows/templates/workflows/onboarding_form.html:17 +msgid "Schließen" +msgstr "Close" + +#: workflows/templates/workflows/offboarding_form.html:35 +msgid "Mitarbeitende suchen (Name oder E-Mail)" +msgstr "Search employees (name or email)" + +#: workflows/templates/workflows/offboarding_form.html:36 +msgid "z. B. max.mustermann@tub.co" +msgstr "e.g. john.doe@tub.co" + +#: workflows/templates/workflows/offboarding_form.html:38 +#: workflows/templates/workflows/requests_dashboard.html:996 +msgid "Suchen" +msgstr "Search" + +#: workflows/templates/workflows/offboarding_form.html:50 +msgid "Vorbefüllt aus:" +msgstr "Prefilled from:" + +#: workflows/templates/workflows/offboarding_form.html:69 +msgid "Offboarding-Anfrage speichern" +msgstr "Save offboarding request" + +#: workflows/templates/workflows/onboarding_form.html:8 +msgid "Onboarding-Anfrage" +msgstr "Onboarding request" + +#: workflows/templates/workflows/onboarding_form.html:16 +#, python-format +msgid "" +"Onboarding wurde erfolgreich gespeichert (ID: %(request_id)s). Das PDF wird " +"im Hintergrund erzeugt." +msgstr "" +"Onboarding was saved successfully (ID: %(request_id)s). The PDF is being " +"generated in the background." + +#: workflows/templates/workflows/onboarding_form.html:37 +msgid "Mehrseitiges Formular mit konfigurierbaren Feldern aus dem Admin." +msgstr "Multi-page form with configurable fields from the admin." + +#: workflows/templates/workflows/onboarding_form.html:53 +msgid "" +"Bitte prüfen Sie die markierten Felder. Ungültige Eingaben wurden erkannt." +msgstr "Please check the highlighted fields. Invalid input was detected." + +#: workflows/templates/workflows/onboarding_form.html:113 +msgid "Keine konfigurierten Felder in diesem Schritt." +msgstr "No configured fields in this step." + +#: workflows/templates/workflows/onboarding_form.html:118 +msgid "Fast geschafft. Bitte Abschlussdaten prüfen und die Anfrage absenden." +msgstr "Almost done. Please review the final details and submit the request." + +#: workflows/templates/workflows/onboarding_form.html:130 +msgid "Zurück" +msgstr "Back" + +#: workflows/templates/workflows/onboarding_form.html:131 +msgid "Weiter" +msgstr "Next" + +#: workflows/templates/workflows/onboarding_form.html:132 +msgid "Onboarding-Anfrage absenden" +msgstr "Submit onboarding request" + +#: workflows/templates/workflows/requests_dashboard.html:899 +msgid "" +"Steuert Onboarding- und Offboarding-Prozesse an einem Ort. Die Oberfläche " +"priorisiert Kennzahlen, Aktivität und direkte Aktionen in der Vorgangsliste." +msgstr "" +"Controls onboarding and offboarding processes in one place. The interface " +"prioritizes metrics, activity, and direct actions in the request list." + +#: workflows/templates/workflows/requests_dashboard.html:901 +msgid "Onboarding + Offboarding" +msgstr "Onboarding + Offboarding" + +#: workflows/templates/workflows/requests_dashboard.html:902 +msgid "PDFs + Live-Protokolle" +msgstr "PDFs + live protocols" + +#: workflows/templates/workflows/requests_dashboard.html:903 +msgid "Suche + Bulk-Aktionen" +msgstr "Search + bulk actions" + +#: workflows/templates/workflows/requests_dashboard.html:909 +msgid "Aktivitätsverlauf" +msgstr "Activity Timeline" + +#: workflows/templates/workflows/requests_dashboard.html:910 +msgid "" +"Die letzten 14 Tage in einer kompakten Ansicht über alle Onboarding- und " +"Offboarding-Vorgänge." +msgstr "" +"The last 14 days in a compact view across all onboarding and offboarding " +"requests." + +#: workflows/templates/workflows/requests_dashboard.html:912 +msgid "14 Tage" +msgstr "14 days" + +#: workflows/templates/workflows/requests_dashboard.html:938 +msgid "Alle erfassten Onboarding-Vorgänge im aktuellen System." +msgstr "All onboarding requests captured in the current system." + +#: workflows/templates/workflows/requests_dashboard.html:948 +msgid "Austritte und Rückgaben in derselben Prozessübersicht." +msgstr "Departures and returns in the same process overview." + +#: workflows/templates/workflows/requests_dashboard.html:953 +msgid "Gesamtbestand" +msgstr "Total records" + +#: workflows/templates/workflows/requests_dashboard.html:958 +msgid "Alle Vorgänge, durchsuchbar und mit Dokumenten verknüpft." +msgstr "All requests, searchable and linked with documents." + +#: workflows/templates/workflows/requests_dashboard.html:963 +msgid "Aktivität 14 Tage" +msgstr "Activity 14 Days" + +#: workflows/templates/workflows/requests_dashboard.html:968 +msgid "Zeitraum des visuellen Aktivitätsverlaufs in dieser Übersicht." +msgstr "Time span of the visual activity timeline in this overview." + +#: workflows/templates/workflows/requests_dashboard.html:983 +msgid "Vorgänge" +msgstr "Requests" + +#: workflows/templates/workflows/requests_dashboard.html:984 +msgid "" +"Dokumente, Status und Einweisungsaktionen in einer verdichteten " +"Arbeitsansicht." +msgstr "Documents, status, and introduction actions in a condensed work view." + +#: workflows/templates/workflows/requests_dashboard.html:986 +#, python-format +msgid "%(count)s Einträge sichtbar" +msgstr "%(count)s entries visible" + +#: workflows/templates/workflows/requests_dashboard.html:993 +msgid "Nach Name oder E-Mail suchen" +msgstr "Search by name or email" + +#: workflows/templates/workflows/requests_dashboard.html:998 +msgid "Zurücksetzen" +msgstr "Reset" + +#: workflows/templates/workflows/requests_dashboard.html:1002 +msgid "" +"Datensätze können direkt in der Tabelle gefiltert, geöffnet, geprüft oder " +"gelöscht werden." +msgstr "" +"Records can be filtered, opened, checked, or deleted directly in the table." + +#: workflows/templates/workflows/requests_dashboard.html:1009 +#: workflows/templates/workflows/welcome_emails.html:114 +msgid "ausgewählt" +msgstr "selected" + +#: workflows/templates/workflows/requests_dashboard.html:1010 +msgid "Auswahl löschen" +msgstr "Delete selection" + +#: workflows/templates/workflows/requests_dashboard.html:1022 +msgid "Typ" +msgstr "Type" + +#: workflows/templates/workflows/requests_dashboard.html:1023 +msgid "Person" +msgstr "Person" + +#: workflows/templates/workflows/requests_dashboard.html:1024 +msgid "E-Mail" +msgstr "Email" + +#: workflows/templates/workflows/requests_dashboard.html:1025 +msgid "Erstellt" +msgstr "Created" + +#: workflows/templates/workflows/requests_dashboard.html:1026 +msgid "Dokument" +msgstr "Document" + +#: workflows/templates/workflows/requests_dashboard.html:1027 +#: workflows/templates/workflows/requests_dashboard.html:1062 +msgid "Einweisung" +msgstr "Introduction" + +#: workflows/templates/workflows/requests_dashboard.html:1028 +#: workflows/templates/workflows/welcome_emails.html:127 +msgid "Aktion" +msgstr "Action" + +#: workflows/templates/workflows/requests_dashboard.html:1053 +msgid "PDF öffnen" +msgstr "Open PDF" + +#: workflows/templates/workflows/requests_dashboard.html:1055 +msgid "Noch nicht verfügbar" +msgstr "Not available yet" + +#: workflows/templates/workflows/requests_dashboard.html:1065 +msgid "Live-Protokoll" +msgstr "Live protocol" + +#: workflows/templates/workflows/requests_dashboard.html:1067 +msgid "Einweisung öffnen" +msgstr "Open introduction" + +#: workflows/templates/workflows/requests_dashboard.html:1069 +msgid "Live-Protokoll öffnen" +msgstr "Open live protocol" + +#: workflows/templates/workflows/requests_dashboard.html:1074 +msgid "Standard-Einweisungs-PDF" +msgstr "Standard introduction PDF" + +#: workflows/templates/workflows/requests_dashboard.html:1079 +msgid "Neu erzeugen" +msgstr "Regenerate" + +#: workflows/templates/workflows/requests_dashboard.html:1081 +msgid "Standard-PDF öffnen" +msgstr "Open standard PDF" + +#: workflows/templates/workflows/requests_dashboard.html:1085 +msgid "PDF erzeugen" +msgstr "Generate PDF" + +#: workflows/templates/workflows/requests_dashboard.html:1092 +msgid "Status:" +msgstr "Status:" + +#: workflows/templates/workflows/requests_dashboard.html:1096 +msgid "Nicht relevant" +msgstr "Not relevant" + +#: workflows/templates/workflows/requests_dashboard.html:1109 +msgid "Noch keine Vorgänge vorhanden." +msgstr "No requests available yet." + +#: workflows/templates/workflows/welcome_emails.html:50 +#, fuzzy +#| msgid "Geplante Welcome Mails verwalten." +msgid "Geplante Welcome E-Mails" +msgstr "Manage scheduled welcome emails." + +#: workflows/templates/workflows/welcome_emails.html:51 +msgid "" +"Welcome-Mails konfigurieren und geplante Mails steuern (sofort senden, " +"pausieren, fortsetzen, abbrechen)." +msgstr "" +"Configure welcome emails and control scheduled messages (send now, pause, " +"resume, cancel)." + +#: workflows/templates/workflows/welcome_emails.html:63 +msgid "Verzögerung in Tagen" +msgstr "Delay in days" + +#: workflows/templates/workflows/welcome_emails.html:67 +msgid "Absenderadresse (optional)" +msgstr "Sender address (optional)" + +#: workflows/templates/workflows/welcome_emails.html:68 +msgid "Leer = System-Absender" +msgstr "Empty = system sender" + +#: workflows/templates/workflows/welcome_emails.html:88 +msgid "Onboarding-PDF anhängen" +msgstr "Attach onboarding PDF" + +#: workflows/templates/workflows/welcome_emails.html:91 +msgid "Verfügbare Keywords:" +msgstr "Available keywords:" + +#: workflows/templates/workflows/welcome_emails.html:97 +msgid "Welcome-Einstellungen speichern" +msgstr "Save welcome settings" + +#: workflows/templates/workflows/welcome_emails.html:105 +msgid "Alle auswählen" +msgstr "Select all" + +#: workflows/templates/workflows/welcome_emails.html:108 +#: workflows/templates/workflows/welcome_emails.html:163 +msgid "Pausieren" +msgstr "Pause" + +#: workflows/templates/workflows/welcome_emails.html:109 +#: workflows/templates/workflows/welcome_emails.html:157 +msgid "Sofort senden" +msgstr "Send now" + +#: workflows/templates/workflows/welcome_emails.html:113 +msgid "Bulk ausführen" +msgstr "Run bulk action" + +#: workflows/templates/workflows/welcome_emails.html:120 +msgid "Auswahl" +msgstr "Select" + +#: workflows/templates/workflows/welcome_emails.html:122 +msgid "Mitarbeitende Person" +msgstr "Employee" + +#: workflows/templates/workflows/welcome_emails.html:124 +msgid "Geplant für" +msgstr "Scheduled for" + +#: workflows/templates/workflows/welcome_emails.html:126 +msgid "Gesendet am" +msgstr "Sent at" + +#: workflows/templates/workflows/welcome_emails.html:140 +msgid "Geplant" +msgstr "Scheduled" + +#: workflows/templates/workflows/welcome_emails.html:142 +msgid "Pausiert" +msgstr "Paused" + +#: workflows/templates/workflows/welcome_emails.html:144 +msgid "Abgebrochen" +msgstr "Cancelled" + +#: workflows/templates/workflows/welcome_emails.html:146 +msgid "Gesendet" +msgstr "Sent" + +#: workflows/templates/workflows/welcome_emails.html:148 +msgid "Fehlgeschlagen" +msgstr "Failed" + +#: workflows/templates/workflows/welcome_emails.html:168 +msgid "Fortsetzen" +msgstr "Resume" + +#: workflows/templates/workflows/welcome_emails.html:174 +msgid "Abbrechen" +msgstr "Cancel" + +#: workflows/templates/workflows/welcome_emails.html:181 +msgid "Keine geplanten Welcome E-Mails vorhanden." +msgstr "No scheduled welcome emails available." + +#: workflows/templates/workflows/welcome_emails.html:224 +msgid "Bitte mindestens einen Welcome-Eintrag auswählen." +msgstr "Please select at least one welcome entry." + +#: workflows/templates/workflows/welcome_emails.html:229 +msgid "Ausgewählte Welcome-Einträge wirklich löschen?" +msgstr "Delete the selected welcome entries?" + +#: workflows/templates/workflows/welcome_emails.html:232 +msgid "Ausgewählte Welcome-Einträge pausieren?" +msgstr "Pause the selected welcome entries?" + +#: workflows/templates/workflows/welcome_emails.html:234 +msgid "Ausgewählte Welcome-Einträge sofort senden?" +msgstr "Send the selected welcome entries now?" + +#: workflows/views.py:76 +msgid "Stammdaten" +msgstr "Master data" + +#: workflows/views.py:76 +msgid "Person, Rolle, Abteilung" +msgstr "Person, role, department" + +#: workflows/views.py:77 +msgid "Vertrag" +msgstr "Contract" + +#: workflows/views.py:77 +msgid "Beschäftigung und Termine" +msgstr "Employment and dates" + +#: workflows/views.py:78 +msgid "IT-Setup" +msgstr "IT setup" + +#: workflows/views.py:78 +msgid "Geräte, Software und Zugänge" +msgstr "Devices, software, and access" + +#: workflows/views.py:79 +msgid "Abschluss" +msgstr "Finish" + +#: workflows/views.py:79 +msgid "Notizen und Freigabe" +msgstr "Notes and approval" + +#: workflows/views.py:239 +msgid "Sie haben keine Berechtigung für diese Aktion." +msgstr "You do not have permission for this action." + +#: workflows/views.py:248 +msgid "Keine Einträge ausgewählt." +msgstr "No entries selected." + +#: workflows/views.py:277 +#, python-format +msgid "%(count)s Eintrag/Einträge gelöscht." +msgstr "%(count)s entry/entries deleted." + +#: workflows/views.py:279 +#, python-format +msgid "%(count)s Auswahl(en) konnten nicht verarbeitet werden." +msgstr "%(count)s selection(s) could not be processed." + +#: workflows/views.py:281 +msgid "Keine passenden Einträge gefunden." +msgstr "No matching entries found." + +#: workflows/views.py:440 +msgid "Einweisungs- und Übergabeprotokoll wurde erzeugt." +msgstr "Introduction and handover protocol was generated." + +#: workflows/views.py:457 +msgid "Einweisungsprotokoll aus Live-Status wurde erzeugt." +msgstr "Introduction protocol from live status was generated." + +#: workflows/views.py:486 +msgid "Einweisung wurde zurückgesetzt." +msgstr "Introduction was reset." + +#: workflows/views.py:492 +msgid "Einweisung wurde als abgeschlossen gespeichert." +msgstr "Introduction was saved as completed." + +#: workflows/views.py:497 +msgid "Einweisung wurde als Entwurf gespeichert." +msgstr "Introduction was saved as draft." + +#~ msgid "Dokumentation, Architektur und Runbook." +#~ msgstr "Documentation, architecture, and runbook." diff --git a/backend/workflows/forms.py b/backend/workflows/forms.py index a40e1ff..9752b8a 100644 --- a/backend/workflows/forms.py +++ b/backend/workflows/forms.py @@ -326,6 +326,8 @@ class OnboardingRequestForm(forms.ModelForm): def save(self, commit=True): instance = super().save(commit=False) + if not (instance.preferred_language or '').strip(): + instance.preferred_language = (get_language() or 'de').split('-')[0] instance.group_mailboxes_required = self.cleaned_data.get('group_mailboxes_required_choice') == 'ja' instance.additional_software_needed = self.cleaned_data.get('additional_software_needed_choice') == 'ja' diff --git a/backend/workflows/migrations/0031_alter_offboardingrequest_preferred_language_and_more.py b/backend/workflows/migrations/0031_alter_offboardingrequest_preferred_language_and_more.py new file mode 100644 index 0000000..0f0ab12 --- /dev/null +++ b/backend/workflows/migrations/0031_alter_offboardingrequest_preferred_language_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.5 on 2026-03-24 12:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('workflows', '0030_notificationrule_custom_body_en_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='offboardingrequest', + name='preferred_language', + field=models.CharField(blank=True, db_default='de', default='de', max_length=10), + ), + migrations.AlterField( + model_name='onboardingrequest', + name='preferred_language', + field=models.CharField(blank=True, db_default='de', default='de', max_length=10), + ), + ] diff --git a/backend/workflows/models.py b/backend/workflows/models.py index d732220..477849c 100644 --- a/backend/workflows/models.py +++ b/backend/workflows/models.py @@ -2,6 +2,11 @@ from django.db import models from django.utils.translation import get_language +def _normalized_language_code(value: str | None) -> str: + lang = (value or '').strip().split('-')[0].lower() + return lang or 'de' + + class EmployeeProfile(models.Model): full_name = models.CharField(max_length=255) first_name = models.CharField(max_length=100) @@ -80,12 +85,16 @@ class OnboardingRequest(models.Model): generated_pdf_path = models.CharField(max_length=500, blank=True) intro_pdf_path = models.CharField(max_length=500, blank=True) - preferred_language = models.CharField(max_length=10, blank=True, default='de') + preferred_language = models.CharField(max_length=10, blank=True, default='de', db_default='de') created_at = models.DateTimeField(auto_now_add=True) def __str__(self) -> str: return f"Onboarding #{self.id} - {self.full_name}" + def save(self, *args, **kwargs): + self.preferred_language = _normalized_language_code(self.preferred_language) + super().save(*args, **kwargs) + class FormOption(models.Model): CATEGORY_CHOICES = [ @@ -422,9 +431,13 @@ class OffboardingRequest(models.Model): signature = models.CharField(max_length=255, blank=True, verbose_name='Unterschrift (Name)') requested_by_email = models.EmailField(verbose_name='E-Mail der anfordernden Person') requested_by_name = models.CharField(max_length=255, blank=True, verbose_name='Name der anfordernden Person') - preferred_language = models.CharField(max_length=10, blank=True, default='de') + preferred_language = models.CharField(max_length=10, blank=True, default='de', db_default='de') generated_pdf_path = models.CharField(max_length=500, blank=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self) -> str: return f"Offboarding #{self.id} - {self.full_name}" + + def save(self, *args, **kwargs): + self.preferred_language = _normalized_language_code(self.preferred_language) + super().save(*args, **kwargs) diff --git a/backend/workflows/templates/workflows/developer_handbook.html b/backend/workflows/templates/workflows/developer_handbook.html index 2e222f4..1662ec8 100644 --- a/backend/workflows/templates/workflows/developer_handbook.html +++ b/backend/workflows/templates/workflows/developer_handbook.html @@ -124,10 +124,11 @@ docker compose exec -T web django-admin compilemessages
  • gettext is installed in the Docker image.
  • Do not use custom ad hoc .mo compilation anymore.
  • -
  • Phase 1 bilingual support covers fixed UI.
  • +
  • Phase 1 bilingual support covers fixed UI, including the main admin-tool labels/buttons.
  • Phase 2 covers builder-driven labels and checklist items with explicit German and English fields.
  • Email phase covers NotificationTemplate, NotificationRule, and the welcome-email settings UI with explicit DE/EN subject/body fields.
  • Request records now persist preferred_language so workflow emails can render in the submitter's active UI language with German fallback.
  • +
  • preferred_language is normalized in model save() and also has a DB default of de, so alternate creation paths cannot insert null values.

7) PDF Pipeline

@@ -154,6 +155,7 @@ docker compose exec -T web django-admin compilemessages
  • Admin-configured overrides live in NotificationTemplate and NotificationRule.
  • Both models now support explicit DE/EN content fields. Prefer filling both languages in the frontend integrations UI instead of embedding mixed-language copy into a single template.
  • Welcome-email configuration under Admin Apps has the same DE/EN split and follows the same runtime language selection.
  • +
  • The request objects passed into email tasks always carry a normalized preferred_language value.
  • Mail sending uses Celery tasks and supports test mode redirection.
  • MailHog is the local verification path when test mode is active.
  • diff --git a/backend/workflows/templates/workflows/form_builder.html b/backend/workflows/templates/workflows/form_builder.html index 6ac1d66..783a17d 100644 --- a/backend/workflows/templates/workflows/form_builder.html +++ b/backend/workflows/templates/workflows/form_builder.html @@ -1,10 +1,10 @@ -{% load static %} +{% load static i18n %} - Form Builder + {% trans "Form Builder" %} @@ -12,12 +12,12 @@
    -

    Form Builder

    -

    Felder per Drag-and-Drop sortieren und pro Schritt gruppieren.

    +

    {% trans "Form Builder" %}

    +

    {% trans "Felder per Drag-and-Drop sortieren und pro Schritt gruppieren." %}

    {% if messages %} @@ -35,7 +35,7 @@ {{ label }} {% endfor %} - +
    @@ -52,9 +52,9 @@
    {{ item.field_name }}
    - {% if item.locked %}Fix{% endif %} - {% if not item.is_visible %}{% endif %} - {% if item.is_required %}Pflicht{% endif %} + {% if item.locked %}{% trans "Fix" %}{% endif %} + {% if not item.is_visible %}{% endif %} + {% if item.is_required %}{% trans "Pflicht" %}{% endif %}
    {% endfor %} @@ -65,10 +65,10 @@
    -

    Optionen verwalten

    +

    {% trans "Optionen verwalten" %}

    - + - - - - + + + +
    @@ -93,12 +93,12 @@ - - - + + + - - + + @@ -106,31 +106,31 @@ {% empty %} - + {% endfor %}
    SortierungLabel (DE)Label (EN){% trans "Sortierung" %}{% trans "Label (DE)" %}{% trans "Label (EN)" %} ValueAktivLöschen{% trans "Aktiv" %}{% trans "Löschen" %}
    - ⋮⋮ + ⋮⋮ - +
    Keine Optionen in dieser Kategorie.
    {% trans "Keine Optionen in dieser Kategorie." %}
    - +
    -

    Feldtexte verwalten

    +

    {% trans "Feldtexte verwalten" %}

    {% csrf_token %} @@ -138,11 +138,11 @@ - - - - - + + + + + @@ -152,19 +152,19 @@ {{ item.field_name }} - - - - + + + + {% empty %} - + {% endfor %}
    FeldLabel (DE)Label (EN)Hilfetext (DE)Hilfetext (EN){% trans "Feld" %}{% trans "Label (DE)" %}{% trans "Label (EN)" %}{% trans "Hilfetext (DE)" %}{% trans "Hilfetext (EN)" %}
    Keine Feldkonfigurationen verfügbar.
    {% trans "Keine Feldkonfigurationen verfügbar." %}
    - +
    diff --git a/backend/workflows/templates/workflows/handbook.html b/backend/workflows/templates/workflows/handbook.html index 8ae3912..00efd45 100644 --- a/backend/workflows/templates/workflows/handbook.html +++ b/backend/workflows/templates/workflows/handbook.html @@ -4,7 +4,7 @@ - Handbook + {% trans "Handbook" %}