From 0f285aa2cf272230731db2c2d209aa3071eeffeb Mon Sep 17 00:00:00 2001 From: Md Bayazid Bostame Date: Tue, 24 Mar 2026 11:27:49 +0100 Subject: [PATCH] snapshot: preserve bilingual core UI and gettext workflow state --- README.md | 15 + backend/Dockerfile | 2 +- backend/config/settings.py | 8 +- backend/config/urls.py | 1 + backend/locale/en/LC_MESSAGES/django.mo | Bin 0 -> 9713 bytes backend/locale/en/LC_MESSAGES/django.po | 403 ++++++++++++++++++ .../templates/registration/login.html | 29 +- .../workflows/templates/workflows/home.html | 113 ++--- .../templates/workflows/offboarding_form.html | 34 +- .../templates/workflows/onboarding_form.html | 39 +- .../templates/workflows/project_wiki.html | 16 + .../workflows/requests_dashboard.html | 117 ++--- backend/workflows/views.py | 29 +- 13 files changed, 650 insertions(+), 156 deletions(-) create mode 100644 backend/locale/en/LC_MESSAGES/django.mo create mode 100644 backend/locale/en/LC_MESSAGES/django.po diff --git a/README.md b/README.md index e41b873..cb652b8 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,21 @@ This is the standalone dockerized web application for the TUBCO onboarding and o 5. Open test mailbox: - `http://localhost:8025` +## Translations +This project now uses Django's standard i18n workflow for long-term maintainability. + +- Extract/update message catalogs: + - `docker compose exec -T web django-admin makemessages -l en` +- Compile translations: + - `docker compose exec -T web django-admin compilemessages` +- Add more languages the same way: + - `docker compose exec -T web django-admin makemessages -l de` + +Notes: +- `gettext` is installed in the Docker image, so `compilemessages` works inside the container. +- Translation files live under `backend/locale/`. +- Core fixed UI is bilingual now; dynamic builder content and most PDF/email business text are not fully bilingual yet. + ## Current implemented scope - Onboarding form with labels mapped from your CSV schema. - Stores requests in PostgreSQL. diff --git a/backend/Dockerfile b/backend/Dockerfile index 46136ee..9091816 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -6,7 +6,7 @@ ENV PYTHONUNBUFFERED=1 WORKDIR /app RUN apt-get update \ - && apt-get install -y --no-install-recommends build-essential netcat-openbsd \ + && apt-get install -y --no-install-recommends build-essential netcat-openbsd gettext \ && rm -rf /var/lib/apt/lists/* RUN groupadd -g 1000 app && useradd -u 1000 -g app -m app diff --git a/backend/config/settings.py b/backend/config/settings.py index cd7ddd9..45a9181 100644 --- a/backend/config/settings.py +++ b/backend/config/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -83,7 +84,12 @@ AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] -LANGUAGE_CODE = 'de-de' +LANGUAGE_CODE = os.getenv('DJANGO_LANGUAGE_CODE', 'de') +LANGUAGES = [ + ('de', 'Deutsch'), + ('en', 'English'), +] +LOCALE_PATHS = [BASE_DIR / 'locale'] TIME_ZONE = 'Europe/Berlin' USE_I18N = True USE_TZ = True diff --git a/backend/config/urls.py b/backend/config/urls.py index 899547b..a6b96bc 100644 --- a/backend/config/urls.py +++ b/backend/config/urls.py @@ -5,6 +5,7 @@ from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), + path('i18n/', include('django.conf.urls.i18n')), path('accounts/', include('django.contrib.auth.urls')), path('', include('workflows.urls')), ] diff --git a/backend/locale/en/LC_MESSAGES/django.mo b/backend/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..031e539dbe7f39324e3d101e43a936dd89b402d4 GIT binary patch literal 9713 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 literal 0 HcmV?d00001 diff --git a/backend/locale/en/LC_MESSAGES/django.po b/backend/locale/en/LC_MESSAGES/django.po new file mode 100644 index 0000000..684bf9c --- /dev/null +++ b/backend/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,403 @@ +msgid "" +msgstr "" +"Project-Id-Version: tubco-portal\n" +"POT-Creation-Date: 2026-03-24 00:00+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" + +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" + +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." + +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." + +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." + +msgid "Zur Startseite" +msgstr "Back to home" + +msgid "Zurück" +msgstr "Back" + +msgid "Zurücksetzen" +msgstr "Reset" + +msgid "aktiv" +msgstr "active" + +msgid "ausgewählt" +msgstr "selected" + +msgid "inaktiv" +msgstr "inactive" + +msgid "z. B. max.mustermann@tub.co" +msgstr "e.g. john.doe@tub.co" + +msgid "Öffnen" +msgstr "Open" + diff --git a/backend/workflows/templates/registration/login.html b/backend/workflows/templates/registration/login.html index bd50514..df54158 100644 --- a/backend/workflows/templates/registration/login.html +++ b/backend/workflows/templates/registration/login.html @@ -1,10 +1,11 @@ -{% load static %} +{% load static i18n %} +{% get_current_language as CURRENT_LANGUAGE %} - + - Anmeldung + {% trans "Anmeldung" %}
- -

Anmeldung

-

Bitte melden Sie sich mit Ihrem Benutzerkonto an.

+
+ +
+ {% csrf_token %} + + + +
+
+

{% trans "Anmeldung" %}

+

{% trans "Bitte melden Sie sich mit Ihrem Benutzerkonto an." %}

{% csrf_token %} {% if form.errors %} -
Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen.
+
{% trans "Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen." %}
{% endif %}
{{ form.username.label_tag }}{{ form.username }}
{{ form.password.label_tag }}{{ form.password }}
- +
diff --git a/backend/workflows/templates/workflows/home.html b/backend/workflows/templates/workflows/home.html index 314c30c..569a8bc 100644 --- a/backend/workflows/templates/workflows/home.html +++ b/backend/workflows/templates/workflows/home.html @@ -1,10 +1,11 @@ -{% load static %} +{% load static i18n %} +{% get_current_language as CURRENT_LANGUAGE %} - + - TUBCO Onboarding & Offboarding Portal + {% trans "TUBCO Onboarding & Offboarding Portal" %}