From 9bcfd12cbe06ba6d34b2de151bee615bcc1bfe47 Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 12 Sep 2025 17:02:37 +0200 Subject: [PATCH] Update localization, enhance dark mode styles, and improve risk list display - Updated the Django localization file with new and modified translations. - Enhanced dark mode styles for table rows to improve visibility on hover. - Added a new JavaScript file for future chart functionalities. - Changed the logo text in the base template from "RM" to "WIRA Intranet". - Improved the risk list display by replacing checkboxes with icons for CIA categories. --- locale/de/LC_MESSAGES/django.mo | Bin 11765 -> 11378 bytes locale/de/LC_MESSAGES/django.po | 916 ++++++++++++++++++-------------- locale/en/LC_MESSAGES/django.po | 807 ++++++++++++++-------------- static/css/design.css | 16 + static/js/chart.js | 0 templates/base.html | 2 +- templates/risks/list_risks.html | 24 +- 7 files changed, 954 insertions(+), 811 deletions(-) create mode 100644 static/js/chart.js diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 710cf37407968b466ea06d8df9087b5d6806b1a8..82346cadac975e563ec502d2624336f60563a240 100644 GIT binary patch literal 11378 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

9@IR%>EcYEXF-j3k>wRo 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 JT)?Ev{|6G&Y*PRL diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index fcd72b8..aee05c7 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: wira-risk-management\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 10:17+0200\n" +"POT-Creation-Date: 2025-09-12 16:50+0200\n" "PO-Revision-Date: 2025-09-09 13:45+0200\n" "Last-Translator: Kevin Heyer \n" "Language-Team: German\n" @@ -12,561 +12,525 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: risks/admin.py:6 risks/admin.py:8 +#: risks/admin.py:21 risks/admin.py:23 msgid "Administration" msgstr "Verwaltung" -#: risks/admin.py:7 +#: risks/admin.py:22 msgid "Admin" msgstr "Admin" -#: risks/admin.py:15 risks/models.py:36 templates/risks/dashboard.html:75 -#: templates/risks/dashboard.html:80 templates/risks/dashboard.html:85 -#: templates/risks/list_risks.html:97 +#: risks/admin.py:33 risks/models.py:50 templates/risks/list_incidents.html:33 +#: templates/risks/list_risks.html:16 msgid "Risks" msgstr "Risiken" -#: risks/admin.py:16 risks/models.py:190 templates/base.html:38 -#: templates/risks/list_risks.html:31 +#: risks/admin.py:34 risks/models.py:184 templates/base.html:38 +#: templates/risks/item_control.html:5 templates/risks/list_controls.html:5 msgid "Controls" msgstr "Maßnahmen" -#: risks/admin.py:17 +#: risks/admin.py:35 msgid "Residual risks" msgstr "Restrisiken" -#: risks/admin.py:18 +#: risks/admin.py:36 msgid "Reviews" msgstr "Prüfung" -#: risks/admin.py:19 risks/models.py:258 templates/base.html:39 -#: templates/risks/item_risk.html:252 +#: risks/admin.py:37 risks/models.py:255 templates/base.html:39 +#: templates/risks/item_incident.html:5 templates/risks/item_risk.html:14 +#: templates/risks/list_incidents.html:5 templates/risks/list_incidents.html:18 msgid "Incidents" msgstr "Vorfälle" -#: risks/admin.py:20 +#: risks/admin.py:38 msgid "Users" msgstr "Benutzer" -#: risks/admin.py:133 risks/models.py:326 templates/risks/item_risk.html:291 +#: risks/admin.py:159 risks/models.py:362 templates/risks/item_control.html:96 +#: templates/risks/item_incident.html:88 templates/risks/item_risk.html:234 msgid "User" msgstr "Benutzer" -#: risks/admin.py:139 +#: risks/admin.py:163 msgid "Message" msgstr "Nachricht" -#: risks/admin.py:147 +#: risks/admin.py:169 msgid "Mark selected as read" msgstr "Alle als gelesen Markieren" -#: risks/admin.py:150 +#: risks/admin.py:172 #, python-format msgid "%(n)d notifications marked as read." msgstr "%(n)d Benachrichtigungen wurden als gelesen Markiert" -#: risks/admin.py:152 +#: risks/admin.py:174 msgid "Mark selected as unread" msgstr "Alle als gelesen Markieren" -#: risks/admin.py:155 +#: risks/admin.py:177 #, python-format msgid "%(n)d notifications marked as unread." msgstr "%(n)d Benachrichtigungen wurden als ungelesen Markiert" -#: risks/admin.py:157 +#: risks/admin.py:179 msgid "Mark selected as sent" msgstr "Auswahl als gelesen markieren" -#: risks/admin.py:160 +#: risks/admin.py:182 #, python-format msgid "%(n)d notifications marked as sent." msgstr "%(n)d Benachrichtigungen wurden als gelesen Markiert" -#: risks/admin.py:162 +#: risks/admin.py:184 msgid "Mark selected as unsent" msgstr "Auswahl als ungesendet markieren" -#: risks/admin.py:165 +#: risks/admin.py:187 #, python-format msgid "%(n)d notifications marked as unsent." msgstr "%(n)d Benachrichtigungen wurden als gelesen Markiert" -#: risks/admin.py:182 +#: risks/admin.py:199 msgid "Extra recipients" msgstr "Zusätzliche Empfänger" -#: risks/admin.py:190 +#: risks/admin.py:211 msgid "SSO Information" msgstr "SSO-Informationen" -#: risks/admin.py:199 +#: risks/admin.py:221 msgid "Risks Owned" msgstr "Eigene Risiken" -#: risks/admin.py:203 +#: risks/admin.py:225 msgid "Controls Responsible" msgstr "Verantwortlich für Maßnahmen" -#: risks/apps.py:7 templates/base.html:7 templates/base.html:32 +#: risks/apps.py:12 templates/base.html:7 templates/base.html:32 msgid "Risk Management" msgstr "Risikomanagement" -#: risks/forms.py:9 risks/forms.py:16 risks/forms.py:23 risks/models.py:73 -#: templates/risks/item_risk.html:64 templates/risks/item_risk.html:206 -#: templates/risks/item_risk.html:260 +#: risks/forms.py:13 risks/models.py:87 templates/risks/dashboard.html:83 +#: templates/risks/dashboard.html:108 templates/risks/item_control.html:35 +#: templates/risks/item_incident.html:36 templates/risks/item_risk.html:46 +#: templates/risks/item_risk.html:178 templates/risks/item_risk.html:208 +#: templates/risks/list_controls.html:48 templates/risks/list_controls.html:100 +#: templates/risks/list_incidents.html:48 +#: templates/risks/list_incidents.html:99 templates/risks/list_risks.html:128 msgid "Status" msgstr "Status" -#: risks/forms.py:30 risks/models.py:42 templates/risks/item_risk.html:181 +#: risks/forms.py:48 risks/models.py:56 msgid "Review required" msgstr "Prüfung nötig" -#: risks/models.py:35 templates/risks/item_risk.html:11 -#: templates/risks/list_risks.html:18 templates/risks/list_risks.html:110 +#: risks/models.py:49 templates/risks/item_control.html:65 +#: templates/risks/item_incident.html:57 templates/risks/item_risk.html:6 +#: templates/risks/list_controls.html:33 templates/risks/list_risks.html:116 msgid "Risk" msgstr "Risiko" -#: risks/models.py:39 +#: risks/models.py:53 msgid "Open" msgstr "Offen" -#: risks/models.py:40 risks/models.py:262 +#: risks/models.py:54 risks/models.py:259 msgid "In Progress" msgstr "In Bearbeitung" -#: risks/models.py:41 risks/models.py:263 +#: risks/models.py:55 risks/models.py:260 msgid "Closed" msgstr "Geschlossen" -#: risks/models.py:45 +#: risks/models.py:59 msgid "Very low – occurs less than once every 5 years" msgstr "Sehr niedrig – tritt seltener als einmal in fünf Jahren auf" -#: risks/models.py:46 +#: risks/models.py:60 msgid "Low – once every 1–5 years" msgstr "Niedrig – einmal in 1–5 Jahren" -#: risks/models.py:47 +#: risks/models.py:61 msgid "Likely – once per year or more" msgstr "Wahrscheinlich – einmal pro Jahr oder öfter" -#: risks/models.py:48 +#: risks/models.py:62 msgid "Very likely – multiple times per year/monthly" msgstr "Sehr wahrscheinlich – mehrmals pro Jahr/monatlich" -#: risks/models.py:51 +#: risks/models.py:65 msgid "Very Low (< 1,000 € – minor operational impact)" msgstr "Sehr Gering (< 1.000 € – geringe betriebliche Auswirkungen)" -#: risks/models.py:52 +#: risks/models.py:66 msgid "Low (1,000–5,000 € – local impact)" msgstr "Gering (1.000–5.000 € – lokale Auswirkungen)" -#: risks/models.py:53 +#: risks/models.py:67 msgid "High (5,000–15,000 € – team-level impact)" msgstr "Hoch (5.000–15.000 € – Auswirkungen auf Teamebene)" -#: risks/models.py:54 +#: risks/models.py:68 msgid "Severe (50,000–100,000 € – regional impact)" msgstr "Schwerwiegend (50.000–100.000 € – regionale Auswirkungen)" -#: risks/models.py:55 +#: risks/models.py:69 msgid "Critical (> 100,000 € – existential threat)" msgstr "Kritisch (> 100.000 € – existenzielle Bedrohung)" -#: risks/models.py:58 templates/risks/dashboard.html:74 +#: risks/models.py:72 templates/risks/dashboard.html:57 +#: templates/risks/list_risks.html:112 msgid "Confidentiality" msgstr "Vertraulichkeit" -#: risks/models.py:59 templates/risks/dashboard.html:79 +#: risks/models.py:73 templates/risks/dashboard.html:63 +#: templates/risks/list_risks.html:113 msgid "Integrity" msgstr "Integrität" -#: risks/models.py:60 templates/risks/dashboard.html:84 +#: risks/models.py:74 templates/risks/dashboard.html:69 +#: templates/risks/list_risks.html:114 msgid "Availability" msgstr "Verfügbarkeit" -#: risks/models.py:64 risks/models.py:200 risks/models.py:265 -#: templates/risks/item_risk.html:205 +#: risks/models.py:78 risks/models.py:194 risks/models.py:263 +#: templates/risks/item_risk.html:177 msgid "Title" msgstr "Titel" -#: risks/models.py:65 risks/models.py:266 +#: risks/models.py:79 risks/models.py:264 templates/risks/item_control.html:52 +#: templates/risks/item_incident.html:44 msgid "Description" msgstr "Beschreibung" -#: risks/models.py:66 templates/risks/item_risk.html:53 -#: templates/risks/list_risks.html:57 +#: risks/models.py:80 templates/risks/item_control.html:68 +#: templates/risks/item_incident.html:60 templates/risks/item_risk.html:35 +#: templates/risks/list_risks.html:119 msgid "Asset" msgstr "Asset" -#: risks/models.py:67 templates/risks/item_risk.html:54 -#: templates/risks/list_risks.html:70 +#: risks/models.py:81 templates/risks/item_control.html:69 +#: templates/risks/item_incident.html:61 templates/risks/item_risk.html:36 +#: templates/risks/list_risks.html:125 msgid "Process" msgstr "Prozess" -#: risks/models.py:68 templates/risks/item_risk.html:55 -#: templates/risks/list_risks.html:44 templates/risks/list_risks.html:112 +#: risks/models.py:82 templates/risks/item_control.html:67 +#: templates/risks/item_incident.html:59 templates/risks/item_risk.html:37 +#: templates/risks/list_risks.html:122 msgid "Category" msgstr "Kategorie" -#: risks/models.py:69 templates/risks/item_risk.html:68 +#: risks/models.py:83 templates/risks/item_control.html:46 +#: templates/risks/item_incident.html:39 templates/risks/item_risk.html:50 msgid "Created at" msgstr "Erstellt am" -#: risks/models.py:70 +#: risks/models.py:84 templates/risks/item_control.html:47 +#: templates/risks/item_incident.html:40 templates/risks/item_risk.html:51 msgid "Updated at" msgstr "Aktualisiert am" -#: risks/models.py:71 +#: risks/models.py:85 templates/risks/item_risk.html:58 msgid "Effects" msgstr "Auswirkungen" -#: risks/models.py:133 +#: risks/models.py:140 msgid "Residual Risk" msgstr "Restrisiko" -#: risks/models.py:134 +#: risks/models.py:141 msgid "Residual Risks" msgstr "Restrisiken" -#: risks/models.py:189 +#: risks/models.py:183 templates/risks/item_control.html:33 +#: templates/risks/list_controls.html:18 templates/risks/list_controls.html:97 msgid "Control" msgstr "Maßnahme" -#: risks/models.py:193 +#: risks/models.py:187 msgid "Planned" msgstr "Geplant" -#: risks/models.py:194 +#: risks/models.py:188 msgid "In progress" msgstr "In Bearbeitung" -#: risks/models.py:195 +#: risks/models.py:189 msgid "Completed" msgstr "Abgeschlossen" -#: risks/models.py:196 +#: risks/models.py:190 msgid "Verified" msgstr "Verifiziert" -#: risks/models.py:197 +#: risks/models.py:191 msgid "Rejected" msgstr "Abgelehnt" -#: risks/models.py:226 +#: risks/models.py:222 msgid "Auditlog" msgstr "Audit-Log" -#: risks/models.py:227 +#: risks/models.py:223 msgid "Auditlogs" msgstr "Audit-Logs" -#: risks/models.py:257 templates/risks/item_risk.html:259 +#: risks/models.py:254 templates/risks/item_incident.html:33 +#: templates/risks/item_risk.html:207 templates/risks/list_incidents.html:97 msgid "Incident" msgstr "Vorfall" -#: risks/models.py:261 +#: risks/models.py:258 msgid "Opened" msgstr "Eröffnet" -#: risks/models.py:267 +#: risks/models.py:265 msgid "Date reported" msgstr "Meldedatum" -#: risks/models.py:269 +#: risks/models.py:268 templates/risks/item_incident.html:34 +#: templates/risks/list_incidents.html:63 +#: templates/risks/list_incidents.html:101 msgid "Reported by" msgstr "Gemeldet von" -#: risks/models.py:279 risks/utils.py:119 -msgid "Notification" -msgstr "Benachrichtigung" +#: risks/models.py:284 +msgid "Risk created" +msgstr "Risiko erstellt" -#: risks/models.py:280 templates/base.html:80 +#: risks/models.py:285 +msgid "Risk updated" +msgstr "Risiko Aktualisiert" + +#: risks/models.py:286 +msgid "Risk deleted" +msgstr "Risiko gelöscht" + +#: risks/models.py:287 +msgid "Risk review required" +msgstr "Risikoprüfung nötig" + +#: risks/models.py:288 +msgid "Risk review completed" +msgstr "Risikoprüfung Abgeschlossen" + +#: risks/models.py:290 +msgid "Control created" +msgstr "Maßnahme erstellt" + +#: risks/models.py:291 +msgid "Control updated" +msgstr "Maßnahme Aktualisiert" + +#: risks/models.py:292 +msgid "Control deleted" +msgstr "Maßnahme '{title}' gelöscht" + +#: risks/models.py:294 +msgid "Residual created" +msgstr "Restrisiko erstellt" + +#: risks/models.py:295 +msgid "Residual updated" +msgstr "Restrisiko Aktualisiert" + +#: risks/models.py:296 +msgid "Residual deleted" +msgstr "Restrisiko gelöscht" + +#: risks/models.py:297 +msgid "Residual review required" +msgstr "Restrisikoprüfung nötig" + +#: risks/models.py:298 +msgid "Residual review completed" +msgstr "Restrisiko geprüft" + +#: risks/models.py:300 +msgid "Incident created" +msgstr "Vorfall erstellt" + +#: risks/models.py:301 +msgid "Incident updated" +msgstr "Vorfall Aktualisiert" + +#: risks/models.py:302 +msgid "Incident deleted" +msgstr "Vorfall gelöscht" + +#: risks/models.py:304 +msgid "User created" +msgstr "Benutzer erstellt" + +#: risks/models.py:305 +msgid "User deleted" +msgstr "Benutzer gelöscht" + +#: risks/models.py:314 risks/utils.py:142 +msgid "Notification" +msgstr "Nachricht" + +#: risks/models.py:315 templates/base.html:80 #: templates/risks/notifications.html:4 msgid "Notifications" msgstr "Nachrichten" -#: risks/models.py:295 -msgid "Risk created" -msgstr "Risiko erstellt" - -#: risks/models.py:296 -msgid "Risk updated" -msgstr "Risiko Aktualisiert" - -#: risks/models.py:297 -msgid "Risk deleted" -msgstr "Risiko gelöscht" - -#: risks/models.py:298 -msgid "Risk review required" -msgstr "Risikoprüfung nötig" - -#: risks/models.py:299 -msgid "Risk review completed" -msgstr "Risikoprüfung Abgeschlossen" - -#: risks/models.py:301 -msgid "Control created" -msgstr "Maßnahme erstellt" - -#: risks/models.py:302 -msgid "Control updated" -msgstr "Maßnahme Aktualisiert" - -#: risks/models.py:303 -msgid "Control deleted" -msgstr "Maßnahme '{title}' gelöscht" - -#: risks/models.py:305 -msgid "Residual created" -msgstr "Restrisiko erstellt" - -#: risks/models.py:306 -msgid "Residual updated" -msgstr "Restrisiko Aktualisiert" - -#: risks/models.py:307 -msgid "Residual deleted" -msgstr "Restrisiko gelöscht" - -#: risks/models.py:308 -msgid "Residual review required" -msgstr "Restrisikoprüfung nötig" - -#: risks/models.py:309 -msgid "Residual review completed" -msgstr "Restrisiko geprüft" - -#: risks/models.py:311 -msgid "Incident created" -msgstr "Vorfall erstellt" - -#: risks/models.py:312 -msgid "Incident updated" -msgstr "Vorfall Aktualisiert" - -#: risks/models.py:313 -msgid "Incident deleted" -msgstr "Vorfall gelöscht" - -#: risks/models.py:315 -msgid "User created" -msgstr "Benutzer erstellt" - -#: risks/models.py:316 -msgid "User deleted" -msgstr "Benutzer gelöscht" - -#: risks/models.py:371 +#: risks/models.py:411 msgid "Notification rule" msgstr "Benachrichtigungsregel" -#: risks/models.py:372 +#: risks/models.py:412 msgid "Notification rules" msgstr "Benachrichtigungsregeln" -#: risks/models.py:375 +#: risks/models.py:415 msgid "Event" msgstr "Aktion" -#: risks/models.py:380 +#: risks/models.py:420 msgid "Show in app" msgstr "Zeige in der WebApp" -#: risks/models.py:381 +#: risks/models.py:421 msgid "Send via email" msgstr "Sende via E-Mail" -#: risks/models.py:385 +#: risks/models.py:425 msgid "Send to owner/responsible/reporter (if available)" msgstr "Sende an Risikoeigner/Verantwortliche/Melder (Wenn vorhanden)" -#: risks/models.py:389 +#: risks/models.py:428 msgid "Send to all staff" msgstr "Sende an alle App-Mitarbeiter" -#: risks/models.py:393 +#: risks/models.py:430 msgid "Extra recipients (emails, comma or newline separated)" -msgstr "" -"Zusätzliche Empfänger (E-Mails, durch Komma oder Zeilenumbruch getrennt)" +msgstr "Zusätzliche Empfänger (E-Mails, durch Komma oder Zeilenumbruch getrennt)" -#: risks/signals.py:57 +#: risks/signals.py:71 #, python-brace-format msgid "User '{u}' created" msgstr "Benutzer '{u}' erstellte" -#: risks/signals.py:62 +#: risks/signals.py:79 #, python-brace-format msgid "User '{u}' deleted" msgstr "Benutzer '{u}' löschte" -#: risks/signals.py:70 -#, python-brace-format -msgid "Risk '{title}' {state}" -msgstr "Risiko '{title}' {state}" - -#: risks/signals.py:72 risks/signals.py:166 risks/signals.py:212 -#: risks/signals.py:275 risks/signals.py:369 risks/signals.py:411 -msgid "created" -msgstr "erstellt" - -#: risks/signals.py:72 risks/signals.py:166 risks/signals.py:212 -#: risks/signals.py:275 risks/signals.py:369 risks/signals.py:411 -msgid "updated" -msgstr "Aktualisiert" - -#: risks/signals.py:78 -#, python-brace-format -msgid "Risk '{title}' deleted" -msgstr "Risiko '{title}' gelöscht" - -#: risks/signals.py:117 +#: risks/signals.py:102 #, python-brace-format msgid "Risk created: {t}" msgstr "Risiko erstellt: {t}" -#: risks/signals.py:123 +#: risks/signals.py:121 #, python-brace-format msgid "Risk updated: {t}" msgstr "Risiko Aktualisiert: {t}" -#: risks/signals.py:143 +#: risks/signals.py:134 #, python-brace-format msgid "Risk deleted: {t}" msgstr "Risiko gelöscht: {t}" -#: risks/signals.py:164 -#, python-brace-format -msgid "Control '{title}' {state}" -msgstr "Maßnahme '{title}' {state}" +#: risks/signals.py:181 +msgid "Control {e}: {t}" +msgstr "Maßnahme {e}: {t}" -#: risks/signals.py:173 -#, python-brace-format -msgid "Control '{title}' deleted" -msgstr "Maßnahme '{title}' gelöscht" +#: risks/signals.py:182 risks/signals.py:317 +msgid "created" +msgstr "erstellt" -#: risks/signals.py:211 -#, python-brace-format -msgid "Control {event}: {t}" -msgstr "Maßnahme {event}: {t}" +#: risks/signals.py:182 risks/signals.py:317 +msgid "updated" +msgstr "Aktualisiert" -#: risks/signals.py:231 +#: risks/signals.py:196 #, python-brace-format msgid "Control deleted: {t}" msgstr "Maßnahme gelöscht: {t}" -#: risks/signals.py:246 +#: risks/signals.py:213 #, python-brace-format msgid "Review required for risk '{t}' due to control change" msgstr "Prüfung nötig für: '{t}', da Maßnahmen geändert wurden" -#: risks/signals.py:265 -#, python-brace-format -msgid "Review required for risk '{t}'" -msgstr "Prüfung benötigt für Risiko '{t}'" - -#: risks/signals.py:270 -#, python-brace-format -msgid "Review completed for risk '{t}'" -msgstr "Prüfung Abgeschlossen für Risiko '{t}'" - -#: risks/signals.py:274 -#, python-brace-format -msgid "Residual risk {state} for '{t}'" -msgstr "Restrisiko {state} für '{t}'" - -#: risks/signals.py:279 -#, python-brace-format -msgid "Residual risk deleted for '{t}'" -msgstr "Restrisiko für '{t}' gelöscht" - -#: risks/signals.py:316 +#: risks/signals.py:239 #, python-brace-format msgid "Residual created for risk: {t}" msgstr "Restrisiko erstellt für das Risiko: {t}" -#: risks/signals.py:328 +#: risks/signals.py:257 #, python-brace-format msgid "Residual review required for risk: {t}" msgstr "Restrisikoprüfung benötigt für Risiko {t}" -#: risks/signals.py:334 +#: risks/signals.py:260 #, python-brace-format msgid "Residual review completed for risk: {t}" msgstr "Restrisikoprüfung Abgeschlossen für Risiko {t}" -#: risks/signals.py:340 +#: risks/signals.py:263 #, python-brace-format msgid "Residual updated for risk: {t}" msgstr "Restrisiko Aktualisiert für das Risiko: {t}" -#: risks/signals.py:358 +#: risks/signals.py:280 #, python-brace-format msgid "Residual deleted for risk: {t}" msgstr "Restrisiko gelöscht für das Risiko: {t}" -#: risks/signals.py:369 -#, python-brace-format -msgid "Incident '{t}' {s}" -msgstr "Vorfall '{t}' {s}" +#: risks/signals.py:316 +msgid "Incident {e}: {t}" +msgstr "Vorfall {e}: {t}" -#: risks/signals.py:374 -#, python-brace-format -msgid "Incident '{t}' deleted" -msgstr "Vorfall '{t}' gelöscht" - -#: risks/signals.py:410 -#, python-brace-format -msgid "Incident {event}: {t}" -msgstr "Vorfall {event}: {t}" - -#: risks/signals.py:442 +#: risks/signals.py:331 #, python-brace-format msgid "Incident deleted: {t}" msgstr "Vorfall gelöscht: {t}" -#: risks/utils.py:53 risks/utils.py:67 +#: risks/utils.py:66 #, python-brace-format msgid "Follow-up reached: review required for risk '{t}'" msgstr "Wiedervorlagedatum erreicht: Prüfung nötig für Risiko '{t}'" -#: risks/views.py:345 +#: risks/views.py:277 msgid "Notification marked as read." msgstr "Nachricht als gelesen markiert" -#: risks/views.py:353 +#: risks/views.py:287 msgid "All notifications marked as read." msgstr "Alle Benachrichtigungen wurden als gelesen Markiert" -#: risks/views.py:370 +#: risks/views.py:306 msgid "Risk status updated." msgstr "Risikostatus Aktualisiert" -#: risks/views.py:384 +#: risks/views.py:322 msgid "Control status updated." msgstr "Maßnahmenstatus Aktualisiert" -#: risks/views.py:398 +#: risks/views.py:338 msgid "Incident status updated." msgstr "Vorfallstatus Aktualisiert" -#: risks/views.py:414 +#: risks/views.py:355 msgid "Residual review flag updated." msgstr "Restrisiko geprüft" -#: templates/base.html:34 templates/risks/dashboard.html:9 +#: templates/base.html:34 templates/risks/dashboard.html:4 msgid "Dashboard" msgstr "Dashboard" #: templates/base.html:35 templates/risks/risk_matrix.html:4 -#: templates/risks/risk_matrix.html:12 templates/risks/risk_matrix.html:18 +#: templates/risks/risk_matrix.html:8 msgid "Risk Matrix" msgstr "Risikomatrix" -#: templates/base.html:37 templates/risks/item_risk.html:4 +#: templates/base.html:37 templates/risks/item_risk.html:5 #: templates/risks/list_risks.html:4 msgid "Risk analysis" msgstr "Risikoanalyse" @@ -595,235 +559,361 @@ msgstr "Light Mode" msgid "Dark Mode" msgstr "Dark Mode" -#: templates/risks/dashboard.html:12 +#: templates/risks/dashboard.html:13 msgid "Overview of Risks, Controls and Incidents" msgstr "Übersicht der Risiken, Maßnahmen und Vorfälle" -#: templates/risks/dashboard.html:25 +#: templates/risks/dashboard.html:28 msgid "Total Risks" msgstr "Risiken" -#: templates/risks/dashboard.html:33 +#: templates/risks/dashboard.html:36 msgid "Residual Risks Needing Review" msgstr "Restrisiken ohne Verifizierung" -#: templates/risks/dashboard.html:41 +#: templates/risks/dashboard.html:44 msgid "Unread Notifications" msgstr "Ungelesene Nachrichten" -#: templates/risks/dashboard.html:48 -msgid "Controls by Status" -msgstr "Maßnahmen nach Status" - -#: templates/risks/dashboard.html:58 -msgid "Incidents by Status" -msgstr "Vorfälle nach Status" - -#: templates/risks/dashboard.html:68 +#: templates/risks/dashboard.html:53 msgid "Risks by CIA" msgstr "CIA Risiken" -#: templates/risks/item_risk.html:18 -#, fuzzy -#| msgid "Reviews" +#: templates/risks/dashboard.html:78 +msgid "Controls by Status" +msgstr "Maßnahmen nach Status" + +#: templates/risks/dashboard.html:84 templates/risks/dashboard.html:109 +msgid "Count" +msgstr "Anzahl" + +#: templates/risks/dashboard.html:94 templates/risks/dashboard.html:119 +#: templates/risks/list_risks.html:172 +msgid "No data" +msgstr "Keine Daten" + +#: templates/risks/dashboard.html:103 +msgid "Incidents by Status" +msgstr "Vorfälle nach Status" + +#: templates/risks/item_control.html:13 templates/risks/item_incident.html:13 +#: templates/risks/item_risk.html:12 msgid "Overview" -msgstr "Prüfung" +msgstr "Übersicht" -#: templates/risks/item_risk.html:34 -msgid "Update status" -msgstr "Status Aktualisiert" +#: templates/risks/item_control.html:14 templates/risks/item_incident.html:14 +#: templates/risks/list_incidents.html:98 +msgid "Linked Risks" +msgstr "Zugehörige Risiken" -#: templates/risks/item_risk.html:57 -msgid "Protection goals" -msgstr "Schutzziele" +#: templates/risks/item_control.html:15 templates/risks/item_incident.html:15 +#: templates/risks/item_risk.html:15 +msgid "History" +msgstr "Historie" -#: templates/risks/item_risk.html:61 -msgid "Not yet assigned" -msgstr "Keine Zugewiesenen Ziele" +#: templates/risks/item_control.html:18 +msgid "Edit Control" +msgstr "Maßnahme bearbeiten" -#: templates/risks/item_risk.html:67 -msgid "Risk owner" -msgstr "Risikoeigner" +#: templates/risks/item_control.html:21 +msgid "Delete Control" +msgstr "Maßnahme löschen" -#: templates/risks/item_risk.html:69 -msgid "updated at" -msgstr "Aktualisiert am" - -#: templates/risks/item_risk.html:70 -msgid "Resubmission" -msgstr "Wiedervorlagedatum" - -#: templates/risks/item_risk.html:80 -msgid "Risk assessment" -msgstr "Risikomanagement" - -#: templates/risks/item_risk.html:88 -msgid "Gross (before measures)" -msgstr "Brutto (vor Maßnahmen)" - -#: templates/risks/item_risk.html:93 templates/risks/item_risk.html:139 -#: templates/risks/list_risks.html:118 templates/risks/list_risks.html:122 -#: templates/risks/risk_matrix.html:25 -msgid "Likelihood" -msgstr "Eintritt" - -#: templates/risks/item_risk.html:94 templates/risks/item_risk.html:140 -msgid "Probability of occurrence" -msgstr "Eintrittswahrscheinlichkeit" - -#: templates/risks/item_risk.html:102 templates/risks/item_risk.html:148 -#: templates/risks/list_risks.html:119 templates/risks/list_risks.html:123 -#: templates/risks/risk_matrix.html:25 -msgid "Impact" -msgstr "Schaden" - -#: templates/risks/item_risk.html:103 templates/risks/item_risk.html:149 -msgid "Extent of damage" -msgstr "Schadensausmaß" - -#: templates/risks/item_risk.html:111 templates/risks/item_risk.html:112 -#: templates/risks/item_risk.html:157 templates/risks/item_risk.html:158 -#: templates/risks/list_risks.html:121 templates/risks/list_risks.html:125 -msgid "Level" -msgstr "Stufe" - -#: templates/risks/item_risk.html:120 templates/risks/item_risk.html:121 -#: templates/risks/item_risk.html:165 templates/risks/item_risk.html:167 -#: templates/risks/list_risks.html:120 templates/risks/list_risks.html:124 -#: templates/risks/risk_matrix.html:39 -msgid "Score" -msgstr "Score" - -#: templates/risks/item_risk.html:134 -msgid "Net (after measures)" -msgstr "Netto (nach Maßnahmen)" - -#: templates/risks/item_risk.html:173 -msgid "No net risk recorded yet." -msgstr "Kein Restrisiko vergeben" - -#: templates/risks/item_risk.html:184 -msgid "Save" -msgstr "Speichern" - -#: templates/risks/item_risk.html:198 -msgid "Measures" -msgstr "Maßnahmen" - -#: templates/risks/item_risk.html:207 -msgid "Deadline" -msgstr "Frist" - -#: templates/risks/item_risk.html:208 +#: templates/risks/item_control.html:34 templates/risks/item_risk.html:180 +#: templates/risks/list_controls.html:63 templates/risks/list_controls.html:99 msgid "Responsible" msgstr "Verantwortliche/r" -#: templates/risks/item_risk.html:209 +#: templates/risks/item_control.html:37 templates/risks/item_risk.html:181 +#: templates/risks/list_controls.html:102 msgid "Link" msgstr "Link" -#: templates/risks/item_risk.html:243 -msgid "No measures recorded." -msgstr "Keine Maßnahmen gefunden." +#: templates/risks/item_control.html:48 templates/risks/item_risk.html:179 +#: templates/risks/list_controls.html:101 +msgid "Deadline" +msgstr "Frist" -#: templates/risks/item_risk.html:261 -msgid "Reported on" -msgstr "Gemeldet am" - -#: templates/risks/item_risk.html:275 -msgid "No incidents recorded." -msgstr "Keine Vorfälle gefunden." - -#: templates/risks/item_risk.html:283 -msgid "History" -msgstr "" - -#: templates/risks/item_risk.html:290 -msgid "Time" -msgstr "Zeitpunkt" - -#: templates/risks/item_risk.html:292 -msgid "Action" -msgstr "Aktion" - -#: templates/risks/item_risk.html:306 -msgid "No History found." -msgstr "Keine Historie vorhanden" - -#: templates/risks/list_risks.html:9 -msgid "Filter" -msgstr "Filter" - -#: templates/risks/list_risks.html:83 +#: templates/risks/item_control.html:66 templates/risks/item_incident.html:58 #, fuzzy #| msgid "Risk Owner" msgid "Owner" msgstr "Risikoeigner" -#: templates/risks/list_risks.html:111 -msgid "Asset / Process" -msgstr "Asset / Prozess" +#: templates/risks/item_control.html:82 templates/risks/item_incident.html:74 +msgid "No linked risks." +msgstr "Keine zugehörigen Risiken" -#: templates/risks/list_risks.html:113 -msgid "Risk Owner" +#: templates/risks/item_control.html:95 templates/risks/item_incident.html:87 +#: templates/risks/item_risk.html:233 +msgid "Time" +msgstr "Zeitpunkt" + +#: templates/risks/item_control.html:97 templates/risks/item_incident.html:89 +#: templates/risks/item_risk.html:235 +msgid "Action" +msgstr "Aktion" + +#: templates/risks/item_control.html:108 templates/risks/item_incident.html:100 +#: templates/risks/item_risk.html:246 +msgid "No history found." +msgstr "Keine Historie vorhanden" + +#: templates/risks/item_incident.html:18 +msgid "Edit Incident" +msgstr "Vorfall bearbeiten" + +#: templates/risks/item_incident.html:21 +msgid "Delete Incident" +msgstr "Vorfall löschen" + +#: templates/risks/item_incident.html:35 templates/risks/item_risk.html:209 +#: templates/risks/list_incidents.html:100 +msgid "Reported on" +msgstr "Gemeldet am" + +#: templates/risks/item_risk.html:13 +msgid "Measures" +msgstr "Maßnahmen" + +#: templates/risks/item_risk.html:18 +msgid "Edit Risk" +msgstr "Risiko bearbeiten" + +#: templates/risks/item_risk.html:21 +msgid "Delete Risk" +msgstr "Risiko löschen" + +#: templates/risks/item_risk.html:39 +msgid "Protection goals" +msgstr "Schutzziele" + +#: templates/risks/item_risk.html:43 +msgid "Not yet assigned" +msgstr "Keine Zugewiesenen Ziele" + +#: templates/risks/item_risk.html:49 +msgid "Risk owner" msgstr "Risikoeigner" -#: templates/risks/list_risks.html:114 -msgid "Gross Risk" -msgstr "Bruttorisiko" +#: templates/risks/item_risk.html:52 +msgid "Resubmission" +msgstr "Wiedervorlagedatum" -#: templates/risks/list_risks.html:115 -msgid "Net Risk" -msgstr "Nettorisiko" +#: templates/risks/item_risk.html:65 +msgid "Risk assessment" +msgstr "Risikomanagement" -#: templates/risks/list_risks.html:195 -msgid "No residual risk defined" -msgstr "Noch kein Restrisiko definiert" +#: templates/risks/item_risk.html:74 +msgid "Gross (before measures)" +msgstr "Brutto (vor Maßnahmen)" -#: templates/risks/list_risks.html:201 -msgid "No risks present" -msgstr "Aktuell keine Risiken" +#: templates/risks/item_risk.html:80 templates/risks/item_risk.html:126 +#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79 +#: templates/risks/risk_matrix.html:121 +msgid "Likelihood" +msgstr "Eintritt" + +#: templates/risks/item_risk.html:89 templates/risks/item_risk.html:135 +#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79 +#: templates/risks/risk_matrix.html:121 +msgid "Impact" +msgstr "Schaden" + +#: templates/risks/item_risk.html:98 templates/risks/item_risk.html:144 +msgid "Level" +msgstr "Stufe" + +#: templates/risks/item_risk.html:107 templates/risks/item_risk.html:153 +msgid "Score" +msgstr "Score" + +#: templates/risks/item_risk.html:120 +msgid "Net (after measures)" +msgstr "Netto (nach Maßnahmen)" + +#: templates/risks/item_risk.html:160 +msgid "No net risk recorded yet." +msgstr "Kein Restrisiko vergeben" + +#: templates/risks/item_risk.html:194 +msgid "No measures recorded." +msgstr "Keine Maßnahmen gefunden." + +#: templates/risks/item_risk.html:220 +msgid "No incidents recorded." +msgstr "Keine Vorfälle gefunden." + +#: templates/risks/list_controls.html:21 templates/risks/list_controls.html:36 +#: templates/risks/list_controls.html:51 templates/risks/list_controls.html:66 +#: templates/risks/list_incidents.html:21 +#: templates/risks/list_incidents.html:36 +#: templates/risks/list_incidents.html:51 +#: templates/risks/list_incidents.html:66 templates/risks/list_risks.html:19 +#: templates/risks/list_risks.html:34 templates/risks/list_risks.html:49 +#: templates/risks/list_risks.html:64 templates/risks/list_risks.html:79 +#: templates/risks/notifications.html:13 +msgid "All" +msgstr "Alle" + +#: templates/risks/list_controls.html:82 templates/risks/list_incidents.html:82 +#: templates/risks/list_risks.html:95 +msgid "Reset filters" +msgstr "Filter zurücksetzen" + +#: templates/risks/list_controls.html:96 templates/risks/list_incidents.html:96 +#: templates/risks/list_risks.html:110 +msgid "No." +msgstr "Nr." + +#: templates/risks/list_controls.html:98 +msgid "Related Risk" +msgstr "Zugeordnete Risiken" + +#: templates/risks/list_controls.html:144 +msgid "No controls found." +msgstr "Keine Maßnahmen vorhanden" + +#: templates/risks/list_incidents.html:125 +msgid "No incidents found." +msgstr "Keine Vorfälle gefunden." + +#: templates/risks/list_risks.html:31 +msgid "Assets" +msgstr "Asset" + +#: templates/risks/list_risks.html:46 +msgid "Categories" +msgstr "Kategorie" + +#: templates/risks/list_risks.html:61 +msgid "Processes" +msgstr "Prozesse" + +#: templates/risks/list_risks.html:76 +msgid "Owners" +msgstr "Risikoeigner" + +#: templates/risks/list_risks.html:130 +msgid "Created" +msgstr "Erstellt" + +#: templates/risks/list_risks.html:131 templates/risks/list_risks.html:133 +msgid "by" +msgstr "von" + +#: templates/risks/list_risks.html:132 +msgid "Changed" +msgstr "Geändert" #: templates/risks/notifications.html:12 msgid "Unread" msgstr "Ungelesen" -#: templates/risks/notifications.html:13 -msgid "All" -msgstr "Alle" - #: templates/risks/notifications.html:20 msgid "Mark all as read" msgstr "Alle als gelesen Markieren" -#: templates/risks/notifications.html:33 +#: templates/risks/notifications.html:34 msgid "New" msgstr "Neu" -#: templates/risks/notifications.html:43 +#: templates/risks/notifications.html:49 msgid "Mark as read" msgstr "Als gelesen markieren" -#: templates/risks/notifications.html:53 +#: templates/risks/notifications.html:59 msgid "No notifications." msgstr "Keine Nachrichten" -#: templates/risks/risk_matrix.html:13 +#: templates/risks/risk_matrix.html:9 msgid "Detail View" msgstr "Detailansicht" -#: templates/risks/risk_matrix.html:54 +#: templates/risks/risk_matrix.html:60 msgid "Show" msgstr "Zeige" -#: templates/risks/risk_matrix.html:58 +#: templates/risks/risk_matrix.html:64 msgid "Gross" msgstr "Brutto" -#: templates/risks/risk_matrix.html:61 +#: templates/risks/risk_matrix.html:67 msgid "Net" msgstr "Netto" -#: templates/risks/risk_matrix.html:73 templates/risks/risk_matrix.html:115 -msgid "Impact \\\\ Likelihood" -msgstr "Schadensausmaß \\\\ Eintrittswahrscheinlichkeit" +#, python-brace-format +#~ msgid "Risk '{title}' {state}" +#~ msgstr "Risiko '{title}' {state}" + +#, python-brace-format +#~ msgid "Risk '{title}' deleted" +#~ msgstr "Risiko '{title}' gelöscht" + +#, python-brace-format +#~ msgid "Control '{title}' {state}" +#~ msgstr "Maßnahme '{title}' {state}" + +#, python-brace-format +#~ msgid "Control '{title}' deleted" +#~ msgstr "Maßnahme '{title}' gelöscht" + +#, python-brace-format +#~ msgid "Review required for risk '{t}'" +#~ msgstr "Prüfung benötigt für Risiko '{t}'" + +#, python-brace-format +#~ msgid "Review completed for risk '{t}'" +#~ msgstr "Prüfung Abgeschlossen für Risiko '{t}'" + +#, python-brace-format +#~ msgid "Residual risk {state} for '{t}'" +#~ msgstr "Restrisiko {state} für '{t}'" + +#, python-brace-format +#~ msgid "Residual risk deleted for '{t}'" +#~ msgstr "Restrisiko für '{t}' gelöscht" + +#, python-brace-format +#~ msgid "Incident '{t}' {s}" +#~ msgstr "Vorfall '{t}' {s}" + +#, python-brace-format +#~ msgid "Incident '{t}' deleted" +#~ msgstr "Vorfall '{t}' gelöscht" + +#~ msgid "Update status" +#~ msgstr "Status Aktualisiert" + +#~ msgid "updated at" +#~ msgstr "Aktualisiert am" + +#~ msgid "Probability of occurrence" +#~ msgstr "Eintrittswahrscheinlichkeit" + +#~ msgid "Extent of damage" +#~ msgstr "Schadensausmaß" + +#~ msgid "Save" +#~ msgstr "Speichern" + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Asset / Process" +#~ msgstr "Asset / Prozess" + +#~ msgid "Risk Owner" +#~ msgstr "Risikoeigner" + +#~ msgid "Gross Risk" +#~ msgstr "Bruttorisiko" + +#~ msgid "No residual risk defined" +#~ msgstr "Noch kein Restrisiko definiert" + +#~ msgid "No risks present" +#~ msgstr "Aktuell keine Risiken" + +#~ msgid "Impact \\\\ Likelihood" +#~ msgstr "Schadensausmaß \\\\ Eintrittswahrscheinlichkeit" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index bde0ace..aa7d204 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 10:17+0200\n" +"POT-Creation-Date: 2025-09-12 16:50+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,560 +18,527 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: risks/admin.py:6 risks/admin.py:8 +#: risks/admin.py:21 risks/admin.py:23 msgid "Administration" msgstr "" -#: risks/admin.py:7 +#: risks/admin.py:22 msgid "Admin" msgstr "" -#: risks/admin.py:15 risks/models.py:36 templates/risks/dashboard.html:75 -#: templates/risks/dashboard.html:80 templates/risks/dashboard.html:85 -#: templates/risks/list_risks.html:97 +#: risks/admin.py:33 risks/models.py:50 templates/risks/list_incidents.html:33 +#: templates/risks/list_risks.html:16 msgid "Risks" msgstr "" -#: risks/admin.py:16 risks/models.py:190 templates/base.html:38 -#: templates/risks/list_risks.html:31 +#: risks/admin.py:34 risks/models.py:184 templates/base.html:38 +#: templates/risks/item_control.html:5 templates/risks/list_controls.html:5 msgid "Controls" msgstr "" -#: risks/admin.py:17 +#: risks/admin.py:35 msgid "Residual risks" msgstr "" -#: risks/admin.py:18 +#: risks/admin.py:36 msgid "Reviews" msgstr "" -#: risks/admin.py:19 risks/models.py:258 templates/base.html:39 -#: templates/risks/item_risk.html:252 +#: risks/admin.py:37 risks/models.py:255 templates/base.html:39 +#: templates/risks/item_incident.html:5 templates/risks/item_risk.html:14 +#: templates/risks/list_incidents.html:5 templates/risks/list_incidents.html:18 msgid "Incidents" msgstr "" -#: risks/admin.py:20 +#: risks/admin.py:38 msgid "Users" msgstr "" -#: risks/admin.py:133 risks/models.py:326 templates/risks/item_risk.html:291 +#: risks/admin.py:159 risks/models.py:362 templates/risks/item_control.html:96 +#: templates/risks/item_incident.html:88 templates/risks/item_risk.html:234 msgid "User" msgstr "" -#: risks/admin.py:139 +#: risks/admin.py:163 msgid "Message" msgstr "" -#: risks/admin.py:147 +#: risks/admin.py:169 msgid "Mark selected as read" msgstr "" -#: risks/admin.py:150 +#: risks/admin.py:172 #, python-format msgid "%(n)d notifications marked as read." msgstr "" -#: risks/admin.py:152 +#: risks/admin.py:174 msgid "Mark selected as unread" msgstr "" -#: risks/admin.py:155 +#: risks/admin.py:177 #, python-format msgid "%(n)d notifications marked as unread." msgstr "" -#: risks/admin.py:157 +#: risks/admin.py:179 msgid "Mark selected as sent" msgstr "" -#: risks/admin.py:160 +#: risks/admin.py:182 #, python-format msgid "%(n)d notifications marked as sent." msgstr "" -#: risks/admin.py:162 +#: risks/admin.py:184 msgid "Mark selected as unsent" msgstr "" -#: risks/admin.py:165 +#: risks/admin.py:187 #, python-format msgid "%(n)d notifications marked as unsent." msgstr "" -#: risks/admin.py:182 +#: risks/admin.py:199 msgid "Extra recipients" msgstr "" -#: risks/admin.py:190 +#: risks/admin.py:211 msgid "SSO Information" msgstr "" -#: risks/admin.py:199 +#: risks/admin.py:221 msgid "Risks Owned" msgstr "" -#: risks/admin.py:203 +#: risks/admin.py:225 msgid "Controls Responsible" msgstr "" -#: risks/apps.py:7 templates/base.html:7 templates/base.html:32 +#: risks/apps.py:12 templates/base.html:7 templates/base.html:32 msgid "Risk Management" msgstr "" -#: risks/forms.py:9 risks/forms.py:16 risks/forms.py:23 risks/models.py:73 -#: templates/risks/item_risk.html:64 templates/risks/item_risk.html:206 -#: templates/risks/item_risk.html:260 +#: risks/forms.py:13 risks/models.py:87 templates/risks/dashboard.html:83 +#: templates/risks/dashboard.html:108 templates/risks/item_control.html:35 +#: templates/risks/item_incident.html:36 templates/risks/item_risk.html:46 +#: templates/risks/item_risk.html:178 templates/risks/item_risk.html:208 +#: templates/risks/list_controls.html:48 templates/risks/list_controls.html:100 +#: templates/risks/list_incidents.html:48 +#: templates/risks/list_incidents.html:99 templates/risks/list_risks.html:128 msgid "Status" msgstr "" -#: risks/forms.py:30 risks/models.py:42 templates/risks/item_risk.html:181 +#: risks/forms.py:48 risks/models.py:56 msgid "Review required" msgstr "" -#: risks/models.py:35 templates/risks/item_risk.html:11 -#: templates/risks/list_risks.html:18 templates/risks/list_risks.html:110 +#: risks/models.py:49 templates/risks/item_control.html:65 +#: templates/risks/item_incident.html:57 templates/risks/item_risk.html:6 +#: templates/risks/list_controls.html:33 templates/risks/list_risks.html:116 msgid "Risk" msgstr "" -#: risks/models.py:39 +#: risks/models.py:53 msgid "Open" msgstr "" -#: risks/models.py:40 risks/models.py:262 +#: risks/models.py:54 risks/models.py:259 msgid "In Progress" msgstr "" -#: risks/models.py:41 risks/models.py:263 +#: risks/models.py:55 risks/models.py:260 msgid "Closed" msgstr "" -#: risks/models.py:45 +#: risks/models.py:59 msgid "Very low – occurs less than once every 5 years" msgstr "" -#: risks/models.py:46 +#: risks/models.py:60 msgid "Low – once every 1–5 years" msgstr "" -#: risks/models.py:47 +#: risks/models.py:61 msgid "Likely – once per year or more" msgstr "" -#: risks/models.py:48 +#: risks/models.py:62 msgid "Very likely – multiple times per year/monthly" msgstr "" -#: risks/models.py:51 +#: risks/models.py:65 msgid "Very Low (< 1,000 € – minor operational impact)" msgstr "" -#: risks/models.py:52 +#: risks/models.py:66 msgid "Low (1,000–5,000 € – local impact)" msgstr "" -#: risks/models.py:53 +#: risks/models.py:67 msgid "High (5,000–15,000 € – team-level impact)" msgstr "" -#: risks/models.py:54 +#: risks/models.py:68 msgid "Severe (50,000–100,000 € – regional impact)" msgstr "" -#: risks/models.py:55 +#: risks/models.py:69 msgid "Critical (> 100,000 € – existential threat)" msgstr "" -#: risks/models.py:58 templates/risks/dashboard.html:74 +#: risks/models.py:72 templates/risks/dashboard.html:57 +#: templates/risks/list_risks.html:112 msgid "Confidentiality" msgstr "" -#: risks/models.py:59 templates/risks/dashboard.html:79 +#: risks/models.py:73 templates/risks/dashboard.html:63 +#: templates/risks/list_risks.html:113 msgid "Integrity" msgstr "" -#: risks/models.py:60 templates/risks/dashboard.html:84 +#: risks/models.py:74 templates/risks/dashboard.html:69 +#: templates/risks/list_risks.html:114 msgid "Availability" msgstr "" -#: risks/models.py:64 risks/models.py:200 risks/models.py:265 -#: templates/risks/item_risk.html:205 +#: risks/models.py:78 risks/models.py:194 risks/models.py:263 +#: templates/risks/item_risk.html:177 msgid "Title" msgstr "" -#: risks/models.py:65 risks/models.py:266 +#: risks/models.py:79 risks/models.py:264 templates/risks/item_control.html:52 +#: templates/risks/item_incident.html:44 msgid "Description" msgstr "" -#: risks/models.py:66 templates/risks/item_risk.html:53 -#: templates/risks/list_risks.html:57 +#: risks/models.py:80 templates/risks/item_control.html:68 +#: templates/risks/item_incident.html:60 templates/risks/item_risk.html:35 +#: templates/risks/list_risks.html:119 msgid "Asset" msgstr "" -#: risks/models.py:67 templates/risks/item_risk.html:54 -#: templates/risks/list_risks.html:70 +#: risks/models.py:81 templates/risks/item_control.html:69 +#: templates/risks/item_incident.html:61 templates/risks/item_risk.html:36 +#: templates/risks/list_risks.html:125 msgid "Process" msgstr "" -#: risks/models.py:68 templates/risks/item_risk.html:55 -#: templates/risks/list_risks.html:44 templates/risks/list_risks.html:112 +#: risks/models.py:82 templates/risks/item_control.html:67 +#: templates/risks/item_incident.html:59 templates/risks/item_risk.html:37 +#: templates/risks/list_risks.html:122 msgid "Category" msgstr "" -#: risks/models.py:69 templates/risks/item_risk.html:68 +#: risks/models.py:83 templates/risks/item_control.html:46 +#: templates/risks/item_incident.html:39 templates/risks/item_risk.html:50 msgid "Created at" msgstr "" -#: risks/models.py:70 +#: risks/models.py:84 templates/risks/item_control.html:47 +#: templates/risks/item_incident.html:40 templates/risks/item_risk.html:51 msgid "Updated at" msgstr "" -#: risks/models.py:71 +#: risks/models.py:85 templates/risks/item_risk.html:58 msgid "Effects" msgstr "" -#: risks/models.py:133 +#: risks/models.py:140 msgid "Residual Risk" msgstr "" -#: risks/models.py:134 +#: risks/models.py:141 msgid "Residual Risks" msgstr "" -#: risks/models.py:189 +#: risks/models.py:183 templates/risks/item_control.html:33 +#: templates/risks/list_controls.html:18 templates/risks/list_controls.html:97 msgid "Control" msgstr "" -#: risks/models.py:193 +#: risks/models.py:187 msgid "Planned" msgstr "" -#: risks/models.py:194 +#: risks/models.py:188 msgid "In progress" msgstr "" -#: risks/models.py:195 +#: risks/models.py:189 msgid "Completed" msgstr "" -#: risks/models.py:196 +#: risks/models.py:190 msgid "Verified" msgstr "" -#: risks/models.py:197 +#: risks/models.py:191 msgid "Rejected" msgstr "" -#: risks/models.py:226 +#: risks/models.py:222 msgid "Auditlog" msgstr "" -#: risks/models.py:227 +#: risks/models.py:223 msgid "Auditlogs" msgstr "" -#: risks/models.py:257 templates/risks/item_risk.html:259 +#: risks/models.py:254 templates/risks/item_incident.html:33 +#: templates/risks/item_risk.html:207 templates/risks/list_incidents.html:97 msgid "Incident" msgstr "" -#: risks/models.py:261 +#: risks/models.py:258 msgid "Opened" msgstr "" -#: risks/models.py:267 +#: risks/models.py:265 msgid "Date reported" msgstr "" -#: risks/models.py:269 +#: risks/models.py:268 templates/risks/item_incident.html:34 +#: templates/risks/list_incidents.html:63 +#: templates/risks/list_incidents.html:101 msgid "Reported by" msgstr "" -#: risks/models.py:279 risks/utils.py:119 +#: risks/models.py:284 +msgid "Risk created" +msgstr "" + +#: risks/models.py:285 +msgid "Risk updated" +msgstr "" + +#: risks/models.py:286 +msgid "Risk deleted" +msgstr "" + +#: risks/models.py:287 +msgid "Risk review required" +msgstr "" + +#: risks/models.py:288 +msgid "Risk review completed" +msgstr "" + +#: risks/models.py:290 +msgid "Control created" +msgstr "" + +#: risks/models.py:291 +msgid "Control updated" +msgstr "" + +#: risks/models.py:292 +msgid "Control deleted" +msgstr "" + +#: risks/models.py:294 +msgid "Residual created" +msgstr "" + +#: risks/models.py:295 +msgid "Residual updated" +msgstr "" + +#: risks/models.py:296 +msgid "Residual deleted" +msgstr "" + +#: risks/models.py:297 +msgid "Residual review required" +msgstr "" + +#: risks/models.py:298 +msgid "Residual review completed" +msgstr "" + +#: risks/models.py:300 +msgid "Incident created" +msgstr "" + +#: risks/models.py:301 +msgid "Incident updated" +msgstr "" + +#: risks/models.py:302 +msgid "Incident deleted" +msgstr "" + +#: risks/models.py:304 +msgid "User created" +msgstr "" + +#: risks/models.py:305 +msgid "User deleted" +msgstr "" + +#: risks/models.py:314 risks/utils.py:142 msgid "Notification" msgstr "" -#: risks/models.py:280 templates/base.html:80 +#: risks/models.py:315 templates/base.html:80 #: templates/risks/notifications.html:4 msgid "Notifications" msgstr "" -#: risks/models.py:295 -msgid "Risk created" -msgstr "" - -#: risks/models.py:296 -msgid "Risk updated" -msgstr "" - -#: risks/models.py:297 -msgid "Risk deleted" -msgstr "" - -#: risks/models.py:298 -msgid "Risk review required" -msgstr "" - -#: risks/models.py:299 -msgid "Risk review completed" -msgstr "" - -#: risks/models.py:301 -msgid "Control created" -msgstr "" - -#: risks/models.py:302 -msgid "Control updated" -msgstr "" - -#: risks/models.py:303 -msgid "Control deleted" -msgstr "" - -#: risks/models.py:305 -msgid "Residual created" -msgstr "" - -#: risks/models.py:306 -msgid "Residual updated" -msgstr "" - -#: risks/models.py:307 -msgid "Residual deleted" -msgstr "" - -#: risks/models.py:308 -msgid "Residual review required" -msgstr "" - -#: risks/models.py:309 -msgid "Residual review completed" -msgstr "" - -#: risks/models.py:311 -msgid "Incident created" -msgstr "" - -#: risks/models.py:312 -msgid "Incident updated" -msgstr "" - -#: risks/models.py:313 -msgid "Incident deleted" -msgstr "" - -#: risks/models.py:315 -msgid "User created" -msgstr "" - -#: risks/models.py:316 -msgid "User deleted" -msgstr "" - -#: risks/models.py:371 +#: risks/models.py:411 msgid "Notification rule" msgstr "" -#: risks/models.py:372 +#: risks/models.py:412 msgid "Notification rules" msgstr "" -#: risks/models.py:375 +#: risks/models.py:415 msgid "Event" msgstr "" -#: risks/models.py:380 +#: risks/models.py:420 msgid "Show in app" msgstr "" -#: risks/models.py:381 +#: risks/models.py:421 msgid "Send via email" msgstr "" -#: risks/models.py:385 +#: risks/models.py:425 msgid "Send to owner/responsible/reporter (if available)" msgstr "" -#: risks/models.py:389 +#: risks/models.py:428 msgid "Send to all staff" msgstr "" -#: risks/models.py:393 +#: risks/models.py:430 msgid "Extra recipients (emails, comma or newline separated)" msgstr "" -#: risks/signals.py:57 +#: risks/signals.py:71 #, python-brace-format msgid "User '{u}' created" msgstr "" -#: risks/signals.py:62 +#: risks/signals.py:79 #, python-brace-format msgid "User '{u}' deleted" msgstr "" -#: risks/signals.py:70 -#, python-brace-format -msgid "Risk '{title}' {state}" -msgstr "" - -#: risks/signals.py:72 risks/signals.py:166 risks/signals.py:212 -#: risks/signals.py:275 risks/signals.py:369 risks/signals.py:411 -msgid "created" -msgstr "" - -#: risks/signals.py:72 risks/signals.py:166 risks/signals.py:212 -#: risks/signals.py:275 risks/signals.py:369 risks/signals.py:411 -msgid "updated" -msgstr "" - -#: risks/signals.py:78 -#, python-brace-format -msgid "Risk '{title}' deleted" -msgstr "" - -#: risks/signals.py:117 +#: risks/signals.py:102 #, python-brace-format msgid "Risk created: {t}" msgstr "" -#: risks/signals.py:123 +#: risks/signals.py:121 #, python-brace-format msgid "Risk updated: {t}" msgstr "" -#: risks/signals.py:143 +#: risks/signals.py:134 #, python-brace-format msgid "Risk deleted: {t}" msgstr "" -#: risks/signals.py:164 +#: risks/signals.py:181 #, python-brace-format -msgid "Control '{title}' {state}" +msgid "Control {e}: {t}" msgstr "" -#: risks/signals.py:173 -#, python-brace-format -msgid "Control '{title}' deleted" +#: risks/signals.py:182 risks/signals.py:317 +msgid "created" msgstr "" -#: risks/signals.py:211 -#, python-brace-format -msgid "Control {event}: {t}" +#: risks/signals.py:182 risks/signals.py:317 +msgid "updated" msgstr "" -#: risks/signals.py:231 +#: risks/signals.py:196 #, python-brace-format msgid "Control deleted: {t}" msgstr "" -#: risks/signals.py:246 +#: risks/signals.py:213 #, python-brace-format msgid "Review required for risk '{t}' due to control change" msgstr "" -#: risks/signals.py:265 -#, python-brace-format -msgid "Review required for risk '{t}'" -msgstr "" - -#: risks/signals.py:270 -#, python-brace-format -msgid "Review completed for risk '{t}'" -msgstr "" - -#: risks/signals.py:274 -#, python-brace-format -msgid "Residual risk {state} for '{t}'" -msgstr "" - -#: risks/signals.py:279 -#, python-brace-format -msgid "Residual risk deleted for '{t}'" -msgstr "" - -#: risks/signals.py:316 +#: risks/signals.py:239 #, python-brace-format msgid "Residual created for risk: {t}" msgstr "" -#: risks/signals.py:328 +#: risks/signals.py:257 #, python-brace-format msgid "Residual review required for risk: {t}" msgstr "" -#: risks/signals.py:334 +#: risks/signals.py:260 #, python-brace-format msgid "Residual review completed for risk: {t}" msgstr "" -#: risks/signals.py:340 +#: risks/signals.py:263 #, python-brace-format msgid "Residual updated for risk: {t}" msgstr "" -#: risks/signals.py:358 +#: risks/signals.py:280 #, python-brace-format msgid "Residual deleted for risk: {t}" msgstr "" -#: risks/signals.py:369 +#: risks/signals.py:316 #, python-brace-format -msgid "Incident '{t}' {s}" +msgid "Incident {e}: {t}" msgstr "" -#: risks/signals.py:374 -#, python-brace-format -msgid "Incident '{t}' deleted" -msgstr "" - -#: risks/signals.py:410 -#, python-brace-format -msgid "Incident {event}: {t}" -msgstr "" - -#: risks/signals.py:442 +#: risks/signals.py:331 #, python-brace-format msgid "Incident deleted: {t}" msgstr "" -#: risks/utils.py:53 risks/utils.py:67 +#: risks/utils.py:66 #, python-brace-format msgid "Follow-up reached: review required for risk '{t}'" msgstr "" -#: risks/views.py:345 +#: risks/views.py:277 msgid "Notification marked as read." msgstr "" -#: risks/views.py:353 +#: risks/views.py:287 msgid "All notifications marked as read." msgstr "" -#: risks/views.py:370 +#: risks/views.py:306 msgid "Risk status updated." msgstr "" -#: risks/views.py:384 +#: risks/views.py:322 msgid "Control status updated." msgstr "" -#: risks/views.py:398 +#: risks/views.py:338 msgid "Incident status updated." msgstr "" -#: risks/views.py:414 +#: risks/views.py:355 msgid "Residual review flag updated." msgstr "" -#: templates/base.html:34 templates/risks/dashboard.html:9 +#: templates/base.html:34 templates/risks/dashboard.html:4 msgid "Dashboard" msgstr "" #: templates/base.html:35 templates/risks/risk_matrix.html:4 -#: templates/risks/risk_matrix.html:12 templates/risks/risk_matrix.html:18 +#: templates/risks/risk_matrix.html:8 msgid "Risk Matrix" msgstr "" -#: templates/base.html:37 templates/risks/item_risk.html:4 +#: templates/base.html:37 templates/risks/item_risk.html:5 #: templates/risks/list_risks.html:4 msgid "Risk analysis" msgstr "" @@ -600,231 +567,283 @@ msgstr "" msgid "Dark Mode" msgstr "" -#: templates/risks/dashboard.html:12 +#: templates/risks/dashboard.html:13 msgid "Overview of Risks, Controls and Incidents" msgstr "" -#: templates/risks/dashboard.html:25 +#: templates/risks/dashboard.html:28 msgid "Total Risks" msgstr "" -#: templates/risks/dashboard.html:33 +#: templates/risks/dashboard.html:36 msgid "Residual Risks Needing Review" msgstr "" -#: templates/risks/dashboard.html:41 +#: templates/risks/dashboard.html:44 msgid "Unread Notifications" msgstr "" -#: templates/risks/dashboard.html:48 -msgid "Controls by Status" -msgstr "" - -#: templates/risks/dashboard.html:58 -msgid "Incidents by Status" -msgstr "" - -#: templates/risks/dashboard.html:68 +#: templates/risks/dashboard.html:53 msgid "Risks by CIA" msgstr "" -#: templates/risks/item_risk.html:18 +#: templates/risks/dashboard.html:78 +msgid "Controls by Status" +msgstr "" + +#: templates/risks/dashboard.html:84 templates/risks/dashboard.html:109 +msgid "Count" +msgstr "" + +#: templates/risks/dashboard.html:94 templates/risks/dashboard.html:119 +#: templates/risks/list_risks.html:172 +msgid "No data" +msgstr "" + +#: templates/risks/dashboard.html:103 +msgid "Incidents by Status" +msgstr "" + +#: templates/risks/item_control.html:13 templates/risks/item_incident.html:13 +#: templates/risks/item_risk.html:12 msgid "Overview" msgstr "" -#: templates/risks/item_risk.html:34 -msgid "Update status" +#: templates/risks/item_control.html:14 templates/risks/item_incident.html:14 +#: templates/risks/list_incidents.html:98 +msgid "Linked Risks" msgstr "" -#: templates/risks/item_risk.html:57 -msgid "Protection goals" -msgstr "" - -#: templates/risks/item_risk.html:61 -msgid "Not yet assigned" -msgstr "" - -#: templates/risks/item_risk.html:67 -msgid "Risk owner" -msgstr "" - -#: templates/risks/item_risk.html:69 -msgid "updated at" -msgstr "" - -#: templates/risks/item_risk.html:70 -msgid "Resubmission" -msgstr "" - -#: templates/risks/item_risk.html:80 -msgid "Risk assessment" -msgstr "" - -#: templates/risks/item_risk.html:88 -msgid "Gross (before measures)" -msgstr "" - -#: templates/risks/item_risk.html:93 templates/risks/item_risk.html:139 -#: templates/risks/list_risks.html:118 templates/risks/list_risks.html:122 -#: templates/risks/risk_matrix.html:25 -msgid "Likelihood" -msgstr "" - -#: templates/risks/item_risk.html:94 templates/risks/item_risk.html:140 -msgid "Probability of occurrence" -msgstr "" - -#: templates/risks/item_risk.html:102 templates/risks/item_risk.html:148 -#: templates/risks/list_risks.html:119 templates/risks/list_risks.html:123 -#: templates/risks/risk_matrix.html:25 -msgid "Impact" -msgstr "" - -#: templates/risks/item_risk.html:103 templates/risks/item_risk.html:149 -msgid "Extent of damage" -msgstr "" - -#: templates/risks/item_risk.html:111 templates/risks/item_risk.html:112 -#: templates/risks/item_risk.html:157 templates/risks/item_risk.html:158 -#: templates/risks/list_risks.html:121 templates/risks/list_risks.html:125 -msgid "Level" -msgstr "" - -#: templates/risks/item_risk.html:120 templates/risks/item_risk.html:121 -#: templates/risks/item_risk.html:165 templates/risks/item_risk.html:167 -#: templates/risks/list_risks.html:120 templates/risks/list_risks.html:124 -#: templates/risks/risk_matrix.html:39 -msgid "Score" -msgstr "" - -#: templates/risks/item_risk.html:134 -msgid "Net (after measures)" -msgstr "" - -#: templates/risks/item_risk.html:173 -msgid "No net risk recorded yet." -msgstr "" - -#: templates/risks/item_risk.html:184 -msgid "Save" -msgstr "" - -#: templates/risks/item_risk.html:198 -msgid "Measures" -msgstr "" - -#: templates/risks/item_risk.html:207 -msgid "Deadline" -msgstr "" - -#: templates/risks/item_risk.html:208 -msgid "Responsible" -msgstr "" - -#: templates/risks/item_risk.html:209 -msgid "Link" -msgstr "" - -#: templates/risks/item_risk.html:243 -msgid "No measures recorded." -msgstr "" - -#: templates/risks/item_risk.html:261 -msgid "Reported on" -msgstr "" - -#: templates/risks/item_risk.html:275 -msgid "No incidents recorded." -msgstr "" - -#: templates/risks/item_risk.html:283 +#: templates/risks/item_control.html:15 templates/risks/item_incident.html:15 +#: templates/risks/item_risk.html:15 msgid "History" msgstr "" -#: templates/risks/item_risk.html:290 -msgid "Time" +#: templates/risks/item_control.html:18 +msgid "Edit Control" msgstr "" -#: templates/risks/item_risk.html:292 -msgid "Action" +#: templates/risks/item_control.html:21 +msgid "Delete Control" msgstr "" -#: templates/risks/item_risk.html:306 -msgid "No History found." +#: templates/risks/item_control.html:34 templates/risks/item_risk.html:180 +#: templates/risks/list_controls.html:63 templates/risks/list_controls.html:99 +msgid "Responsible" msgstr "" -#: templates/risks/list_risks.html:9 -msgid "Filter" +#: templates/risks/item_control.html:37 templates/risks/item_risk.html:181 +#: templates/risks/list_controls.html:102 +msgid "Link" msgstr "" -#: templates/risks/list_risks.html:83 +#: templates/risks/item_control.html:48 templates/risks/item_risk.html:179 +#: templates/risks/list_controls.html:101 +msgid "Deadline" +msgstr "" + +#: templates/risks/item_control.html:66 templates/risks/item_incident.html:58 msgid "Owner" msgstr "" -#: templates/risks/list_risks.html:111 -msgid "Asset / Process" +#: templates/risks/item_control.html:82 templates/risks/item_incident.html:74 +msgid "No linked risks." msgstr "" -#: templates/risks/list_risks.html:113 -msgid "Risk Owner" +#: templates/risks/item_control.html:95 templates/risks/item_incident.html:87 +#: templates/risks/item_risk.html:233 +msgid "Time" msgstr "" -#: templates/risks/list_risks.html:114 -msgid "Gross Risk" +#: templates/risks/item_control.html:97 templates/risks/item_incident.html:89 +#: templates/risks/item_risk.html:235 +msgid "Action" msgstr "" -#: templates/risks/list_risks.html:115 -msgid "Net Risk" +#: templates/risks/item_control.html:108 templates/risks/item_incident.html:100 +#: templates/risks/item_risk.html:246 +msgid "No history found." msgstr "" -#: templates/risks/list_risks.html:195 -msgid "No residual risk defined" +#: templates/risks/item_incident.html:18 +msgid "Edit Incident" msgstr "" -#: templates/risks/list_risks.html:201 -msgid "No risks present" +#: templates/risks/item_incident.html:21 +msgid "Delete Incident" +msgstr "" + +#: templates/risks/item_incident.html:35 templates/risks/item_risk.html:209 +#: templates/risks/list_incidents.html:100 +msgid "Reported on" +msgstr "" + +#: templates/risks/item_risk.html:13 +msgid "Measures" +msgstr "" + +#: templates/risks/item_risk.html:18 +msgid "Edit Risk" +msgstr "" + +#: templates/risks/item_risk.html:21 +msgid "Delete Risk" +msgstr "" + +#: templates/risks/item_risk.html:39 +msgid "Protection goals" +msgstr "" + +#: templates/risks/item_risk.html:43 +msgid "Not yet assigned" +msgstr "" + +#: templates/risks/item_risk.html:49 +msgid "Risk owner" +msgstr "" + +#: templates/risks/item_risk.html:52 +msgid "Resubmission" +msgstr "" + +#: templates/risks/item_risk.html:65 +msgid "Risk assessment" +msgstr "" + +#: templates/risks/item_risk.html:74 +msgid "Gross (before measures)" +msgstr "" + +#: templates/risks/item_risk.html:80 templates/risks/item_risk.html:126 +#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79 +#: templates/risks/risk_matrix.html:121 +msgid "Likelihood" +msgstr "" + +#: templates/risks/item_risk.html:89 templates/risks/item_risk.html:135 +#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79 +#: templates/risks/risk_matrix.html:121 +msgid "Impact" +msgstr "" + +#: templates/risks/item_risk.html:98 templates/risks/item_risk.html:144 +msgid "Level" +msgstr "" + +#: templates/risks/item_risk.html:107 templates/risks/item_risk.html:153 +msgid "Score" +msgstr "" + +#: templates/risks/item_risk.html:120 +msgid "Net (after measures)" +msgstr "" + +#: templates/risks/item_risk.html:160 +msgid "No net risk recorded yet." +msgstr "" + +#: templates/risks/item_risk.html:194 +msgid "No measures recorded." +msgstr "" + +#: templates/risks/item_risk.html:220 +msgid "No incidents recorded." +msgstr "" + +#: templates/risks/list_controls.html:21 templates/risks/list_controls.html:36 +#: templates/risks/list_controls.html:51 templates/risks/list_controls.html:66 +#: templates/risks/list_incidents.html:21 +#: templates/risks/list_incidents.html:36 +#: templates/risks/list_incidents.html:51 +#: templates/risks/list_incidents.html:66 templates/risks/list_risks.html:19 +#: templates/risks/list_risks.html:34 templates/risks/list_risks.html:49 +#: templates/risks/list_risks.html:64 templates/risks/list_risks.html:79 +#: templates/risks/notifications.html:13 +msgid "All" +msgstr "" + +#: templates/risks/list_controls.html:82 templates/risks/list_incidents.html:82 +#: templates/risks/list_risks.html:95 +msgid "Reset filters" +msgstr "" + +#: templates/risks/list_controls.html:96 templates/risks/list_incidents.html:96 +#: templates/risks/list_risks.html:110 +msgid "No." +msgstr "" + +#: templates/risks/list_controls.html:98 +msgid "Related Risk" +msgstr "" + +#: templates/risks/list_controls.html:144 +msgid "No controls found." +msgstr "" + +#: templates/risks/list_incidents.html:125 +msgid "No incidents found." +msgstr "" + +#: templates/risks/list_risks.html:31 +msgid "Assets" +msgstr "" + +#: templates/risks/list_risks.html:46 +msgid "Categories" +msgstr "" + +#: templates/risks/list_risks.html:61 +msgid "Processes" +msgstr "" + +#: templates/risks/list_risks.html:76 +msgid "Owners" +msgstr "" + +#: templates/risks/list_risks.html:130 +msgid "Created" +msgstr "" + +#: templates/risks/list_risks.html:131 templates/risks/list_risks.html:133 +msgid "by" +msgstr "" + +#: templates/risks/list_risks.html:132 +msgid "Changed" msgstr "" #: templates/risks/notifications.html:12 msgid "Unread" msgstr "" -#: templates/risks/notifications.html:13 -msgid "All" -msgstr "" - #: templates/risks/notifications.html:20 msgid "Mark all as read" msgstr "" -#: templates/risks/notifications.html:33 +#: templates/risks/notifications.html:34 msgid "New" msgstr "" -#: templates/risks/notifications.html:43 +#: templates/risks/notifications.html:49 msgid "Mark as read" msgstr "" -#: templates/risks/notifications.html:53 +#: templates/risks/notifications.html:59 msgid "No notifications." msgstr "" -#: templates/risks/risk_matrix.html:13 +#: templates/risks/risk_matrix.html:9 msgid "Detail View" msgstr "" -#: templates/risks/risk_matrix.html:54 +#: templates/risks/risk_matrix.html:60 msgid "Show" msgstr "" -#: templates/risks/risk_matrix.html:58 +#: templates/risks/risk_matrix.html:64 msgid "Gross" msgstr "" -#: templates/risks/risk_matrix.html:61 +#: templates/risks/risk_matrix.html:67 msgid "Net" msgstr "" - -#: templates/risks/risk_matrix.html:73 templates/risks/risk_matrix.html:115 -msgid "Impact \\\\ Likelihood" -msgstr "" diff --git a/static/css/design.css b/static/css/design.css index b54a65c..0da51f1 100644 --- a/static/css/design.css +++ b/static/css/design.css @@ -406,6 +406,22 @@ body.dark-mode td { border-color: var(--border-color); } +body.dark-mode .table.table tbody tr { + transition: background-color 0.2s ease, color 0.2s ease; +} + +body.dark-mode .table.table tbody tr:hover { + background-color: #2a2a2a !important; + color: #ffffff !important; + cursor: pointer; +} + +/* Optional: auch für die Zellen, falls nötig */ +body.dark-mode .table.table tbody tr:hover td { + background-color: #2a2a2a !important; + color: #ffffff !important; +} + /* ========================= Inputs / Forms ========================= */ diff --git a/static/js/chart.js b/static/js/chart.js new file mode 100644 index 0000000..e69de29 diff --git a/templates/base.html b/templates/base.html index b8bb779..e617ce7 100644 --- a/templates/base.html +++ b/templates/base.html @@ -15,7 +15,7 @@