From 77482d3e90d738525a535397faf849dba6e55f1e Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Mon, 26 Feb 2024 15:41:57 +0100 Subject: [PATCH 1/7] feat: add EN translation in scoring assistant --- frontend/messages/en.json | 90 +++- frontend/src/lib/utils/locales.ts | 87 ++++ .../(app)/scoring-assistant/+page.svelte | 19 +- .../(app)/scoring-assistant/selector.svelte | 6 +- .../routes/(app)/scoring-assistant/utils.ts | 442 +++++++++--------- 5 files changed, 411 insertions(+), 233 deletions(-) diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 1c2c88325..9428188d2 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -229,6 +229,94 @@ "residualInMatrixView": "Residual", "probability": "Probability", "riskLevels": "Risk levels", + "riskLevel": "Risk level", "cancel": "Cancel", - "save": "Save" + "save": "Save", + "NA": "N/A", + "threatAgentFactors": "Threat agent factors", + "vulnerabilityFactors": "Vulnerability factors", + "businessImpactFactors": "Business impact factors", + "technicalImpactFactors": "Technical impact factors", + "assessmentVector": "Assessment vector", + "skillLevelText": "How technically skilled is this group of threat agents?", + "skillLevelChoice1": "No technical skills", + "skillLevelChoice2": "Some technical skills", + "skillLevelChoice3": "Advanced computer user", + "skillLevelChoice4": "Network and programming skills", + "skillLevelChoice5": "Security penetration skills", + "motiveText": "How motivated is this group of threat agents to find and exploit this vulnerability?", + "motiveChoice1": "Low or no reward", + "motiveChoice2": "Possible reward", + "motiveChoice3": "High reward", + "opportunityText": "What resources and opportunities are required for this group of threat agents to find and exploit this vulnerability?", + "opportunityChoice1": "Full access or expensive resources required", + "opportunityChoice2": "Specialized access or resources required", + "opportunityChoice3": "Some access or resources required", + "opportunityChoice4": "No access or resources required", + "sizeText": "How large is this group of threat agents?", + "sizeChoice1": "Developers or system administrators", + "sizeChoice2": "Intranet users", + "sizeChoice3": "Partners", + "sizeChoice4": "Authenticated users", + "sizeChoice5": "Anonymous internet users", + "easeOfDiscoveryText": "How easy is it for this group of threat agents to discover this vulnerability?", + "easeOfDiscoveryChoice1": "Practically impossible", + "easeOfDiscoveryChoice2": "Difficult", + "easeOfDiscoveryChoice3": "Easy", + "easeOfDiscoveryChoice4": "Automated tools available", + "easeOfExploitText": "How easy is it for this group of threat agents to actually exploit this vulnerability?", + "easeOfExploitChoice1": "Theoretical", + "easeOfExploitChoice2": "Difficult", + "easeOfExploitChoice3": "Easy", + "easeOfExploitChoice4": "Automated tools available", + "awarenessText": "How well known is this vulnerability to this group of threat agents?", + "awarenessChoice1": "Unknown", + "awarenessChoice2": "Hidden", + "awarenessChoice3": "Obvious", + "awarenessChoice4": "Public knowledge", + "intrusionDetectionText": "How likely is an exploit to be detected?", + "intrusionDetectionChoice1": "Active detection in application", + "intrusionDetectionChoice2": "Logged and reviewed", + "intrusionDetectionChoice3": "Logged without review", + "intrusionDetectionChoice4": "Not logged", + "financialDamageText": "How much financial damage will result from an exploit?", + "financialDamageChoice1": "Less than the cost to fix the vulnerability", + "financialDamageChoice2": "Minor effect on annual profit", + "financialDamageChoice3": "Significant effect on annual profit", + "financialDamageChoice4": "Bankruptcy", + "reputationDamageText": "Would an exploit result in reputation damage that would harm the business?", + "reputationDamageChoice1": "Minimal damage", + "reputationDamageChoice2": "Loss of major accounts", + "reputationDamageChoice3": "Loss of goodwill", + "reputationDamageChoice4": "Brand damage", + "nonComplianceText": "How much exposure does non-compliance introduce?", + "nonComplianceChoice1": "Minor violation", + "nonComplianceChoice2": "Clear violation", + "nonComplianceChoice3": "High profile violation", + "nonComplianceChoice4": "No exposure", + "privacyViolationText": "How much personally identifiable information could be disclosed?", + "privacyViolationChoice1": "One individual", + "privacyViolationChoice2": "Hundreds of people", + "privacyViolationChoice3": "Thousands of people", + "privacyViolationChoice4": "Millions of people", + "lossOfConfidentialityText": "How much data could be disclosed and how sensitive is it?", + "lossOfConfidentialityChoice1": "Minimal non-sensitive data disclosed", + "lossOfConfidentialityChoice2": "Minimal critical data or extensive non-sensitive data disclosed", + "lossOfConfidentialityChoice3": "Extensive critical data disclosed", + "lossOfConfidentialityChoice4": "All data disclosed", + "lossOfIntegrityText": "How much data could be corrupted and how damaged is it?", + "lossOfIntegrityChoice1": "Minimal slightly corrupt data", + "lossOfIntegrityChoice2": "Minimal seriously corrupt data", + "lossOfIntegrityChoice3": "Extensive slightly corrupt data", + "lossOfIntegrityChoice4": "Extensive seriously corrupt data", + "lossOfIntegrityChoice5": "All data totally corrupt", + "lossOfAvailabilityText": "How much service could be lost and how vital is it?", + "lossOfAvailabilityChoice1": "Minimal secondary services interrupted", + "lossOfAvailabilityChoice2": "Minimal primary or extensive secondary services interrupted", + "lossOfAvailabilityChoice3": "Extensive primary services interrupted", + "lossOfAvailabilityChoice4": "All services completely lost", + "lossOfAccountabilityText": "Are the threat agents' actions traceable to an individual?", + "lossOfAccountabilityChoice1": "Fully traceable", + "lossOfAccountabilityChoice2": "Possibly traceable", + "lossOfAccountabilityChoice3": "Completely anonymous" } diff --git a/frontend/src/lib/utils/locales.ts b/frontend/src/lib/utils/locales.ts index 195c3d353..f4493dab0 100644 --- a/frontend/src/lib/utils/locales.ts +++ b/frontend/src/lib/utils/locales.ts @@ -167,6 +167,93 @@ export function localItems(languageTag: string): LocalItems { associatedDomains: m.associatedDomains({ languageTag: languageTag }), associatedProjects: m.associatedProjects({ languageTag: languageTag }), associatedUsers: m.associatedUsers({ languageTag: languageTag }), + NA: m.NA({ languageTag: languageTag }), + threatAgentFactors: m.threatAgentFactors({ languageTag: languageTag }), + vulnerabilityFactors: m.vulnerabilityFactors({ languageTag: languageTag }), + businessImpactFactors: m.businessImpactFactors({ languageTag: languageTag }), + technicalImpactFactors: m.technicalImpactFactors({ languageTag: languageTag }), + assessmentVector: m.assessmentVector({ languageTag: languageTag }), + skillLevelText: m.skillLevelText({ languageTag: languageTag }), + skillLevelChoice1: m.skillLevelChoice1({ languageTag: languageTag }), + skillLevelChoice2: m.skillLevelChoice2({ languageTag: languageTag }), + skillLevelChoice3: m.skillLevelChoice3({ languageTag: languageTag }), + skillLevelChoice4: m.skillLevelChoice4({ languageTag: languageTag }), + skillLevelChoice5: m.skillLevelChoice5({ languageTag: languageTag }), + motiveText: m.motiveText({ languageTag: languageTag }), + motiveChoice1: m.motiveChoice1({ languageTag: languageTag }), + motiveChoice2: m.motiveChoice2({ languageTag: languageTag }), + motiveChoice3: m.motiveChoice3({ languageTag: languageTag }), + opportunityText: m.opportunityText({ languageTag: languageTag }), + opportunityChoice1: m.opportunityChoice1({ languageTag: languageTag }), + opportunityChoice2: m.opportunityChoice2({ languageTag: languageTag }), + opportunityChoice3: m.opportunityChoice3({ languageTag: languageTag }), + opportunityChoice4: m.opportunityChoice4({ languageTag: languageTag }), + sizeText: m.sizeText({ languageTag: languageTag }), + sizeChoice1: m.sizeChoice1({ languageTag: languageTag }), + sizeChoice2: m.sizeChoice2({ languageTag: languageTag }), + sizeChoice3: m.sizeChoice3({ languageTag: languageTag }), + sizeChoice4: m.sizeChoice4({ languageTag: languageTag }), + sizeChoice5: m.sizeChoice5({ languageTag: languageTag }), + easeOfDiscoveryText: m.easeOfDiscoveryText({ languageTag: languageTag }), + easeOfDiscoveryChoice1: m.easeOfDiscoveryChoice1({ languageTag: languageTag }), + easeOfDiscoveryChoice2: m.easeOfDiscoveryChoice2({ languageTag: languageTag }), + easeOfDiscoveryChoice3: m.easeOfDiscoveryChoice3({ languageTag: languageTag }), + easeOfDiscoveryChoice4: m.easeOfDiscoveryChoice4({ languageTag: languageTag }), + easeOfExploitText: m.easeOfExploitText({ languageTag: languageTag }), + easeOfExploitChoice1: m.easeOfExploitChoice1({ languageTag: languageTag }), + easeOfExploitChoice2: m.easeOfExploitChoice2({ languageTag: languageTag }), + easeOfExploitChoice3: m.easeOfExploitChoice3({ languageTag: languageTag }), + easeOfExploitChoice4: m.easeOfExploitChoice4({ languageTag: languageTag }), + awarenessText: m.awarenessText({ languageTag: languageTag }), + awarenessChoice1: m.awarenessChoice1({ languageTag: languageTag }), + awarenessChoice2: m.awarenessChoice2({ languageTag: languageTag }), + awarenessChoice3: m.awarenessChoice3({ languageTag: languageTag }), + awarenessChoice4: m.awarenessChoice4({ languageTag: languageTag }), + intrusionDetectionText: m.intrusionDetectionText({ languageTag: languageTag }), + intrusionDetectionChoice1: m.intrusionDetectionChoice1({ languageTag: languageTag }), + intrusionDetectionChoice2: m.intrusionDetectionChoice2({ languageTag: languageTag }), + intrusionDetectionChoice3: m.intrusionDetectionChoice3({ languageTag: languageTag }), + intrusionDetectionChoice4: m.intrusionDetectionChoice4({ languageTag: languageTag }), + financialDamageText: m.financialDamageText({ languageTag: languageTag }), + financialDamageChoice1: m.financialDamageChoice1({ languageTag: languageTag }), + financialDamageChoice2: m.financialDamageChoice2({ languageTag: languageTag }), + financialDamageChoice3: m.financialDamageChoice3({ languageTag: languageTag }), + financialDamageChoice4: m.financialDamageChoice4({ languageTag: languageTag }), + reputationDamageText: m.reputationDamageText({ languageTag: languageTag }), + reputationDamageChoice1: m.reputationDamageChoice1({ languageTag: languageTag }), + reputationDamageChoice2: m.reputationDamageChoice2({ languageTag: languageTag }), + reputationDamageChoice3: m.reputationDamageChoice3({ languageTag: languageTag }), + reputationDamageChoice4: m.reputationDamageChoice4({ languageTag: languageTag }), + nonComplianceText: m.nonComplianceText({ languageTag: languageTag }), + nonComplianceChoice1: m.nonComplianceChoice1({ languageTag: languageTag }), + nonComplianceChoice2: m.nonComplianceChoice2({ languageTag: languageTag }), + nonComplianceChoice3: m.nonComplianceChoice3({ languageTag: languageTag }), + nonComplianceChoice4: m.nonComplianceChoice4({ languageTag: languageTag }), + privacyViolationText: m.privacyViolationText({ languageTag: languageTag }), + privacyViolationChoice1: m.privacyViolationChoice1({ languageTag: languageTag }), + privacyViolationChoice2: m.privacyViolationChoice2({ languageTag: languageTag }), + privacyViolationChoice3: m.privacyViolationChoice3({ languageTag: languageTag }), + privacyViolationChoice4: m.privacyViolationChoice4({ languageTag: languageTag }), + lossOfConfidentialityText: m.lossOfConfidentialityText({ languageTag: languageTag }), + lossOfConfidentialityChoice1: m.lossOfConfidentialityChoice1({ languageTag: languageTag }), + lossOfConfidentialityChoice2: m.lossOfConfidentialityChoice2({ languageTag: languageTag }), + lossOfConfidentialityChoice3: m.lossOfConfidentialityChoice3({ languageTag: languageTag }), + lossOfConfidentialityChoice4: m.lossOfConfidentialityChoice4({ languageTag: languageTag }), + lossOfIntegrityText: m.lossOfIntegrityText({ languageTag: languageTag }), + lossOfIntegrityChoice1: m.lossOfIntegrityChoice1({ languageTag: languageTag }), + lossOfIntegrityChoice2: m.lossOfIntegrityChoice2({ languageTag: languageTag }), + lossOfIntegrityChoice3: m.lossOfIntegrityChoice3({ languageTag: languageTag }), + lossOfIntegrityChoice4: m.lossOfIntegrityChoice4({ languageTag: languageTag }), + lossOfIntegrityChoice5: m.lossOfIntegrityChoice5({ languageTag: languageTag }), + lossOfAvailabilityText: m.lossOfAvailabilityText({ languageTag: languageTag }), + lossOfAvailabilityChoice1: m.lossOfAvailabilityChoice1({ languageTag: languageTag }), + lossOfAvailabilityChoice2: m.lossOfAvailabilityChoice2({ languageTag: languageTag }), + lossOfAvailabilityChoice3: m.lossOfAvailabilityChoice3({ languageTag: languageTag }), + lossOfAvailabilityChoice4: m.lossOfAvailabilityChoice4({ languageTag: languageTag }), + lossOfAccountabilityText: m.lossOfAccountabilityText({ languageTag: languageTag }), + lossOfAccountabilityChoice1: m.lossOfAccountabilityChoice1({ languageTag: languageTag }), + lossOfAccountabilityChoice2: m.lossOfAccountabilityChoice2({ languageTag: languageTag }), + lossOfAccountabilityChoice3: m.lossOfAccountabilityChoice3({ languageTag: languageTag }) }; return LOCAL_ITEMS; } diff --git a/frontend/src/routes/(app)/scoring-assistant/+page.svelte b/frontend/src/routes/(app)/scoring-assistant/+page.svelte index 8ee799425..56b2bb902 100644 --- a/frontend/src/routes/(app)/scoring-assistant/+page.svelte +++ b/frontend/src/routes/(app)/scoring-assistant/+page.svelte @@ -2,6 +2,7 @@ import type { RiskMatrixJsonDefinition } from '$lib/utils/types'; import Selector from './selector.svelte'; import { average, forms } from './utils'; + import * as m from '$paraglide/messages'; export let data; export let risk_matrices = data.risk_matrices; @@ -68,7 +69,7 @@
-

Risk matrix

+

{m.riskMatrix()}

{#each choices as text, i} {i}{#if text} - {localItems(languageTag())[text]}{/if} {/each} diff --git a/frontend/src/routes/(app)/scoring-assistant/utils.ts b/frontend/src/routes/(app)/scoring-assistant/utils.ts index adee2f4fe..e04ed7fcb 100644 --- a/frontend/src/routes/(app)/scoring-assistant/utils.ts +++ b/frontend/src/routes/(app)/scoring-assistant/utils.ts @@ -2,267 +2,267 @@ export const forms = { threat_agent: [ { id: 'skill_level', - text: 'How technically skilled is this group of threat agents?', + text: 'skillLevelText', choices: [ - 'N/A', - 'No technical skills', + 'NA', + 'skillLevelChoice1', null, - 'Some technical skills', + 'skillLevelChoice2', null, - 'Advanced computer user', - 'Network and programming skills', + 'skillLevelChoice3', + 'skillLevelChoice4', null, null, - 'Security penetration skills' + 'skillLevelChoice5' ] }, { id: 'motive', - text: 'How motivated is this group of threat agents to find and exploit this vulnerability?', + text: 'motiveText', choices: [ - 'N/A', - 'Low or no reward', + 'NA', + 'motiveChoice1', null, null, - 'Possible reward', + 'motiveChoice2', null, null, null, null, - 'High reward' + 'motiveChoice3' ] }, { id: 'opportunity', - text: 'What resources and opportunities are required for this group of threat agents to find and exploit this vulnerability?', + text: 'opportunityText', choices: [ - 'Full access or expensive resources required', + 'opportunityChoice1', null, null, null, - 'Special access or resources required', + 'opportunityChoice2', null, null, - 'Some access or resources required', + 'opportunityChoice3', null, - 'No access or resources required' + 'opportunityChoice4' ] }, { id: 'size', - text: 'How large is this group of threat agents?', + text: 'sizeText', choices: [ - 'N/A', + 'NA', null, - 'Developers or system administrators', + 'sizeChoice1', null, - 'Intranet users', - 'Partners', - 'Authenticated users', + 'sizeChoice2', + 'sizeChoice3', + 'sizeChoice4', null, null, - 'Anonymous Internet users' + 'sizeChoice5' ] } ], business_impact: [ - { - id: 'ease_of_discovery', - text: 'How easy is it for this group of threat agents to discover this vulnerability?', - choices: [ - 'N/A', - 'Practically impossible', - null, - 'Difficult', - null, - null, - null, - 'Easy', - null, - 'Automated tools available' - ] - }, - { - id: 'ease_of_exploit', - text: 'How easy is it for this group of threat agents to actually exploit this vulnerability?', - choices: [ - 'N/A', - 'Theoretical', - null, - 'Difficult', - null, - 'Easy', - null, - null, - null, - 'Automated tools available' - ] - }, - { - id: 'awareness', - text: 'How well known is this vulnerability to this group of threat agents?', - choices: [ - 'N/A', - 'Unknown', - null, - null, - 'Hidden', - null, - 'Obvious', - null, - null, - 'Public knowledge' - ] - }, - { - id: 'intrusion_detection', - text: 'How likely is an exploit to be detected?', - choices: [ - 'N/A', - 'Active detection in application', - null, - 'Logged and reviewed', - null, - null, - null, - null, - 'Logged without review', - 'Not logged' - ] - } - ], - vulnerability: [ - { - id: 'financial_damage', - text: 'How much financial damage will result from an exploit?', - choices: [ - 'N/A', - 'Less than the cost to fix the vulnerability', - null, - 'Minor effect on annual profit', - null, - null, - null, - 'Significant effect on annual profit', - null, - 'Bankruptcy' - ] - }, - { - id: 'reputation_damage', - text: 'Would an exploit result in reputation damage that would harm the business?', - choices: [ - 'N/A', - 'Minimal damage', - null, - null, - 'Loss of major accounts', - 'Loss of goodwill', - null, - null, - null, - 'Brand damage' - ] - }, - { - id: 'non_compliance', - text: 'How much exposure does non-compliance introduce?', - choices: [ - 'N/A', - null, - 'Minor violation', - null, - null, - 'Clear violation', - null, - 'High profile violation', - null, - null - ] - }, - { - id: 'privacy_violation', - text: 'How much personally identifiable information could be disclosed?', - choices: [ - 'N/A', - null, - null, - 'One individual', - null, - 'Hundreds of people', - null, - 'Thousands of people', - null, - 'Millions of people' - ] - } - ], - technical_impact: [ - { - id: 'loss_of_confidentiality', - text: 'How much data could be disclosed and how sensitive is it?', - choices: [ - 'N/A', - null, - 'Minimal non-sensitive data disclosed', - null, - null, - null, - 'Minimal critical data or extensive non-sensitive data disclosed', - 'Extensive critical data disclosed', - null, - 'All data disclosed' - ] - }, - { - id: 'loss_of_integrity', - text: 'How much data could be corrupted and how damaged is it?', - choices: [ - 'N/A', - 'Minimal slightly corrupt data', - null, - 'Minimal seriously corrupt data', - null, - 'Extensive slightly corrupt data', - null, - 'Extensive seriously corrupt data', - null, - 'All data totally corrupt' - ] - }, - { - id: 'loss_of_availability', - text: 'How much service could be lost and how vital is it?', - choices: [ - 'N/A', - 'Minimal secondary services interrupted', - null, - null, - null, - 'Minimal primary or extensive secondary services interrupted', - null, - 'Extensive primary services interrupted', - null, - 'All services completely lost' - ] - }, - { - id: 'loss_of_accountability', - text: "Are the threat agents' actions traceable to an individual?", - choices: [ - 'N/A', - 'Fully traceable', - null, - null, - null, - null, - null, - 'Possibly traceable', - null, - 'Completely anonymous' - ] - } - ] + { + id: 'ease_of_discovery', + text: 'easeOfDiscoveryText', + choices: [ + 'NA', + 'easeOfDiscoveryChoice1', + null, + 'easeOfDiscoveryChoice2', + null, + null, + null, + 'easeOfDiscoveryChoice3', + null, + 'easeOfDiscoveryChoice4' + ] + }, + { + id: 'ease_of_exploit', + text: 'easeOfExploitText', + choices: [ + 'NA', + 'easeOfExploitChoice1', + null, + 'easeOfExploitChoice2', + null, + 'easeOfExploitChoice3', + null, + null, + null, + 'easeOfExploitChoice4' + ] + }, + { + id: 'awareness', + text: 'awarenessText', + choices: [ + 'NA', + 'awarenessChoice1', + null, + null, + 'awarenessChoice2', + null, + 'awarenessChoice3', + null, + null, + 'awarenessChoice4' + ] + }, + { + id: 'intrusion_detection', + text: 'intrusionDetectionText', + choices: [ + 'NA', + 'intrusionDetectionChoice1', + null, + 'intrusionDetectionChoice2', + null, + null, + null, + null, + 'intrusionDetectionChoice3', + 'intrusionDetectionChoice4' + ] + } + ], + vulnerability: [ + { + id: 'financial_damage', + text: 'financialDamageText', + choices: [ + 'NA', + 'financialDamageChoice1', + null, + 'financialDamageChoice2', + null, + null, + null, + 'financialDamageChoice3', + null, + 'financialDamageChoice4' + ] + }, + { + id: 'reputation_damage', + text: 'reputationDamageText', + choices: [ + 'NA', + 'reputationDamageChoice1', + null, + null, + 'reputationDamageChoice2', + 'reputationDamageChoice3', + null, + null, + null, + 'reputationDamageChoice4' + ] + }, + { + id: 'non_compliance', + text: 'nonComplianceText', + choices: [ + 'NA', + null, + 'nonComplianceChoice1', + null, + null, + 'nonComplianceChoice2', + null, + 'nonComplianceChoice3', + null, + 'nonComplianceChoice4' + ] + }, + { + id: 'privacy_violation', + text: 'privacyViolationText', + choices: [ + 'NA', + null, + null, + 'privacyViolationChoice1', + null, + 'privacyViolationChoice2', + null, + 'privacyViolationChoice3', + null, + 'privacyViolationChoice4' + ] + } + ], + technical_impact: [ + { + id: 'loss_of_confidentiality', + text: 'lossOfConfidentialityText', + choices: [ + 'NA', + null, + 'lossOfConfidentialityChoice1', + null, + null, + null, + 'lossOfConfidentialityChoice2', + 'lossOfConfidentialityChoice3', + null, + 'lossOfConfidentialityChoice4' + ] + }, + { + id: 'loss_of_integrity', + text: 'lossOfIntegrityText', + choices: [ + 'NA', + 'lossOfIntegrityChoice1', + null, + 'lossOfIntegrityChoice2', + null, + 'lossOfIntegrityChoice3', + null, + 'lossOfIntegrityChoice4', + null, + 'lossOfIntegrityChoice5' + ] + }, + { + id: 'loss_of_availability', + text: 'lossOfAvailabilityText', + choices: [ + 'NA', + 'lossOfAvailabilityChoice1', + null, + null, + null, + 'lossOfAvailabilityChoice2', + null, + 'lossOfAvailabilityChoice3', + null, + 'lossOfAvailabilityChoice4' + ] + }, + { + id: 'loss_of_accountability', + text: 'lossOfAccountabilityText', + choices: [ + 'NA', + 'lossOfAccountabilityChoice1', + null, + null, + null, + null, + null, + 'lossOfAccountabilityChoice2', + null, + 'lossOfAccountabilityChoice3' + ] + } + ] }; const round_precision = Math.pow(10, 3); From 36e46d8f5ababf45b887a23cac3c85f4c0a2cffb Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene <90701924+Mohamed-Hacene@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:47:41 +0100 Subject: [PATCH 2/7] inlang: update translations --- frontend/messages/en.json | 118 +++++++++++++++++++------------------- frontend/messages/fr.json | 90 ++++++++++++++++++++++++++++- 2 files changed, 148 insertions(+), 60 deletions(-) diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 9428188d2..2055dd9d9 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -260,63 +260,63 @@ "sizeChoice4": "Authenticated users", "sizeChoice5": "Anonymous internet users", "easeOfDiscoveryText": "How easy is it for this group of threat agents to discover this vulnerability?", - "easeOfDiscoveryChoice1": "Practically impossible", - "easeOfDiscoveryChoice2": "Difficult", - "easeOfDiscoveryChoice3": "Easy", - "easeOfDiscoveryChoice4": "Automated tools available", - "easeOfExploitText": "How easy is it for this group of threat agents to actually exploit this vulnerability?", - "easeOfExploitChoice1": "Theoretical", - "easeOfExploitChoice2": "Difficult", - "easeOfExploitChoice3": "Easy", - "easeOfExploitChoice4": "Automated tools available", - "awarenessText": "How well known is this vulnerability to this group of threat agents?", - "awarenessChoice1": "Unknown", - "awarenessChoice2": "Hidden", - "awarenessChoice3": "Obvious", - "awarenessChoice4": "Public knowledge", - "intrusionDetectionText": "How likely is an exploit to be detected?", - "intrusionDetectionChoice1": "Active detection in application", - "intrusionDetectionChoice2": "Logged and reviewed", - "intrusionDetectionChoice3": "Logged without review", - "intrusionDetectionChoice4": "Not logged", - "financialDamageText": "How much financial damage will result from an exploit?", - "financialDamageChoice1": "Less than the cost to fix the vulnerability", - "financialDamageChoice2": "Minor effect on annual profit", - "financialDamageChoice3": "Significant effect on annual profit", - "financialDamageChoice4": "Bankruptcy", - "reputationDamageText": "Would an exploit result in reputation damage that would harm the business?", - "reputationDamageChoice1": "Minimal damage", - "reputationDamageChoice2": "Loss of major accounts", - "reputationDamageChoice3": "Loss of goodwill", - "reputationDamageChoice4": "Brand damage", - "nonComplianceText": "How much exposure does non-compliance introduce?", - "nonComplianceChoice1": "Minor violation", - "nonComplianceChoice2": "Clear violation", - "nonComplianceChoice3": "High profile violation", - "nonComplianceChoice4": "No exposure", - "privacyViolationText": "How much personally identifiable information could be disclosed?", - "privacyViolationChoice1": "One individual", - "privacyViolationChoice2": "Hundreds of people", - "privacyViolationChoice3": "Thousands of people", - "privacyViolationChoice4": "Millions of people", - "lossOfConfidentialityText": "How much data could be disclosed and how sensitive is it?", - "lossOfConfidentialityChoice1": "Minimal non-sensitive data disclosed", - "lossOfConfidentialityChoice2": "Minimal critical data or extensive non-sensitive data disclosed", - "lossOfConfidentialityChoice3": "Extensive critical data disclosed", - "lossOfConfidentialityChoice4": "All data disclosed", - "lossOfIntegrityText": "How much data could be corrupted and how damaged is it?", - "lossOfIntegrityChoice1": "Minimal slightly corrupt data", - "lossOfIntegrityChoice2": "Minimal seriously corrupt data", - "lossOfIntegrityChoice3": "Extensive slightly corrupt data", - "lossOfIntegrityChoice4": "Extensive seriously corrupt data", - "lossOfIntegrityChoice5": "All data totally corrupt", - "lossOfAvailabilityText": "How much service could be lost and how vital is it?", - "lossOfAvailabilityChoice1": "Minimal secondary services interrupted", - "lossOfAvailabilityChoice2": "Minimal primary or extensive secondary services interrupted", - "lossOfAvailabilityChoice3": "Extensive primary services interrupted", - "lossOfAvailabilityChoice4": "All services completely lost", - "lossOfAccountabilityText": "Are the threat agents' actions traceable to an individual?", - "lossOfAccountabilityChoice1": "Fully traceable", - "lossOfAccountabilityChoice2": "Possibly traceable", - "lossOfAccountabilityChoice3": "Completely anonymous" + "easeOfDiscoveryChoice1": "Practically impossible", + "easeOfDiscoveryChoice2": "Difficult", + "easeOfDiscoveryChoice3": "Easy", + "easeOfDiscoveryChoice4": "Automated tools available", + "easeOfExploitText": "How easy is it for this group of threat agents to actually exploit this vulnerability?", + "easeOfExploitChoice1": "Theoretical", + "easeOfExploitChoice2": "Difficult", + "easeOfExploitChoice3": "Easy", + "easeOfExploitChoice4": "Automated tools available", + "awarenessText": "How well known is this vulnerability to this group of threat agents?", + "awarenessChoice1": "Unknown", + "awarenessChoice2": "Hidden", + "awarenessChoice3": "Obvious", + "awarenessChoice4": "Public knowledge", + "intrusionDetectionText": "How likely is an exploit to be detected?", + "intrusionDetectionChoice1": "Active detection in application", + "intrusionDetectionChoice2": "Logged and reviewed", + "intrusionDetectionChoice3": "Logged without review", + "intrusionDetectionChoice4": "Not logged", + "financialDamageText": "How much financial damage will result from an exploit?", + "financialDamageChoice1": "Less than the cost to fix the vulnerability", + "financialDamageChoice2": "Minor effect on annual profit", + "financialDamageChoice3": "Significant effect on annual profit", + "financialDamageChoice4": "Bankruptcy", + "reputationDamageText": "Would an exploit result in reputation damage that would harm the business?", + "reputationDamageChoice1": "Minimal damage", + "reputationDamageChoice2": "Loss of major accounts", + "reputationDamageChoice3": "Loss of goodwill", + "reputationDamageChoice4": "Brand damage", + "nonComplianceText": "How much exposure does non-compliance introduce?", + "nonComplianceChoice1": "Minor violation", + "nonComplianceChoice2": "Clear violation", + "nonComplianceChoice3": "High profile violation", + "nonComplianceChoice4": "No exposure", + "privacyViolationText": "How much personally identifiable information could be disclosed?", + "privacyViolationChoice1": "One individual", + "privacyViolationChoice2": "Hundreds of people", + "privacyViolationChoice3": "Thousands of people", + "privacyViolationChoice4": "Millions of people", + "lossOfConfidentialityText": "How much data could be disclosed and how sensitive is it?", + "lossOfConfidentialityChoice1": "Minimal non-sensitive data disclosed", + "lossOfConfidentialityChoice2": "Minimal critical data or extensive non-sensitive data disclosed", + "lossOfConfidentialityChoice3": "Extensive critical data disclosed", + "lossOfConfidentialityChoice4": "All data disclosed", + "lossOfIntegrityText": "How much data could be corrupted and how damaged is it?", + "lossOfIntegrityChoice1": "Minimal slightly corrupt data", + "lossOfIntegrityChoice2": "Minimal seriously corrupt data", + "lossOfIntegrityChoice3": "Extensive slightly corrupt data", + "lossOfIntegrityChoice4": "Extensive seriously corrupt data", + "lossOfIntegrityChoice5": "All data totally corrupt", + "lossOfAvailabilityText": "How much service could be lost and how vital is it?", + "lossOfAvailabilityChoice1": "Minimal secondary services interrupted", + "lossOfAvailabilityChoice2": "Minimal primary or extensive secondary services interrupted", + "lossOfAvailabilityChoice3": "Extensive primary services interrupted", + "lossOfAvailabilityChoice4": "All services completely lost", + "lossOfAccountabilityText": "Are the threat agents' actions traceable to an individual?", + "lossOfAccountabilityChoice1": "Fully traceable", + "lossOfAccountabilityChoice2": "Possibly traceable", + "lossOfAccountabilityChoice3": "Completely anonymous" } diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index d8cf2c16d..af4371934 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -229,6 +229,94 @@ "residualInMatrixView": "Residuelle", "probability": "Probabilité", "riskLevels": "Niveaux de risque", + "riskLevel": "Niveau de risque", "cancel": "Annuler", - "save": "Enregistrer" + "save": "Enregistrer", + "NA": "N/A", + "threatAgentFactors": "Facteurs liés aux agents de menace", + "vulnerabilityFactors": "Facteurs de vulnérabilité", + "businessImpactFactors": "Facteurs d’impact sur les entreprises", + "technicalImpactFactors": "Facteurs d’impact techniques", + "assessmentVector": "Vecteur d'évaluation", + "skillLevelText": "Dans quelle mesure ce groupe d’agents menaçants est-il techniquement compétent ?", + "skillLevelChoice1": "Aucune compétence technique", + "skillLevelChoice2": "Quelques compétences techniques", + "skillLevelChoice3": "Utilisateur informatique avancé", + "skillLevelChoice4": "Compétences en réseau et en programmation", + "skillLevelChoice5": "Compétences en matière de pénétration de la sécurité", + "motiveText": "Dans quelle mesure ce groupe d’agents de menace est-il motivé à trouver et à exploiter cette vulnérabilité ?", + "motiveChoice1": "Récompense faible ou inexistante", + "motiveChoice2": "Récompense possible", + "motiveChoice3": "Récompense élevée", + "opportunityText": "Quelles ressources et opportunités sont nécessaires pour que ce groupe d’agents de menace trouve et exploite cette vulnérabilité ?", + "opportunityChoice1": "Accès complet ou ressources coûteuses requises", + "opportunityChoice2": "Accès spécialisé ou ressources requises", + "opportunityChoice3": "Certains accès ou ressources requis", + "opportunityChoice4": "Aucun accès ni ressources requis", + "sizeText": "Quelle est la taille de ce groupe d’agents menaçants ?", + "sizeChoice1": "Développeurs ou administrateurs système", + "sizeChoice2": "Utilisateurs intranet", + "sizeChoice3": "Les partenaires", + "sizeChoice4": "Utilisateurs authentifiés", + "sizeChoice5": "Internautes anonymes", + "easeOfDiscoveryText": "Est-il facile pour ce groupe d’agents menaçants de découvrir cette vulnérabilité ?", + "easeOfDiscoveryChoice1": "Pratiquement impossible", + "easeOfDiscoveryChoice2": "Difficile", + "easeOfDiscoveryChoice3": "Facile", + "easeOfDiscoveryChoice4": "Outils automatisés disponibles", + "easeOfExploitText": "Dans quelle mesure est-il facile pour ce groupe d’agents menaçants d’exploiter cette vulnérabilité ?", + "easeOfExploitChoice1": "Théorique", + "easeOfExploitChoice2": "Difficile", + "easeOfExploitChoice3": "Facile", + "easeOfExploitChoice4": "Outils automatisés disponibles", + "awarenessText": "Dans quelle mesure cette vulnérabilité est-elle connue de ce groupe d’agents menaçants ?", + "awarenessChoice1": "Inconnu", + "awarenessChoice2": "Caché", + "awarenessChoice3": "Évident", + "awarenessChoice4": "Connaissance publique", + "intrusionDetectionText": "Quelle est la probabilité qu’un exploit soit détecté ?", + "intrusionDetectionChoice1": "Détection active dans l'application", + "intrusionDetectionChoice2": "Enregistré et examiné", + "intrusionDetectionChoice3": "Connecté sans avis", + "intrusionDetectionChoice4": "Non connecté", + "financialDamageText": "Quel préjudice financier résultera d’un exploit ?", + "financialDamageChoice1": "Moins que le coût de correction de la vulnérabilité", + "financialDamageChoice2": "Effet mineur sur le bénéfice annuel", + "financialDamageChoice3": "Effet significatif sur le bénéfice annuel", + "financialDamageChoice4": "La faillite", + "reputationDamageText": "Un exploit entraînerait-il une atteinte à la réputation qui nuirait à l’entreprise ?", + "reputationDamageChoice1": "Dommages minimes", + "reputationDamageChoice2": "Perte de grands comptes", + "reputationDamageChoice3": "Perte de bonne volonté", + "reputationDamageChoice4": "Dommages à la marque", + "nonComplianceText": "Quel degré d’exposition la non-conformité introduit-elle ?", + "nonComplianceChoice1": "Violation mineure", + "nonComplianceChoice2": "Violation claire", + "nonComplianceChoice3": "Violation très médiatisée", + "nonComplianceChoice4": "Aucune exposition", + "privacyViolationText": "Quelle quantité d’informations personnellement identifiables pourrait être divulguée ?", + "privacyViolationChoice1": "Un individu", + "privacyViolationChoice2": "Des centaines de personnes", + "privacyViolationChoice3": "Des milliers de personnes", + "privacyViolationChoice4": "Des millions de personnes", + "lossOfConfidentialityText": "Quelle quantité de données pourrait être divulguée et dans quelle mesure sont-elles sensibles ?", + "lossOfConfidentialityChoice1": "Un minimum de données non sensibles divulguées", + "lossOfConfidentialityChoice2": "Données critiques minimales ou données non sensibles étendues divulguées", + "lossOfConfidentialityChoice3": "De nombreuses données critiques divulguées", + "lossOfConfidentialityChoice4": "Toutes les données divulguées", + "lossOfIntegrityText": "Quelle quantité de données pourrait être corrompue et dans quelle mesure ?", + "lossOfIntegrityChoice1": "Données minimales légèrement corrompues", + "lossOfIntegrityChoice2": "Données minimales sérieusement corrompues", + "lossOfIntegrityChoice3": "Données étendues légèrement corrompues", + "lossOfIntegrityChoice4": "De nombreuses données gravement corrompues", + "lossOfIntegrityChoice5": "Toutes les données totalement corrompues", + "lossOfAvailabilityText": "Quelle quantité de service pourrait être perdue et dans quelle mesure est-il vital ?", + "lossOfAvailabilityChoice1": "Services secondaires minimes interrompus", + "lossOfAvailabilityChoice2": "Services primaires minimes ou services secondaires étendus interrompus", + "lossOfAvailabilityChoice3": "De nombreux services primaires interrompus", + "lossOfAvailabilityChoice4": "Tous les services complètement perdus", + "lossOfAccountabilityText": "Les actions des agents menaçants peuvent-elles être attribuées à un individu ?", + "lossOfAccountabilityChoice1": "Entièrement traçable", + "lossOfAccountabilityChoice2": "Peut-être traçable", + "lossOfAccountabilityChoice3": "Complètement anonyme" } From f0a8668330b9ecdd5ef5d1539c97abb7206d046e Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Mon, 26 Feb 2024 15:59:18 +0100 Subject: [PATCH 3/7] feat: translate ignore --- frontend/messages/en.json | 3 ++- frontend/messages/fr.json | 3 ++- frontend/src/routes/(app)/scoring-assistant/+page.svelte | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 2055dd9d9..cf968222c 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -318,5 +318,6 @@ "lossOfAccountabilityText": "Are the threat agents' actions traceable to an individual?", "lossOfAccountabilityChoice1": "Fully traceable", "lossOfAccountabilityChoice2": "Possibly traceable", - "lossOfAccountabilityChoice3": "Completely anonymous" + "lossOfAccountabilityChoice3": "Completely anonymous", + "ignore": "Ignore" } diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index af4371934..073b5381f 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -318,5 +318,6 @@ "lossOfAccountabilityText": "Les actions des agents menaçants peuvent-elles être attribuées à un individu ?", "lossOfAccountabilityChoice1": "Entièrement traçable", "lossOfAccountabilityChoice2": "Peut-être traçable", - "lossOfAccountabilityChoice3": "Complètement anonyme" + "lossOfAccountabilityChoice3": "Complètement anonyme", + "ignore": "Ignorer" } diff --git a/frontend/src/routes/(app)/scoring-assistant/+page.svelte b/frontend/src/routes/(app)/scoring-assistant/+page.svelte index 56b2bb902..7a04d8225 100644 --- a/frontend/src/routes/(app)/scoring-assistant/+page.svelte +++ b/frontend/src/routes/(app)/scoring-assistant/+page.svelte @@ -160,7 +160,7 @@ bind:checked={is_business_impact_ignored} />
From 63c63970cd93ba659f7081217acfe406a993e441 Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Mon, 26 Feb 2024 16:10:12 +0100 Subject: [PATCH 4/7] feat: add EN translations in library view --- frontend/messages/en.json | 10 +++++++++- frontend/src/routes/(app)/libraries/+page.svelte | 13 +++++++------ .../routes/(app)/libraries/[id=urn]/+page.svelte | 13 +++++++------ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/frontend/messages/en.json b/frontend/messages/en.json index cf968222c..473e81a84 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -319,5 +319,13 @@ "lossOfAccountabilityChoice1": "Fully traceable", "lossOfAccountabilityChoice2": "Possibly traceable", "lossOfAccountabilityChoice3": "Completely anonymous", - "ignore": "Ignore" + "ignore": "Ignore", + "importedLibraries": "Imported libraries", + "librariesStore": "Libraries store", + "currentlyNoImportedLibraries": "You currently have no imported libraries", + "loadingLibraryUploadButton": "Loading the library upload button", + "errorOccuredWhileLoadingLibrary": "The following error occured while loading the library form", + "packager": "Packager", + "dependencies": "Dependencies", + "copyright": "Copyright" } diff --git a/frontend/src/routes/(app)/libraries/+page.svelte b/frontend/src/routes/(app)/libraries/+page.svelte index edd4146f7..1db8beff1 100644 --- a/frontend/src/routes/(app)/libraries/+page.svelte +++ b/frontend/src/routes/(app)/libraries/+page.svelte @@ -1,5 +1,6 @@