From b886f0a641e2c5434cd0ad24ca493f138c1b77d7 Mon Sep 17 00:00:00 2001 From: eric-intuitem <71850047+eric-intuitem@users.noreply.github.com> Date: Wed, 11 Dec 2024 19:28:57 +0100 Subject: [PATCH 1/4] translate emails for TPRM and pwd reset --- backend/core/locale/fr/LC_MESSAGES/django.mo | Bin 20458 -> 20695 bytes backend/core/locale/fr/LC_MESSAGES/django.po | 670 +++++++++++------- .../core/management/commands/reset_mail.py | 4 +- backend/locale/fr/LC_MESSAGES/django.mo | Bin 461 -> 559 bytes backend/locale/fr/LC_MESSAGES/django.po | 412 +++++++++-- 5 files changed, 783 insertions(+), 303 deletions(-) diff --git a/backend/core/locale/fr/LC_MESSAGES/django.mo b/backend/core/locale/fr/LC_MESSAGES/django.mo index c071bbe2811fe6629d7c8fbf0704f87b432bec33..d30aac665bee5e39c11c615541fb6e72aec09fb7 100644 GIT binary patch delta 6312 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 delta 6127 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\n" "Language-Team: LANGUAGE \n" @@ -30,7 +30,7 @@ msgstr "Menu" msgid "Created at" msgstr "Créé le" -#: core/base_models.py:11 +#: core/base_models.py:11 core/models.py:1913 msgid "Updated at" msgstr "Mis à jour le" @@ -38,21 +38,21 @@ msgstr "Mis à jour le" msgid "published" msgstr "publié" -#: core/base_models.py:110 core/models.py:113 +#: core/base_models.py:110 core/models.py:114 #: core/templates/core/action_plan_pdf.html:42 #: core/templates/snippets/mp_data.html:58 #: core/templates/snippets/ri_list_nested.html:16 msgid "Name" msgstr "Nom" -#: core/base_models.py:111 core/models.py:115 +#: core/base_models.py:111 core/models.py:116 #: core/templates/core/action_plan_pdf.html:43 #: core/templates/snippets/mp_data.html:59 #: core/templates/snippets/ra_data.html:43 msgid "Description" msgstr "Description" -#: core/base_models.py:126 core/models.py:1310 +#: core/base_models.py:126 core/models.py:1753 #: core/templates/core/action_plan_pdf.html:46 #: core/templates/snippets/mp_data.html:62 msgid "ETA" @@ -200,130 +200,148 @@ msgstr "Rechercher une preuve..." msgid "Search framework..." msgstr "Rechercher un référentiel..." -#: core/models.py:104 core/models.py:185 +#: core/management/commands/reset_mail.py:16 +msgid "CISO Assistant: Password Reset" +msgstr "CISO Assistant : réinitialisation de mot de passe" + +#: core/models.py:105 core/models.py:214 msgid "URN" msgstr "URN" -#: core/models.py:107 +#: core/models.py:108 core/models.py:1884 core/models.py:2464 msgid "Reference ID" msgstr "ID de référence" -#: core/models.py:110 core/models.py:826 +#: core/models.py:111 core/models.py:877 msgid "Provider" msgstr "Fournisseur" -#: core/models.py:116 core/models.py:1087 +#: core/models.py:117 core/models.py:1184 msgid "Annotation" msgstr "Annotation" -#: core/models.py:118 +#: core/models.py:119 msgid "Translations" msgstr "" -#: core/models.py:172 +#: core/models.py:173 msgid "Locale" msgstr "Locale" -#: core/models.py:174 +#: core/models.py:175 msgid "Default locale" msgstr "Locale par défaut" -#: core/models.py:187 +#: core/models.py:184 +msgid "Label" +msgstr "" + +#: core/models.py:202 +msgid "Labels" +msgstr "" + +#: core/models.py:216 msgid "Copyright" msgstr "Copyright" -#: core/models.py:189 core/models.py:1444 +#: core/models.py:218 core/models.py:1954 msgid "Version" msgstr "Version" -#: core/models.py:194 +#: core/models.py:223 msgid "Packager of the library" msgstr "Responsable de l'empaquetage de la bibliothèque" -#: core/models.py:195 +#: core/models.py:224 msgid "Packager" msgstr "Empaqueteur" -#: core/models.py:609 +#: core/models.py:659 msgid "Dependencies" msgstr "Dépendances" -#: core/models.py:708 core/templates/snippets/ri_list_nested.html:19 +#: core/models.py:758 core/templates/snippets/ri_list_nested.html:19 msgid "Threat" msgstr "Menace" -#: core/models.py:709 core/models.py:960 core/models.py:1850 +#: core/models.py:759 core/models.py:1023 core/models.py:2402 msgid "Threats" msgstr "Menaces" -#: core/models.py:729 core/models.py:1415 +#: core/models.py:779 core/models.py:1863 msgid "Policy" msgstr "Politique" -#: core/models.py:730 +#: core/models.py:780 msgid "Process" msgstr "Processus" -#: core/models.py:731 +#: core/models.py:781 msgid "Technical" msgstr "Technique" -#: core/models.py:732 +#: core/models.py:782 msgid "Physical" msgstr "Physique" -#: core/models.py:736 +#: core/models.py:783 +#, fuzzy +#| msgid "Process" +msgid "Procedure" +msgstr "Processus" + +#: core/models.py:787 msgid "Govern" msgstr "" -#: core/models.py:737 +#: core/models.py:788 msgid "Identify" msgstr "" -#: core/models.py:738 +#: core/models.py:789 msgid "Protect" msgstr "" -#: core/models.py:739 +#: core/models.py:790 msgid "Detect" msgstr "" -#: core/models.py:740 +#: core/models.py:791 msgid "Respond" msgstr "" -#: core/models.py:741 +#: core/models.py:792 msgid "Recover" msgstr "" -#: core/models.py:757 core/models.py:1284 +#: core/models.py:808 core/models.py:1721 #: core/templates/core/action_plan_pdf.html:44 msgid "Category" msgstr "Catégorie" -#: core/models.py:765 core/models.py:1291 +#: core/models.py:816 core/models.py:1728 #, fuzzy #| msgid "Search function..." msgid "CSF Function" msgstr "Rechercher une fonction..." -#: core/models.py:769 core/models.py:986 +#: core/models.py:820 core/models.py:1049 msgid "Typical evidence" msgstr "Preuve type" -#: core/models.py:775 core/templates/snippets/mp_data.html:61 +#: core/models.py:826 core/templates/snippets/mp_data.html:61 msgid "Reference control" msgstr "Mesure de référence" -#: core/models.py:776 core/models.py:966 +#: core/models.py:827 core/models.py:1029 msgid "Reference controls" msgstr "Mesures de référence" -#: core/models.py:811 +#: core/models.py:862 msgid "JSON definition" msgstr "Définition JSON" -#: core/models.py:813 +#: core/models.py:864 msgid "" "JSON definition of the risk matrix. See the documentation for more " "information." @@ -331,11 +349,11 @@ msgstr "" "Définition JSON de la matrice de risque. Consultez la documentation pour " "plus d'informations." -#: core/models.py:819 +#: core/models.py:870 msgid "enabled" msgstr "activé" -#: core/models.py:822 +#: core/models.py:873 msgid "" "If the risk matrix is set as disabled, it will not be available for " "selection for new risk assessments." @@ -343,405 +361,524 @@ msgstr "" "Si la matrice de risque est désactivée, elle ne sera pas disponible pour la " "sélection lors de nouvelles évaluations de risque." -#: core/models.py:891 core/models.py:2066 +#: core/models.py:942 core/models.py:2633 msgid "Minimum score" msgstr "Score minimum" -#: core/models.py:892 core/models.py:2067 +#: core/models.py:943 core/models.py:2634 msgid "Maximum score" msgstr "Score maximum" -#: core/models.py:894 core/models.py:2069 +#: core/models.py:945 core/models.py:2636 msgid "Score definition" msgstr "Définition du score" -#: core/models.py:897 +#: core/models.py:948 msgid "Implementation groups definition" msgstr "Définition des groupes d'implémentation" -#: core/models.py:908 core/models.py:974 core/models.py:2060 +#: core/models.py:959 core/models.py:1037 core/models.py:2624 #: core/templates/core/action_plan_pdf.html:20 msgid "Framework" msgstr "Référentiel" -#: core/models.py:909 +#: core/models.py:960 msgid "Frameworks" msgstr "Référentiels" -#: core/models.py:978 +#: core/models.py:1041 msgid "Parent URN" msgstr "URN parent" -#: core/models.py:980 +#: core/models.py:1043 msgid "Order ID" msgstr "ID de commande" -#: core/models.py:982 +#: core/models.py:1045 msgid "Implementation groups" msgstr "Groupes d'implémentation" -#: core/models.py:984 +#: core/models.py:1047 msgid "Assessable" msgstr "Évaluable" -#: core/models.py:988 +#: core/models.py:1051 #, fuzzy #| msgid "Description" msgid "Question" msgstr "Description" -#: core/models.py:991 +#: core/models.py:1088 #, fuzzy #| msgid "Requirement" msgid "RequirementNode" msgstr "Exigence" -#: core/models.py:992 +#: core/models.py:1089 #, fuzzy #| msgid "Requirement" msgid "RequirementNodes" msgstr "Exigence" -#: core/models.py:1007 +#: core/models.py:1104 #, fuzzy #| msgid "Search framework..." msgid "Source framework" msgstr "Rechercher un référentiel..." -#: core/models.py:1013 +#: core/models.py:1110 #, fuzzy #| msgid "Search framework..." msgid "Target framework" msgstr "Rechercher un référentiel..." -#: core/models.py:1019 +#: core/models.py:1116 msgid "Source and related frameworks must be different" msgstr "" -#: core/models.py:1025 +#: core/models.py:1122 msgid "Full" msgstr "" -#: core/models.py:1026 +#: core/models.py:1123 msgid "Partial" msgstr "" -#: core/models.py:1027 core/models.py:1034 +#: core/models.py:1124 core/models.py:1131 #, fuzzy #| msgid "Created" msgid "Not related" msgstr "Créé" -#: core/models.py:1030 +#: core/models.py:1127 msgid "Subset" msgstr "" -#: core/models.py:1031 +#: core/models.py:1128 msgid "Intersect" msgstr "" -#: core/models.py:1032 +#: core/models.py:1129 msgid "Equal" msgstr "" -#: core/models.py:1033 +#: core/models.py:1130 msgid "Superset" msgstr "" -#: core/models.py:1037 +#: core/models.py:1134 msgid "Syntactic" msgstr "" -#: core/models.py:1038 +#: core/models.py:1135 msgid "Semantic" msgstr "" -#: core/models.py:1039 +#: core/models.py:1136 #, fuzzy #| msgid "Production" msgid "Functional" msgstr "Production" -#: core/models.py:1054 +#: core/models.py:1151 msgid "Mapping set" msgstr "" -#: core/models.py:1060 +#: core/models.py:1157 msgid "Target requirement" msgstr "Exigence cible" -#: core/models.py:1067 +#: core/models.py:1164 msgid "Relationship" msgstr "" -#: core/models.py:1074 +#: core/models.py:1171 msgid "Rationale" msgstr "Raison" -#: core/models.py:1079 +#: core/models.py:1176 msgid "Source requirement" msgstr "Exigence source" -#: core/models.py:1084 +#: core/models.py:1181 msgid "Strength of relationship" msgstr "" -#: core/models.py:1103 core/models.py:1252 +#: core/models.py:1273 +#, fuzzy +#| msgid "Observation" +msgid "Abbreviation" +msgstr "Observation" + +#: core/models.py:1276 +#, fuzzy +#| msgid "Order by" +msgid "Ordering" +msgstr "Trier par" + +#: core/models.py:1279 +msgid "Security objective ordering" +msgstr "" + +#: core/models.py:1283 +#, fuzzy +#| msgid "Justification" +msgid "Qualification" +msgstr "Justification" + +#: core/models.py:1284 core/models.py:2466 +#, fuzzy +#| msgid "Justification" +msgid "Qualifications" +msgstr "Justification" + +#: core/models.py:1302 core/models.py:1672 core/models.py:1877 msgid "Undefined" msgstr "Non défini" -#: core/models.py:1104 +#: core/models.py:1303 msgid "Design" msgstr "Conception" -#: core/models.py:1105 +#: core/models.py:1304 msgid "Development" msgstr "Développement" -#: core/models.py:1106 +#: core/models.py:1305 msgid "Production" msgstr "Production" -#: core/models.py:1107 +#: core/models.py:1306 msgid "EndOfLife" msgstr "Fin de vie" -#: core/models.py:1108 +#: core/models.py:1307 msgid "Dropped" msgstr "Abandonné" -#: core/models.py:1111 -msgid "Internal reference" -msgstr "Référence interne" +#: core/models.py:1311 core/models.py:1708 core/models.py:1998 +#: core/models.py:2630 +#, fuzzy +#| msgid "Reference ID" +msgid "reference id" +msgstr "ID de référence" -#: core/models.py:1117 core/models.py:1298 core/models.py:1451 -#: core/models.py:2498 core/templates/snippets/mp_data.html:66 +#: core/models.py:1317 core/models.py:1735 core/models.py:1890 +#: core/models.py:1961 core/models.py:3143 +#: core/templates/snippets/mp_data.html:66 #: core/templates/snippets/ri_list_nested.html:31 msgid "Status" msgstr "Statut" -#: core/models.py:1122 core/models.py:1437 core/models.py:1930 +#: core/models.py:1322 core/models.py:1947 core/models.py:2498 #: core/templates/core/action_plan_pdf.html:16 #: core/templates/snippets/mp_data.html:7 msgid "Project" msgstr "Projet" -#: core/models.py:1123 +#: core/models.py:1323 msgid "Projects" msgstr "Projets" -#: core/models.py:1156 +#: core/models.py:1358 msgid "Primary" msgstr "Primaire" -#: core/models.py:1157 +#: core/models.py:1359 msgid "Support" msgstr "Support" -#: core/models.py:1160 +#: core/models.py:1431 msgid "business value" msgstr "valeur métier" -#: core/models.py:1163 +#: core/models.py:1434 msgid "type" msgstr "type" -#: core/models.py:1166 +#: core/models.py:1437 msgid "parent assets" msgstr "actifs parents" -#: core/models.py:1172 core/models.py:1837 +#: core/models.py:1443 core/models.py:1765 +msgid "External url for action follow-up (eg. Jira ticket)" +msgstr "URL externe pour le suivi de l'action (par ex. billet Jira)" + +#: core/models.py:1444 core/models.py:1632 core/models.py:1766 +#: core/templates/snippets/mp_data.html:65 +msgid "Link" +msgstr "Lien" + +#: core/models.py:1449 +msgid "Security objectives" +msgstr "" + +#: core/models.py:1450 +msgid "The security objectives of the asset" +msgstr "" + +#: core/models.py:1456 +msgid "Disaster recovery objectives" +msgstr "" + +#: core/models.py:1457 +msgid "The disaster recovery objectives of the asset" +msgstr "" + +#: core/models.py:1465 core/models.py:1740 core/models.py:2424 +msgid "Owner" +msgstr "Propriétaire" + +#: core/models.py:1471 core/models.py:2382 msgid "Assets" msgstr "Actifs" -#: core/models.py:1173 +#: core/models.py:1472 msgid "Asset" msgstr "Actif" -#: core/models.py:1203 +#: core/models.py:1623 msgid "Attachment for evidence (eg. screenshot, log file, etc.)" msgstr "" "Pièce jointe pour la preuve (par ex. capture d'écran, fichier journal, etc.)" -#: core/models.py:1204 +#: core/models.py:1624 msgid "Attachment" msgstr "Pièce jointe" -#: core/models.py:1211 +#: core/models.py:1631 msgid "Link to the evidence (eg. Jira ticket, etc.)" msgstr "Lien vers la preuve (par ex. billet Jira, etc.)" -#: core/models.py:1212 core/models.py:1323 -#: core/templates/snippets/mp_data.html:65 -msgid "Link" -msgstr "Lien" - -#: core/models.py:1218 +#: core/models.py:1638 msgid "Evidence" msgstr "Preuve" -#: core/models.py:1219 core/models.py:1276 core/models.py:2518 +#: core/models.py:1639 core/models.py:1713 core/models.py:3163 msgid "Evidences" msgstr "Preuves" -#: core/models.py:1247 core/models.py:2482 +#: core/models.py:1667 core/models.py:3127 msgid "To do" msgstr "À faire" -#: core/models.py:1248 core/models.py:1431 core/models.py:2483 +#: core/models.py:1668 core/models.py:1941 core/models.py:3128 msgid "In progress" msgstr "En cours" -#: core/models.py:1249 +#: core/models.py:1669 msgid "On hold" msgstr "" -#: core/models.py:1250 +#: core/models.py:1670 msgid "Active" msgstr "Actif" -#: core/models.py:1251 core/models.py:1434 +#: core/models.py:1671 core/models.py:1944 msgid "Deprecated" msgstr "Déprécié" -#: core/models.py:1258 +#: core/models.py:1675 +msgid "P1" +msgstr "" + +#: core/models.py:1676 +msgid "P2" +msgstr "" + +#: core/models.py:1677 +msgid "P3" +msgstr "" + +#: core/models.py:1678 +msgid "P4" +msgstr "" + +#: core/models.py:1685 +msgid "Priority" +msgstr "" + +#: core/models.py:1692 msgid "Small" msgstr "Petit" -#: core/models.py:1259 core/models.py:1814 core/tests/test_helpers.py:77 +#: core/models.py:1693 core/models.py:2359 core/tests/test_helpers.py:77 #: core/tests/test_helpers.py:142 msgid "Medium" msgstr "Moyen" -#: core/models.py:1260 +#: core/models.py:1694 msgid "Large" msgstr "Grand" -#: core/models.py:1261 +#: core/models.py:1695 msgid "Extra Large" msgstr "Extra large" -#: core/models.py:1271 +#: core/models.py:1705 msgid "Reference Control" msgstr "Mesure de référence" -#: core/models.py:1303 core/models.py:1866 -msgid "Owner" -msgstr "Propriétaire" +#: core/models.py:1746 +msgid "Start date (useful for timeline)" +msgstr "" -#: core/models.py:1309 +#: core/models.py:1747 +msgid "Start date" +msgstr "" + +#: core/models.py:1752 msgid "Estimated Time of Arrival" msgstr "Heure d'arrivée estimée" -#: core/models.py:1315 +#: core/models.py:1758 msgid "Date after which the applied control is no longer valid" msgstr "Date à partir de laquelle la mesure appliquée n'est plus valide" -#: core/models.py:1316 core/models.py:2626 +#: core/models.py:1759 core/models.py:3325 #: core/templates/core/action_plan_pdf.html:47 msgid "Expiry date" msgstr "Date d'expiration" -#: core/models.py:1322 -msgid "External url for action follow-up (eg. Jira ticket)" -msgstr "URL externe pour le suivi de l'action (par ex. billet Jira)" - -#: core/models.py:1330 +#: core/models.py:1773 msgid "Relative effort of the measure (using T-Shirt sizing)" msgstr "Effort relatif de la mesure (en utilisant la taille des T-shirts)" -#: core/models.py:1331 core/templates/core/action_plan_pdf.html:48 +#: core/models.py:1774 core/templates/core/action_plan_pdf.html:48 #: core/templates/snippets/mp_data.html:63 msgid "Effort" msgstr "Effort" -#: core/models.py:1335 +#: core/models.py:1778 msgid "Cost of the measure (using globally-chosen currency)" msgstr "" -#: core/models.py:1336 core/templates/core/action_plan_pdf.html:49 +#: core/models.py:1779 core/templates/core/action_plan_pdf.html:49 #: core/templates/snippets/mp_data.html:64 msgid "Cost" msgstr "" -#: core/models.py:1342 +#: core/models.py:1785 msgid "Applied control" msgstr "Mesure appliqué" -#: core/models.py:1343 core/models.py:1844 core/models.py:2534 +#: core/models.py:1786 core/models.py:1900 core/models.py:2396 +#: core/models.py:3179 msgid "Applied controls" msgstr "Mesures appliquées" -#: core/models.py:1416 +#: core/models.py:1864 msgid "Policies" msgstr "Politiques" -#: core/models.py:1430 +#: core/models.py:1878 +msgid "Potential" +msgstr "" + +#: core/models.py:1879 +msgid "Exploitable" +msgstr "" + +#: core/models.py:1880 +#, fuzzy +#| msgid "Mitigate" +msgid "Mitigated" +msgstr "Atténuer" + +#: core/models.py:1881 +msgid "Fixed" +msgstr "" + +#: core/models.py:1894 +msgid "Severity" +msgstr "" + +#: core/models.py:1895 +msgid "The severity of the vulnerability" +msgstr "" + +#: core/models.py:1909 +msgid "Date" +msgstr "" + +#: core/models.py:1910 +msgid "Historical Data" +msgstr "" + +#: core/models.py:1911 +msgid "Model" +msgstr "" + +#: core/models.py:1912 +msgid "Object ID" +msgstr "" + +#: core/models.py:1940 msgid "Planned" msgstr "Planifié" -#: core/models.py:1432 core/models.py:2484 +#: core/models.py:1942 core/models.py:3129 msgid "In review" msgstr "En examen" -#: core/models.py:1433 core/models.py:2485 +#: core/models.py:1943 core/models.py:3130 msgid "Done" msgstr "Terminé" -#: core/models.py:1443 +#: core/models.py:1953 msgid "Version of the compliance assessment (eg. 1.0, 2.0, etc.)" msgstr "Version de l'évaluation de conformité (par ex. 1.0, 2.0, etc.)" -#: core/models.py:1458 +#: core/models.py:1968 msgid "Authors" msgstr "Auteurs" -#: core/models.py:1464 core/templates/core/audit_report.html:35 +#: core/models.py:1974 core/templates/core/audit_report.html:35 msgid "Reviewers" msgstr "Relecteurs" -#: core/models.py:1467 core/models.py:2521 +#: core/models.py:1977 core/models.py:3166 msgid "Observation" msgstr "Observation" -#: core/models.py:1484 +#: core/models.py:1994 msgid "WARNING! After choosing it, you will not be able to change it" msgstr "" "ATTENTION ! Une fois que vous l'aurez choisi, vous ne pourrez plus le " "modifier." -#: core/models.py:1485 +#: core/models.py:1995 msgid "Risk matrix" msgstr "Matrice de risque" -#: core/models.py:1489 core/templates/snippets/mp_data.html:9 +#: core/models.py:2002 core/templates/snippets/mp_data.html:9 #: core/templates/snippets/ra_data.html:8 msgid "Risk assessment" msgstr "Évaluation de risque" -#: core/models.py:1490 +#: core/models.py:2003 msgid "Risk assessments" msgstr "Évaluations de risque" -#: core/models.py:1514 +#: core/models.py:2056 msgid "{}: Risk assessment is still in progress" msgstr "{} : L'évaluation des risques est toujours en cours" -#: core/models.py:1525 +#: core/models.py:2067 msgid "{}: No author assigned to this risk assessment" msgstr "{} : Aucun auteur n'a été affecté à cette évaluation des risques" -#: core/models.py:1537 +#: core/models.py:2079 msgid "{}: RiskAssessment is empty. No risk scenario declared yet" msgstr "" "{} : L'évaluation des risques est vide. Aucun scénario de risque n'a encore " "été déclaré." -#: core/models.py:1558 +#: core/models.py:2100 msgid "{} current risk level has not been assessed" msgstr "{} : Le niveau de risque actuel n'a pas été évalué" -#: core/models.py:1571 +#: core/models.py:2113 msgid "" "{} residual risk level has not been assessed. If no additional measures are " "applied, it should be at the same level as the current risk" @@ -750,43 +887,43 @@ msgstr "" "mesures supplémentaires appliquées, il devrait être au même niveau que le " "risque actuel." -#: core/models.py:1582 +#: core/models.py:2124 msgid "{} residual risk level is higher than the current one" msgstr "{} : Le niveau de risque résiduel est supérieur à l'actuel" -#: core/models.py:1594 +#: core/models.py:2136 msgid "{} residual risk probability is higher than the current one" msgstr "{} : La probabilité de risque résiduel est supérieure à l'actuelle" -#: core/models.py:1606 +#: core/models.py:2148 msgid "{} residual risk impact is higher than the current one" msgstr "{} : L'impact du risque résiduel est supérieur à l'actuel" -#: core/models.py:1627 +#: core/models.py:2169 msgid "{}: residual risk level has been lowered without any specific measure" msgstr "" "{} : Le niveau de risque résiduel a été réduit sans aucune mesure spécifique" -#: core/models.py:1641 +#: core/models.py:2183 msgid "{} risk accepted but no risk acceptance attached" msgstr "{} : Risque accepté mais aucune acceptation de risque jointe" -#: core/models.py:1664 +#: core/models.py:2206 msgid "{} does not have an ETA" msgstr "{} : Pas d'ETA" -#: core/models.py:1676 +#: core/models.py:2218 msgid "{} ETA is in the past now. Consider updating its status or the date" msgstr "" "{} : L'ETA est dans le passé maintenant. Envisagez de mettre à jour son " "statut ou la date." -#: core/models.py:1689 +#: core/models.py:2231 msgid "" "{} does not have an estimated effort. This will help you for prioritization" msgstr "{} : Pas d'effort estimé. Cela vous aidera pour la prioritisation" -#: core/models.py:1702 +#: core/models.py:2244 #, fuzzy #| msgid "" #| "{} does not have an estimated effort. This will help you for " @@ -795,7 +932,7 @@ msgid "" "{} does not have an estimated cost. This will help you for prioritization" msgstr "{} : Pas d'effort estimé. Cela vous aidera pour la prioritisation" -#: core/models.py:1715 +#: core/models.py:2257 msgid "" "{}: Applied control does not have an external link attached. This will help " "you for follow-up" @@ -803,112 +940,134 @@ msgstr "" "{} : La mesure appliquée ne comporte pas de lien externe joint. Cela vous " "aidera pour le suivi" -#: core/models.py:1738 +#: core/models.py:2280 msgid "{}: Acceptance has no expiry date" msgstr "{} : L'acceptation n'a pas de date d'expiration" -#: core/models.py:1752 +#: core/models.py:2294 msgid "{}: Acceptance has expired. Consider updating the status or the date" msgstr "" "{} : L'acceptation a expiré. Envisagez de mettre à jour le statut ou la date." -#: core/models.py:1781 +#: core/models.py:2323 msgid "Open" msgstr "Ouvert" -#: core/models.py:1782 +#: core/models.py:2324 msgid "Mitigate" msgstr "Atténuer" -#: core/models.py:1783 +#: core/models.py:2325 msgid "Accept" msgstr "Accepter" -#: core/models.py:1784 +#: core/models.py:2326 msgid "Avoid" msgstr "Éviter" -#: core/models.py:1785 +#: core/models.py:2327 msgid "Transfer" msgstr "Transférer" -#: core/models.py:1789 -msgid "Financial" +#: core/models.py:2331 +msgid "Confidentiality" msgstr "" -#: core/models.py:1790 -msgid "Legal" +#: core/models.py:2332 +msgid "Integrity" msgstr "" -#: core/models.py:1791 +#: core/models.py:2333 +#, fuzzy +#| msgid "Probability" +msgid "Availability" +msgstr "Probabilité" + +#: core/models.py:2334 +msgid "Proof" +msgstr "" + +#: core/models.py:2335 +msgid "Authenticity" +msgstr "" + +#: core/models.py:2336 +msgid "Privacy" +msgstr "" + +#: core/models.py:2337 +msgid "Safety" +msgstr "" + +#: core/models.py:2338 #, fuzzy #| msgid "Rationale" msgid "Reputation" msgstr "Raison" -#: core/models.py:1792 +#: core/models.py:2339 #, fuzzy #| msgid "Observation" msgid "Operational" msgstr "Observation" -#: core/models.py:1793 -msgid "Confidentiality" -msgstr "" - -#: core/models.py:1794 -msgid "Integrity" +#: core/models.py:2340 +msgid "Legal" msgstr "" -#: core/models.py:1795 -#, fuzzy -#| msgid "Probability" -msgid "Availability" -msgstr "Probabilité" - -#: core/models.py:1796 -msgid "Authenticity" +#: core/models.py:2341 +msgid "Financial" msgstr "" -#: core/models.py:1801 +#: core/models.py:2346 msgid "--" msgstr "--" -#: core/models.py:1803 +#: core/models.py:2348 msgid "The strength of the knowledge supporting the assessment is undefined" msgstr "La force de la connaissance soutenant l'évaluation est indéfinie" -#: core/models.py:1807 core/tests/test_helpers.py:76 +#: core/models.py:2352 core/tests/test_helpers.py:76 #: core/tests/test_helpers.py:141 msgid "Low" msgstr "Faible" -#: core/models.py:1809 +#: core/models.py:2354 msgid "The strength of the knowledge supporting the assessment is low" msgstr "La force de la connaissance soutenant l'évaluation est faible" -#: core/models.py:1816 +#: core/models.py:2361 msgid "The strength of the knowledge supporting the assessment is medium" msgstr "La force de la connaissance soutenant l'évaluation est moyenne" -#: core/models.py:1821 core/tests/test_helpers.py:78 +#: core/models.py:2366 core/tests/test_helpers.py:78 #: core/tests/test_helpers.py:143 msgid "High" msgstr "Élevé" -#: core/models.py:1823 +#: core/models.py:2368 msgid "The strength of the knowledge supporting the assessment is high" msgstr "La force de la connaissance soutenant l'évaluation est élevée" -#: core/models.py:1832 +#: core/models.py:2377 msgid "RiskAssessment" msgstr "ÉvaluationDesRisques" -#: core/models.py:1839 +#: core/models.py:2384 msgid "Assets impacted by the risk scenario" msgstr "Actifs impactés par le scénario de risque" -#: core/models.py:1857 +#: core/models.py:2389 +msgid "Vulnerabilities" +msgstr "" + +#: core/models.py:2391 +#, fuzzy +#| msgid "Assets impacted by the risk scenario" +msgid "Vulnerabities exploited by the risk scenario" +msgstr "Actifs impactés par le scénario de risque" + +#: core/models.py:2409 msgid "" "The existing controls to manage this risk. Edit the risk scenario to add " "extra applied controls." @@ -916,24 +1075,30 @@ msgstr "" "Les mesures existantes pour gérer ce risque. Modifiez le scénario de risque " "pour ajouter des mesures appliquées supplémentaires." -#: core/models.py:1859 core/templates/snippets/mp_data.html:48 +#: core/models.py:2411 core/templates/snippets/mp_data.html:48 #: core/templates/snippets/ri_list_nested.html:22 msgid "Existing controls" msgstr "Mesures existantes" -#: core/models.py:1871 +#: core/models.py:2416 +#, fuzzy +#| msgid "Existing controls" +msgid "Existing Applied controls" +msgstr "Mesures existantes" + +#: core/models.py:2429 msgid "Current probability" msgstr "Probabilité actuelle" -#: core/models.py:1874 +#: core/models.py:2432 msgid "Current impact" msgstr "Impact actuel" -#: core/models.py:1878 +#: core/models.py:2436 msgid "Current level" msgstr "Niveau actuel" -#: core/models.py:1880 +#: core/models.py:2438 msgid "" "The risk level given the current measures. Automatically updated on Save, " "based on the chosen risk matrix" @@ -942,19 +1107,19 @@ msgstr "" "automatiquement lors de l'enregistrement, sur la base de la matrice de " "risque choisie." -#: core/models.py:1886 +#: core/models.py:2444 msgid "Residual probability" msgstr "Probabilité résiduelle" -#: core/models.py:1889 +#: core/models.py:2447 msgid "Residual impact" msgstr "Impact résiduel" -#: core/models.py:1893 +#: core/models.py:2451 msgid "Residual level" msgstr "Niveau résiduel" -#: core/models.py:1895 +#: core/models.py:2453 msgid "" "The risk level when all the extra measures are done. Automatically updated " "on Save, based on the chosen risk matrix" @@ -963,61 +1128,55 @@ msgstr "" "œuvre. Mis à jour automatiquement lors de l'enregistrement, sur la base de " "la matrice de risque choisie." -#: core/models.py:1903 +#: core/models.py:2461 msgid "Treatment status" msgstr "Statut de traitement" -#: core/models.py:1906 -#, fuzzy -#| msgid "Justification" -msgid "Qualifications" -msgstr "Justification" - -#: core/models.py:1910 +#: core/models.py:2470 msgid "Strength of Knowledge" msgstr "Force de la connaissance" -#: core/models.py:1911 +#: core/models.py:2471 msgid "The strength of the knowledge supporting the assessment" msgstr "La force de la connaissance soutenant l'évaluation" -#: core/models.py:1914 core/models.py:2638 +#: core/models.py:2474 core/models.py:3337 msgid "Justification" msgstr "Justification" -#: core/models.py:1920 +#: core/models.py:2480 msgid "Risk scenario" msgstr "Scénario de risque" -#: core/models.py:1921 core/models.py:2603 +#: core/models.py:2481 core/models.py:3302 msgid "Risk scenarios" msgstr "Scénarios de risque" -#: core/models.py:2031 +#: core/models.py:2599 msgid ": " msgstr ": " -#: core/models.py:2063 core/templates/core/audit_report.html:43 +#: core/models.py:2627 core/templates/core/audit_report.html:43 msgid "Selected implementation groups" msgstr "Groupes d'implémentation sélectionnés" -#: core/models.py:2073 core/models.py:2525 +#: core/models.py:2640 core/models.py:3170 msgid "Compliance assessment" msgstr "Évaluation de conformité" -#: core/models.py:2074 +#: core/models.py:2641 msgid "Compliance assessments" msgstr "Évaluations de conformité" -#: core/models.py:2311 +#: core/models.py:2922 msgid "{}: Compliance assessment is still in progress" msgstr "{} : L'évaluation de la conformité est toujours en cours" -#: core/models.py:2324 +#: core/models.py:2935 msgid "{}: No author assigned to this compliance assessment" msgstr "{} : Aucun auteur n'a été affecté à cette évaluation de conformité" -#: core/models.py:2351 +#: core/models.py:2962 #, fuzzy #| msgid "" #| "{}: Requirement assessment status is compliant or partially compliant " @@ -1029,94 +1188,94 @@ msgstr "" "{} : Le statut de l'évaluation de l'exigence est conforme ou partiellement " "conforme, sans aucun mesure appliquée" -#: core/models.py:2376 +#: core/models.py:2987 msgid "{}: Applied control has no reference control selected" msgstr "" "{} : La mesure appliquée ne comporte pas de mesure de référence sélectionné" -#: core/models.py:2402 +#: core/models.py:3013 msgid "{}: Evidence has no file uploaded" msgstr "{} : La preuve ne comporte pas de fichier téléchargé" -#: core/models.py:2488 +#: core/models.py:3133 msgid "Not assessed" msgstr "Non évalué" -#: core/models.py:2489 +#: core/models.py:3134 msgid "Partially compliant" msgstr "Partiellement conforme" -#: core/models.py:2490 +#: core/models.py:3135 #, fuzzy #| msgid "Non compliant" msgid "Non-compliant" msgstr "Non conforme" -#: core/models.py:2491 +#: core/models.py:3136 msgid "Compliant" msgstr "Conforme" -#: core/models.py:2492 +#: core/models.py:3137 msgid "Not applicable" msgstr "Non applicable" -#: core/models.py:2503 +#: core/models.py:3148 msgid "Result" msgstr "Résultat" -#: core/models.py:2509 +#: core/models.py:3154 msgid "Score" msgstr "Score" -#: core/models.py:2513 +#: core/models.py:3158 msgid "Is scored" msgstr "Est noté" -#: core/models.py:2529 +#: core/models.py:3174 msgid "Requirement" msgstr "Exigence" -#: core/models.py:2539 +#: core/models.py:3184 msgid "Selected" msgstr "Sélectionné" -#: core/models.py:2543 +#: core/models.py:3188 msgid "Mapping inference" msgstr "Inference de mapping" -#: core/models.py:2548 +#: core/models.py:3193 msgid "Answer" msgstr "" -#: core/models.py:2585 +#: core/models.py:3280 msgid "Requirement assessment" msgstr "Évaluation de l'exigence" -#: core/models.py:2586 +#: core/models.py:3281 msgid "Requirement assessments" msgstr "Évaluations de l'exigence" -#: core/models.py:2594 +#: core/models.py:3293 msgid "Created" msgstr "Créé" -#: core/models.py:2595 +#: core/models.py:3294 msgid "Submitted" msgstr "Soumis" -#: core/models.py:2596 +#: core/models.py:3295 msgid "Accepted" msgstr "Accepté" -#: core/models.py:2597 +#: core/models.py:3296 msgid "Rejected" msgstr "Rejeté" -#: core/models.py:2598 +#: core/models.py:3297 msgid "Revoked" msgstr "Révoqué" -#: core/models.py:2605 +#: core/models.py:3304 msgid "" "Select the risk scenarios to be accepted, attention they must be part of the " "chosen domain" @@ -1124,39 +1283,39 @@ msgstr "" "Sélectionnez les scénarios de risque à accepter, faites attention, ils " "doivent faire partie du domaine choisi" -#: core/models.py:2611 +#: core/models.py:3310 msgid "Risk owner and approver identity" msgstr "Identité du propriétaire du risque et de l'approbateur" -#: core/models.py:2612 core/utils.py:52 core/utils.py:60 core/utils.py:63 +#: core/models.py:3311 core/utils.py:52 core/utils.py:60 core/utils.py:63 msgid "Approver" msgstr "Approbateur" -#: core/models.py:2621 +#: core/models.py:3320 msgid "State" msgstr "État" -#: core/models.py:2624 +#: core/models.py:3323 msgid "Specify when the risk acceptance will no longer apply" msgstr "Précisez quand l'acceptation du risque ne sera plus valable" -#: core/models.py:2629 +#: core/models.py:3328 msgid "Acceptance date" msgstr "Date d'acceptation" -#: core/models.py:2632 +#: core/models.py:3331 msgid "Rejection date" msgstr "Date de rejet" -#: core/models.py:2635 +#: core/models.py:3334 msgid "Revocation date" msgstr "Date de révocation" -#: core/models.py:2647 +#: core/models.py:3346 msgid "Risk acceptance" msgstr "Acceptation du risque" -#: core/models.py:2648 +#: core/models.py:3347 msgid "Risk acceptances" msgstr "Acceptations du risque" @@ -1249,7 +1408,7 @@ msgstr "ici" #: core/templates/registration/first_connexion_email.html:49 msgid "and request a password reset" -msgstr "et demander une réinitialisation du mot de passe" +msgstr "et demander une réinitialisation de mot de passe" #: core/templates/registration/first_connexion_email.html:54 #: core/templates/registration/password_reset_email.html:55 @@ -1467,17 +1626,20 @@ msgstr "Lecteur" msgid "Third-party respondent" msgstr "" -#: core/utils.py:74 +#: core/utils.py:78 msgid "French" msgstr "Français" -#: core/utils.py:75 +#: core/utils.py:79 msgid "English" msgstr "Anglais" -#: core/views.py:1668 +#: core/views.py:2257 msgid "CISO Assistant: A questionnaire has been assigned to you" -msgstr "" +msgstr "CISO Assistant : un questionnaire vous a été assigné" + +#~ msgid "Internal reference" +#~ msgstr "Référence interne" #~ msgid "Inactive" #~ msgstr "Inactif" diff --git a/backend/core/management/commands/reset_mail.py b/backend/core/management/commands/reset_mail.py index 2b3c24cdf..bdb949243 100644 --- a/backend/core/management/commands/reset_mail.py +++ b/backend/core/management/commands/reset_mail.py @@ -2,7 +2,7 @@ from core.models import * from iam.models import User, Folder from ciso_assistant.settings import CISO_ASSISTANT_SUPERUSER_EMAIL - +from django.utils.translation import gettext_lazy as _ class Command(BaseCommand): help = "Send reset email" @@ -13,7 +13,7 @@ def handle(self, *args, **kwargs): try: admin.mailing( email_template_name="registration/password_reset_email.html", - subject="CISO Assistant: Password Reset", + subject=_("CISO Assistant: Password Reset"), ) self.stdout.write("reset mail sent") except Exception as e: diff --git a/backend/locale/fr/LC_MESSAGES/django.mo b/backend/locale/fr/LC_MESSAGES/django.mo index e544355a5722972806eba55adb2666bce224e787..93dbe6bb075848937d0cf0317776dbdfbfd62625 100644 GIT binary patch delta 191 zcmX@hyq=~0o)F7a1|VPtVi_Pd0b*7l_5orLNC09vAWj5gDIjhDVn;>>hS@;c2#D_j z*&ulVCI$u|lL1J<0mw`SXU|}N1;^sz%;J*7yb>#gfW+eB^8BI{g`m{p)RK(>ag0W& rN))UViVm;L%*!mvOw7qFPAtjH&r?WARmjaR0Z|1&{i&1JGAaN7iLfYE delta 93 zcmZ3_a+W#Zo)F7a1|VPpVi_RT0b*7lwgF-g2moR!APxj#M@9yQ93U+R#Or`;AOh\n" "Language-Team: LANGUAGE \n" @@ -18,101 +18,419 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: iam/models.py:75 +#: ebios_rm/models.py:20 +msgid "Planned" +msgstr "" + +#: ebios_rm/models.py:21 +msgid "In progress" +msgstr "" + +#: ebios_rm/models.py:22 +msgid "In review" +msgstr "" + +#: ebios_rm/models.py:23 +msgid "Done" +msgstr "" + +#: ebios_rm/models.py:24 +msgid "Deprecated" +msgstr "" + +#: ebios_rm/models.py:29 +msgid "Risk matrix" +msgstr "" + +#: ebios_rm/models.py:32 +msgid "" +"Risk matrix used as a reference for the study. Defaults to `urn:intuitem:" +"risk:library:risk-matrix-4x4-ebios-rm`" +msgstr "" + +#: ebios_rm/models.py:38 ebios_rm/models.py:118 +msgid "Assets" +msgstr "" + +#: ebios_rm/models.py:40 +msgid "Assets that are pertinent to the study" +msgstr "" + +#: ebios_rm/models.py:46 +msgid "Compliance assessments" +msgstr "" + +#: ebios_rm/models.py:49 +msgid "" +"Compliance assessments established as security baseline during workshop 1.4" +msgstr "" + +#: ebios_rm/models.py:55 +msgid "Risk assessments" +msgstr "" + +#: ebios_rm/models.py:57 +msgid "Risk assessments generated at the end of workshop 4" +msgstr "" + +#: ebios_rm/models.py:62 +msgid "Reference entity" +msgstr "" + +#: ebios_rm/models.py:64 +msgid "Entity that is the focus of the study" +msgstr "" + +#: ebios_rm/models.py:73 +msgid "Version of the Ebios RM study (eg. 1.0, 2.0, etc.)" +msgstr "" + +#: ebios_rm/models.py:74 +msgid "Version" +msgstr "" + +#: ebios_rm/models.py:81 +msgid "Status" +msgstr "" + +#: ebios_rm/models.py:88 +msgid "Authors" +msgstr "" + +#: ebios_rm/models.py:94 +msgid "Reviewers" +msgstr "" + +#: ebios_rm/models.py:97 +msgid "Observation" +msgstr "" + +#: ebios_rm/models.py:100 +msgid "Ebios RM Study" +msgstr "" + +#: ebios_rm/models.py:101 +msgid "Ebios RM Studies" +msgstr "" + +#: ebios_rm/models.py:112 ebios_rm/models.py:201 ebios_rm/models.py:254 +#: ebios_rm/models.py:365 ebios_rm/models.py:401 +msgid "EBIOS RM study" +msgstr "" + +#: ebios_rm/models.py:120 +msgid "Assets that are affected by the feared event" +msgstr "" + +#: ebios_rm/models.py:125 +msgid "Qualifications" +msgstr "" + +#: ebios_rm/models.py:127 +msgid "Qualifications carried by the feared event" +msgstr "" + +#: ebios_rm/models.py:131 +msgid "Gravity" +msgstr "" + +#: ebios_rm/models.py:132 ebios_rm/models.py:230 ebios_rm/models.py:320 +#: ebios_rm/models.py:382 ebios_rm/models.py:421 +msgid "Is selected" +msgstr "" + +#: ebios_rm/models.py:133 ebios_rm/models.py:231 ebios_rm/models.py:321 +#: ebios_rm/models.py:383 ebios_rm/models.py:422 +msgid "Justification" +msgstr "" + +#: ebios_rm/models.py:136 +msgid "Feared event" +msgstr "" + +#: ebios_rm/models.py:137 ebios_rm/models.py:205 +msgid "Feared events" +msgstr "" + +#: ebios_rm/models.py:169 +msgid "State" +msgstr "" + +#: ebios_rm/models.py:170 +msgid "Organized crime" +msgstr "" + +#: ebios_rm/models.py:171 +msgid "Terrorist" +msgstr "" + +#: ebios_rm/models.py:172 +msgid "Activist" +msgstr "" + +#: ebios_rm/models.py:173 +msgid "Professional" +msgstr "" + +#: ebios_rm/models.py:174 +msgid "Amateur" +msgstr "" + +#: ebios_rm/models.py:175 +msgid "Avenger" +msgstr "" + +#: ebios_rm/models.py:176 +msgid "Pathological" +msgstr "" + +#: ebios_rm/models.py:209 +msgid "Risk origin" +msgstr "" + +#: ebios_rm/models.py:211 +msgid "Target objective" +msgstr "" + +#: ebios_rm/models.py:213 +msgid "Motivation" +msgstr "" + +#: ebios_rm/models.py:218 +msgid "Resources" +msgstr "" + +#: ebios_rm/models.py:223 +msgid "Pertinence" +msgstr "" + +#: ebios_rm/models.py:228 +msgid "Activity" +msgstr "" + +#: ebios_rm/models.py:237 ebios_rm/models.py:370 +msgid "RO/TO couple" +msgstr "" + +#: ebios_rm/models.py:238 +msgid "RO/TO couples" +msgstr "" + +#: ebios_rm/models.py:248 +msgid "Client" +msgstr "" + +#: ebios_rm/models.py:249 +msgid "Partner" +msgstr "" + +#: ebios_rm/models.py:250 +msgid "Supplier" +msgstr "" + +#: ebios_rm/models.py:255 +msgid "EBIOS RM study that the stakeholder is part of" +msgstr "" + +#: ebios_rm/models.py:262 tprm/models.py:27 tprm/models.py:97 +msgid "Entity" +msgstr "" + +#: ebios_rm/models.py:264 +msgid "Entity qualified by the stakeholder" +msgstr "" + +#: ebios_rm/models.py:268 +msgid "Applied controls" +msgstr "" + +#: ebios_rm/models.py:271 +msgid "Controls applied to lower stakeholder criticality" +msgstr "" + +#: ebios_rm/models.py:275 +msgid "Category" +msgstr "" + +#: ebios_rm/models.py:279 +msgid "Current dependency" +msgstr "" + +#: ebios_rm/models.py:284 +msgid "Current penetration" +msgstr "" + +#: ebios_rm/models.py:289 +msgid "Current maturity" +msgstr "" + +#: ebios_rm/models.py:294 +msgid "Current trust" +msgstr "" + +#: ebios_rm/models.py:300 +msgid "Residual dependency" +msgstr "" + +#: ebios_rm/models.py:305 +msgid "Residual penetration" +msgstr "" + +#: ebios_rm/models.py:310 +msgid "Residual maturity" +msgstr "" + +#: ebios_rm/models.py:315 +msgid "Residual trust" +msgstr "" + +#: ebios_rm/models.py:324 +msgid "Stakeholder" +msgstr "" + +#: ebios_rm/models.py:325 ebios_rm/models.py:376 +msgid "Stakeholders" +msgstr "" + +#: ebios_rm/models.py:372 +msgid "RO/TO couple from which the attach path is derived" +msgstr "" + +#: ebios_rm/models.py:378 +msgid "Stakeholders leveraged by the attack path" +msgstr "" + +#: ebios_rm/models.py:381 ebios_rm/models.py:419 +msgid "Description" +msgstr "" + +#: ebios_rm/models.py:386 +msgid "Attack path" +msgstr "" + +#: ebios_rm/models.py:387 ebios_rm/models.py:407 +msgid "Attack paths" +msgstr "" + +#: ebios_rm/models.py:409 +msgid "Attack paths that are pertinent to the operational scenario" +msgstr "" + +#: ebios_rm/models.py:413 +msgid "Threats" +msgstr "" + +#: ebios_rm/models.py:416 +msgid "Threats leveraged by the operational scenario" +msgstr "" + +#: ebios_rm/models.py:420 +msgid "Likelihood" +msgstr "" + +#: ebios_rm/models.py:425 +msgid "Operational scenario" +msgstr "" + +#: ebios_rm/models.py:426 +msgid "Operational scenarios" +msgstr "" + +#: iam/models.py:78 msgid "GLOBAL" msgstr "" -#: iam/models.py:76 +#: iam/models.py:79 msgid "DOMAIN" msgstr "" -#: iam/models.py:77 +#: iam/models.py:80 msgid "ENCLAVE" msgstr "" -#: iam/models.py:86 +#: iam/models.py:90 msgid "parent folder" msgstr "" -#: iam/models.py:96 +#: iam/models.py:100 msgid "Folder" msgstr "" -#: iam/models.py:97 +#: iam/models.py:101 msgid "Folders" msgstr "" -#: iam/models.py:221 +#: iam/models.py:223 msgid "user group" msgstr "" -#: iam/models.py:222 iam/models.py:350 +#: iam/models.py:224 iam/models.py:371 msgid "user groups" msgstr "" -#: iam/models.py:279 +#: iam/models.py:299 msgid "Welcome to Ciso Assistant!" msgstr "Bienvenue sur CISO Assistant !" -#: iam/models.py:326 +#: iam/models.py:346 msgid "last name" msgstr "" -#: iam/models.py:327 +#: iam/models.py:347 msgid "first name" msgstr "" -#: iam/models.py:333 +#: iam/models.py:354 msgid "active" msgstr "" -#: iam/models.py:336 +#: iam/models.py:357 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "" -#: iam/models.py:340 +#: iam/models.py:361 msgid "date joined" msgstr "" -#: iam/models.py:342 +#: iam/models.py:363 msgid "superuser status" msgstr "" -#: iam/models.py:345 +#: iam/models.py:366 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." msgstr "" -#: iam/models.py:353 +#: iam/models.py:374 msgid "" "The user groups this user belongs to. A user will get all permissions " "granted to each of their user groups." msgstr "" -#: iam/models.py:368 +#: iam/models.py:389 msgid "user" msgstr "" -#: iam/models.py:369 +#: iam/models.py:390 msgid "users" msgstr "" -#: iam/models.py:511 +#: iam/models.py:557 msgid "permissions" msgstr "" -#: iam/models.py:526 +#: iam/models.py:572 msgid "Domain" msgstr "" -#: iam/models.py:532 +#: iam/models.py:578 msgid "Role" msgstr "" -#: iam/models.py:533 +#: iam/models.py:579 msgid "sub folders are visible" msgstr "" @@ -156,87 +474,87 @@ msgstr "" msgid "Key" msgstr "" -#: iam/views.py:97 +#: iam/views.py:128 msgid "CISO Assistant: Password Reset" -msgstr "" +msgstr "CISO Assistant : réinitialisation de mot de passe" #: tprm/models.py:20 msgid "Owned folders" msgstr "" -#: tprm/models.py:27 tprm/models.py:82 -msgid "Entity" -msgstr "" - #: tprm/models.py:28 msgid "Entities" msgstr "" -#: tprm/models.py:33 +#: tprm/models.py:42 msgid "Blocker" msgstr "" -#: tprm/models.py:34 +#: tprm/models.py:43 msgid "Warning" msgstr "" -#: tprm/models.py:35 +#: tprm/models.py:44 msgid "Ok" msgstr "" -#: tprm/models.py:36 +#: tprm/models.py:45 msgid "Not applicable" msgstr "" -#: tprm/models.py:38 tprm/models.py:115 +#: tprm/models.py:47 tprm/models.py:130 msgid "Criticality" msgstr "" -#: tprm/models.py:39 +#: tprm/models.py:48 msgid "Penetration" msgstr "" -#: tprm/models.py:40 +#: tprm/models.py:49 msgid "Dependency" msgstr "" -#: tprm/models.py:41 +#: tprm/models.py:50 msgid "Maturity" msgstr "" -#: tprm/models.py:42 +#: tprm/models.py:51 msgid "Trust" msgstr "" -#: tprm/models.py:51 tprm/models.py:121 +#: tprm/models.py:55 +msgid "Representative" +msgstr "" + +#: tprm/models.py:66 tprm/models.py:136 msgid "Solutions" msgstr "" -#: tprm/models.py:62 +#: tprm/models.py:77 msgid "Conclusion" msgstr "" -#: tprm/models.py:68 +#: tprm/models.py:83 msgid "Entity assessment" msgstr "" -#: tprm/models.py:69 +#: tprm/models.py:84 msgid "Entity assessments" msgstr "" -#: tprm/models.py:104 +#: tprm/models.py:119 msgid "Provider entity" msgstr "" -#: tprm/models.py:110 +#: tprm/models.py:125 msgid "Recipient entity" msgstr "" -#: tprm/models.py:120 +#: tprm/models.py:135 msgid "Solution" msgstr "" -#: tprm/serializers.py:73 +#: tprm/serializers.py:74 msgid "Framework required" msgstr "" From c6ffe351f95ea5e37ddb9125fe26f2e9ff6fffc2 Mon Sep 17 00:00:00 2001 From: eric-intuitem <71850047+eric-intuitem@users.noreply.github.com> Date: Thu, 12 Dec 2024 01:28:06 +0100 Subject: [PATCH 2/4] Update reset_mail.py --- backend/core/management/commands/reset_mail.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/core/management/commands/reset_mail.py b/backend/core/management/commands/reset_mail.py index bdb949243..b0b11b4fa 100644 --- a/backend/core/management/commands/reset_mail.py +++ b/backend/core/management/commands/reset_mail.py @@ -4,6 +4,7 @@ from ciso_assistant.settings import CISO_ASSISTANT_SUPERUSER_EMAIL from django.utils.translation import gettext_lazy as _ + class Command(BaseCommand): help = "Send reset email" From 7436cd7ae050d2af568609fa10130477cbe2badd Mon Sep 17 00:00:00 2001 From: eric-intuitem <71850047+eric-intuitem@users.noreply.github.com> Date: Thu, 12 Dec 2024 22:14:35 +0100 Subject: [PATCH 3/4] Finish internationalisation of password management --- frontend/messages/en.json | 5 ++++- frontend/messages/fr.json | 4 +++- frontend/src/hooks.server.ts | 3 ++- frontend/src/lib/utils/constants.ts | 6 ++++++ frontend/src/routes/(app)/+layout.server.ts | 5 +++-- .../src/routes/(authentication)/login/+page.server.ts | 5 +++-- .../password-reset/confirm/+page.server.ts | 3 +++ .../(authentication)/password-reset/confirm/+page.svelte | 9 +++++---- frontend/src/routes/+layout.server.ts | 6 +++++- frontend/src/routes/ParaglideJsProvider.svelte | 6 +++--- 10 files changed, 37 insertions(+), 15 deletions(-) diff --git a/frontend/messages/en.json b/frontend/messages/en.json index a58960796..ad5d8c254 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -979,5 +979,8 @@ "attackPath": "Attack path", "attackPaths": "Attack paths", "currentCriticality": "Current criticality", - "residualCriticality": "Residual criticality" + "residualCriticality": "Residual criticality", + "errorAssetGraphMustNotContainCycles": "The asset graph must not contain cycles.", + "resetPasswordHere": "You can reset your password here.", + "resetPassword": "Reset password" } diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 99beff3c0..abf206708 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -903,5 +903,7 @@ "bringTheEvidencesHelpText": "Si désactivé, l'objet sera dupliqué sans ses preuves", "existingControlsHelper": "Que disposez-vous actuellement pour gérer ce risque", "extraControlsHelper": "Que ferez-vous pour atténuer ce risque", - "existingContextHelper": "Description des mesures existantes (ce champ sera bientôt obsolète)" + "existingContextHelper": "Description des mesures existantes (ce champ sera bientôt obsolète)", + "resetPasswordHere": "Vous pouvez réinitialiser votre mot de passe ici.", + "resetPassword": "Réinitialiser le mot de passe" } diff --git a/frontend/src/hooks.server.ts b/frontend/src/hooks.server.ts index cfcd9c03d..2add51d4a 100644 --- a/frontend/src/hooks.server.ts +++ b/frontend/src/hooks.server.ts @@ -4,6 +4,7 @@ import type { User } from '$lib/utils/types'; import { redirect, type Handle, type RequestEvent, type HandleFetch } from '@sveltejs/kit'; import { setFlash } from 'sveltekit-flash-message/server'; import { languageTag, setLanguageTag } from '$paraglide/runtime'; +import { DEFAULT_LANGUAGE } from '$lib/utils/constants'; import { loadFeatureFlags } from '$lib/feature-flags'; @@ -66,7 +67,7 @@ export const handle: Handle = async ({ event, resolve }) => { const errorId = new URL(event.request.url).searchParams.get('error'); if (errorId) { - setLanguageTag(event.cookies.get('ciso_lang') || 'en'); + setLanguageTag(event.cookies.get('ciso_lang') || DEFAULT_LANGUAGE); setFlash({ type: 'error', message: safeTranslate(errorId) }, event); redirect(302, '/login'); } diff --git a/frontend/src/lib/utils/constants.ts b/frontend/src/lib/utils/constants.ts index 3a4843a96..61b8706b4 100644 --- a/frontend/src/lib/utils/constants.ts +++ b/frontend/src/lib/utils/constants.ts @@ -6,6 +6,12 @@ export const BASE_API_URL = `${ : 'http://localhost:8000/api' }`; +export const DEFAULT_LANGUAGE = `${ + Object.hasOwn(env, 'PUBLIC_DEFAULT_LANGUAGE') + ? env.PUBLIC_DEFAULT_LANGUAGE + : 'en' +}`; + export const ALLAUTH_API_URL = `${BASE_API_URL}/_allauth/app/v1`; export const BACKEND_API_EXPOSED_URL = `${ diff --git a/frontend/src/routes/(app)/+layout.server.ts b/frontend/src/routes/(app)/+layout.server.ts index 9c3ee0634..42dece87a 100644 --- a/frontend/src/routes/(app)/+layout.server.ts +++ b/frontend/src/routes/(app)/+layout.server.ts @@ -1,7 +1,8 @@ import type { LayoutServerLoad } from './$types'; import { redirect } from '@sveltejs/kit'; import { loadFlash } from 'sveltekit-flash-message/server'; -import { setLanguageTag, sourceLanguageTag } from '$paraglide/runtime'; +import { setLanguageTag } from '$paraglide/runtime'; +import { DEFAULT_LANGUAGE } from '$lib/utils/constants'; const loginPageRegex = /^[a-zA-Z0-9]+:\/\/[^\/]+\/login\/?.*$/; @@ -21,6 +22,6 @@ export const load = loadFlash(async ({ locals, url, cookies, request }) => { }); } } - setLanguageTag(cookies.get('ciso_lang') || sourceLanguageTag); + setLanguageTag(cookies.get('ciso_lang') || DEFAULT_LANGUAGE); return { user: locals.user, settings: locals.settings }; }) satisfies LayoutServerLoad; diff --git a/frontend/src/routes/(authentication)/login/+page.server.ts b/frontend/src/routes/(authentication)/login/+page.server.ts index 7b118aa89..d8d371a5b 100644 --- a/frontend/src/routes/(authentication)/login/+page.server.ts +++ b/frontend/src/routes/(authentication)/login/+page.server.ts @@ -8,6 +8,7 @@ import { setError, superValidate } from 'sveltekit-superforms'; import { zod } from 'sveltekit-superforms/adapters'; import type { PageServerLoad } from './$types'; import { mfaAuthenticateSchema } from './mfa/utils/schemas'; +import { DEFAULT_LANGUAGE } from '$lib/utils/constants'; interface AuthenticationFlow { id: @@ -125,8 +126,8 @@ export const actions: Actions = { const preferencesRes = await fetch(`${BASE_API_URL}/user-preferences/`); const preferences = await preferencesRes.json(); - const currentLang = cookies.get('ciso_lang') || 'en'; - const preferedLang = preferences.lang || 'en'; + const currentLang = cookies.get('ciso_lang') || DEFAULT_LANGUAGE; + const preferedLang = preferences.lang || DEFAULT_LANGUAGE; if (currentLang !== preferedLang) { cookies.set('ciso_lang', preferedLang, { diff --git a/frontend/src/routes/(authentication)/password-reset/confirm/+page.server.ts b/frontend/src/routes/(authentication)/password-reset/confirm/+page.server.ts index 126a95820..34f993d27 100644 --- a/frontend/src/routes/(authentication)/password-reset/confirm/+page.server.ts +++ b/frontend/src/routes/(authentication)/password-reset/confirm/+page.server.ts @@ -7,8 +7,11 @@ import { setFlash } from 'sveltekit-flash-message/server'; import { setError, superValidate } from 'sveltekit-superforms'; import { zod } from 'sveltekit-superforms/adapters'; import type { PageServerLoad } from './$types'; +import { setLanguageTag } from '$paraglide/runtime'; +import { DEFAULT_LANGUAGE } from '$lib/utils/constants'; export const load: PageServerLoad = async (event) => { + setLanguageTag(event.cookies.get('ciso_lang') || DEFAULT_LANGUAGE); const form = await superValidate(event.request, zod(ResetPasswordSchema)); return { form }; diff --git a/frontend/src/routes/(authentication)/password-reset/confirm/+page.svelte b/frontend/src/routes/(authentication)/password-reset/confirm/+page.svelte index d09d5d82f..c49ece59c 100644 --- a/frontend/src/routes/(authentication)/password-reset/confirm/+page.svelte +++ b/frontend/src/routes/(authentication)/password-reset/confirm/+page.svelte @@ -5,6 +5,7 @@ import TextField from '$lib/components/Forms/TextField.svelte'; import { ResetPasswordSchema } from '$lib/utils/schemas'; import { zod } from 'sveltekit-superforms/adapters'; + import * as m from '$paraglide/messages.js'; export let data: PageData; @@ -21,7 +22,7 @@

- You can reset your password here.
+ {m.resetPasswordHere()}

@@ -32,18 +33,18 @@ let:form validators={zod(ResetPasswordSchema)} > - +

{m.resetPassword()}

diff --git a/frontend/src/routes/+layout.server.ts b/frontend/src/routes/+layout.server.ts index 6cfa95884..e04d0fa2f 100644 --- a/frontend/src/routes/+layout.server.ts +++ b/frontend/src/routes/+layout.server.ts @@ -1,5 +1,9 @@ import type { LayoutServerLoad } from './$types'; +import { setLanguageTag } from '$paraglide/runtime'; +import { DEFAULT_LANGUAGE } from '$lib/utils/constants'; -export const load: LayoutServerLoad = async ({ locals }) => { +export const load: LayoutServerLoad = async ({ locals, cookies }) => { + setLanguageTag(cookies.get('ciso_lang') || DEFAULT_LANGUAGE); return { featureFlags: locals.featureFlags }; }; + diff --git a/frontend/src/routes/ParaglideJsProvider.svelte b/frontend/src/routes/ParaglideJsProvider.svelte index 777a8ae3a..02249a03b 100644 --- a/frontend/src/routes/ParaglideJsProvider.svelte +++ b/frontend/src/routes/ParaglideJsProvider.svelte @@ -3,15 +3,15 @@ languageTag, onSetLanguageTag, setLanguageTag, - sourceLanguageTag } from '$paraglide/runtime'; import { onDestroy, onMount } from 'svelte'; import { browser } from '$app/environment'; import { getCookie, deleteCookie, setCookie } from '$lib/utils/cookies'; + import { DEFAULT_LANGUAGE } from '$lib/utils/constants'; onMount(() => { - // const valueFromSession = sessionStorage.getItem('lang') || sourceLanguageTag; - const valueFromCookies = getCookie('ciso_lang') || sourceLanguageTag; + // const valueFromSession = sessionStorage.getItem('lang') || DEFAULT_LANGUAGE; + const valueFromCookies = getCookie('ciso_lang') || DEFAULT_LANGUAGE; // @ts-ignore setCookie('ciso_lang', valueFromCookies); setLanguageTag(valueFromCookies); From b93bee7517940c1c3dae2e9b3b1c5ca8229a2e81 Mon Sep 17 00:00:00 2001 From: eric-intuitem <71850047+eric-intuitem@users.noreply.github.com> Date: Thu, 12 Dec 2024 22:44:04 +0100 Subject: [PATCH 4/4] prettier/add missing translations --- frontend/messages/cz.json | 2 +- frontend/messages/de.json | 2 +- frontend/messages/en.json | 2 +- frontend/messages/es.json | 2 +- frontend/messages/fr.json | 3 +-- frontend/messages/it.json | 2 +- frontend/messages/nl.json | 2 +- frontend/messages/pl.json | 2 +- frontend/messages/pt.json | 2 +- frontend/messages/ro.json | 2 +- frontend/messages/sv.json | 2 +- frontend/src/lib/utils/constants.ts | 4 +--- .../routes/(authentication)/first-connexion/+page.svelte | 6 +++--- frontend/src/routes/+layout.server.ts | 1 - frontend/src/routes/ParaglideJsProvider.svelte | 6 +----- 15 files changed, 16 insertions(+), 24 deletions(-) diff --git a/frontend/messages/cz.json b/frontend/messages/cz.json index bf0e1bb6a..fe3447b1e 100644 --- a/frontend/messages/cz.json +++ b/frontend/messages/cz.json @@ -442,7 +442,7 @@ "yourStreamlined": "Vaše zefektivněné", "oneStopShop": "jednotné řešení", "forComplianceRiskManagement": "pro řízení souladu a rizik.", - "youCanSetPAsswordHere": "Zde si můžete nastavit heslo", + "youCanSetPAsswordHere": "Zde si můžete nastavit heslo.", "setPassword": "Nastavit heslo", "logIntoYourAccount": "Přihlaste se ke svému účtu", "youNeedToLogIn": "Pro přístup ke všem funkcím se musíte přihlásit", diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 269002270..d14bdbaab 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -444,7 +444,7 @@ "yourStreamlined": "Ihr optimierter", "oneStopShop": "One-Stop-Shop", "forComplianceRiskManagement": "für Compliance- und Risikomanagement.", - "youCanSetPAsswordHere": "Sie können hier Ihr Passwort festlegen", + "youCanSetPAsswordHere": "Sie können hier Ihr Passwort festlegen.", "setPassword": "Passwort festlegen", "logIntoYourAccount": "Melden Sie sich in Ihrem Konto an", "youNeedToLogIn": "Sie müssen sich anmelden, um auf alle Funktionen zuzugreifen", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index ad5d8c254..23e2996f1 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -447,7 +447,7 @@ "yourStreamlined": "Your streamlined", "oneStopShop": "one-stop shop", "forComplianceRiskManagement": "for compliance and risk management.", - "youCanSetPAsswordHere": "You can set your password here", + "youCanSetPAsswordHere": "You can set your password here.", "setPassword": "Set password", "logIntoYourAccount": "Log into your account", "youNeedToLogIn": "You need to login to access all the features", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index c5804188d..4c2370565 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -444,7 +444,7 @@ "yourStreamlined": "Tu simplificado", "oneStopShop": "todo en uno", "forComplianceRiskManagement": "para la gestión de cumplimiento y riesgos.", - "youCanSetPAsswordHere": "Puede establecer su contraseña aquí", + "youCanSetPAsswordHere": "Puede establecer su contraseña aquí.", "setPassword": "Establecer contraseña", "logIntoYourAccount": "Inicie sesión en su cuenta", "youNeedToLogIn": "Debe iniciar sesión para acceder a todas las funciones", diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index abf206708..a7a31ad1d 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -447,7 +447,7 @@ "yourStreamlined": "Votre solution", "oneStopShop": "tout-en-un", "forComplianceRiskManagement": "pour la conformité et la gestion des risques.", - "youCanSetPAsswordHere": "Vous pouvez définir votre mot de passe ici", + "youCanSetPAsswordHere": "Vous pouvez définir votre mot de passe ici.", "setPassword": "Définir le mot de passe", "logIntoYourAccount": "Connectez-vous à votre compte", "youNeedToLogIn": "Vous devez vous connecter pour accéder à toutes les fonctionnalités", @@ -871,7 +871,6 @@ "addTag": "Ajouter une étiquette", "tagsHelpText": "Les étiquettes sont utilisées pour classer et filtrer les éléments. Vous pouvez ajouter des étiquettes dans la section Extra", "existingMeasures": "Mesures existantes", - "youCanSetPasswordHere": "Vous pouvez définir votre mot de passe ici", "forgotPassword": "Mot de passe oublié", "ssoSettingsUpdated": "Paramètres SSO mis à jour", "scoreSemiColon": "Score:", diff --git a/frontend/messages/it.json b/frontend/messages/it.json index 10b260ee0..675fa1f2d 100644 --- a/frontend/messages/it.json +++ b/frontend/messages/it.json @@ -444,7 +444,7 @@ "yourStreamlined": "Il tuo", "oneStopShop": "punto unico di accesso (one-stop-shop)", "forComplianceRiskManagement": "per la gestione delle conformità e dei rischi.", - "youCanSetPAsswordHere": "Puoi impostare la tua password qui", + "youCanSetPAsswordHere": "Puoi impostare la tua password qui.", "setPassword": "Imposta password", "logIntoYourAccount": "Accedi", "youNeedToLogIn": "Devi accedere per poter utilizzare tutte le funzionalità", diff --git a/frontend/messages/nl.json b/frontend/messages/nl.json index f8efeae7a..b70508109 100644 --- a/frontend/messages/nl.json +++ b/frontend/messages/nl.json @@ -444,7 +444,7 @@ "yourStreamlined": "Je gestroomlijnde", "oneStopShop": "one-stop-shop", "forComplianceRiskManagement": "voor naleving en risicomanagement.", - "youCanSetPAsswordHere": "Je kunt hier je wachtwoord instellen", + "youCanSetPAsswordHere": "Je kunt hier je wachtwoord instellen.", "setPassword": "Wachtwoord instellen", "logIntoYourAccount": "Log in op je account", "youNeedToLogIn": "Je moet inloggen om toegang te krijgen tot alle functies", diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index 7eff89efe..667ebc3b5 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -444,7 +444,7 @@ "yourStreamlined": "Twoje usprawnione", "oneStopShop": "jedno miejsce", "forComplianceRiskManagement": "dla zgodności i zarządzania ryzykiem.", - "youCanSetPAsswordHere": "Możesz ustawić swoje hasło tutaj", + "youCanSetPAsswordHere": "Możesz ustawić swoje hasło tutaj.", "setPassword": "Ustaw hasło", "logIntoYourAccount": "Zaloguj się na swoje konto", "youNeedToLogIn": "Musisz się zalogować, aby uzyskać dostęp do wszystkich funkcji", diff --git a/frontend/messages/pt.json b/frontend/messages/pt.json index 4c4271b0b..5c69c42e9 100644 --- a/frontend/messages/pt.json +++ b/frontend/messages/pt.json @@ -444,7 +444,7 @@ "yourStreamlined": "Sua solução", "oneStopShop": "tudo em um", "forComplianceRiskManagement": "para conformidade e gerenciamento de riscos.", - "youCanSetPAsswordHere": "Você pode definir sua senha aqui", + "youCanSetPAsswordHere": "Você pode definir sua senha aqui.", "setPassword": "Definir senha", "logIntoYourAccount": "Faça login em sua conta", "youNeedToLogIn": "Você precisa fazer login para acessar todos os recursos", diff --git a/frontend/messages/ro.json b/frontend/messages/ro.json index b451cbb0a..f6c73e91c 100644 --- a/frontend/messages/ro.json +++ b/frontend/messages/ro.json @@ -444,7 +444,7 @@ "yourStreamlined": "Asistentul tău", "oneStopShop": "universal", "forComplianceRiskManagement": "pentru conformitate și managementul riscurilor.", - "youCanSetPAsswordHere": "Puteți seta parola dvs. aici", + "youCanSetPAsswordHere": "Puteți seta parola dvs. aici.", "setPassword": "Setează parola", "logIntoYourAccount": "Conectați-vă la contul dvs.", "youNeedToLogIn": "Trebuie să vă conectați pentru a accesa toate funcțiile", diff --git a/frontend/messages/sv.json b/frontend/messages/sv.json index 2493768ff..7396758e8 100644 --- a/frontend/messages/sv.json +++ b/frontend/messages/sv.json @@ -859,7 +859,7 @@ "addTag": "Lägg till etikett", "tagsHelpText": "Etiketter hjälper till att kategorisera och filtrera flera objekt. Du kan hantera dem i menyn Extra.", "existingMeasures": "Befintliga kontroller", - "youCanSetPasswordHere": "Du kan ställa in ditt lösenord här", + "youCanSetPasswordHere": "Du kan ställa in ditt lösenord här.", "forgotPassword": "Glömt lösenord", "ssoSettingsUpdated": "SSO-inställningar uppdaterade", "scoreSemiColon": "Göra:", diff --git a/frontend/src/lib/utils/constants.ts b/frontend/src/lib/utils/constants.ts index 61b8706b4..a3db16041 100644 --- a/frontend/src/lib/utils/constants.ts +++ b/frontend/src/lib/utils/constants.ts @@ -7,9 +7,7 @@ export const BASE_API_URL = `${ }`; export const DEFAULT_LANGUAGE = `${ - Object.hasOwn(env, 'PUBLIC_DEFAULT_LANGUAGE') - ? env.PUBLIC_DEFAULT_LANGUAGE - : 'en' + Object.hasOwn(env, 'PUBLIC_DEFAULT_LANGUAGE') ? env.PUBLIC_DEFAULT_LANGUAGE : 'en' }`; export const ALLAUTH_API_URL = `${BASE_API_URL}/_allauth/app/v1`; diff --git a/frontend/src/routes/(authentication)/first-connexion/+page.svelte b/frontend/src/routes/(authentication)/first-connexion/+page.svelte index 1c092f59b..6031a533c 100644 --- a/frontend/src/routes/(authentication)/first-connexion/+page.svelte +++ b/frontend/src/routes/(authentication)/first-connexion/+page.svelte @@ -39,7 +39,7 @@

- {m.youCanSetPAsswordHere()}.
+ {m.youCanSetPAsswordHere()}

@@ -50,12 +50,12 @@ let:form validators={zod(ResetPasswordSchema)} > - +