From e7b4aa25dd3649c480f93a3503e3d47e67bbfa85 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 13 May 2026 14:46:22 +0200 Subject: [PATCH 1/5] refactor: improve overall score calculation in summary report --- lib/screens/summary_screen.dart | 12 +++++++++--- pubspec.yaml | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/screens/summary_screen.dart b/lib/screens/summary_screen.dart index 3dfcb89..dc3fe1d 100644 --- a/lib/screens/summary_screen.dart +++ b/lib/screens/summary_screen.dart @@ -322,9 +322,15 @@ class _SummaryReport { final overallScore = evaluatedDevices.isEmpty ? 0 - : (evaluatedDevices.map((d) => d.riskScore).reduce((a, b) => a + b) / - evaluatedDevices.length) - .round(); + : (() { + final scores = evaluatedDevices.map((d) => d.riskScore); + final mean = + scores.reduce((a, b) => a + b) / evaluatedDevices.length; + final max = scores.reduce((a, b) => a > b ? a : b); + // Blend 40 % max + 60 % mean so a single high-risk device cannot + // be fully diluted by many low-risk ones. + return (0.4 * max + 0.6 * mean).round(); + })(); final overallLevel = overallScore <= 33 ? RiskLevel.low diff --git a/pubspec.yaml b/pubspec.yaml index fb7fd79..0c5d010 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+5 +version: 1.0.0+6 environment: sdk: ^3.11.5 From 56a312835c2142a9191f5b290a5da3d66806cebf Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 13 May 2026 15:12:01 +0200 Subject: [PATCH 2/5] fix: update video encryption titles and descriptions for clarity; adjust FAQ screen theme --- lib/l10n/app_localizations.dart | 8 ++++---- lib/screens/faq_screen.dart | 35 +++++++++++++++++++-------------- pubspec.yaml | 2 +- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 3451a89..e31cba1 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -565,9 +565,9 @@ class AppLocalizations { 'a_skills_permissions_title': 'Skills/Fähigkeiten überprüfen', 'a_skills_permissions_desc': 'Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.', - 'a_video_encryption_title': 'WLAN-Verschlüsselung prüfen', + 'a_video_encryption_title': 'Ende-zu-Ende-Verschlüsselung aktivieren', 'a_video_encryption_desc': - 'BSI-Empfehlung: Verwenden Sie WPA2 oder WPA3 für Ihr Heimnetz. WEP und WPA sind veraltet.', + 'Aktivieren Sie in den Kamera-Einstellungen eine Ende-zu-Ende-verschlüsselte Übertragung für Livebild und Aufnahmen.', 'a_video_storage_title': 'Aufnahmen lokal speichern', 'a_video_storage_desc': 'Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.', @@ -1235,9 +1235,9 @@ class AppLocalizations { 'a_skills_permissions_title': 'Review skills/integrations', 'a_skills_permissions_desc': 'Review which third-party skills have access. Disable unnecessary skills.', - 'a_video_encryption_title': 'Check Wi-Fi encryption', + 'a_video_encryption_title': 'Enable end-to-end video encryption', 'a_video_encryption_desc': - 'BSI recommendation: Use WPA2 or WPA3 on your home network. WEP and WPA are outdated.', + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.', 'a_video_storage_title': 'Store recordings locally', 'a_video_storage_desc': 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.', diff --git a/lib/screens/faq_screen.dart b/lib/screens/faq_screen.dart index 938224b..963bfc3 100644 --- a/lib/screens/faq_screen.dart +++ b/lib/screens/faq_screen.dart @@ -21,22 +21,27 @@ class FaqScreen extends StatelessWidget { itemBuilder: (context, index) { final entry = entries[index]; return Card( - child: ExpansionTile( - tilePadding: const EdgeInsets.symmetric( - horizontal: 16, - vertical: 4, - ), - title: Text( - entry.question, - style: text.titleSmall?.copyWith(fontWeight: FontWeight.w600), - ), - childrenPadding: const EdgeInsets.fromLTRB(16, 0, 16, 16), - children: [ - Align( - alignment: Alignment.centerLeft, - child: Text(entry.answer, style: text.bodyMedium), + child: Theme( + data: Theme.of( + context, + ).copyWith(dividerColor: Colors.transparent), + child: ExpansionTile( + tilePadding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 4, ), - ], + title: Text( + entry.question, + style: text.titleSmall?.copyWith(fontWeight: FontWeight.w600), + ), + childrenPadding: const EdgeInsets.fromLTRB(16, 0, 16, 16), + children: [ + Align( + alignment: Alignment.centerLeft, + child: Text(entry.answer, style: text.bodyMedium), + ), + ], + ), ), ); }, diff --git a/pubspec.yaml b/pubspec.yaml index 0c5d010..20b0005 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+6 +version: 1.0.0+8 environment: sdk: ^3.11.5 From a52372cff112c0cb11b79bc535741407c441a8d2 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 13 May 2026 15:12:38 +0200 Subject: [PATCH 3/5] chore: update documentation for localization, risk scoring, testing, code style, and pull request titles --- AGENTS.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index c8211da..209eb14 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -92,6 +92,7 @@ test/ ## Key Conventions ### Localization + - Never hardcode user-visible strings in widgets. - All strings live in `lib/l10n/app_localizations.dart` in the `_localizedValues` map, under every supported locale. @@ -99,6 +100,7 @@ test/ - The fallback chain is: requested locale → `en` → `de` → fallback param → key. ### Risk scoring + - Base risk is set per `DeviceTemplate.baseRiskScore` in `catalog_data.dart`. - Per-question penalties are defined in `DeviceInstance.riskScore` (device.dart). - Score is clamped to `[0, 100]`. @@ -106,17 +108,20 @@ test/ - Dont-know answers use a reduced penalty (roughly half of the "no" penalty). ### Testing + - Run `flutter test` before finishing any task involving core files. - Run `flutter analyze` to catch static issues. - When changing risk scoring logic, update `test/device_risk_scoring_test.dart` with the new expected values. ### Code style + - 2-space indentation, Dart conventions (PascalCase classes, camelCase members). - Group imports: dart → flutter → package → relative. - Zero analyzer errors and warnings required. ### Pull request titles + - Pull request titles should follow this template: `: `. - Use a lowercase type prefix such as `feat`, `fix`, `docs`, `refactor`, `test`, or `chore`. - Examples: `feat: add summary export`, `fix: preserve selected room state`. From bd465e4d2f18b365ccab331be97b9e6a25a56dee Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 13 May 2026 15:45:33 +0200 Subject: [PATCH 4/5] feat: add localization extraction tool - Implemented a Dart script to extract localization strings from app_localizations.dart. - The script parses the file to generate ARB files for each locale found. - Created a LocalizationLookup class to manage active locale and translation retrieval. - Added methods for translating keys and retrieving localization keys by locale. --- .github/workflows/check.yml | 6 + .github/workflows/release.yml | 3 + .vscode/settings.json | 4 +- CONTRIBUTING.md | 29 +- README.md | 12 + l10n.yaml | 5 + lib/data/catalog_data.dart | 4 +- lib/l10n/app_cs.arb | 154 + lib/l10n/app_da.arb | 154 + lib/l10n/app_de.arb | 463 ++ lib/l10n/app_en.arb | 463 ++ lib/l10n/app_fr.arb | 154 + lib/l10n/app_localizations.dart | 5405 ++++++++++-------- lib/l10n/app_localizations_cs.dart | 1617 ++++++ lib/l10n/app_localizations_da.dart | 1613 ++++++ lib/l10n/app_localizations_de.dart | 1620 ++++++ lib/l10n/app_localizations_en.dart | 1612 ++++++ lib/l10n/app_localizations_fr.dart | 1623 ++++++ lib/l10n/app_localizations_nl.dart | 1615 ++++++ lib/l10n/app_localizations_pl.dart | 1617 ++++++ lib/l10n/app_nl.arb | 154 + lib/l10n/app_pl.arb | 154 + lib/l10n/language_controller.dart | 4 + lib/l10n/localization_lookup.dart | 2292 ++++++++ lib/main.dart | 10 +- lib/screens/about_screen.dart | 98 +- lib/screens/device_questionnaire_screen.dart | 29 +- lib/screens/device_selection_screen.dart | 54 +- lib/screens/faq_screen.dart | 36 +- lib/screens/room_selection_screen.dart | 30 +- lib/screens/summary_screen.dart | 209 +- lib/screens/welcome_screen.dart | 22 +- lib/widgets/custom_add_dialogs.dart | 36 +- lib/widgets/language_switcher.dart | 4 +- pubspec.lock | 2 +- pubspec.yaml | 5 +- test/app_localizations_test.dart | 25 +- test/widget_test.dart | 9 +- tool/extract_localizations.dart | 257 + 39 files changed, 18795 insertions(+), 2808 deletions(-) create mode 100644 l10n.yaml create mode 100644 lib/l10n/app_cs.arb create mode 100644 lib/l10n/app_da.arb create mode 100644 lib/l10n/app_de.arb create mode 100644 lib/l10n/app_en.arb create mode 100644 lib/l10n/app_fr.arb create mode 100644 lib/l10n/app_localizations_cs.dart create mode 100644 lib/l10n/app_localizations_da.dart create mode 100644 lib/l10n/app_localizations_de.dart create mode 100644 lib/l10n/app_localizations_en.dart create mode 100644 lib/l10n/app_localizations_fr.dart create mode 100644 lib/l10n/app_localizations_nl.dart create mode 100644 lib/l10n/app_localizations_pl.dart create mode 100644 lib/l10n/app_nl.arb create mode 100644 lib/l10n/app_pl.arb create mode 100644 lib/l10n/localization_lookup.dart create mode 100644 tool/extract_localizations.dart diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 86c18be..ccd8270 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -34,6 +34,12 @@ jobs: - name: Install dependencies run: flutter pub get + - name: Generate localization files + run: flutter gen-l10n + + - name: Verify generated localization files are committed + run: git diff --exit-code -- lib/l10n/app_localizations.dart lib/l10n/app_localizations_*.dart + - name: Static analysis run: flutter analyze diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3374b79..cea3f88 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,6 +33,9 @@ jobs: - name: Install dependencies run: flutter pub get + - name: Generate localization files + run: flutter gen-l10n + - name: Build release APK run: flutter build apk --release diff --git a/.vscode/settings.json b/.vscode/settings.json index 10877ac..abded51 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,8 @@ { "chat.tools.terminal.autoApprove": { - "Set-Content": true + "Set-Content": true, + "dart": true, + "flutter": true }, "files.insertFinalNewline": true, "files.trimFinalNewlines": true, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 246b01e..9c308ec 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,7 +86,7 @@ lib/ - `lib/models/survey_state.dart`: central assessment state and local persistence - `lib/screens/`: wizard flow screens and summary screen - `lib/widgets/`: reusable UI components -- `lib/l10n/app_localizations.dart`: localization source of truth +- `lib/l10n/*.arb`: localization source of truth (generated Dart files are derived from ARB) ### State and persistence @@ -161,11 +161,25 @@ Target: zero analyzer errors and warnings. ### Localization requirements - Do not hardcode user-facing text in widgets. -- Localization source of truth is `lib/l10n/app_localizations.dart`. -- Add or update keys consistently across supported locales. -- Verify fallback behavior for missing locale values. +- Localization source of truth is the ARB files in `lib/l10n/`. +- Add or update keys consistently across supported locale ARB files. +- Regenerate localization code with `flutter gen-l10n` after ARB changes. - Ensure summary export helpers still receive localized strings. +### Localization workflow + +When adding or changing user-facing strings: + +1. Add/update the key in `lib/l10n/app_en.arb`. +2. Add/update the same key in all other locale files in `lib/l10n/` (`app_de.arb`, `app_cs.arb`, `app_pl.arb`, `app_fr.arb`, `app_nl.arb`, `app_da.arb`). +3. Regenerate generated localization classes: + + ```bash + flutter gen-l10n + ``` + +4. Commit ARB + generated localization Dart files together. + ### Comments - Explain why, not what. @@ -247,13 +261,14 @@ Typical changes: Primary files: -- `lib/l10n/app_localizations.dart` +- `lib/l10n/app_en.arb` +- `lib/l10n/app_*.arb` - relevant UI files consuming localized strings Typical changes: -- Add translation keys and values -- Ensure fallback behavior remains correct +- Add/update translation keys and values in all locale ARB files +- Run `flutter gen-l10n` and commit generated files - Verify exports and summaries remain localized ### 5. Improve documentation diff --git a/README.md b/README.md index 1117f3d..96a27dc 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,18 @@ The app targets Android, iOS, Web, Windows, macOS, and Linux. All developer setup, architecture notes, code standards, and contribution workflow are documented in [CONTRIBUTING.md](CONTRIBUTING.md). +### Localization workflow (contributors) + +1. Add the new key in `lib/l10n/app_en.arb`. +2. Add translations for the same key in every other ARB file in `lib/l10n/` (`app_de.arb`, `app_cs.arb`, `app_pl.arb`, `app_fr.arb`, `app_nl.arb`, `app_da.arb`). +3. Regenerate localization code: + + ```bash + flutter gen-l10n + ``` + +4. Commit the ARB changes and generated `lib/l10n/app_localizations*.dart` files together. + Risk scoring details (formula, thresholds, weights, and rationale) are documented in [lib/models/RISK_SCORING_README.md](lib/models/RISK_SCORING_README.md). ## License diff --git a/l10n.yaml b/l10n.yaml new file mode 100644 index 0000000..7a444fb --- /dev/null +++ b/l10n.yaml @@ -0,0 +1,5 @@ +arb-dir: lib/l10n +template-arb-file: app_en.arb +output-dir: lib/l10n +output-localization-file: app_localizations.dart +output-class: AppLocalizations diff --git a/lib/data/catalog_data.dart b/lib/data/catalog_data.dart index 5a699ac..e86dcfe 100644 --- a/lib/data/catalog_data.dart +++ b/lib/data/catalog_data.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import '../l10n/app_localizations.dart'; +import '../l10n/localization_lookup.dart'; import '../models/room.dart'; import '../models/device.dart'; class CatalogData { static String localizeText(String source) => - AppLocalizations.translate(source); + LocalizationLookup.translate(source); static String roomName(Room room) => localizeText(room.name); diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb new file mode 100644 index 0000000..749a8eb --- /dev/null +++ b/lib/l10n/app_cs.arb @@ -0,0 +1,154 @@ +{ + "@@locale": "cs", + "appTitle": "Simplications", + "welcomeTitle": "Simplications\nKontrola soukromí\nchytré domácnosti", + "welcomeDescription": "Zaznamenejte svá chytrá zařízení místnost po místnosti a získejte hodnocení soukromí s konkrétními doporučeními.", + "stepSelectRooms": "Vyberte místnost", + "stepCaptureDevices": "Zaznamenejte zařízení", + "stepAnswerQuestions": "Odpovězte na otázky", + "stepGetRisk": "Získejte rizikový profil a doporučení", + "start": "Začít", + "resume": "Pokračovat", + "about": "O aplikaci", + "faq": "FAQ", + "roomSelectionTitle": "Výběr místnosti", + "roomQuestion": "Kterou místnost chcete nyní zkontrolovat?", + "roomInstruction": "Klepněte na místnost, zaznamenejte v ní zařízení a vraťte se sem, kde vyberete další místnost.", + "results": "Výsledky", + "alreadyEvaluated": "Již vyhodnoceno", + "notCompleted": "Nedokončeno", + "addRoom": "Přidat místnost", + "deviceTitlePrefix": "Zařízení", + "roomCheck": "Kontrola místnosti", + "deviceQuestion": "Která chytrá zařízení používáte v této místnosti?", + "deviceQuestionHint": "Klepněte na zařízení a odpovězte na otázky.", + "noKnownDevices": "Pro tuto místnost nejsou známá žádná zařízení. Můžete přidat vlastní zařízení.", + "addDevice": "Přidat\nzařízení", + "noDevice": "Žádné zařízení", + "nextRoom": "Další místnost", + "deleteDeviceTitle": "Smazat zařízení?", + "deleteDeviceBody": "Toto vlastní zařízení bude smazáno. Všechny navázané instance budou také odstraněny.", + "delete": "Smazat", + "cancel": "Zrušit", + "confirm": "Potvrdit", + "noDeviceDialogTitle": "V této místnosti nejsou zařízení?", + "noDeviceDialogBody": "Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", + "noDeviceDialogBodyWithExisting": "Existující výběry zařízení pro tuto místnost budou zahozeny. Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", + "questionnaireTitle": "Otázky", + "connectedDevice": "Připojené zařízení", + "done": "Hotovo", + "yes": "Ano", + "no": "Ne", + "dontKnow": "Nevím", + "notApplicableForDevice": "Tato otázka se na moje zařízení nevztahuje", + "languageDialogTitle": "Vyberte jazyk", + "currentLanguage": "Aktuální jazyk", + "aboutScreenTitle": "O aplikaci", + "aboutSubtitle": "Výzkumný projekt zaměřený na soukromí chytré domácnosti", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Technická univerzita v Chemnitzu", + "aboutPartnerHsAnhalt": "Vysoká škola Anhalt", + "aboutPartnerVzSachsen": "Spotřebitelské centrum Sasko", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "websiteOpenFailed": "Web se nepodařilo otevřít.", + "deleteAllDataTitle": "Smazat všechna data?", + "deleteAllDataBody": "Všechny zaznamenané místnosti, zařízení a odpovědi budou trvale smazány. Tuto akci nelze vrátit zpět.", + "deleteAllDataButton": "Smazat data", + "allDataDeleted": "Všechna uložená data byla smazána.", + "projectPartners": "Projektoví partneři", + "coordinationFunding": "Koordinace a financování", + "coordination": "Koordinace", + "platformPrivacy": "Plattform Privatheit", + "fundingAgency": "Poskytovatel financování", + "fundingAgencyValue": "Spolkové ministerstvo pro výzkum, technologie a vesmír\nFKZ 16KIS1868K", + "website": "Web", + "dangerZone": "Nebezpečná zóna", + "dangerZoneWarning": "Pozor: Tato akce trvale odstraní všechna uložená data aplikace.", + "faqScreenTitle": "Často kladené otázky", + "faqQuestionWhatIs": "Co je Simplications?", + "faqAnswerWhatIs": "Simplications je výzkumný projekt zaměřený na soukromí v chytré domácnosti. Tato aplikace je jednou z částí projektu a provede vás místnost po místnosti vašimi zařízeními s praktickými doporučeními na základě vašich odpovědí.", + "faqQuestionHowWorks": "Jak kontrola funguje?", + "faqAnswerHowWorks": "Vyberete místnost, přidáte chytrá zařízení, odpovíte na otázky pro konkrétní zařízení a získáte profil rizik s prioritizovanými kroky.", + "faqQuestionNoPolicy": "Proč tu není zásada ochrany osobních údajů?", + "faqAnswerNoPolicy": "Protože neshromažďujeme vaše data.", + "faqQuestionDataStored": "Kde jsou moje data uložena?", + "faqAnswerDataStored": "Vaše hodnocení je uloženo lokálně ve vašem zařízení. V obrazovce O aplikaci můžete všechna uložená data kdykoli smazat.", + "faqQuestionNoDevice": "Co když moje zařízení není v seznamu?", + "faqAnswerNoDevice": "Můžete přidat vlastní zařízení a kontrolu dokončit. Doporučení pak vycházejí z vaší konfigurace a odpovědí.", + "faqQuestionRiskMeaning": "Co znamená nízké, střední a vysoké riziko?", + "faqAnswerRiskMeaning": "Tyto úrovně ukazují, jak silně může vaše současné nastavení zvyšovat rizika pro soukromí. Jde o orientační úrovně, ne o právní nebo technickou certifikaci.", + "faqQuestionLegalAdvice": "Jde o právní poradenství?", + "faqAnswerLegalAdvice": "Ne. Simplications poskytuje praktickou orientaci a doporučení, nenahrazuje však právní nebo profesionální bezpečnostní poradenství.", + "faqQuestionCanShare": "Mohu sdílet své výsledky?", + "faqAnswerCanShare": "Ano. Na obrazovce výsledků můžete přehled exportovat a sdílet jako text nebo PDF.", + "roomDeleteTitle": "Smazat místnost?", + "roomDeleteBody": "Tato vlastní místnost bude smazána. Všechna propojená zařízení budou také odstraněna.", + "add": "Přidat", + "addRoomDialogTitle": "Přidat novou místnost", + "roomName": "Název místnosti", + "roomNameHint": "např. Obývací pokoj, Garáž", + "chooseIcon": "Vyberte ikonu:", + "addDeviceDialogTitle": "Přidat nové zařízení", + "deviceName": "Název zařízení", + "deviceNameHint": "např. Můj chytrý reproduktor", + "baseRiskLabel": "Základní skóre rizika (0-100)", + "baseRiskHint": "např. 30 (nízké) až 60 (vysoké)", + "hasCamera": "Má kameru?", + "hasMicrophone": "Má mikrofon?", + "camera": "Kamera", + "microphone": "Mikrofon", + "summaryTitle": "Váš výsledek", + "shareResult": "Sdílet výsledek", + "shareAsText": "Sdílet jako text", + "shareAsPdf": "Sdílet jako PDF", + "restart": "Začít znovu", + "noDevicesCaptured": "Nebyla zaznamenána žádná zařízení.", + "noDevicesHint": "Spusťte to znovu a přidejte zařízení, abyste získali hodnocení.", + "highRisk": "Vysoké riziko", + "mediumRisk": "Střední riziko", + "lowRisk": "Nízké riziko", + "exportFailed": "Export se nezdařil", + "summaryShareSubject": "Výsledek Simplications", + "summarySharePdfText": "Zpráva Simplications jako PDF", + "overview": "Přehled", + "evaluatedDevices": "Vyhodnocená zařízení", + "skippedDevicesHint": "{count} zařízení přeskočeno, protože dotazník nebyl dokončen.", + "overallRisk": "Celkové riziko", + "generalRecommendations": "Obecná doporučení", + "generalRecommendationsHint": "Tato opatření platí pro celou vaši chytrou domácnost bez ohledu na jednotlivá zařízení.", + "fullCatalog": "Úplný katalog opatření", + "catalogButton": "Otevřít úplný katalog opatření", + "risk": "Riziko", + "note": "Poznámka", + "recommendations": "Doporučení", + "urgent": "Naléhavé", + "recommended": "Doporučeno", + "optional": "Volitelné", + "social": "Sociální", + "technical": "Technické", + "security": "Zabezpečení", + "smartHomePrivacyHeader": "Vaše soukromí chytré domácnosti", + "devicesRated": "hodnocených zařízení", + "howRiskCalculated": "Jak se riziko počítá?", + "totalScore": "Celkem", + "catalogSnackBarPrefix": "Katalog", + "reportExportedAt": "Exportováno", + "noActionLow": "Vše je v pořádku - nejsou nutná žádná opatření.", + "noActionMedium": "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává střední zbytkové riziko.", + "noActionHigh": "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává vysoké zbytkové riziko.", + "overallLow": "Skvělá práce! Vaše zařízení jsou většinou bezpečně nastavena. Přesto si projděte obecná doporučení.", + "overallMedium": "Je zde prostor ke zlepšení. Projděte si doporučení pro jednotlivá zařízení.", + "overallHigh": "Několik zařízení má významná rizika pro soukromí/ochranu dat. Prosím co nejdříve zaveďte opatření s vysokou prioritou.", + "dontKnowHint": " {count} odpověď{suffix} byla označena jako \"Nevím\" - věnujte čas lepšímu poznání nastavení svých zařízení." +} diff --git a/lib/l10n/app_da.arb b/lib/l10n/app_da.arb new file mode 100644 index 0000000..48dc54b --- /dev/null +++ b/lib/l10n/app_da.arb @@ -0,0 +1,154 @@ +{ + "@@locale": "da", + "appTitle": "Simplications", + "welcomeTitle": "Simplications\nSmart Home\nprivatlivstjek", + "welcomeDescription": "Registrer dine smarte enheder rum for rum, og få en privatlivsvurdering med konkrete anbefalinger.", + "stepSelectRooms": "Vælg ét rum", + "stepCaptureDevices": "Registrer enheder", + "stepAnswerQuestions": "Besvar spørgsmål", + "stepGetRisk": "Få risikoprofil og anbefalinger", + "start": "Start", + "resume": "Fortsæt", + "about": "Om", + "faq": "FAQ", + "roomSelectionTitle": "Vælg rum", + "roomQuestion": "Hvilket rum vil du tjekke nu?", + "roomInstruction": "Tryk på et rum, registrer enhederne dér, og kom tilbage hertil for at vælge næste rum.", + "results": "Resultater", + "alreadyEvaluated": "Allerede vurderet", + "notCompleted": "Ikke afsluttet", + "addRoom": "Tilføj rum", + "deviceTitlePrefix": "Enheder", + "roomCheck": "Rumtjek", + "deviceQuestion": "Hvilke smarte enheder bruger du i dette rum?", + "deviceQuestionHint": "Tryk på en enhed for at besvare spørgsmålene.", + "noKnownDevices": "Ingen kendte enheder for dette rum. Du kan tilføje din egen enhed.", + "addDevice": "Tilføj\nenhed", + "noDevice": "Ingen enhed", + "nextRoom": "Næste rum", + "deleteDeviceTitle": "Slet enhed?", + "deleteDeviceBody": "Denne brugerdefinerede enhed slettes. Alle tilknyttede instanser fjernes også.", + "delete": "Slet", + "cancel": "Annuller", + "confirm": "Bekræft", + "noDeviceDialogTitle": "Ingen enheder i dette rum?", + "noDeviceDialogBody": "Dette rum afsluttes uden enheder og påvirker ikke scoren.", + "noDeviceDialogBodyWithExisting": "Eksisterende enhedsvalg for dette rum kasseres. Dette rum afsluttes uden enheder og påvirker ikke scoren.", + "questionnaireTitle": "Spørgsmål", + "connectedDevice": "Tilsluttet enhed", + "done": "Færdig", + "yes": "Ja", + "no": "Nej", + "dontKnow": "Ved ikke", + "notApplicableForDevice": "Dette spørgsmål gælder ikke for min enhed", + "languageDialogTitle": "Vælg sprog", + "currentLanguage": "Nuværende sprog", + "aboutScreenTitle": "Om appen", + "aboutSubtitle": "Forskningsprojekt om privatliv i smarte hjem", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Teknisk Universitet i Chemnitz", + "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerVzSachsen": "Forbrugercenter Sachsen", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "websiteOpenFailed": "Kunne ikke åbne webstedet.", + "deleteAllDataTitle": "Slet alle data?", + "deleteAllDataBody": "Alle registrerede rum, enheder og svar slettes permanent. Handlingen kan ikke fortrydes.", + "deleteAllDataButton": "Slet data", + "allDataDeleted": "Alle gemte data er blevet slettet.", + "projectPartners": "Projektpartnere", + "coordinationFunding": "Koordination og finansiering", + "coordination": "Koordination", + "platformPrivacy": "Plattform Privatheit", + "fundingAgency": "Finansieringsorgan", + "fundingAgencyValue": "Tysk forbundsministerium for forskning, teknologi og rumfart\nBevilling 16KIS1868K", + "website": "Websted", + "dangerZone": "Farezone", + "dangerZoneWarning": "Advarsel: Denne handling fjerner alle gemte app-data permanent.", + "faqScreenTitle": "Ofte stillede spørgsmål", + "faqQuestionWhatIs": "Hvad er Simplications?", + "faqAnswerWhatIs": "Simplications er et forskningsprojekt om privatliv i smarte hjem. Denne app er en del af projektet og guider dig rum for rum gennem dine enheder med praktiske anbefalinger baseret på dine svar.", + "faqQuestionHowWorks": "Hvordan fungerer tjekket?", + "faqAnswerHowWorks": "Du vælger et rum, tilføjer dine smarte enheder, besvarer enhedsspecifikke spørgsmål og får en risikoprofil med prioriterede handlinger.", + "faqQuestionNoPolicy": "Hvorfor er der ingen privatlivspolitik?", + "faqAnswerNoPolicy": "Fordi vi ikke indsamler dine data.", + "faqQuestionDataStored": "Hvor gemmes mine data?", + "faqAnswerDataStored": "Dine vurderingsdata gemmes lokalt på din enhed. På Om-skærmen kan du til enhver tid slette alle gemte data.", + "faqQuestionNoDevice": "Hvad hvis min enhed ikke er på listen?", + "faqAnswerNoDevice": "Du kan tilføje brugerdefinerede enheder og stadig gennemføre tjekket. Anbefalingerne bygger så på din opsætning og dine svar.", + "faqQuestionRiskMeaning": "Hvad betyder lav, mellem og høj risiko?", + "faqAnswerRiskMeaning": "Disse niveauer viser, hvor meget din nuværende konfiguration kan øge privatlivsrisici. De er vejledende niveauer, ikke juridisk eller teknisk certificering.", + "faqQuestionLegalAdvice": "Er dette juridisk rådgivning?", + "faqAnswerLegalAdvice": "Nej. Simplications giver praktisk vejledning og anbefalinger, men erstatter ikke juridisk rådgivning eller professionel sikkerhedsrådgivning.", + "faqQuestionCanShare": "Kan jeg dele mine resultater?", + "faqAnswerCanShare": "Ja. På resultatskærmen kan du eksportere og dele din opsummering som tekst eller PDF.", + "roomDeleteTitle": "Slet rum?", + "roomDeleteBody": "Dette brugerdefinerede rum bliver slettet. Alle tilknyttede enheder bliver også fjernet.", + "add": "Tilføj", + "addRoomDialogTitle": "Tilføj nyt rum", + "roomName": "Rumnavn", + "roomNameHint": "f.eks. Stue, Garage", + "chooseIcon": "Vælg ikon:", + "addDeviceDialogTitle": "Tilføj ny enhed", + "deviceName": "Enhedsnavn", + "deviceNameHint": "f.eks. Min smarte højttaler", + "baseRiskLabel": "Basisrisikoscore (0-100)", + "baseRiskHint": "f.eks. 30 (lav) til 60 (høj)", + "hasCamera": "Har kamera?", + "hasMicrophone": "Har mikrofon?", + "camera": "Kamera", + "microphone": "Mikrofon", + "summaryTitle": "Dit resultat", + "shareResult": "Del resultat", + "shareAsText": "Del som tekst", + "shareAsPdf": "Del som PDF", + "restart": "Start forfra", + "noDevicesCaptured": "Ingen enheder registreret.", + "noDevicesHint": "Start forfra og tilføj enheder for at få en vurdering.", + "highRisk": "Høj risiko", + "mediumRisk": "Middel risiko", + "lowRisk": "Lav risiko", + "exportFailed": "Eksport mislykkedes", + "summaryShareSubject": "Simplications-resultat", + "summarySharePdfText": "Simplications-rapport som PDF", + "overview": "Oversigt", + "evaluatedDevices": "Vurderede enheder", + "skippedDevicesHint": "{count} enheder er sprunget over, fordi spørgeskemaet ikke er afsluttet.", + "overallRisk": "Samlet risiko", + "generalRecommendations": "Generelle anbefalinger", + "generalRecommendationsHint": "Disse tiltag gælder for hele dit smarte hjem uanset individuelle enheder.", + "fullCatalog": "Fuldt handlingskatalog", + "catalogButton": "Åbn fuldt handlingskatalog", + "risk": "Risiko", + "note": "Bemærkning", + "recommendations": "Anbefalinger", + "urgent": "Haster", + "recommended": "Anbefalet", + "optional": "Valgfri", + "social": "Social", + "technical": "Teknisk", + "security": "Sikkerhed", + "smartHomePrivacyHeader": "Dit smart-home-privatliv", + "devicesRated": "vurderede enheder", + "howRiskCalculated": "Hvordan beregnes risiko?", + "totalScore": "I alt", + "catalogSnackBarPrefix": "Katalog", + "reportExportedAt": "Eksporteret den", + "noActionLow": "Alt er i orden - ingen handlinger nødvendige.", + "noActionMedium": "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en middel rest-risiko.", + "noActionHigh": "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en høj rest-risiko.", + "overallLow": "Godt klaret! Dine enheder er overvejende sikkert konfigureret. Gennemgå alligevel de generelle anbefalinger.", + "overallMedium": "Der er plads til forbedringer. Gennemgå anbefalingerne for hver enhed.", + "overallHigh": "Flere enheder har betydelige privatlivs-/databeskyttelsesrisici. Implementér venligst højprioriterede tiltag hurtigt.", + "dontKnowHint": " {count} svar{suffix} er markeret som \"Ved ikke\" - brug tid på at lære dine enhedsindstillinger bedre at kende." +} diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb new file mode 100644 index 0000000..ddb5922 --- /dev/null +++ b/lib/l10n/app_de.arb @@ -0,0 +1,463 @@ +{ + "@@locale": "de", + "appTitle": "Simplications", + "welcomeTitle": "Der Simplications\nSmart Home\nPrivatsphäre-Check", + "welcomeDescription": "Erfassen Sie Raum für Raum Ihre smarten Geräte und erhalten Sie eine Privatsphärebewertung mit konkreten Empfehlungen.", + "stepSelectRooms": "Raum auswählen", + "stepCaptureDevices": "Geräte erfassen", + "stepAnswerQuestions": "Fragen beantworten", + "stepGetRisk": "Risikoprofil & Empfehlungen erhalten", + "start": "Starten", + "resume": "Fortsetzen", + "about": "Über", + "faq": "FAQ", + "roomSelectionTitle": "Raum auswählen", + "roomQuestion": "Welchen Raum möchten Sie jetzt prüfen?", + "roomInstruction": "Tippen Sie auf einen Raum, erfassen Sie dort Ihre Geräte und kehren Sie dann hierher zurück, um den nächsten Raum zu wählen.", + "results": "Ergebnisse", + "alreadyEvaluated": "Bereits ausgewertet", + "notCompleted": "Nicht abgeschlossen", + "addRoom": "Raum hinzufügen", + "deviceTitlePrefix": "Geräte", + "roomCheck": "Raum-Check", + "deviceQuestion": "Welche smarten Geräte nutzen Sie in diesem Raum?", + "deviceQuestionHint": "Tippen Sie auf ein Gerät, um die Fragen dafür zu beantworten.", + "noKnownDevices": "Keine bekannten Geräte für diesen Raum. Sie können ein eigenes Gerät hinzufügen.", + "addDevice": "Gerät\nhinzufügen", + "noDevice": "Kein Gerät", + "nextRoom": "Nächster Raum", + "deleteDeviceTitle": "Gerät löschen?", + "deleteDeviceBody": "Dieses benutzerdefinierte Gerät wird gelöscht. Alle verknüpften Instanzen werden auch entfernt.", + "delete": "Löschen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "noDeviceDialogTitle": "Keine Geräte in diesem Raum?", + "noDeviceDialogBody": "Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.", + "noDeviceDialogBodyWithExisting": "Vorhandene Geräteauswahlen für diesen Raum werden verworfen. Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.", + "questionnaireTitle": "Fragen", + "connectedDevice": "Verbundenes Gerät", + "done": "Fertig", + "yes": "Ja", + "no": "Nein", + "dontKnow": "Weiß ich nicht", + "notApplicableForDevice": "Diese Frage trifft auf mein Gerät nicht zu", + "languageDialogTitle": "Sprache wählen", + "currentLanguage": "Aktuelle Sprache", + "aboutScreenTitle": "Über die App", + "faqScreenTitle": "Häufige Fragen", + "aboutSubtitle": "Forschungsprojekt Smart Home Privatsphäre", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Technische Universität Chemnitz", + "aboutPartnerHsAnhalt": "Hochschule Anhalt", + "aboutPartnerVzSachsen": "Verbraucherzentrale Sachsen e.V.", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "faqQuestionWhatIs": "Was ist Simplications?", + "faqAnswerWhatIs": "Simplications ist ein Forschungsprojekt zum Smart-Home-Datenschutz. Diese App ist ein Teil des Projekts und führt Sie Raum für Raum durch Ihre Geräte mit praktischen Empfehlungen auf Basis Ihrer Antworten.", + "faqQuestionHowWorks": "Wie funktioniert der Check?", + "faqAnswerHowWorks": "Sie wählen einen Raum, erfassen Ihre smarten Geräte, beantworten gerätespezifische Fragen und erhalten ein Risikoprofil mit priorisierten Maßnahmen.", + "faqQuestionNoPolicy": "Warum gibt es keine Datenschutzerklärung?", + "faqAnswerNoPolicy": "Weil wir keine Daten von Ihnen erheben.", + "faqQuestionDataStored": "Wo werden meine Daten gespeichert?", + "faqAnswerDataStored": "Ihre Eingaben werden lokal auf Ihrem Gerät gespeichert. In der Über-Seite können Sie alle gespeicherten Daten jederzeit löschen.", + "faqQuestionNoDevice": "Was ist, wenn mein Gerät nicht in der Liste ist?", + "faqAnswerNoDevice": "Sie können eigene Geräte hinzufügen und den Check trotzdem durchführen. Die Empfehlungen basieren dann auf Ihrer Konfiguration und Ihren Antworten.", + "faqQuestionRiskMeaning": "Was bedeuten niedriges, mittleres und hohes Risiko?", + "faqAnswerRiskMeaning": "Diese Stufen zeigen, wie stark Ihre aktuelle Konfiguration Privatsphäre-Risiken begünstigen kann. Sie sind eine Orientierung und keine rechtliche oder technische Zertifizierung.", + "faqQuestionLegalAdvice": "Ist das eine Rechtsberatung?", + "faqAnswerLegalAdvice": "Nein. Simplications bietet praktische Orientierung und Empfehlungen, ersetzt aber keine rechtliche oder professionelle Sicherheitsberatung.", + "faqQuestionCanShare": "Kann ich mein Ergebnis teilen?", + "faqAnswerCanShare": "Ja. Im Ergebnisbildschirm können Sie Ihre Zusammenfassung direkt als Text oder PDF exportieren und teilen.", + "websiteOpenFailed": "Website konnte nicht geöffnet werden.", + "deleteAllDataTitle": "Alle Daten löschen?", + "deleteAllDataBody": "Alle erfassten Räume, Geräte und Antworten werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", + "deleteAllDataButton": "Daten löschen", + "allDataDeleted": "Alle gespeicherten Daten wurden gelöscht.", + "projectPartners": "Projektpartner", + "coordinationFunding": "Koordination & Förderung", + "coordination": "Koordination", + "platformPrivacy": "Plattform Privatheit", + "fundingAgency": "Fördermittelgeber", + "fundingAgencyValue": "Bundesministerium für Forschung, Technologie und Raumfahrt\nFKZ 16KIS1868K", + "website": "Website", + "dangerZone": "Gefahrenbereich", + "dangerZoneWarning": "Achtung: Diese Aktion entfernt alle gespeicherten App-Daten dauerhaft.", + "expertModeTitle": "Expertenmodus", + "expertModeToggleLabel": "Detaillierten Expertenmodus aktivieren", + "expertModeToggleHint": "Gleicher Ablauf, aber deutlich detailliertere Fragen pro Gerät (z. B. Aufbewahrungsdauer, Zugriffskontrolle, Drittweitergabe).", + "expertModeSourcesHint": "Methodisch angelehnt an folgende Forschungsprojekte:", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (Community-Plattform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeQuestionnaireHint": "Expertenmodus: Diese Fragen vertiefen Datenpraktiken und Governance (u. a. Speicherfristen, Zugriffskontrolle, Drittweitergabe) nach Ansätzen aus CMU IoT Label und Unboxing.IoT.Privacy.", + "roomDeleteTitle": "Raum löschen?", + "roomDeleteBody": "Dieser benutzerdefinierte Raum wird gelöscht. Alle verknüpften Geräte werden auch entfernt.", + "add": "Hinzufügen", + "addRoomDialogTitle": "Neuen Raum hinzufügen", + "roomName": "Raumname", + "roomNameHint": "z. B. Wohnzimmer, Garage", + "chooseIcon": "Symbol wählen:", + "addDeviceDialogTitle": "Neues Gerät hinzufügen", + "deviceName": "Gerätename", + "deviceNameHint": "z. B. Mein Smart Speaker", + "baseRiskLabel": "Basis-Risiko-Punktzahl (0-100)", + "baseRiskHint": "z. B. 30 (niedrig) bis 60 (hoch)", + "hasCamera": "Hat Kamera?", + "hasMicrophone": "Hat Mikrofon?", + "camera": "Kamera", + "microphone": "Mikrofon", + "summaryTitle": "Ihr Ergebnis", + "shareResult": "Ergebnis teilen", + "shareAsText": "Als Text teilen", + "shareAsPdf": "Als PDF teilen", + "restart": "Neu starten", + "noDevicesCaptured": "Keine Geräte erfasst.", + "noDevicesHint": "Starten Sie erneut und fügen Sie Geräte hinzu, um eine Bewertung zu erhalten.", + "highRisk": "Hohes Risiko", + "mediumRisk": "Mittleres Risiko", + "lowRisk": "Niedriges Risiko", + "exportFailed": "Export fehlgeschlagen", + "summaryShareSubject": "Simplications Ergebnis", + "summarySharePdfText": "Simplications Ergebnisbericht als PDF", + "overview": "Übersicht", + "evaluatedDevices": "Bewertete Geräte", + "skippedDevicesHint": "{count} Geräte übersprungen, da der Fragebogen nicht abgeschlossen wurde.", + "overallRisk": "Gesamtrisiko", + "generalRecommendations": "Allgemeine Empfehlungen", + "generalRecommendationsHint": "Diese Maßnahmen gelten unabhängig von einzelnen Geräten für Ihr gesamtes Smart Home.", + "fullCatalog": "Vollständiger Maßnahmenkatalog", + "catalogButton": "Zum vollständigen Maßnahmenkatalog", + "risk": "Risiko", + "note": "Hinweis", + "recommendations": "Empfehlungen", + "urgent": "Dringend", + "recommended": "Empfohlen", + "optional": "Optional", + "social": "Sozial", + "technical": "Technisch", + "security": "Sicherheit", + "smartHomePrivacyHeader": "Ihr Smart-Home-Datenschutz", + "devicesRated": "bewertete Geräte", + "howRiskCalculated": "Wie wird das Risiko berechnet?", + "totalScore": "Gesamt", + "catalogSnackBarPrefix": "Maßnahmenkatalog", + "reportExportedAt": "Exportiert am", + "noActionLow": "Alles in Ordnung - keine Maßnahmen erforderlich.", + "noActionMedium": "Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein mittleres Restrisiko.", + "noActionHigh": "Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein hohes Restrisiko.", + "overallLow": "Gut gemacht! Ihre Geräte sind überwiegend sicher konfiguriert. Schauen Sie trotzdem in die allgemeinen Empfehlungen.", + "overallMedium": "Es gibt Verbesserungspotenzial. Schauen Sie sich die Empfehlungen zu den einzelnen Geräten an.", + "overallHigh": "Mehrere Geräte haben erhebliche Privatsphäre-/Datenschutzrisiken. Bitte setzen Sie die Maßnahmen mit hoher Priorität zeitnah um.", + "dontKnowHint": " Es wurden {count} Antwort{suffix} mit \"Weiß ich nicht\" gegeben - nehmen Sie sich Zeit, die Einstellungen Ihrer Geräte besser kennenzulernen.", + "room_living": "Wohnzimmer", + "room_kitchen": "Küche", + "room_bedroom": "Schlafzimmer", + "room_child_bedroom": "Kinderzimmer", + "room_bathroom": "Badezimmer", + "room_office": "Arbeitszimmer", + "room_hallway": "Flur / Eingang", + "room_garden": "Garten / Außenbereich", + "room_basement": "Keller / Speisekammer", + "room_whole_home": "Ganze Wohnung", + "device_simple_sensor": "Einfacher Sensor (z. B. Bewegungs- oder Türsensor)", + "device_humidity_sensor": "Feuchtigkeitssensor", + "device_temperature_sensor": "Temperatursensor", + "device_light_sensor": "Lichtsensor", + "device_smart_speaker": "Smart Speaker / Sprachassistent", + "device_smart_display": "Smart Display (z. B. Nest Hub)", + "device_smart_tv": "Smart TV", + "device_indoor_camera": "Smarte Innenkamera", + "device_outdoor_camera": "Smarte Außenkamera", + "device_doorbell_camera": "Smarte Türklingel mit Kamera", + "device_baby_monitor": "Babymonitor / Babykamera", + "device_robot_vacuum": "Saugroboter", + "device_smart_fridge": "Smarter Kühlschrank", + "device_smart_oven": "Smarter Backofen / Herd", + "device_smart_coffee": "Smarte Kaffeemaschine", + "device_smart_washing": "Smarte Waschmaschine / Trockner", + "device_smart_thermostat": "Smarter Thermostat / Heizungssteuerung", + "device_smart_plug": "Smarte Steckdose", + "device_smart_light": "Smarte Beleuchtung", + "device_smart_lock": "Smartes Türschloss", + "device_smart_blind": "Smarte Jalousie / Rolllade", + "device_fitness_tracker": "Fitness-Tracker / Smartwatch", + "device_smart_toy": "Smartes Spielzeug", + "device_smart_router": "Smart Router / Mesh-System", + "device_smart_hub": "Smart-Home-Hub (z. B. Homey, Home Assistant)", + "device_smart_meter": "Intelligenter Stromzähler / Smart Meter", + "device_smart_irrigation": "Smarte Bewässerungsanlage", + "device_smart_scale": "Smarte Waage", + "device_smart_printer": "Smarter Drucker", + "q_password_text": "Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?", + "q_password_hint": "Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.", + "q_updates_text": "Sind automatische Sicherheits-Updates für das Gerät aktiviert?", + "q_updates_hint": "Updates schließen bekannte Sicherheitslücken zeitnah.", + "q_network_text": "Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?", + "q_network_hint": "Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.", + "q_informed_text": "Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?", + "q_informed_hint": "Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.", + "q_permissions_text": "Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?", + "q_permissions_hint": "Nur wirklich benötigte Berechtigungen sollten aktiviert sein.", + "q_mic_active_text": "Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?", + "q_mic_active_hint": "Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.", + "q_camera_consent_text": "Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?", + "q_camera_consent_hint": "Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.", + "q_sensor_frequency_text": "Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?", + "q_sensor_frequency_hint": "Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.", + "q_sensor_data_deletion_text": "Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?", + "q_sensor_data_deletion_hint": "Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.", + "q_sensor_granularity_text": "Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?", + "q_sensor_granularity_hint": "Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.", + "q_sensor_local_text": "Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?", + "q_sensor_local_hint": "Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.", + "q_voice_history_text": "Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?", + "q_voice_history_hint": "BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.", + "q_voice_local_text": "Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?", + "q_voice_local_hint": "Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.", + "q_skills_permissions_text": "Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?", + "q_skills_permissions_hint": "Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.", + "q_video_encryption_text": "Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?", + "q_video_encryption_hint": "BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.", + "q_video_storage_text": "Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?", + "q_video_storage_hint": "Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.", + "q_sharing_restrictions_text": "Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?", + "q_sharing_restrictions_hint": "Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.", + "q_motion_detection_text": "Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?", + "q_motion_detection_hint": "BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.", + "q_account_required_text": "Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?", + "q_account_required_hint": "Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.", + "q_tracking_disabled_text": "Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?", + "q_tracking_disabled_hint": "Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.", + "q_local_mode_text": "Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?", + "q_local_mode_hint": "Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.", + "q_data_collection_text": "Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?", + "q_data_collection_hint": "Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.", + "q_offline_control_text": "Können Sie das Thermostat auch offline betreiben (ohne Internet)?", + "q_offline_control_hint": "Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.", + "q_family_access_text": "Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?", + "q_family_access_hint": "Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.", + "q_local_control_text": "Können Automatisierungen lokal ohne Internetverbindung erfolgen?", + "q_local_control_hint": "Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.", + "q_usage_tracking_text": "Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?", + "q_usage_tracking_hint": "Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.", + "q_offline_fallback_text": "Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?", + "q_offline_fallback_hint": "Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.", + "q_offline_unlock_text": "Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?", + "q_offline_unlock_hint": "Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.", + "q_access_logging_text": "Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?", + "q_access_logging_hint": "Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.", + "q_two_factor_text": "Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?", + "q_two_factor_hint": "BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.", + "q_map_privacy_text": "Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?", + "q_map_privacy_hint": "Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.", + "q_cloud_required_text": "Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?", + "q_cloud_required_hint": "Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.", + "q_vision_data_text": "Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?", + "q_vision_data_hint": "Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.", + "q_parental_control_text": "Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?", + "q_parental_control_hint": "Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.", + "q_child_data_limits_text": "Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?", + "q_child_data_limits_hint": "Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.", + "q_recording_disable_text": "Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?", + "q_recording_disable_hint": "BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.", + "q_health_sharing_text": "Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?", + "q_health_sharing_hint": "Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.", + "q_location_tracking_text": "Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?", + "q_location_tracking_hint": "GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.", + "q_expert_data_retention_duration_text": "Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?", + "q_expert_data_retention_duration_hint": "Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.", + "q_expert_access_control_granular_text": "Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?", + "q_expert_access_control_granular_hint": "Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.", + "q_expert_third_party_sharing_limited_text": "Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?", + "q_expert_third_party_sharing_limited_hint": "Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.", + "q_expert_data_sale_disabled_text": "Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?", + "q_expert_data_sale_disabled_hint": "Eine ausdrückliche \"kein Datenverkauf\"-Option ist ein starkes Datenschutzsignal.", + "q_expert_update_support_window_text": "Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?", + "q_expert_update_support_window_hint": "Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.", + "q_expert_vulnerability_process_text": "Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?", + "q_expert_vulnerability_process_hint": "Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.", + "q_expert_offline_functionality_text": "Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?", + "q_expert_offline_functionality_hint": "Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.", + "q_expert_bystander_transparency_text": "Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?", + "q_expert_bystander_transparency_hint": "Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.", + "q_expert_child_data_protection_text": "Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?", + "q_expert_child_data_protection_hint": "Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.", + "q_expert_access_revocation_text": "Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?", + "q_expert_access_revocation_hint": "Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.", + "q_expert_sensitive_inference_controls_text": "Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?", + "q_expert_sensitive_inference_controls_hint": "Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.", + "a_password_title": "Standard-Passwort ändern", + "a_password_desc": "Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.", + "a_updates_title": "Automatische Updates aktivieren", + "a_updates_desc": "Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.", + "a_network_title": "Separates IoT-WLAN einrichten", + "a_network_desc": "Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.", + "a_informed_title": "Haushaltsmitglieder informieren", + "a_informed_desc": "Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.", + "a_permissions_title": "App-Berechtigungen einschränken", + "a_permissions_desc": "Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.", + "a_camera_consent_title": "Kameraausrichtung mit Bewohnern abstimmen", + "a_camera_consent_desc": "Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.", + "a_mic_active_title": "Mikrofon bei Nichtnutzung deaktivieren", + "a_mic_active_desc": "Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.", + "a_sensor_frequency_title": "Messintervall reduzieren", + "a_sensor_frequency_desc": "Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.", + "a_sensor_data_deletion_title": "Alte Messwerte löschen", + "a_sensor_data_deletion_desc": "Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.", + "a_sensor_granularity_title": "Daten weniger detailliert anzeigen", + "a_sensor_granularity_desc": "Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.", + "a_sensor_local_title": "Lokale Verarbeitung bevorzugen", + "a_sensor_local_desc": "Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.", + "a_voice_history_title": "Sprachaufzeichnungen löschen", + "a_voice_history_desc": "BSI-Empfehlung: Löschen Sie Sprachaufzeichnungen regelmäßig und deaktivieren Sie die Speicherung von Sprachverlauf, falls die Option verfügbar ist.", + "a_voice_local_title": "Lokale Sprachverarbeitung aktivieren", + "a_voice_local_desc": "Aktivieren Sie lokale Sprachverarbeitung, falls verfügbar. Falls nicht verfügbar, minimieren Sie Cloud-Speicherung von Sprachdaten.", + "a_skills_permissions_title": "Skills/Fähigkeiten überprüfen", + "a_skills_permissions_desc": "Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.", + "a_video_encryption_title": "Ende-zu-Ende-Verschlüsselung aktivieren", + "a_video_encryption_desc": "Aktivieren Sie in den Kamera-Einstellungen eine Ende-zu-Ende-verschlüsselte Übertragung für Livebild und Aufnahmen.", + "a_video_storage_title": "Aufnahmen lokal speichern", + "a_video_storage_desc": "Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.", + "a_sharing_restrictions_title": "Kamera-Zugriffe einschränken", + "a_sharing_restrictions_desc": "Entfernen Sie in der App alle unnötigen Freigaben und erlauben Sie Live-View/Aufnahmen nur für benötigte Konten.", + "a_motion_detection_title": "Bewegungserkennung bei Anwesenheit deaktivieren", + "a_motion_detection_desc": "Deaktivieren Sie Bewegungserkennung, wenn Personen zu Hause sind, oder setzen Sie einen Zeitplan, der sie nur in Abwesenheitszeiten aktiviert.", + "a_account_required_title": "Kontopflicht datenschutzarm umsetzen", + "a_account_required_desc": "Falls kein kontoloser Betrieb möglich ist, verwenden Sie ein separates Konto mit minimalen Profildaten und deaktivieren Sie personalisierte Dienste.", + "a_tracking_disabled_title": "Tracking und Werbung deaktivieren", + "a_tracking_disabled_desc": "Deaktivieren Sie in den Datenschutzoptionen Tracking, personalisierte Werbung und optionale Telemetrie.", + "a_local_mode_title": "Offline-Nutzung bevorzugen", + "a_local_mode_desc": "Nutzen Sie das Gerät primär über lokale Quellen (z. B. HDMI), um Datenübertragung an den Hersteller zu reduzieren.", + "a_data_collection_title": "Historien-Upload deaktivieren", + "a_data_collection_desc": "Deaktivieren Sie in der Thermostat-App die Übertragung von Temperaturhistorien an den Hersteller und verkürzen Sie die Speicherdauer.", + "a_offline_control_title": "Lokale Steuerung einrichten", + "a_offline_control_desc": "Konfigurieren Sie lokale Zeitpläne und eine Bedienung ohne Cloud-Abhängigkeit, falls das Gerät dies unterstützt.", + "a_family_access_title": "Zugriffsrechte für Haushaltsmitglieder trennen", + "a_family_access_desc": "Richten Sie getrennte Rollen/Konten ein, damit nur berechtigte Personen Änderungen an der Heizung vornehmen können.", + "a_local_control_title": "Lokale Automatisierungen aktivieren", + "a_local_control_desc": "Nutzen Sie lokale Szenen/Zeitpläne statt Cloud-Automatisierungen, sofern verfügbar.", + "a_usage_tracking_title": "Nutzungs-Tracking deaktivieren", + "a_usage_tracking_desc": "Schalten Sie in den App-Einstellungen Analyse-, Telemetrie- und Nutzungsdatenerfassung aus.", + "a_offline_fallback_title": "Offline-Notbetrieb sicherstellen", + "a_offline_fallback_desc": "Prüfen Sie lokale Schalter/Taster und richten Sie Fallback-Bedienung ein, damit das Gerät auch ohne Internet nutzbar bleibt.", + "a_offline_unlock_title": "Offline-Zugang absichern", + "a_offline_unlock_desc": "Richten Sie einen physischen Schlüssel oder einen Notfall-Code ein und testen Sie den Zugriff bei Ausfall der Internetverbindung.", + "a_access_logging_title": "Zugriffsprotokoll aktivieren", + "a_access_logging_desc": "Aktivieren Sie Protokollierung und Benachrichtigungen für Schlossöffnungen, damit unbefugte Zugriffe auffallen.", + "a_two_factor_title": "Zwei-Faktor-Authentifizierung aktivieren", + "a_two_factor_desc": "BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.", + "a_map_privacy_title": "Cloud-Grundrissspeicherung deaktivieren", + "a_map_privacy_desc": "Stellen Sie die Speicherung auf lokal um und deaktivieren Sie Cloud-Backups von Grundrissen, falls diese Option verfügbar ist.", + "a_cloud_required_title": "Cloud-Abhängigkeit reduzieren", + "a_cloud_required_desc": "Aktivieren Sie lokale Navigation oder Offline-Modus, falls verfügbar. Wenn nicht verfügbar, bewerten Sie einen Wechsel zu einem datenschutzfreundlicheren Modell.", + "a_vision_data_title": "Kameradaten nur lokal verarbeiten", + "a_vision_data_desc": "Deaktivieren Sie Upload/Speicherung von Kamerabildern und nutzen Sie, wenn möglich, ausschließlich lokale Navigationsverarbeitung.", + "a_parental_control_title": "Elternkontrolle einrichten", + "a_parental_control_desc": "Aktivieren Sie Elternkontrolle mit PIN und beschränken Sie Kontakte, Funktionen und Freigaben auf das Notwendige.", + "a_child_data_limits_title": "Datenerfassung minimieren", + "a_child_data_limits_desc": "Deaktivieren Sie optionale Profildaten und erfassen Sie nur die für die Kernfunktion erforderlichen Kinderdaten.", + "a_recording_disable_title": "Audio/Video-Aufnahmen deaktivieren", + "a_recording_disable_desc": "Schalten Sie Aufnahmefunktionen standardmäßig aus und aktivieren Sie sie nur bei konkretem Bedarf kurzzeitig.", + "a_health_sharing_title": "Gesundheitsdaten-Freigaben einschränken", + "a_health_sharing_desc": "Entziehen Sie unnötigen Drittanbieter-Apps den Zugriff auf Gesundheitsdaten in App- und Kontoeinstellungen.", + "a_location_tracking_title": "Standortfreigabe reduzieren", + "a_location_tracking_desc": "Deaktivieren Sie Standortverfolgung außerhalb aktiver Nutzung oder erlauben Sie sie nur beim Verwenden der App.", + "a_expert_data_retention_duration_title": "Speicherfristen festlegen", + "a_expert_data_retention_duration_desc": "Setzen Sie klare kurze Aufbewahrungsfristen in den Einstellungen und löschen Sie Altbestände regelmäßig.", + "a_expert_access_control_granular_title": "Granulare Rollen und Konten einführen", + "a_expert_access_control_granular_desc": "Nutzen Sie getrennte Konten statt Shared-Logins und vergeben Sie nur die minimal nötigen Rechte.", + "a_expert_third_party_sharing_limited_title": "Drittweitergabe begrenzen", + "a_expert_third_party_sharing_limited_desc": "Deaktivieren Sie Partner-, Werbe- und Analyseweitergaben in Datenschutz- und Kontoeinstellungen.", + "a_expert_data_sale_disabled_title": "Datenverkauf widersprechen", + "a_expert_data_sale_disabled_desc": "Aktivieren Sie vorhandene \"Do not sell\"-Optionen bzw. widersprechen Sie der Datenweitergabe für Vermarktung.", + "a_expert_update_support_window_title": "Update-Zusage verifizieren", + "a_expert_update_support_window_desc": "Prüfen Sie die offizielle Update-Policy des Herstellers und planen Sie bei fehlender Zusage einen Gerätewechsel ein.", + "a_expert_vulnerability_process_title": "Hersteller-Sicherheitsprozess prüfen", + "a_expert_vulnerability_process_desc": "Bevorzugen Sie Hersteller mit klarer Security-Kontaktstelle und Responsible-Disclosure-Prozess.", + "a_expert_offline_functionality_title": "Offline-Funktionalität priorisieren", + "a_expert_offline_functionality_desc": "Aktivieren Sie lokale Betriebsmodi und minimieren Sie Cloud-Pflichtfunktionen, sofern das Gerät dies erlaubt.", + "a_expert_bystander_transparency_title": "Transparenzhinweise für Umfeld ergänzen", + "a_expert_bystander_transparency_desc": "Sorgen Sie für sichtbare Hinweise, Aufnahmeanzeigen und klare Information für betroffene Personen im Umfeld.", + "a_expert_child_data_protection_title": "Kinderdatenschutz verschärfen", + "a_expert_child_data_protection_desc": "Aktivieren Sie kindgerechte Profile, minimieren Sie Datenerhebung und deaktivieren Sie Profilbildung/Weitergabe.", + "a_expert_access_revocation_title": "Schnellen Zugriffswiderruf einrichten", + "a_expert_access_revocation_desc": "Stellen Sie sicher, dass digitale Schlüssel einzeln und sofort widerrufen werden können, z. B. bei Geräteverlust.", + "a_expert_sensitive_inference_controls_title": "Inferenzfunktionen einschränken", + "a_expert_sensitive_inference_controls_desc": "Deaktivieren Sie Funktionen, die sensible Gesundheits- oder Verhaltensprofile ableiten, sofern diese nicht zwingend benötigt werden.", + "a_dont_know_title": "Geräteeinstellungen besser kennenlernen", + "a_dont_know_desc": "Mindestens eine Frage wurde mit \"Weiß ich nicht\" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.", + "sl_base_risk": "Grundrisiko des Gerätetyps", + "sl_child_room_bonus": "Erhöhte Sensibilität: Kinderzimmer", + "sl_password": "Standard-Passwort nicht geändert", + "sl_updates": "Automatische Updates nicht aktiv", + "sl_network": "Kein separates IoT-WLAN eingerichtet", + "sl_informed": "Haushaltsmitglieder nicht informiert", + "sl_permissions": "App-Berechtigungen nicht reduziert", + "sl_camera_consent": "Kein Einverständnis für Kamerabereich", + "sl_mic_active": "Mikrofon nicht bei Nichtnutzung deaktiviert", + "sl_sensor_frequency": "Messintervall nicht reduziert", + "sl_sensor_data_deletion": "Alte Messwerte nicht gelöscht", + "sl_sensor_granularity": "Daten zu fein granular gespeichert", + "sl_sensor_local": "Daten in die Cloud übertragen", + "sl_voice_history": "Sprachaufnahmen nicht löschbar", + "sl_voice_local": "Keine lokale Sprachverarbeitung", + "sl_skills_permissions": "Skills nicht regelmäßig geprüft", + "sl_video_encryption": "Videoübertragung nicht verschlüsselt", + "sl_video_storage": "Aufnahmen nur in Anbieter-Cloud", + "sl_sharing_restrictions": "Zugriff auf Aufnahmen nicht kontrolliert", + "sl_motion_detection": "Bewegungserkennung immer aktiv", + "sl_account_required": "Pflichtkonto beim Hersteller nötig", + "sl_tracking_disabled": "Werbe-Tracking nicht deaktiviert", + "sl_local_mode": "Kein Offline-Betrieb möglich", + "sl_data_collection": "Temperaturverlauf an Hersteller übertragen", + "sl_offline_control": "Kein Offline-Betrieb möglich", + "sl_family_access": "Zugriff nicht einschränkbar", + "sl_local_control": "Automatisierungen nur mit Internet", + "sl_usage_tracking": "Schaltmuster vom Hersteller erfasst", + "sl_offline_fallback": "Gerät offline nicht nutzbar", + "sl_offline_unlock": "Kein Offline-Öffnen möglich", + "sl_access_logging": "Kein Zugriffsprotokoll verfügbar", + "sl_two_factor": "2-Faktor-Authentifizierung fehlt", + "sl_map_privacy": "Grundriss an Hersteller übertragen", + "sl_cloud_required": "Navigation nur mit Cloud möglich", + "sl_vision_data": "Kamerabilder gespeichert oder übertragen", + "sl_parental_control": "Elternkontrolle nicht eingerichtet", + "sl_child_data_limits": "Datenmenge nicht eingeschränkt", + "sl_recording_disable": "Aufnahmen nicht deaktivierbar", + "sl_health_sharing": "Gesundheitsdaten mit Dritten geteilt", + "sl_location_tracking": "Standortverfolgung aktiv", + "sl_expert_data_retention_duration": "Aufbewahrungsdauer unklar/zu lang", + "sl_expert_access_control_granular": "Granulare Zugriffskontrolle fehlt", + "sl_expert_third_party_sharing_limited": "Weitergabe an Dritte nicht begrenzt", + "sl_expert_data_sale_disabled": "Datenverkauf nicht ausgeschlossen", + "sl_expert_update_support_window": "Garantierter Update-Zeitraum unbekannt", + "sl_expert_vulnerability_process": "Schwachstellenprozess nicht dokumentiert", + "sl_expert_offline_functionality": "Sinnvoller Betrieb ohne Internet nicht möglich", + "sl_expert_bystander_transparency": "Transparenz für Betroffene im Umfeld fehlt", + "sl_expert_child_data_protection": "Schutzmaßnahmen für Kinderdaten fehlen", + "sl_expert_access_revocation": "Einzelner Zugriffswiderruf nicht möglich", + "sl_expert_sensitive_inference_controls": "Kontrollen gegen sensible Inferenz fehlen", + "risk_hint_camera": "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.", + "risk_hint_mic": "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.", + "risk_hint_lock": "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.", + "risk_hint_child_room": "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.", + "risk_hint_generic": "Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.", + "gen_rec_0": "Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).", + "gen_rec_1": "Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.", + "gen_rec_2": "Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.", + "gen_rec_3": "Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.", + "gen_rec_4": "Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.", + "gen_rec_5": "Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.", + "gen_rec_6": "Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein." +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb new file mode 100644 index 0000000..3e5c91a --- /dev/null +++ b/lib/l10n/app_en.arb @@ -0,0 +1,463 @@ +{ + "@@locale": "en", + "appTitle": "Simplications", + "welcomeTitle": "Simplications\nSmart Home\nPrivacy Check", + "welcomeDescription": "Capture your smart devices room by room and receive a privacy assessment with concrete recommendations.", + "stepSelectRooms": "Select room", + "stepCaptureDevices": "Capture devices", + "stepAnswerQuestions": "Answer questions", + "stepGetRisk": "Get risk profile & recommendations", + "start": "Start", + "resume": "Resume", + "about": "About", + "faq": "FAQ", + "roomSelectionTitle": "Select room", + "roomQuestion": "Which room would you like to check now?", + "roomInstruction": "Tap a room, capture your devices there, then return here to choose the next room.", + "results": "Results", + "alreadyEvaluated": "Already evaluated", + "notCompleted": "Not completed", + "addRoom": "Add room", + "deviceTitlePrefix": "Devices", + "roomCheck": "Room check", + "deviceQuestion": "Which smart devices do you use in this room?", + "deviceQuestionHint": "Tap a device to answer its questions.", + "noKnownDevices": "No known devices for this room. You can add your own device.", + "addDevice": "Add\ndevice", + "noDevice": "No device", + "nextRoom": "Next room", + "deleteDeviceTitle": "Delete device?", + "deleteDeviceBody": "This custom device will be deleted. All linked instances will also be removed.", + "delete": "Delete", + "cancel": "Cancel", + "confirm": "Confirm", + "noDeviceDialogTitle": "No devices in this room?", + "noDeviceDialogBody": "This room will be completed without devices and will not affect scoring.", + "noDeviceDialogBodyWithExisting": "Existing device selections for this room will be discarded. This room will be completed without devices and will not affect scoring.", + "questionnaireTitle": "Questions", + "connectedDevice": "Connected device", + "done": "Done", + "yes": "Yes", + "no": "No", + "dontKnow": "I don't know", + "notApplicableForDevice": "This question does not apply to my device", + "languageDialogTitle": "Choose language", + "currentLanguage": "Current language", + "aboutScreenTitle": "About the app", + "faqScreenTitle": "Frequently Asked Questions", + "aboutSubtitle": "Research project on smart home privacy", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Chemnitz University of Technology", + "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerVzSachsen": "Consumer Center Saxony", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "faqQuestionWhatIs": "What is Simplications?", + "faqAnswerWhatIs": "Simplications is a research project on smart-home privacy. This app is one part of the project and guides you room by room through your devices with practical recommendations based on your answers.", + "faqQuestionHowWorks": "How does the check work?", + "faqAnswerHowWorks": "You select a room, add your smart devices, answer device-specific questions, and receive a risk profile with prioritized actions.", + "faqQuestionNoPolicy": "Why is there no data protection policy?", + "faqAnswerNoPolicy": "Because we do not collect your data.", + "faqQuestionDataStored": "Where is my data stored?", + "faqAnswerDataStored": "Your assessment data is stored locally on your device. You can delete all stored data at any time in the About screen.", + "faqQuestionNoDevice": "What if my device is not listed?", + "faqAnswerNoDevice": "You can add custom devices and still complete the check. The recommendations then rely on your provided setup and answers.", + "faqQuestionRiskMeaning": "What do low, medium, and high risk mean?", + "faqAnswerRiskMeaning": "They indicate how strongly your current configuration may expose privacy-related risks. They are guidance levels, not legal or technical certification.", + "faqQuestionLegalAdvice": "Is this legal advice?", + "faqAnswerLegalAdvice": "No. Simplications provides practical orientation and recommendations, but does not replace legal or professional security consultation.", + "faqQuestionCanShare": "Can I share my results?", + "faqAnswerCanShare": "Yes. You can export and share your summary as text or PDF directly from the results screen.", + "websiteOpenFailed": "Could not open website.", + "deleteAllDataTitle": "Delete all data?", + "deleteAllDataBody": "All captured rooms, devices, and answers will be permanently deleted. This action cannot be undone.", + "deleteAllDataButton": "Delete data", + "allDataDeleted": "All saved data has been deleted.", + "projectPartners": "Project partners", + "coordinationFunding": "Coordination & Funding", + "coordination": "Coordination", + "platformPrivacy": "Platform Privacy", + "fundingAgency": "Funding body", + "fundingAgencyValue": "German Federal Ministry of Research, Technology and Space\nGrant 16KIS1868K", + "website": "Website", + "dangerZone": "Danger zone", + "dangerZoneWarning": "Warning: This action permanently removes all saved app data.", + "expertModeTitle": "Expert mode", + "expertModeToggleLabel": "Enable detailed expert mode", + "expertModeToggleHint": "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeSourcesHint": "Methodologically inspired by the following research projects:", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeQuestionnaireHint": "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "roomDeleteTitle": "Delete room?", + "roomDeleteBody": "This custom room will be deleted. All linked devices will also be removed.", + "add": "Add", + "addRoomDialogTitle": "Add new room", + "roomName": "Room name", + "roomNameHint": "e.g. Living room, Garage", + "chooseIcon": "Choose icon:", + "addDeviceDialogTitle": "Add new device", + "deviceName": "Device name", + "deviceNameHint": "e.g. My smart speaker", + "baseRiskLabel": "Base risk score (0-100)", + "baseRiskHint": "e.g. 30 (low) to 60 (high)", + "hasCamera": "Has camera?", + "hasMicrophone": "Has microphone?", + "camera": "Camera", + "microphone": "Microphone", + "summaryTitle": "Your result", + "shareResult": "Share result", + "shareAsText": "Share as text", + "shareAsPdf": "Share as PDF", + "restart": "Restart", + "noDevicesCaptured": "No devices captured.", + "noDevicesHint": "Restart and add devices to receive an assessment.", + "highRisk": "High risk", + "mediumRisk": "Medium risk", + "lowRisk": "Low risk", + "exportFailed": "Export failed", + "summaryShareSubject": "Simplications result", + "summarySharePdfText": "Simplications report as PDF", + "overview": "Overview", + "evaluatedDevices": "Evaluated devices", + "skippedDevicesHint": "{count} devices skipped because the questionnaire was not completed.", + "overallRisk": "Overall risk", + "generalRecommendations": "General recommendations", + "generalRecommendationsHint": "These measures apply to your whole smart home regardless of individual devices.", + "fullCatalog": "Full action catalog", + "catalogButton": "Open full action catalog", + "risk": "Risk", + "note": "Note", + "recommendations": "Recommendations", + "urgent": "Urgent", + "recommended": "Recommended", + "optional": "Optional", + "social": "Social", + "technical": "Technical", + "security": "Security", + "smartHomePrivacyHeader": "Your smart home privacy", + "devicesRated": "rated devices", + "howRiskCalculated": "How is risk calculated?", + "totalScore": "Total", + "catalogSnackBarPrefix": "Catalog", + "reportExportedAt": "Exported at", + "noActionLow": "Everything is fine - no actions required.", + "noActionMedium": "No concrete actions can currently be derived from your answers, but a medium residual risk remains.", + "noActionHigh": "No concrete actions can currently be derived from your answers, but a high residual risk remains.", + "overallLow": "Well done! Your devices are mostly configured securely. Still review the general recommendations.", + "overallMedium": "There is room for improvement. Review the recommendations for each device.", + "overallHigh": "Several devices have significant privacy/data-protection risks. Please implement high-priority measures promptly.", + "dontKnowHint": " {count} answer{suffix} were marked as \"I don't know\" - take time to understand your device settings better.", + "room_living": "Living room", + "room_kitchen": "Kitchen", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_bathroom": "Bathroom", + "room_office": "Office", + "room_hallway": "Hallway / Entrance", + "room_garden": "Garden / Outdoor area", + "room_basement": "Basement / Pantry", + "room_whole_home": "Entire home", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_humidity_sensor": "Humidity sensor", + "device_temperature_sensor": "Temperature sensor", + "device_light_sensor": "Light sensor", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_tv": "Smart TV", + "device_indoor_camera": "Smart indoor camera", + "device_outdoor_camera": "Smart outdoor camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_baby_monitor": "Baby monitor / baby camera", + "device_robot_vacuum": "Robot vacuum", + "device_smart_fridge": "Smart fridge", + "device_smart_oven": "Smart oven / stove", + "device_smart_coffee": "Smart coffee machine", + "device_smart_washing": "Smart washer / dryer", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_plug": "Smart plug", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_blind": "Smart blind / shutter", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_smart_toy": "Smart toy", + "device_smart_router": "Smart router / mesh system", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_scale": "Smart scale", + "device_smart_printer": "Smart printer", + "q_password_text": "Have you changed the default password of the device or its linked account?", + "q_password_hint": "Default passwords are often publicly known and easy to crack.", + "q_updates_text": "Are automatic security updates enabled for the device?", + "q_updates_hint": "Updates close known security vulnerabilities promptly.", + "q_network_text": "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_network_hint": "A dedicated network for smart devices protects your main home network.", + "q_informed_text": "Are all people in the household informed about this device and its function?", + "q_informed_hint": "All household members should know what data the device captures.", + "q_permissions_text": "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_permissions_hint": "Only permissions that are truly needed should be enabled.", + "q_mic_active_text": "Do you deactivate the microphone when you are not actively using it?", + "q_mic_active_hint": "Smart speakers and devices with microphones can be activated unintentionally.", + "q_camera_consent_text": "Does the camera only record areas for which everyone affected has given their consent?", + "q_camera_consent_hint": "Cameras in communal or private areas require the consent of all residents.", + "q_sensor_frequency_text": "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_frequency_hint": "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_data_deletion_text": "Are older measurement values deleted automatically or on request?", + "q_sensor_data_deletion_hint": "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_granularity_text": "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_granularity_hint": "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_local_text": "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sensor_local_hint": "Local processing prevents the vendor from accessing your measurement data.", + "q_voice_history_text": "Can you delete voice recordings from device history or disable this feature?", + "q_voice_history_hint": "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_local_text": "Is voice processing performed partly on the device locally?", + "q_voice_local_hint": "Local processing reduces the amount of data sent to the cloud.", + "q_skills_permissions_text": "Do you regularly review which skills have access to your account?", + "q_skills_permissions_hint": "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_video_encryption_text": "Is video recording and transmission encrypted end-to-end?", + "q_video_encryption_hint": "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_storage_text": "Are recordings stored locally (not only in the vendor cloud)?", + "q_video_storage_hint": "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_sharing_restrictions_text": "Can you control who can access live view and recordings?", + "q_sharing_restrictions_hint": "You should be able to precisely control access to video recordings.", + "q_motion_detection_text": "Can you disable or schedule motion detection when you are at home?", + "q_motion_detection_hint": "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_account_required_text": "Can you use the device without a mandatory online account?", + "q_account_required_hint": "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_tracking_disabled_text": "Can you completely disable advertising and tracking features?", + "q_tracking_disabled_hint": "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_local_mode_text": "Can you use the device via HDMI or local sources without internet?", + "q_local_mode_hint": "Offline use protects usage data from being sent to the vendor.", + "q_data_collection_text": "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_data_collection_hint": "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_offline_control_text": "Can you operate the thermostat offline (without internet)?", + "q_offline_control_hint": "Offline operation or local automation protects data from cloud access.", + "q_family_access_text": "Can you control who may adjust heating (e.g., restrict guests)?", + "q_family_access_hint": "Household members should have control without visitors changing everything.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_control_hint": "Local scenes and schedules protect your privacy better.", + "q_usage_tracking_text": "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_usage_tracking_hint": "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_offline_fallback_text": "Do devices still work if internet or app connection fails?", + "q_offline_fallback_hint": "Reliable local operation is important for daily use and privacy.", + "q_offline_unlock_text": "Can you unlock the lock offline (e.g., with code or key)?", + "q_offline_unlock_hint": "Backup options prevent lockout during internet or power outages.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_access_logging_hint": "An access log helps you detect suspicious activity.", + "q_two_factor_text": "Is two-factor authentication (2FA) available for the lock account?", + "q_two_factor_hint": "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_map_privacy_text": "Are created floor plans stored exclusively on the device locally?", + "q_map_privacy_hint": "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_cloud_required_text": "Does floor-plan navigation work without cloud connection?", + "q_cloud_required_hint": "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_vision_data_text": "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_vision_data_hint": "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_parental_control_text": "Are there parental control features to manage the toy?", + "q_parental_control_hint": "Parental controls should allow restricting contacts and features.", + "q_child_data_limits_text": "Can you limit which personal data the toy collects?", + "q_child_data_limits_hint": "Child-focused devices should collect and store minimal data.", + "q_recording_disable_text": "Can you disable audio and video recording on the device?", + "q_recording_disable_hint": "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_health_sharing_text": "Can you control which third parties can access your health data?", + "q_health_sharing_hint": "Health data is sensitive. Only authorized apps should have access.", + "q_location_tracking_text": "Can you disable location tracking when not needed?", + "q_location_tracking_hint": "GPS tracking uses battery and can reveal movement patterns.", + "q_expert_data_retention_duration_text": "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_retention_duration_hint": "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_access_control_granular_text": "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_control_granular_hint": "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_third_party_sharing_limited_text": "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_third_party_sharing_limited_hint": "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_data_sale_disabled_text": "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_data_sale_disabled_hint": "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_update_support_window_text": "Is it known how long the vendor guarantees security updates?", + "q_expert_update_support_window_hint": "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_vulnerability_process_text": "Is there a documented process for reporting and fixing vulnerabilities?", + "q_expert_vulnerability_process_hint": "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_offline_functionality_text": "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_offline_functionality_hint": "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_bystander_transparency_text": "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_bystander_transparency_hint": "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_child_data_protection_text": "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_child_data_protection_hint": "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_access_revocation_text": "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_access_revocation_hint": "Fast revocation is crucial when devices are shared or users change.", + "q_expert_sensitive_inference_controls_text": "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_sensitive_inference_controls_hint": "Inference controls reduce risks from secondary use of sensitive data.", + "a_password_title": "Change default password", + "a_password_desc": "Replace the default password with a strong, unique password. Use a password manager.", + "a_updates_title": "Enable automatic updates", + "a_updates_desc": "Enable automatic security updates in device or app settings.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_network_desc": "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_informed_title": "Inform household members", + "a_informed_desc": "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_permissions_title": "Restrict app permissions", + "a_permissions_desc": "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_camera_consent_desc": "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_mic_active_title": "Disable microphone when not in use", + "a_mic_active_desc": "Use the physical mute switch or disable the microphone in settings.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_frequency_desc": "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_data_deletion_desc": "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_granularity_desc": "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_local_title": "Prefer local processing", + "a_sensor_local_desc": "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_history_desc": "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_local_title": "Enable local voice processing", + "a_voice_local_desc": "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_skills_permissions_title": "Review skills/integrations", + "a_skills_permissions_desc": "Review which third-party skills have access. Disable unnecessary skills.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_encryption_desc": "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_storage_title": "Store recordings locally", + "a_video_storage_desc": "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_sharing_restrictions_desc": "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_motion_detection_desc": "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_account_required_desc": "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_tracking_disabled_desc": "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_local_mode_title": "Prefer offline use", + "a_local_mode_desc": "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_data_collection_title": "Disable history upload", + "a_data_collection_desc": "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_offline_control_title": "Set up local control", + "a_offline_control_desc": "Configure local schedules and control without cloud dependency if the device supports it.", + "a_family_access_title": "Separate access rights for household members", + "a_family_access_desc": "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_local_control_title": "Enable local automations", + "a_local_control_desc": "Use local scenes/schedules instead of cloud automations where available.", + "a_usage_tracking_title": "Disable usage tracking", + "a_usage_tracking_desc": "Disable analytics, telemetry, and usage data collection in app settings.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_fallback_desc": "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_unlock_title": "Secure offline access", + "a_offline_unlock_desc": "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_access_logging_title": "Enable access log", + "a_access_logging_desc": "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_two_factor_title": "Enable two-factor authentication", + "a_two_factor_desc": "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_map_privacy_desc": "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_cloud_required_desc": "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_vision_data_title": "Process camera data locally only", + "a_vision_data_desc": "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_parental_control_title": "Set up parental controls", + "a_parental_control_desc": "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_child_data_limits_title": "Minimize data collection", + "a_child_data_limits_desc": "Disable optional profile data and collect only the child data required for core functionality.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_recording_disable_desc": "Disable recording features by default and enable them only briefly when specifically needed.", + "a_health_sharing_title": "Restrict health data sharing", + "a_health_sharing_desc": "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_location_tracking_title": "Reduce location sharing", + "a_location_tracking_desc": "Disable location tracking outside active use or allow it only while the app is in use.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_retention_duration_desc": "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_access_control_granular_title": "Introduce granular roles and accounts", + "a_expert_access_control_granular_desc": "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_third_party_sharing_limited_desc": "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_data_sale_disabled_desc": "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_update_support_window_desc": "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_expert_vulnerability_process_desc": "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_offline_functionality_title": "Prioritize offline functionality", + "a_expert_offline_functionality_desc": "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_bystander_transparency_title": "Add transparency notices for bystanders", + "a_expert_bystander_transparency_desc": "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_child_data_protection_title": "Strengthen child data protection", + "a_expert_child_data_protection_desc": "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_access_revocation_desc": "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_sensitive_inference_controls_title": "Restrict inference features", + "a_expert_sensitive_inference_controls_desc": "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_dont_know_title": "Get to know device settings better", + "a_dont_know_desc": "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "sl_base_risk": "Baseline risk of device type", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_password": "Default password not changed", + "sl_updates": "Automatic updates not enabled", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_informed": "Household members not informed", + "sl_permissions": "App permissions not reduced", + "sl_camera_consent": "No consent for camera-covered area", + "sl_mic_active": "Microphone not disabled when unused", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_motion_detection": "Motion detection always active", + "sl_account_required": "Mandatory vendor account required", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_local_mode": "No offline operation possible", + "sl_data_collection": "Temperature history sent to vendor", + "sl_offline_control": "No offline operation possible", + "sl_family_access": "Access cannot be restricted", + "sl_local_control": "Automations require internet connection", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_access_logging": "No access log available", + "sl_two_factor": "Two-factor authentication missing", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_parental_control": "Parental controls not configured", + "sl_child_data_limits": "Data collection not limited", + "sl_recording_disable": "Recording cannot be disabled", + "sl_health_sharing": "Health data shared with third parties", + "sl_location_tracking": "Location tracking enabled", + "sl_expert_data_retention_duration": "Retention duration unclear or too long", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_third_party_sharing_limited": "Third-party sharing not limited", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_update_support_window": "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_expert_offline_functionality": "Meaningful offline operation not possible", + "sl_expert_bystander_transparency": "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": "Child-data protection measures missing", + "sl_expert_access_revocation": "Individual access revocation not possible", + "sl_expert_sensitive_inference_controls": "Controls against sensitive inference missing", + "risk_hint_camera": "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_mic": "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "risk_hint_lock": "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_child_room": "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "gen_rec_0": "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": "Use a household consent check before buying new devices and involve all household members." +} diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb new file mode 100644 index 0000000..daa4e85 --- /dev/null +++ b/lib/l10n/app_fr.arb @@ -0,0 +1,154 @@ +{ + "@@locale": "fr", + "appTitle": "Simplications", + "welcomeTitle": "Simplications\nContrôle de confidentialité\nSmart Home", + "welcomeDescription": "Renseignez vos appareils intelligents pièce par pièce et obtenez une évaluation de confidentialité avec des recommandations concrètes.", + "stepSelectRooms": "Choisir une pièce", + "stepCaptureDevices": "Recenser les appareils", + "stepAnswerQuestions": "Répondre aux questions", + "stepGetRisk": "Obtenir le profil de risque et les recommandations", + "start": "Démarrer", + "resume": "Continuer", + "about": "À propos", + "faq": "FAQ", + "roomSelectionTitle": "Sélectionner une pièce", + "roomQuestion": "Quelle pièce souhaitez-vous vérifier maintenant ?", + "roomInstruction": "Touchez une pièce, recensez-y vos appareils, puis revenez ici pour choisir la pièce suivante.", + "results": "Résultats", + "alreadyEvaluated": "Déjà évalué", + "notCompleted": "Non terminé", + "addRoom": "Ajouter une pièce", + "deviceTitlePrefix": "Appareils", + "roomCheck": "Vérification de la pièce", + "deviceQuestion": "Quels appareils intelligents utilisez-vous dans cette pièce ?", + "deviceQuestionHint": "Touchez un appareil pour répondre aux questions.", + "noKnownDevices": "Aucun appareil connu pour cette pièce. Vous pouvez ajouter votre propre appareil.", + "addDevice": "Ajouter\nun appareil", + "noDevice": "Aucun appareil", + "nextRoom": "Pièce suivante", + "deleteDeviceTitle": "Supprimer l'appareil ?", + "deleteDeviceBody": "Cet appareil personnalisé sera supprimé. Toutes les instances liées seront également supprimées.", + "delete": "Supprimer", + "cancel": "Annuler", + "confirm": "Confirmer", + "noDeviceDialogTitle": "Aucun appareil dans cette pièce ?", + "noDeviceDialogBody": "Cette pièce sera terminée sans appareil et n'affectera pas le score.", + "noDeviceDialogBodyWithExisting": "Les sélections d'appareils existantes pour cette pièce seront ignorées. Cette pièce sera terminée sans appareil et n'affectera pas le score.", + "questionnaireTitle": "Questions", + "connectedDevice": "Appareil connecté", + "done": "Terminé", + "yes": "Oui", + "no": "Non", + "dontKnow": "Je ne sais pas", + "notApplicableForDevice": "Cette question ne s'applique pas à mon appareil", + "languageDialogTitle": "Choisir la langue", + "currentLanguage": "Langue actuelle", + "aboutScreenTitle": "À propos de l’application", + "aboutSubtitle": "Projet de recherche sur la confidentialité des maisons connectées", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Université technique de Chemnitz", + "aboutPartnerHsAnhalt": "Haute école d’Anhalt", + "aboutPartnerVzSachsen": "Centre des consommateurs de Saxe", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "websiteOpenFailed": "Impossible d’ouvrir le site web.", + "deleteAllDataTitle": "Supprimer toutes les données ?", + "deleteAllDataBody": "Toutes les pièces, appareils et réponses enregistrés seront supprimés définitivement. Cette action est irréversible.", + "deleteAllDataButton": "Supprimer les données", + "allDataDeleted": "Toutes les données enregistrées ont été supprimées.", + "projectPartners": "Partenaires du projet", + "coordinationFunding": "Coordination et financement", + "coordination": "Coordination", + "platformPrivacy": "Plattform Privatheit", + "fundingAgency": "Organisme financeur", + "fundingAgencyValue": "Ministère fédéral allemand de la Recherche, de la Technologie et de l’Espace\nSubvention 16KIS1868K", + "website": "Site web", + "dangerZone": "Zone de danger", + "dangerZoneWarning": "Attention : cette action supprime définitivement toutes les données enregistrées de l’application.", + "faqScreenTitle": "Questions fréquentes", + "faqQuestionWhatIs": "Qu’est-ce que Simplications ?", + "faqAnswerWhatIs": "Simplications est un projet de recherche sur la confidentialité des maisons connectées. Cette application est une composante du projet et vous guide pièce par pièce à travers vos appareils avec des recommandations pratiques selon vos réponses.", + "faqQuestionHowWorks": "Comment fonctionne le contrôle ?", + "faqAnswerHowWorks": "Vous choisissez une pièce, ajoutez vos appareils intelligents, répondez à des questions spécifiques, puis recevez un profil de risque avec des actions priorisées.", + "faqQuestionNoPolicy": "Pourquoi n’y a-t-il pas de politique de protection des données ?", + "faqAnswerNoPolicy": "Parce que nous ne collectons pas vos données.", + "faqQuestionDataStored": "Où sont stockées mes données ?", + "faqAnswerDataStored": "Vos données d’évaluation sont stockées localement sur votre appareil. Vous pouvez supprimer toutes les données enregistrées à tout moment depuis l’écran À propos.", + "faqQuestionNoDevice": "Que faire si mon appareil n’est pas dans la liste ?", + "faqAnswerNoDevice": "Vous pouvez ajouter des appareils personnalisés et terminer le contrôle. Les recommandations s’appuieront alors sur votre configuration et vos réponses.", + "faqQuestionRiskMeaning": "Que signifient risque faible, moyen et élevé ?", + "faqAnswerRiskMeaning": "Ces niveaux indiquent dans quelle mesure votre configuration actuelle peut exposer des risques de confidentialité. Ce sont des niveaux d’orientation, pas une certification juridique ou technique.", + "faqQuestionLegalAdvice": "Est-ce un conseil juridique ?", + "faqAnswerLegalAdvice": "Non. Simplications fournit une orientation pratique et des recommandations, mais ne remplace pas un conseil juridique ou une consultation professionnelle en sécurité.", + "faqQuestionCanShare": "Puis-je partager mes résultats ?", + "faqAnswerCanShare": "Oui. Depuis l’écran des résultats, vous pouvez exporter et partager votre résumé en texte ou en PDF.", + "roomDeleteTitle": "Supprimer la pièce ?", + "roomDeleteBody": "Cette pièce personnalisée sera supprimée. Tous les appareils liés seront également supprimés.", + "add": "Ajouter", + "addRoomDialogTitle": "Ajouter une nouvelle pièce", + "roomName": "Nom de la pièce", + "roomNameHint": "ex. Salon, Garage", + "chooseIcon": "Choisir une icône :", + "addDeviceDialogTitle": "Ajouter un nouvel appareil", + "deviceName": "Nom de l’appareil", + "deviceNameHint": "ex. Mon haut-parleur intelligent", + "baseRiskLabel": "Score de risque de base (0-100)", + "baseRiskHint": "ex. 30 (faible) à 60 (élevé)", + "hasCamera": "Possède une caméra ?", + "hasMicrophone": "Possède un microphone ?", + "camera": "Caméra", + "microphone": "Microphone", + "summaryTitle": "Votre résultat", + "shareResult": "Partager le résultat", + "shareAsText": "Partager en texte", + "shareAsPdf": "Partager en PDF", + "restart": "Recommencer", + "noDevicesCaptured": "Aucun appareil enregistré.", + "noDevicesHint": "Redémarrez et ajoutez des appareils pour obtenir une évaluation.", + "highRisk": "Risque élevé", + "mediumRisk": "Risque moyen", + "lowRisk": "Risque faible", + "exportFailed": "Échec de l’export", + "summaryShareSubject": "Résultat Simplications", + "summarySharePdfText": "Rapport Simplications en PDF", + "overview": "Vue d’ensemble", + "evaluatedDevices": "Appareils évalués", + "skippedDevicesHint": "{count} appareils ignorés car le questionnaire n'a pas été terminé.", + "overallRisk": "Risque global", + "generalRecommendations": "Recommandations générales", + "generalRecommendationsHint": "Ces mesures s’appliquent à toute votre maison connectée, indépendamment des appareils individuels.", + "fullCatalog": "Catalogue complet des actions", + "catalogButton": "Ouvrir le catalogue complet des actions", + "risk": "Risque", + "note": "Remarque", + "recommendations": "Recommandations", + "urgent": "Urgent", + "recommended": "Recommandé", + "optional": "Optionnel", + "social": "Social", + "technical": "Technique", + "security": "Sécurité", + "smartHomePrivacyHeader": "La confidentialité de votre maison connectée", + "devicesRated": "appareils évalués", + "howRiskCalculated": "Comment le risque est-il calculé ?", + "totalScore": "Total", + "catalogSnackBarPrefix": "Catalogue", + "reportExportedAt": "Exporté le", + "noActionLow": "Tout va bien - aucune action n’est nécessaire.", + "noActionMedium": "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel moyen demeure.", + "noActionHigh": "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel élevé demeure.", + "overallLow": "Bien joué ! Vos appareils sont globalement configurés de façon sûre. Consultez tout de même les recommandations générales.", + "overallMedium": "Il y a une marge d’amélioration. Consultez les recommandations pour chaque appareil.", + "overallHigh": "Plusieurs appareils présentent des risques importants pour la confidentialité/protection des données. Veuillez mettre en œuvre rapidement les mesures prioritaires.", + "dontKnowHint": " {count} réponse{suffix} a été marquée \"Je ne sais pas\" - prenez le temps de mieux comprendre les paramètres de vos appareils." +} diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index e31cba1..a74f403 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -1,2526 +1,2872 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; -class AppLocalizations { - final Locale locale; - static Locale _activeLocale = const Locale('de'); +import 'app_localizations_cs.dart'; +import 'app_localizations_da.dart'; +import 'app_localizations_de.dart'; +import 'app_localizations_en.dart'; +import 'app_localizations_fr.dart'; +import 'app_localizations_nl.dart'; +import 'app_localizations_pl.dart'; - AppLocalizations(this.locale); +// ignore_for_file: type=lint - static const supportedLocales = [ - Locale('de'), +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/app_localizations.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) + : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations? of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + static const LocalizationsDelegate delegate = + _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = + >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ Locale('cs'), + Locale('da'), + Locale('de'), Locale('en'), - Locale('pl'), Locale('fr'), Locale('nl'), - Locale('da'), + Locale('pl'), ]; - static final Map> _completeLocalizedValues = - _buildCompleteLocalizedValues(); - - static Map> _buildCompleteLocalizedValues() { - final enMap = _localizedValues['en'] ?? const {}; - final completed = >{}; - - for (final locale in supportedLocales) { - final languageCode = locale.languageCode; - final currentMap = - _localizedValues[languageCode] ?? const {}; - completed[languageCode] = Map.unmodifiable({ - ...enMap, - ...currentMap, - }); - } - - for (final entry in _localizedValues.entries) { - completed.putIfAbsent( - entry.key, - () => Map.unmodifiable({...enMap, ...entry.value}), - ); - } - - return Map>.unmodifiable(completed); - } + /// No description provided for @appTitle. + /// + /// In en, this message translates to: + /// **'Simplications'** + String get appTitle; - static AppLocalizations of(BuildContext context) { - final localizations = Localizations.of( - context, - AppLocalizations, - ); - final resolved = localizations ?? AppLocalizations(const Locale('de')); - _activeLocale = resolved.locale; - return resolved; - } + /// No description provided for @welcomeTitle. + /// + /// In en, this message translates to: + /// **'Simplications\nSmart Home\nPrivacy Check'** + String get welcomeTitle; - static String get activeLanguageCode => _activeLocale.languageCode; - - static String translate( - String key, { - String? fallback, - Locale? locale, - Map? params, - }) { - final lang = (locale ?? _activeLocale).languageCode; - final langMap = _completeLocalizedValues[lang]; - final enMap = _completeLocalizedValues['en']; - final deMap = _completeLocalizedValues['de']; - - var value = langMap?[key] ?? enMap?[key] ?? deMap?[key] ?? fallback ?? key; - if (params != null && params.isNotEmpty) { - params.forEach((paramKey, paramValue) { - value = value.replaceAll('{$paramKey}', paramValue); - }); - } - return value; - } + /// No description provided for @welcomeDescription. + /// + /// In en, this message translates to: + /// **'Capture your smart devices room by room and receive a privacy assessment with concrete recommendations.'** + String get welcomeDescription; - static AppLocalizations activate(Locale locale) { - _activeLocale = locale; - return AppLocalizations(locale); - } + /// No description provided for @stepSelectRooms. + /// + /// In en, this message translates to: + /// **'Select room'** + String get stepSelectRooms; - static const LocalizationsDelegate delegate = - _AppLocalizationsDelegate(); + /// No description provided for @stepCaptureDevices. + /// + /// In en, this message translates to: + /// **'Capture devices'** + String get stepCaptureDevices; - static Map> localizationKeysByLocale() { - return { - for (final entry in _completeLocalizedValues.entries) - entry.key: Set.from(entry.value.keys), - }; - } + /// No description provided for @stepAnswerQuestions. + /// + /// In en, this message translates to: + /// **'Answer questions'** + String get stepAnswerQuestions; - static const Map> _localizedValues = { - 'de': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Der Simplications\nSmart Home\nPrivatsphäre-Check', - 'welcomeDescription': - 'Erfassen Sie Raum für Raum Ihre smarten Geräte und erhalten Sie eine Privatsphärebewertung mit konkreten Empfehlungen.', - 'stepSelectRooms': 'Raum auswählen', - 'stepCaptureDevices': 'Geräte erfassen', - 'stepAnswerQuestions': 'Fragen beantworten', - 'stepGetRisk': 'Risikoprofil & Empfehlungen erhalten', - 'start': 'Starten', - 'resume': 'Fortsetzen', - 'about': 'Über', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Raum auswählen', - 'roomQuestion': 'Welchen Raum möchten Sie jetzt prüfen?', - 'roomInstruction': - 'Tippen Sie auf einen Raum, erfassen Sie dort Ihre Geräte und kehren Sie dann hierher zurück, um den nächsten Raum zu wählen.', - 'results': 'Ergebnisse', - 'alreadyEvaluated': 'Bereits ausgewertet', - 'notCompleted': 'Nicht abgeschlossen', - 'addRoom': 'Raum hinzufügen', - 'deviceTitlePrefix': 'Geräte', - 'roomCheck': 'Raum-Check', - 'deviceQuestion': 'Welche smarten Geräte nutzen Sie in diesem Raum?', - 'deviceQuestionHint': - 'Tippen Sie auf ein Gerät, um die Fragen dafür zu beantworten.', - 'noKnownDevices': - 'Keine bekannten Geräte für diesen Raum. Sie können ein eigenes Gerät hinzufügen.', - 'addDevice': 'Gerät\nhinzufügen', - 'noDevice': 'Kein Gerät', - 'nextRoom': 'Nächster Raum', - 'deleteDeviceTitle': 'Gerät löschen?', - 'deleteDeviceBody': - 'Dieses benutzerdefinierte Gerät wird gelöscht. Alle verknüpften Instanzen werden auch entfernt.', - 'delete': 'Löschen', - 'cancel': 'Abbrechen', - 'confirm': 'Bestätigen', - 'noDeviceDialogTitle': 'Keine Geräte in diesem Raum?', - 'noDeviceDialogBody': - 'Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.', - 'noDeviceDialogBodyWithExisting': - 'Vorhandene Geräteauswahlen für diesen Raum werden verworfen. Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.', - 'questionnaireTitle': 'Fragen', - 'connectedDevice': 'Verbundenes Gerät', - 'done': 'Fertig', - 'yes': 'Ja', - 'no': 'Nein', - 'dontKnow': 'Weiß ich nicht', - 'notApplicableForDevice': 'Diese Frage trifft auf mein Gerät nicht zu', - 'languageDialogTitle': 'Sprache wählen', - 'currentLanguage': 'Aktuelle Sprache', - 'aboutScreenTitle': 'Über die App', - 'faqScreenTitle': 'Häufige Fragen', - 'aboutSubtitle': 'Forschungsprojekt Smart Home Privatsphäre', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Technische Universität Chemnitz', - 'aboutPartnerHsAnhalt': 'Hochschule Anhalt', - 'aboutPartnerVzSachsen': 'Verbraucherzentrale Sachsen e.V.', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'faqQuestionWhatIs': 'Was ist Simplications?', - 'faqAnswerWhatIs': - 'Simplications ist ein Forschungsprojekt zum Smart-Home-Datenschutz. Diese App ist ein Teil des Projekts und führt Sie Raum für Raum durch Ihre Geräte mit praktischen Empfehlungen auf Basis Ihrer Antworten.', - 'faqQuestionHowWorks': 'Wie funktioniert der Check?', - 'faqAnswerHowWorks': - 'Sie wählen einen Raum, erfassen Ihre smarten Geräte, beantworten gerätespezifische Fragen und erhalten ein Risikoprofil mit priorisierten Maßnahmen.', - 'faqQuestionNoPolicy': 'Warum gibt es keine Datenschutzerklärung?', - 'faqAnswerNoPolicy': 'Weil wir keine Daten von Ihnen erheben.', - 'faqQuestionDataStored': 'Wo werden meine Daten gespeichert?', - 'faqAnswerDataStored': - 'Ihre Eingaben werden lokal auf Ihrem Gerät gespeichert. In der Über-Seite können Sie alle gespeicherten Daten jederzeit löschen.', - 'faqQuestionNoDevice': 'Was ist, wenn mein Gerät nicht in der Liste ist?', - 'faqAnswerNoDevice': - 'Sie können eigene Geräte hinzufügen und den Check trotzdem durchführen. Die Empfehlungen basieren dann auf Ihrer Konfiguration und Ihren Antworten.', - 'faqQuestionRiskMeaning': - 'Was bedeuten niedriges, mittleres und hohes Risiko?', - 'faqAnswerRiskMeaning': - 'Diese Stufen zeigen, wie stark Ihre aktuelle Konfiguration Privatsphäre-Risiken begünstigen kann. Sie sind eine Orientierung und keine rechtliche oder technische Zertifizierung.', - 'faqQuestionLegalAdvice': 'Ist das eine Rechtsberatung?', - 'faqAnswerLegalAdvice': - 'Nein. Simplications bietet praktische Orientierung und Empfehlungen, ersetzt aber keine rechtliche oder professionelle Sicherheitsberatung.', - 'faqQuestionCanShare': 'Kann ich mein Ergebnis teilen?', - 'faqAnswerCanShare': - 'Ja. Im Ergebnisbildschirm können Sie Ihre Zusammenfassung direkt als Text oder PDF exportieren und teilen.', - 'websiteOpenFailed': 'Website konnte nicht geöffnet werden.', - 'deleteAllDataTitle': 'Alle Daten löschen?', - 'deleteAllDataBody': - 'Alle erfassten Räume, Geräte und Antworten werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.', - 'deleteAllDataButton': 'Daten löschen', - 'allDataDeleted': 'Alle gespeicherten Daten wurden gelöscht.', - 'projectPartners': 'Projektpartner', - 'coordinationFunding': 'Koordination & Förderung', - 'coordination': 'Koordination', - 'platformPrivacy': 'Plattform Privatheit', - 'fundingAgency': 'Fördermittelgeber', - 'fundingAgencyValue': - 'Bundesministerium für Forschung, Technologie und Raumfahrt\nFKZ 16KIS1868K', - 'website': 'Website', - 'dangerZone': 'Gefahrenbereich', - 'dangerZoneWarning': - 'Achtung: Diese Aktion entfernt alle gespeicherten App-Daten dauerhaft.', - 'expertModeTitle': 'Expertenmodus', - 'expertModeToggleLabel': 'Detaillierten Expertenmodus aktivieren', - 'expertModeToggleHint': - 'Gleicher Ablauf, aber deutlich detailliertere Fragen pro Gerät (z. B. Aufbewahrungsdauer, Zugriffskontrolle, Drittweitergabe).', - 'expertModeSourcesHint': - 'Methodisch angelehnt an folgende Forschungsprojekte:', - 'expertModeSourceCmuLabel': 'CMU IoT Security & Privacy Label (CISPL)', - 'expertModeSourceCmuUrl': 'https://iotsecurityprivacy.org/labels', - 'expertModeSourceUnboxingLabel': - 'Unboxing.IoT.Privacy (Community-Plattform)', - 'expertModeSourceUnboxingUrl': 'https://iot-privacy.info/project/', - 'expertModeQuestionnaireHint': - 'Expertenmodus: Diese Fragen vertiefen Datenpraktiken und Governance (u. a. Speicherfristen, Zugriffskontrolle, Drittweitergabe) nach Ansätzen aus CMU IoT Label und Unboxing.IoT.Privacy.', - 'roomDeleteTitle': 'Raum löschen?', - 'roomDeleteBody': - 'Dieser benutzerdefinierte Raum wird gelöscht. Alle verknüpften Geräte werden auch entfernt.', - 'add': 'Hinzufügen', - 'addRoomDialogTitle': 'Neuen Raum hinzufügen', - 'roomName': 'Raumname', - 'roomNameHint': 'z. B. Wohnzimmer, Garage', - 'chooseIcon': 'Symbol wählen:', - 'addDeviceDialogTitle': 'Neues Gerät hinzufügen', - 'deviceName': 'Gerätename', - 'deviceNameHint': 'z. B. Mein Smart Speaker', - 'baseRiskLabel': 'Basis-Risiko-Punktzahl (0-100)', - 'baseRiskHint': 'z. B. 30 (niedrig) bis 60 (hoch)', - 'hasCamera': 'Hat Kamera?', - 'hasMicrophone': 'Hat Mikrofon?', - 'camera': 'Kamera', - 'microphone': 'Mikrofon', - 'summaryTitle': 'Ihr Ergebnis', - 'shareResult': 'Ergebnis teilen', - 'shareAsText': 'Als Text teilen', - 'shareAsPdf': 'Als PDF teilen', - 'restart': 'Neu starten', - 'noDevicesCaptured': 'Keine Geräte erfasst.', - 'noDevicesHint': - 'Starten Sie erneut und fügen Sie Geräte hinzu, um eine Bewertung zu erhalten.', - 'highRisk': 'Hohes Risiko', - 'mediumRisk': 'Mittleres Risiko', - 'lowRisk': 'Niedriges Risiko', - 'exportFailed': 'Export fehlgeschlagen', - 'summaryShareSubject': 'Simplications Ergebnis', - 'summarySharePdfText': 'Simplications Ergebnisbericht als PDF', - 'overview': 'Übersicht', - 'evaluatedDevices': 'Bewertete Geräte', - 'skippedDevicesHint': - '{count} Geräte übersprungen, da der Fragebogen nicht abgeschlossen wurde.', - 'overallRisk': 'Gesamtrisiko', - 'generalRecommendations': 'Allgemeine Empfehlungen', - 'generalRecommendationsHint': - 'Diese Maßnahmen gelten unabhängig von einzelnen Geräten für Ihr gesamtes Smart Home.', - 'fullCatalog': 'Vollständiger Maßnahmenkatalog', - 'catalogButton': 'Zum vollständigen Maßnahmenkatalog', - 'risk': 'Risiko', - 'note': 'Hinweis', - 'recommendations': 'Empfehlungen', - 'urgent': 'Dringend', - 'recommended': 'Empfohlen', - 'optional': 'Optional', - 'social': 'Sozial', - 'technical': 'Technisch', - 'security': 'Sicherheit', - 'smartHomePrivacyHeader': 'Ihr Smart-Home-Datenschutz', - 'devicesRated': 'bewertete Geräte', - 'howRiskCalculated': 'Wie wird das Risiko berechnet?', - 'totalScore': 'Gesamt', - 'catalogSnackBarPrefix': 'Maßnahmenkatalog', - 'reportExportedAt': 'Exportiert am', - 'noActionLow': 'Alles in Ordnung - keine Maßnahmen erforderlich.', - 'noActionMedium': - 'Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein mittleres Restrisiko.', - 'noActionHigh': - 'Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein hohes Restrisiko.', - 'overallLow': - 'Gut gemacht! Ihre Geräte sind überwiegend sicher konfiguriert. Schauen Sie trotzdem in die allgemeinen Empfehlungen.', - 'overallMedium': - 'Es gibt Verbesserungspotenzial. Schauen Sie sich die Empfehlungen zu den einzelnen Geräten an.', - 'overallHigh': - 'Mehrere Geräte haben erhebliche Privatsphäre-/Datenschutzrisiken. Bitte setzen Sie die Maßnahmen mit hoher Priorität zeitnah um.', - 'dontKnowHint': - ' Es wurden {count} Antwort{suffix} mit "Weiß ich nicht" gegeben - nehmen Sie sich Zeit, die Einstellungen Ihrer Geräte besser kennenzulernen.', - // ── Rooms ─────────────────────────────────────────────────────────────── - 'room_living': 'Wohnzimmer', - 'room_kitchen': 'Küche', - 'room_bedroom': 'Schlafzimmer', - 'room_child_bedroom': 'Kinderzimmer', - 'room_bathroom': 'Badezimmer', - 'room_office': 'Arbeitszimmer', - 'room_hallway': 'Flur / Eingang', - 'room_garden': 'Garten / Außenbereich', - 'room_basement': 'Keller / Speisekammer', - 'room_whole_home': 'Ganze Wohnung', - // ── Device names ───────────────────────────────────────────────────────── - 'device_simple_sensor': - 'Einfacher Sensor (z. B. Bewegungs- oder Türsensor)', - 'device_humidity_sensor': 'Feuchtigkeitssensor', - 'device_temperature_sensor': 'Temperatursensor', - 'device_light_sensor': 'Lichtsensor', - 'device_smart_speaker': 'Smart Speaker / Sprachassistent', - 'device_smart_display': 'Smart Display (z. B. Nest Hub)', - 'device_smart_tv': 'Smart TV', - 'device_indoor_camera': 'Smarte Innenkamera', - 'device_outdoor_camera': 'Smarte Außenkamera', - 'device_doorbell_camera': 'Smarte Türklingel mit Kamera', - 'device_baby_monitor': 'Babymonitor / Babykamera', - 'device_robot_vacuum': 'Saugroboter', - 'device_smart_fridge': 'Smarter Kühlschrank', - 'device_smart_oven': 'Smarter Backofen / Herd', - 'device_smart_coffee': 'Smarte Kaffeemaschine', - 'device_smart_washing': 'Smarte Waschmaschine / Trockner', - 'device_smart_thermostat': 'Smarter Thermostat / Heizungssteuerung', - 'device_smart_plug': 'Smarte Steckdose', - 'device_smart_light': 'Smarte Beleuchtung', - 'device_smart_lock': 'Smartes Türschloss', - 'device_smart_blind': 'Smarte Jalousie / Rolllade', - 'device_fitness_tracker': 'Fitness-Tracker / Smartwatch', - 'device_smart_toy': 'Smartes Spielzeug', - 'device_smart_router': 'Smart Router / Mesh-System', - 'device_smart_hub': 'Smart-Home-Hub (z. B. Homey, Home Assistant)', - 'device_smart_meter': 'Intelligenter Stromzähler / Smart Meter', - 'device_smart_irrigation': 'Smarte Bewässerungsanlage', - 'device_smart_scale': 'Smarte Waage', - 'device_smart_printer': 'Smarter Drucker', - // ── Question texts & hints ─────────────────────────────────────────────── - 'q_password_text': - 'Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?', - 'q_password_hint': - 'Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.', - 'q_updates_text': - 'Sind automatische Sicherheits-Updates für das Gerät aktiviert?', - 'q_updates_hint': 'Updates schließen bekannte Sicherheitslücken zeitnah.', - 'q_network_text': - 'Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?', - 'q_network_hint': - 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.', - 'q_informed_text': - 'Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?', - 'q_informed_hint': - 'Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.', - 'q_permissions_text': - 'Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?', - 'q_permissions_hint': - 'Nur wirklich benötigte Berechtigungen sollten aktiviert sein.', - 'q_mic_active_text': - 'Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?', - 'q_mic_active_hint': - 'Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.', - 'q_camera_consent_text': - 'Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?', - 'q_camera_consent_hint': - 'Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.', - 'q_sensor_frequency_text': - 'Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?', - 'q_sensor_frequency_hint': - 'Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.', - 'q_sensor_data_deletion_text': - 'Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?', - 'q_sensor_data_deletion_hint': - 'Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.', - 'q_sensor_granularity_text': - 'Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?', - 'q_sensor_granularity_hint': - 'Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.', - 'q_sensor_local_text': - 'Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?', - 'q_sensor_local_hint': - 'Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.', - 'q_voice_history_text': - 'Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?', - 'q_voice_history_hint': - 'BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.', - 'q_voice_local_text': - 'Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?', - 'q_voice_local_hint': - 'Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.', - 'q_skills_permissions_text': - 'Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?', - 'q_skills_permissions_hint': - 'Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.', - 'q_video_encryption_text': - 'Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?', - 'q_video_encryption_hint': - 'BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.', - 'q_video_storage_text': - 'Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?', - 'q_video_storage_hint': - 'Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.', - 'q_sharing_restrictions_text': - 'Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?', - 'q_sharing_restrictions_hint': - 'Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.', - 'q_motion_detection_text': - 'Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?', - 'q_motion_detection_hint': - 'BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.', - 'q_account_required_text': - 'Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?', - 'q_account_required_hint': - 'Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.', - 'q_tracking_disabled_text': - 'Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?', - 'q_tracking_disabled_hint': - 'Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.', - 'q_local_mode_text': - 'Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?', - 'q_local_mode_hint': - 'Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.', - 'q_data_collection_text': - 'Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?', - 'q_data_collection_hint': - 'Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.', - 'q_offline_control_text': - 'Können Sie das Thermostat auch offline betreiben (ohne Internet)?', - 'q_offline_control_hint': - 'Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.', - 'q_family_access_text': - 'Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?', - 'q_family_access_hint': - 'Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.', - 'q_local_control_text': - 'Können Automatisierungen lokal ohne Internetverbindung erfolgen?', - 'q_local_control_hint': - 'Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.', - 'q_usage_tracking_text': - 'Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?', - 'q_usage_tracking_hint': - 'Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.', - 'q_offline_fallback_text': - 'Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?', - 'q_offline_fallback_hint': - 'Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.', - 'q_offline_unlock_text': - 'Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?', - 'q_offline_unlock_hint': - 'Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.', - 'q_access_logging_text': - 'Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?', - 'q_access_logging_hint': - 'Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.', - 'q_two_factor_text': - 'Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?', - 'q_two_factor_hint': - 'BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.', - 'q_map_privacy_text': - 'Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?', - 'q_map_privacy_hint': - 'Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.', - 'q_cloud_required_text': - 'Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?', - 'q_cloud_required_hint': - 'Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.', - 'q_vision_data_text': - 'Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?', - 'q_vision_data_hint': - 'Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.', - 'q_parental_control_text': - 'Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?', - 'q_parental_control_hint': - 'Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.', - 'q_child_data_limits_text': - 'Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?', - 'q_child_data_limits_hint': - 'Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.', - 'q_recording_disable_text': - 'Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?', - 'q_recording_disable_hint': - 'BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.', - 'q_health_sharing_text': - 'Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?', - 'q_health_sharing_hint': - 'Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.', - 'q_location_tracking_text': - 'Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?', - 'q_location_tracking_hint': - 'GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.', - 'q_expert_data_retention_duration_text': - 'Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?', - 'q_expert_data_retention_duration_hint': - 'Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.', - 'q_expert_access_control_granular_text': - 'Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?', - 'q_expert_access_control_granular_hint': - 'Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.', - 'q_expert_third_party_sharing_limited_text': - 'Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?', - 'q_expert_third_party_sharing_limited_hint': - 'Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.', - 'q_expert_data_sale_disabled_text': - 'Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?', - 'q_expert_data_sale_disabled_hint': - 'Eine ausdrückliche "kein Datenverkauf"-Option ist ein starkes Datenschutzsignal.', - 'q_expert_update_support_window_text': - 'Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?', - 'q_expert_update_support_window_hint': - 'Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.', - 'q_expert_vulnerability_process_text': - 'Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?', - 'q_expert_vulnerability_process_hint': - 'Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.', - 'q_expert_offline_functionality_text': - 'Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?', - 'q_expert_offline_functionality_hint': - 'Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.', - 'q_expert_bystander_transparency_text': - 'Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?', - 'q_expert_bystander_transparency_hint': - 'Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.', - 'q_expert_child_data_protection_text': - 'Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?', - 'q_expert_child_data_protection_hint': - 'Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.', - 'q_expert_access_revocation_text': - 'Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?', - 'q_expert_access_revocation_hint': - 'Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.', - 'q_expert_sensitive_inference_controls_text': - 'Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?', - 'q_expert_sensitive_inference_controls_hint': - 'Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.', - // ── Action titles & descriptions ───────────────────────────────────────── - 'a_password_title': 'Standard-Passwort ändern', - 'a_password_desc': - 'Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.', - 'a_updates_title': 'Automatische Updates aktivieren', - 'a_updates_desc': - 'Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.', - 'a_network_title': 'Separates IoT-WLAN einrichten', - 'a_network_desc': - 'Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.', - 'a_informed_title': 'Haushaltsmitglieder informieren', - 'a_informed_desc': - 'Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.', - 'a_permissions_title': 'App-Berechtigungen einschränken', - 'a_permissions_desc': - 'Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.', - 'a_camera_consent_title': 'Kameraausrichtung mit Bewohnern abstimmen', - 'a_camera_consent_desc': - 'Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.', - 'a_mic_active_title': 'Mikrofon bei Nichtnutzung deaktivieren', - 'a_mic_active_desc': - 'Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.', - 'a_sensor_frequency_title': 'Messintervall reduzieren', - 'a_sensor_frequency_desc': - 'Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.', - 'a_sensor_data_deletion_title': 'Alte Messwerte löschen', - 'a_sensor_data_deletion_desc': - 'Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.', - 'a_sensor_granularity_title': 'Daten weniger detailliert anzeigen', - 'a_sensor_granularity_desc': - 'Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.', - 'a_sensor_local_title': 'Lokale Verarbeitung bevorzugen', - 'a_sensor_local_desc': - 'Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.', - 'a_voice_history_title': 'Sprachaufzeichnungen löschen', - 'a_voice_history_desc': - 'BSI-Empfehlung: Löschen Sie Sprachaufzeichnungen regelmäßig und deaktivieren Sie die Speicherung von Sprachverlauf, falls die Option verfügbar ist.', - 'a_voice_local_title': 'Lokale Sprachverarbeitung aktivieren', - 'a_voice_local_desc': - 'Aktivieren Sie lokale Sprachverarbeitung, falls verfügbar. Falls nicht verfügbar, minimieren Sie Cloud-Speicherung von Sprachdaten.', - 'a_skills_permissions_title': 'Skills/Fähigkeiten überprüfen', - 'a_skills_permissions_desc': - 'Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.', - 'a_video_encryption_title': 'Ende-zu-Ende-Verschlüsselung aktivieren', - 'a_video_encryption_desc': - 'Aktivieren Sie in den Kamera-Einstellungen eine Ende-zu-Ende-verschlüsselte Übertragung für Livebild und Aufnahmen.', - 'a_video_storage_title': 'Aufnahmen lokal speichern', - 'a_video_storage_desc': - 'Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.', - 'a_sharing_restrictions_title': 'Kamera-Zugriffe einschränken', - 'a_sharing_restrictions_desc': - 'Entfernen Sie in der App alle unnötigen Freigaben und erlauben Sie Live-View/Aufnahmen nur für benötigte Konten.', - 'a_motion_detection_title': - 'Bewegungserkennung bei Anwesenheit deaktivieren', - 'a_motion_detection_desc': - 'Deaktivieren Sie Bewegungserkennung, wenn Personen zu Hause sind, oder setzen Sie einen Zeitplan, der sie nur in Abwesenheitszeiten aktiviert.', - 'a_account_required_title': 'Kontopflicht datenschutzarm umsetzen', - 'a_account_required_desc': - 'Falls kein kontoloser Betrieb möglich ist, verwenden Sie ein separates Konto mit minimalen Profildaten und deaktivieren Sie personalisierte Dienste.', - 'a_tracking_disabled_title': 'Tracking und Werbung deaktivieren', - 'a_tracking_disabled_desc': - 'Deaktivieren Sie in den Datenschutzoptionen Tracking, personalisierte Werbung und optionale Telemetrie.', - 'a_local_mode_title': 'Offline-Nutzung bevorzugen', - 'a_local_mode_desc': - 'Nutzen Sie das Gerät primär über lokale Quellen (z. B. HDMI), um Datenübertragung an den Hersteller zu reduzieren.', - 'a_data_collection_title': 'Historien-Upload deaktivieren', - 'a_data_collection_desc': - 'Deaktivieren Sie in der Thermostat-App die Übertragung von Temperaturhistorien an den Hersteller und verkürzen Sie die Speicherdauer.', - 'a_offline_control_title': 'Lokale Steuerung einrichten', - 'a_offline_control_desc': - 'Konfigurieren Sie lokale Zeitpläne und eine Bedienung ohne Cloud-Abhängigkeit, falls das Gerät dies unterstützt.', - 'a_family_access_title': 'Zugriffsrechte für Haushaltsmitglieder trennen', - 'a_family_access_desc': - 'Richten Sie getrennte Rollen/Konten ein, damit nur berechtigte Personen Änderungen an der Heizung vornehmen können.', - 'a_local_control_title': 'Lokale Automatisierungen aktivieren', - 'a_local_control_desc': - 'Nutzen Sie lokale Szenen/Zeitpläne statt Cloud-Automatisierungen, sofern verfügbar.', - 'a_usage_tracking_title': 'Nutzungs-Tracking deaktivieren', - 'a_usage_tracking_desc': - 'Schalten Sie in den App-Einstellungen Analyse-, Telemetrie- und Nutzungsdatenerfassung aus.', - 'a_offline_fallback_title': 'Offline-Notbetrieb sicherstellen', - 'a_offline_fallback_desc': - 'Prüfen Sie lokale Schalter/Taster und richten Sie Fallback-Bedienung ein, damit das Gerät auch ohne Internet nutzbar bleibt.', - 'a_offline_unlock_title': 'Offline-Zugang absichern', - 'a_offline_unlock_desc': - 'Richten Sie einen physischen Schlüssel oder einen Notfall-Code ein und testen Sie den Zugriff bei Ausfall der Internetverbindung.', - 'a_access_logging_title': 'Zugriffsprotokoll aktivieren', - 'a_access_logging_desc': - 'Aktivieren Sie Protokollierung und Benachrichtigungen für Schlossöffnungen, damit unbefugte Zugriffe auffallen.', - 'a_two_factor_title': 'Zwei-Faktor-Authentifizierung aktivieren', - 'a_two_factor_desc': - 'BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.', - 'a_map_privacy_title': 'Cloud-Grundrissspeicherung deaktivieren', - 'a_map_privacy_desc': - 'Stellen Sie die Speicherung auf lokal um und deaktivieren Sie Cloud-Backups von Grundrissen, falls diese Option verfügbar ist.', - 'a_cloud_required_title': 'Cloud-Abhängigkeit reduzieren', - 'a_cloud_required_desc': - 'Aktivieren Sie lokale Navigation oder Offline-Modus, falls verfügbar. Wenn nicht verfügbar, bewerten Sie einen Wechsel zu einem datenschutzfreundlicheren Modell.', - 'a_vision_data_title': 'Kameradaten nur lokal verarbeiten', - 'a_vision_data_desc': - 'Deaktivieren Sie Upload/Speicherung von Kamerabildern und nutzen Sie, wenn möglich, ausschließlich lokale Navigationsverarbeitung.', - 'a_parental_control_title': 'Elternkontrolle einrichten', - 'a_parental_control_desc': - 'Aktivieren Sie Elternkontrolle mit PIN und beschränken Sie Kontakte, Funktionen und Freigaben auf das Notwendige.', - 'a_child_data_limits_title': 'Datenerfassung minimieren', - 'a_child_data_limits_desc': - 'Deaktivieren Sie optionale Profildaten und erfassen Sie nur die für die Kernfunktion erforderlichen Kinderdaten.', - 'a_recording_disable_title': 'Audio/Video-Aufnahmen deaktivieren', - 'a_recording_disable_desc': - 'Schalten Sie Aufnahmefunktionen standardmäßig aus und aktivieren Sie sie nur bei konkretem Bedarf kurzzeitig.', - 'a_health_sharing_title': 'Gesundheitsdaten-Freigaben einschränken', - 'a_health_sharing_desc': - 'Entziehen Sie unnötigen Drittanbieter-Apps den Zugriff auf Gesundheitsdaten in App- und Kontoeinstellungen.', - 'a_location_tracking_title': 'Standortfreigabe reduzieren', - 'a_location_tracking_desc': - 'Deaktivieren Sie Standortverfolgung außerhalb aktiver Nutzung oder erlauben Sie sie nur beim Verwenden der App.', - 'a_expert_data_retention_duration_title': 'Speicherfristen festlegen', - 'a_expert_data_retention_duration_desc': - 'Setzen Sie klare kurze Aufbewahrungsfristen in den Einstellungen und löschen Sie Altbestände regelmäßig.', - 'a_expert_access_control_granular_title': - 'Granulare Rollen und Konten einführen', - 'a_expert_access_control_granular_desc': - 'Nutzen Sie getrennte Konten statt Shared-Logins und vergeben Sie nur die minimal nötigen Rechte.', - 'a_expert_third_party_sharing_limited_title': 'Drittweitergabe begrenzen', - 'a_expert_third_party_sharing_limited_desc': - 'Deaktivieren Sie Partner-, Werbe- und Analyseweitergaben in Datenschutz- und Kontoeinstellungen.', - 'a_expert_data_sale_disabled_title': 'Datenverkauf widersprechen', - 'a_expert_data_sale_disabled_desc': - 'Aktivieren Sie vorhandene "Do not sell"-Optionen bzw. widersprechen Sie der Datenweitergabe für Vermarktung.', - 'a_expert_update_support_window_title': 'Update-Zusage verifizieren', - 'a_expert_update_support_window_desc': - 'Prüfen Sie die offizielle Update-Policy des Herstellers und planen Sie bei fehlender Zusage einen Gerätewechsel ein.', - 'a_expert_vulnerability_process_title': - 'Hersteller-Sicherheitsprozess prüfen', - 'a_expert_vulnerability_process_desc': - 'Bevorzugen Sie Hersteller mit klarer Security-Kontaktstelle und Responsible-Disclosure-Prozess.', - 'a_expert_offline_functionality_title': - 'Offline-Funktionalität priorisieren', - 'a_expert_offline_functionality_desc': - 'Aktivieren Sie lokale Betriebsmodi und minimieren Sie Cloud-Pflichtfunktionen, sofern das Gerät dies erlaubt.', - 'a_expert_bystander_transparency_title': - 'Transparenzhinweise für Umfeld ergänzen', - 'a_expert_bystander_transparency_desc': - 'Sorgen Sie für sichtbare Hinweise, Aufnahmeanzeigen und klare Information für betroffene Personen im Umfeld.', - 'a_expert_child_data_protection_title': 'Kinderdatenschutz verschärfen', - 'a_expert_child_data_protection_desc': - 'Aktivieren Sie kindgerechte Profile, minimieren Sie Datenerhebung und deaktivieren Sie Profilbildung/Weitergabe.', - 'a_expert_access_revocation_title': - 'Schnellen Zugriffswiderruf einrichten', - 'a_expert_access_revocation_desc': - 'Stellen Sie sicher, dass digitale Schlüssel einzeln und sofort widerrufen werden können, z. B. bei Geräteverlust.', - 'a_expert_sensitive_inference_controls_title': - 'Inferenzfunktionen einschränken', - 'a_expert_sensitive_inference_controls_desc': - 'Deaktivieren Sie Funktionen, die sensible Gesundheits- oder Verhaltensprofile ableiten, sofern diese nicht zwingend benötigt werden.', - 'a_dont_know_title': 'Geräteeinstellungen besser kennenlernen', - 'a_dont_know_desc': - 'Mindestens eine Frage wurde mit "Weiß ich nicht" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.', - // ── Scoring factor short labels ────────────────────────────────────────── - 'sl_base_risk': 'Grundrisiko des Gerätetyps', - 'sl_child_room_bonus': 'Erhöhte Sensibilität: Kinderzimmer', - 'sl_password': 'Standard-Passwort nicht geändert', - 'sl_updates': 'Automatische Updates nicht aktiv', - 'sl_network': 'Kein separates IoT-WLAN eingerichtet', - 'sl_informed': 'Haushaltsmitglieder nicht informiert', - 'sl_permissions': 'App-Berechtigungen nicht reduziert', - 'sl_camera_consent': 'Kein Einverständnis für Kamerabereich', - 'sl_mic_active': 'Mikrofon nicht bei Nichtnutzung deaktiviert', - 'sl_sensor_frequency': 'Messintervall nicht reduziert', - 'sl_sensor_data_deletion': 'Alte Messwerte nicht gelöscht', - 'sl_sensor_granularity': 'Daten zu fein granular gespeichert', - 'sl_sensor_local': 'Daten in die Cloud übertragen', - 'sl_voice_history': 'Sprachaufnahmen nicht löschbar', - 'sl_voice_local': 'Keine lokale Sprachverarbeitung', - 'sl_skills_permissions': 'Skills nicht regelmäßig geprüft', - 'sl_video_encryption': 'Videoübertragung nicht verschlüsselt', - 'sl_video_storage': 'Aufnahmen nur in Anbieter-Cloud', - 'sl_sharing_restrictions': 'Zugriff auf Aufnahmen nicht kontrolliert', - 'sl_motion_detection': 'Bewegungserkennung immer aktiv', - 'sl_account_required': 'Pflichtkonto beim Hersteller nötig', - 'sl_tracking_disabled': 'Werbe-Tracking nicht deaktiviert', - 'sl_local_mode': 'Kein Offline-Betrieb möglich', - 'sl_data_collection': 'Temperaturverlauf an Hersteller übertragen', - 'sl_offline_control': 'Kein Offline-Betrieb möglich', - 'sl_family_access': 'Zugriff nicht einschränkbar', - 'sl_local_control': 'Automatisierungen nur mit Internet', - 'sl_usage_tracking': 'Schaltmuster vom Hersteller erfasst', - 'sl_offline_fallback': 'Gerät offline nicht nutzbar', - 'sl_offline_unlock': 'Kein Offline-Öffnen möglich', - 'sl_access_logging': 'Kein Zugriffsprotokoll verfügbar', - 'sl_two_factor': '2-Faktor-Authentifizierung fehlt', - 'sl_map_privacy': 'Grundriss an Hersteller übertragen', - 'sl_cloud_required': 'Navigation nur mit Cloud möglich', - 'sl_vision_data': 'Kamerabilder gespeichert oder übertragen', - 'sl_parental_control': 'Elternkontrolle nicht eingerichtet', - 'sl_child_data_limits': 'Datenmenge nicht eingeschränkt', - 'sl_recording_disable': 'Aufnahmen nicht deaktivierbar', - 'sl_health_sharing': 'Gesundheitsdaten mit Dritten geteilt', - 'sl_location_tracking': 'Standortverfolgung aktiv', - 'sl_expert_data_retention_duration': 'Aufbewahrungsdauer unklar/zu lang', - 'sl_expert_access_control_granular': 'Granulare Zugriffskontrolle fehlt', - 'sl_expert_third_party_sharing_limited': - 'Weitergabe an Dritte nicht begrenzt', - 'sl_expert_data_sale_disabled': 'Datenverkauf nicht ausgeschlossen', - 'sl_expert_update_support_window': - 'Garantierter Update-Zeitraum unbekannt', - 'sl_expert_vulnerability_process': - 'Schwachstellenprozess nicht dokumentiert', - 'sl_expert_offline_functionality': - 'Sinnvoller Betrieb ohne Internet nicht möglich', - 'sl_expert_bystander_transparency': - 'Transparenz für Betroffene im Umfeld fehlt', - 'sl_expert_child_data_protection': - 'Schutzmaßnahmen für Kinderdaten fehlen', - 'sl_expert_access_revocation': 'Einzelner Zugriffswiderruf nicht möglich', - 'sl_expert_sensitive_inference_controls': - 'Kontrollen gegen sensible Inferenz fehlen', - // ── Inherent risk hints ────────────────────────────────────────────────── - 'risk_hint_camera': - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.', - 'risk_hint_mic': - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.', - 'risk_hint_lock': - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.', - 'risk_hint_child_room': - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.', - 'risk_hint_generic': - 'Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.', - // ── General recommendations ────────────────────────────────────────────── - 'gen_rec_0': - 'Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).', - 'gen_rec_1': - 'Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.', - 'gen_rec_2': - 'Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.', - 'gen_rec_3': - 'Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.', - 'gen_rec_4': - 'Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.', - 'gen_rec_5': - 'Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.', - 'gen_rec_6': - 'Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein.', - }, - 'en': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Simplications\nSmart Home\nPrivacy Check', - 'welcomeDescription': - 'Capture your smart devices room by room and receive a privacy assessment with concrete recommendations.', - 'stepSelectRooms': 'Select room', - 'stepCaptureDevices': 'Capture devices', - 'stepAnswerQuestions': 'Answer questions', - 'stepGetRisk': 'Get risk profile & recommendations', - 'start': 'Start', - 'resume': 'Resume', - 'about': 'About', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Select room', - 'roomQuestion': 'Which room would you like to check now?', - 'roomInstruction': - 'Tap a room, capture your devices there, then return here to choose the next room.', - 'results': 'Results', - 'alreadyEvaluated': 'Already evaluated', - 'notCompleted': 'Not completed', - 'addRoom': 'Add room', - 'deviceTitlePrefix': 'Devices', - 'roomCheck': 'Room check', - 'deviceQuestion': 'Which smart devices do you use in this room?', - 'deviceQuestionHint': 'Tap a device to answer its questions.', - 'noKnownDevices': - 'No known devices for this room. You can add your own device.', - 'addDevice': 'Add\ndevice', - 'noDevice': 'No device', - 'nextRoom': 'Next room', - 'deleteDeviceTitle': 'Delete device?', - 'deleteDeviceBody': - 'This custom device will be deleted. All linked instances will also be removed.', - 'delete': 'Delete', - 'cancel': 'Cancel', - 'confirm': 'Confirm', - 'noDeviceDialogTitle': 'No devices in this room?', - 'noDeviceDialogBody': - 'This room will be completed without devices and will not affect scoring.', - 'noDeviceDialogBodyWithExisting': - 'Existing device selections for this room will be discarded. This room will be completed without devices and will not affect scoring.', - 'questionnaireTitle': 'Questions', - 'connectedDevice': 'Connected device', - 'done': 'Done', - 'yes': 'Yes', - 'no': 'No', - 'dontKnow': "I don't know", - 'notApplicableForDevice': 'This question does not apply to my device', - 'languageDialogTitle': 'Choose language', - 'currentLanguage': 'Current language', - 'aboutScreenTitle': 'About the app', - 'faqScreenTitle': 'Frequently Asked Questions', - 'aboutSubtitle': 'Research project on smart home privacy', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Chemnitz University of Technology', - 'aboutPartnerHsAnhalt': 'Anhalt University of Applied Sciences', - 'aboutPartnerVzSachsen': 'Consumer Center Saxony', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'faqQuestionWhatIs': 'What is Simplications?', - 'faqAnswerWhatIs': - 'Simplications is a research project on smart-home privacy. This app is one part of the project and guides you room by room through your devices with practical recommendations based on your answers.', - 'faqQuestionHowWorks': 'How does the check work?', - 'faqAnswerHowWorks': - 'You select a room, add your smart devices, answer device-specific questions, and receive a risk profile with prioritized actions.', - 'faqQuestionNoPolicy': 'Why is there no data protection policy?', - 'faqAnswerNoPolicy': 'Because we do not collect your data.', - 'faqQuestionDataStored': 'Where is my data stored?', - 'faqAnswerDataStored': - 'Your assessment data is stored locally on your device. You can delete all stored data at any time in the About screen.', - 'faqQuestionNoDevice': 'What if my device is not listed?', - 'faqAnswerNoDevice': - 'You can add custom devices and still complete the check. The recommendations then rely on your provided setup and answers.', - 'faqQuestionRiskMeaning': 'What do low, medium, and high risk mean?', - 'faqAnswerRiskMeaning': - 'They indicate how strongly your current configuration may expose privacy-related risks. They are guidance levels, not legal or technical certification.', - 'faqQuestionLegalAdvice': 'Is this legal advice?', - 'faqAnswerLegalAdvice': - 'No. Simplications provides practical orientation and recommendations, but does not replace legal or professional security consultation.', - 'faqQuestionCanShare': 'Can I share my results?', - 'faqAnswerCanShare': - 'Yes. You can export and share your summary as text or PDF directly from the results screen.', - 'websiteOpenFailed': 'Could not open website.', - 'deleteAllDataTitle': 'Delete all data?', - 'deleteAllDataBody': - 'All captured rooms, devices, and answers will be permanently deleted. This action cannot be undone.', - 'deleteAllDataButton': 'Delete data', - 'allDataDeleted': 'All saved data has been deleted.', - 'projectPartners': 'Project partners', - 'coordinationFunding': 'Coordination & Funding', - 'coordination': 'Coordination', - 'platformPrivacy': 'Platform Privacy', - 'fundingAgency': 'Funding body', - 'fundingAgencyValue': - 'German Federal Ministry of Research, Technology and Space\nGrant 16KIS1868K', - 'website': 'Website', - 'dangerZone': 'Danger zone', - 'dangerZoneWarning': - 'Warning: This action permanently removes all saved app data.', - 'expertModeTitle': 'Expert mode', - 'expertModeToggleLabel': 'Enable detailed expert mode', - 'expertModeToggleHint': - 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).', - 'expertModeSourcesHint': - 'Methodologically inspired by the following research projects:', - 'expertModeSourceCmuLabel': 'CMU IoT Security & Privacy Label (CISPL)', - 'expertModeSourceCmuUrl': 'https://iotsecurityprivacy.org/labels', - 'expertModeSourceUnboxingLabel': - 'Unboxing.IoT.Privacy (community platform)', - 'expertModeSourceUnboxingUrl': 'https://iot-privacy.info/project/', - 'expertModeQuestionnaireHint': - 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.', - 'roomDeleteTitle': 'Delete room?', - 'roomDeleteBody': - 'This custom room will be deleted. All linked devices will also be removed.', - 'add': 'Add', - 'addRoomDialogTitle': 'Add new room', - 'roomName': 'Room name', - 'roomNameHint': 'e.g. Living room, Garage', - 'chooseIcon': 'Choose icon:', - 'addDeviceDialogTitle': 'Add new device', - 'deviceName': 'Device name', - 'deviceNameHint': 'e.g. My smart speaker', - 'baseRiskLabel': 'Base risk score (0-100)', - 'baseRiskHint': 'e.g. 30 (low) to 60 (high)', - 'hasCamera': 'Has camera?', - 'hasMicrophone': 'Has microphone?', - 'camera': 'Camera', - 'microphone': 'Microphone', - 'summaryTitle': 'Your result', - 'shareResult': 'Share result', - 'shareAsText': 'Share as text', - 'shareAsPdf': 'Share as PDF', - 'restart': 'Restart', - 'noDevicesCaptured': 'No devices captured.', - 'noDevicesHint': 'Restart and add devices to receive an assessment.', - 'highRisk': 'High risk', - 'mediumRisk': 'Medium risk', - 'lowRisk': 'Low risk', - 'exportFailed': 'Export failed', - 'summaryShareSubject': 'Simplications result', - 'summarySharePdfText': 'Simplications report as PDF', - 'overview': 'Overview', - 'evaluatedDevices': 'Evaluated devices', - 'skippedDevicesHint': - '{count} devices skipped because the questionnaire was not completed.', - 'overallRisk': 'Overall risk', - 'generalRecommendations': 'General recommendations', - 'generalRecommendationsHint': - 'These measures apply to your whole smart home regardless of individual devices.', - 'fullCatalog': 'Full action catalog', - 'catalogButton': 'Open full action catalog', - 'risk': 'Risk', - 'note': 'Note', - 'recommendations': 'Recommendations', - 'urgent': 'Urgent', - 'recommended': 'Recommended', - 'optional': 'Optional', - 'social': 'Social', - 'technical': 'Technical', - 'security': 'Security', - 'smartHomePrivacyHeader': 'Your smart home privacy', - 'devicesRated': 'rated devices', - 'howRiskCalculated': 'How is risk calculated?', - 'totalScore': 'Total', - 'catalogSnackBarPrefix': 'Catalog', - 'reportExportedAt': 'Exported at', - 'noActionLow': 'Everything is fine - no actions required.', - 'noActionMedium': - 'No concrete actions can currently be derived from your answers, but a medium residual risk remains.', - 'noActionHigh': - 'No concrete actions can currently be derived from your answers, but a high residual risk remains.', - 'overallLow': - 'Well done! Your devices are mostly configured securely. Still review the general recommendations.', - 'overallMedium': - 'There is room for improvement. Review the recommendations for each device.', - 'overallHigh': - 'Several devices have significant privacy/data-protection risks. Please implement high-priority measures promptly.', - 'dontKnowHint': - ' {count} answer{suffix} were marked as "I don\'t know" - take time to understand your device settings better.', - // ── Rooms ─────────────────────────────────────────────────────────────── - 'room_living': 'Living room', - 'room_kitchen': 'Kitchen', - 'room_bedroom': 'Bedroom', - 'room_child_bedroom': "Child's bedroom", - 'room_bathroom': 'Bathroom', - 'room_office': 'Office', - 'room_hallway': 'Hallway / Entrance', - 'room_garden': 'Garden / Outdoor area', - 'room_basement': 'Basement / Pantry', - 'room_whole_home': 'Entire home', - // ── Device names ───────────────────────────────────────────────────────── - 'device_simple_sensor': 'Basic sensor (e.g., motion or door sensor)', - 'device_humidity_sensor': 'Humidity sensor', - 'device_temperature_sensor': 'Temperature sensor', - 'device_light_sensor': 'Light sensor', - 'device_smart_speaker': 'Smart speaker / voice assistant', - 'device_smart_display': 'Smart display (e.g., Nest Hub)', - 'device_smart_tv': 'Smart TV', - 'device_indoor_camera': 'Smart indoor camera', - 'device_outdoor_camera': 'Smart outdoor camera', - 'device_doorbell_camera': 'Smart doorbell with camera', - 'device_baby_monitor': 'Baby monitor / baby camera', - 'device_robot_vacuum': 'Robot vacuum', - 'device_smart_fridge': 'Smart fridge', - 'device_smart_oven': 'Smart oven / stove', - 'device_smart_coffee': 'Smart coffee machine', - 'device_smart_washing': 'Smart washer / dryer', - 'device_smart_thermostat': 'Smart thermostat / heating control', - 'device_smart_plug': 'Smart plug', - 'device_smart_light': 'Smart lighting', - 'device_smart_lock': 'Smart door lock', - 'device_smart_blind': 'Smart blind / shutter', - 'device_fitness_tracker': 'Fitness tracker / smartwatch', - 'device_smart_toy': 'Smart toy', - 'device_smart_router': 'Smart router / mesh system', - 'device_smart_hub': 'Smart home hub (e.g., Homey, Home Assistant)', - 'device_smart_meter': 'Intelligent electricity meter / smart meter', - 'device_smart_irrigation': 'Smart irrigation system', - 'device_smart_scale': 'Smart scale', - 'device_smart_printer': 'Smart printer', - // ── Question texts & hints ─────────────────────────────────────────────── - 'q_password_text': - 'Have you changed the default password of the device or its linked account?', - 'q_password_hint': - 'Default passwords are often publicly known and easy to crack.', - 'q_updates_text': - 'Are automatic security updates enabled for the device?', - 'q_updates_hint': - 'Updates close known security vulnerabilities promptly.', - 'q_network_text': - 'Is the device connected to a separate smart home or IoT Wi-Fi network?', - 'q_network_hint': - 'A dedicated network for smart devices protects your main home network.', - 'q_informed_text': - 'Are all people in the household informed about this device and its function?', - 'q_informed_hint': - 'All household members should know what data the device captures.', - 'q_permissions_text': - 'Have you disabled unnecessary app permissions (e.g., location, contacts)?', - 'q_permissions_hint': - 'Only permissions that are truly needed should be enabled.', - 'q_mic_active_text': - 'Do you deactivate the microphone when you are not actively using it?', - 'q_mic_active_hint': - 'Smart speakers and devices with microphones can be activated unintentionally.', - 'q_camera_consent_text': - 'Does the camera only record areas for which everyone affected has given their consent?', - 'q_camera_consent_hint': - 'Cameras in communal or private areas require the consent of all residents.', - 'q_sensor_frequency_text': - 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?', - 'q_sensor_frequency_hint': - 'A lower measurement frequency produces less data and limits inferences about your behavior.', - 'q_sensor_data_deletion_text': - 'Are older measurement values deleted automatically or on request?', - 'q_sensor_data_deletion_hint': - 'Old historical data should not be stored permanently. Check retention settings.', - 'q_sensor_granularity_text': - 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?', - 'q_sensor_granularity_hint': - 'Less granular views help prevent inferences about precise presence or behavior patterns.', - 'q_sensor_local_text': - 'Is measurement data processed and stored locally without being transferred to the cloud?', - 'q_sensor_local_hint': - 'Local processing prevents the vendor from accessing your measurement data.', - 'q_voice_history_text': - 'Can you delete voice recordings from device history or disable this feature?', - 'q_voice_history_hint': - 'BSI recommendation: Minimize recording retention or delete recordings regularly.', - 'q_voice_local_text': - 'Is voice processing performed partly on the device locally?', - 'q_voice_local_hint': - 'Local processing reduces the amount of data sent to the cloud.', - 'q_skills_permissions_text': - 'Do you regularly review which skills have access to your account?', - 'q_skills_permissions_hint': - 'Third-party skills can access sensitive data. Enable only necessary skills.', - 'q_video_encryption_text': - 'Is video recording and transmission encrypted end-to-end?', - 'q_video_encryption_hint': - 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.', - 'q_video_storage_text': - 'Are recordings stored locally (not only in the vendor cloud)?', - 'q_video_storage_hint': - 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.', - 'q_sharing_restrictions_text': - 'Can you control who can access live view and recordings?', - 'q_sharing_restrictions_hint': - 'You should be able to precisely control access to video recordings.', - 'q_motion_detection_text': - 'Can you disable or schedule motion detection when you are at home?', - 'q_motion_detection_hint': - 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.', - 'q_account_required_text': - 'Can you use the device without a mandatory online account?', - 'q_account_required_hint': - 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.', - 'q_tracking_disabled_text': - 'Can you completely disable advertising and tracking features?', - 'q_tracking_disabled_hint': - 'Smart TVs often collect viewing habit data. Look for privacy settings.', - 'q_local_mode_text': - 'Can you use the device via HDMI or local sources without internet?', - 'q_local_mode_hint': - 'Offline use protects usage data from being sent to the vendor.', - 'q_data_collection_text': - 'Do temperature history and schedules stay on-device (not sent to the vendor)?', - 'q_data_collection_hint': - 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.', - 'q_offline_control_text': - 'Can you operate the thermostat offline (without internet)?', - 'q_offline_control_hint': - 'Offline operation or local automation protects data from cloud access.', - 'q_family_access_text': - 'Can you control who may adjust heating (e.g., restrict guests)?', - 'q_family_access_hint': - 'Household members should have control without visitors changing everything.', - 'q_local_control_text': 'Can automations run locally without internet?', - 'q_local_control_hint': - 'Local scenes and schedules protect your privacy better.', - 'q_usage_tracking_text': - 'Have you disabled or limited vendor collection of switching patterns and usage times?', - 'q_usage_tracking_hint': - 'Usage patterns can reveal presence and habits. Check app privacy settings.', - 'q_offline_fallback_text': - 'Do devices still work if internet or app connection fails?', - 'q_offline_fallback_hint': - 'Reliable local operation is important for daily use and privacy.', - 'q_offline_unlock_text': - 'Can you unlock the lock offline (e.g., with code or key)?', - 'q_offline_unlock_hint': - 'Backup options prevent lockout during internet or power outages.', - 'q_access_logging_text': 'Can you track who opened the lock and when?', - 'q_access_logging_hint': - 'An access log helps you detect suspicious activity.', - 'q_two_factor_text': - 'Is two-factor authentication (2FA) available for the lock account?', - 'q_two_factor_hint': - 'BSI recommendation: 2FA protects your account from unauthorized remote access.', - 'q_map_privacy_text': - 'Are created floor plans stored exclusively on the device locally?', - 'q_map_privacy_hint': - 'Home floor plans are sensitive information and should not be sent to the vendor.', - 'q_cloud_required_text': - 'Does floor-plan navigation work without cloud connection?', - 'q_cloud_required_hint': - 'Devices with local navigation are more privacy-friendly because no room data is uploaded.', - 'q_vision_data_text': - 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?', - 'q_vision_data_hint': - 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.', - 'q_parental_control_text': - 'Are there parental control features to manage the toy?', - 'q_parental_control_hint': - 'Parental controls should allow restricting contacts and features.', - 'q_child_data_limits_text': - 'Can you limit which personal data the toy collects?', - 'q_child_data_limits_hint': - 'Child-focused devices should collect and store minimal data.', - 'q_recording_disable_text': - 'Can you disable audio and video recording on the device?', - 'q_recording_disable_hint': - 'BSI recommendation: Recordings of children should only be possible with explicit control.', - 'q_health_sharing_text': - 'Can you control which third parties can access your health data?', - 'q_health_sharing_hint': - 'Health data is sensitive. Only authorized apps should have access.', - 'q_location_tracking_text': - 'Can you disable location tracking when not needed?', - 'q_location_tracking_hint': - 'GPS tracking uses battery and can reveal movement patterns.', - 'q_expert_data_retention_duration_text': - 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?', - 'q_expert_data_retention_duration_hint': - 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.', - 'q_expert_access_control_granular_text': - 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?', - 'q_expert_access_control_granular_hint': - 'Granular access control reduces the risk of unauthorized access and misuse.', - 'q_expert_third_party_sharing_limited_text': - 'Is third-party sharing disabled or clearly limited to necessary services?', - 'q_expert_third_party_sharing_limited_hint': - 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.', - 'q_expert_data_sale_disabled_text': - 'Is the sale of your data excluded (or actively disabled, where possible)?', - 'q_expert_data_sale_disabled_hint': - 'An explicit "no data sale" option is a strong privacy signal.', - 'q_expert_update_support_window_text': - 'Is it known how long the vendor guarantees security updates?', - 'q_expert_update_support_window_hint': - 'A transparent update commitment reduces long-term security and privacy risks.', - 'q_expert_vulnerability_process_text': - 'Is there a documented process for reporting and fixing vulnerabilities?', - 'q_expert_vulnerability_process_hint': - 'Prefer vendors that provide responsible disclosure policies or clear security contact information.', - 'q_expert_offline_functionality_text': - 'Does the device remain meaningfully usable with limited internet connectivity?', - 'q_expert_offline_functionality_hint': - 'More offline functionality often means less continuous data transfer to the cloud.', - 'q_expert_bystander_transparency_text': - 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?', - 'q_expert_bystander_transparency_hint': - 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.', - 'q_expert_child_data_protection_text': - 'Are child-data protections active (minimization, no profiling, restrictive sharing)?', - 'q_expert_child_data_protection_hint': - 'Devices in child-related contexts require especially strict privacy safeguards.', - 'q_expert_access_revocation_text': - 'Can digital keys/access rights be revoked quickly and individually?', - 'q_expert_access_revocation_hint': - 'Fast revocation is crucial when devices are shared or users change.', - 'q_expert_sensitive_inference_controls_text': - 'Are features that infer sensitive health or behavior profiles restricted or disableable?', - 'q_expert_sensitive_inference_controls_hint': - 'Inference controls reduce risks from secondary use of sensitive data.', - // ── Action titles & descriptions ───────────────────────────────────────── - 'a_password_title': 'Change default password', - 'a_password_desc': - 'Replace the default password with a strong, unique password. Use a password manager.', - 'a_updates_title': 'Enable automatic updates', - 'a_updates_desc': - 'Enable automatic security updates in device or app settings.', - 'a_network_title': 'Set up separate IoT Wi-Fi', - 'a_network_desc': - "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", - 'a_informed_title': 'Inform household members', - 'a_informed_desc': - 'Inform all residents about what data the device collects, who has access, and how it can be disabled.', - 'a_permissions_title': 'Restrict app permissions', - 'a_permissions_desc': - 'Check companion-app permissions in phone settings and disable unnecessary ones.', - 'a_camera_consent_title': 'Align camera positioning with residents', - 'a_camera_consent_desc': - 'Obtain consent from everyone affected. The camera must not record areas without consent.', - 'a_mic_active_title': 'Disable microphone when not in use', - 'a_mic_active_desc': - 'Use the physical mute switch or disable the microphone in settings.', - 'a_sensor_frequency_title': 'Reduce measurement interval', - 'a_sensor_frequency_desc': - 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.', - 'a_sensor_data_deletion_title': 'Delete old measurement values', - 'a_sensor_data_deletion_desc': - 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.', - 'a_sensor_granularity_title': 'Show less detailed data', - 'a_sensor_granularity_desc': - 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.', - 'a_sensor_local_title': 'Prefer local processing', - 'a_sensor_local_desc': - 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.', - 'a_voice_history_title': 'Delete voice recordings', - 'a_voice_history_desc': - 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.', - 'a_voice_local_title': 'Enable local voice processing', - 'a_voice_local_desc': - 'Enable local voice processing if available. If not, minimize cloud storage of voice data.', - 'a_skills_permissions_title': 'Review skills/integrations', - 'a_skills_permissions_desc': - 'Review which third-party skills have access. Disable unnecessary skills.', - 'a_video_encryption_title': 'Enable end-to-end video encryption', - 'a_video_encryption_desc': - 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.', - 'a_video_storage_title': 'Store recordings locally', - 'a_video_storage_desc': - 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.', - 'a_sharing_restrictions_title': 'Restrict camera access', - 'a_sharing_restrictions_desc': - 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.', - 'a_motion_detection_title': 'Disable motion detection when at home', - 'a_motion_detection_desc': - 'Disable motion detection when people are home, or set a schedule that activates it only during absence.', - 'a_account_required_title': 'Minimize privacy impact of required account', - 'a_account_required_desc': - 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.', - 'a_tracking_disabled_title': 'Disable tracking and advertising', - 'a_tracking_disabled_desc': - 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.', - 'a_local_mode_title': 'Prefer offline use', - 'a_local_mode_desc': - 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.', - 'a_data_collection_title': 'Disable history upload', - 'a_data_collection_desc': - 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.', - 'a_offline_control_title': 'Set up local control', - 'a_offline_control_desc': - 'Configure local schedules and control without cloud dependency if the device supports it.', - 'a_family_access_title': 'Separate access rights for household members', - 'a_family_access_desc': - 'Set up separate roles/accounts so that only authorized people can adjust the heating.', - 'a_local_control_title': 'Enable local automations', - 'a_local_control_desc': - 'Use local scenes/schedules instead of cloud automations where available.', - 'a_usage_tracking_title': 'Disable usage tracking', - 'a_usage_tracking_desc': - 'Disable analytics, telemetry, and usage data collection in app settings.', - 'a_offline_fallback_title': 'Ensure offline fallback', - 'a_offline_fallback_desc': - 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.', - 'a_offline_unlock_title': 'Secure offline access', - 'a_offline_unlock_desc': - 'Set up a physical key or emergency code and test access when internet is unavailable.', - 'a_access_logging_title': 'Enable access log', - 'a_access_logging_desc': - 'Enable logging and notifications for lock openings so unauthorized access can be detected.', - 'a_two_factor_title': 'Enable two-factor authentication', - 'a_two_factor_desc': - 'BSI recommendation: Enable 2FA for your lock account to protect remote access.', - 'a_map_privacy_title': 'Disable cloud floor-plan storage', - 'a_map_privacy_desc': - 'Switch storage to local and disable cloud backups of floor plans if the option is available.', - 'a_cloud_required_title': 'Reduce cloud dependency', - 'a_cloud_required_desc': - 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.', - 'a_vision_data_title': 'Process camera data locally only', - 'a_vision_data_desc': - 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.', - 'a_parental_control_title': 'Set up parental controls', - 'a_parental_control_desc': - 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.', - 'a_child_data_limits_title': 'Minimize data collection', - 'a_child_data_limits_desc': - 'Disable optional profile data and collect only the child data required for core functionality.', - 'a_recording_disable_title': 'Disable audio/video recordings', - 'a_recording_disable_desc': - 'Disable recording features by default and enable them only briefly when specifically needed.', - 'a_health_sharing_title': 'Restrict health data sharing', - 'a_health_sharing_desc': - 'Revoke health data access from unnecessary third-party apps in app and account settings.', - 'a_location_tracking_title': 'Reduce location sharing', - 'a_location_tracking_desc': - 'Disable location tracking outside active use or allow it only while the app is in use.', - 'a_expert_data_retention_duration_title': 'Define retention periods', - 'a_expert_data_retention_duration_desc': - 'Set short, clear retention periods in settings and regularly delete old data.', - 'a_expert_access_control_granular_title': - 'Introduce granular roles and accounts', - 'a_expert_access_control_granular_desc': - 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.', - 'a_expert_third_party_sharing_limited_title': 'Limit third-party sharing', - 'a_expert_third_party_sharing_limited_desc': - 'Disable partner, advertising, and analytics sharing in privacy and account settings.', - 'a_expert_data_sale_disabled_title': 'Opt out of data sale', - 'a_expert_data_sale_disabled_desc': - 'Enable available "Do not sell" options or object to data sharing for commercial purposes.', - 'a_expert_update_support_window_title': 'Verify update commitment', - 'a_expert_update_support_window_desc': - "Review the vendor's official update policy and plan a device replacement if no commitment is given.", - 'a_expert_vulnerability_process_title': 'Review vendor security process', - 'a_expert_vulnerability_process_desc': - 'Prefer vendors with a clear security contact and responsible disclosure process.', - 'a_expert_offline_functionality_title': - 'Prioritize offline functionality', - 'a_expert_offline_functionality_desc': - 'Enable local operating modes and minimize mandatory cloud features where the device allows.', - 'a_expert_bystander_transparency_title': - 'Add transparency notices for bystanders', - 'a_expert_bystander_transparency_desc': - 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.', - 'a_expert_child_data_protection_title': - 'Strengthen child data protection', - 'a_expert_child_data_protection_desc': - 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.', - 'a_expert_access_revocation_title': 'Set up rapid access revocation', - 'a_expert_access_revocation_desc': - 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.', - 'a_expert_sensitive_inference_controls_title': - 'Restrict inference features', - 'a_expert_sensitive_inference_controls_desc': - 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.', - 'a_dont_know_title': 'Get to know device settings better', - 'a_dont_know_desc': - "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", - // ── Scoring factor short labels ────────────────────────────────────────── - 'sl_base_risk': 'Baseline risk of device type', - 'sl_child_room_bonus': "Increased sensitivity: child's bedroom", - 'sl_password': 'Default password not changed', - 'sl_updates': 'Automatic updates not enabled', - 'sl_network': 'No separate IoT Wi-Fi configured', - 'sl_informed': 'Household members not informed', - 'sl_permissions': 'App permissions not reduced', - 'sl_camera_consent': 'No consent for camera-covered area', - 'sl_mic_active': 'Microphone not disabled when unused', - 'sl_sensor_frequency': 'Measurement interval not reduced', - 'sl_sensor_data_deletion': 'Old measurement values not deleted', - 'sl_sensor_granularity': 'Data stored with too much granularity', - 'sl_sensor_local': 'Data transferred to cloud', - 'sl_voice_history': 'Voice recordings not deletable', - 'sl_voice_local': 'No local voice processing', - 'sl_skills_permissions': 'Skills not reviewed regularly', - 'sl_video_encryption': 'Video transmission not encrypted', - 'sl_video_storage': 'Recordings only in vendor cloud', - 'sl_sharing_restrictions': 'Recording access not controlled', - 'sl_motion_detection': 'Motion detection always active', - 'sl_account_required': 'Mandatory vendor account required', - 'sl_tracking_disabled': 'Ad tracking not disabled', - 'sl_local_mode': 'No offline operation possible', - 'sl_data_collection': 'Temperature history sent to vendor', - 'sl_offline_control': 'No offline operation possible', - 'sl_family_access': 'Access cannot be restricted', - 'sl_local_control': 'Automations require internet connection', - 'sl_usage_tracking': 'Switching patterns collected by vendor', - 'sl_offline_fallback': 'Device unusable offline', - 'sl_offline_unlock': 'No offline unlock possible', - 'sl_access_logging': 'No access log available', - 'sl_two_factor': 'Two-factor authentication missing', - 'sl_map_privacy': 'Floor plan transmitted to vendor', - 'sl_cloud_required': 'Navigation only possible via cloud', - 'sl_vision_data': 'Camera images stored or transmitted', - 'sl_parental_control': 'Parental controls not configured', - 'sl_child_data_limits': 'Data collection not limited', - 'sl_recording_disable': 'Recording cannot be disabled', - 'sl_health_sharing': 'Health data shared with third parties', - 'sl_location_tracking': 'Location tracking enabled', - 'sl_expert_data_retention_duration': - 'Retention duration unclear or too long', - 'sl_expert_access_control_granular': 'Granular access control missing', - 'sl_expert_third_party_sharing_limited': - 'Third-party sharing not limited', - 'sl_expert_data_sale_disabled': 'Data sale not excluded', - 'sl_expert_update_support_window': - 'Guaranteed update support window unknown', - 'sl_expert_vulnerability_process': 'Vulnerability process not documented', - 'sl_expert_offline_functionality': - 'Meaningful offline operation not possible', - 'sl_expert_bystander_transparency': - 'Transparency for nearby bystanders missing', - 'sl_expert_child_data_protection': - 'Child-data protection measures missing', - 'sl_expert_access_revocation': - 'Individual access revocation not possible', - 'sl_expert_sensitive_inference_controls': - 'Controls against sensitive inference missing', - // ── Inherent risk hints ────────────────────────────────────────────────── - 'risk_hint_camera': - 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.', - 'risk_hint_mic': - 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.', - 'risk_hint_lock': - 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.', - 'risk_hint_child_room': - "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", - 'risk_hint_generic': - 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.', - // ── General recommendations ────────────────────────────────────────────── - 'gen_rec_0': - "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", - 'gen_rec_1': - 'Use a password manager and assign a unique, strong password to each device.', - 'gen_rec_2': - 'Enable multi-factor authentication (MFA) for all vendor accounts.', - 'gen_rec_3': - 'Define who in your household is responsible for updates, backups, and accounts.', - 'gen_rec_4': - 'Regularly review (at least once per quarter) all access permissions and accounts.', - 'gen_rec_5': - 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.', - 'gen_rec_6': - 'Use a household consent check before buying new devices and involve all household members.', - }, - 'cs': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Simplications\nKontrola soukromí\nchytré domácnosti', - 'welcomeDescription': - 'Zaznamenejte svá chytrá zařízení místnost po místnosti a získejte hodnocení soukromí s konkrétními doporučeními.', - 'stepSelectRooms': 'Vyberte místnost', - 'stepCaptureDevices': 'Zaznamenejte zařízení', - 'stepAnswerQuestions': 'Odpovězte na otázky', - 'stepGetRisk': 'Získejte rizikový profil a doporučení', - 'start': 'Začít', - 'resume': 'Pokračovat', - 'about': 'O aplikaci', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Výběr místnosti', - 'roomQuestion': 'Kterou místnost chcete nyní zkontrolovat?', - 'roomInstruction': - 'Klepněte na místnost, zaznamenejte v ní zařízení a vraťte se sem, kde vyberete další místnost.', - 'results': 'Výsledky', - 'alreadyEvaluated': 'Již vyhodnoceno', - 'notCompleted': 'Nedokončeno', - 'addRoom': 'Přidat místnost', - 'deviceTitlePrefix': 'Zařízení', - 'roomCheck': 'Kontrola místnosti', - 'deviceQuestion': 'Která chytrá zařízení používáte v této místnosti?', - 'deviceQuestionHint': 'Klepněte na zařízení a odpovězte na otázky.', - 'noKnownDevices': - 'Pro tuto místnost nejsou známá žádná zařízení. Můžete přidat vlastní zařízení.', - 'addDevice': 'Přidat\nzařízení', - 'noDevice': 'Žádné zařízení', - 'nextRoom': 'Další místnost', - 'deleteDeviceTitle': 'Smazat zařízení?', - 'deleteDeviceBody': - 'Toto vlastní zařízení bude smazáno. Všechny navázané instance budou také odstraněny.', - 'delete': 'Smazat', - 'cancel': 'Zrušit', - 'confirm': 'Potvrdit', - 'noDeviceDialogTitle': 'V této místnosti nejsou zařízení?', - 'noDeviceDialogBody': - 'Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.', - 'noDeviceDialogBodyWithExisting': - 'Existující výběry zařízení pro tuto místnost budou zahozeny. Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.', - 'questionnaireTitle': 'Otázky', - 'connectedDevice': 'Připojené zařízení', - 'done': 'Hotovo', - 'yes': 'Ano', - 'no': 'Ne', - 'dontKnow': 'Nevím', - 'notApplicableForDevice': 'Tato otázka se na moje zařízení nevztahuje', - 'languageDialogTitle': 'Vyberte jazyk', - 'currentLanguage': 'Aktuální jazyk', - 'aboutScreenTitle': 'O aplikaci', - 'aboutSubtitle': - 'Výzkumný projekt zaměřený na soukromí chytré domácnosti', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Technická univerzita v Chemnitzu', - 'aboutPartnerHsAnhalt': 'Vysoká škola Anhalt', - 'aboutPartnerVzSachsen': 'Spotřebitelské centrum Sasko', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'websiteOpenFailed': 'Web se nepodařilo otevřít.', - 'deleteAllDataTitle': 'Smazat všechna data?', - 'deleteAllDataBody': - 'Všechny zaznamenané místnosti, zařízení a odpovědi budou trvale smazány. Tuto akci nelze vrátit zpět.', - 'deleteAllDataButton': 'Smazat data', - 'allDataDeleted': 'Všechna uložená data byla smazána.', - 'projectPartners': 'Projektoví partneři', - 'coordinationFunding': 'Koordinace a financování', - 'coordination': 'Koordinace', - 'platformPrivacy': 'Plattform Privatheit', - 'fundingAgency': 'Poskytovatel financování', - 'fundingAgencyValue': - 'Spolkové ministerstvo pro výzkum, technologie a vesmír\nFKZ 16KIS1868K', - 'website': 'Web', - 'dangerZone': 'Nebezpečná zóna', - 'dangerZoneWarning': - 'Pozor: Tato akce trvale odstraní všechna uložená data aplikace.', - 'faqScreenTitle': 'Často kladené otázky', - 'faqQuestionWhatIs': 'Co je Simplications?', - 'faqAnswerWhatIs': - 'Simplications je výzkumný projekt zaměřený na soukromí v chytré domácnosti. Tato aplikace je jednou z částí projektu a provede vás místnost po místnosti vašimi zařízeními s praktickými doporučeními na základě vašich odpovědí.', - 'faqQuestionHowWorks': 'Jak kontrola funguje?', - 'faqAnswerHowWorks': - 'Vyberete místnost, přidáte chytrá zařízení, odpovíte na otázky pro konkrétní zařízení a získáte profil rizik s prioritizovanými kroky.', - 'faqQuestionNoPolicy': 'Proč tu není zásada ochrany osobních údajů?', - 'faqAnswerNoPolicy': 'Protože neshromažďujeme vaše data.', - 'faqQuestionDataStored': 'Kde jsou moje data uložena?', - 'faqAnswerDataStored': - 'Vaše hodnocení je uloženo lokálně ve vašem zařízení. V obrazovce O aplikaci můžete všechna uložená data kdykoli smazat.', - 'faqQuestionNoDevice': 'Co když moje zařízení není v seznamu?', - 'faqAnswerNoDevice': - 'Můžete přidat vlastní zařízení a kontrolu dokončit. Doporučení pak vycházejí z vaší konfigurace a odpovědí.', - 'faqQuestionRiskMeaning': 'Co znamená nízké, střední a vysoké riziko?', - 'faqAnswerRiskMeaning': - 'Tyto úrovně ukazují, jak silně může vaše současné nastavení zvyšovat rizika pro soukromí. Jde o orientační úrovně, ne o právní nebo technickou certifikaci.', - 'faqQuestionLegalAdvice': 'Jde o právní poradenství?', - 'faqAnswerLegalAdvice': - 'Ne. Simplications poskytuje praktickou orientaci a doporučení, nenahrazuje však právní nebo profesionální bezpečnostní poradenství.', - 'faqQuestionCanShare': 'Mohu sdílet své výsledky?', - 'faqAnswerCanShare': - 'Ano. Na obrazovce výsledků můžete přehled exportovat a sdílet jako text nebo PDF.', - 'roomDeleteTitle': 'Smazat místnost?', - 'roomDeleteBody': - 'Tato vlastní místnost bude smazána. Všechna propojená zařízení budou také odstraněna.', - 'add': 'Přidat', - 'addRoomDialogTitle': 'Přidat novou místnost', - 'roomName': 'Název místnosti', - 'roomNameHint': 'např. Obývací pokoj, Garáž', - 'chooseIcon': 'Vyberte ikonu:', - 'addDeviceDialogTitle': 'Přidat nové zařízení', - 'deviceName': 'Název zařízení', - 'deviceNameHint': 'např. Můj chytrý reproduktor', - 'baseRiskLabel': 'Základní skóre rizika (0-100)', - 'baseRiskHint': 'např. 30 (nízké) až 60 (vysoké)', - 'hasCamera': 'Má kameru?', - 'hasMicrophone': 'Má mikrofon?', - 'camera': 'Kamera', - 'microphone': 'Mikrofon', - 'summaryTitle': 'Váš výsledek', - 'shareResult': 'Sdílet výsledek', - 'shareAsText': 'Sdílet jako text', - 'shareAsPdf': 'Sdílet jako PDF', - 'restart': 'Začít znovu', - 'noDevicesCaptured': 'Nebyla zaznamenána žádná zařízení.', - 'noDevicesHint': - 'Spusťte to znovu a přidejte zařízení, abyste získali hodnocení.', - 'highRisk': 'Vysoké riziko', - 'mediumRisk': 'Střední riziko', - 'lowRisk': 'Nízké riziko', - 'exportFailed': 'Export se nezdařil', - 'summaryShareSubject': 'Výsledek Simplications', - 'summarySharePdfText': 'Zpráva Simplications jako PDF', - 'overview': 'Přehled', - 'evaluatedDevices': 'Vyhodnocená zařízení', - 'skippedDevicesHint': - '{count} zařízení přeskočeno, protože dotazník nebyl dokončen.', - 'overallRisk': 'Celkové riziko', - 'generalRecommendations': 'Obecná doporučení', - 'generalRecommendationsHint': - 'Tato opatření platí pro celou vaši chytrou domácnost bez ohledu na jednotlivá zařízení.', - 'fullCatalog': 'Úplný katalog opatření', - 'catalogButton': 'Otevřít úplný katalog opatření', - 'risk': 'Riziko', - 'note': 'Poznámka', - 'recommendations': 'Doporučení', - 'urgent': 'Naléhavé', - 'recommended': 'Doporučeno', - 'optional': 'Volitelné', - 'social': 'Sociální', - 'technical': 'Technické', - 'security': 'Zabezpečení', - 'smartHomePrivacyHeader': 'Vaše soukromí chytré domácnosti', - 'devicesRated': 'hodnocených zařízení', - 'howRiskCalculated': 'Jak se riziko počítá?', - 'totalScore': 'Celkem', - 'catalogSnackBarPrefix': 'Katalog', - 'reportExportedAt': 'Exportováno', - 'noActionLow': 'Vše je v pořádku - nejsou nutná žádná opatření.', - 'noActionMedium': - 'Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává střední zbytkové riziko.', - 'noActionHigh': - 'Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává vysoké zbytkové riziko.', - 'overallLow': - 'Skvělá práce! Vaše zařízení jsou většinou bezpečně nastavena. Přesto si projděte obecná doporučení.', - 'overallMedium': - 'Je zde prostor ke zlepšení. Projděte si doporučení pro jednotlivá zařízení.', - 'overallHigh': - 'Několik zařízení má významná rizika pro soukromí/ochranu dat. Prosím co nejdříve zaveďte opatření s vysokou prioritou.', - 'dontKnowHint': - ' {count} odpověď{suffix} byla označena jako "Nevím" - věnujte čas lepšímu poznání nastavení svých zařízení.', - }, - 'pl': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Simplications\nKontrola prywatności\nSmart Home', - 'welcomeDescription': - 'Dodaj swoje inteligentne urządzenia pokój po pokoju i otrzymaj ocenę prywatności z konkretnymi zaleceniami.', - 'stepSelectRooms': 'Wybierz pokój', - 'stepCaptureDevices': 'Dodaj urządzenia', - 'stepAnswerQuestions': 'Odpowiedz na pytania', - 'stepGetRisk': 'Uzyskaj profil ryzyka i zalecenia', - 'start': 'Start', - 'resume': 'Wznów', - 'about': 'O aplikacji', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Wybierz pokój', - 'roomQuestion': 'Który pokój chcesz teraz sprawdzić?', - 'roomInstruction': - 'Stuknij pokój, dodaj urządzenia, a potem wróć tutaj, aby wybrać kolejny pokój.', - 'results': 'Wyniki', - 'alreadyEvaluated': 'Już oceniono', - 'notCompleted': 'Nieukończone', - 'addRoom': 'Dodaj pokój', - 'deviceTitlePrefix': 'Urządzenia', - 'roomCheck': 'Przegląd pokoju', - 'deviceQuestion': 'Jakich inteligentnych urządzeń używasz w tym pokoju?', - 'deviceQuestionHint': 'Stuknij urządzenie, aby odpowiedzieć na pytania.', - 'noKnownDevices': - 'Brak znanych urządzeń dla tego pokoju. Możesz dodać własne urządzenie.', - 'addDevice': 'Dodaj\nurządzenie', - 'noDevice': 'Brak urządzenia', - 'nextRoom': 'Następny pokój', - 'deleteDeviceTitle': 'Usunąć urządzenie?', - 'deleteDeviceBody': - 'To niestandardowe urządzenie zostanie usunięte. Wszystkie powiązane instancje również zostaną usunięte.', - 'delete': 'Usuń', - 'cancel': 'Anuluj', - 'confirm': 'Potwierdź', - 'noDeviceDialogTitle': 'Brak urządzeń w tym pokoju?', - 'noDeviceDialogBody': - 'Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.', - 'noDeviceDialogBodyWithExisting': - 'Istniejące wybory urządzeń dla tego pokoju zostaną odrzucone. Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.', - 'questionnaireTitle': 'Pytania', - 'connectedDevice': 'Podłączone urządzenie', - 'done': 'Gotowe', - 'yes': 'Tak', - 'no': 'Nie', - 'dontKnow': 'Nie wiem', - 'notApplicableForDevice': 'To pytanie nie dotyczy mojego urządzenia', - 'languageDialogTitle': 'Wybierz język', - 'currentLanguage': 'Bieżący język', - 'aboutScreenTitle': 'O aplikacji', - 'aboutSubtitle': 'Projekt badawczy dotyczący prywatności smart home', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Uniwersytet Techniczny w Chemnitz', - 'aboutPartnerHsAnhalt': 'Anhalt University of Applied Sciences', - 'aboutPartnerVzSachsen': 'Centrum Konsumenckie Saksonii', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'websiteOpenFailed': 'Nie można otworzyć strony internetowej.', - 'deleteAllDataTitle': 'Usunąć wszystkie dane?', - 'deleteAllDataBody': - 'Wszystkie zapisane pokoje, urządzenia i odpowiedzi zostaną trwale usunięte. Tej operacji nie można cofnąć.', - 'deleteAllDataButton': 'Usuń dane', - 'allDataDeleted': 'Wszystkie zapisane dane zostały usunięte.', - 'projectPartners': 'Partnerzy projektu', - 'coordinationFunding': 'Koordynacja i finansowanie', - 'coordination': 'Koordynacja', - 'platformPrivacy': 'Plattform Privatheit', - 'fundingAgency': 'Instytucja finansująca', - 'fundingAgencyValue': - 'Federalne Ministerstwo Badań, Technologii i Przestrzeni Kosmicznej\nGrant 16KIS1868K', - 'website': 'Strona internetowa', - 'dangerZone': 'Strefa zagrożenia', - 'dangerZoneWarning': - 'Uwaga: Ta operacja trwale usunie wszystkie zapisane dane aplikacji.', - 'faqScreenTitle': 'Najczęściej zadawane pytania', - 'faqQuestionWhatIs': 'Czym jest Simplications?', - 'faqAnswerWhatIs': - 'Simplications to projekt badawczy dotyczący prywatności w inteligentnym domu. Ta aplikacja jest jedną z części projektu i prowadzi Cię pokój po pokoju przez Twoje urządzenia, oferując praktyczne zalecenia na podstawie odpowiedzi.', - 'faqQuestionHowWorks': 'Jak działa kontrola?', - 'faqAnswerHowWorks': - 'Wybierasz pokój, dodajesz inteligentne urządzenia, odpowiadasz na pytania dotyczące danego urządzenia i otrzymujesz profil ryzyka z priorytetowymi działaniami.', - 'faqQuestionNoPolicy': 'Dlaczego nie ma polityki prywatności?', - 'faqAnswerNoPolicy': 'Ponieważ nie zbieramy Twoich danych.', - 'faqQuestionDataStored': 'Gdzie przechowywane są moje dane?', - 'faqAnswerDataStored': - 'Twoje dane z oceny są przechowywane lokalnie na urządzeniu. W ekranie O aplikacji możesz w każdej chwili usunąć wszystkie zapisane dane.', - 'faqQuestionNoDevice': 'Co jeśli mojego urządzenia nie ma na liście?', - 'faqAnswerNoDevice': - 'Możesz dodać własne urządzenia i nadal ukończyć kontrolę. Zalecenia będą wtedy oparte na Twojej konfiguracji i odpowiedziach.', - 'faqQuestionRiskMeaning': 'Co oznacza niskie, średnie i wysokie ryzyko?', - 'faqAnswerRiskMeaning': - 'Poziomy te pokazują, jak bardzo obecna konfiguracja może zwiększać ryzyka dla prywatności. Są to poziomy orientacyjne, a nie certyfikacja prawna lub techniczna.', - 'faqQuestionLegalAdvice': 'Czy to porada prawna?', - 'faqAnswerLegalAdvice': - 'Nie. Simplications zapewnia praktyczne wskazówki i rekomendacje, ale nie zastępuje porady prawnej ani profesjonalnej konsultacji bezpieczeństwa.', - 'faqQuestionCanShare': 'Czy mogę udostępnić wyniki?', - 'faqAnswerCanShare': - 'Tak. Na ekranie wyników możesz wyeksportować i udostępnić podsumowanie jako tekst lub PDF.', - 'roomDeleteTitle': 'Usunąć pokój?', - 'roomDeleteBody': - 'Ten niestandardowy pokój zostanie usunięty. Wszystkie powiązane urządzenia również zostaną usunięte.', - 'add': 'Dodaj', - 'addRoomDialogTitle': 'Dodaj nowy pokój', - 'roomName': 'Nazwa pokoju', - 'roomNameHint': 'np. Salon, Garaż', - 'chooseIcon': 'Wybierz ikonę:', - 'addDeviceDialogTitle': 'Dodaj nowe urządzenie', - 'deviceName': 'Nazwa urządzenia', - 'deviceNameHint': 'np. Mój inteligentny głośnik', - 'baseRiskLabel': 'Bazowy wynik ryzyka (0-100)', - 'baseRiskHint': 'np. 30 (niskie) do 60 (wysokie)', - 'hasCamera': 'Ma kamerę?', - 'hasMicrophone': 'Ma mikrofon?', - 'camera': 'Kamera', - 'microphone': 'Mikrofon', - 'summaryTitle': 'Twój wynik', - 'shareResult': 'Udostępnij wynik', - 'shareAsText': 'Udostępnij jako tekst', - 'shareAsPdf': 'Udostępnij jako PDF', - 'restart': 'Uruchom ponownie', - 'noDevicesCaptured': 'Nie dodano żadnych urządzeń.', - 'noDevicesHint': - 'Uruchom ponownie i dodaj urządzenia, aby otrzymać ocenę.', - 'highRisk': 'Wysokie ryzyko', - 'mediumRisk': 'Średnie ryzyko', - 'lowRisk': 'Niskie ryzyko', - 'exportFailed': 'Eksport nie powiódł się', - 'summaryShareSubject': 'Wynik Simplications', - 'summarySharePdfText': 'Raport Simplications jako PDF', - 'overview': 'Przegląd', - 'evaluatedDevices': 'Ocenione urządzenia', - 'skippedDevicesHint': - 'Pominięto {count} urządzeń, ponieważ kwestionariusz nie został ukończony.', - 'overallRisk': 'Ryzyko całkowite', - 'generalRecommendations': 'Ogólne zalecenia', - 'generalRecommendationsHint': - 'Te środki dotyczą całego Twojego smart home, niezależnie od pojedynczych urządzeń.', - 'fullCatalog': 'Pełny katalog działań', - 'catalogButton': 'Otwórz pełny katalog działań', - 'risk': 'Ryzyko', - 'note': 'Uwaga', - 'recommendations': 'Zalecenia', - 'urgent': 'Pilne', - 'recommended': 'Zalecane', - 'optional': 'Opcjonalne', - 'social': 'Społeczne', - 'technical': 'Techniczne', - 'security': 'Bezpieczeństwo', - 'smartHomePrivacyHeader': 'Prywatność Twojego smart home', - 'devicesRated': 'ocenionych urządzeń', - 'howRiskCalculated': 'Jak obliczane jest ryzyko?', - 'totalScore': 'Łącznie', - 'catalogSnackBarPrefix': 'Katalog', - 'reportExportedAt': 'Wyeksportowano', - 'noActionLow': 'Wszystko w porządku - nie są wymagane żadne działania.', - 'noActionMedium': - 'Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje średnie ryzyko resztkowe.', - 'noActionHigh': - 'Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje wysokie ryzyko resztkowe.', - 'overallLow': - 'Dobra robota! Twoje urządzenia są w większości skonfigurowane bezpiecznie. Mimo to sprawdź ogólne zalecenia.', - 'overallMedium': - 'Jest miejsce na poprawę. Sprawdź zalecenia dla każdego urządzenia.', - 'overallHigh': - 'Kilka urządzeń ma istotne ryzyka prywatności/ochrony danych. Prosimy jak najszybciej wdrożyć działania o wysokim priorytecie.', - 'dontKnowHint': - ' {count} odpowiedź{suffix} oznaczono jako "Nie wiem" - poświęć czas na lepsze poznanie ustawień swoich urządzeń.', - }, - 'fr': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Simplications\nContrôle de confidentialité\nSmart Home', - 'welcomeDescription': - 'Renseignez vos appareils intelligents pièce par pièce et obtenez une évaluation de confidentialité avec des recommandations concrètes.', - 'stepSelectRooms': 'Choisir une pièce', - 'stepCaptureDevices': 'Recenser les appareils', - 'stepAnswerQuestions': 'Répondre aux questions', - 'stepGetRisk': 'Obtenir le profil de risque et les recommandations', - 'start': 'Démarrer', - 'resume': 'Continuer', - 'about': 'À propos', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Sélectionner une pièce', - 'roomQuestion': 'Quelle pièce souhaitez-vous vérifier maintenant ?', - 'roomInstruction': - 'Touchez une pièce, recensez-y vos appareils, puis revenez ici pour choisir la pièce suivante.', - 'results': 'Résultats', - 'alreadyEvaluated': 'Déjà évalué', - 'notCompleted': 'Non terminé', - 'addRoom': 'Ajouter une pièce', - 'deviceTitlePrefix': 'Appareils', - 'roomCheck': 'Vérification de la pièce', - 'deviceQuestion': - 'Quels appareils intelligents utilisez-vous dans cette pièce ?', - 'deviceQuestionHint': 'Touchez un appareil pour répondre aux questions.', - 'noKnownDevices': - 'Aucun appareil connu pour cette pièce. Vous pouvez ajouter votre propre appareil.', - 'addDevice': 'Ajouter\nun appareil', - 'noDevice': 'Aucun appareil', - 'nextRoom': 'Pièce suivante', - 'deleteDeviceTitle': 'Supprimer l\'appareil ?', - 'deleteDeviceBody': - 'Cet appareil personnalisé sera supprimé. Toutes les instances liées seront également supprimées.', - 'delete': 'Supprimer', - 'cancel': 'Annuler', - 'confirm': 'Confirmer', - 'noDeviceDialogTitle': 'Aucun appareil dans cette pièce ?', - 'noDeviceDialogBody': - 'Cette pièce sera terminée sans appareil et n\'affectera pas le score.', - 'noDeviceDialogBodyWithExisting': - 'Les sélections d\'appareils existantes pour cette pièce seront ignorées. Cette pièce sera terminée sans appareil et n\'affectera pas le score.', - 'questionnaireTitle': 'Questions', - 'connectedDevice': 'Appareil connecté', - 'done': 'Terminé', - 'yes': 'Oui', - 'no': 'Non', - 'dontKnow': 'Je ne sais pas', - 'notApplicableForDevice': - 'Cette question ne s\'applique pas à mon appareil', - 'languageDialogTitle': 'Choisir la langue', - 'currentLanguage': 'Langue actuelle', - 'aboutScreenTitle': 'À propos de l’application', - 'aboutSubtitle': - 'Projet de recherche sur la confidentialité des maisons connectées', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Université technique de Chemnitz', - 'aboutPartnerHsAnhalt': 'Haute école d’Anhalt', - 'aboutPartnerVzSachsen': 'Centre des consommateurs de Saxe', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'websiteOpenFailed': 'Impossible d’ouvrir le site web.', - 'deleteAllDataTitle': 'Supprimer toutes les données ?', - 'deleteAllDataBody': - 'Toutes les pièces, appareils et réponses enregistrés seront supprimés définitivement. Cette action est irréversible.', - 'deleteAllDataButton': 'Supprimer les données', - 'allDataDeleted': 'Toutes les données enregistrées ont été supprimées.', - 'projectPartners': 'Partenaires du projet', - 'coordinationFunding': 'Coordination et financement', - 'coordination': 'Coordination', - 'platformPrivacy': 'Plattform Privatheit', - 'fundingAgency': 'Organisme financeur', - 'fundingAgencyValue': - 'Ministère fédéral allemand de la Recherche, de la Technologie et de l’Espace\nSubvention 16KIS1868K', - 'website': 'Site web', - 'dangerZone': 'Zone de danger', - 'dangerZoneWarning': - 'Attention : cette action supprime définitivement toutes les données enregistrées de l’application.', - 'faqScreenTitle': 'Questions fréquentes', - 'faqQuestionWhatIs': 'Qu’est-ce que Simplications ?', - 'faqAnswerWhatIs': - 'Simplications est un projet de recherche sur la confidentialité des maisons connectées. Cette application est une composante du projet et vous guide pièce par pièce à travers vos appareils avec des recommandations pratiques selon vos réponses.', - 'faqQuestionHowWorks': 'Comment fonctionne le contrôle ?', - 'faqAnswerHowWorks': - 'Vous choisissez une pièce, ajoutez vos appareils intelligents, répondez à des questions spécifiques, puis recevez un profil de risque avec des actions priorisées.', - 'faqQuestionNoPolicy': - 'Pourquoi n’y a-t-il pas de politique de protection des données ?', - 'faqAnswerNoPolicy': 'Parce que nous ne collectons pas vos données.', - 'faqQuestionDataStored': 'Où sont stockées mes données ?', - 'faqAnswerDataStored': - 'Vos données d’évaluation sont stockées localement sur votre appareil. Vous pouvez supprimer toutes les données enregistrées à tout moment depuis l’écran À propos.', - 'faqQuestionNoDevice': - 'Que faire si mon appareil n’est pas dans la liste ?', - 'faqAnswerNoDevice': - 'Vous pouvez ajouter des appareils personnalisés et terminer le contrôle. Les recommandations s’appuieront alors sur votre configuration et vos réponses.', - 'faqQuestionRiskMeaning': - 'Que signifient risque faible, moyen et élevé ?', - 'faqAnswerRiskMeaning': - 'Ces niveaux indiquent dans quelle mesure votre configuration actuelle peut exposer des risques de confidentialité. Ce sont des niveaux d’orientation, pas une certification juridique ou technique.', - 'faqQuestionLegalAdvice': 'Est-ce un conseil juridique ?', - 'faqAnswerLegalAdvice': - 'Non. Simplications fournit une orientation pratique et des recommandations, mais ne remplace pas un conseil juridique ou une consultation professionnelle en sécurité.', - 'faqQuestionCanShare': 'Puis-je partager mes résultats ?', - 'faqAnswerCanShare': - 'Oui. Depuis l’écran des résultats, vous pouvez exporter et partager votre résumé en texte ou en PDF.', - 'roomDeleteTitle': 'Supprimer la pièce ?', - 'roomDeleteBody': - 'Cette pièce personnalisée sera supprimée. Tous les appareils liés seront également supprimés.', - 'add': 'Ajouter', - 'addRoomDialogTitle': 'Ajouter une nouvelle pièce', - 'roomName': 'Nom de la pièce', - 'roomNameHint': 'ex. Salon, Garage', - 'chooseIcon': 'Choisir une icône :', - 'addDeviceDialogTitle': 'Ajouter un nouvel appareil', - 'deviceName': 'Nom de l’appareil', - 'deviceNameHint': 'ex. Mon haut-parleur intelligent', - 'baseRiskLabel': 'Score de risque de base (0-100)', - 'baseRiskHint': 'ex. 30 (faible) à 60 (élevé)', - 'hasCamera': 'Possède une caméra ?', - 'hasMicrophone': 'Possède un microphone ?', - 'camera': 'Caméra', - 'microphone': 'Microphone', - 'summaryTitle': 'Votre résultat', - 'shareResult': 'Partager le résultat', - 'shareAsText': 'Partager en texte', - 'shareAsPdf': 'Partager en PDF', - 'restart': 'Recommencer', - 'noDevicesCaptured': 'Aucun appareil enregistré.', - 'noDevicesHint': - 'Redémarrez et ajoutez des appareils pour obtenir une évaluation.', - 'highRisk': 'Risque élevé', - 'mediumRisk': 'Risque moyen', - 'lowRisk': 'Risque faible', - 'exportFailed': 'Échec de l’export', - 'summaryShareSubject': 'Résultat Simplications', - 'summarySharePdfText': 'Rapport Simplications en PDF', - 'overview': 'Vue d’ensemble', - 'evaluatedDevices': 'Appareils évalués', - 'skippedDevicesHint': - '{count} appareils ignorés car le questionnaire n\'a pas été terminé.', - 'overallRisk': 'Risque global', - 'generalRecommendations': 'Recommandations générales', - 'generalRecommendationsHint': - 'Ces mesures s’appliquent à toute votre maison connectée, indépendamment des appareils individuels.', - 'fullCatalog': 'Catalogue complet des actions', - 'catalogButton': 'Ouvrir le catalogue complet des actions', - 'risk': 'Risque', - 'note': 'Remarque', - 'recommendations': 'Recommandations', - 'urgent': 'Urgent', - 'recommended': 'Recommandé', - 'optional': 'Optionnel', - 'social': 'Social', - 'technical': 'Technique', - 'security': 'Sécurité', - 'smartHomePrivacyHeader': 'La confidentialité de votre maison connectée', - 'devicesRated': 'appareils évalués', - 'howRiskCalculated': 'Comment le risque est-il calculé ?', - 'totalScore': 'Total', - 'catalogSnackBarPrefix': 'Catalogue', - 'reportExportedAt': 'Exporté le', - 'noActionLow': 'Tout va bien - aucune action n’est nécessaire.', - 'noActionMedium': - 'Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel moyen demeure.', - 'noActionHigh': - 'Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel élevé demeure.', - 'overallLow': - 'Bien joué ! Vos appareils sont globalement configurés de façon sûre. Consultez tout de même les recommandations générales.', - 'overallMedium': - 'Il y a une marge d’amélioration. Consultez les recommandations pour chaque appareil.', - 'overallHigh': - 'Plusieurs appareils présentent des risques importants pour la confidentialité/protection des données. Veuillez mettre en œuvre rapidement les mesures prioritaires.', - 'dontKnowHint': - ' {count} réponse{suffix} a été marquée "Je ne sais pas" - prenez le temps de mieux comprendre les paramètres de vos appareils.', - }, - 'nl': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Simplications\nSmart Home\nprivacycheck', - 'welcomeDescription': - 'Leg je slimme apparaten kamer voor kamer vast en ontvang een privacybeoordeling met concrete aanbevelingen.', - 'stepSelectRooms': 'Kamer kiezen', - 'stepCaptureDevices': 'Apparaten vastleggen', - 'stepAnswerQuestions': 'Vragen beantwoorden', - 'stepGetRisk': 'Risicoprofiel en aanbevelingen ontvangen', - 'start': 'Starten', - 'resume': 'Doorgaan', - 'about': 'Over', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Kamer kiezen', - 'roomQuestion': 'Welke kamer wilt u nu controleren?', - 'roomInstruction': - 'Tik op een kamer, leg daar uw apparaten vast en keer terug om de volgende kamer te kiezen.', - 'results': 'Resultaten', - 'alreadyEvaluated': 'Al beoordeeld', - 'notCompleted': 'Niet voltooid', - 'addRoom': 'Kamer toevoegen', - 'deviceTitlePrefix': 'Apparaten', - 'roomCheck': 'Kamercheck', - 'deviceQuestion': 'Welke slimme apparaten gebruikt u in deze kamer?', - 'deviceQuestionHint': 'Tik op een apparaat om de vragen te beantwoorden.', - 'noKnownDevices': - 'Geen bekende apparaten voor deze kamer. U kunt een eigen apparaat toevoegen.', - 'addDevice': 'Apparaat\ntoevoegen', - 'noDevice': 'Geen apparaat', - 'nextRoom': 'Volgende kamer', - 'deleteDeviceTitle': 'Apparaat verwijderen?', - 'deleteDeviceBody': - 'Dit aangepaste apparaat wordt verwijderd. Alle gekoppelde instanties worden ook verwijderd.', - 'delete': 'Verwijderen', - 'cancel': 'Annuleren', - 'confirm': 'Bevestigen', - 'noDeviceDialogTitle': 'Geen apparaten in deze kamer?', - 'noDeviceDialogBody': - 'Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.', - 'noDeviceDialogBodyWithExisting': - 'Bestaande apparaatkeuzes voor deze kamer worden verwijderd. Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.', - 'questionnaireTitle': 'Vragen', - 'connectedDevice': 'Verbonden apparaat', - 'done': 'Klaar', - 'yes': 'Ja', - 'no': 'Nee', - 'dontKnow': 'Weet ik niet', - 'notApplicableForDevice': - 'Deze vraag is niet van toepassing op mijn apparaat', - 'languageDialogTitle': 'Taal kiezen', - 'currentLanguage': 'Huidige taal', - 'aboutScreenTitle': 'Over de app', - 'aboutSubtitle': 'Onderzoeksproject over smart-home-privacy', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Technische Universiteit Chemnitz', - 'aboutPartnerHsAnhalt': 'Hogeschool Anhalt', - 'aboutPartnerVzSachsen': 'Consumentenorganisatie Saksen', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'websiteOpenFailed': 'Kon website niet openen.', - 'deleteAllDataTitle': 'Alle gegevens verwijderen?', - 'deleteAllDataBody': - 'Alle vastgelegde kamers, apparaten en antwoorden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.', - 'deleteAllDataButton': 'Gegevens verwijderen', - 'allDataDeleted': 'Alle opgeslagen gegevens zijn verwijderd.', - 'projectPartners': 'Projectpartners', - 'coordinationFunding': 'Coordinatie en financiering', - 'coordination': 'Coordinatie', - 'platformPrivacy': 'Plattform Privatheit', - 'fundingAgency': 'Financierende instantie', - 'fundingAgencyValue': - 'Duits Federaal Ministerie voor Onderzoek, Technologie en Ruimtevaart\nSubsidie 16KIS1868K', - 'website': 'Website', - 'dangerZone': 'Gevarenzone', - 'dangerZoneWarning': - 'Waarschuwing: deze actie verwijdert alle opgeslagen app-gegevens permanent.', - 'faqScreenTitle': 'Veelgestelde vragen', - 'faqQuestionWhatIs': 'Wat is Simplications?', - 'faqAnswerWhatIs': - 'Simplications is een onderzoeksproject over smart-home-privacy. Deze app is een onderdeel van het project en begeleidt je kamer voor kamer door je apparaten met praktische aanbevelingen op basis van je antwoorden.', - 'faqQuestionHowWorks': 'Hoe werkt de check?', - 'faqAnswerHowWorks': - 'Je kiest een kamer, voegt je slimme apparaten toe, beantwoordt apparaatspecifieke vragen en ontvangt een risicoprofiel met geprioriteerde acties.', - 'faqQuestionNoPolicy': 'Waarom is er geen privacybeleid?', - 'faqAnswerNoPolicy': 'Omdat we jouw gegevens niet verzamelen.', - 'faqQuestionDataStored': 'Waar worden mijn gegevens opgeslagen?', - 'faqAnswerDataStored': - 'Je beoordelingsgegevens worden lokaal op je apparaat opgeslagen. In het Over-scherm kun je alle opgeslagen gegevens op elk moment verwijderen.', - 'faqQuestionNoDevice': 'Wat als mijn apparaat niet in de lijst staat?', - 'faqAnswerNoDevice': - 'Je kunt aangepaste apparaten toevoegen en de check toch voltooien. De aanbevelingen zijn dan gebaseerd op je configuratie en antwoorden.', - 'faqQuestionRiskMeaning': 'Wat betekenen laag, gemiddeld en hoog risico?', - 'faqAnswerRiskMeaning': - 'Deze niveaus geven aan in hoeverre je huidige configuratie privacyrisico’s kan vergroten. Het zijn richtniveaus, geen juridische of technische certificering.', - 'faqQuestionLegalAdvice': 'Is dit juridisch advies?', - 'faqAnswerLegalAdvice': - 'Nee. Simplications biedt praktische oriëntatie en aanbevelingen, maar vervangt geen juridisch advies of professionele beveiligingsconsultatie.', - 'faqQuestionCanShare': 'Kan ik mijn resultaten delen?', - 'faqAnswerCanShare': - 'Ja. In het resultatenscherm kun je je samenvatting exporteren en delen als tekst of PDF.', - 'roomDeleteTitle': 'Kamer verwijderen?', - 'roomDeleteBody': - 'Deze aangepaste kamer wordt verwijderd. Alle gekoppelde apparaten worden ook verwijderd.', - 'add': 'Toevoegen', - 'addRoomDialogTitle': 'Nieuwe kamer toevoegen', - 'roomName': 'Kamernaam', - 'roomNameHint': 'bijv. Woonkamer, Garage', - 'chooseIcon': 'Kies een pictogram:', - 'addDeviceDialogTitle': 'Nieuw apparaat toevoegen', - 'deviceName': 'Apparaatnaam', - 'deviceNameHint': 'bijv. Mijn slimme speaker', - 'baseRiskLabel': 'Basisscore risico (0-100)', - 'baseRiskHint': 'bijv. 30 (laag) tot 60 (hoog)', - 'hasCamera': 'Heeft camera?', - 'hasMicrophone': 'Heeft microfoon?', - 'camera': 'Camera', - 'microphone': 'Microfoon', - 'summaryTitle': 'Jouw resultaat', - 'shareResult': 'Resultaat delen', - 'shareAsText': 'Delen als tekst', - 'shareAsPdf': 'Delen als PDF', - 'restart': 'Opnieuw starten', - 'noDevicesCaptured': 'Geen apparaten vastgelegd.', - 'noDevicesHint': - 'Start opnieuw en voeg apparaten toe om een beoordeling te krijgen.', - 'highRisk': 'Hoog risico', - 'mediumRisk': 'Gemiddeld risico', - 'lowRisk': 'Laag risico', - 'exportFailed': 'Export mislukt', - 'summaryShareSubject': 'Simplications-resultaat', - 'summarySharePdfText': 'Simplications-rapport als PDF', - 'overview': 'Overzicht', - 'evaluatedDevices': 'Beoordeelde apparaten', - 'skippedDevicesHint': - '{count} apparaten overgeslagen omdat de vragenlijst niet is voltooid.', - 'overallRisk': 'Totaal risico', - 'generalRecommendations': 'Algemene aanbevelingen', - 'generalRecommendationsHint': - 'Deze maatregelen gelden voor je hele smart home, ongeacht afzonderlijke apparaten.', - 'fullCatalog': 'Volledige actiecatalogus', - 'catalogButton': 'Open volledige actiecatalogus', - 'risk': 'Risico', - 'note': 'Opmerking', - 'recommendations': 'Aanbevelingen', - 'urgent': 'Urgent', - 'recommended': 'Aanbevolen', - 'optional': 'Optioneel', - 'social': 'Sociaal', - 'technical': 'Technisch', - 'security': 'Beveiliging', - 'smartHomePrivacyHeader': 'Jouw smart-home-privacy', - 'devicesRated': 'beoordeelde apparaten', - 'howRiskCalculated': 'Hoe wordt risico berekend?', - 'totalScore': 'Totaal', - 'catalogSnackBarPrefix': 'Catalogus', - 'reportExportedAt': 'Geëxporteerd op', - 'noActionLow': 'Alles is in orde - geen acties vereist.', - 'noActionMedium': - 'Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een gemiddeld restrisico.', - 'noActionHigh': - 'Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een hoog restrisico.', - 'overallLow': - 'Goed gedaan! Je apparaten zijn grotendeels veilig geconfigureerd. Bekijk alsnog de algemene aanbevelingen.', - 'overallMedium': - 'Er is ruimte voor verbetering. Bekijk de aanbevelingen per apparaat.', - 'overallHigh': - 'Meerdere apparaten hebben aanzienlijke privacy-/gegevensbeschermingsrisico’s. Voer maatregelen met hoge prioriteit zo snel mogelijk uit.', - 'dontKnowHint': - ' {count} antwoord{suffix} is gemarkeerd als "Weet ik niet" - neem de tijd om de instellingen van je apparaten beter te leren kennen.', - }, - 'da': { - 'appTitle': 'Simplications', - 'welcomeTitle': 'Simplications\nSmart Home\nprivatlivstjek', - 'welcomeDescription': - 'Registrer dine smarte enheder rum for rum, og få en privatlivsvurdering med konkrete anbefalinger.', - 'stepSelectRooms': 'Vælg ét rum', - 'stepCaptureDevices': 'Registrer enheder', - 'stepAnswerQuestions': 'Besvar spørgsmål', - 'stepGetRisk': 'Få risikoprofil og anbefalinger', - 'start': 'Start', - 'resume': 'Fortsæt', - 'about': 'Om', - 'faq': 'FAQ', - 'roomSelectionTitle': 'Vælg rum', - 'roomQuestion': 'Hvilket rum vil du tjekke nu?', - 'roomInstruction': - 'Tryk på et rum, registrer enhederne dér, og kom tilbage hertil for at vælge næste rum.', - 'results': 'Resultater', - 'alreadyEvaluated': 'Allerede vurderet', - 'notCompleted': 'Ikke afsluttet', - 'addRoom': 'Tilføj rum', - 'deviceTitlePrefix': 'Enheder', - 'roomCheck': 'Rumtjek', - 'deviceQuestion': 'Hvilke smarte enheder bruger du i dette rum?', - 'deviceQuestionHint': 'Tryk på en enhed for at besvare spørgsmålene.', - 'noKnownDevices': - 'Ingen kendte enheder for dette rum. Du kan tilføje din egen enhed.', - 'addDevice': 'Tilføj\nenhed', - 'noDevice': 'Ingen enhed', - 'nextRoom': 'Næste rum', - 'deleteDeviceTitle': 'Slet enhed?', - 'deleteDeviceBody': - 'Denne brugerdefinerede enhed slettes. Alle tilknyttede instanser fjernes også.', - 'delete': 'Slet', - 'cancel': 'Annuller', - 'confirm': 'Bekræft', - 'noDeviceDialogTitle': 'Ingen enheder i dette rum?', - 'noDeviceDialogBody': - 'Dette rum afsluttes uden enheder og påvirker ikke scoren.', - 'noDeviceDialogBodyWithExisting': - 'Eksisterende enhedsvalg for dette rum kasseres. Dette rum afsluttes uden enheder og påvirker ikke scoren.', - 'questionnaireTitle': 'Spørgsmål', - 'connectedDevice': 'Tilsluttet enhed', - 'done': 'Færdig', - 'yes': 'Ja', - 'no': 'Nej', - 'dontKnow': 'Ved ikke', - 'notApplicableForDevice': 'Dette spørgsmål gælder ikke for min enhed', - 'languageDialogTitle': 'Vælg sprog', - 'currentLanguage': 'Nuværende sprog', - 'aboutScreenTitle': 'Om appen', - 'aboutSubtitle': 'Forskningsprojekt om privatliv i smarte hjem', - 'aboutProjectName': 'Simplications', - 'aboutPartnerTuChemnitz': 'Teknisk Universitet i Chemnitz', - 'aboutPartnerHsAnhalt': 'Anhalt University of Applied Sciences', - 'aboutPartnerVzSachsen': 'Forbrugercenter Sachsen', - 'aboutWebsiteSimplicationsLabel': 'simplications.tucmi.de', - 'aboutWebsiteSimplicationsUrl': 'https://simplications.tucmi.de', - 'aboutWebsiteTuChemnitzLabel': 'tu-chemnitz.de', - 'aboutWebsiteTuChemnitzUrl': 'https://www.tu-chemnitz.de', - 'aboutWebsiteHsAnhaltLabel': 'hs-anhalt.de', - 'aboutWebsiteHsAnhaltUrl': 'https://www.hs-anhalt.de', - 'aboutWebsiteVzSachsenLabel': 'verbraucherzentrale-sachsen.de', - 'aboutWebsiteVzSachsenUrl': 'https://www.verbraucherzentrale-sachsen.de', - 'aboutWebsitePlatformPrivacyLabel': 'plattform-privatheit.de', - 'aboutWebsitePlatformPrivacyUrl': 'https://www.plattform-privatheit.de', - 'aboutWebsiteFundingAgencyLabel': 'bmftr.bund.de', - 'aboutWebsiteFundingAgencyUrl': 'https://www.bmftr.bund.de', - 'websiteOpenFailed': 'Kunne ikke åbne webstedet.', - 'deleteAllDataTitle': 'Slet alle data?', - 'deleteAllDataBody': - 'Alle registrerede rum, enheder og svar slettes permanent. Handlingen kan ikke fortrydes.', - 'deleteAllDataButton': 'Slet data', - 'allDataDeleted': 'Alle gemte data er blevet slettet.', - 'projectPartners': 'Projektpartnere', - 'coordinationFunding': 'Koordination og finansiering', - 'coordination': 'Koordination', - 'platformPrivacy': 'Plattform Privatheit', - 'fundingAgency': 'Finansieringsorgan', - 'fundingAgencyValue': - 'Tysk forbundsministerium for forskning, teknologi og rumfart\nBevilling 16KIS1868K', - 'website': 'Websted', - 'dangerZone': 'Farezone', - 'dangerZoneWarning': - 'Advarsel: Denne handling fjerner alle gemte app-data permanent.', - 'faqScreenTitle': 'Ofte stillede spørgsmål', - 'faqQuestionWhatIs': 'Hvad er Simplications?', - 'faqAnswerWhatIs': - 'Simplications er et forskningsprojekt om privatliv i smarte hjem. Denne app er en del af projektet og guider dig rum for rum gennem dine enheder med praktiske anbefalinger baseret på dine svar.', - 'faqQuestionHowWorks': 'Hvordan fungerer tjekket?', - 'faqAnswerHowWorks': - 'Du vælger et rum, tilføjer dine smarte enheder, besvarer enhedsspecifikke spørgsmål og får en risikoprofil med prioriterede handlinger.', - 'faqQuestionNoPolicy': 'Hvorfor er der ingen privatlivspolitik?', - 'faqAnswerNoPolicy': 'Fordi vi ikke indsamler dine data.', - 'faqQuestionDataStored': 'Hvor gemmes mine data?', - 'faqAnswerDataStored': - 'Dine vurderingsdata gemmes lokalt på din enhed. På Om-skærmen kan du til enhver tid slette alle gemte data.', - 'faqQuestionNoDevice': 'Hvad hvis min enhed ikke er på listen?', - 'faqAnswerNoDevice': - 'Du kan tilføje brugerdefinerede enheder og stadig gennemføre tjekket. Anbefalingerne bygger så på din opsætning og dine svar.', - 'faqQuestionRiskMeaning': 'Hvad betyder lav, mellem og høj risiko?', - 'faqAnswerRiskMeaning': - 'Disse niveauer viser, hvor meget din nuværende konfiguration kan øge privatlivsrisici. De er vejledende niveauer, ikke juridisk eller teknisk certificering.', - 'faqQuestionLegalAdvice': 'Er dette juridisk rådgivning?', - 'faqAnswerLegalAdvice': - 'Nej. Simplications giver praktisk vejledning og anbefalinger, men erstatter ikke juridisk rådgivning eller professionel sikkerhedsrådgivning.', - 'faqQuestionCanShare': 'Kan jeg dele mine resultater?', - 'faqAnswerCanShare': - 'Ja. På resultatskærmen kan du eksportere og dele din opsummering som tekst eller PDF.', - 'roomDeleteTitle': 'Slet rum?', - 'roomDeleteBody': - 'Dette brugerdefinerede rum bliver slettet. Alle tilknyttede enheder bliver også fjernet.', - 'add': 'Tilføj', - 'addRoomDialogTitle': 'Tilføj nyt rum', - 'roomName': 'Rumnavn', - 'roomNameHint': 'f.eks. Stue, Garage', - 'chooseIcon': 'Vælg ikon:', - 'addDeviceDialogTitle': 'Tilføj ny enhed', - 'deviceName': 'Enhedsnavn', - 'deviceNameHint': 'f.eks. Min smarte højttaler', - 'baseRiskLabel': 'Basisrisikoscore (0-100)', - 'baseRiskHint': 'f.eks. 30 (lav) til 60 (høj)', - 'hasCamera': 'Har kamera?', - 'hasMicrophone': 'Har mikrofon?', - 'camera': 'Kamera', - 'microphone': 'Mikrofon', - 'summaryTitle': 'Dit resultat', - 'shareResult': 'Del resultat', - 'shareAsText': 'Del som tekst', - 'shareAsPdf': 'Del som PDF', - 'restart': 'Start forfra', - 'noDevicesCaptured': 'Ingen enheder registreret.', - 'noDevicesHint': 'Start forfra og tilføj enheder for at få en vurdering.', - 'highRisk': 'Høj risiko', - 'mediumRisk': 'Middel risiko', - 'lowRisk': 'Lav risiko', - 'exportFailed': 'Eksport mislykkedes', - 'summaryShareSubject': 'Simplications-resultat', - 'summarySharePdfText': 'Simplications-rapport som PDF', - 'overview': 'Oversigt', - 'evaluatedDevices': 'Vurderede enheder', - 'skippedDevicesHint': - '{count} enheder er sprunget over, fordi spørgeskemaet ikke er afsluttet.', - 'overallRisk': 'Samlet risiko', - 'generalRecommendations': 'Generelle anbefalinger', - 'generalRecommendationsHint': - 'Disse tiltag gælder for hele dit smarte hjem uanset individuelle enheder.', - 'fullCatalog': 'Fuldt handlingskatalog', - 'catalogButton': 'Åbn fuldt handlingskatalog', - 'risk': 'Risiko', - 'note': 'Bemærkning', - 'recommendations': 'Anbefalinger', - 'urgent': 'Haster', - 'recommended': 'Anbefalet', - 'optional': 'Valgfri', - 'social': 'Social', - 'technical': 'Teknisk', - 'security': 'Sikkerhed', - 'smartHomePrivacyHeader': 'Dit smart-home-privatliv', - 'devicesRated': 'vurderede enheder', - 'howRiskCalculated': 'Hvordan beregnes risiko?', - 'totalScore': 'I alt', - 'catalogSnackBarPrefix': 'Katalog', - 'reportExportedAt': 'Eksporteret den', - 'noActionLow': 'Alt er i orden - ingen handlinger nødvendige.', - 'noActionMedium': - 'Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en middel rest-risiko.', - 'noActionHigh': - 'Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en høj rest-risiko.', - 'overallLow': - 'Godt klaret! Dine enheder er overvejende sikkert konfigureret. Gennemgå alligevel de generelle anbefalinger.', - 'overallMedium': - 'Der er plads til forbedringer. Gennemgå anbefalingerne for hver enhed.', - 'overallHigh': - 'Flere enheder har betydelige privatlivs-/databeskyttelsesrisici. Implementér venligst højprioriterede tiltag hurtigt.', - 'dontKnowHint': - ' {count} svar{suffix} er markeret som "Ved ikke" - brug tid på at lære dine enhedsindstillinger bedre at kende.', - }, - }; - - String _value(String key) { - final languageCode = locale.languageCode; - final current = _localizedValues[languageCode] ?? _localizedValues['de']!; - return current[key] ?? - _localizedValues['en']![key] ?? - _localizedValues['de']![key] ?? - key; - } + /// No description provided for @stepGetRisk. + /// + /// In en, this message translates to: + /// **'Get risk profile & recommendations'** + String get stepGetRisk; + + /// No description provided for @start. + /// + /// In en, this message translates to: + /// **'Start'** + String get start; + + /// No description provided for @resume. + /// + /// In en, this message translates to: + /// **'Resume'** + String get resume; + + /// No description provided for @about. + /// + /// In en, this message translates to: + /// **'About'** + String get about; + + /// No description provided for @faq. + /// + /// In en, this message translates to: + /// **'FAQ'** + String get faq; + + /// No description provided for @roomSelectionTitle. + /// + /// In en, this message translates to: + /// **'Select room'** + String get roomSelectionTitle; + + /// No description provided for @roomQuestion. + /// + /// In en, this message translates to: + /// **'Which room would you like to check now?'** + String get roomQuestion; + + /// No description provided for @roomInstruction. + /// + /// In en, this message translates to: + /// **'Tap a room, capture your devices there, then return here to choose the next room.'** + String get roomInstruction; + + /// No description provided for @results. + /// + /// In en, this message translates to: + /// **'Results'** + String get results; + + /// No description provided for @alreadyEvaluated. + /// + /// In en, this message translates to: + /// **'Already evaluated'** + String get alreadyEvaluated; + + /// No description provided for @notCompleted. + /// + /// In en, this message translates to: + /// **'Not completed'** + String get notCompleted; + + /// No description provided for @addRoom. + /// + /// In en, this message translates to: + /// **'Add room'** + String get addRoom; + + /// No description provided for @deviceTitlePrefix. + /// + /// In en, this message translates to: + /// **'Devices'** + String get deviceTitlePrefix; + + /// No description provided for @roomCheck. + /// + /// In en, this message translates to: + /// **'Room check'** + String get roomCheck; + + /// No description provided for @deviceQuestion. + /// + /// In en, this message translates to: + /// **'Which smart devices do you use in this room?'** + String get deviceQuestion; + + /// No description provided for @deviceQuestionHint. + /// + /// In en, this message translates to: + /// **'Tap a device to answer its questions.'** + String get deviceQuestionHint; + + /// No description provided for @noKnownDevices. + /// + /// In en, this message translates to: + /// **'No known devices for this room. You can add your own device.'** + String get noKnownDevices; + + /// No description provided for @addDevice. + /// + /// In en, this message translates to: + /// **'Add\ndevice'** + String get addDevice; + + /// No description provided for @noDevice. + /// + /// In en, this message translates to: + /// **'No device'** + String get noDevice; + + /// No description provided for @nextRoom. + /// + /// In en, this message translates to: + /// **'Next room'** + String get nextRoom; + + /// No description provided for @deleteDeviceTitle. + /// + /// In en, this message translates to: + /// **'Delete device?'** + String get deleteDeviceTitle; + + /// No description provided for @deleteDeviceBody. + /// + /// In en, this message translates to: + /// **'This custom device will be deleted. All linked instances will also be removed.'** + String get deleteDeviceBody; + + /// No description provided for @delete. + /// + /// In en, this message translates to: + /// **'Delete'** + String get delete; + + /// No description provided for @cancel. + /// + /// In en, this message translates to: + /// **'Cancel'** + String get cancel; + + /// No description provided for @confirm. + /// + /// In en, this message translates to: + /// **'Confirm'** + String get confirm; + + /// No description provided for @noDeviceDialogTitle. + /// + /// In en, this message translates to: + /// **'No devices in this room?'** + String get noDeviceDialogTitle; + + /// No description provided for @noDeviceDialogBody. + /// + /// In en, this message translates to: + /// **'This room will be completed without devices and will not affect scoring.'** + String get noDeviceDialogBody; + + /// No description provided for @noDeviceDialogBodyWithExisting. + /// + /// In en, this message translates to: + /// **'Existing device selections for this room will be discarded. This room will be completed without devices and will not affect scoring.'** + String get noDeviceDialogBodyWithExisting; + + /// No description provided for @questionnaireTitle. + /// + /// In en, this message translates to: + /// **'Questions'** + String get questionnaireTitle; + + /// No description provided for @connectedDevice. + /// + /// In en, this message translates to: + /// **'Connected device'** + String get connectedDevice; + + /// No description provided for @done. + /// + /// In en, this message translates to: + /// **'Done'** + String get done; + + /// No description provided for @yes. + /// + /// In en, this message translates to: + /// **'Yes'** + String get yes; + + /// No description provided for @no. + /// + /// In en, this message translates to: + /// **'No'** + String get no; + + /// No description provided for @dontKnow. + /// + /// In en, this message translates to: + /// **'I don\'t know'** + String get dontKnow; + + /// No description provided for @notApplicableForDevice. + /// + /// In en, this message translates to: + /// **'This question does not apply to my device'** + String get notApplicableForDevice; + + /// No description provided for @languageDialogTitle. + /// + /// In en, this message translates to: + /// **'Choose language'** + String get languageDialogTitle; + + /// No description provided for @currentLanguage. + /// + /// In en, this message translates to: + /// **'Current language'** + String get currentLanguage; + + /// No description provided for @aboutScreenTitle. + /// + /// In en, this message translates to: + /// **'About the app'** + String get aboutScreenTitle; + + /// No description provided for @faqScreenTitle. + /// + /// In en, this message translates to: + /// **'Frequently Asked Questions'** + String get faqScreenTitle; + + /// No description provided for @aboutSubtitle. + /// + /// In en, this message translates to: + /// **'Research project on smart home privacy'** + String get aboutSubtitle; + + /// No description provided for @aboutProjectName. + /// + /// In en, this message translates to: + /// **'Simplications'** + String get aboutProjectName; + + /// No description provided for @aboutPartnerTuChemnitz. + /// + /// In en, this message translates to: + /// **'Chemnitz University of Technology'** + String get aboutPartnerTuChemnitz; + + /// No description provided for @aboutPartnerHsAnhalt. + /// + /// In en, this message translates to: + /// **'Anhalt University of Applied Sciences'** + String get aboutPartnerHsAnhalt; + + /// No description provided for @aboutPartnerVzSachsen. + /// + /// In en, this message translates to: + /// **'Consumer Center Saxony'** + String get aboutPartnerVzSachsen; + + /// No description provided for @aboutWebsiteSimplicationsLabel. + /// + /// In en, this message translates to: + /// **'simplications.tucmi.de'** + String get aboutWebsiteSimplicationsLabel; + + /// No description provided for @aboutWebsiteSimplicationsUrl. + /// + /// In en, this message translates to: + /// **'https://simplications.tucmi.de'** + String get aboutWebsiteSimplicationsUrl; + + /// No description provided for @aboutWebsiteTuChemnitzLabel. + /// + /// In en, this message translates to: + /// **'tu-chemnitz.de'** + String get aboutWebsiteTuChemnitzLabel; + + /// No description provided for @aboutWebsiteTuChemnitzUrl. + /// + /// In en, this message translates to: + /// **'https://www.tu-chemnitz.de'** + String get aboutWebsiteTuChemnitzUrl; + + /// No description provided for @aboutWebsiteHsAnhaltLabel. + /// + /// In en, this message translates to: + /// **'hs-anhalt.de'** + String get aboutWebsiteHsAnhaltLabel; + + /// No description provided for @aboutWebsiteHsAnhaltUrl. + /// + /// In en, this message translates to: + /// **'https://www.hs-anhalt.de'** + String get aboutWebsiteHsAnhaltUrl; + + /// No description provided for @aboutWebsiteVzSachsenLabel. + /// + /// In en, this message translates to: + /// **'verbraucherzentrale-sachsen.de'** + String get aboutWebsiteVzSachsenLabel; + + /// No description provided for @aboutWebsiteVzSachsenUrl. + /// + /// In en, this message translates to: + /// **'https://www.verbraucherzentrale-sachsen.de'** + String get aboutWebsiteVzSachsenUrl; + + /// No description provided for @aboutWebsitePlatformPrivacyLabel. + /// + /// In en, this message translates to: + /// **'plattform-privatheit.de'** + String get aboutWebsitePlatformPrivacyLabel; + + /// No description provided for @aboutWebsitePlatformPrivacyUrl. + /// + /// In en, this message translates to: + /// **'https://www.plattform-privatheit.de'** + String get aboutWebsitePlatformPrivacyUrl; + + /// No description provided for @aboutWebsiteFundingAgencyLabel. + /// + /// In en, this message translates to: + /// **'bmftr.bund.de'** + String get aboutWebsiteFundingAgencyLabel; + + /// No description provided for @aboutWebsiteFundingAgencyUrl. + /// + /// In en, this message translates to: + /// **'https://www.bmftr.bund.de'** + String get aboutWebsiteFundingAgencyUrl; + + /// No description provided for @faqQuestionWhatIs. + /// + /// In en, this message translates to: + /// **'What is Simplications?'** + String get faqQuestionWhatIs; + + /// No description provided for @faqAnswerWhatIs. + /// + /// In en, this message translates to: + /// **'Simplications is a research project on smart-home privacy. This app is one part of the project and guides you room by room through your devices with practical recommendations based on your answers.'** + String get faqAnswerWhatIs; + + /// No description provided for @faqQuestionHowWorks. + /// + /// In en, this message translates to: + /// **'How does the check work?'** + String get faqQuestionHowWorks; + + /// No description provided for @faqAnswerHowWorks. + /// + /// In en, this message translates to: + /// **'You select a room, add your smart devices, answer device-specific questions, and receive a risk profile with prioritized actions.'** + String get faqAnswerHowWorks; + + /// No description provided for @faqQuestionNoPolicy. + /// + /// In en, this message translates to: + /// **'Why is there no data protection policy?'** + String get faqQuestionNoPolicy; + + /// No description provided for @faqAnswerNoPolicy. + /// + /// In en, this message translates to: + /// **'Because we do not collect your data.'** + String get faqAnswerNoPolicy; + + /// No description provided for @faqQuestionDataStored. + /// + /// In en, this message translates to: + /// **'Where is my data stored?'** + String get faqQuestionDataStored; + + /// No description provided for @faqAnswerDataStored. + /// + /// In en, this message translates to: + /// **'Your assessment data is stored locally on your device. You can delete all stored data at any time in the About screen.'** + String get faqAnswerDataStored; + + /// No description provided for @faqQuestionNoDevice. + /// + /// In en, this message translates to: + /// **'What if my device is not listed?'** + String get faqQuestionNoDevice; + + /// No description provided for @faqAnswerNoDevice. + /// + /// In en, this message translates to: + /// **'You can add custom devices and still complete the check. The recommendations then rely on your provided setup and answers.'** + String get faqAnswerNoDevice; + + /// No description provided for @faqQuestionRiskMeaning. + /// + /// In en, this message translates to: + /// **'What do low, medium, and high risk mean?'** + String get faqQuestionRiskMeaning; + + /// No description provided for @faqAnswerRiskMeaning. + /// + /// In en, this message translates to: + /// **'They indicate how strongly your current configuration may expose privacy-related risks. They are guidance levels, not legal or technical certification.'** + String get faqAnswerRiskMeaning; + + /// No description provided for @faqQuestionLegalAdvice. + /// + /// In en, this message translates to: + /// **'Is this legal advice?'** + String get faqQuestionLegalAdvice; + + /// No description provided for @faqAnswerLegalAdvice. + /// + /// In en, this message translates to: + /// **'No. Simplications provides practical orientation and recommendations, but does not replace legal or professional security consultation.'** + String get faqAnswerLegalAdvice; + + /// No description provided for @faqQuestionCanShare. + /// + /// In en, this message translates to: + /// **'Can I share my results?'** + String get faqQuestionCanShare; + + /// No description provided for @faqAnswerCanShare. + /// + /// In en, this message translates to: + /// **'Yes. You can export and share your summary as text or PDF directly from the results screen.'** + String get faqAnswerCanShare; + + /// No description provided for @websiteOpenFailed. + /// + /// In en, this message translates to: + /// **'Could not open website.'** + String get websiteOpenFailed; + + /// No description provided for @deleteAllDataTitle. + /// + /// In en, this message translates to: + /// **'Delete all data?'** + String get deleteAllDataTitle; + + /// No description provided for @deleteAllDataBody. + /// + /// In en, this message translates to: + /// **'All captured rooms, devices, and answers will be permanently deleted. This action cannot be undone.'** + String get deleteAllDataBody; + + /// No description provided for @deleteAllDataButton. + /// + /// In en, this message translates to: + /// **'Delete data'** + String get deleteAllDataButton; + + /// No description provided for @allDataDeleted. + /// + /// In en, this message translates to: + /// **'All saved data has been deleted.'** + String get allDataDeleted; + + /// No description provided for @projectPartners. + /// + /// In en, this message translates to: + /// **'Project partners'** + String get projectPartners; + + /// No description provided for @coordinationFunding. + /// + /// In en, this message translates to: + /// **'Coordination & Funding'** + String get coordinationFunding; + + /// No description provided for @coordination. + /// + /// In en, this message translates to: + /// **'Coordination'** + String get coordination; + + /// No description provided for @platformPrivacy. + /// + /// In en, this message translates to: + /// **'Platform Privacy'** + String get platformPrivacy; + + /// No description provided for @fundingAgency. + /// + /// In en, this message translates to: + /// **'Funding body'** + String get fundingAgency; + + /// No description provided for @fundingAgencyValue. + /// + /// In en, this message translates to: + /// **'German Federal Ministry of Research, Technology and Space\nGrant 16KIS1868K'** + String get fundingAgencyValue; + + /// No description provided for @website. + /// + /// In en, this message translates to: + /// **'Website'** + String get website; + + /// No description provided for @dangerZone. + /// + /// In en, this message translates to: + /// **'Danger zone'** + String get dangerZone; + + /// No description provided for @dangerZoneWarning. + /// + /// In en, this message translates to: + /// **'Warning: This action permanently removes all saved app data.'** + String get dangerZoneWarning; + + /// No description provided for @expertModeTitle. + /// + /// In en, this message translates to: + /// **'Expert mode'** + String get expertModeTitle; + + /// No description provided for @expertModeToggleLabel. + /// + /// In en, this message translates to: + /// **'Enable detailed expert mode'** + String get expertModeToggleLabel; + + /// No description provided for @expertModeToggleHint. + /// + /// In en, this message translates to: + /// **'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'** + String get expertModeToggleHint; + + /// No description provided for @expertModeSourcesHint. + /// + /// In en, this message translates to: + /// **'Methodologically inspired by the following research projects:'** + String get expertModeSourcesHint; + + /// No description provided for @expertModeSourceCmuLabel. + /// + /// In en, this message translates to: + /// **'CMU IoT Security & Privacy Label (CISPL)'** + String get expertModeSourceCmuLabel; + + /// No description provided for @expertModeSourceCmuUrl. + /// + /// In en, this message translates to: + /// **'https://iotsecurityprivacy.org/labels'** + String get expertModeSourceCmuUrl; + + /// No description provided for @expertModeSourceUnboxingLabel. + /// + /// In en, this message translates to: + /// **'Unboxing.IoT.Privacy (community platform)'** + String get expertModeSourceUnboxingLabel; + + /// No description provided for @expertModeSourceUnboxingUrl. + /// + /// In en, this message translates to: + /// **'https://iot-privacy.info/project/'** + String get expertModeSourceUnboxingUrl; + + /// No description provided for @expertModeQuestionnaireHint. + /// + /// In en, this message translates to: + /// **'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'** + String get expertModeQuestionnaireHint; + + /// No description provided for @roomDeleteTitle. + /// + /// In en, this message translates to: + /// **'Delete room?'** + String get roomDeleteTitle; + + /// No description provided for @roomDeleteBody. + /// + /// In en, this message translates to: + /// **'This custom room will be deleted. All linked devices will also be removed.'** + String get roomDeleteBody; + + /// No description provided for @add. + /// + /// In en, this message translates to: + /// **'Add'** + String get add; + + /// No description provided for @addRoomDialogTitle. + /// + /// In en, this message translates to: + /// **'Add new room'** + String get addRoomDialogTitle; + + /// No description provided for @roomName. + /// + /// In en, this message translates to: + /// **'Room name'** + String get roomName; + + /// No description provided for @roomNameHint. + /// + /// In en, this message translates to: + /// **'e.g. Living room, Garage'** + String get roomNameHint; + + /// No description provided for @chooseIcon. + /// + /// In en, this message translates to: + /// **'Choose icon:'** + String get chooseIcon; + + /// No description provided for @addDeviceDialogTitle. + /// + /// In en, this message translates to: + /// **'Add new device'** + String get addDeviceDialogTitle; + + /// No description provided for @deviceName. + /// + /// In en, this message translates to: + /// **'Device name'** + String get deviceName; + + /// No description provided for @deviceNameHint. + /// + /// In en, this message translates to: + /// **'e.g. My smart speaker'** + String get deviceNameHint; + + /// No description provided for @baseRiskLabel. + /// + /// In en, this message translates to: + /// **'Base risk score (0-100)'** + String get baseRiskLabel; + + /// No description provided for @baseRiskHint. + /// + /// In en, this message translates to: + /// **'e.g. 30 (low) to 60 (high)'** + String get baseRiskHint; + + /// No description provided for @hasCamera. + /// + /// In en, this message translates to: + /// **'Has camera?'** + String get hasCamera; + + /// No description provided for @hasMicrophone. + /// + /// In en, this message translates to: + /// **'Has microphone?'** + String get hasMicrophone; + + /// No description provided for @camera. + /// + /// In en, this message translates to: + /// **'Camera'** + String get camera; + + /// No description provided for @microphone. + /// + /// In en, this message translates to: + /// **'Microphone'** + String get microphone; + + /// No description provided for @summaryTitle. + /// + /// In en, this message translates to: + /// **'Your result'** + String get summaryTitle; + + /// No description provided for @shareResult. + /// + /// In en, this message translates to: + /// **'Share result'** + String get shareResult; + + /// No description provided for @shareAsText. + /// + /// In en, this message translates to: + /// **'Share as text'** + String get shareAsText; + + /// No description provided for @shareAsPdf. + /// + /// In en, this message translates to: + /// **'Share as PDF'** + String get shareAsPdf; + + /// No description provided for @restart. + /// + /// In en, this message translates to: + /// **'Restart'** + String get restart; + + /// No description provided for @noDevicesCaptured. + /// + /// In en, this message translates to: + /// **'No devices captured.'** + String get noDevicesCaptured; + + /// No description provided for @noDevicesHint. + /// + /// In en, this message translates to: + /// **'Restart and add devices to receive an assessment.'** + String get noDevicesHint; + + /// No description provided for @highRisk. + /// + /// In en, this message translates to: + /// **'High risk'** + String get highRisk; + + /// No description provided for @mediumRisk. + /// + /// In en, this message translates to: + /// **'Medium risk'** + String get mediumRisk; + + /// No description provided for @lowRisk. + /// + /// In en, this message translates to: + /// **'Low risk'** + String get lowRisk; + + /// No description provided for @exportFailed. + /// + /// In en, this message translates to: + /// **'Export failed'** + String get exportFailed; + + /// No description provided for @summaryShareSubject. + /// + /// In en, this message translates to: + /// **'Simplications result'** + String get summaryShareSubject; + + /// No description provided for @summarySharePdfText. + /// + /// In en, this message translates to: + /// **'Simplications report as PDF'** + String get summarySharePdfText; + + /// No description provided for @overview. + /// + /// In en, this message translates to: + /// **'Overview'** + String get overview; + + /// No description provided for @evaluatedDevices. + /// + /// In en, this message translates to: + /// **'Evaluated devices'** + String get evaluatedDevices; + + /// No description provided for @skippedDevicesHint. + /// + /// In en, this message translates to: + /// **'{count} devices skipped because the questionnaire was not completed.'** + String skippedDevicesHint(Object count); + + /// No description provided for @overallRisk. + /// + /// In en, this message translates to: + /// **'Overall risk'** + String get overallRisk; + + /// No description provided for @generalRecommendations. + /// + /// In en, this message translates to: + /// **'General recommendations'** + String get generalRecommendations; + + /// No description provided for @generalRecommendationsHint. + /// + /// In en, this message translates to: + /// **'These measures apply to your whole smart home regardless of individual devices.'** + String get generalRecommendationsHint; + + /// No description provided for @fullCatalog. + /// + /// In en, this message translates to: + /// **'Full action catalog'** + String get fullCatalog; + + /// No description provided for @catalogButton. + /// + /// In en, this message translates to: + /// **'Open full action catalog'** + String get catalogButton; + + /// No description provided for @risk. + /// + /// In en, this message translates to: + /// **'Risk'** + String get risk; + + /// No description provided for @note. + /// + /// In en, this message translates to: + /// **'Note'** + String get note; + + /// No description provided for @recommendations. + /// + /// In en, this message translates to: + /// **'Recommendations'** + String get recommendations; + + /// No description provided for @urgent. + /// + /// In en, this message translates to: + /// **'Urgent'** + String get urgent; + + /// No description provided for @recommended. + /// + /// In en, this message translates to: + /// **'Recommended'** + String get recommended; + + /// No description provided for @optional. + /// + /// In en, this message translates to: + /// **'Optional'** + String get optional; + + /// No description provided for @social. + /// + /// In en, this message translates to: + /// **'Social'** + String get social; + + /// No description provided for @technical. + /// + /// In en, this message translates to: + /// **'Technical'** + String get technical; + + /// No description provided for @security. + /// + /// In en, this message translates to: + /// **'Security'** + String get security; + + /// No description provided for @smartHomePrivacyHeader. + /// + /// In en, this message translates to: + /// **'Your smart home privacy'** + String get smartHomePrivacyHeader; + + /// No description provided for @devicesRated. + /// + /// In en, this message translates to: + /// **'rated devices'** + String get devicesRated; + + /// No description provided for @howRiskCalculated. + /// + /// In en, this message translates to: + /// **'How is risk calculated?'** + String get howRiskCalculated; + + /// No description provided for @totalScore. + /// + /// In en, this message translates to: + /// **'Total'** + String get totalScore; + + /// No description provided for @catalogSnackBarPrefix. + /// + /// In en, this message translates to: + /// **'Catalog'** + String get catalogSnackBarPrefix; + + /// No description provided for @reportExportedAt. + /// + /// In en, this message translates to: + /// **'Exported at'** + String get reportExportedAt; + + /// No description provided for @noActionLow. + /// + /// In en, this message translates to: + /// **'Everything is fine - no actions required.'** + String get noActionLow; + + /// No description provided for @noActionMedium. + /// + /// In en, this message translates to: + /// **'No concrete actions can currently be derived from your answers, but a medium residual risk remains.'** + String get noActionMedium; + + /// No description provided for @noActionHigh. + /// + /// In en, this message translates to: + /// **'No concrete actions can currently be derived from your answers, but a high residual risk remains.'** + String get noActionHigh; + + /// No description provided for @overallLow. + /// + /// In en, this message translates to: + /// **'Well done! Your devices are mostly configured securely. Still review the general recommendations.'** + String get overallLow; + + /// No description provided for @overallMedium. + /// + /// In en, this message translates to: + /// **'There is room for improvement. Review the recommendations for each device.'** + String get overallMedium; + + /// No description provided for @overallHigh. + /// + /// In en, this message translates to: + /// **'Several devices have significant privacy/data-protection risks. Please implement high-priority measures promptly.'** + String get overallHigh; + + /// No description provided for @dontKnowHint. + /// + /// In en, this message translates to: + /// **' {count} answer{suffix} were marked as \"I don\'t know\" - take time to understand your device settings better.'** + String dontKnowHint(Object count, Object suffix); + + /// No description provided for @room_living. + /// + /// In en, this message translates to: + /// **'Living room'** + String get room_living; + + /// No description provided for @room_kitchen. + /// + /// In en, this message translates to: + /// **'Kitchen'** + String get room_kitchen; + + /// No description provided for @room_bedroom. + /// + /// In en, this message translates to: + /// **'Bedroom'** + String get room_bedroom; + + /// No description provided for @room_child_bedroom. + /// + /// In en, this message translates to: + /// **'Child\'s bedroom'** + String get room_child_bedroom; + + /// No description provided for @room_bathroom. + /// + /// In en, this message translates to: + /// **'Bathroom'** + String get room_bathroom; + + /// No description provided for @room_office. + /// + /// In en, this message translates to: + /// **'Office'** + String get room_office; + + /// No description provided for @room_hallway. + /// + /// In en, this message translates to: + /// **'Hallway / Entrance'** + String get room_hallway; + + /// No description provided for @room_garden. + /// + /// In en, this message translates to: + /// **'Garden / Outdoor area'** + String get room_garden; + + /// No description provided for @room_basement. + /// + /// In en, this message translates to: + /// **'Basement / Pantry'** + String get room_basement; + + /// No description provided for @room_whole_home. + /// + /// In en, this message translates to: + /// **'Entire home'** + String get room_whole_home; + + /// No description provided for @device_simple_sensor. + /// + /// In en, this message translates to: + /// **'Basic sensor (e.g., motion or door sensor)'** + String get device_simple_sensor; + + /// No description provided for @device_humidity_sensor. + /// + /// In en, this message translates to: + /// **'Humidity sensor'** + String get device_humidity_sensor; + + /// No description provided for @device_temperature_sensor. + /// + /// In en, this message translates to: + /// **'Temperature sensor'** + String get device_temperature_sensor; + + /// No description provided for @device_light_sensor. + /// + /// In en, this message translates to: + /// **'Light sensor'** + String get device_light_sensor; + + /// No description provided for @device_smart_speaker. + /// + /// In en, this message translates to: + /// **'Smart speaker / voice assistant'** + String get device_smart_speaker; + + /// No description provided for @device_smart_display. + /// + /// In en, this message translates to: + /// **'Smart display (e.g., Nest Hub)'** + String get device_smart_display; + + /// No description provided for @device_smart_tv. + /// + /// In en, this message translates to: + /// **'Smart TV'** + String get device_smart_tv; + + /// No description provided for @device_indoor_camera. + /// + /// In en, this message translates to: + /// **'Smart indoor camera'** + String get device_indoor_camera; + + /// No description provided for @device_outdoor_camera. + /// + /// In en, this message translates to: + /// **'Smart outdoor camera'** + String get device_outdoor_camera; + + /// No description provided for @device_doorbell_camera. + /// + /// In en, this message translates to: + /// **'Smart doorbell with camera'** + String get device_doorbell_camera; + + /// No description provided for @device_baby_monitor. + /// + /// In en, this message translates to: + /// **'Baby monitor / baby camera'** + String get device_baby_monitor; + + /// No description provided for @device_robot_vacuum. + /// + /// In en, this message translates to: + /// **'Robot vacuum'** + String get device_robot_vacuum; + + /// No description provided for @device_smart_fridge. + /// + /// In en, this message translates to: + /// **'Smart fridge'** + String get device_smart_fridge; + + /// No description provided for @device_smart_oven. + /// + /// In en, this message translates to: + /// **'Smart oven / stove'** + String get device_smart_oven; + + /// No description provided for @device_smart_coffee. + /// + /// In en, this message translates to: + /// **'Smart coffee machine'** + String get device_smart_coffee; + + /// No description provided for @device_smart_washing. + /// + /// In en, this message translates to: + /// **'Smart washer / dryer'** + String get device_smart_washing; + + /// No description provided for @device_smart_thermostat. + /// + /// In en, this message translates to: + /// **'Smart thermostat / heating control'** + String get device_smart_thermostat; + + /// No description provided for @device_smart_plug. + /// + /// In en, this message translates to: + /// **'Smart plug'** + String get device_smart_plug; + + /// No description provided for @device_smart_light. + /// + /// In en, this message translates to: + /// **'Smart lighting'** + String get device_smart_light; + + /// No description provided for @device_smart_lock. + /// + /// In en, this message translates to: + /// **'Smart door lock'** + String get device_smart_lock; + + /// No description provided for @device_smart_blind. + /// + /// In en, this message translates to: + /// **'Smart blind / shutter'** + String get device_smart_blind; + + /// No description provided for @device_fitness_tracker. + /// + /// In en, this message translates to: + /// **'Fitness tracker / smartwatch'** + String get device_fitness_tracker; + + /// No description provided for @device_smart_toy. + /// + /// In en, this message translates to: + /// **'Smart toy'** + String get device_smart_toy; + + /// No description provided for @device_smart_router. + /// + /// In en, this message translates to: + /// **'Smart router / mesh system'** + String get device_smart_router; + + /// No description provided for @device_smart_hub. + /// + /// In en, this message translates to: + /// **'Smart home hub (e.g., Homey, Home Assistant)'** + String get device_smart_hub; + + /// No description provided for @device_smart_meter. + /// + /// In en, this message translates to: + /// **'Intelligent electricity meter / smart meter'** + String get device_smart_meter; + + /// No description provided for @device_smart_irrigation. + /// + /// In en, this message translates to: + /// **'Smart irrigation system'** + String get device_smart_irrigation; + + /// No description provided for @device_smart_scale. + /// + /// In en, this message translates to: + /// **'Smart scale'** + String get device_smart_scale; + + /// No description provided for @device_smart_printer. + /// + /// In en, this message translates to: + /// **'Smart printer'** + String get device_smart_printer; + + /// No description provided for @q_password_text. + /// + /// In en, this message translates to: + /// **'Have you changed the default password of the device or its linked account?'** + String get q_password_text; + + /// No description provided for @q_password_hint. + /// + /// In en, this message translates to: + /// **'Default passwords are often publicly known and easy to crack.'** + String get q_password_hint; + + /// No description provided for @q_updates_text. + /// + /// In en, this message translates to: + /// **'Are automatic security updates enabled for the device?'** + String get q_updates_text; + + /// No description provided for @q_updates_hint. + /// + /// In en, this message translates to: + /// **'Updates close known security vulnerabilities promptly.'** + String get q_updates_hint; + + /// No description provided for @q_network_text. + /// + /// In en, this message translates to: + /// **'Is the device connected to a separate smart home or IoT Wi-Fi network?'** + String get q_network_text; + + /// No description provided for @q_network_hint. + /// + /// In en, this message translates to: + /// **'A dedicated network for smart devices protects your main home network.'** + String get q_network_hint; + + /// No description provided for @q_informed_text. + /// + /// In en, this message translates to: + /// **'Are all people in the household informed about this device and its function?'** + String get q_informed_text; + + /// No description provided for @q_informed_hint. + /// + /// In en, this message translates to: + /// **'All household members should know what data the device captures.'** + String get q_informed_hint; + + /// No description provided for @q_permissions_text. + /// + /// In en, this message translates to: + /// **'Have you disabled unnecessary app permissions (e.g., location, contacts)?'** + String get q_permissions_text; + + /// No description provided for @q_permissions_hint. + /// + /// In en, this message translates to: + /// **'Only permissions that are truly needed should be enabled.'** + String get q_permissions_hint; + + /// No description provided for @q_mic_active_text. + /// + /// In en, this message translates to: + /// **'Do you deactivate the microphone when you are not actively using it?'** + String get q_mic_active_text; + + /// No description provided for @q_mic_active_hint. + /// + /// In en, this message translates to: + /// **'Smart speakers and devices with microphones can be activated unintentionally.'** + String get q_mic_active_hint; + + /// No description provided for @q_camera_consent_text. + /// + /// In en, this message translates to: + /// **'Does the camera only record areas for which everyone affected has given their consent?'** + String get q_camera_consent_text; + + /// No description provided for @q_camera_consent_hint. + /// + /// In en, this message translates to: + /// **'Cameras in communal or private areas require the consent of all residents.'** + String get q_camera_consent_hint; + + /// No description provided for @q_sensor_frequency_text. + /// + /// In en, this message translates to: + /// **'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'** + String get q_sensor_frequency_text; + + /// No description provided for @q_sensor_frequency_hint. + /// + /// In en, this message translates to: + /// **'A lower measurement frequency produces less data and limits inferences about your behavior.'** + String get q_sensor_frequency_hint; + + /// No description provided for @q_sensor_data_deletion_text. + /// + /// In en, this message translates to: + /// **'Are older measurement values deleted automatically or on request?'** + String get q_sensor_data_deletion_text; + + /// No description provided for @q_sensor_data_deletion_hint. + /// + /// In en, this message translates to: + /// **'Old historical data should not be stored permanently. Check retention settings.'** + String get q_sensor_data_deletion_hint; + + /// No description provided for @q_sensor_granularity_text. + /// + /// In en, this message translates to: + /// **'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'** + String get q_sensor_granularity_text; + + /// No description provided for @q_sensor_granularity_hint. + /// + /// In en, this message translates to: + /// **'Less granular views help prevent inferences about precise presence or behavior patterns.'** + String get q_sensor_granularity_hint; + + /// No description provided for @q_sensor_local_text. + /// + /// In en, this message translates to: + /// **'Is measurement data processed and stored locally without being transferred to the cloud?'** + String get q_sensor_local_text; + + /// No description provided for @q_sensor_local_hint. + /// + /// In en, this message translates to: + /// **'Local processing prevents the vendor from accessing your measurement data.'** + String get q_sensor_local_hint; + + /// No description provided for @q_voice_history_text. + /// + /// In en, this message translates to: + /// **'Can you delete voice recordings from device history or disable this feature?'** + String get q_voice_history_text; + + /// No description provided for @q_voice_history_hint. + /// + /// In en, this message translates to: + /// **'BSI recommendation: Minimize recording retention or delete recordings regularly.'** + String get q_voice_history_hint; + + /// No description provided for @q_voice_local_text. + /// + /// In en, this message translates to: + /// **'Is voice processing performed partly on the device locally?'** + String get q_voice_local_text; + + /// No description provided for @q_voice_local_hint. + /// + /// In en, this message translates to: + /// **'Local processing reduces the amount of data sent to the cloud.'** + String get q_voice_local_hint; - String appTitle() => _value('appTitle'); - String welcomeTitle() => _value('welcomeTitle'); - String welcomeDescription() => _value('welcomeDescription'); - String stepSelectRooms() => _value('stepSelectRooms'); - String stepCaptureDevices() => _value('stepCaptureDevices'); - String stepAnswerQuestions() => _value('stepAnswerQuestions'); - String stepGetRisk() => _value('stepGetRisk'); - String start() => _value('start'); - String resume() => _value('resume'); - String about() => _value('about'); - String faq() => _value('faq'); - String roomSelectionTitle() => _value('roomSelectionTitle'); - String roomQuestion() => _value('roomQuestion'); - String roomInstruction() => _value('roomInstruction'); - String results() => _value('results'); - String alreadyEvaluated() => _value('alreadyEvaluated'); - String notCompleted() => _value('notCompleted'); - String addRoom() => _value('addRoom'); - String roomCheck() => _value('roomCheck'); - String deviceQuestion() => _value('deviceQuestion'); - String deviceQuestionHint() => _value('deviceQuestionHint'); - String noKnownDevices() => _value('noKnownDevices'); - String addDevice() => _value('addDevice'); - String noDevice() => _value('noDevice'); - String nextRoom() => _value('nextRoom'); - String deleteDeviceTitle() => _value('deleteDeviceTitle'); - String deleteDeviceBody() => _value('deleteDeviceBody'); - String delete() => _value('delete'); - String cancel() => _value('cancel'); - String confirm() => _value('confirm'); - String noDeviceDialogTitle() => _value('noDeviceDialogTitle'); - String noDeviceDialogBody() => _value('noDeviceDialogBody'); - String noDeviceDialogBodyWithExisting() => - _value('noDeviceDialogBodyWithExisting'); - String questionnaireTitle() => _value('questionnaireTitle'); - String connectedDevice() => _value('connectedDevice'); - String done() => _value('done'); - String yes() => _value('yes'); - String no() => _value('no'); - String dontKnow() => _value('dontKnow'); - String notApplicableForDevice() => _value('notApplicableForDevice'); - String languageDialogTitle() => _value('languageDialogTitle'); - String currentLanguage() => _value('currentLanguage'); - String aboutScreenTitle() => _value('aboutScreenTitle'); - String faqScreenTitle() => _value('faqScreenTitle'); - String aboutSubtitle() => _value('aboutSubtitle'); - String aboutProjectName() => _value('aboutProjectName'); - String aboutPartnerTuChemnitz() => _value('aboutPartnerTuChemnitz'); - String aboutPartnerHsAnhalt() => _value('aboutPartnerHsAnhalt'); - String aboutPartnerVzSachsen() => _value('aboutPartnerVzSachsen'); - String aboutWebsiteSimplicationsLabel() => - _value('aboutWebsiteSimplicationsLabel'); - String aboutWebsiteSimplicationsUrl() => - _value('aboutWebsiteSimplicationsUrl'); - String aboutWebsiteTuChemnitzLabel() => _value('aboutWebsiteTuChemnitzLabel'); - String aboutWebsiteTuChemnitzUrl() => _value('aboutWebsiteTuChemnitzUrl'); - String aboutWebsiteHsAnhaltLabel() => _value('aboutWebsiteHsAnhaltLabel'); - String aboutWebsiteHsAnhaltUrl() => _value('aboutWebsiteHsAnhaltUrl'); - String aboutWebsiteVzSachsenLabel() => _value('aboutWebsiteVzSachsenLabel'); - String aboutWebsiteVzSachsenUrl() => _value('aboutWebsiteVzSachsenUrl'); - String aboutWebsitePlatformPrivacyLabel() => - _value('aboutWebsitePlatformPrivacyLabel'); - String aboutWebsitePlatformPrivacyUrl() => - _value('aboutWebsitePlatformPrivacyUrl'); - String aboutWebsiteFundingAgencyLabel() => - _value('aboutWebsiteFundingAgencyLabel'); - String aboutWebsiteFundingAgencyUrl() => - _value('aboutWebsiteFundingAgencyUrl'); - String faqQuestionWhatIs() => _value('faqQuestionWhatIs'); - String faqAnswerWhatIs() => _value('faqAnswerWhatIs'); - String faqQuestionHowWorks() => _value('faqQuestionHowWorks'); - String faqAnswerHowWorks() => _value('faqAnswerHowWorks'); - String faqQuestionNoPolicy() => _value('faqQuestionNoPolicy'); - String faqAnswerNoPolicy() => _value('faqAnswerNoPolicy'); - String faqQuestionDataStored() => _value('faqQuestionDataStored'); - String faqAnswerDataStored() => _value('faqAnswerDataStored'); - String faqQuestionNoDevice() => _value('faqQuestionNoDevice'); - String faqAnswerNoDevice() => _value('faqAnswerNoDevice'); - String faqQuestionRiskMeaning() => _value('faqQuestionRiskMeaning'); - String faqAnswerRiskMeaning() => _value('faqAnswerRiskMeaning'); - String faqQuestionLegalAdvice() => _value('faqQuestionLegalAdvice'); - String faqAnswerLegalAdvice() => _value('faqAnswerLegalAdvice'); - String faqQuestionCanShare() => _value('faqQuestionCanShare'); - String faqAnswerCanShare() => _value('faqAnswerCanShare'); - String websiteOpenFailed() => _value('websiteOpenFailed'); - String deleteAllDataTitle() => _value('deleteAllDataTitle'); - String deleteAllDataBody() => _value('deleteAllDataBody'); - String deleteAllDataButton() => _value('deleteAllDataButton'); - String allDataDeleted() => _value('allDataDeleted'); - String projectPartners() => _value('projectPartners'); - String coordinationFunding() => _value('coordinationFunding'); - String coordination() => _value('coordination'); - String platformPrivacy() => _value('platformPrivacy'); - String fundingAgency() => _value('fundingAgency'); - String fundingAgencyValue() => _value('fundingAgencyValue'); - String website() => _value('website'); - String dangerZone() => _value('dangerZone'); - String dangerZoneWarning() => _value('dangerZoneWarning'); - String expertModeTitle() => _value('expertModeTitle'); - String expertModeToggleLabel() => _value('expertModeToggleLabel'); - String expertModeToggleHint() => _value('expertModeToggleHint'); - String expertModeSourcesHint() => _value('expertModeSourcesHint'); - String expertModeSourceCmuLabel() => _value('expertModeSourceCmuLabel'); - String expertModeSourceCmuUrl() => _value('expertModeSourceCmuUrl'); - String expertModeSourceUnboxingLabel() => - _value('expertModeSourceUnboxingLabel'); - String expertModeSourceUnboxingUrl() => _value('expertModeSourceUnboxingUrl'); - String expertModeQuestionnaireHint() => _value('expertModeQuestionnaireHint'); - String roomDeleteTitle() => _value('roomDeleteTitle'); - String roomDeleteBody() => _value('roomDeleteBody'); - String add() => _value('add'); - String addRoomDialogTitle() => _value('addRoomDialogTitle'); - String roomName() => _value('roomName'); - String roomNameHint() => _value('roomNameHint'); - String chooseIcon() => _value('chooseIcon'); - String addDeviceDialogTitle() => _value('addDeviceDialogTitle'); - String deviceName() => _value('deviceName'); - String deviceNameHint() => _value('deviceNameHint'); - String baseRiskLabel() => _value('baseRiskLabel'); - String baseRiskHint() => _value('baseRiskHint'); - String hasCamera() => _value('hasCamera'); - String hasMicrophone() => _value('hasMicrophone'); - String camera() => _value('camera'); - String microphone() => _value('microphone'); - String summaryTitle() => _value('summaryTitle'); - String shareResult() => _value('shareResult'); - String shareAsText() => _value('shareAsText'); - String shareAsPdf() => _value('shareAsPdf'); - String restart() => _value('restart'); - String noDevicesCaptured() => _value('noDevicesCaptured'); - String noDevicesHint() => _value('noDevicesHint'); - String highRisk() => _value('highRisk'); - String mediumRisk() => _value('mediumRisk'); - String lowRisk() => _value('lowRisk'); - String exportFailed() => _value('exportFailed'); - String summaryShareSubject() => _value('summaryShareSubject'); - String summarySharePdfText() => _value('summarySharePdfText'); - String overview() => _value('overview'); - String evaluatedDevices() => _value('evaluatedDevices'); - String skippedDevicesHint(int count) => - _value('skippedDevicesHint').replaceAll('{count}', '$count'); - String overallRisk() => _value('overallRisk'); - String generalRecommendations() => _value('generalRecommendations'); - String generalRecommendationsHint() => _value('generalRecommendationsHint'); - String fullCatalog() => _value('fullCatalog'); - String catalogButton() => _value('catalogButton'); - String risk() => _value('risk'); - String note() => _value('note'); - String recommendations() => _value('recommendations'); - String urgent() => _value('urgent'); - String recommended() => _value('recommended'); - String optional() => _value('optional'); - String social() => _value('social'); - String technical() => _value('technical'); - String security() => _value('security'); - String smartHomePrivacyHeader() => _value('smartHomePrivacyHeader'); - String devicesRated() => _value('devicesRated'); - String howRiskCalculated() => _value('howRiskCalculated'); - String totalScore() => _value('totalScore'); - String catalogSnackBarPrefix() => _value('catalogSnackBarPrefix'); - String reportExportedAt() => _value('reportExportedAt'); - String noActionLow() => _value('noActionLow'); - String noActionMedium() => _value('noActionMedium'); - String noActionHigh() => _value('noActionHigh'); - String overallLow() => _value('overallLow'); - String overallMedium() => _value('overallMedium'); - String overallHigh() => _value('overallHigh'); - String dontKnowHint(int count, {required String suffix}) => _value( - 'dontKnowHint', - ).replaceAll('{count}', '$count').replaceAll('{suffix}', suffix); - - String devicesTitle(String roomName) => - '${_value('deviceTitlePrefix')}: $roomName'; + /// No description provided for @q_skills_permissions_text. + /// + /// In en, this message translates to: + /// **'Do you regularly review which skills have access to your account?'** + String get q_skills_permissions_text; + + /// No description provided for @q_skills_permissions_hint. + /// + /// In en, this message translates to: + /// **'Third-party skills can access sensitive data. Enable only necessary skills.'** + String get q_skills_permissions_hint; + + /// No description provided for @q_video_encryption_text. + /// + /// In en, this message translates to: + /// **'Is video recording and transmission encrypted end-to-end?'** + String get q_video_encryption_text; + + /// No description provided for @q_video_encryption_hint. + /// + /// In en, this message translates to: + /// **'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'** + String get q_video_encryption_hint; + + /// No description provided for @q_video_storage_text. + /// + /// In en, this message translates to: + /// **'Are recordings stored locally (not only in the vendor cloud)?'** + String get q_video_storage_text; + + /// No description provided for @q_video_storage_hint. + /// + /// In en, this message translates to: + /// **'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'** + String get q_video_storage_hint; + + /// No description provided for @q_sharing_restrictions_text. + /// + /// In en, this message translates to: + /// **'Can you control who can access live view and recordings?'** + String get q_sharing_restrictions_text; + + /// No description provided for @q_sharing_restrictions_hint. + /// + /// In en, this message translates to: + /// **'You should be able to precisely control access to video recordings.'** + String get q_sharing_restrictions_hint; + + /// No description provided for @q_motion_detection_text. + /// + /// In en, this message translates to: + /// **'Can you disable or schedule motion detection when you are at home?'** + String get q_motion_detection_text; + + /// No description provided for @q_motion_detection_hint. + /// + /// In en, this message translates to: + /// **'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'** + String get q_motion_detection_hint; + + /// No description provided for @q_account_required_text. + /// + /// In en, this message translates to: + /// **'Can you use the device without a mandatory online account?'** + String get q_account_required_text; + + /// No description provided for @q_account_required_hint. + /// + /// In en, this message translates to: + /// **'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'** + String get q_account_required_hint; + + /// No description provided for @q_tracking_disabled_text. + /// + /// In en, this message translates to: + /// **'Can you completely disable advertising and tracking features?'** + String get q_tracking_disabled_text; + + /// No description provided for @q_tracking_disabled_hint. + /// + /// In en, this message translates to: + /// **'Smart TVs often collect viewing habit data. Look for privacy settings.'** + String get q_tracking_disabled_hint; + + /// No description provided for @q_local_mode_text. + /// + /// In en, this message translates to: + /// **'Can you use the device via HDMI or local sources without internet?'** + String get q_local_mode_text; + + /// No description provided for @q_local_mode_hint. + /// + /// In en, this message translates to: + /// **'Offline use protects usage data from being sent to the vendor.'** + String get q_local_mode_hint; + + /// No description provided for @q_data_collection_text. + /// + /// In en, this message translates to: + /// **'Do temperature history and schedules stay on-device (not sent to the vendor)?'** + String get q_data_collection_text; + + /// No description provided for @q_data_collection_hint. + /// + /// In en, this message translates to: + /// **'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'** + String get q_data_collection_hint; + + /// No description provided for @q_offline_control_text. + /// + /// In en, this message translates to: + /// **'Can you operate the thermostat offline (without internet)?'** + String get q_offline_control_text; + + /// No description provided for @q_offline_control_hint. + /// + /// In en, this message translates to: + /// **'Offline operation or local automation protects data from cloud access.'** + String get q_offline_control_hint; + + /// No description provided for @q_family_access_text. + /// + /// In en, this message translates to: + /// **'Can you control who may adjust heating (e.g., restrict guests)?'** + String get q_family_access_text; + + /// No description provided for @q_family_access_hint. + /// + /// In en, this message translates to: + /// **'Household members should have control without visitors changing everything.'** + String get q_family_access_hint; + + /// No description provided for @q_local_control_text. + /// + /// In en, this message translates to: + /// **'Can automations run locally without internet?'** + String get q_local_control_text; + + /// No description provided for @q_local_control_hint. + /// + /// In en, this message translates to: + /// **'Local scenes and schedules protect your privacy better.'** + String get q_local_control_hint; + + /// No description provided for @q_usage_tracking_text. + /// + /// In en, this message translates to: + /// **'Have you disabled or limited vendor collection of switching patterns and usage times?'** + String get q_usage_tracking_text; + + /// No description provided for @q_usage_tracking_hint. + /// + /// In en, this message translates to: + /// **'Usage patterns can reveal presence and habits. Check app privacy settings.'** + String get q_usage_tracking_hint; + + /// No description provided for @q_offline_fallback_text. + /// + /// In en, this message translates to: + /// **'Do devices still work if internet or app connection fails?'** + String get q_offline_fallback_text; + + /// No description provided for @q_offline_fallback_hint. + /// + /// In en, this message translates to: + /// **'Reliable local operation is important for daily use and privacy.'** + String get q_offline_fallback_hint; + + /// No description provided for @q_offline_unlock_text. + /// + /// In en, this message translates to: + /// **'Can you unlock the lock offline (e.g., with code or key)?'** + String get q_offline_unlock_text; + + /// No description provided for @q_offline_unlock_hint. + /// + /// In en, this message translates to: + /// **'Backup options prevent lockout during internet or power outages.'** + String get q_offline_unlock_hint; + + /// No description provided for @q_access_logging_text. + /// + /// In en, this message translates to: + /// **'Can you track who opened the lock and when?'** + String get q_access_logging_text; + + /// No description provided for @q_access_logging_hint. + /// + /// In en, this message translates to: + /// **'An access log helps you detect suspicious activity.'** + String get q_access_logging_hint; + + /// No description provided for @q_two_factor_text. + /// + /// In en, this message translates to: + /// **'Is two-factor authentication (2FA) available for the lock account?'** + String get q_two_factor_text; + + /// No description provided for @q_two_factor_hint. + /// + /// In en, this message translates to: + /// **'BSI recommendation: 2FA protects your account from unauthorized remote access.'** + String get q_two_factor_hint; + + /// No description provided for @q_map_privacy_text. + /// + /// In en, this message translates to: + /// **'Are created floor plans stored exclusively on the device locally?'** + String get q_map_privacy_text; + + /// No description provided for @q_map_privacy_hint. + /// + /// In en, this message translates to: + /// **'Home floor plans are sensitive information and should not be sent to the vendor.'** + String get q_map_privacy_hint; + + /// No description provided for @q_cloud_required_text. + /// + /// In en, this message translates to: + /// **'Does floor-plan navigation work without cloud connection?'** + String get q_cloud_required_text; + + /// No description provided for @q_cloud_required_hint. + /// + /// In en, this message translates to: + /// **'Devices with local navigation are more privacy-friendly because no room data is uploaded.'** + String get q_cloud_required_hint; + + /// No description provided for @q_vision_data_text. + /// + /// In en, this message translates to: + /// **'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'** + String get q_vision_data_text; + + /// No description provided for @q_vision_data_hint. + /// + /// In en, this message translates to: + /// **'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'** + String get q_vision_data_hint; + + /// No description provided for @q_parental_control_text. + /// + /// In en, this message translates to: + /// **'Are there parental control features to manage the toy?'** + String get q_parental_control_text; + + /// No description provided for @q_parental_control_hint. + /// + /// In en, this message translates to: + /// **'Parental controls should allow restricting contacts and features.'** + String get q_parental_control_hint; + + /// No description provided for @q_child_data_limits_text. + /// + /// In en, this message translates to: + /// **'Can you limit which personal data the toy collects?'** + String get q_child_data_limits_text; + + /// No description provided for @q_child_data_limits_hint. + /// + /// In en, this message translates to: + /// **'Child-focused devices should collect and store minimal data.'** + String get q_child_data_limits_hint; + + /// No description provided for @q_recording_disable_text. + /// + /// In en, this message translates to: + /// **'Can you disable audio and video recording on the device?'** + String get q_recording_disable_text; + + /// No description provided for @q_recording_disable_hint. + /// + /// In en, this message translates to: + /// **'BSI recommendation: Recordings of children should only be possible with explicit control.'** + String get q_recording_disable_hint; + + /// No description provided for @q_health_sharing_text. + /// + /// In en, this message translates to: + /// **'Can you control which third parties can access your health data?'** + String get q_health_sharing_text; + + /// No description provided for @q_health_sharing_hint. + /// + /// In en, this message translates to: + /// **'Health data is sensitive. Only authorized apps should have access.'** + String get q_health_sharing_hint; + + /// No description provided for @q_location_tracking_text. + /// + /// In en, this message translates to: + /// **'Can you disable location tracking when not needed?'** + String get q_location_tracking_text; + + /// No description provided for @q_location_tracking_hint. + /// + /// In en, this message translates to: + /// **'GPS tracking uses battery and can reveal movement patterns.'** + String get q_location_tracking_hint; + + /// No description provided for @q_expert_data_retention_duration_text. + /// + /// In en, this message translates to: + /// **'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'** + String get q_expert_data_retention_duration_text; + + /// No description provided for @q_expert_data_retention_duration_hint. + /// + /// In en, this message translates to: + /// **'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'** + String get q_expert_data_retention_duration_hint; + + /// No description provided for @q_expert_access_control_granular_text. + /// + /// In en, this message translates to: + /// **'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'** + String get q_expert_access_control_granular_text; + + /// No description provided for @q_expert_access_control_granular_hint. + /// + /// In en, this message translates to: + /// **'Granular access control reduces the risk of unauthorized access and misuse.'** + String get q_expert_access_control_granular_hint; + + /// No description provided for @q_expert_third_party_sharing_limited_text. + /// + /// In en, this message translates to: + /// **'Is third-party sharing disabled or clearly limited to necessary services?'** + String get q_expert_third_party_sharing_limited_text; + + /// No description provided for @q_expert_third_party_sharing_limited_hint. + /// + /// In en, this message translates to: + /// **'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'** + String get q_expert_third_party_sharing_limited_hint; + + /// No description provided for @q_expert_data_sale_disabled_text. + /// + /// In en, this message translates to: + /// **'Is the sale of your data excluded (or actively disabled, where possible)?'** + String get q_expert_data_sale_disabled_text; + + /// No description provided for @q_expert_data_sale_disabled_hint. + /// + /// In en, this message translates to: + /// **'An explicit \"no data sale\" option is a strong privacy signal.'** + String get q_expert_data_sale_disabled_hint; + + /// No description provided for @q_expert_update_support_window_text. + /// + /// In en, this message translates to: + /// **'Is it known how long the vendor guarantees security updates?'** + String get q_expert_update_support_window_text; + + /// No description provided for @q_expert_update_support_window_hint. + /// + /// In en, this message translates to: + /// **'A transparent update commitment reduces long-term security and privacy risks.'** + String get q_expert_update_support_window_hint; + + /// No description provided for @q_expert_vulnerability_process_text. + /// + /// In en, this message translates to: + /// **'Is there a documented process for reporting and fixing vulnerabilities?'** + String get q_expert_vulnerability_process_text; + + /// No description provided for @q_expert_vulnerability_process_hint. + /// + /// In en, this message translates to: + /// **'Prefer vendors that provide responsible disclosure policies or clear security contact information.'** + String get q_expert_vulnerability_process_hint; + + /// No description provided for @q_expert_offline_functionality_text. + /// + /// In en, this message translates to: + /// **'Does the device remain meaningfully usable with limited internet connectivity?'** + String get q_expert_offline_functionality_text; + + /// No description provided for @q_expert_offline_functionality_hint. + /// + /// In en, this message translates to: + /// **'More offline functionality often means less continuous data transfer to the cloud.'** + String get q_expert_offline_functionality_hint; + + /// No description provided for @q_expert_bystander_transparency_text. + /// + /// In en, this message translates to: + /// **'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'** + String get q_expert_bystander_transparency_text; + + /// No description provided for @q_expert_bystander_transparency_hint. + /// + /// In en, this message translates to: + /// **'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'** + String get q_expert_bystander_transparency_hint; + + /// No description provided for @q_expert_child_data_protection_text. + /// + /// In en, this message translates to: + /// **'Are child-data protections active (minimization, no profiling, restrictive sharing)?'** + String get q_expert_child_data_protection_text; + + /// No description provided for @q_expert_child_data_protection_hint. + /// + /// In en, this message translates to: + /// **'Devices in child-related contexts require especially strict privacy safeguards.'** + String get q_expert_child_data_protection_hint; + + /// No description provided for @q_expert_access_revocation_text. + /// + /// In en, this message translates to: + /// **'Can digital keys/access rights be revoked quickly and individually?'** + String get q_expert_access_revocation_text; + + /// No description provided for @q_expert_access_revocation_hint. + /// + /// In en, this message translates to: + /// **'Fast revocation is crucial when devices are shared or users change.'** + String get q_expert_access_revocation_hint; + + /// No description provided for @q_expert_sensitive_inference_controls_text. + /// + /// In en, this message translates to: + /// **'Are features that infer sensitive health or behavior profiles restricted or disableable?'** + String get q_expert_sensitive_inference_controls_text; + + /// No description provided for @q_expert_sensitive_inference_controls_hint. + /// + /// In en, this message translates to: + /// **'Inference controls reduce risks from secondary use of sensitive data.'** + String get q_expert_sensitive_inference_controls_hint; + + /// No description provided for @a_password_title. + /// + /// In en, this message translates to: + /// **'Change default password'** + String get a_password_title; + + /// No description provided for @a_password_desc. + /// + /// In en, this message translates to: + /// **'Replace the default password with a strong, unique password. Use a password manager.'** + String get a_password_desc; + + /// No description provided for @a_updates_title. + /// + /// In en, this message translates to: + /// **'Enable automatic updates'** + String get a_updates_title; + + /// No description provided for @a_updates_desc. + /// + /// In en, this message translates to: + /// **'Enable automatic security updates in device or app settings.'** + String get a_updates_desc; + + /// No description provided for @a_network_title. + /// + /// In en, this message translates to: + /// **'Set up separate IoT Wi-Fi'** + String get a_network_title; + + /// No description provided for @a_network_desc. + /// + /// In en, this message translates to: + /// **'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'** + String get a_network_desc; + + /// No description provided for @a_informed_title. + /// + /// In en, this message translates to: + /// **'Inform household members'** + String get a_informed_title; + + /// No description provided for @a_informed_desc. + /// + /// In en, this message translates to: + /// **'Inform all residents about what data the device collects, who has access, and how it can be disabled.'** + String get a_informed_desc; + + /// No description provided for @a_permissions_title. + /// + /// In en, this message translates to: + /// **'Restrict app permissions'** + String get a_permissions_title; + + /// No description provided for @a_permissions_desc. + /// + /// In en, this message translates to: + /// **'Check companion-app permissions in phone settings and disable unnecessary ones.'** + String get a_permissions_desc; + + /// No description provided for @a_camera_consent_title. + /// + /// In en, this message translates to: + /// **'Align camera positioning with residents'** + String get a_camera_consent_title; + + /// No description provided for @a_camera_consent_desc. + /// + /// In en, this message translates to: + /// **'Obtain consent from everyone affected. The camera must not record areas without consent.'** + String get a_camera_consent_desc; + + /// No description provided for @a_mic_active_title. + /// + /// In en, this message translates to: + /// **'Disable microphone when not in use'** + String get a_mic_active_title; + + /// No description provided for @a_mic_active_desc. + /// + /// In en, this message translates to: + /// **'Use the physical mute switch or disable the microphone in settings.'** + String get a_mic_active_desc; + + /// No description provided for @a_sensor_frequency_title. + /// + /// In en, this message translates to: + /// **'Reduce measurement interval'** + String get a_sensor_frequency_title; + + /// No description provided for @a_sensor_frequency_desc. + /// + /// In en, this message translates to: + /// **'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'** + String get a_sensor_frequency_desc; + + /// No description provided for @a_sensor_data_deletion_title. + /// + /// In en, this message translates to: + /// **'Delete old measurement values'** + String get a_sensor_data_deletion_title; + + /// No description provided for @a_sensor_data_deletion_desc. + /// + /// In en, this message translates to: + /// **'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'** + String get a_sensor_data_deletion_desc; + + /// No description provided for @a_sensor_granularity_title. + /// + /// In en, this message translates to: + /// **'Show less detailed data'** + String get a_sensor_granularity_title; + + /// No description provided for @a_sensor_granularity_desc. + /// + /// In en, this message translates to: + /// **'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'** + String get a_sensor_granularity_desc; + + /// No description provided for @a_sensor_local_title. + /// + /// In en, this message translates to: + /// **'Prefer local processing'** + String get a_sensor_local_title; + + /// No description provided for @a_sensor_local_desc. + /// + /// In en, this message translates to: + /// **'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'** + String get a_sensor_local_desc; + + /// No description provided for @a_voice_history_title. + /// + /// In en, this message translates to: + /// **'Delete voice recordings'** + String get a_voice_history_title; + + /// No description provided for @a_voice_history_desc. + /// + /// In en, this message translates to: + /// **'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'** + String get a_voice_history_desc; + + /// No description provided for @a_voice_local_title. + /// + /// In en, this message translates to: + /// **'Enable local voice processing'** + String get a_voice_local_title; + + /// No description provided for @a_voice_local_desc. + /// + /// In en, this message translates to: + /// **'Enable local voice processing if available. If not, minimize cloud storage of voice data.'** + String get a_voice_local_desc; + + /// No description provided for @a_skills_permissions_title. + /// + /// In en, this message translates to: + /// **'Review skills/integrations'** + String get a_skills_permissions_title; + + /// No description provided for @a_skills_permissions_desc. + /// + /// In en, this message translates to: + /// **'Review which third-party skills have access. Disable unnecessary skills.'** + String get a_skills_permissions_desc; + + /// No description provided for @a_video_encryption_title. + /// + /// In en, this message translates to: + /// **'Enable end-to-end video encryption'** + String get a_video_encryption_title; + + /// No description provided for @a_video_encryption_desc. + /// + /// In en, this message translates to: + /// **'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'** + String get a_video_encryption_desc; + + /// No description provided for @a_video_storage_title. + /// + /// In en, this message translates to: + /// **'Store recordings locally'** + String get a_video_storage_title; + + /// No description provided for @a_video_storage_desc. + /// + /// In en, this message translates to: + /// **'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'** + String get a_video_storage_desc; + + /// No description provided for @a_sharing_restrictions_title. + /// + /// In en, this message translates to: + /// **'Restrict camera access'** + String get a_sharing_restrictions_title; + + /// No description provided for @a_sharing_restrictions_desc. + /// + /// In en, this message translates to: + /// **'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'** + String get a_sharing_restrictions_desc; + + /// No description provided for @a_motion_detection_title. + /// + /// In en, this message translates to: + /// **'Disable motion detection when at home'** + String get a_motion_detection_title; + + /// No description provided for @a_motion_detection_desc. + /// + /// In en, this message translates to: + /// **'Disable motion detection when people are home, or set a schedule that activates it only during absence.'** + String get a_motion_detection_desc; + + /// No description provided for @a_account_required_title. + /// + /// In en, this message translates to: + /// **'Minimize privacy impact of required account'** + String get a_account_required_title; + + /// No description provided for @a_account_required_desc. + /// + /// In en, this message translates to: + /// **'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'** + String get a_account_required_desc; + + /// No description provided for @a_tracking_disabled_title. + /// + /// In en, this message translates to: + /// **'Disable tracking and advertising'** + String get a_tracking_disabled_title; + + /// No description provided for @a_tracking_disabled_desc. + /// + /// In en, this message translates to: + /// **'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'** + String get a_tracking_disabled_desc; + + /// No description provided for @a_local_mode_title. + /// + /// In en, this message translates to: + /// **'Prefer offline use'** + String get a_local_mode_title; + + /// No description provided for @a_local_mode_desc. + /// + /// In en, this message translates to: + /// **'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'** + String get a_local_mode_desc; + + /// No description provided for @a_data_collection_title. + /// + /// In en, this message translates to: + /// **'Disable history upload'** + String get a_data_collection_title; + + /// No description provided for @a_data_collection_desc. + /// + /// In en, this message translates to: + /// **'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'** + String get a_data_collection_desc; + + /// No description provided for @a_offline_control_title. + /// + /// In en, this message translates to: + /// **'Set up local control'** + String get a_offline_control_title; + + /// No description provided for @a_offline_control_desc. + /// + /// In en, this message translates to: + /// **'Configure local schedules and control without cloud dependency if the device supports it.'** + String get a_offline_control_desc; + + /// No description provided for @a_family_access_title. + /// + /// In en, this message translates to: + /// **'Separate access rights for household members'** + String get a_family_access_title; + + /// No description provided for @a_family_access_desc. + /// + /// In en, this message translates to: + /// **'Set up separate roles/accounts so that only authorized people can adjust the heating.'** + String get a_family_access_desc; + + /// No description provided for @a_local_control_title. + /// + /// In en, this message translates to: + /// **'Enable local automations'** + String get a_local_control_title; + + /// No description provided for @a_local_control_desc. + /// + /// In en, this message translates to: + /// **'Use local scenes/schedules instead of cloud automations where available.'** + String get a_local_control_desc; + + /// No description provided for @a_usage_tracking_title. + /// + /// In en, this message translates to: + /// **'Disable usage tracking'** + String get a_usage_tracking_title; + + /// No description provided for @a_usage_tracking_desc. + /// + /// In en, this message translates to: + /// **'Disable analytics, telemetry, and usage data collection in app settings.'** + String get a_usage_tracking_desc; + + /// No description provided for @a_offline_fallback_title. + /// + /// In en, this message translates to: + /// **'Ensure offline fallback'** + String get a_offline_fallback_title; + + /// No description provided for @a_offline_fallback_desc. + /// + /// In en, this message translates to: + /// **'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'** + String get a_offline_fallback_desc; + + /// No description provided for @a_offline_unlock_title. + /// + /// In en, this message translates to: + /// **'Secure offline access'** + String get a_offline_unlock_title; + + /// No description provided for @a_offline_unlock_desc. + /// + /// In en, this message translates to: + /// **'Set up a physical key or emergency code and test access when internet is unavailable.'** + String get a_offline_unlock_desc; + + /// No description provided for @a_access_logging_title. + /// + /// In en, this message translates to: + /// **'Enable access log'** + String get a_access_logging_title; + + /// No description provided for @a_access_logging_desc. + /// + /// In en, this message translates to: + /// **'Enable logging and notifications for lock openings so unauthorized access can be detected.'** + String get a_access_logging_desc; + + /// No description provided for @a_two_factor_title. + /// + /// In en, this message translates to: + /// **'Enable two-factor authentication'** + String get a_two_factor_title; + + /// No description provided for @a_two_factor_desc. + /// + /// In en, this message translates to: + /// **'BSI recommendation: Enable 2FA for your lock account to protect remote access.'** + String get a_two_factor_desc; + + /// No description provided for @a_map_privacy_title. + /// + /// In en, this message translates to: + /// **'Disable cloud floor-plan storage'** + String get a_map_privacy_title; + + /// No description provided for @a_map_privacy_desc. + /// + /// In en, this message translates to: + /// **'Switch storage to local and disable cloud backups of floor plans if the option is available.'** + String get a_map_privacy_desc; + + /// No description provided for @a_cloud_required_title. + /// + /// In en, this message translates to: + /// **'Reduce cloud dependency'** + String get a_cloud_required_title; + + /// No description provided for @a_cloud_required_desc. + /// + /// In en, this message translates to: + /// **'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'** + String get a_cloud_required_desc; + + /// No description provided for @a_vision_data_title. + /// + /// In en, this message translates to: + /// **'Process camera data locally only'** + String get a_vision_data_title; + + /// No description provided for @a_vision_data_desc. + /// + /// In en, this message translates to: + /// **'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'** + String get a_vision_data_desc; + + /// No description provided for @a_parental_control_title. + /// + /// In en, this message translates to: + /// **'Set up parental controls'** + String get a_parental_control_title; + + /// No description provided for @a_parental_control_desc. + /// + /// In en, this message translates to: + /// **'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'** + String get a_parental_control_desc; + + /// No description provided for @a_child_data_limits_title. + /// + /// In en, this message translates to: + /// **'Minimize data collection'** + String get a_child_data_limits_title; + + /// No description provided for @a_child_data_limits_desc. + /// + /// In en, this message translates to: + /// **'Disable optional profile data and collect only the child data required for core functionality.'** + String get a_child_data_limits_desc; + + /// No description provided for @a_recording_disable_title. + /// + /// In en, this message translates to: + /// **'Disable audio/video recordings'** + String get a_recording_disable_title; + + /// No description provided for @a_recording_disable_desc. + /// + /// In en, this message translates to: + /// **'Disable recording features by default and enable them only briefly when specifically needed.'** + String get a_recording_disable_desc; + + /// No description provided for @a_health_sharing_title. + /// + /// In en, this message translates to: + /// **'Restrict health data sharing'** + String get a_health_sharing_title; + + /// No description provided for @a_health_sharing_desc. + /// + /// In en, this message translates to: + /// **'Revoke health data access from unnecessary third-party apps in app and account settings.'** + String get a_health_sharing_desc; + + /// No description provided for @a_location_tracking_title. + /// + /// In en, this message translates to: + /// **'Reduce location sharing'** + String get a_location_tracking_title; + + /// No description provided for @a_location_tracking_desc. + /// + /// In en, this message translates to: + /// **'Disable location tracking outside active use or allow it only while the app is in use.'** + String get a_location_tracking_desc; + + /// No description provided for @a_expert_data_retention_duration_title. + /// + /// In en, this message translates to: + /// **'Define retention periods'** + String get a_expert_data_retention_duration_title; + + /// No description provided for @a_expert_data_retention_duration_desc. + /// + /// In en, this message translates to: + /// **'Set short, clear retention periods in settings and regularly delete old data.'** + String get a_expert_data_retention_duration_desc; + + /// No description provided for @a_expert_access_control_granular_title. + /// + /// In en, this message translates to: + /// **'Introduce granular roles and accounts'** + String get a_expert_access_control_granular_title; + + /// No description provided for @a_expert_access_control_granular_desc. + /// + /// In en, this message translates to: + /// **'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'** + String get a_expert_access_control_granular_desc; + + /// No description provided for @a_expert_third_party_sharing_limited_title. + /// + /// In en, this message translates to: + /// **'Limit third-party sharing'** + String get a_expert_third_party_sharing_limited_title; + + /// No description provided for @a_expert_third_party_sharing_limited_desc. + /// + /// In en, this message translates to: + /// **'Disable partner, advertising, and analytics sharing in privacy and account settings.'** + String get a_expert_third_party_sharing_limited_desc; + + /// No description provided for @a_expert_data_sale_disabled_title. + /// + /// In en, this message translates to: + /// **'Opt out of data sale'** + String get a_expert_data_sale_disabled_title; + + /// No description provided for @a_expert_data_sale_disabled_desc. + /// + /// In en, this message translates to: + /// **'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'** + String get a_expert_data_sale_disabled_desc; + + /// No description provided for @a_expert_update_support_window_title. + /// + /// In en, this message translates to: + /// **'Verify update commitment'** + String get a_expert_update_support_window_title; + + /// No description provided for @a_expert_update_support_window_desc. + /// + /// In en, this message translates to: + /// **'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'** + String get a_expert_update_support_window_desc; + + /// No description provided for @a_expert_vulnerability_process_title. + /// + /// In en, this message translates to: + /// **'Review vendor security process'** + String get a_expert_vulnerability_process_title; + + /// No description provided for @a_expert_vulnerability_process_desc. + /// + /// In en, this message translates to: + /// **'Prefer vendors with a clear security contact and responsible disclosure process.'** + String get a_expert_vulnerability_process_desc; + + /// No description provided for @a_expert_offline_functionality_title. + /// + /// In en, this message translates to: + /// **'Prioritize offline functionality'** + String get a_expert_offline_functionality_title; + + /// No description provided for @a_expert_offline_functionality_desc. + /// + /// In en, this message translates to: + /// **'Enable local operating modes and minimize mandatory cloud features where the device allows.'** + String get a_expert_offline_functionality_desc; + + /// No description provided for @a_expert_bystander_transparency_title. + /// + /// In en, this message translates to: + /// **'Add transparency notices for bystanders'** + String get a_expert_bystander_transparency_title; + + /// No description provided for @a_expert_bystander_transparency_desc. + /// + /// In en, this message translates to: + /// **'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'** + String get a_expert_bystander_transparency_desc; + + /// No description provided for @a_expert_child_data_protection_title. + /// + /// In en, this message translates to: + /// **'Strengthen child data protection'** + String get a_expert_child_data_protection_title; + + /// No description provided for @a_expert_child_data_protection_desc. + /// + /// In en, this message translates to: + /// **'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'** + String get a_expert_child_data_protection_desc; + + /// No description provided for @a_expert_access_revocation_title. + /// + /// In en, this message translates to: + /// **'Set up rapid access revocation'** + String get a_expert_access_revocation_title; + + /// No description provided for @a_expert_access_revocation_desc. + /// + /// In en, this message translates to: + /// **'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'** + String get a_expert_access_revocation_desc; + + /// No description provided for @a_expert_sensitive_inference_controls_title. + /// + /// In en, this message translates to: + /// **'Restrict inference features'** + String get a_expert_sensitive_inference_controls_title; + + /// No description provided for @a_expert_sensitive_inference_controls_desc. + /// + /// In en, this message translates to: + /// **'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'** + String get a_expert_sensitive_inference_controls_desc; + + /// No description provided for @a_dont_know_title. + /// + /// In en, this message translates to: + /// **'Get to know device settings better'** + String get a_dont_know_title; + + /// No description provided for @a_dont_know_desc. + /// + /// In en, this message translates to: + /// **'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'** + String get a_dont_know_desc; + + /// No description provided for @sl_base_risk. + /// + /// In en, this message translates to: + /// **'Baseline risk of device type'** + String get sl_base_risk; + + /// No description provided for @sl_child_room_bonus. + /// + /// In en, this message translates to: + /// **'Increased sensitivity: child\'s bedroom'** + String get sl_child_room_bonus; + + /// No description provided for @sl_password. + /// + /// In en, this message translates to: + /// **'Default password not changed'** + String get sl_password; + + /// No description provided for @sl_updates. + /// + /// In en, this message translates to: + /// **'Automatic updates not enabled'** + String get sl_updates; + + /// No description provided for @sl_network. + /// + /// In en, this message translates to: + /// **'No separate IoT Wi-Fi configured'** + String get sl_network; + + /// No description provided for @sl_informed. + /// + /// In en, this message translates to: + /// **'Household members not informed'** + String get sl_informed; + + /// No description provided for @sl_permissions. + /// + /// In en, this message translates to: + /// **'App permissions not reduced'** + String get sl_permissions; + + /// No description provided for @sl_camera_consent. + /// + /// In en, this message translates to: + /// **'No consent for camera-covered area'** + String get sl_camera_consent; + + /// No description provided for @sl_mic_active. + /// + /// In en, this message translates to: + /// **'Microphone not disabled when unused'** + String get sl_mic_active; + + /// No description provided for @sl_sensor_frequency. + /// + /// In en, this message translates to: + /// **'Measurement interval not reduced'** + String get sl_sensor_frequency; + + /// No description provided for @sl_sensor_data_deletion. + /// + /// In en, this message translates to: + /// **'Old measurement values not deleted'** + String get sl_sensor_data_deletion; + + /// No description provided for @sl_sensor_granularity. + /// + /// In en, this message translates to: + /// **'Data stored with too much granularity'** + String get sl_sensor_granularity; + + /// No description provided for @sl_sensor_local. + /// + /// In en, this message translates to: + /// **'Data transferred to cloud'** + String get sl_sensor_local; + + /// No description provided for @sl_voice_history. + /// + /// In en, this message translates to: + /// **'Voice recordings not deletable'** + String get sl_voice_history; + + /// No description provided for @sl_voice_local. + /// + /// In en, this message translates to: + /// **'No local voice processing'** + String get sl_voice_local; + + /// No description provided for @sl_skills_permissions. + /// + /// In en, this message translates to: + /// **'Skills not reviewed regularly'** + String get sl_skills_permissions; + + /// No description provided for @sl_video_encryption. + /// + /// In en, this message translates to: + /// **'Video transmission not encrypted'** + String get sl_video_encryption; + + /// No description provided for @sl_video_storage. + /// + /// In en, this message translates to: + /// **'Recordings only in vendor cloud'** + String get sl_video_storage; + + /// No description provided for @sl_sharing_restrictions. + /// + /// In en, this message translates to: + /// **'Recording access not controlled'** + String get sl_sharing_restrictions; + + /// No description provided for @sl_motion_detection. + /// + /// In en, this message translates to: + /// **'Motion detection always active'** + String get sl_motion_detection; + + /// No description provided for @sl_account_required. + /// + /// In en, this message translates to: + /// **'Mandatory vendor account required'** + String get sl_account_required; + + /// No description provided for @sl_tracking_disabled. + /// + /// In en, this message translates to: + /// **'Ad tracking not disabled'** + String get sl_tracking_disabled; + + /// No description provided for @sl_local_mode. + /// + /// In en, this message translates to: + /// **'No offline operation possible'** + String get sl_local_mode; + + /// No description provided for @sl_data_collection. + /// + /// In en, this message translates to: + /// **'Temperature history sent to vendor'** + String get sl_data_collection; + + /// No description provided for @sl_offline_control. + /// + /// In en, this message translates to: + /// **'No offline operation possible'** + String get sl_offline_control; + + /// No description provided for @sl_family_access. + /// + /// In en, this message translates to: + /// **'Access cannot be restricted'** + String get sl_family_access; + + /// No description provided for @sl_local_control. + /// + /// In en, this message translates to: + /// **'Automations require internet connection'** + String get sl_local_control; + + /// No description provided for @sl_usage_tracking. + /// + /// In en, this message translates to: + /// **'Switching patterns collected by vendor'** + String get sl_usage_tracking; + + /// No description provided for @sl_offline_fallback. + /// + /// In en, this message translates to: + /// **'Device unusable offline'** + String get sl_offline_fallback; + + /// No description provided for @sl_offline_unlock. + /// + /// In en, this message translates to: + /// **'No offline unlock possible'** + String get sl_offline_unlock; + + /// No description provided for @sl_access_logging. + /// + /// In en, this message translates to: + /// **'No access log available'** + String get sl_access_logging; + + /// No description provided for @sl_two_factor. + /// + /// In en, this message translates to: + /// **'Two-factor authentication missing'** + String get sl_two_factor; + + /// No description provided for @sl_map_privacy. + /// + /// In en, this message translates to: + /// **'Floor plan transmitted to vendor'** + String get sl_map_privacy; + + /// No description provided for @sl_cloud_required. + /// + /// In en, this message translates to: + /// **'Navigation only possible via cloud'** + String get sl_cloud_required; + + /// No description provided for @sl_vision_data. + /// + /// In en, this message translates to: + /// **'Camera images stored or transmitted'** + String get sl_vision_data; + + /// No description provided for @sl_parental_control. + /// + /// In en, this message translates to: + /// **'Parental controls not configured'** + String get sl_parental_control; + + /// No description provided for @sl_child_data_limits. + /// + /// In en, this message translates to: + /// **'Data collection not limited'** + String get sl_child_data_limits; + + /// No description provided for @sl_recording_disable. + /// + /// In en, this message translates to: + /// **'Recording cannot be disabled'** + String get sl_recording_disable; + + /// No description provided for @sl_health_sharing. + /// + /// In en, this message translates to: + /// **'Health data shared with third parties'** + String get sl_health_sharing; + + /// No description provided for @sl_location_tracking. + /// + /// In en, this message translates to: + /// **'Location tracking enabled'** + String get sl_location_tracking; + + /// No description provided for @sl_expert_data_retention_duration. + /// + /// In en, this message translates to: + /// **'Retention duration unclear or too long'** + String get sl_expert_data_retention_duration; + + /// No description provided for @sl_expert_access_control_granular. + /// + /// In en, this message translates to: + /// **'Granular access control missing'** + String get sl_expert_access_control_granular; + + /// No description provided for @sl_expert_third_party_sharing_limited. + /// + /// In en, this message translates to: + /// **'Third-party sharing not limited'** + String get sl_expert_third_party_sharing_limited; + + /// No description provided for @sl_expert_data_sale_disabled. + /// + /// In en, this message translates to: + /// **'Data sale not excluded'** + String get sl_expert_data_sale_disabled; + + /// No description provided for @sl_expert_update_support_window. + /// + /// In en, this message translates to: + /// **'Guaranteed update support window unknown'** + String get sl_expert_update_support_window; + + /// No description provided for @sl_expert_vulnerability_process. + /// + /// In en, this message translates to: + /// **'Vulnerability process not documented'** + String get sl_expert_vulnerability_process; + + /// No description provided for @sl_expert_offline_functionality. + /// + /// In en, this message translates to: + /// **'Meaningful offline operation not possible'** + String get sl_expert_offline_functionality; + + /// No description provided for @sl_expert_bystander_transparency. + /// + /// In en, this message translates to: + /// **'Transparency for nearby bystanders missing'** + String get sl_expert_bystander_transparency; + + /// No description provided for @sl_expert_child_data_protection. + /// + /// In en, this message translates to: + /// **'Child-data protection measures missing'** + String get sl_expert_child_data_protection; + + /// No description provided for @sl_expert_access_revocation. + /// + /// In en, this message translates to: + /// **'Individual access revocation not possible'** + String get sl_expert_access_revocation; + + /// No description provided for @sl_expert_sensitive_inference_controls. + /// + /// In en, this message translates to: + /// **'Controls against sensitive inference missing'** + String get sl_expert_sensitive_inference_controls; + + /// No description provided for @risk_hint_camera. + /// + /// In en, this message translates to: + /// **'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'** + String get risk_hint_camera; + + /// No description provided for @risk_hint_mic. + /// + /// In en, this message translates to: + /// **'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'** + String get risk_hint_mic; + + /// No description provided for @risk_hint_lock. + /// + /// In en, this message translates to: + /// **'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'** + String get risk_hint_lock; + + /// No description provided for @risk_hint_child_room. + /// + /// In en, this message translates to: + /// **'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'** + String get risk_hint_child_room; + + /// No description provided for @risk_hint_generic. + /// + /// In en, this message translates to: + /// **'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'** + String get risk_hint_generic; + + /// No description provided for @gen_rec_0. + /// + /// In en, this message translates to: + /// **'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'** + String get gen_rec_0; + + /// No description provided for @gen_rec_1. + /// + /// In en, this message translates to: + /// **'Use a password manager and assign a unique, strong password to each device.'** + String get gen_rec_1; + + /// No description provided for @gen_rec_2. + /// + /// In en, this message translates to: + /// **'Enable multi-factor authentication (MFA) for all vendor accounts.'** + String get gen_rec_2; + + /// No description provided for @gen_rec_3. + /// + /// In en, this message translates to: + /// **'Define who in your household is responsible for updates, backups, and accounts.'** + String get gen_rec_3; + + /// No description provided for @gen_rec_4. + /// + /// In en, this message translates to: + /// **'Regularly review (at least once per quarter) all access permissions and accounts.'** + String get gen_rec_4; + + /// No description provided for @gen_rec_5. + /// + /// In en, this message translates to: + /// **'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'** + String get gen_rec_5; + + /// No description provided for @gen_rec_6. + /// + /// In en, this message translates to: + /// **'Use a household consent check before buying new devices and involve all household members.'** + String get gen_rec_6; } class _AppLocalizationsDelegate @@ -2528,15 +2874,48 @@ class _AppLocalizationsDelegate const _AppLocalizationsDelegate(); @override - bool isSupported(Locale locale) => AppLocalizations.supportedLocales.any( - (supported) => supported.languageCode == locale.languageCode, - ); + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } @override - Future load(Locale locale) async => - AppLocalizations.activate(locale); + bool isSupported(Locale locale) => [ + 'cs', + 'da', + 'de', + 'en', + 'fr', + 'nl', + 'pl', + ].contains(locale.languageCode); @override - bool shouldReload(covariant LocalizationsDelegate old) => - false; + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'cs': + return AppLocalizationsCs(); + case 'da': + return AppLocalizationsDa(); + case 'de': + return AppLocalizationsDe(); + case 'en': + return AppLocalizationsEn(); + case 'fr': + return AppLocalizationsFr(); + case 'nl': + return AppLocalizationsNl(); + case 'pl': + return AppLocalizationsPl(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.', + ); } diff --git a/lib/l10n/app_localizations_cs.dart b/lib/l10n/app_localizations_cs.dart new file mode 100644 index 0000000..d3e4911 --- /dev/null +++ b/lib/l10n/app_localizations_cs.dart @@ -0,0 +1,1617 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Czech (`cs`). +class AppLocalizationsCs extends AppLocalizations { + AppLocalizationsCs([String locale = 'cs']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => + 'Simplications\nKontrola soukromí\nchytré domácnosti'; + + @override + String get welcomeDescription => + 'Zaznamenejte svá chytrá zařízení místnost po místnosti a získejte hodnocení soukromí s konkrétními doporučeními.'; + + @override + String get stepSelectRooms => 'Vyberte místnost'; + + @override + String get stepCaptureDevices => 'Zaznamenejte zařízení'; + + @override + String get stepAnswerQuestions => 'Odpovězte na otázky'; + + @override + String get stepGetRisk => 'Získejte rizikový profil a doporučení'; + + @override + String get start => 'Začít'; + + @override + String get resume => 'Pokračovat'; + + @override + String get about => 'O aplikaci'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Výběr místnosti'; + + @override + String get roomQuestion => 'Kterou místnost chcete nyní zkontrolovat?'; + + @override + String get roomInstruction => + 'Klepněte na místnost, zaznamenejte v ní zařízení a vraťte se sem, kde vyberete další místnost.'; + + @override + String get results => 'Výsledky'; + + @override + String get alreadyEvaluated => 'Již vyhodnoceno'; + + @override + String get notCompleted => 'Nedokončeno'; + + @override + String get addRoom => 'Přidat místnost'; + + @override + String get deviceTitlePrefix => 'Zařízení'; + + @override + String get roomCheck => 'Kontrola místnosti'; + + @override + String get deviceQuestion => + 'Která chytrá zařízení používáte v této místnosti?'; + + @override + String get deviceQuestionHint => + 'Klepněte na zařízení a odpovězte na otázky.'; + + @override + String get noKnownDevices => + 'Pro tuto místnost nejsou známá žádná zařízení. Můžete přidat vlastní zařízení.'; + + @override + String get addDevice => 'Přidat\nzařízení'; + + @override + String get noDevice => 'Žádné zařízení'; + + @override + String get nextRoom => 'Další místnost'; + + @override + String get deleteDeviceTitle => 'Smazat zařízení?'; + + @override + String get deleteDeviceBody => + 'Toto vlastní zařízení bude smazáno. Všechny navázané instance budou také odstraněny.'; + + @override + String get delete => 'Smazat'; + + @override + String get cancel => 'Zrušit'; + + @override + String get confirm => 'Potvrdit'; + + @override + String get noDeviceDialogTitle => 'V této místnosti nejsou zařízení?'; + + @override + String get noDeviceDialogBody => + 'Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Existující výběry zařízení pro tuto místnost budou zahozeny. Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.'; + + @override + String get questionnaireTitle => 'Otázky'; + + @override + String get connectedDevice => 'Připojené zařízení'; + + @override + String get done => 'Hotovo'; + + @override + String get yes => 'Ano'; + + @override + String get no => 'Ne'; + + @override + String get dontKnow => 'Nevím'; + + @override + String get notApplicableForDevice => + 'Tato otázka se na moje zařízení nevztahuje'; + + @override + String get languageDialogTitle => 'Vyberte jazyk'; + + @override + String get currentLanguage => 'Aktuální jazyk'; + + @override + String get aboutScreenTitle => 'O aplikaci'; + + @override + String get faqScreenTitle => 'Často kladené otázky'; + + @override + String get aboutSubtitle => + 'Výzkumný projekt zaměřený na soukromí chytré domácnosti'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Technická univerzita v Chemnitzu'; + + @override + String get aboutPartnerHsAnhalt => 'Vysoká škola Anhalt'; + + @override + String get aboutPartnerVzSachsen => 'Spotřebitelské centrum Sasko'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'Co je Simplications?'; + + @override + String get faqAnswerWhatIs => + 'Simplications je výzkumný projekt zaměřený na soukromí v chytré domácnosti. Tato aplikace je jednou z částí projektu a provede vás místnost po místnosti vašimi zařízeními s praktickými doporučeními na základě vašich odpovědí.'; + + @override + String get faqQuestionHowWorks => 'Jak kontrola funguje?'; + + @override + String get faqAnswerHowWorks => + 'Vyberete místnost, přidáte chytrá zařízení, odpovíte na otázky pro konkrétní zařízení a získáte profil rizik s prioritizovanými kroky.'; + + @override + String get faqQuestionNoPolicy => + 'Proč tu není zásada ochrany osobních údajů?'; + + @override + String get faqAnswerNoPolicy => 'Protože neshromažďujeme vaše data.'; + + @override + String get faqQuestionDataStored => 'Kde jsou moje data uložena?'; + + @override + String get faqAnswerDataStored => + 'Vaše hodnocení je uloženo lokálně ve vašem zařízení. V obrazovce O aplikaci můžete všechna uložená data kdykoli smazat.'; + + @override + String get faqQuestionNoDevice => 'Co když moje zařízení není v seznamu?'; + + @override + String get faqAnswerNoDevice => + 'Můžete přidat vlastní zařízení a kontrolu dokončit. Doporučení pak vycházejí z vaší konfigurace a odpovědí.'; + + @override + String get faqQuestionRiskMeaning => + 'Co znamená nízké, střední a vysoké riziko?'; + + @override + String get faqAnswerRiskMeaning => + 'Tyto úrovně ukazují, jak silně může vaše současné nastavení zvyšovat rizika pro soukromí. Jde o orientační úrovně, ne o právní nebo technickou certifikaci.'; + + @override + String get faqQuestionLegalAdvice => 'Jde o právní poradenství?'; + + @override + String get faqAnswerLegalAdvice => + 'Ne. Simplications poskytuje praktickou orientaci a doporučení, nenahrazuje však právní nebo profesionální bezpečnostní poradenství.'; + + @override + String get faqQuestionCanShare => 'Mohu sdílet své výsledky?'; + + @override + String get faqAnswerCanShare => + 'Ano. Na obrazovce výsledků můžete přehled exportovat a sdílet jako text nebo PDF.'; + + @override + String get websiteOpenFailed => 'Web se nepodařilo otevřít.'; + + @override + String get deleteAllDataTitle => 'Smazat všechna data?'; + + @override + String get deleteAllDataBody => + 'Všechny zaznamenané místnosti, zařízení a odpovědi budou trvale smazány. Tuto akci nelze vrátit zpět.'; + + @override + String get deleteAllDataButton => 'Smazat data'; + + @override + String get allDataDeleted => 'Všechna uložená data byla smazána.'; + + @override + String get projectPartners => 'Projektoví partneři'; + + @override + String get coordinationFunding => 'Koordinace a financování'; + + @override + String get coordination => 'Koordinace'; + + @override + String get platformPrivacy => 'Plattform Privatheit'; + + @override + String get fundingAgency => 'Poskytovatel financování'; + + @override + String get fundingAgencyValue => + 'Spolkové ministerstvo pro výzkum, technologie a vesmír\nFKZ 16KIS1868K'; + + @override + String get website => 'Web'; + + @override + String get dangerZone => 'Nebezpečná zóna'; + + @override + String get dangerZoneWarning => + 'Pozor: Tato akce trvale odstraní všechna uložená data aplikace.'; + + @override + String get expertModeTitle => 'Expert mode'; + + @override + String get expertModeToggleLabel => 'Enable detailed expert mode'; + + @override + String get expertModeToggleHint => + 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'; + + @override + String get expertModeSourcesHint => + 'Methodologically inspired by the following research projects:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (community platform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'; + + @override + String get roomDeleteTitle => 'Smazat místnost?'; + + @override + String get roomDeleteBody => + 'Tato vlastní místnost bude smazána. Všechna propojená zařízení budou také odstraněna.'; + + @override + String get add => 'Přidat'; + + @override + String get addRoomDialogTitle => 'Přidat novou místnost'; + + @override + String get roomName => 'Název místnosti'; + + @override + String get roomNameHint => 'např. Obývací pokoj, Garáž'; + + @override + String get chooseIcon => 'Vyberte ikonu:'; + + @override + String get addDeviceDialogTitle => 'Přidat nové zařízení'; + + @override + String get deviceName => 'Název zařízení'; + + @override + String get deviceNameHint => 'např. Můj chytrý reproduktor'; + + @override + String get baseRiskLabel => 'Základní skóre rizika (0-100)'; + + @override + String get baseRiskHint => 'např. 30 (nízké) až 60 (vysoké)'; + + @override + String get hasCamera => 'Má kameru?'; + + @override + String get hasMicrophone => 'Má mikrofon?'; + + @override + String get camera => 'Kamera'; + + @override + String get microphone => 'Mikrofon'; + + @override + String get summaryTitle => 'Váš výsledek'; + + @override + String get shareResult => 'Sdílet výsledek'; + + @override + String get shareAsText => 'Sdílet jako text'; + + @override + String get shareAsPdf => 'Sdílet jako PDF'; + + @override + String get restart => 'Začít znovu'; + + @override + String get noDevicesCaptured => 'Nebyla zaznamenána žádná zařízení.'; + + @override + String get noDevicesHint => + 'Spusťte to znovu a přidejte zařízení, abyste získali hodnocení.'; + + @override + String get highRisk => 'Vysoké riziko'; + + @override + String get mediumRisk => 'Střední riziko'; + + @override + String get lowRisk => 'Nízké riziko'; + + @override + String get exportFailed => 'Export se nezdařil'; + + @override + String get summaryShareSubject => 'Výsledek Simplications'; + + @override + String get summarySharePdfText => 'Zpráva Simplications jako PDF'; + + @override + String get overview => 'Přehled'; + + @override + String get evaluatedDevices => 'Vyhodnocená zařízení'; + + @override + String skippedDevicesHint(Object count) { + return '$count zařízení přeskočeno, protože dotazník nebyl dokončen.'; + } + + @override + String get overallRisk => 'Celkové riziko'; + + @override + String get generalRecommendations => 'Obecná doporučení'; + + @override + String get generalRecommendationsHint => + 'Tato opatření platí pro celou vaši chytrou domácnost bez ohledu na jednotlivá zařízení.'; + + @override + String get fullCatalog => 'Úplný katalog opatření'; + + @override + String get catalogButton => 'Otevřít úplný katalog opatření'; + + @override + String get risk => 'Riziko'; + + @override + String get note => 'Poznámka'; + + @override + String get recommendations => 'Doporučení'; + + @override + String get urgent => 'Naléhavé'; + + @override + String get recommended => 'Doporučeno'; + + @override + String get optional => 'Volitelné'; + + @override + String get social => 'Sociální'; + + @override + String get technical => 'Technické'; + + @override + String get security => 'Zabezpečení'; + + @override + String get smartHomePrivacyHeader => 'Vaše soukromí chytré domácnosti'; + + @override + String get devicesRated => 'hodnocených zařízení'; + + @override + String get howRiskCalculated => 'Jak se riziko počítá?'; + + @override + String get totalScore => 'Celkem'; + + @override + String get catalogSnackBarPrefix => 'Katalog'; + + @override + String get reportExportedAt => 'Exportováno'; + + @override + String get noActionLow => 'Vše je v pořádku - nejsou nutná žádná opatření.'; + + @override + String get noActionMedium => + 'Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává střední zbytkové riziko.'; + + @override + String get noActionHigh => + 'Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává vysoké zbytkové riziko.'; + + @override + String get overallLow => + 'Skvělá práce! Vaše zařízení jsou většinou bezpečně nastavena. Přesto si projděte obecná doporučení.'; + + @override + String get overallMedium => + 'Je zde prostor ke zlepšení. Projděte si doporučení pro jednotlivá zařízení.'; + + @override + String get overallHigh => + 'Několik zařízení má významná rizika pro soukromí/ochranu dat. Prosím co nejdříve zaveďte opatření s vysokou prioritou.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' $count odpověď$suffix byla označena jako \"Nevím\" - věnujte čas lepšímu poznání nastavení svých zařízení.'; + } + + @override + String get room_living => 'Living room'; + + @override + String get room_kitchen => 'Kitchen'; + + @override + String get room_bedroom => 'Bedroom'; + + @override + String get room_child_bedroom => 'Child\'s bedroom'; + + @override + String get room_bathroom => 'Bathroom'; + + @override + String get room_office => 'Office'; + + @override + String get room_hallway => 'Hallway / Entrance'; + + @override + String get room_garden => 'Garden / Outdoor area'; + + @override + String get room_basement => 'Basement / Pantry'; + + @override + String get room_whole_home => 'Entire home'; + + @override + String get device_simple_sensor => + 'Basic sensor (e.g., motion or door sensor)'; + + @override + String get device_humidity_sensor => 'Humidity sensor'; + + @override + String get device_temperature_sensor => 'Temperature sensor'; + + @override + String get device_light_sensor => 'Light sensor'; + + @override + String get device_smart_speaker => 'Smart speaker / voice assistant'; + + @override + String get device_smart_display => 'Smart display (e.g., Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smart indoor camera'; + + @override + String get device_outdoor_camera => 'Smart outdoor camera'; + + @override + String get device_doorbell_camera => 'Smart doorbell with camera'; + + @override + String get device_baby_monitor => 'Baby monitor / baby camera'; + + @override + String get device_robot_vacuum => 'Robot vacuum'; + + @override + String get device_smart_fridge => 'Smart fridge'; + + @override + String get device_smart_oven => 'Smart oven / stove'; + + @override + String get device_smart_coffee => 'Smart coffee machine'; + + @override + String get device_smart_washing => 'Smart washer / dryer'; + + @override + String get device_smart_thermostat => 'Smart thermostat / heating control'; + + @override + String get device_smart_plug => 'Smart plug'; + + @override + String get device_smart_light => 'Smart lighting'; + + @override + String get device_smart_lock => 'Smart door lock'; + + @override + String get device_smart_blind => 'Smart blind / shutter'; + + @override + String get device_fitness_tracker => 'Fitness tracker / smartwatch'; + + @override + String get device_smart_toy => 'Smart toy'; + + @override + String get device_smart_router => 'Smart router / mesh system'; + + @override + String get device_smart_hub => 'Smart home hub (e.g., Homey, Home Assistant)'; + + @override + String get device_smart_meter => + 'Intelligent electricity meter / smart meter'; + + @override + String get device_smart_irrigation => 'Smart irrigation system'; + + @override + String get device_smart_scale => 'Smart scale'; + + @override + String get device_smart_printer => 'Smart printer'; + + @override + String get q_password_text => + 'Have you changed the default password of the device or its linked account?'; + + @override + String get q_password_hint => + 'Default passwords are often publicly known and easy to crack.'; + + @override + String get q_updates_text => + 'Are automatic security updates enabled for the device?'; + + @override + String get q_updates_hint => + 'Updates close known security vulnerabilities promptly.'; + + @override + String get q_network_text => + 'Is the device connected to a separate smart home or IoT Wi-Fi network?'; + + @override + String get q_network_hint => + 'A dedicated network for smart devices protects your main home network.'; + + @override + String get q_informed_text => + 'Are all people in the household informed about this device and its function?'; + + @override + String get q_informed_hint => + 'All household members should know what data the device captures.'; + + @override + String get q_permissions_text => + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?'; + + @override + String get q_permissions_hint => + 'Only permissions that are truly needed should be enabled.'; + + @override + String get q_mic_active_text => + 'Do you deactivate the microphone when you are not actively using it?'; + + @override + String get q_mic_active_hint => + 'Smart speakers and devices with microphones can be activated unintentionally.'; + + @override + String get q_camera_consent_text => + 'Does the camera only record areas for which everyone affected has given their consent?'; + + @override + String get q_camera_consent_hint => + 'Cameras in communal or private areas require the consent of all residents.'; + + @override + String get q_sensor_frequency_text => + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'; + + @override + String get q_sensor_frequency_hint => + 'A lower measurement frequency produces less data and limits inferences about your behavior.'; + + @override + String get q_sensor_data_deletion_text => + 'Are older measurement values deleted automatically or on request?'; + + @override + String get q_sensor_data_deletion_hint => + 'Old historical data should not be stored permanently. Check retention settings.'; + + @override + String get q_sensor_granularity_text => + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'; + + @override + String get q_sensor_granularity_hint => + 'Less granular views help prevent inferences about precise presence or behavior patterns.'; + + @override + String get q_sensor_local_text => + 'Is measurement data processed and stored locally without being transferred to the cloud?'; + + @override + String get q_sensor_local_hint => + 'Local processing prevents the vendor from accessing your measurement data.'; + + @override + String get q_voice_history_text => + 'Can you delete voice recordings from device history or disable this feature?'; + + @override + String get q_voice_history_hint => + 'BSI recommendation: Minimize recording retention or delete recordings regularly.'; + + @override + String get q_voice_local_text => + 'Is voice processing performed partly on the device locally?'; + + @override + String get q_voice_local_hint => + 'Local processing reduces the amount of data sent to the cloud.'; + + @override + String get q_skills_permissions_text => + 'Do you regularly review which skills have access to your account?'; + + @override + String get q_skills_permissions_hint => + 'Third-party skills can access sensitive data. Enable only necessary skills.'; + + @override + String get q_video_encryption_text => + 'Is video recording and transmission encrypted end-to-end?'; + + @override + String get q_video_encryption_hint => + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'; + + @override + String get q_video_storage_text => + 'Are recordings stored locally (not only in the vendor cloud)?'; + + @override + String get q_video_storage_hint => + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'; + + @override + String get q_sharing_restrictions_text => + 'Can you control who can access live view and recordings?'; + + @override + String get q_sharing_restrictions_hint => + 'You should be able to precisely control access to video recordings.'; + + @override + String get q_motion_detection_text => + 'Can you disable or schedule motion detection when you are at home?'; + + @override + String get q_motion_detection_hint => + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'; + + @override + String get q_account_required_text => + 'Can you use the device without a mandatory online account?'; + + @override + String get q_account_required_hint => + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'; + + @override + String get q_tracking_disabled_text => + 'Can you completely disable advertising and tracking features?'; + + @override + String get q_tracking_disabled_hint => + 'Smart TVs often collect viewing habit data. Look for privacy settings.'; + + @override + String get q_local_mode_text => + 'Can you use the device via HDMI or local sources without internet?'; + + @override + String get q_local_mode_hint => + 'Offline use protects usage data from being sent to the vendor.'; + + @override + String get q_data_collection_text => + 'Do temperature history and schedules stay on-device (not sent to the vendor)?'; + + @override + String get q_data_collection_hint => + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'; + + @override + String get q_offline_control_text => + 'Can you operate the thermostat offline (without internet)?'; + + @override + String get q_offline_control_hint => + 'Offline operation or local automation protects data from cloud access.'; + + @override + String get q_family_access_text => + 'Can you control who may adjust heating (e.g., restrict guests)?'; + + @override + String get q_family_access_hint => + 'Household members should have control without visitors changing everything.'; + + @override + String get q_local_control_text => + 'Can automations run locally without internet?'; + + @override + String get q_local_control_hint => + 'Local scenes and schedules protect your privacy better.'; + + @override + String get q_usage_tracking_text => + 'Have you disabled or limited vendor collection of switching patterns and usage times?'; + + @override + String get q_usage_tracking_hint => + 'Usage patterns can reveal presence and habits. Check app privacy settings.'; + + @override + String get q_offline_fallback_text => + 'Do devices still work if internet or app connection fails?'; + + @override + String get q_offline_fallback_hint => + 'Reliable local operation is important for daily use and privacy.'; + + @override + String get q_offline_unlock_text => + 'Can you unlock the lock offline (e.g., with code or key)?'; + + @override + String get q_offline_unlock_hint => + 'Backup options prevent lockout during internet or power outages.'; + + @override + String get q_access_logging_text => + 'Can you track who opened the lock and when?'; + + @override + String get q_access_logging_hint => + 'An access log helps you detect suspicious activity.'; + + @override + String get q_two_factor_text => + 'Is two-factor authentication (2FA) available for the lock account?'; + + @override + String get q_two_factor_hint => + 'BSI recommendation: 2FA protects your account from unauthorized remote access.'; + + @override + String get q_map_privacy_text => + 'Are created floor plans stored exclusively on the device locally?'; + + @override + String get q_map_privacy_hint => + 'Home floor plans are sensitive information and should not be sent to the vendor.'; + + @override + String get q_cloud_required_text => + 'Does floor-plan navigation work without cloud connection?'; + + @override + String get q_cloud_required_hint => + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.'; + + @override + String get q_vision_data_text => + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'; + + @override + String get q_vision_data_hint => + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'; + + @override + String get q_parental_control_text => + 'Are there parental control features to manage the toy?'; + + @override + String get q_parental_control_hint => + 'Parental controls should allow restricting contacts and features.'; + + @override + String get q_child_data_limits_text => + 'Can you limit which personal data the toy collects?'; + + @override + String get q_child_data_limits_hint => + 'Child-focused devices should collect and store minimal data.'; + + @override + String get q_recording_disable_text => + 'Can you disable audio and video recording on the device?'; + + @override + String get q_recording_disable_hint => + 'BSI recommendation: Recordings of children should only be possible with explicit control.'; + + @override + String get q_health_sharing_text => + 'Can you control which third parties can access your health data?'; + + @override + String get q_health_sharing_hint => + 'Health data is sensitive. Only authorized apps should have access.'; + + @override + String get q_location_tracking_text => + 'Can you disable location tracking when not needed?'; + + @override + String get q_location_tracking_hint => + 'GPS tracking uses battery and can reveal movement patterns.'; + + @override + String get q_expert_data_retention_duration_text => + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'; + + @override + String get q_expert_access_control_granular_text => + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granular access control reduces the risk of unauthorized access and misuse.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Is third-party sharing disabled or clearly limited to necessary services?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Is the sale of your data excluded (or actively disabled, where possible)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'An explicit \"no data sale\" option is a strong privacy signal.'; + + @override + String get q_expert_update_support_window_text => + 'Is it known how long the vendor guarantees security updates?'; + + @override + String get q_expert_update_support_window_hint => + 'A transparent update commitment reduces long-term security and privacy risks.'; + + @override + String get q_expert_vulnerability_process_text => + 'Is there a documented process for reporting and fixing vulnerabilities?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.'; + + @override + String get q_expert_offline_functionality_text => + 'Does the device remain meaningfully usable with limited internet connectivity?'; + + @override + String get q_expert_offline_functionality_hint => + 'More offline functionality often means less continuous data transfer to the cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'; + + @override + String get q_expert_child_data_protection_text => + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Devices in child-related contexts require especially strict privacy safeguards.'; + + @override + String get q_expert_access_revocation_text => + 'Can digital keys/access rights be revoked quickly and individually?'; + + @override + String get q_expert_access_revocation_hint => + 'Fast revocation is crucial when devices are shared or users change.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Are features that infer sensitive health or behavior profiles restricted or disableable?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inference controls reduce risks from secondary use of sensitive data.'; + + @override + String get a_password_title => 'Change default password'; + + @override + String get a_password_desc => + 'Replace the default password with a strong, unique password. Use a password manager.'; + + @override + String get a_updates_title => 'Enable automatic updates'; + + @override + String get a_updates_desc => + 'Enable automatic security updates in device or app settings.'; + + @override + String get a_network_title => 'Set up separate IoT Wi-Fi'; + + @override + String get a_network_desc => + 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'; + + @override + String get a_informed_title => 'Inform household members'; + + @override + String get a_informed_desc => + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.'; + + @override + String get a_permissions_title => 'Restrict app permissions'; + + @override + String get a_permissions_desc => + 'Check companion-app permissions in phone settings and disable unnecessary ones.'; + + @override + String get a_camera_consent_title => + 'Align camera positioning with residents'; + + @override + String get a_camera_consent_desc => + 'Obtain consent from everyone affected. The camera must not record areas without consent.'; + + @override + String get a_mic_active_title => 'Disable microphone when not in use'; + + @override + String get a_mic_active_desc => + 'Use the physical mute switch or disable the microphone in settings.'; + + @override + String get a_sensor_frequency_title => 'Reduce measurement interval'; + + @override + String get a_sensor_frequency_desc => + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'; + + @override + String get a_sensor_data_deletion_title => 'Delete old measurement values'; + + @override + String get a_sensor_data_deletion_desc => + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'; + + @override + String get a_sensor_granularity_title => 'Show less detailed data'; + + @override + String get a_sensor_granularity_desc => + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'; + + @override + String get a_sensor_local_title => 'Prefer local processing'; + + @override + String get a_sensor_local_desc => + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'; + + @override + String get a_voice_history_title => 'Delete voice recordings'; + + @override + String get a_voice_history_desc => + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'; + + @override + String get a_voice_local_title => 'Enable local voice processing'; + + @override + String get a_voice_local_desc => + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.'; + + @override + String get a_skills_permissions_title => 'Review skills/integrations'; + + @override + String get a_skills_permissions_desc => + 'Review which third-party skills have access. Disable unnecessary skills.'; + + @override + String get a_video_encryption_title => 'Enable end-to-end video encryption'; + + @override + String get a_video_encryption_desc => + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'; + + @override + String get a_video_storage_title => 'Store recordings locally'; + + @override + String get a_video_storage_desc => + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'; + + @override + String get a_sharing_restrictions_title => 'Restrict camera access'; + + @override + String get a_sharing_restrictions_desc => + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'; + + @override + String get a_motion_detection_title => + 'Disable motion detection when at home'; + + @override + String get a_motion_detection_desc => + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.'; + + @override + String get a_account_required_title => + 'Minimize privacy impact of required account'; + + @override + String get a_account_required_desc => + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'; + + @override + String get a_tracking_disabled_title => 'Disable tracking and advertising'; + + @override + String get a_tracking_disabled_desc => + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'; + + @override + String get a_local_mode_title => 'Prefer offline use'; + + @override + String get a_local_mode_desc => + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'; + + @override + String get a_data_collection_title => 'Disable history upload'; + + @override + String get a_data_collection_desc => + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'; + + @override + String get a_offline_control_title => 'Set up local control'; + + @override + String get a_offline_control_desc => + 'Configure local schedules and control without cloud dependency if the device supports it.'; + + @override + String get a_family_access_title => + 'Separate access rights for household members'; + + @override + String get a_family_access_desc => + 'Set up separate roles/accounts so that only authorized people can adjust the heating.'; + + @override + String get a_local_control_title => 'Enable local automations'; + + @override + String get a_local_control_desc => + 'Use local scenes/schedules instead of cloud automations where available.'; + + @override + String get a_usage_tracking_title => 'Disable usage tracking'; + + @override + String get a_usage_tracking_desc => + 'Disable analytics, telemetry, and usage data collection in app settings.'; + + @override + String get a_offline_fallback_title => 'Ensure offline fallback'; + + @override + String get a_offline_fallback_desc => + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'; + + @override + String get a_offline_unlock_title => 'Secure offline access'; + + @override + String get a_offline_unlock_desc => + 'Set up a physical key or emergency code and test access when internet is unavailable.'; + + @override + String get a_access_logging_title => 'Enable access log'; + + @override + String get a_access_logging_desc => + 'Enable logging and notifications for lock openings so unauthorized access can be detected.'; + + @override + String get a_two_factor_title => 'Enable two-factor authentication'; + + @override + String get a_two_factor_desc => + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.'; + + @override + String get a_map_privacy_title => 'Disable cloud floor-plan storage'; + + @override + String get a_map_privacy_desc => + 'Switch storage to local and disable cloud backups of floor plans if the option is available.'; + + @override + String get a_cloud_required_title => 'Reduce cloud dependency'; + + @override + String get a_cloud_required_desc => + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'; + + @override + String get a_vision_data_title => 'Process camera data locally only'; + + @override + String get a_vision_data_desc => + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'; + + @override + String get a_parental_control_title => 'Set up parental controls'; + + @override + String get a_parental_control_desc => + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'; + + @override + String get a_child_data_limits_title => 'Minimize data collection'; + + @override + String get a_child_data_limits_desc => + 'Disable optional profile data and collect only the child data required for core functionality.'; + + @override + String get a_recording_disable_title => 'Disable audio/video recordings'; + + @override + String get a_recording_disable_desc => + 'Disable recording features by default and enable them only briefly when specifically needed.'; + + @override + String get a_health_sharing_title => 'Restrict health data sharing'; + + @override + String get a_health_sharing_desc => + 'Revoke health data access from unnecessary third-party apps in app and account settings.'; + + @override + String get a_location_tracking_title => 'Reduce location sharing'; + + @override + String get a_location_tracking_desc => + 'Disable location tracking outside active use or allow it only while the app is in use.'; + + @override + String get a_expert_data_retention_duration_title => + 'Define retention periods'; + + @override + String get a_expert_data_retention_duration_desc => + 'Set short, clear retention periods in settings and regularly delete old data.'; + + @override + String get a_expert_access_control_granular_title => + 'Introduce granular roles and accounts'; + + @override + String get a_expert_access_control_granular_desc => + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Limit third-party sharing'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Disable partner, advertising, and analytics sharing in privacy and account settings.'; + + @override + String get a_expert_data_sale_disabled_title => 'Opt out of data sale'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'; + + @override + String get a_expert_update_support_window_title => 'Verify update commitment'; + + @override + String get a_expert_update_support_window_desc => + 'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'; + + @override + String get a_expert_vulnerability_process_title => + 'Review vendor security process'; + + @override + String get a_expert_vulnerability_process_desc => + 'Prefer vendors with a clear security contact and responsible disclosure process.'; + + @override + String get a_expert_offline_functionality_title => + 'Prioritize offline functionality'; + + @override + String get a_expert_offline_functionality_desc => + 'Enable local operating modes and minimize mandatory cloud features where the device allows.'; + + @override + String get a_expert_bystander_transparency_title => + 'Add transparency notices for bystanders'; + + @override + String get a_expert_bystander_transparency_desc => + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'; + + @override + String get a_expert_child_data_protection_title => + 'Strengthen child data protection'; + + @override + String get a_expert_child_data_protection_desc => + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'; + + @override + String get a_expert_access_revocation_title => + 'Set up rapid access revocation'; + + @override + String get a_expert_access_revocation_desc => + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Restrict inference features'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'; + + @override + String get a_dont_know_title => 'Get to know device settings better'; + + @override + String get a_dont_know_desc => + 'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'; + + @override + String get sl_base_risk => 'Baseline risk of device type'; + + @override + String get sl_child_room_bonus => 'Increased sensitivity: child\'s bedroom'; + + @override + String get sl_password => 'Default password not changed'; + + @override + String get sl_updates => 'Automatic updates not enabled'; + + @override + String get sl_network => 'No separate IoT Wi-Fi configured'; + + @override + String get sl_informed => 'Household members not informed'; + + @override + String get sl_permissions => 'App permissions not reduced'; + + @override + String get sl_camera_consent => 'No consent for camera-covered area'; + + @override + String get sl_mic_active => 'Microphone not disabled when unused'; + + @override + String get sl_sensor_frequency => 'Measurement interval not reduced'; + + @override + String get sl_sensor_data_deletion => 'Old measurement values not deleted'; + + @override + String get sl_sensor_granularity => 'Data stored with too much granularity'; + + @override + String get sl_sensor_local => 'Data transferred to cloud'; + + @override + String get sl_voice_history => 'Voice recordings not deletable'; + + @override + String get sl_voice_local => 'No local voice processing'; + + @override + String get sl_skills_permissions => 'Skills not reviewed regularly'; + + @override + String get sl_video_encryption => 'Video transmission not encrypted'; + + @override + String get sl_video_storage => 'Recordings only in vendor cloud'; + + @override + String get sl_sharing_restrictions => 'Recording access not controlled'; + + @override + String get sl_motion_detection => 'Motion detection always active'; + + @override + String get sl_account_required => 'Mandatory vendor account required'; + + @override + String get sl_tracking_disabled => 'Ad tracking not disabled'; + + @override + String get sl_local_mode => 'No offline operation possible'; + + @override + String get sl_data_collection => 'Temperature history sent to vendor'; + + @override + String get sl_offline_control => 'No offline operation possible'; + + @override + String get sl_family_access => 'Access cannot be restricted'; + + @override + String get sl_local_control => 'Automations require internet connection'; + + @override + String get sl_usage_tracking => 'Switching patterns collected by vendor'; + + @override + String get sl_offline_fallback => 'Device unusable offline'; + + @override + String get sl_offline_unlock => 'No offline unlock possible'; + + @override + String get sl_access_logging => 'No access log available'; + + @override + String get sl_two_factor => 'Two-factor authentication missing'; + + @override + String get sl_map_privacy => 'Floor plan transmitted to vendor'; + + @override + String get sl_cloud_required => 'Navigation only possible via cloud'; + + @override + String get sl_vision_data => 'Camera images stored or transmitted'; + + @override + String get sl_parental_control => 'Parental controls not configured'; + + @override + String get sl_child_data_limits => 'Data collection not limited'; + + @override + String get sl_recording_disable => 'Recording cannot be disabled'; + + @override + String get sl_health_sharing => 'Health data shared with third parties'; + + @override + String get sl_location_tracking => 'Location tracking enabled'; + + @override + String get sl_expert_data_retention_duration => + 'Retention duration unclear or too long'; + + @override + String get sl_expert_access_control_granular => + 'Granular access control missing'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Third-party sharing not limited'; + + @override + String get sl_expert_data_sale_disabled => 'Data sale not excluded'; + + @override + String get sl_expert_update_support_window => + 'Guaranteed update support window unknown'; + + @override + String get sl_expert_vulnerability_process => + 'Vulnerability process not documented'; + + @override + String get sl_expert_offline_functionality => + 'Meaningful offline operation not possible'; + + @override + String get sl_expert_bystander_transparency => + 'Transparency for nearby bystanders missing'; + + @override + String get sl_expert_child_data_protection => + 'Child-data protection measures missing'; + + @override + String get sl_expert_access_revocation => + 'Individual access revocation not possible'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Controls against sensitive inference missing'; + + @override + String get risk_hint_camera => + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'; + + @override + String get risk_hint_mic => + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'; + + @override + String get risk_hint_lock => + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'; + + @override + String get risk_hint_child_room => + 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'; + + @override + String get risk_hint_generic => + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'; + + @override + String get gen_rec_0 => + 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'; + + @override + String get gen_rec_1 => + 'Use a password manager and assign a unique, strong password to each device.'; + + @override + String get gen_rec_2 => + 'Enable multi-factor authentication (MFA) for all vendor accounts.'; + + @override + String get gen_rec_3 => + 'Define who in your household is responsible for updates, backups, and accounts.'; + + @override + String get gen_rec_4 => + 'Regularly review (at least once per quarter) all access permissions and accounts.'; + + @override + String get gen_rec_5 => + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'; + + @override + String get gen_rec_6 => + 'Use a household consent check before buying new devices and involve all household members.'; +} diff --git a/lib/l10n/app_localizations_da.dart b/lib/l10n/app_localizations_da.dart new file mode 100644 index 0000000..8625a41 --- /dev/null +++ b/lib/l10n/app_localizations_da.dart @@ -0,0 +1,1613 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Danish (`da`). +class AppLocalizationsDa extends AppLocalizations { + AppLocalizationsDa([String locale = 'da']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => 'Simplications\nSmart Home\nprivatlivstjek'; + + @override + String get welcomeDescription => + 'Registrer dine smarte enheder rum for rum, og få en privatlivsvurdering med konkrete anbefalinger.'; + + @override + String get stepSelectRooms => 'Vælg ét rum'; + + @override + String get stepCaptureDevices => 'Registrer enheder'; + + @override + String get stepAnswerQuestions => 'Besvar spørgsmål'; + + @override + String get stepGetRisk => 'Få risikoprofil og anbefalinger'; + + @override + String get start => 'Start'; + + @override + String get resume => 'Fortsæt'; + + @override + String get about => 'Om'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Vælg rum'; + + @override + String get roomQuestion => 'Hvilket rum vil du tjekke nu?'; + + @override + String get roomInstruction => + 'Tryk på et rum, registrer enhederne dér, og kom tilbage hertil for at vælge næste rum.'; + + @override + String get results => 'Resultater'; + + @override + String get alreadyEvaluated => 'Allerede vurderet'; + + @override + String get notCompleted => 'Ikke afsluttet'; + + @override + String get addRoom => 'Tilføj rum'; + + @override + String get deviceTitlePrefix => 'Enheder'; + + @override + String get roomCheck => 'Rumtjek'; + + @override + String get deviceQuestion => 'Hvilke smarte enheder bruger du i dette rum?'; + + @override + String get deviceQuestionHint => + 'Tryk på en enhed for at besvare spørgsmålene.'; + + @override + String get noKnownDevices => + 'Ingen kendte enheder for dette rum. Du kan tilføje din egen enhed.'; + + @override + String get addDevice => 'Tilføj\nenhed'; + + @override + String get noDevice => 'Ingen enhed'; + + @override + String get nextRoom => 'Næste rum'; + + @override + String get deleteDeviceTitle => 'Slet enhed?'; + + @override + String get deleteDeviceBody => + 'Denne brugerdefinerede enhed slettes. Alle tilknyttede instanser fjernes også.'; + + @override + String get delete => 'Slet'; + + @override + String get cancel => 'Annuller'; + + @override + String get confirm => 'Bekræft'; + + @override + String get noDeviceDialogTitle => 'Ingen enheder i dette rum?'; + + @override + String get noDeviceDialogBody => + 'Dette rum afsluttes uden enheder og påvirker ikke scoren.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Eksisterende enhedsvalg for dette rum kasseres. Dette rum afsluttes uden enheder og påvirker ikke scoren.'; + + @override + String get questionnaireTitle => 'Spørgsmål'; + + @override + String get connectedDevice => 'Tilsluttet enhed'; + + @override + String get done => 'Færdig'; + + @override + String get yes => 'Ja'; + + @override + String get no => 'Nej'; + + @override + String get dontKnow => 'Ved ikke'; + + @override + String get notApplicableForDevice => + 'Dette spørgsmål gælder ikke for min enhed'; + + @override + String get languageDialogTitle => 'Vælg sprog'; + + @override + String get currentLanguage => 'Nuværende sprog'; + + @override + String get aboutScreenTitle => 'Om appen'; + + @override + String get faqScreenTitle => 'Ofte stillede spørgsmål'; + + @override + String get aboutSubtitle => 'Forskningsprojekt om privatliv i smarte hjem'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Teknisk Universitet i Chemnitz'; + + @override + String get aboutPartnerHsAnhalt => 'Anhalt University of Applied Sciences'; + + @override + String get aboutPartnerVzSachsen => 'Forbrugercenter Sachsen'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'Hvad er Simplications?'; + + @override + String get faqAnswerWhatIs => + 'Simplications er et forskningsprojekt om privatliv i smarte hjem. Denne app er en del af projektet og guider dig rum for rum gennem dine enheder med praktiske anbefalinger baseret på dine svar.'; + + @override + String get faqQuestionHowWorks => 'Hvordan fungerer tjekket?'; + + @override + String get faqAnswerHowWorks => + 'Du vælger et rum, tilføjer dine smarte enheder, besvarer enhedsspecifikke spørgsmål og får en risikoprofil med prioriterede handlinger.'; + + @override + String get faqQuestionNoPolicy => 'Hvorfor er der ingen privatlivspolitik?'; + + @override + String get faqAnswerNoPolicy => 'Fordi vi ikke indsamler dine data.'; + + @override + String get faqQuestionDataStored => 'Hvor gemmes mine data?'; + + @override + String get faqAnswerDataStored => + 'Dine vurderingsdata gemmes lokalt på din enhed. På Om-skærmen kan du til enhver tid slette alle gemte data.'; + + @override + String get faqQuestionNoDevice => 'Hvad hvis min enhed ikke er på listen?'; + + @override + String get faqAnswerNoDevice => + 'Du kan tilføje brugerdefinerede enheder og stadig gennemføre tjekket. Anbefalingerne bygger så på din opsætning og dine svar.'; + + @override + String get faqQuestionRiskMeaning => + 'Hvad betyder lav, mellem og høj risiko?'; + + @override + String get faqAnswerRiskMeaning => + 'Disse niveauer viser, hvor meget din nuværende konfiguration kan øge privatlivsrisici. De er vejledende niveauer, ikke juridisk eller teknisk certificering.'; + + @override + String get faqQuestionLegalAdvice => 'Er dette juridisk rådgivning?'; + + @override + String get faqAnswerLegalAdvice => + 'Nej. Simplications giver praktisk vejledning og anbefalinger, men erstatter ikke juridisk rådgivning eller professionel sikkerhedsrådgivning.'; + + @override + String get faqQuestionCanShare => 'Kan jeg dele mine resultater?'; + + @override + String get faqAnswerCanShare => + 'Ja. På resultatskærmen kan du eksportere og dele din opsummering som tekst eller PDF.'; + + @override + String get websiteOpenFailed => 'Kunne ikke åbne webstedet.'; + + @override + String get deleteAllDataTitle => 'Slet alle data?'; + + @override + String get deleteAllDataBody => + 'Alle registrerede rum, enheder og svar slettes permanent. Handlingen kan ikke fortrydes.'; + + @override + String get deleteAllDataButton => 'Slet data'; + + @override + String get allDataDeleted => 'Alle gemte data er blevet slettet.'; + + @override + String get projectPartners => 'Projektpartnere'; + + @override + String get coordinationFunding => 'Koordination og finansiering'; + + @override + String get coordination => 'Koordination'; + + @override + String get platformPrivacy => 'Plattform Privatheit'; + + @override + String get fundingAgency => 'Finansieringsorgan'; + + @override + String get fundingAgencyValue => + 'Tysk forbundsministerium for forskning, teknologi og rumfart\nBevilling 16KIS1868K'; + + @override + String get website => 'Websted'; + + @override + String get dangerZone => 'Farezone'; + + @override + String get dangerZoneWarning => + 'Advarsel: Denne handling fjerner alle gemte app-data permanent.'; + + @override + String get expertModeTitle => 'Expert mode'; + + @override + String get expertModeToggleLabel => 'Enable detailed expert mode'; + + @override + String get expertModeToggleHint => + 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'; + + @override + String get expertModeSourcesHint => + 'Methodologically inspired by the following research projects:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (community platform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'; + + @override + String get roomDeleteTitle => 'Slet rum?'; + + @override + String get roomDeleteBody => + 'Dette brugerdefinerede rum bliver slettet. Alle tilknyttede enheder bliver også fjernet.'; + + @override + String get add => 'Tilføj'; + + @override + String get addRoomDialogTitle => 'Tilføj nyt rum'; + + @override + String get roomName => 'Rumnavn'; + + @override + String get roomNameHint => 'f.eks. Stue, Garage'; + + @override + String get chooseIcon => 'Vælg ikon:'; + + @override + String get addDeviceDialogTitle => 'Tilføj ny enhed'; + + @override + String get deviceName => 'Enhedsnavn'; + + @override + String get deviceNameHint => 'f.eks. Min smarte højttaler'; + + @override + String get baseRiskLabel => 'Basisrisikoscore (0-100)'; + + @override + String get baseRiskHint => 'f.eks. 30 (lav) til 60 (høj)'; + + @override + String get hasCamera => 'Har kamera?'; + + @override + String get hasMicrophone => 'Har mikrofon?'; + + @override + String get camera => 'Kamera'; + + @override + String get microphone => 'Mikrofon'; + + @override + String get summaryTitle => 'Dit resultat'; + + @override + String get shareResult => 'Del resultat'; + + @override + String get shareAsText => 'Del som tekst'; + + @override + String get shareAsPdf => 'Del som PDF'; + + @override + String get restart => 'Start forfra'; + + @override + String get noDevicesCaptured => 'Ingen enheder registreret.'; + + @override + String get noDevicesHint => + 'Start forfra og tilføj enheder for at få en vurdering.'; + + @override + String get highRisk => 'Høj risiko'; + + @override + String get mediumRisk => 'Middel risiko'; + + @override + String get lowRisk => 'Lav risiko'; + + @override + String get exportFailed => 'Eksport mislykkedes'; + + @override + String get summaryShareSubject => 'Simplications-resultat'; + + @override + String get summarySharePdfText => 'Simplications-rapport som PDF'; + + @override + String get overview => 'Oversigt'; + + @override + String get evaluatedDevices => 'Vurderede enheder'; + + @override + String skippedDevicesHint(Object count) { + return '$count enheder er sprunget over, fordi spørgeskemaet ikke er afsluttet.'; + } + + @override + String get overallRisk => 'Samlet risiko'; + + @override + String get generalRecommendations => 'Generelle anbefalinger'; + + @override + String get generalRecommendationsHint => + 'Disse tiltag gælder for hele dit smarte hjem uanset individuelle enheder.'; + + @override + String get fullCatalog => 'Fuldt handlingskatalog'; + + @override + String get catalogButton => 'Åbn fuldt handlingskatalog'; + + @override + String get risk => 'Risiko'; + + @override + String get note => 'Bemærkning'; + + @override + String get recommendations => 'Anbefalinger'; + + @override + String get urgent => 'Haster'; + + @override + String get recommended => 'Anbefalet'; + + @override + String get optional => 'Valgfri'; + + @override + String get social => 'Social'; + + @override + String get technical => 'Teknisk'; + + @override + String get security => 'Sikkerhed'; + + @override + String get smartHomePrivacyHeader => 'Dit smart-home-privatliv'; + + @override + String get devicesRated => 'vurderede enheder'; + + @override + String get howRiskCalculated => 'Hvordan beregnes risiko?'; + + @override + String get totalScore => 'I alt'; + + @override + String get catalogSnackBarPrefix => 'Katalog'; + + @override + String get reportExportedAt => 'Eksporteret den'; + + @override + String get noActionLow => 'Alt er i orden - ingen handlinger nødvendige.'; + + @override + String get noActionMedium => + 'Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en middel rest-risiko.'; + + @override + String get noActionHigh => + 'Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en høj rest-risiko.'; + + @override + String get overallLow => + 'Godt klaret! Dine enheder er overvejende sikkert konfigureret. Gennemgå alligevel de generelle anbefalinger.'; + + @override + String get overallMedium => + 'Der er plads til forbedringer. Gennemgå anbefalingerne for hver enhed.'; + + @override + String get overallHigh => + 'Flere enheder har betydelige privatlivs-/databeskyttelsesrisici. Implementér venligst højprioriterede tiltag hurtigt.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' $count svar$suffix er markeret som \"Ved ikke\" - brug tid på at lære dine enhedsindstillinger bedre at kende.'; + } + + @override + String get room_living => 'Living room'; + + @override + String get room_kitchen => 'Kitchen'; + + @override + String get room_bedroom => 'Bedroom'; + + @override + String get room_child_bedroom => 'Child\'s bedroom'; + + @override + String get room_bathroom => 'Bathroom'; + + @override + String get room_office => 'Office'; + + @override + String get room_hallway => 'Hallway / Entrance'; + + @override + String get room_garden => 'Garden / Outdoor area'; + + @override + String get room_basement => 'Basement / Pantry'; + + @override + String get room_whole_home => 'Entire home'; + + @override + String get device_simple_sensor => + 'Basic sensor (e.g., motion or door sensor)'; + + @override + String get device_humidity_sensor => 'Humidity sensor'; + + @override + String get device_temperature_sensor => 'Temperature sensor'; + + @override + String get device_light_sensor => 'Light sensor'; + + @override + String get device_smart_speaker => 'Smart speaker / voice assistant'; + + @override + String get device_smart_display => 'Smart display (e.g., Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smart indoor camera'; + + @override + String get device_outdoor_camera => 'Smart outdoor camera'; + + @override + String get device_doorbell_camera => 'Smart doorbell with camera'; + + @override + String get device_baby_monitor => 'Baby monitor / baby camera'; + + @override + String get device_robot_vacuum => 'Robot vacuum'; + + @override + String get device_smart_fridge => 'Smart fridge'; + + @override + String get device_smart_oven => 'Smart oven / stove'; + + @override + String get device_smart_coffee => 'Smart coffee machine'; + + @override + String get device_smart_washing => 'Smart washer / dryer'; + + @override + String get device_smart_thermostat => 'Smart thermostat / heating control'; + + @override + String get device_smart_plug => 'Smart plug'; + + @override + String get device_smart_light => 'Smart lighting'; + + @override + String get device_smart_lock => 'Smart door lock'; + + @override + String get device_smart_blind => 'Smart blind / shutter'; + + @override + String get device_fitness_tracker => 'Fitness tracker / smartwatch'; + + @override + String get device_smart_toy => 'Smart toy'; + + @override + String get device_smart_router => 'Smart router / mesh system'; + + @override + String get device_smart_hub => 'Smart home hub (e.g., Homey, Home Assistant)'; + + @override + String get device_smart_meter => + 'Intelligent electricity meter / smart meter'; + + @override + String get device_smart_irrigation => 'Smart irrigation system'; + + @override + String get device_smart_scale => 'Smart scale'; + + @override + String get device_smart_printer => 'Smart printer'; + + @override + String get q_password_text => + 'Have you changed the default password of the device or its linked account?'; + + @override + String get q_password_hint => + 'Default passwords are often publicly known and easy to crack.'; + + @override + String get q_updates_text => + 'Are automatic security updates enabled for the device?'; + + @override + String get q_updates_hint => + 'Updates close known security vulnerabilities promptly.'; + + @override + String get q_network_text => + 'Is the device connected to a separate smart home or IoT Wi-Fi network?'; + + @override + String get q_network_hint => + 'A dedicated network for smart devices protects your main home network.'; + + @override + String get q_informed_text => + 'Are all people in the household informed about this device and its function?'; + + @override + String get q_informed_hint => + 'All household members should know what data the device captures.'; + + @override + String get q_permissions_text => + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?'; + + @override + String get q_permissions_hint => + 'Only permissions that are truly needed should be enabled.'; + + @override + String get q_mic_active_text => + 'Do you deactivate the microphone when you are not actively using it?'; + + @override + String get q_mic_active_hint => + 'Smart speakers and devices with microphones can be activated unintentionally.'; + + @override + String get q_camera_consent_text => + 'Does the camera only record areas for which everyone affected has given their consent?'; + + @override + String get q_camera_consent_hint => + 'Cameras in communal or private areas require the consent of all residents.'; + + @override + String get q_sensor_frequency_text => + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'; + + @override + String get q_sensor_frequency_hint => + 'A lower measurement frequency produces less data and limits inferences about your behavior.'; + + @override + String get q_sensor_data_deletion_text => + 'Are older measurement values deleted automatically or on request?'; + + @override + String get q_sensor_data_deletion_hint => + 'Old historical data should not be stored permanently. Check retention settings.'; + + @override + String get q_sensor_granularity_text => + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'; + + @override + String get q_sensor_granularity_hint => + 'Less granular views help prevent inferences about precise presence or behavior patterns.'; + + @override + String get q_sensor_local_text => + 'Is measurement data processed and stored locally without being transferred to the cloud?'; + + @override + String get q_sensor_local_hint => + 'Local processing prevents the vendor from accessing your measurement data.'; + + @override + String get q_voice_history_text => + 'Can you delete voice recordings from device history or disable this feature?'; + + @override + String get q_voice_history_hint => + 'BSI recommendation: Minimize recording retention or delete recordings regularly.'; + + @override + String get q_voice_local_text => + 'Is voice processing performed partly on the device locally?'; + + @override + String get q_voice_local_hint => + 'Local processing reduces the amount of data sent to the cloud.'; + + @override + String get q_skills_permissions_text => + 'Do you regularly review which skills have access to your account?'; + + @override + String get q_skills_permissions_hint => + 'Third-party skills can access sensitive data. Enable only necessary skills.'; + + @override + String get q_video_encryption_text => + 'Is video recording and transmission encrypted end-to-end?'; + + @override + String get q_video_encryption_hint => + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'; + + @override + String get q_video_storage_text => + 'Are recordings stored locally (not only in the vendor cloud)?'; + + @override + String get q_video_storage_hint => + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'; + + @override + String get q_sharing_restrictions_text => + 'Can you control who can access live view and recordings?'; + + @override + String get q_sharing_restrictions_hint => + 'You should be able to precisely control access to video recordings.'; + + @override + String get q_motion_detection_text => + 'Can you disable or schedule motion detection when you are at home?'; + + @override + String get q_motion_detection_hint => + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'; + + @override + String get q_account_required_text => + 'Can you use the device without a mandatory online account?'; + + @override + String get q_account_required_hint => + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'; + + @override + String get q_tracking_disabled_text => + 'Can you completely disable advertising and tracking features?'; + + @override + String get q_tracking_disabled_hint => + 'Smart TVs often collect viewing habit data. Look for privacy settings.'; + + @override + String get q_local_mode_text => + 'Can you use the device via HDMI or local sources without internet?'; + + @override + String get q_local_mode_hint => + 'Offline use protects usage data from being sent to the vendor.'; + + @override + String get q_data_collection_text => + 'Do temperature history and schedules stay on-device (not sent to the vendor)?'; + + @override + String get q_data_collection_hint => + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'; + + @override + String get q_offline_control_text => + 'Can you operate the thermostat offline (without internet)?'; + + @override + String get q_offline_control_hint => + 'Offline operation or local automation protects data from cloud access.'; + + @override + String get q_family_access_text => + 'Can you control who may adjust heating (e.g., restrict guests)?'; + + @override + String get q_family_access_hint => + 'Household members should have control without visitors changing everything.'; + + @override + String get q_local_control_text => + 'Can automations run locally without internet?'; + + @override + String get q_local_control_hint => + 'Local scenes and schedules protect your privacy better.'; + + @override + String get q_usage_tracking_text => + 'Have you disabled or limited vendor collection of switching patterns and usage times?'; + + @override + String get q_usage_tracking_hint => + 'Usage patterns can reveal presence and habits. Check app privacy settings.'; + + @override + String get q_offline_fallback_text => + 'Do devices still work if internet or app connection fails?'; + + @override + String get q_offline_fallback_hint => + 'Reliable local operation is important for daily use and privacy.'; + + @override + String get q_offline_unlock_text => + 'Can you unlock the lock offline (e.g., with code or key)?'; + + @override + String get q_offline_unlock_hint => + 'Backup options prevent lockout during internet or power outages.'; + + @override + String get q_access_logging_text => + 'Can you track who opened the lock and when?'; + + @override + String get q_access_logging_hint => + 'An access log helps you detect suspicious activity.'; + + @override + String get q_two_factor_text => + 'Is two-factor authentication (2FA) available for the lock account?'; + + @override + String get q_two_factor_hint => + 'BSI recommendation: 2FA protects your account from unauthorized remote access.'; + + @override + String get q_map_privacy_text => + 'Are created floor plans stored exclusively on the device locally?'; + + @override + String get q_map_privacy_hint => + 'Home floor plans are sensitive information and should not be sent to the vendor.'; + + @override + String get q_cloud_required_text => + 'Does floor-plan navigation work without cloud connection?'; + + @override + String get q_cloud_required_hint => + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.'; + + @override + String get q_vision_data_text => + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'; + + @override + String get q_vision_data_hint => + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'; + + @override + String get q_parental_control_text => + 'Are there parental control features to manage the toy?'; + + @override + String get q_parental_control_hint => + 'Parental controls should allow restricting contacts and features.'; + + @override + String get q_child_data_limits_text => + 'Can you limit which personal data the toy collects?'; + + @override + String get q_child_data_limits_hint => + 'Child-focused devices should collect and store minimal data.'; + + @override + String get q_recording_disable_text => + 'Can you disable audio and video recording on the device?'; + + @override + String get q_recording_disable_hint => + 'BSI recommendation: Recordings of children should only be possible with explicit control.'; + + @override + String get q_health_sharing_text => + 'Can you control which third parties can access your health data?'; + + @override + String get q_health_sharing_hint => + 'Health data is sensitive. Only authorized apps should have access.'; + + @override + String get q_location_tracking_text => + 'Can you disable location tracking when not needed?'; + + @override + String get q_location_tracking_hint => + 'GPS tracking uses battery and can reveal movement patterns.'; + + @override + String get q_expert_data_retention_duration_text => + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'; + + @override + String get q_expert_access_control_granular_text => + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granular access control reduces the risk of unauthorized access and misuse.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Is third-party sharing disabled or clearly limited to necessary services?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Is the sale of your data excluded (or actively disabled, where possible)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'An explicit \"no data sale\" option is a strong privacy signal.'; + + @override + String get q_expert_update_support_window_text => + 'Is it known how long the vendor guarantees security updates?'; + + @override + String get q_expert_update_support_window_hint => + 'A transparent update commitment reduces long-term security and privacy risks.'; + + @override + String get q_expert_vulnerability_process_text => + 'Is there a documented process for reporting and fixing vulnerabilities?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.'; + + @override + String get q_expert_offline_functionality_text => + 'Does the device remain meaningfully usable with limited internet connectivity?'; + + @override + String get q_expert_offline_functionality_hint => + 'More offline functionality often means less continuous data transfer to the cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'; + + @override + String get q_expert_child_data_protection_text => + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Devices in child-related contexts require especially strict privacy safeguards.'; + + @override + String get q_expert_access_revocation_text => + 'Can digital keys/access rights be revoked quickly and individually?'; + + @override + String get q_expert_access_revocation_hint => + 'Fast revocation is crucial when devices are shared or users change.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Are features that infer sensitive health or behavior profiles restricted or disableable?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inference controls reduce risks from secondary use of sensitive data.'; + + @override + String get a_password_title => 'Change default password'; + + @override + String get a_password_desc => + 'Replace the default password with a strong, unique password. Use a password manager.'; + + @override + String get a_updates_title => 'Enable automatic updates'; + + @override + String get a_updates_desc => + 'Enable automatic security updates in device or app settings.'; + + @override + String get a_network_title => 'Set up separate IoT Wi-Fi'; + + @override + String get a_network_desc => + 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'; + + @override + String get a_informed_title => 'Inform household members'; + + @override + String get a_informed_desc => + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.'; + + @override + String get a_permissions_title => 'Restrict app permissions'; + + @override + String get a_permissions_desc => + 'Check companion-app permissions in phone settings and disable unnecessary ones.'; + + @override + String get a_camera_consent_title => + 'Align camera positioning with residents'; + + @override + String get a_camera_consent_desc => + 'Obtain consent from everyone affected. The camera must not record areas without consent.'; + + @override + String get a_mic_active_title => 'Disable microphone when not in use'; + + @override + String get a_mic_active_desc => + 'Use the physical mute switch or disable the microphone in settings.'; + + @override + String get a_sensor_frequency_title => 'Reduce measurement interval'; + + @override + String get a_sensor_frequency_desc => + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'; + + @override + String get a_sensor_data_deletion_title => 'Delete old measurement values'; + + @override + String get a_sensor_data_deletion_desc => + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'; + + @override + String get a_sensor_granularity_title => 'Show less detailed data'; + + @override + String get a_sensor_granularity_desc => + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'; + + @override + String get a_sensor_local_title => 'Prefer local processing'; + + @override + String get a_sensor_local_desc => + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'; + + @override + String get a_voice_history_title => 'Delete voice recordings'; + + @override + String get a_voice_history_desc => + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'; + + @override + String get a_voice_local_title => 'Enable local voice processing'; + + @override + String get a_voice_local_desc => + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.'; + + @override + String get a_skills_permissions_title => 'Review skills/integrations'; + + @override + String get a_skills_permissions_desc => + 'Review which third-party skills have access. Disable unnecessary skills.'; + + @override + String get a_video_encryption_title => 'Enable end-to-end video encryption'; + + @override + String get a_video_encryption_desc => + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'; + + @override + String get a_video_storage_title => 'Store recordings locally'; + + @override + String get a_video_storage_desc => + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'; + + @override + String get a_sharing_restrictions_title => 'Restrict camera access'; + + @override + String get a_sharing_restrictions_desc => + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'; + + @override + String get a_motion_detection_title => + 'Disable motion detection when at home'; + + @override + String get a_motion_detection_desc => + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.'; + + @override + String get a_account_required_title => + 'Minimize privacy impact of required account'; + + @override + String get a_account_required_desc => + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'; + + @override + String get a_tracking_disabled_title => 'Disable tracking and advertising'; + + @override + String get a_tracking_disabled_desc => + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'; + + @override + String get a_local_mode_title => 'Prefer offline use'; + + @override + String get a_local_mode_desc => + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'; + + @override + String get a_data_collection_title => 'Disable history upload'; + + @override + String get a_data_collection_desc => + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'; + + @override + String get a_offline_control_title => 'Set up local control'; + + @override + String get a_offline_control_desc => + 'Configure local schedules and control without cloud dependency if the device supports it.'; + + @override + String get a_family_access_title => + 'Separate access rights for household members'; + + @override + String get a_family_access_desc => + 'Set up separate roles/accounts so that only authorized people can adjust the heating.'; + + @override + String get a_local_control_title => 'Enable local automations'; + + @override + String get a_local_control_desc => + 'Use local scenes/schedules instead of cloud automations where available.'; + + @override + String get a_usage_tracking_title => 'Disable usage tracking'; + + @override + String get a_usage_tracking_desc => + 'Disable analytics, telemetry, and usage data collection in app settings.'; + + @override + String get a_offline_fallback_title => 'Ensure offline fallback'; + + @override + String get a_offline_fallback_desc => + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'; + + @override + String get a_offline_unlock_title => 'Secure offline access'; + + @override + String get a_offline_unlock_desc => + 'Set up a physical key or emergency code and test access when internet is unavailable.'; + + @override + String get a_access_logging_title => 'Enable access log'; + + @override + String get a_access_logging_desc => + 'Enable logging and notifications for lock openings so unauthorized access can be detected.'; + + @override + String get a_two_factor_title => 'Enable two-factor authentication'; + + @override + String get a_two_factor_desc => + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.'; + + @override + String get a_map_privacy_title => 'Disable cloud floor-plan storage'; + + @override + String get a_map_privacy_desc => + 'Switch storage to local and disable cloud backups of floor plans if the option is available.'; + + @override + String get a_cloud_required_title => 'Reduce cloud dependency'; + + @override + String get a_cloud_required_desc => + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'; + + @override + String get a_vision_data_title => 'Process camera data locally only'; + + @override + String get a_vision_data_desc => + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'; + + @override + String get a_parental_control_title => 'Set up parental controls'; + + @override + String get a_parental_control_desc => + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'; + + @override + String get a_child_data_limits_title => 'Minimize data collection'; + + @override + String get a_child_data_limits_desc => + 'Disable optional profile data and collect only the child data required for core functionality.'; + + @override + String get a_recording_disable_title => 'Disable audio/video recordings'; + + @override + String get a_recording_disable_desc => + 'Disable recording features by default and enable them only briefly when specifically needed.'; + + @override + String get a_health_sharing_title => 'Restrict health data sharing'; + + @override + String get a_health_sharing_desc => + 'Revoke health data access from unnecessary third-party apps in app and account settings.'; + + @override + String get a_location_tracking_title => 'Reduce location sharing'; + + @override + String get a_location_tracking_desc => + 'Disable location tracking outside active use or allow it only while the app is in use.'; + + @override + String get a_expert_data_retention_duration_title => + 'Define retention periods'; + + @override + String get a_expert_data_retention_duration_desc => + 'Set short, clear retention periods in settings and regularly delete old data.'; + + @override + String get a_expert_access_control_granular_title => + 'Introduce granular roles and accounts'; + + @override + String get a_expert_access_control_granular_desc => + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Limit third-party sharing'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Disable partner, advertising, and analytics sharing in privacy and account settings.'; + + @override + String get a_expert_data_sale_disabled_title => 'Opt out of data sale'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'; + + @override + String get a_expert_update_support_window_title => 'Verify update commitment'; + + @override + String get a_expert_update_support_window_desc => + 'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'; + + @override + String get a_expert_vulnerability_process_title => + 'Review vendor security process'; + + @override + String get a_expert_vulnerability_process_desc => + 'Prefer vendors with a clear security contact and responsible disclosure process.'; + + @override + String get a_expert_offline_functionality_title => + 'Prioritize offline functionality'; + + @override + String get a_expert_offline_functionality_desc => + 'Enable local operating modes and minimize mandatory cloud features where the device allows.'; + + @override + String get a_expert_bystander_transparency_title => + 'Add transparency notices for bystanders'; + + @override + String get a_expert_bystander_transparency_desc => + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'; + + @override + String get a_expert_child_data_protection_title => + 'Strengthen child data protection'; + + @override + String get a_expert_child_data_protection_desc => + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'; + + @override + String get a_expert_access_revocation_title => + 'Set up rapid access revocation'; + + @override + String get a_expert_access_revocation_desc => + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Restrict inference features'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'; + + @override + String get a_dont_know_title => 'Get to know device settings better'; + + @override + String get a_dont_know_desc => + 'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'; + + @override + String get sl_base_risk => 'Baseline risk of device type'; + + @override + String get sl_child_room_bonus => 'Increased sensitivity: child\'s bedroom'; + + @override + String get sl_password => 'Default password not changed'; + + @override + String get sl_updates => 'Automatic updates not enabled'; + + @override + String get sl_network => 'No separate IoT Wi-Fi configured'; + + @override + String get sl_informed => 'Household members not informed'; + + @override + String get sl_permissions => 'App permissions not reduced'; + + @override + String get sl_camera_consent => 'No consent for camera-covered area'; + + @override + String get sl_mic_active => 'Microphone not disabled when unused'; + + @override + String get sl_sensor_frequency => 'Measurement interval not reduced'; + + @override + String get sl_sensor_data_deletion => 'Old measurement values not deleted'; + + @override + String get sl_sensor_granularity => 'Data stored with too much granularity'; + + @override + String get sl_sensor_local => 'Data transferred to cloud'; + + @override + String get sl_voice_history => 'Voice recordings not deletable'; + + @override + String get sl_voice_local => 'No local voice processing'; + + @override + String get sl_skills_permissions => 'Skills not reviewed regularly'; + + @override + String get sl_video_encryption => 'Video transmission not encrypted'; + + @override + String get sl_video_storage => 'Recordings only in vendor cloud'; + + @override + String get sl_sharing_restrictions => 'Recording access not controlled'; + + @override + String get sl_motion_detection => 'Motion detection always active'; + + @override + String get sl_account_required => 'Mandatory vendor account required'; + + @override + String get sl_tracking_disabled => 'Ad tracking not disabled'; + + @override + String get sl_local_mode => 'No offline operation possible'; + + @override + String get sl_data_collection => 'Temperature history sent to vendor'; + + @override + String get sl_offline_control => 'No offline operation possible'; + + @override + String get sl_family_access => 'Access cannot be restricted'; + + @override + String get sl_local_control => 'Automations require internet connection'; + + @override + String get sl_usage_tracking => 'Switching patterns collected by vendor'; + + @override + String get sl_offline_fallback => 'Device unusable offline'; + + @override + String get sl_offline_unlock => 'No offline unlock possible'; + + @override + String get sl_access_logging => 'No access log available'; + + @override + String get sl_two_factor => 'Two-factor authentication missing'; + + @override + String get sl_map_privacy => 'Floor plan transmitted to vendor'; + + @override + String get sl_cloud_required => 'Navigation only possible via cloud'; + + @override + String get sl_vision_data => 'Camera images stored or transmitted'; + + @override + String get sl_parental_control => 'Parental controls not configured'; + + @override + String get sl_child_data_limits => 'Data collection not limited'; + + @override + String get sl_recording_disable => 'Recording cannot be disabled'; + + @override + String get sl_health_sharing => 'Health data shared with third parties'; + + @override + String get sl_location_tracking => 'Location tracking enabled'; + + @override + String get sl_expert_data_retention_duration => + 'Retention duration unclear or too long'; + + @override + String get sl_expert_access_control_granular => + 'Granular access control missing'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Third-party sharing not limited'; + + @override + String get sl_expert_data_sale_disabled => 'Data sale not excluded'; + + @override + String get sl_expert_update_support_window => + 'Guaranteed update support window unknown'; + + @override + String get sl_expert_vulnerability_process => + 'Vulnerability process not documented'; + + @override + String get sl_expert_offline_functionality => + 'Meaningful offline operation not possible'; + + @override + String get sl_expert_bystander_transparency => + 'Transparency for nearby bystanders missing'; + + @override + String get sl_expert_child_data_protection => + 'Child-data protection measures missing'; + + @override + String get sl_expert_access_revocation => + 'Individual access revocation not possible'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Controls against sensitive inference missing'; + + @override + String get risk_hint_camera => + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'; + + @override + String get risk_hint_mic => + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'; + + @override + String get risk_hint_lock => + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'; + + @override + String get risk_hint_child_room => + 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'; + + @override + String get risk_hint_generic => + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'; + + @override + String get gen_rec_0 => + 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'; + + @override + String get gen_rec_1 => + 'Use a password manager and assign a unique, strong password to each device.'; + + @override + String get gen_rec_2 => + 'Enable multi-factor authentication (MFA) for all vendor accounts.'; + + @override + String get gen_rec_3 => + 'Define who in your household is responsible for updates, backups, and accounts.'; + + @override + String get gen_rec_4 => + 'Regularly review (at least once per quarter) all access permissions and accounts.'; + + @override + String get gen_rec_5 => + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'; + + @override + String get gen_rec_6 => + 'Use a household consent check before buying new devices and involve all household members.'; +} diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart new file mode 100644 index 0000000..bf57751 --- /dev/null +++ b/lib/l10n/app_localizations_de.dart @@ -0,0 +1,1620 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for German (`de`). +class AppLocalizationsDe extends AppLocalizations { + AppLocalizationsDe([String locale = 'de']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => + 'Der Simplications\nSmart Home\nPrivatsphäre-Check'; + + @override + String get welcomeDescription => + 'Erfassen Sie Raum für Raum Ihre smarten Geräte und erhalten Sie eine Privatsphärebewertung mit konkreten Empfehlungen.'; + + @override + String get stepSelectRooms => 'Raum auswählen'; + + @override + String get stepCaptureDevices => 'Geräte erfassen'; + + @override + String get stepAnswerQuestions => 'Fragen beantworten'; + + @override + String get stepGetRisk => 'Risikoprofil & Empfehlungen erhalten'; + + @override + String get start => 'Starten'; + + @override + String get resume => 'Fortsetzen'; + + @override + String get about => 'Über'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Raum auswählen'; + + @override + String get roomQuestion => 'Welchen Raum möchten Sie jetzt prüfen?'; + + @override + String get roomInstruction => + 'Tippen Sie auf einen Raum, erfassen Sie dort Ihre Geräte und kehren Sie dann hierher zurück, um den nächsten Raum zu wählen.'; + + @override + String get results => 'Ergebnisse'; + + @override + String get alreadyEvaluated => 'Bereits ausgewertet'; + + @override + String get notCompleted => 'Nicht abgeschlossen'; + + @override + String get addRoom => 'Raum hinzufügen'; + + @override + String get deviceTitlePrefix => 'Geräte'; + + @override + String get roomCheck => 'Raum-Check'; + + @override + String get deviceQuestion => + 'Welche smarten Geräte nutzen Sie in diesem Raum?'; + + @override + String get deviceQuestionHint => + 'Tippen Sie auf ein Gerät, um die Fragen dafür zu beantworten.'; + + @override + String get noKnownDevices => + 'Keine bekannten Geräte für diesen Raum. Sie können ein eigenes Gerät hinzufügen.'; + + @override + String get addDevice => 'Gerät\nhinzufügen'; + + @override + String get noDevice => 'Kein Gerät'; + + @override + String get nextRoom => 'Nächster Raum'; + + @override + String get deleteDeviceTitle => 'Gerät löschen?'; + + @override + String get deleteDeviceBody => + 'Dieses benutzerdefinierte Gerät wird gelöscht. Alle verknüpften Instanzen werden auch entfernt.'; + + @override + String get delete => 'Löschen'; + + @override + String get cancel => 'Abbrechen'; + + @override + String get confirm => 'Bestätigen'; + + @override + String get noDeviceDialogTitle => 'Keine Geräte in diesem Raum?'; + + @override + String get noDeviceDialogBody => + 'Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Vorhandene Geräteauswahlen für diesen Raum werden verworfen. Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.'; + + @override + String get questionnaireTitle => 'Fragen'; + + @override + String get connectedDevice => 'Verbundenes Gerät'; + + @override + String get done => 'Fertig'; + + @override + String get yes => 'Ja'; + + @override + String get no => 'Nein'; + + @override + String get dontKnow => 'Weiß ich nicht'; + + @override + String get notApplicableForDevice => + 'Diese Frage trifft auf mein Gerät nicht zu'; + + @override + String get languageDialogTitle => 'Sprache wählen'; + + @override + String get currentLanguage => 'Aktuelle Sprache'; + + @override + String get aboutScreenTitle => 'Über die App'; + + @override + String get faqScreenTitle => 'Häufige Fragen'; + + @override + String get aboutSubtitle => 'Forschungsprojekt Smart Home Privatsphäre'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Technische Universität Chemnitz'; + + @override + String get aboutPartnerHsAnhalt => 'Hochschule Anhalt'; + + @override + String get aboutPartnerVzSachsen => 'Verbraucherzentrale Sachsen e.V.'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'Was ist Simplications?'; + + @override + String get faqAnswerWhatIs => + 'Simplications ist ein Forschungsprojekt zum Smart-Home-Datenschutz. Diese App ist ein Teil des Projekts und führt Sie Raum für Raum durch Ihre Geräte mit praktischen Empfehlungen auf Basis Ihrer Antworten.'; + + @override + String get faqQuestionHowWorks => 'Wie funktioniert der Check?'; + + @override + String get faqAnswerHowWorks => + 'Sie wählen einen Raum, erfassen Ihre smarten Geräte, beantworten gerätespezifische Fragen und erhalten ein Risikoprofil mit priorisierten Maßnahmen.'; + + @override + String get faqQuestionNoPolicy => 'Warum gibt es keine Datenschutzerklärung?'; + + @override + String get faqAnswerNoPolicy => 'Weil wir keine Daten von Ihnen erheben.'; + + @override + String get faqQuestionDataStored => 'Wo werden meine Daten gespeichert?'; + + @override + String get faqAnswerDataStored => + 'Ihre Eingaben werden lokal auf Ihrem Gerät gespeichert. In der Über-Seite können Sie alle gespeicherten Daten jederzeit löschen.'; + + @override + String get faqQuestionNoDevice => + 'Was ist, wenn mein Gerät nicht in der Liste ist?'; + + @override + String get faqAnswerNoDevice => + 'Sie können eigene Geräte hinzufügen und den Check trotzdem durchführen. Die Empfehlungen basieren dann auf Ihrer Konfiguration und Ihren Antworten.'; + + @override + String get faqQuestionRiskMeaning => + 'Was bedeuten niedriges, mittleres und hohes Risiko?'; + + @override + String get faqAnswerRiskMeaning => + 'Diese Stufen zeigen, wie stark Ihre aktuelle Konfiguration Privatsphäre-Risiken begünstigen kann. Sie sind eine Orientierung und keine rechtliche oder technische Zertifizierung.'; + + @override + String get faqQuestionLegalAdvice => 'Ist das eine Rechtsberatung?'; + + @override + String get faqAnswerLegalAdvice => + 'Nein. Simplications bietet praktische Orientierung und Empfehlungen, ersetzt aber keine rechtliche oder professionelle Sicherheitsberatung.'; + + @override + String get faqQuestionCanShare => 'Kann ich mein Ergebnis teilen?'; + + @override + String get faqAnswerCanShare => + 'Ja. Im Ergebnisbildschirm können Sie Ihre Zusammenfassung direkt als Text oder PDF exportieren und teilen.'; + + @override + String get websiteOpenFailed => 'Website konnte nicht geöffnet werden.'; + + @override + String get deleteAllDataTitle => 'Alle Daten löschen?'; + + @override + String get deleteAllDataBody => + 'Alle erfassten Räume, Geräte und Antworten werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.'; + + @override + String get deleteAllDataButton => 'Daten löschen'; + + @override + String get allDataDeleted => 'Alle gespeicherten Daten wurden gelöscht.'; + + @override + String get projectPartners => 'Projektpartner'; + + @override + String get coordinationFunding => 'Koordination & Förderung'; + + @override + String get coordination => 'Koordination'; + + @override + String get platformPrivacy => 'Plattform Privatheit'; + + @override + String get fundingAgency => 'Fördermittelgeber'; + + @override + String get fundingAgencyValue => + 'Bundesministerium für Forschung, Technologie und Raumfahrt\nFKZ 16KIS1868K'; + + @override + String get website => 'Website'; + + @override + String get dangerZone => 'Gefahrenbereich'; + + @override + String get dangerZoneWarning => + 'Achtung: Diese Aktion entfernt alle gespeicherten App-Daten dauerhaft.'; + + @override + String get expertModeTitle => 'Expertenmodus'; + + @override + String get expertModeToggleLabel => 'Detaillierten Expertenmodus aktivieren'; + + @override + String get expertModeToggleHint => + 'Gleicher Ablauf, aber deutlich detailliertere Fragen pro Gerät (z. B. Aufbewahrungsdauer, Zugriffskontrolle, Drittweitergabe).'; + + @override + String get expertModeSourcesHint => + 'Methodisch angelehnt an folgende Forschungsprojekte:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (Community-Plattform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expertenmodus: Diese Fragen vertiefen Datenpraktiken und Governance (u. a. Speicherfristen, Zugriffskontrolle, Drittweitergabe) nach Ansätzen aus CMU IoT Label und Unboxing.IoT.Privacy.'; + + @override + String get roomDeleteTitle => 'Raum löschen?'; + + @override + String get roomDeleteBody => + 'Dieser benutzerdefinierte Raum wird gelöscht. Alle verknüpften Geräte werden auch entfernt.'; + + @override + String get add => 'Hinzufügen'; + + @override + String get addRoomDialogTitle => 'Neuen Raum hinzufügen'; + + @override + String get roomName => 'Raumname'; + + @override + String get roomNameHint => 'z. B. Wohnzimmer, Garage'; + + @override + String get chooseIcon => 'Symbol wählen:'; + + @override + String get addDeviceDialogTitle => 'Neues Gerät hinzufügen'; + + @override + String get deviceName => 'Gerätename'; + + @override + String get deviceNameHint => 'z. B. Mein Smart Speaker'; + + @override + String get baseRiskLabel => 'Basis-Risiko-Punktzahl (0-100)'; + + @override + String get baseRiskHint => 'z. B. 30 (niedrig) bis 60 (hoch)'; + + @override + String get hasCamera => 'Hat Kamera?'; + + @override + String get hasMicrophone => 'Hat Mikrofon?'; + + @override + String get camera => 'Kamera'; + + @override + String get microphone => 'Mikrofon'; + + @override + String get summaryTitle => 'Ihr Ergebnis'; + + @override + String get shareResult => 'Ergebnis teilen'; + + @override + String get shareAsText => 'Als Text teilen'; + + @override + String get shareAsPdf => 'Als PDF teilen'; + + @override + String get restart => 'Neu starten'; + + @override + String get noDevicesCaptured => 'Keine Geräte erfasst.'; + + @override + String get noDevicesHint => + 'Starten Sie erneut und fügen Sie Geräte hinzu, um eine Bewertung zu erhalten.'; + + @override + String get highRisk => 'Hohes Risiko'; + + @override + String get mediumRisk => 'Mittleres Risiko'; + + @override + String get lowRisk => 'Niedriges Risiko'; + + @override + String get exportFailed => 'Export fehlgeschlagen'; + + @override + String get summaryShareSubject => 'Simplications Ergebnis'; + + @override + String get summarySharePdfText => 'Simplications Ergebnisbericht als PDF'; + + @override + String get overview => 'Übersicht'; + + @override + String get evaluatedDevices => 'Bewertete Geräte'; + + @override + String skippedDevicesHint(Object count) { + return '$count Geräte übersprungen, da der Fragebogen nicht abgeschlossen wurde.'; + } + + @override + String get overallRisk => 'Gesamtrisiko'; + + @override + String get generalRecommendations => 'Allgemeine Empfehlungen'; + + @override + String get generalRecommendationsHint => + 'Diese Maßnahmen gelten unabhängig von einzelnen Geräten für Ihr gesamtes Smart Home.'; + + @override + String get fullCatalog => 'Vollständiger Maßnahmenkatalog'; + + @override + String get catalogButton => 'Zum vollständigen Maßnahmenkatalog'; + + @override + String get risk => 'Risiko'; + + @override + String get note => 'Hinweis'; + + @override + String get recommendations => 'Empfehlungen'; + + @override + String get urgent => 'Dringend'; + + @override + String get recommended => 'Empfohlen'; + + @override + String get optional => 'Optional'; + + @override + String get social => 'Sozial'; + + @override + String get technical => 'Technisch'; + + @override + String get security => 'Sicherheit'; + + @override + String get smartHomePrivacyHeader => 'Ihr Smart-Home-Datenschutz'; + + @override + String get devicesRated => 'bewertete Geräte'; + + @override + String get howRiskCalculated => 'Wie wird das Risiko berechnet?'; + + @override + String get totalScore => 'Gesamt'; + + @override + String get catalogSnackBarPrefix => 'Maßnahmenkatalog'; + + @override + String get reportExportedAt => 'Exportiert am'; + + @override + String get noActionLow => 'Alles in Ordnung - keine Maßnahmen erforderlich.'; + + @override + String get noActionMedium => + 'Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein mittleres Restrisiko.'; + + @override + String get noActionHigh => + 'Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein hohes Restrisiko.'; + + @override + String get overallLow => + 'Gut gemacht! Ihre Geräte sind überwiegend sicher konfiguriert. Schauen Sie trotzdem in die allgemeinen Empfehlungen.'; + + @override + String get overallMedium => + 'Es gibt Verbesserungspotenzial. Schauen Sie sich die Empfehlungen zu den einzelnen Geräten an.'; + + @override + String get overallHigh => + 'Mehrere Geräte haben erhebliche Privatsphäre-/Datenschutzrisiken. Bitte setzen Sie die Maßnahmen mit hoher Priorität zeitnah um.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' Es wurden $count Antwort$suffix mit \"Weiß ich nicht\" gegeben - nehmen Sie sich Zeit, die Einstellungen Ihrer Geräte besser kennenzulernen.'; + } + + @override + String get room_living => 'Wohnzimmer'; + + @override + String get room_kitchen => 'Küche'; + + @override + String get room_bedroom => 'Schlafzimmer'; + + @override + String get room_child_bedroom => 'Kinderzimmer'; + + @override + String get room_bathroom => 'Badezimmer'; + + @override + String get room_office => 'Arbeitszimmer'; + + @override + String get room_hallway => 'Flur / Eingang'; + + @override + String get room_garden => 'Garten / Außenbereich'; + + @override + String get room_basement => 'Keller / Speisekammer'; + + @override + String get room_whole_home => 'Ganze Wohnung'; + + @override + String get device_simple_sensor => + 'Einfacher Sensor (z. B. Bewegungs- oder Türsensor)'; + + @override + String get device_humidity_sensor => 'Feuchtigkeitssensor'; + + @override + String get device_temperature_sensor => 'Temperatursensor'; + + @override + String get device_light_sensor => 'Lichtsensor'; + + @override + String get device_smart_speaker => 'Smart Speaker / Sprachassistent'; + + @override + String get device_smart_display => 'Smart Display (z. B. Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smarte Innenkamera'; + + @override + String get device_outdoor_camera => 'Smarte Außenkamera'; + + @override + String get device_doorbell_camera => 'Smarte Türklingel mit Kamera'; + + @override + String get device_baby_monitor => 'Babymonitor / Babykamera'; + + @override + String get device_robot_vacuum => 'Saugroboter'; + + @override + String get device_smart_fridge => 'Smarter Kühlschrank'; + + @override + String get device_smart_oven => 'Smarter Backofen / Herd'; + + @override + String get device_smart_coffee => 'Smarte Kaffeemaschine'; + + @override + String get device_smart_washing => 'Smarte Waschmaschine / Trockner'; + + @override + String get device_smart_thermostat => + 'Smarter Thermostat / Heizungssteuerung'; + + @override + String get device_smart_plug => 'Smarte Steckdose'; + + @override + String get device_smart_light => 'Smarte Beleuchtung'; + + @override + String get device_smart_lock => 'Smartes Türschloss'; + + @override + String get device_smart_blind => 'Smarte Jalousie / Rolllade'; + + @override + String get device_fitness_tracker => 'Fitness-Tracker / Smartwatch'; + + @override + String get device_smart_toy => 'Smartes Spielzeug'; + + @override + String get device_smart_router => 'Smart Router / Mesh-System'; + + @override + String get device_smart_hub => 'Smart-Home-Hub (z. B. Homey, Home Assistant)'; + + @override + String get device_smart_meter => 'Intelligenter Stromzähler / Smart Meter'; + + @override + String get device_smart_irrigation => 'Smarte Bewässerungsanlage'; + + @override + String get device_smart_scale => 'Smarte Waage'; + + @override + String get device_smart_printer => 'Smarter Drucker'; + + @override + String get q_password_text => + 'Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?'; + + @override + String get q_password_hint => + 'Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.'; + + @override + String get q_updates_text => + 'Sind automatische Sicherheits-Updates für das Gerät aktiviert?'; + + @override + String get q_updates_hint => + 'Updates schließen bekannte Sicherheitslücken zeitnah.'; + + @override + String get q_network_text => + 'Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?'; + + @override + String get q_network_hint => + 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.'; + + @override + String get q_informed_text => + 'Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?'; + + @override + String get q_informed_hint => + 'Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.'; + + @override + String get q_permissions_text => + 'Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?'; + + @override + String get q_permissions_hint => + 'Nur wirklich benötigte Berechtigungen sollten aktiviert sein.'; + + @override + String get q_mic_active_text => + 'Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?'; + + @override + String get q_mic_active_hint => + 'Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.'; + + @override + String get q_camera_consent_text => + 'Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?'; + + @override + String get q_camera_consent_hint => + 'Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.'; + + @override + String get q_sensor_frequency_text => + 'Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?'; + + @override + String get q_sensor_frequency_hint => + 'Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.'; + + @override + String get q_sensor_data_deletion_text => + 'Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?'; + + @override + String get q_sensor_data_deletion_hint => + 'Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.'; + + @override + String get q_sensor_granularity_text => + 'Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?'; + + @override + String get q_sensor_granularity_hint => + 'Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.'; + + @override + String get q_sensor_local_text => + 'Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?'; + + @override + String get q_sensor_local_hint => + 'Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.'; + + @override + String get q_voice_history_text => + 'Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?'; + + @override + String get q_voice_history_hint => + 'BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.'; + + @override + String get q_voice_local_text => + 'Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?'; + + @override + String get q_voice_local_hint => + 'Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.'; + + @override + String get q_skills_permissions_text => + 'Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?'; + + @override + String get q_skills_permissions_hint => + 'Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.'; + + @override + String get q_video_encryption_text => + 'Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?'; + + @override + String get q_video_encryption_hint => + 'BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.'; + + @override + String get q_video_storage_text => + 'Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?'; + + @override + String get q_video_storage_hint => + 'Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.'; + + @override + String get q_sharing_restrictions_text => + 'Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?'; + + @override + String get q_sharing_restrictions_hint => + 'Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.'; + + @override + String get q_motion_detection_text => + 'Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?'; + + @override + String get q_motion_detection_hint => + 'BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.'; + + @override + String get q_account_required_text => + 'Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?'; + + @override + String get q_account_required_hint => + 'Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.'; + + @override + String get q_tracking_disabled_text => + 'Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?'; + + @override + String get q_tracking_disabled_hint => + 'Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.'; + + @override + String get q_local_mode_text => + 'Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?'; + + @override + String get q_local_mode_hint => + 'Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.'; + + @override + String get q_data_collection_text => + 'Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?'; + + @override + String get q_data_collection_hint => + 'Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.'; + + @override + String get q_offline_control_text => + 'Können Sie das Thermostat auch offline betreiben (ohne Internet)?'; + + @override + String get q_offline_control_hint => + 'Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.'; + + @override + String get q_family_access_text => + 'Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?'; + + @override + String get q_family_access_hint => + 'Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.'; + + @override + String get q_local_control_text => + 'Können Automatisierungen lokal ohne Internetverbindung erfolgen?'; + + @override + String get q_local_control_hint => + 'Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.'; + + @override + String get q_usage_tracking_text => + 'Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?'; + + @override + String get q_usage_tracking_hint => + 'Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.'; + + @override + String get q_offline_fallback_text => + 'Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?'; + + @override + String get q_offline_fallback_hint => + 'Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.'; + + @override + String get q_offline_unlock_text => + 'Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?'; + + @override + String get q_offline_unlock_hint => + 'Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.'; + + @override + String get q_access_logging_text => + 'Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?'; + + @override + String get q_access_logging_hint => + 'Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.'; + + @override + String get q_two_factor_text => + 'Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?'; + + @override + String get q_two_factor_hint => + 'BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.'; + + @override + String get q_map_privacy_text => + 'Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?'; + + @override + String get q_map_privacy_hint => + 'Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.'; + + @override + String get q_cloud_required_text => + 'Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?'; + + @override + String get q_cloud_required_hint => + 'Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.'; + + @override + String get q_vision_data_text => + 'Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?'; + + @override + String get q_vision_data_hint => + 'Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.'; + + @override + String get q_parental_control_text => + 'Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?'; + + @override + String get q_parental_control_hint => + 'Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.'; + + @override + String get q_child_data_limits_text => + 'Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?'; + + @override + String get q_child_data_limits_hint => + 'Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.'; + + @override + String get q_recording_disable_text => + 'Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?'; + + @override + String get q_recording_disable_hint => + 'BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.'; + + @override + String get q_health_sharing_text => + 'Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?'; + + @override + String get q_health_sharing_hint => + 'Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.'; + + @override + String get q_location_tracking_text => + 'Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?'; + + @override + String get q_location_tracking_hint => + 'GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.'; + + @override + String get q_expert_data_retention_duration_text => + 'Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.'; + + @override + String get q_expert_access_control_granular_text => + 'Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'Eine ausdrückliche \"kein Datenverkauf\"-Option ist ein starkes Datenschutzsignal.'; + + @override + String get q_expert_update_support_window_text => + 'Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?'; + + @override + String get q_expert_update_support_window_hint => + 'Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.'; + + @override + String get q_expert_vulnerability_process_text => + 'Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.'; + + @override + String get q_expert_offline_functionality_text => + 'Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?'; + + @override + String get q_expert_offline_functionality_hint => + 'Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.'; + + @override + String get q_expert_child_data_protection_text => + 'Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.'; + + @override + String get q_expert_access_revocation_text => + 'Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?'; + + @override + String get q_expert_access_revocation_hint => + 'Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.'; + + @override + String get a_password_title => 'Standard-Passwort ändern'; + + @override + String get a_password_desc => + 'Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.'; + + @override + String get a_updates_title => 'Automatische Updates aktivieren'; + + @override + String get a_updates_desc => + 'Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.'; + + @override + String get a_network_title => 'Separates IoT-WLAN einrichten'; + + @override + String get a_network_desc => + 'Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.'; + + @override + String get a_informed_title => 'Haushaltsmitglieder informieren'; + + @override + String get a_informed_desc => + 'Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.'; + + @override + String get a_permissions_title => 'App-Berechtigungen einschränken'; + + @override + String get a_permissions_desc => + 'Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.'; + + @override + String get a_camera_consent_title => + 'Kameraausrichtung mit Bewohnern abstimmen'; + + @override + String get a_camera_consent_desc => + 'Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.'; + + @override + String get a_mic_active_title => 'Mikrofon bei Nichtnutzung deaktivieren'; + + @override + String get a_mic_active_desc => + 'Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.'; + + @override + String get a_sensor_frequency_title => 'Messintervall reduzieren'; + + @override + String get a_sensor_frequency_desc => + 'Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.'; + + @override + String get a_sensor_data_deletion_title => 'Alte Messwerte löschen'; + + @override + String get a_sensor_data_deletion_desc => + 'Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.'; + + @override + String get a_sensor_granularity_title => 'Daten weniger detailliert anzeigen'; + + @override + String get a_sensor_granularity_desc => + 'Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.'; + + @override + String get a_sensor_local_title => 'Lokale Verarbeitung bevorzugen'; + + @override + String get a_sensor_local_desc => + 'Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.'; + + @override + String get a_voice_history_title => 'Sprachaufzeichnungen löschen'; + + @override + String get a_voice_history_desc => + 'BSI-Empfehlung: Löschen Sie Sprachaufzeichnungen regelmäßig und deaktivieren Sie die Speicherung von Sprachverlauf, falls die Option verfügbar ist.'; + + @override + String get a_voice_local_title => 'Lokale Sprachverarbeitung aktivieren'; + + @override + String get a_voice_local_desc => + 'Aktivieren Sie lokale Sprachverarbeitung, falls verfügbar. Falls nicht verfügbar, minimieren Sie Cloud-Speicherung von Sprachdaten.'; + + @override + String get a_skills_permissions_title => 'Skills/Fähigkeiten überprüfen'; + + @override + String get a_skills_permissions_desc => + 'Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.'; + + @override + String get a_video_encryption_title => + 'Ende-zu-Ende-Verschlüsselung aktivieren'; + + @override + String get a_video_encryption_desc => + 'Aktivieren Sie in den Kamera-Einstellungen eine Ende-zu-Ende-verschlüsselte Übertragung für Livebild und Aufnahmen.'; + + @override + String get a_video_storage_title => 'Aufnahmen lokal speichern'; + + @override + String get a_video_storage_desc => + 'Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.'; + + @override + String get a_sharing_restrictions_title => 'Kamera-Zugriffe einschränken'; + + @override + String get a_sharing_restrictions_desc => + 'Entfernen Sie in der App alle unnötigen Freigaben und erlauben Sie Live-View/Aufnahmen nur für benötigte Konten.'; + + @override + String get a_motion_detection_title => + 'Bewegungserkennung bei Anwesenheit deaktivieren'; + + @override + String get a_motion_detection_desc => + 'Deaktivieren Sie Bewegungserkennung, wenn Personen zu Hause sind, oder setzen Sie einen Zeitplan, der sie nur in Abwesenheitszeiten aktiviert.'; + + @override + String get a_account_required_title => 'Kontopflicht datenschutzarm umsetzen'; + + @override + String get a_account_required_desc => + 'Falls kein kontoloser Betrieb möglich ist, verwenden Sie ein separates Konto mit minimalen Profildaten und deaktivieren Sie personalisierte Dienste.'; + + @override + String get a_tracking_disabled_title => 'Tracking und Werbung deaktivieren'; + + @override + String get a_tracking_disabled_desc => + 'Deaktivieren Sie in den Datenschutzoptionen Tracking, personalisierte Werbung und optionale Telemetrie.'; + + @override + String get a_local_mode_title => 'Offline-Nutzung bevorzugen'; + + @override + String get a_local_mode_desc => + 'Nutzen Sie das Gerät primär über lokale Quellen (z. B. HDMI), um Datenübertragung an den Hersteller zu reduzieren.'; + + @override + String get a_data_collection_title => 'Historien-Upload deaktivieren'; + + @override + String get a_data_collection_desc => + 'Deaktivieren Sie in der Thermostat-App die Übertragung von Temperaturhistorien an den Hersteller und verkürzen Sie die Speicherdauer.'; + + @override + String get a_offline_control_title => 'Lokale Steuerung einrichten'; + + @override + String get a_offline_control_desc => + 'Konfigurieren Sie lokale Zeitpläne und eine Bedienung ohne Cloud-Abhängigkeit, falls das Gerät dies unterstützt.'; + + @override + String get a_family_access_title => + 'Zugriffsrechte für Haushaltsmitglieder trennen'; + + @override + String get a_family_access_desc => + 'Richten Sie getrennte Rollen/Konten ein, damit nur berechtigte Personen Änderungen an der Heizung vornehmen können.'; + + @override + String get a_local_control_title => 'Lokale Automatisierungen aktivieren'; + + @override + String get a_local_control_desc => + 'Nutzen Sie lokale Szenen/Zeitpläne statt Cloud-Automatisierungen, sofern verfügbar.'; + + @override + String get a_usage_tracking_title => 'Nutzungs-Tracking deaktivieren'; + + @override + String get a_usage_tracking_desc => + 'Schalten Sie in den App-Einstellungen Analyse-, Telemetrie- und Nutzungsdatenerfassung aus.'; + + @override + String get a_offline_fallback_title => 'Offline-Notbetrieb sicherstellen'; + + @override + String get a_offline_fallback_desc => + 'Prüfen Sie lokale Schalter/Taster und richten Sie Fallback-Bedienung ein, damit das Gerät auch ohne Internet nutzbar bleibt.'; + + @override + String get a_offline_unlock_title => 'Offline-Zugang absichern'; + + @override + String get a_offline_unlock_desc => + 'Richten Sie einen physischen Schlüssel oder einen Notfall-Code ein und testen Sie den Zugriff bei Ausfall der Internetverbindung.'; + + @override + String get a_access_logging_title => 'Zugriffsprotokoll aktivieren'; + + @override + String get a_access_logging_desc => + 'Aktivieren Sie Protokollierung und Benachrichtigungen für Schlossöffnungen, damit unbefugte Zugriffe auffallen.'; + + @override + String get a_two_factor_title => 'Zwei-Faktor-Authentifizierung aktivieren'; + + @override + String get a_two_factor_desc => + 'BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.'; + + @override + String get a_map_privacy_title => 'Cloud-Grundrissspeicherung deaktivieren'; + + @override + String get a_map_privacy_desc => + 'Stellen Sie die Speicherung auf lokal um und deaktivieren Sie Cloud-Backups von Grundrissen, falls diese Option verfügbar ist.'; + + @override + String get a_cloud_required_title => 'Cloud-Abhängigkeit reduzieren'; + + @override + String get a_cloud_required_desc => + 'Aktivieren Sie lokale Navigation oder Offline-Modus, falls verfügbar. Wenn nicht verfügbar, bewerten Sie einen Wechsel zu einem datenschutzfreundlicheren Modell.'; + + @override + String get a_vision_data_title => 'Kameradaten nur lokal verarbeiten'; + + @override + String get a_vision_data_desc => + 'Deaktivieren Sie Upload/Speicherung von Kamerabildern und nutzen Sie, wenn möglich, ausschließlich lokale Navigationsverarbeitung.'; + + @override + String get a_parental_control_title => 'Elternkontrolle einrichten'; + + @override + String get a_parental_control_desc => + 'Aktivieren Sie Elternkontrolle mit PIN und beschränken Sie Kontakte, Funktionen und Freigaben auf das Notwendige.'; + + @override + String get a_child_data_limits_title => 'Datenerfassung minimieren'; + + @override + String get a_child_data_limits_desc => + 'Deaktivieren Sie optionale Profildaten und erfassen Sie nur die für die Kernfunktion erforderlichen Kinderdaten.'; + + @override + String get a_recording_disable_title => 'Audio/Video-Aufnahmen deaktivieren'; + + @override + String get a_recording_disable_desc => + 'Schalten Sie Aufnahmefunktionen standardmäßig aus und aktivieren Sie sie nur bei konkretem Bedarf kurzzeitig.'; + + @override + String get a_health_sharing_title => + 'Gesundheitsdaten-Freigaben einschränken'; + + @override + String get a_health_sharing_desc => + 'Entziehen Sie unnötigen Drittanbieter-Apps den Zugriff auf Gesundheitsdaten in App- und Kontoeinstellungen.'; + + @override + String get a_location_tracking_title => 'Standortfreigabe reduzieren'; + + @override + String get a_location_tracking_desc => + 'Deaktivieren Sie Standortverfolgung außerhalb aktiver Nutzung oder erlauben Sie sie nur beim Verwenden der App.'; + + @override + String get a_expert_data_retention_duration_title => + 'Speicherfristen festlegen'; + + @override + String get a_expert_data_retention_duration_desc => + 'Setzen Sie klare kurze Aufbewahrungsfristen in den Einstellungen und löschen Sie Altbestände regelmäßig.'; + + @override + String get a_expert_access_control_granular_title => + 'Granulare Rollen und Konten einführen'; + + @override + String get a_expert_access_control_granular_desc => + 'Nutzen Sie getrennte Konten statt Shared-Logins und vergeben Sie nur die minimal nötigen Rechte.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Drittweitergabe begrenzen'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Deaktivieren Sie Partner-, Werbe- und Analyseweitergaben in Datenschutz- und Kontoeinstellungen.'; + + @override + String get a_expert_data_sale_disabled_title => 'Datenverkauf widersprechen'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Aktivieren Sie vorhandene \"Do not sell\"-Optionen bzw. widersprechen Sie der Datenweitergabe für Vermarktung.'; + + @override + String get a_expert_update_support_window_title => + 'Update-Zusage verifizieren'; + + @override + String get a_expert_update_support_window_desc => + 'Prüfen Sie die offizielle Update-Policy des Herstellers und planen Sie bei fehlender Zusage einen Gerätewechsel ein.'; + + @override + String get a_expert_vulnerability_process_title => + 'Hersteller-Sicherheitsprozess prüfen'; + + @override + String get a_expert_vulnerability_process_desc => + 'Bevorzugen Sie Hersteller mit klarer Security-Kontaktstelle und Responsible-Disclosure-Prozess.'; + + @override + String get a_expert_offline_functionality_title => + 'Offline-Funktionalität priorisieren'; + + @override + String get a_expert_offline_functionality_desc => + 'Aktivieren Sie lokale Betriebsmodi und minimieren Sie Cloud-Pflichtfunktionen, sofern das Gerät dies erlaubt.'; + + @override + String get a_expert_bystander_transparency_title => + 'Transparenzhinweise für Umfeld ergänzen'; + + @override + String get a_expert_bystander_transparency_desc => + 'Sorgen Sie für sichtbare Hinweise, Aufnahmeanzeigen und klare Information für betroffene Personen im Umfeld.'; + + @override + String get a_expert_child_data_protection_title => + 'Kinderdatenschutz verschärfen'; + + @override + String get a_expert_child_data_protection_desc => + 'Aktivieren Sie kindgerechte Profile, minimieren Sie Datenerhebung und deaktivieren Sie Profilbildung/Weitergabe.'; + + @override + String get a_expert_access_revocation_title => + 'Schnellen Zugriffswiderruf einrichten'; + + @override + String get a_expert_access_revocation_desc => + 'Stellen Sie sicher, dass digitale Schlüssel einzeln und sofort widerrufen werden können, z. B. bei Geräteverlust.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Inferenzfunktionen einschränken'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Deaktivieren Sie Funktionen, die sensible Gesundheits- oder Verhaltensprofile ableiten, sofern diese nicht zwingend benötigt werden.'; + + @override + String get a_dont_know_title => 'Geräteeinstellungen besser kennenlernen'; + + @override + String get a_dont_know_desc => + 'Mindestens eine Frage wurde mit \"Weiß ich nicht\" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.'; + + @override + String get sl_base_risk => 'Grundrisiko des Gerätetyps'; + + @override + String get sl_child_room_bonus => 'Erhöhte Sensibilität: Kinderzimmer'; + + @override + String get sl_password => 'Standard-Passwort nicht geändert'; + + @override + String get sl_updates => 'Automatische Updates nicht aktiv'; + + @override + String get sl_network => 'Kein separates IoT-WLAN eingerichtet'; + + @override + String get sl_informed => 'Haushaltsmitglieder nicht informiert'; + + @override + String get sl_permissions => 'App-Berechtigungen nicht reduziert'; + + @override + String get sl_camera_consent => 'Kein Einverständnis für Kamerabereich'; + + @override + String get sl_mic_active => 'Mikrofon nicht bei Nichtnutzung deaktiviert'; + + @override + String get sl_sensor_frequency => 'Messintervall nicht reduziert'; + + @override + String get sl_sensor_data_deletion => 'Alte Messwerte nicht gelöscht'; + + @override + String get sl_sensor_granularity => 'Daten zu fein granular gespeichert'; + + @override + String get sl_sensor_local => 'Daten in die Cloud übertragen'; + + @override + String get sl_voice_history => 'Sprachaufnahmen nicht löschbar'; + + @override + String get sl_voice_local => 'Keine lokale Sprachverarbeitung'; + + @override + String get sl_skills_permissions => 'Skills nicht regelmäßig geprüft'; + + @override + String get sl_video_encryption => 'Videoübertragung nicht verschlüsselt'; + + @override + String get sl_video_storage => 'Aufnahmen nur in Anbieter-Cloud'; + + @override + String get sl_sharing_restrictions => + 'Zugriff auf Aufnahmen nicht kontrolliert'; + + @override + String get sl_motion_detection => 'Bewegungserkennung immer aktiv'; + + @override + String get sl_account_required => 'Pflichtkonto beim Hersteller nötig'; + + @override + String get sl_tracking_disabled => 'Werbe-Tracking nicht deaktiviert'; + + @override + String get sl_local_mode => 'Kein Offline-Betrieb möglich'; + + @override + String get sl_data_collection => 'Temperaturverlauf an Hersteller übertragen'; + + @override + String get sl_offline_control => 'Kein Offline-Betrieb möglich'; + + @override + String get sl_family_access => 'Zugriff nicht einschränkbar'; + + @override + String get sl_local_control => 'Automatisierungen nur mit Internet'; + + @override + String get sl_usage_tracking => 'Schaltmuster vom Hersteller erfasst'; + + @override + String get sl_offline_fallback => 'Gerät offline nicht nutzbar'; + + @override + String get sl_offline_unlock => 'Kein Offline-Öffnen möglich'; + + @override + String get sl_access_logging => 'Kein Zugriffsprotokoll verfügbar'; + + @override + String get sl_two_factor => '2-Faktor-Authentifizierung fehlt'; + + @override + String get sl_map_privacy => 'Grundriss an Hersteller übertragen'; + + @override + String get sl_cloud_required => 'Navigation nur mit Cloud möglich'; + + @override + String get sl_vision_data => 'Kamerabilder gespeichert oder übertragen'; + + @override + String get sl_parental_control => 'Elternkontrolle nicht eingerichtet'; + + @override + String get sl_child_data_limits => 'Datenmenge nicht eingeschränkt'; + + @override + String get sl_recording_disable => 'Aufnahmen nicht deaktivierbar'; + + @override + String get sl_health_sharing => 'Gesundheitsdaten mit Dritten geteilt'; + + @override + String get sl_location_tracking => 'Standortverfolgung aktiv'; + + @override + String get sl_expert_data_retention_duration => + 'Aufbewahrungsdauer unklar/zu lang'; + + @override + String get sl_expert_access_control_granular => + 'Granulare Zugriffskontrolle fehlt'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Weitergabe an Dritte nicht begrenzt'; + + @override + String get sl_expert_data_sale_disabled => + 'Datenverkauf nicht ausgeschlossen'; + + @override + String get sl_expert_update_support_window => + 'Garantierter Update-Zeitraum unbekannt'; + + @override + String get sl_expert_vulnerability_process => + 'Schwachstellenprozess nicht dokumentiert'; + + @override + String get sl_expert_offline_functionality => + 'Sinnvoller Betrieb ohne Internet nicht möglich'; + + @override + String get sl_expert_bystander_transparency => + 'Transparenz für Betroffene im Umfeld fehlt'; + + @override + String get sl_expert_child_data_protection => + 'Schutzmaßnahmen für Kinderdaten fehlen'; + + @override + String get sl_expert_access_revocation => + 'Einzelner Zugriffswiderruf nicht möglich'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Kontrollen gegen sensible Inferenz fehlen'; + + @override + String get risk_hint_camera => + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.'; + + @override + String get risk_hint_mic => + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.'; + + @override + String get risk_hint_lock => + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.'; + + @override + String get risk_hint_child_room => + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.'; + + @override + String get risk_hint_generic => + 'Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.'; + + @override + String get gen_rec_0 => + 'Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).'; + + @override + String get gen_rec_1 => + 'Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.'; + + @override + String get gen_rec_2 => + 'Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.'; + + @override + String get gen_rec_3 => + 'Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.'; + + @override + String get gen_rec_4 => + 'Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.'; + + @override + String get gen_rec_5 => + 'Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.'; + + @override + String get gen_rec_6 => + 'Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein.'; +} diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart new file mode 100644 index 0000000..136f078 --- /dev/null +++ b/lib/l10n/app_localizations_en.dart @@ -0,0 +1,1612 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => 'Simplications\nSmart Home\nPrivacy Check'; + + @override + String get welcomeDescription => + 'Capture your smart devices room by room and receive a privacy assessment with concrete recommendations.'; + + @override + String get stepSelectRooms => 'Select room'; + + @override + String get stepCaptureDevices => 'Capture devices'; + + @override + String get stepAnswerQuestions => 'Answer questions'; + + @override + String get stepGetRisk => 'Get risk profile & recommendations'; + + @override + String get start => 'Start'; + + @override + String get resume => 'Resume'; + + @override + String get about => 'About'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Select room'; + + @override + String get roomQuestion => 'Which room would you like to check now?'; + + @override + String get roomInstruction => + 'Tap a room, capture your devices there, then return here to choose the next room.'; + + @override + String get results => 'Results'; + + @override + String get alreadyEvaluated => 'Already evaluated'; + + @override + String get notCompleted => 'Not completed'; + + @override + String get addRoom => 'Add room'; + + @override + String get deviceTitlePrefix => 'Devices'; + + @override + String get roomCheck => 'Room check'; + + @override + String get deviceQuestion => 'Which smart devices do you use in this room?'; + + @override + String get deviceQuestionHint => 'Tap a device to answer its questions.'; + + @override + String get noKnownDevices => + 'No known devices for this room. You can add your own device.'; + + @override + String get addDevice => 'Add\ndevice'; + + @override + String get noDevice => 'No device'; + + @override + String get nextRoom => 'Next room'; + + @override + String get deleteDeviceTitle => 'Delete device?'; + + @override + String get deleteDeviceBody => + 'This custom device will be deleted. All linked instances will also be removed.'; + + @override + String get delete => 'Delete'; + + @override + String get cancel => 'Cancel'; + + @override + String get confirm => 'Confirm'; + + @override + String get noDeviceDialogTitle => 'No devices in this room?'; + + @override + String get noDeviceDialogBody => + 'This room will be completed without devices and will not affect scoring.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Existing device selections for this room will be discarded. This room will be completed without devices and will not affect scoring.'; + + @override + String get questionnaireTitle => 'Questions'; + + @override + String get connectedDevice => 'Connected device'; + + @override + String get done => 'Done'; + + @override + String get yes => 'Yes'; + + @override + String get no => 'No'; + + @override + String get dontKnow => 'I don\'t know'; + + @override + String get notApplicableForDevice => + 'This question does not apply to my device'; + + @override + String get languageDialogTitle => 'Choose language'; + + @override + String get currentLanguage => 'Current language'; + + @override + String get aboutScreenTitle => 'About the app'; + + @override + String get faqScreenTitle => 'Frequently Asked Questions'; + + @override + String get aboutSubtitle => 'Research project on smart home privacy'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Chemnitz University of Technology'; + + @override + String get aboutPartnerHsAnhalt => 'Anhalt University of Applied Sciences'; + + @override + String get aboutPartnerVzSachsen => 'Consumer Center Saxony'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'What is Simplications?'; + + @override + String get faqAnswerWhatIs => + 'Simplications is a research project on smart-home privacy. This app is one part of the project and guides you room by room through your devices with practical recommendations based on your answers.'; + + @override + String get faqQuestionHowWorks => 'How does the check work?'; + + @override + String get faqAnswerHowWorks => + 'You select a room, add your smart devices, answer device-specific questions, and receive a risk profile with prioritized actions.'; + + @override + String get faqQuestionNoPolicy => 'Why is there no data protection policy?'; + + @override + String get faqAnswerNoPolicy => 'Because we do not collect your data.'; + + @override + String get faqQuestionDataStored => 'Where is my data stored?'; + + @override + String get faqAnswerDataStored => + 'Your assessment data is stored locally on your device. You can delete all stored data at any time in the About screen.'; + + @override + String get faqQuestionNoDevice => 'What if my device is not listed?'; + + @override + String get faqAnswerNoDevice => + 'You can add custom devices and still complete the check. The recommendations then rely on your provided setup and answers.'; + + @override + String get faqQuestionRiskMeaning => + 'What do low, medium, and high risk mean?'; + + @override + String get faqAnswerRiskMeaning => + 'They indicate how strongly your current configuration may expose privacy-related risks. They are guidance levels, not legal or technical certification.'; + + @override + String get faqQuestionLegalAdvice => 'Is this legal advice?'; + + @override + String get faqAnswerLegalAdvice => + 'No. Simplications provides practical orientation and recommendations, but does not replace legal or professional security consultation.'; + + @override + String get faqQuestionCanShare => 'Can I share my results?'; + + @override + String get faqAnswerCanShare => + 'Yes. You can export and share your summary as text or PDF directly from the results screen.'; + + @override + String get websiteOpenFailed => 'Could not open website.'; + + @override + String get deleteAllDataTitle => 'Delete all data?'; + + @override + String get deleteAllDataBody => + 'All captured rooms, devices, and answers will be permanently deleted. This action cannot be undone.'; + + @override + String get deleteAllDataButton => 'Delete data'; + + @override + String get allDataDeleted => 'All saved data has been deleted.'; + + @override + String get projectPartners => 'Project partners'; + + @override + String get coordinationFunding => 'Coordination & Funding'; + + @override + String get coordination => 'Coordination'; + + @override + String get platformPrivacy => 'Platform Privacy'; + + @override + String get fundingAgency => 'Funding body'; + + @override + String get fundingAgencyValue => + 'German Federal Ministry of Research, Technology and Space\nGrant 16KIS1868K'; + + @override + String get website => 'Website'; + + @override + String get dangerZone => 'Danger zone'; + + @override + String get dangerZoneWarning => + 'Warning: This action permanently removes all saved app data.'; + + @override + String get expertModeTitle => 'Expert mode'; + + @override + String get expertModeToggleLabel => 'Enable detailed expert mode'; + + @override + String get expertModeToggleHint => + 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'; + + @override + String get expertModeSourcesHint => + 'Methodologically inspired by the following research projects:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (community platform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'; + + @override + String get roomDeleteTitle => 'Delete room?'; + + @override + String get roomDeleteBody => + 'This custom room will be deleted. All linked devices will also be removed.'; + + @override + String get add => 'Add'; + + @override + String get addRoomDialogTitle => 'Add new room'; + + @override + String get roomName => 'Room name'; + + @override + String get roomNameHint => 'e.g. Living room, Garage'; + + @override + String get chooseIcon => 'Choose icon:'; + + @override + String get addDeviceDialogTitle => 'Add new device'; + + @override + String get deviceName => 'Device name'; + + @override + String get deviceNameHint => 'e.g. My smart speaker'; + + @override + String get baseRiskLabel => 'Base risk score (0-100)'; + + @override + String get baseRiskHint => 'e.g. 30 (low) to 60 (high)'; + + @override + String get hasCamera => 'Has camera?'; + + @override + String get hasMicrophone => 'Has microphone?'; + + @override + String get camera => 'Camera'; + + @override + String get microphone => 'Microphone'; + + @override + String get summaryTitle => 'Your result'; + + @override + String get shareResult => 'Share result'; + + @override + String get shareAsText => 'Share as text'; + + @override + String get shareAsPdf => 'Share as PDF'; + + @override + String get restart => 'Restart'; + + @override + String get noDevicesCaptured => 'No devices captured.'; + + @override + String get noDevicesHint => + 'Restart and add devices to receive an assessment.'; + + @override + String get highRisk => 'High risk'; + + @override + String get mediumRisk => 'Medium risk'; + + @override + String get lowRisk => 'Low risk'; + + @override + String get exportFailed => 'Export failed'; + + @override + String get summaryShareSubject => 'Simplications result'; + + @override + String get summarySharePdfText => 'Simplications report as PDF'; + + @override + String get overview => 'Overview'; + + @override + String get evaluatedDevices => 'Evaluated devices'; + + @override + String skippedDevicesHint(Object count) { + return '$count devices skipped because the questionnaire was not completed.'; + } + + @override + String get overallRisk => 'Overall risk'; + + @override + String get generalRecommendations => 'General recommendations'; + + @override + String get generalRecommendationsHint => + 'These measures apply to your whole smart home regardless of individual devices.'; + + @override + String get fullCatalog => 'Full action catalog'; + + @override + String get catalogButton => 'Open full action catalog'; + + @override + String get risk => 'Risk'; + + @override + String get note => 'Note'; + + @override + String get recommendations => 'Recommendations'; + + @override + String get urgent => 'Urgent'; + + @override + String get recommended => 'Recommended'; + + @override + String get optional => 'Optional'; + + @override + String get social => 'Social'; + + @override + String get technical => 'Technical'; + + @override + String get security => 'Security'; + + @override + String get smartHomePrivacyHeader => 'Your smart home privacy'; + + @override + String get devicesRated => 'rated devices'; + + @override + String get howRiskCalculated => 'How is risk calculated?'; + + @override + String get totalScore => 'Total'; + + @override + String get catalogSnackBarPrefix => 'Catalog'; + + @override + String get reportExportedAt => 'Exported at'; + + @override + String get noActionLow => 'Everything is fine - no actions required.'; + + @override + String get noActionMedium => + 'No concrete actions can currently be derived from your answers, but a medium residual risk remains.'; + + @override + String get noActionHigh => + 'No concrete actions can currently be derived from your answers, but a high residual risk remains.'; + + @override + String get overallLow => + 'Well done! Your devices are mostly configured securely. Still review the general recommendations.'; + + @override + String get overallMedium => + 'There is room for improvement. Review the recommendations for each device.'; + + @override + String get overallHigh => + 'Several devices have significant privacy/data-protection risks. Please implement high-priority measures promptly.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' $count answer$suffix were marked as \"I don\'t know\" - take time to understand your device settings better.'; + } + + @override + String get room_living => 'Living room'; + + @override + String get room_kitchen => 'Kitchen'; + + @override + String get room_bedroom => 'Bedroom'; + + @override + String get room_child_bedroom => 'Child\'s bedroom'; + + @override + String get room_bathroom => 'Bathroom'; + + @override + String get room_office => 'Office'; + + @override + String get room_hallway => 'Hallway / Entrance'; + + @override + String get room_garden => 'Garden / Outdoor area'; + + @override + String get room_basement => 'Basement / Pantry'; + + @override + String get room_whole_home => 'Entire home'; + + @override + String get device_simple_sensor => + 'Basic sensor (e.g., motion or door sensor)'; + + @override + String get device_humidity_sensor => 'Humidity sensor'; + + @override + String get device_temperature_sensor => 'Temperature sensor'; + + @override + String get device_light_sensor => 'Light sensor'; + + @override + String get device_smart_speaker => 'Smart speaker / voice assistant'; + + @override + String get device_smart_display => 'Smart display (e.g., Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smart indoor camera'; + + @override + String get device_outdoor_camera => 'Smart outdoor camera'; + + @override + String get device_doorbell_camera => 'Smart doorbell with camera'; + + @override + String get device_baby_monitor => 'Baby monitor / baby camera'; + + @override + String get device_robot_vacuum => 'Robot vacuum'; + + @override + String get device_smart_fridge => 'Smart fridge'; + + @override + String get device_smart_oven => 'Smart oven / stove'; + + @override + String get device_smart_coffee => 'Smart coffee machine'; + + @override + String get device_smart_washing => 'Smart washer / dryer'; + + @override + String get device_smart_thermostat => 'Smart thermostat / heating control'; + + @override + String get device_smart_plug => 'Smart plug'; + + @override + String get device_smart_light => 'Smart lighting'; + + @override + String get device_smart_lock => 'Smart door lock'; + + @override + String get device_smart_blind => 'Smart blind / shutter'; + + @override + String get device_fitness_tracker => 'Fitness tracker / smartwatch'; + + @override + String get device_smart_toy => 'Smart toy'; + + @override + String get device_smart_router => 'Smart router / mesh system'; + + @override + String get device_smart_hub => 'Smart home hub (e.g., Homey, Home Assistant)'; + + @override + String get device_smart_meter => + 'Intelligent electricity meter / smart meter'; + + @override + String get device_smart_irrigation => 'Smart irrigation system'; + + @override + String get device_smart_scale => 'Smart scale'; + + @override + String get device_smart_printer => 'Smart printer'; + + @override + String get q_password_text => + 'Have you changed the default password of the device or its linked account?'; + + @override + String get q_password_hint => + 'Default passwords are often publicly known and easy to crack.'; + + @override + String get q_updates_text => + 'Are automatic security updates enabled for the device?'; + + @override + String get q_updates_hint => + 'Updates close known security vulnerabilities promptly.'; + + @override + String get q_network_text => + 'Is the device connected to a separate smart home or IoT Wi-Fi network?'; + + @override + String get q_network_hint => + 'A dedicated network for smart devices protects your main home network.'; + + @override + String get q_informed_text => + 'Are all people in the household informed about this device and its function?'; + + @override + String get q_informed_hint => + 'All household members should know what data the device captures.'; + + @override + String get q_permissions_text => + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?'; + + @override + String get q_permissions_hint => + 'Only permissions that are truly needed should be enabled.'; + + @override + String get q_mic_active_text => + 'Do you deactivate the microphone when you are not actively using it?'; + + @override + String get q_mic_active_hint => + 'Smart speakers and devices with microphones can be activated unintentionally.'; + + @override + String get q_camera_consent_text => + 'Does the camera only record areas for which everyone affected has given their consent?'; + + @override + String get q_camera_consent_hint => + 'Cameras in communal or private areas require the consent of all residents.'; + + @override + String get q_sensor_frequency_text => + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'; + + @override + String get q_sensor_frequency_hint => + 'A lower measurement frequency produces less data and limits inferences about your behavior.'; + + @override + String get q_sensor_data_deletion_text => + 'Are older measurement values deleted automatically or on request?'; + + @override + String get q_sensor_data_deletion_hint => + 'Old historical data should not be stored permanently. Check retention settings.'; + + @override + String get q_sensor_granularity_text => + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'; + + @override + String get q_sensor_granularity_hint => + 'Less granular views help prevent inferences about precise presence or behavior patterns.'; + + @override + String get q_sensor_local_text => + 'Is measurement data processed and stored locally without being transferred to the cloud?'; + + @override + String get q_sensor_local_hint => + 'Local processing prevents the vendor from accessing your measurement data.'; + + @override + String get q_voice_history_text => + 'Can you delete voice recordings from device history or disable this feature?'; + + @override + String get q_voice_history_hint => + 'BSI recommendation: Minimize recording retention or delete recordings regularly.'; + + @override + String get q_voice_local_text => + 'Is voice processing performed partly on the device locally?'; + + @override + String get q_voice_local_hint => + 'Local processing reduces the amount of data sent to the cloud.'; + + @override + String get q_skills_permissions_text => + 'Do you regularly review which skills have access to your account?'; + + @override + String get q_skills_permissions_hint => + 'Third-party skills can access sensitive data. Enable only necessary skills.'; + + @override + String get q_video_encryption_text => + 'Is video recording and transmission encrypted end-to-end?'; + + @override + String get q_video_encryption_hint => + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'; + + @override + String get q_video_storage_text => + 'Are recordings stored locally (not only in the vendor cloud)?'; + + @override + String get q_video_storage_hint => + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'; + + @override + String get q_sharing_restrictions_text => + 'Can you control who can access live view and recordings?'; + + @override + String get q_sharing_restrictions_hint => + 'You should be able to precisely control access to video recordings.'; + + @override + String get q_motion_detection_text => + 'Can you disable or schedule motion detection when you are at home?'; + + @override + String get q_motion_detection_hint => + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'; + + @override + String get q_account_required_text => + 'Can you use the device without a mandatory online account?'; + + @override + String get q_account_required_hint => + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'; + + @override + String get q_tracking_disabled_text => + 'Can you completely disable advertising and tracking features?'; + + @override + String get q_tracking_disabled_hint => + 'Smart TVs often collect viewing habit data. Look for privacy settings.'; + + @override + String get q_local_mode_text => + 'Can you use the device via HDMI or local sources without internet?'; + + @override + String get q_local_mode_hint => + 'Offline use protects usage data from being sent to the vendor.'; + + @override + String get q_data_collection_text => + 'Do temperature history and schedules stay on-device (not sent to the vendor)?'; + + @override + String get q_data_collection_hint => + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'; + + @override + String get q_offline_control_text => + 'Can you operate the thermostat offline (without internet)?'; + + @override + String get q_offline_control_hint => + 'Offline operation or local automation protects data from cloud access.'; + + @override + String get q_family_access_text => + 'Can you control who may adjust heating (e.g., restrict guests)?'; + + @override + String get q_family_access_hint => + 'Household members should have control without visitors changing everything.'; + + @override + String get q_local_control_text => + 'Can automations run locally without internet?'; + + @override + String get q_local_control_hint => + 'Local scenes and schedules protect your privacy better.'; + + @override + String get q_usage_tracking_text => + 'Have you disabled or limited vendor collection of switching patterns and usage times?'; + + @override + String get q_usage_tracking_hint => + 'Usage patterns can reveal presence and habits. Check app privacy settings.'; + + @override + String get q_offline_fallback_text => + 'Do devices still work if internet or app connection fails?'; + + @override + String get q_offline_fallback_hint => + 'Reliable local operation is important for daily use and privacy.'; + + @override + String get q_offline_unlock_text => + 'Can you unlock the lock offline (e.g., with code or key)?'; + + @override + String get q_offline_unlock_hint => + 'Backup options prevent lockout during internet or power outages.'; + + @override + String get q_access_logging_text => + 'Can you track who opened the lock and when?'; + + @override + String get q_access_logging_hint => + 'An access log helps you detect suspicious activity.'; + + @override + String get q_two_factor_text => + 'Is two-factor authentication (2FA) available for the lock account?'; + + @override + String get q_two_factor_hint => + 'BSI recommendation: 2FA protects your account from unauthorized remote access.'; + + @override + String get q_map_privacy_text => + 'Are created floor plans stored exclusively on the device locally?'; + + @override + String get q_map_privacy_hint => + 'Home floor plans are sensitive information and should not be sent to the vendor.'; + + @override + String get q_cloud_required_text => + 'Does floor-plan navigation work without cloud connection?'; + + @override + String get q_cloud_required_hint => + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.'; + + @override + String get q_vision_data_text => + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'; + + @override + String get q_vision_data_hint => + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'; + + @override + String get q_parental_control_text => + 'Are there parental control features to manage the toy?'; + + @override + String get q_parental_control_hint => + 'Parental controls should allow restricting contacts and features.'; + + @override + String get q_child_data_limits_text => + 'Can you limit which personal data the toy collects?'; + + @override + String get q_child_data_limits_hint => + 'Child-focused devices should collect and store minimal data.'; + + @override + String get q_recording_disable_text => + 'Can you disable audio and video recording on the device?'; + + @override + String get q_recording_disable_hint => + 'BSI recommendation: Recordings of children should only be possible with explicit control.'; + + @override + String get q_health_sharing_text => + 'Can you control which third parties can access your health data?'; + + @override + String get q_health_sharing_hint => + 'Health data is sensitive. Only authorized apps should have access.'; + + @override + String get q_location_tracking_text => + 'Can you disable location tracking when not needed?'; + + @override + String get q_location_tracking_hint => + 'GPS tracking uses battery and can reveal movement patterns.'; + + @override + String get q_expert_data_retention_duration_text => + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'; + + @override + String get q_expert_access_control_granular_text => + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granular access control reduces the risk of unauthorized access and misuse.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Is third-party sharing disabled or clearly limited to necessary services?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Is the sale of your data excluded (or actively disabled, where possible)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'An explicit \"no data sale\" option is a strong privacy signal.'; + + @override + String get q_expert_update_support_window_text => + 'Is it known how long the vendor guarantees security updates?'; + + @override + String get q_expert_update_support_window_hint => + 'A transparent update commitment reduces long-term security and privacy risks.'; + + @override + String get q_expert_vulnerability_process_text => + 'Is there a documented process for reporting and fixing vulnerabilities?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.'; + + @override + String get q_expert_offline_functionality_text => + 'Does the device remain meaningfully usable with limited internet connectivity?'; + + @override + String get q_expert_offline_functionality_hint => + 'More offline functionality often means less continuous data transfer to the cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'; + + @override + String get q_expert_child_data_protection_text => + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Devices in child-related contexts require especially strict privacy safeguards.'; + + @override + String get q_expert_access_revocation_text => + 'Can digital keys/access rights be revoked quickly and individually?'; + + @override + String get q_expert_access_revocation_hint => + 'Fast revocation is crucial when devices are shared or users change.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Are features that infer sensitive health or behavior profiles restricted or disableable?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inference controls reduce risks from secondary use of sensitive data.'; + + @override + String get a_password_title => 'Change default password'; + + @override + String get a_password_desc => + 'Replace the default password with a strong, unique password. Use a password manager.'; + + @override + String get a_updates_title => 'Enable automatic updates'; + + @override + String get a_updates_desc => + 'Enable automatic security updates in device or app settings.'; + + @override + String get a_network_title => 'Set up separate IoT Wi-Fi'; + + @override + String get a_network_desc => + 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'; + + @override + String get a_informed_title => 'Inform household members'; + + @override + String get a_informed_desc => + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.'; + + @override + String get a_permissions_title => 'Restrict app permissions'; + + @override + String get a_permissions_desc => + 'Check companion-app permissions in phone settings and disable unnecessary ones.'; + + @override + String get a_camera_consent_title => + 'Align camera positioning with residents'; + + @override + String get a_camera_consent_desc => + 'Obtain consent from everyone affected. The camera must not record areas without consent.'; + + @override + String get a_mic_active_title => 'Disable microphone when not in use'; + + @override + String get a_mic_active_desc => + 'Use the physical mute switch or disable the microphone in settings.'; + + @override + String get a_sensor_frequency_title => 'Reduce measurement interval'; + + @override + String get a_sensor_frequency_desc => + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'; + + @override + String get a_sensor_data_deletion_title => 'Delete old measurement values'; + + @override + String get a_sensor_data_deletion_desc => + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'; + + @override + String get a_sensor_granularity_title => 'Show less detailed data'; + + @override + String get a_sensor_granularity_desc => + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'; + + @override + String get a_sensor_local_title => 'Prefer local processing'; + + @override + String get a_sensor_local_desc => + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'; + + @override + String get a_voice_history_title => 'Delete voice recordings'; + + @override + String get a_voice_history_desc => + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'; + + @override + String get a_voice_local_title => 'Enable local voice processing'; + + @override + String get a_voice_local_desc => + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.'; + + @override + String get a_skills_permissions_title => 'Review skills/integrations'; + + @override + String get a_skills_permissions_desc => + 'Review which third-party skills have access. Disable unnecessary skills.'; + + @override + String get a_video_encryption_title => 'Enable end-to-end video encryption'; + + @override + String get a_video_encryption_desc => + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'; + + @override + String get a_video_storage_title => 'Store recordings locally'; + + @override + String get a_video_storage_desc => + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'; + + @override + String get a_sharing_restrictions_title => 'Restrict camera access'; + + @override + String get a_sharing_restrictions_desc => + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'; + + @override + String get a_motion_detection_title => + 'Disable motion detection when at home'; + + @override + String get a_motion_detection_desc => + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.'; + + @override + String get a_account_required_title => + 'Minimize privacy impact of required account'; + + @override + String get a_account_required_desc => + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'; + + @override + String get a_tracking_disabled_title => 'Disable tracking and advertising'; + + @override + String get a_tracking_disabled_desc => + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'; + + @override + String get a_local_mode_title => 'Prefer offline use'; + + @override + String get a_local_mode_desc => + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'; + + @override + String get a_data_collection_title => 'Disable history upload'; + + @override + String get a_data_collection_desc => + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'; + + @override + String get a_offline_control_title => 'Set up local control'; + + @override + String get a_offline_control_desc => + 'Configure local schedules and control without cloud dependency if the device supports it.'; + + @override + String get a_family_access_title => + 'Separate access rights for household members'; + + @override + String get a_family_access_desc => + 'Set up separate roles/accounts so that only authorized people can adjust the heating.'; + + @override + String get a_local_control_title => 'Enable local automations'; + + @override + String get a_local_control_desc => + 'Use local scenes/schedules instead of cloud automations where available.'; + + @override + String get a_usage_tracking_title => 'Disable usage tracking'; + + @override + String get a_usage_tracking_desc => + 'Disable analytics, telemetry, and usage data collection in app settings.'; + + @override + String get a_offline_fallback_title => 'Ensure offline fallback'; + + @override + String get a_offline_fallback_desc => + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'; + + @override + String get a_offline_unlock_title => 'Secure offline access'; + + @override + String get a_offline_unlock_desc => + 'Set up a physical key or emergency code and test access when internet is unavailable.'; + + @override + String get a_access_logging_title => 'Enable access log'; + + @override + String get a_access_logging_desc => + 'Enable logging and notifications for lock openings so unauthorized access can be detected.'; + + @override + String get a_two_factor_title => 'Enable two-factor authentication'; + + @override + String get a_two_factor_desc => + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.'; + + @override + String get a_map_privacy_title => 'Disable cloud floor-plan storage'; + + @override + String get a_map_privacy_desc => + 'Switch storage to local and disable cloud backups of floor plans if the option is available.'; + + @override + String get a_cloud_required_title => 'Reduce cloud dependency'; + + @override + String get a_cloud_required_desc => + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'; + + @override + String get a_vision_data_title => 'Process camera data locally only'; + + @override + String get a_vision_data_desc => + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'; + + @override + String get a_parental_control_title => 'Set up parental controls'; + + @override + String get a_parental_control_desc => + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'; + + @override + String get a_child_data_limits_title => 'Minimize data collection'; + + @override + String get a_child_data_limits_desc => + 'Disable optional profile data and collect only the child data required for core functionality.'; + + @override + String get a_recording_disable_title => 'Disable audio/video recordings'; + + @override + String get a_recording_disable_desc => + 'Disable recording features by default and enable them only briefly when specifically needed.'; + + @override + String get a_health_sharing_title => 'Restrict health data sharing'; + + @override + String get a_health_sharing_desc => + 'Revoke health data access from unnecessary third-party apps in app and account settings.'; + + @override + String get a_location_tracking_title => 'Reduce location sharing'; + + @override + String get a_location_tracking_desc => + 'Disable location tracking outside active use or allow it only while the app is in use.'; + + @override + String get a_expert_data_retention_duration_title => + 'Define retention periods'; + + @override + String get a_expert_data_retention_duration_desc => + 'Set short, clear retention periods in settings and regularly delete old data.'; + + @override + String get a_expert_access_control_granular_title => + 'Introduce granular roles and accounts'; + + @override + String get a_expert_access_control_granular_desc => + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Limit third-party sharing'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Disable partner, advertising, and analytics sharing in privacy and account settings.'; + + @override + String get a_expert_data_sale_disabled_title => 'Opt out of data sale'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'; + + @override + String get a_expert_update_support_window_title => 'Verify update commitment'; + + @override + String get a_expert_update_support_window_desc => + 'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'; + + @override + String get a_expert_vulnerability_process_title => + 'Review vendor security process'; + + @override + String get a_expert_vulnerability_process_desc => + 'Prefer vendors with a clear security contact and responsible disclosure process.'; + + @override + String get a_expert_offline_functionality_title => + 'Prioritize offline functionality'; + + @override + String get a_expert_offline_functionality_desc => + 'Enable local operating modes and minimize mandatory cloud features where the device allows.'; + + @override + String get a_expert_bystander_transparency_title => + 'Add transparency notices for bystanders'; + + @override + String get a_expert_bystander_transparency_desc => + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'; + + @override + String get a_expert_child_data_protection_title => + 'Strengthen child data protection'; + + @override + String get a_expert_child_data_protection_desc => + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'; + + @override + String get a_expert_access_revocation_title => + 'Set up rapid access revocation'; + + @override + String get a_expert_access_revocation_desc => + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Restrict inference features'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'; + + @override + String get a_dont_know_title => 'Get to know device settings better'; + + @override + String get a_dont_know_desc => + 'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'; + + @override + String get sl_base_risk => 'Baseline risk of device type'; + + @override + String get sl_child_room_bonus => 'Increased sensitivity: child\'s bedroom'; + + @override + String get sl_password => 'Default password not changed'; + + @override + String get sl_updates => 'Automatic updates not enabled'; + + @override + String get sl_network => 'No separate IoT Wi-Fi configured'; + + @override + String get sl_informed => 'Household members not informed'; + + @override + String get sl_permissions => 'App permissions not reduced'; + + @override + String get sl_camera_consent => 'No consent for camera-covered area'; + + @override + String get sl_mic_active => 'Microphone not disabled when unused'; + + @override + String get sl_sensor_frequency => 'Measurement interval not reduced'; + + @override + String get sl_sensor_data_deletion => 'Old measurement values not deleted'; + + @override + String get sl_sensor_granularity => 'Data stored with too much granularity'; + + @override + String get sl_sensor_local => 'Data transferred to cloud'; + + @override + String get sl_voice_history => 'Voice recordings not deletable'; + + @override + String get sl_voice_local => 'No local voice processing'; + + @override + String get sl_skills_permissions => 'Skills not reviewed regularly'; + + @override + String get sl_video_encryption => 'Video transmission not encrypted'; + + @override + String get sl_video_storage => 'Recordings only in vendor cloud'; + + @override + String get sl_sharing_restrictions => 'Recording access not controlled'; + + @override + String get sl_motion_detection => 'Motion detection always active'; + + @override + String get sl_account_required => 'Mandatory vendor account required'; + + @override + String get sl_tracking_disabled => 'Ad tracking not disabled'; + + @override + String get sl_local_mode => 'No offline operation possible'; + + @override + String get sl_data_collection => 'Temperature history sent to vendor'; + + @override + String get sl_offline_control => 'No offline operation possible'; + + @override + String get sl_family_access => 'Access cannot be restricted'; + + @override + String get sl_local_control => 'Automations require internet connection'; + + @override + String get sl_usage_tracking => 'Switching patterns collected by vendor'; + + @override + String get sl_offline_fallback => 'Device unusable offline'; + + @override + String get sl_offline_unlock => 'No offline unlock possible'; + + @override + String get sl_access_logging => 'No access log available'; + + @override + String get sl_two_factor => 'Two-factor authentication missing'; + + @override + String get sl_map_privacy => 'Floor plan transmitted to vendor'; + + @override + String get sl_cloud_required => 'Navigation only possible via cloud'; + + @override + String get sl_vision_data => 'Camera images stored or transmitted'; + + @override + String get sl_parental_control => 'Parental controls not configured'; + + @override + String get sl_child_data_limits => 'Data collection not limited'; + + @override + String get sl_recording_disable => 'Recording cannot be disabled'; + + @override + String get sl_health_sharing => 'Health data shared with third parties'; + + @override + String get sl_location_tracking => 'Location tracking enabled'; + + @override + String get sl_expert_data_retention_duration => + 'Retention duration unclear or too long'; + + @override + String get sl_expert_access_control_granular => + 'Granular access control missing'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Third-party sharing not limited'; + + @override + String get sl_expert_data_sale_disabled => 'Data sale not excluded'; + + @override + String get sl_expert_update_support_window => + 'Guaranteed update support window unknown'; + + @override + String get sl_expert_vulnerability_process => + 'Vulnerability process not documented'; + + @override + String get sl_expert_offline_functionality => + 'Meaningful offline operation not possible'; + + @override + String get sl_expert_bystander_transparency => + 'Transparency for nearby bystanders missing'; + + @override + String get sl_expert_child_data_protection => + 'Child-data protection measures missing'; + + @override + String get sl_expert_access_revocation => + 'Individual access revocation not possible'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Controls against sensitive inference missing'; + + @override + String get risk_hint_camera => + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'; + + @override + String get risk_hint_mic => + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'; + + @override + String get risk_hint_lock => + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'; + + @override + String get risk_hint_child_room => + 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'; + + @override + String get risk_hint_generic => + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'; + + @override + String get gen_rec_0 => + 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'; + + @override + String get gen_rec_1 => + 'Use a password manager and assign a unique, strong password to each device.'; + + @override + String get gen_rec_2 => + 'Enable multi-factor authentication (MFA) for all vendor accounts.'; + + @override + String get gen_rec_3 => + 'Define who in your household is responsible for updates, backups, and accounts.'; + + @override + String get gen_rec_4 => + 'Regularly review (at least once per quarter) all access permissions and accounts.'; + + @override + String get gen_rec_5 => + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'; + + @override + String get gen_rec_6 => + 'Use a household consent check before buying new devices and involve all household members.'; +} diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart new file mode 100644 index 0000000..237a541 --- /dev/null +++ b/lib/l10n/app_localizations_fr.dart @@ -0,0 +1,1623 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for French (`fr`). +class AppLocalizationsFr extends AppLocalizations { + AppLocalizationsFr([String locale = 'fr']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => + 'Simplications\nContrôle de confidentialité\nSmart Home'; + + @override + String get welcomeDescription => + 'Renseignez vos appareils intelligents pièce par pièce et obtenez une évaluation de confidentialité avec des recommandations concrètes.'; + + @override + String get stepSelectRooms => 'Choisir une pièce'; + + @override + String get stepCaptureDevices => 'Recenser les appareils'; + + @override + String get stepAnswerQuestions => 'Répondre aux questions'; + + @override + String get stepGetRisk => + 'Obtenir le profil de risque et les recommandations'; + + @override + String get start => 'Démarrer'; + + @override + String get resume => 'Continuer'; + + @override + String get about => 'À propos'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Sélectionner une pièce'; + + @override + String get roomQuestion => + 'Quelle pièce souhaitez-vous vérifier maintenant ?'; + + @override + String get roomInstruction => + 'Touchez une pièce, recensez-y vos appareils, puis revenez ici pour choisir la pièce suivante.'; + + @override + String get results => 'Résultats'; + + @override + String get alreadyEvaluated => 'Déjà évalué'; + + @override + String get notCompleted => 'Non terminé'; + + @override + String get addRoom => 'Ajouter une pièce'; + + @override + String get deviceTitlePrefix => 'Appareils'; + + @override + String get roomCheck => 'Vérification de la pièce'; + + @override + String get deviceQuestion => + 'Quels appareils intelligents utilisez-vous dans cette pièce ?'; + + @override + String get deviceQuestionHint => + 'Touchez un appareil pour répondre aux questions.'; + + @override + String get noKnownDevices => + 'Aucun appareil connu pour cette pièce. Vous pouvez ajouter votre propre appareil.'; + + @override + String get addDevice => 'Ajouter\nun appareil'; + + @override + String get noDevice => 'Aucun appareil'; + + @override + String get nextRoom => 'Pièce suivante'; + + @override + String get deleteDeviceTitle => 'Supprimer l\'appareil ?'; + + @override + String get deleteDeviceBody => + 'Cet appareil personnalisé sera supprimé. Toutes les instances liées seront également supprimées.'; + + @override + String get delete => 'Supprimer'; + + @override + String get cancel => 'Annuler'; + + @override + String get confirm => 'Confirmer'; + + @override + String get noDeviceDialogTitle => 'Aucun appareil dans cette pièce ?'; + + @override + String get noDeviceDialogBody => + 'Cette pièce sera terminée sans appareil et n\'affectera pas le score.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Les sélections d\'appareils existantes pour cette pièce seront ignorées. Cette pièce sera terminée sans appareil et n\'affectera pas le score.'; + + @override + String get questionnaireTitle => 'Questions'; + + @override + String get connectedDevice => 'Appareil connecté'; + + @override + String get done => 'Terminé'; + + @override + String get yes => 'Oui'; + + @override + String get no => 'Non'; + + @override + String get dontKnow => 'Je ne sais pas'; + + @override + String get notApplicableForDevice => + 'Cette question ne s\'applique pas à mon appareil'; + + @override + String get languageDialogTitle => 'Choisir la langue'; + + @override + String get currentLanguage => 'Langue actuelle'; + + @override + String get aboutScreenTitle => 'À propos de l’application'; + + @override + String get faqScreenTitle => 'Questions fréquentes'; + + @override + String get aboutSubtitle => + 'Projet de recherche sur la confidentialité des maisons connectées'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Université technique de Chemnitz'; + + @override + String get aboutPartnerHsAnhalt => 'Haute école d’Anhalt'; + + @override + String get aboutPartnerVzSachsen => 'Centre des consommateurs de Saxe'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'Qu’est-ce que Simplications ?'; + + @override + String get faqAnswerWhatIs => + 'Simplications est un projet de recherche sur la confidentialité des maisons connectées. Cette application est une composante du projet et vous guide pièce par pièce à travers vos appareils avec des recommandations pratiques selon vos réponses.'; + + @override + String get faqQuestionHowWorks => 'Comment fonctionne le contrôle ?'; + + @override + String get faqAnswerHowWorks => + 'Vous choisissez une pièce, ajoutez vos appareils intelligents, répondez à des questions spécifiques, puis recevez un profil de risque avec des actions priorisées.'; + + @override + String get faqQuestionNoPolicy => + 'Pourquoi n’y a-t-il pas de politique de protection des données ?'; + + @override + String get faqAnswerNoPolicy => + 'Parce que nous ne collectons pas vos données.'; + + @override + String get faqQuestionDataStored => 'Où sont stockées mes données ?'; + + @override + String get faqAnswerDataStored => + 'Vos données d’évaluation sont stockées localement sur votre appareil. Vous pouvez supprimer toutes les données enregistrées à tout moment depuis l’écran À propos.'; + + @override + String get faqQuestionNoDevice => + 'Que faire si mon appareil n’est pas dans la liste ?'; + + @override + String get faqAnswerNoDevice => + 'Vous pouvez ajouter des appareils personnalisés et terminer le contrôle. Les recommandations s’appuieront alors sur votre configuration et vos réponses.'; + + @override + String get faqQuestionRiskMeaning => + 'Que signifient risque faible, moyen et élevé ?'; + + @override + String get faqAnswerRiskMeaning => + 'Ces niveaux indiquent dans quelle mesure votre configuration actuelle peut exposer des risques de confidentialité. Ce sont des niveaux d’orientation, pas une certification juridique ou technique.'; + + @override + String get faqQuestionLegalAdvice => 'Est-ce un conseil juridique ?'; + + @override + String get faqAnswerLegalAdvice => + 'Non. Simplications fournit une orientation pratique et des recommandations, mais ne remplace pas un conseil juridique ou une consultation professionnelle en sécurité.'; + + @override + String get faqQuestionCanShare => 'Puis-je partager mes résultats ?'; + + @override + String get faqAnswerCanShare => + 'Oui. Depuis l’écran des résultats, vous pouvez exporter et partager votre résumé en texte ou en PDF.'; + + @override + String get websiteOpenFailed => 'Impossible d’ouvrir le site web.'; + + @override + String get deleteAllDataTitle => 'Supprimer toutes les données ?'; + + @override + String get deleteAllDataBody => + 'Toutes les pièces, appareils et réponses enregistrés seront supprimés définitivement. Cette action est irréversible.'; + + @override + String get deleteAllDataButton => 'Supprimer les données'; + + @override + String get allDataDeleted => + 'Toutes les données enregistrées ont été supprimées.'; + + @override + String get projectPartners => 'Partenaires du projet'; + + @override + String get coordinationFunding => 'Coordination et financement'; + + @override + String get coordination => 'Coordination'; + + @override + String get platformPrivacy => 'Plattform Privatheit'; + + @override + String get fundingAgency => 'Organisme financeur'; + + @override + String get fundingAgencyValue => + 'Ministère fédéral allemand de la Recherche, de la Technologie et de l’Espace\nSubvention 16KIS1868K'; + + @override + String get website => 'Site web'; + + @override + String get dangerZone => 'Zone de danger'; + + @override + String get dangerZoneWarning => + 'Attention : cette action supprime définitivement toutes les données enregistrées de l’application.'; + + @override + String get expertModeTitle => 'Expert mode'; + + @override + String get expertModeToggleLabel => 'Enable detailed expert mode'; + + @override + String get expertModeToggleHint => + 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'; + + @override + String get expertModeSourcesHint => + 'Methodologically inspired by the following research projects:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (community platform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'; + + @override + String get roomDeleteTitle => 'Supprimer la pièce ?'; + + @override + String get roomDeleteBody => + 'Cette pièce personnalisée sera supprimée. Tous les appareils liés seront également supprimés.'; + + @override + String get add => 'Ajouter'; + + @override + String get addRoomDialogTitle => 'Ajouter une nouvelle pièce'; + + @override + String get roomName => 'Nom de la pièce'; + + @override + String get roomNameHint => 'ex. Salon, Garage'; + + @override + String get chooseIcon => 'Choisir une icône :'; + + @override + String get addDeviceDialogTitle => 'Ajouter un nouvel appareil'; + + @override + String get deviceName => 'Nom de l’appareil'; + + @override + String get deviceNameHint => 'ex. Mon haut-parleur intelligent'; + + @override + String get baseRiskLabel => 'Score de risque de base (0-100)'; + + @override + String get baseRiskHint => 'ex. 30 (faible) à 60 (élevé)'; + + @override + String get hasCamera => 'Possède une caméra ?'; + + @override + String get hasMicrophone => 'Possède un microphone ?'; + + @override + String get camera => 'Caméra'; + + @override + String get microphone => 'Microphone'; + + @override + String get summaryTitle => 'Votre résultat'; + + @override + String get shareResult => 'Partager le résultat'; + + @override + String get shareAsText => 'Partager en texte'; + + @override + String get shareAsPdf => 'Partager en PDF'; + + @override + String get restart => 'Recommencer'; + + @override + String get noDevicesCaptured => 'Aucun appareil enregistré.'; + + @override + String get noDevicesHint => + 'Redémarrez et ajoutez des appareils pour obtenir une évaluation.'; + + @override + String get highRisk => 'Risque élevé'; + + @override + String get mediumRisk => 'Risque moyen'; + + @override + String get lowRisk => 'Risque faible'; + + @override + String get exportFailed => 'Échec de l’export'; + + @override + String get summaryShareSubject => 'Résultat Simplications'; + + @override + String get summarySharePdfText => 'Rapport Simplications en PDF'; + + @override + String get overview => 'Vue d’ensemble'; + + @override + String get evaluatedDevices => 'Appareils évalués'; + + @override + String skippedDevicesHint(Object count) { + return '$count appareils ignorés car le questionnaire n\'a pas été terminé.'; + } + + @override + String get overallRisk => 'Risque global'; + + @override + String get generalRecommendations => 'Recommandations générales'; + + @override + String get generalRecommendationsHint => + 'Ces mesures s’appliquent à toute votre maison connectée, indépendamment des appareils individuels.'; + + @override + String get fullCatalog => 'Catalogue complet des actions'; + + @override + String get catalogButton => 'Ouvrir le catalogue complet des actions'; + + @override + String get risk => 'Risque'; + + @override + String get note => 'Remarque'; + + @override + String get recommendations => 'Recommandations'; + + @override + String get urgent => 'Urgent'; + + @override + String get recommended => 'Recommandé'; + + @override + String get optional => 'Optionnel'; + + @override + String get social => 'Social'; + + @override + String get technical => 'Technique'; + + @override + String get security => 'Sécurité'; + + @override + String get smartHomePrivacyHeader => + 'La confidentialité de votre maison connectée'; + + @override + String get devicesRated => 'appareils évalués'; + + @override + String get howRiskCalculated => 'Comment le risque est-il calculé ?'; + + @override + String get totalScore => 'Total'; + + @override + String get catalogSnackBarPrefix => 'Catalogue'; + + @override + String get reportExportedAt => 'Exporté le'; + + @override + String get noActionLow => 'Tout va bien - aucune action n’est nécessaire.'; + + @override + String get noActionMedium => + 'Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel moyen demeure.'; + + @override + String get noActionHigh => + 'Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel élevé demeure.'; + + @override + String get overallLow => + 'Bien joué ! Vos appareils sont globalement configurés de façon sûre. Consultez tout de même les recommandations générales.'; + + @override + String get overallMedium => + 'Il y a une marge d’amélioration. Consultez les recommandations pour chaque appareil.'; + + @override + String get overallHigh => + 'Plusieurs appareils présentent des risques importants pour la confidentialité/protection des données. Veuillez mettre en œuvre rapidement les mesures prioritaires.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' $count réponse$suffix a été marquée \"Je ne sais pas\" - prenez le temps de mieux comprendre les paramètres de vos appareils.'; + } + + @override + String get room_living => 'Living room'; + + @override + String get room_kitchen => 'Kitchen'; + + @override + String get room_bedroom => 'Bedroom'; + + @override + String get room_child_bedroom => 'Child\'s bedroom'; + + @override + String get room_bathroom => 'Bathroom'; + + @override + String get room_office => 'Office'; + + @override + String get room_hallway => 'Hallway / Entrance'; + + @override + String get room_garden => 'Garden / Outdoor area'; + + @override + String get room_basement => 'Basement / Pantry'; + + @override + String get room_whole_home => 'Entire home'; + + @override + String get device_simple_sensor => + 'Basic sensor (e.g., motion or door sensor)'; + + @override + String get device_humidity_sensor => 'Humidity sensor'; + + @override + String get device_temperature_sensor => 'Temperature sensor'; + + @override + String get device_light_sensor => 'Light sensor'; + + @override + String get device_smart_speaker => 'Smart speaker / voice assistant'; + + @override + String get device_smart_display => 'Smart display (e.g., Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smart indoor camera'; + + @override + String get device_outdoor_camera => 'Smart outdoor camera'; + + @override + String get device_doorbell_camera => 'Smart doorbell with camera'; + + @override + String get device_baby_monitor => 'Baby monitor / baby camera'; + + @override + String get device_robot_vacuum => 'Robot vacuum'; + + @override + String get device_smart_fridge => 'Smart fridge'; + + @override + String get device_smart_oven => 'Smart oven / stove'; + + @override + String get device_smart_coffee => 'Smart coffee machine'; + + @override + String get device_smart_washing => 'Smart washer / dryer'; + + @override + String get device_smart_thermostat => 'Smart thermostat / heating control'; + + @override + String get device_smart_plug => 'Smart plug'; + + @override + String get device_smart_light => 'Smart lighting'; + + @override + String get device_smart_lock => 'Smart door lock'; + + @override + String get device_smart_blind => 'Smart blind / shutter'; + + @override + String get device_fitness_tracker => 'Fitness tracker / smartwatch'; + + @override + String get device_smart_toy => 'Smart toy'; + + @override + String get device_smart_router => 'Smart router / mesh system'; + + @override + String get device_smart_hub => 'Smart home hub (e.g., Homey, Home Assistant)'; + + @override + String get device_smart_meter => + 'Intelligent electricity meter / smart meter'; + + @override + String get device_smart_irrigation => 'Smart irrigation system'; + + @override + String get device_smart_scale => 'Smart scale'; + + @override + String get device_smart_printer => 'Smart printer'; + + @override + String get q_password_text => + 'Have you changed the default password of the device or its linked account?'; + + @override + String get q_password_hint => + 'Default passwords are often publicly known and easy to crack.'; + + @override + String get q_updates_text => + 'Are automatic security updates enabled for the device?'; + + @override + String get q_updates_hint => + 'Updates close known security vulnerabilities promptly.'; + + @override + String get q_network_text => + 'Is the device connected to a separate smart home or IoT Wi-Fi network?'; + + @override + String get q_network_hint => + 'A dedicated network for smart devices protects your main home network.'; + + @override + String get q_informed_text => + 'Are all people in the household informed about this device and its function?'; + + @override + String get q_informed_hint => + 'All household members should know what data the device captures.'; + + @override + String get q_permissions_text => + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?'; + + @override + String get q_permissions_hint => + 'Only permissions that are truly needed should be enabled.'; + + @override + String get q_mic_active_text => + 'Do you deactivate the microphone when you are not actively using it?'; + + @override + String get q_mic_active_hint => + 'Smart speakers and devices with microphones can be activated unintentionally.'; + + @override + String get q_camera_consent_text => + 'Does the camera only record areas for which everyone affected has given their consent?'; + + @override + String get q_camera_consent_hint => + 'Cameras in communal or private areas require the consent of all residents.'; + + @override + String get q_sensor_frequency_text => + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'; + + @override + String get q_sensor_frequency_hint => + 'A lower measurement frequency produces less data and limits inferences about your behavior.'; + + @override + String get q_sensor_data_deletion_text => + 'Are older measurement values deleted automatically or on request?'; + + @override + String get q_sensor_data_deletion_hint => + 'Old historical data should not be stored permanently. Check retention settings.'; + + @override + String get q_sensor_granularity_text => + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'; + + @override + String get q_sensor_granularity_hint => + 'Less granular views help prevent inferences about precise presence or behavior patterns.'; + + @override + String get q_sensor_local_text => + 'Is measurement data processed and stored locally without being transferred to the cloud?'; + + @override + String get q_sensor_local_hint => + 'Local processing prevents the vendor from accessing your measurement data.'; + + @override + String get q_voice_history_text => + 'Can you delete voice recordings from device history or disable this feature?'; + + @override + String get q_voice_history_hint => + 'BSI recommendation: Minimize recording retention or delete recordings regularly.'; + + @override + String get q_voice_local_text => + 'Is voice processing performed partly on the device locally?'; + + @override + String get q_voice_local_hint => + 'Local processing reduces the amount of data sent to the cloud.'; + + @override + String get q_skills_permissions_text => + 'Do you regularly review which skills have access to your account?'; + + @override + String get q_skills_permissions_hint => + 'Third-party skills can access sensitive data. Enable only necessary skills.'; + + @override + String get q_video_encryption_text => + 'Is video recording and transmission encrypted end-to-end?'; + + @override + String get q_video_encryption_hint => + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'; + + @override + String get q_video_storage_text => + 'Are recordings stored locally (not only in the vendor cloud)?'; + + @override + String get q_video_storage_hint => + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'; + + @override + String get q_sharing_restrictions_text => + 'Can you control who can access live view and recordings?'; + + @override + String get q_sharing_restrictions_hint => + 'You should be able to precisely control access to video recordings.'; + + @override + String get q_motion_detection_text => + 'Can you disable or schedule motion detection when you are at home?'; + + @override + String get q_motion_detection_hint => + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'; + + @override + String get q_account_required_text => + 'Can you use the device without a mandatory online account?'; + + @override + String get q_account_required_hint => + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'; + + @override + String get q_tracking_disabled_text => + 'Can you completely disable advertising and tracking features?'; + + @override + String get q_tracking_disabled_hint => + 'Smart TVs often collect viewing habit data. Look for privacy settings.'; + + @override + String get q_local_mode_text => + 'Can you use the device via HDMI or local sources without internet?'; + + @override + String get q_local_mode_hint => + 'Offline use protects usage data from being sent to the vendor.'; + + @override + String get q_data_collection_text => + 'Do temperature history and schedules stay on-device (not sent to the vendor)?'; + + @override + String get q_data_collection_hint => + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'; + + @override + String get q_offline_control_text => + 'Can you operate the thermostat offline (without internet)?'; + + @override + String get q_offline_control_hint => + 'Offline operation or local automation protects data from cloud access.'; + + @override + String get q_family_access_text => + 'Can you control who may adjust heating (e.g., restrict guests)?'; + + @override + String get q_family_access_hint => + 'Household members should have control without visitors changing everything.'; + + @override + String get q_local_control_text => + 'Can automations run locally without internet?'; + + @override + String get q_local_control_hint => + 'Local scenes and schedules protect your privacy better.'; + + @override + String get q_usage_tracking_text => + 'Have you disabled or limited vendor collection of switching patterns and usage times?'; + + @override + String get q_usage_tracking_hint => + 'Usage patterns can reveal presence and habits. Check app privacy settings.'; + + @override + String get q_offline_fallback_text => + 'Do devices still work if internet or app connection fails?'; + + @override + String get q_offline_fallback_hint => + 'Reliable local operation is important for daily use and privacy.'; + + @override + String get q_offline_unlock_text => + 'Can you unlock the lock offline (e.g., with code or key)?'; + + @override + String get q_offline_unlock_hint => + 'Backup options prevent lockout during internet or power outages.'; + + @override + String get q_access_logging_text => + 'Can you track who opened the lock and when?'; + + @override + String get q_access_logging_hint => + 'An access log helps you detect suspicious activity.'; + + @override + String get q_two_factor_text => + 'Is two-factor authentication (2FA) available for the lock account?'; + + @override + String get q_two_factor_hint => + 'BSI recommendation: 2FA protects your account from unauthorized remote access.'; + + @override + String get q_map_privacy_text => + 'Are created floor plans stored exclusively on the device locally?'; + + @override + String get q_map_privacy_hint => + 'Home floor plans are sensitive information and should not be sent to the vendor.'; + + @override + String get q_cloud_required_text => + 'Does floor-plan navigation work without cloud connection?'; + + @override + String get q_cloud_required_hint => + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.'; + + @override + String get q_vision_data_text => + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'; + + @override + String get q_vision_data_hint => + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'; + + @override + String get q_parental_control_text => + 'Are there parental control features to manage the toy?'; + + @override + String get q_parental_control_hint => + 'Parental controls should allow restricting contacts and features.'; + + @override + String get q_child_data_limits_text => + 'Can you limit which personal data the toy collects?'; + + @override + String get q_child_data_limits_hint => + 'Child-focused devices should collect and store minimal data.'; + + @override + String get q_recording_disable_text => + 'Can you disable audio and video recording on the device?'; + + @override + String get q_recording_disable_hint => + 'BSI recommendation: Recordings of children should only be possible with explicit control.'; + + @override + String get q_health_sharing_text => + 'Can you control which third parties can access your health data?'; + + @override + String get q_health_sharing_hint => + 'Health data is sensitive. Only authorized apps should have access.'; + + @override + String get q_location_tracking_text => + 'Can you disable location tracking when not needed?'; + + @override + String get q_location_tracking_hint => + 'GPS tracking uses battery and can reveal movement patterns.'; + + @override + String get q_expert_data_retention_duration_text => + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'; + + @override + String get q_expert_access_control_granular_text => + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granular access control reduces the risk of unauthorized access and misuse.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Is third-party sharing disabled or clearly limited to necessary services?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Is the sale of your data excluded (or actively disabled, where possible)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'An explicit \"no data sale\" option is a strong privacy signal.'; + + @override + String get q_expert_update_support_window_text => + 'Is it known how long the vendor guarantees security updates?'; + + @override + String get q_expert_update_support_window_hint => + 'A transparent update commitment reduces long-term security and privacy risks.'; + + @override + String get q_expert_vulnerability_process_text => + 'Is there a documented process for reporting and fixing vulnerabilities?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.'; + + @override + String get q_expert_offline_functionality_text => + 'Does the device remain meaningfully usable with limited internet connectivity?'; + + @override + String get q_expert_offline_functionality_hint => + 'More offline functionality often means less continuous data transfer to the cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'; + + @override + String get q_expert_child_data_protection_text => + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Devices in child-related contexts require especially strict privacy safeguards.'; + + @override + String get q_expert_access_revocation_text => + 'Can digital keys/access rights be revoked quickly and individually?'; + + @override + String get q_expert_access_revocation_hint => + 'Fast revocation is crucial when devices are shared or users change.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Are features that infer sensitive health or behavior profiles restricted or disableable?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inference controls reduce risks from secondary use of sensitive data.'; + + @override + String get a_password_title => 'Change default password'; + + @override + String get a_password_desc => + 'Replace the default password with a strong, unique password. Use a password manager.'; + + @override + String get a_updates_title => 'Enable automatic updates'; + + @override + String get a_updates_desc => + 'Enable automatic security updates in device or app settings.'; + + @override + String get a_network_title => 'Set up separate IoT Wi-Fi'; + + @override + String get a_network_desc => + 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'; + + @override + String get a_informed_title => 'Inform household members'; + + @override + String get a_informed_desc => + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.'; + + @override + String get a_permissions_title => 'Restrict app permissions'; + + @override + String get a_permissions_desc => + 'Check companion-app permissions in phone settings and disable unnecessary ones.'; + + @override + String get a_camera_consent_title => + 'Align camera positioning with residents'; + + @override + String get a_camera_consent_desc => + 'Obtain consent from everyone affected. The camera must not record areas without consent.'; + + @override + String get a_mic_active_title => 'Disable microphone when not in use'; + + @override + String get a_mic_active_desc => + 'Use the physical mute switch or disable the microphone in settings.'; + + @override + String get a_sensor_frequency_title => 'Reduce measurement interval'; + + @override + String get a_sensor_frequency_desc => + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'; + + @override + String get a_sensor_data_deletion_title => 'Delete old measurement values'; + + @override + String get a_sensor_data_deletion_desc => + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'; + + @override + String get a_sensor_granularity_title => 'Show less detailed data'; + + @override + String get a_sensor_granularity_desc => + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'; + + @override + String get a_sensor_local_title => 'Prefer local processing'; + + @override + String get a_sensor_local_desc => + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'; + + @override + String get a_voice_history_title => 'Delete voice recordings'; + + @override + String get a_voice_history_desc => + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'; + + @override + String get a_voice_local_title => 'Enable local voice processing'; + + @override + String get a_voice_local_desc => + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.'; + + @override + String get a_skills_permissions_title => 'Review skills/integrations'; + + @override + String get a_skills_permissions_desc => + 'Review which third-party skills have access. Disable unnecessary skills.'; + + @override + String get a_video_encryption_title => 'Enable end-to-end video encryption'; + + @override + String get a_video_encryption_desc => + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'; + + @override + String get a_video_storage_title => 'Store recordings locally'; + + @override + String get a_video_storage_desc => + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'; + + @override + String get a_sharing_restrictions_title => 'Restrict camera access'; + + @override + String get a_sharing_restrictions_desc => + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'; + + @override + String get a_motion_detection_title => + 'Disable motion detection when at home'; + + @override + String get a_motion_detection_desc => + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.'; + + @override + String get a_account_required_title => + 'Minimize privacy impact of required account'; + + @override + String get a_account_required_desc => + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'; + + @override + String get a_tracking_disabled_title => 'Disable tracking and advertising'; + + @override + String get a_tracking_disabled_desc => + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'; + + @override + String get a_local_mode_title => 'Prefer offline use'; + + @override + String get a_local_mode_desc => + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'; + + @override + String get a_data_collection_title => 'Disable history upload'; + + @override + String get a_data_collection_desc => + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'; + + @override + String get a_offline_control_title => 'Set up local control'; + + @override + String get a_offline_control_desc => + 'Configure local schedules and control without cloud dependency if the device supports it.'; + + @override + String get a_family_access_title => + 'Separate access rights for household members'; + + @override + String get a_family_access_desc => + 'Set up separate roles/accounts so that only authorized people can adjust the heating.'; + + @override + String get a_local_control_title => 'Enable local automations'; + + @override + String get a_local_control_desc => + 'Use local scenes/schedules instead of cloud automations where available.'; + + @override + String get a_usage_tracking_title => 'Disable usage tracking'; + + @override + String get a_usage_tracking_desc => + 'Disable analytics, telemetry, and usage data collection in app settings.'; + + @override + String get a_offline_fallback_title => 'Ensure offline fallback'; + + @override + String get a_offline_fallback_desc => + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'; + + @override + String get a_offline_unlock_title => 'Secure offline access'; + + @override + String get a_offline_unlock_desc => + 'Set up a physical key or emergency code and test access when internet is unavailable.'; + + @override + String get a_access_logging_title => 'Enable access log'; + + @override + String get a_access_logging_desc => + 'Enable logging and notifications for lock openings so unauthorized access can be detected.'; + + @override + String get a_two_factor_title => 'Enable two-factor authentication'; + + @override + String get a_two_factor_desc => + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.'; + + @override + String get a_map_privacy_title => 'Disable cloud floor-plan storage'; + + @override + String get a_map_privacy_desc => + 'Switch storage to local and disable cloud backups of floor plans if the option is available.'; + + @override + String get a_cloud_required_title => 'Reduce cloud dependency'; + + @override + String get a_cloud_required_desc => + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'; + + @override + String get a_vision_data_title => 'Process camera data locally only'; + + @override + String get a_vision_data_desc => + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'; + + @override + String get a_parental_control_title => 'Set up parental controls'; + + @override + String get a_parental_control_desc => + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'; + + @override + String get a_child_data_limits_title => 'Minimize data collection'; + + @override + String get a_child_data_limits_desc => + 'Disable optional profile data and collect only the child data required for core functionality.'; + + @override + String get a_recording_disable_title => 'Disable audio/video recordings'; + + @override + String get a_recording_disable_desc => + 'Disable recording features by default and enable them only briefly when specifically needed.'; + + @override + String get a_health_sharing_title => 'Restrict health data sharing'; + + @override + String get a_health_sharing_desc => + 'Revoke health data access from unnecessary third-party apps in app and account settings.'; + + @override + String get a_location_tracking_title => 'Reduce location sharing'; + + @override + String get a_location_tracking_desc => + 'Disable location tracking outside active use or allow it only while the app is in use.'; + + @override + String get a_expert_data_retention_duration_title => + 'Define retention periods'; + + @override + String get a_expert_data_retention_duration_desc => + 'Set short, clear retention periods in settings and regularly delete old data.'; + + @override + String get a_expert_access_control_granular_title => + 'Introduce granular roles and accounts'; + + @override + String get a_expert_access_control_granular_desc => + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Limit third-party sharing'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Disable partner, advertising, and analytics sharing in privacy and account settings.'; + + @override + String get a_expert_data_sale_disabled_title => 'Opt out of data sale'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'; + + @override + String get a_expert_update_support_window_title => 'Verify update commitment'; + + @override + String get a_expert_update_support_window_desc => + 'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'; + + @override + String get a_expert_vulnerability_process_title => + 'Review vendor security process'; + + @override + String get a_expert_vulnerability_process_desc => + 'Prefer vendors with a clear security contact and responsible disclosure process.'; + + @override + String get a_expert_offline_functionality_title => + 'Prioritize offline functionality'; + + @override + String get a_expert_offline_functionality_desc => + 'Enable local operating modes and minimize mandatory cloud features where the device allows.'; + + @override + String get a_expert_bystander_transparency_title => + 'Add transparency notices for bystanders'; + + @override + String get a_expert_bystander_transparency_desc => + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'; + + @override + String get a_expert_child_data_protection_title => + 'Strengthen child data protection'; + + @override + String get a_expert_child_data_protection_desc => + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'; + + @override + String get a_expert_access_revocation_title => + 'Set up rapid access revocation'; + + @override + String get a_expert_access_revocation_desc => + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Restrict inference features'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'; + + @override + String get a_dont_know_title => 'Get to know device settings better'; + + @override + String get a_dont_know_desc => + 'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'; + + @override + String get sl_base_risk => 'Baseline risk of device type'; + + @override + String get sl_child_room_bonus => 'Increased sensitivity: child\'s bedroom'; + + @override + String get sl_password => 'Default password not changed'; + + @override + String get sl_updates => 'Automatic updates not enabled'; + + @override + String get sl_network => 'No separate IoT Wi-Fi configured'; + + @override + String get sl_informed => 'Household members not informed'; + + @override + String get sl_permissions => 'App permissions not reduced'; + + @override + String get sl_camera_consent => 'No consent for camera-covered area'; + + @override + String get sl_mic_active => 'Microphone not disabled when unused'; + + @override + String get sl_sensor_frequency => 'Measurement interval not reduced'; + + @override + String get sl_sensor_data_deletion => 'Old measurement values not deleted'; + + @override + String get sl_sensor_granularity => 'Data stored with too much granularity'; + + @override + String get sl_sensor_local => 'Data transferred to cloud'; + + @override + String get sl_voice_history => 'Voice recordings not deletable'; + + @override + String get sl_voice_local => 'No local voice processing'; + + @override + String get sl_skills_permissions => 'Skills not reviewed regularly'; + + @override + String get sl_video_encryption => 'Video transmission not encrypted'; + + @override + String get sl_video_storage => 'Recordings only in vendor cloud'; + + @override + String get sl_sharing_restrictions => 'Recording access not controlled'; + + @override + String get sl_motion_detection => 'Motion detection always active'; + + @override + String get sl_account_required => 'Mandatory vendor account required'; + + @override + String get sl_tracking_disabled => 'Ad tracking not disabled'; + + @override + String get sl_local_mode => 'No offline operation possible'; + + @override + String get sl_data_collection => 'Temperature history sent to vendor'; + + @override + String get sl_offline_control => 'No offline operation possible'; + + @override + String get sl_family_access => 'Access cannot be restricted'; + + @override + String get sl_local_control => 'Automations require internet connection'; + + @override + String get sl_usage_tracking => 'Switching patterns collected by vendor'; + + @override + String get sl_offline_fallback => 'Device unusable offline'; + + @override + String get sl_offline_unlock => 'No offline unlock possible'; + + @override + String get sl_access_logging => 'No access log available'; + + @override + String get sl_two_factor => 'Two-factor authentication missing'; + + @override + String get sl_map_privacy => 'Floor plan transmitted to vendor'; + + @override + String get sl_cloud_required => 'Navigation only possible via cloud'; + + @override + String get sl_vision_data => 'Camera images stored or transmitted'; + + @override + String get sl_parental_control => 'Parental controls not configured'; + + @override + String get sl_child_data_limits => 'Data collection not limited'; + + @override + String get sl_recording_disable => 'Recording cannot be disabled'; + + @override + String get sl_health_sharing => 'Health data shared with third parties'; + + @override + String get sl_location_tracking => 'Location tracking enabled'; + + @override + String get sl_expert_data_retention_duration => + 'Retention duration unclear or too long'; + + @override + String get sl_expert_access_control_granular => + 'Granular access control missing'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Third-party sharing not limited'; + + @override + String get sl_expert_data_sale_disabled => 'Data sale not excluded'; + + @override + String get sl_expert_update_support_window => + 'Guaranteed update support window unknown'; + + @override + String get sl_expert_vulnerability_process => + 'Vulnerability process not documented'; + + @override + String get sl_expert_offline_functionality => + 'Meaningful offline operation not possible'; + + @override + String get sl_expert_bystander_transparency => + 'Transparency for nearby bystanders missing'; + + @override + String get sl_expert_child_data_protection => + 'Child-data protection measures missing'; + + @override + String get sl_expert_access_revocation => + 'Individual access revocation not possible'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Controls against sensitive inference missing'; + + @override + String get risk_hint_camera => + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'; + + @override + String get risk_hint_mic => + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'; + + @override + String get risk_hint_lock => + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'; + + @override + String get risk_hint_child_room => + 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'; + + @override + String get risk_hint_generic => + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'; + + @override + String get gen_rec_0 => + 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'; + + @override + String get gen_rec_1 => + 'Use a password manager and assign a unique, strong password to each device.'; + + @override + String get gen_rec_2 => + 'Enable multi-factor authentication (MFA) for all vendor accounts.'; + + @override + String get gen_rec_3 => + 'Define who in your household is responsible for updates, backups, and accounts.'; + + @override + String get gen_rec_4 => + 'Regularly review (at least once per quarter) all access permissions and accounts.'; + + @override + String get gen_rec_5 => + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'; + + @override + String get gen_rec_6 => + 'Use a household consent check before buying new devices and involve all household members.'; +} diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart new file mode 100644 index 0000000..7dec459 --- /dev/null +++ b/lib/l10n/app_localizations_nl.dart @@ -0,0 +1,1615 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Dutch Flemish (`nl`). +class AppLocalizationsNl extends AppLocalizations { + AppLocalizationsNl([String locale = 'nl']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => 'Simplications\nSmart Home\nprivacycheck'; + + @override + String get welcomeDescription => + 'Leg je slimme apparaten kamer voor kamer vast en ontvang een privacybeoordeling met concrete aanbevelingen.'; + + @override + String get stepSelectRooms => 'Kamer kiezen'; + + @override + String get stepCaptureDevices => 'Apparaten vastleggen'; + + @override + String get stepAnswerQuestions => 'Vragen beantwoorden'; + + @override + String get stepGetRisk => 'Risicoprofiel en aanbevelingen ontvangen'; + + @override + String get start => 'Starten'; + + @override + String get resume => 'Doorgaan'; + + @override + String get about => 'Over'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Kamer kiezen'; + + @override + String get roomQuestion => 'Welke kamer wilt u nu controleren?'; + + @override + String get roomInstruction => + 'Tik op een kamer, leg daar uw apparaten vast en keer terug om de volgende kamer te kiezen.'; + + @override + String get results => 'Resultaten'; + + @override + String get alreadyEvaluated => 'Al beoordeeld'; + + @override + String get notCompleted => 'Niet voltooid'; + + @override + String get addRoom => 'Kamer toevoegen'; + + @override + String get deviceTitlePrefix => 'Apparaten'; + + @override + String get roomCheck => 'Kamercheck'; + + @override + String get deviceQuestion => + 'Welke slimme apparaten gebruikt u in deze kamer?'; + + @override + String get deviceQuestionHint => + 'Tik op een apparaat om de vragen te beantwoorden.'; + + @override + String get noKnownDevices => + 'Geen bekende apparaten voor deze kamer. U kunt een eigen apparaat toevoegen.'; + + @override + String get addDevice => 'Apparaat\ntoevoegen'; + + @override + String get noDevice => 'Geen apparaat'; + + @override + String get nextRoom => 'Volgende kamer'; + + @override + String get deleteDeviceTitle => 'Apparaat verwijderen?'; + + @override + String get deleteDeviceBody => + 'Dit aangepaste apparaat wordt verwijderd. Alle gekoppelde instanties worden ook verwijderd.'; + + @override + String get delete => 'Verwijderen'; + + @override + String get cancel => 'Annuleren'; + + @override + String get confirm => 'Bevestigen'; + + @override + String get noDeviceDialogTitle => 'Geen apparaten in deze kamer?'; + + @override + String get noDeviceDialogBody => + 'Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Bestaande apparaatkeuzes voor deze kamer worden verwijderd. Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.'; + + @override + String get questionnaireTitle => 'Vragen'; + + @override + String get connectedDevice => 'Verbonden apparaat'; + + @override + String get done => 'Klaar'; + + @override + String get yes => 'Ja'; + + @override + String get no => 'Nee'; + + @override + String get dontKnow => 'Weet ik niet'; + + @override + String get notApplicableForDevice => + 'Deze vraag is niet van toepassing op mijn apparaat'; + + @override + String get languageDialogTitle => 'Taal kiezen'; + + @override + String get currentLanguage => 'Huidige taal'; + + @override + String get aboutScreenTitle => 'Over de app'; + + @override + String get faqScreenTitle => 'Veelgestelde vragen'; + + @override + String get aboutSubtitle => 'Onderzoeksproject over smart-home-privacy'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Technische Universiteit Chemnitz'; + + @override + String get aboutPartnerHsAnhalt => 'Hogeschool Anhalt'; + + @override + String get aboutPartnerVzSachsen => 'Consumentenorganisatie Saksen'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'Wat is Simplications?'; + + @override + String get faqAnswerWhatIs => + 'Simplications is een onderzoeksproject over smart-home-privacy. Deze app is een onderdeel van het project en begeleidt je kamer voor kamer door je apparaten met praktische aanbevelingen op basis van je antwoorden.'; + + @override + String get faqQuestionHowWorks => 'Hoe werkt de check?'; + + @override + String get faqAnswerHowWorks => + 'Je kiest een kamer, voegt je slimme apparaten toe, beantwoordt apparaatspecifieke vragen en ontvangt een risicoprofiel met geprioriteerde acties.'; + + @override + String get faqQuestionNoPolicy => 'Waarom is er geen privacybeleid?'; + + @override + String get faqAnswerNoPolicy => 'Omdat we jouw gegevens niet verzamelen.'; + + @override + String get faqQuestionDataStored => 'Waar worden mijn gegevens opgeslagen?'; + + @override + String get faqAnswerDataStored => + 'Je beoordelingsgegevens worden lokaal op je apparaat opgeslagen. In het Over-scherm kun je alle opgeslagen gegevens op elk moment verwijderen.'; + + @override + String get faqQuestionNoDevice => + 'Wat als mijn apparaat niet in de lijst staat?'; + + @override + String get faqAnswerNoDevice => + 'Je kunt aangepaste apparaten toevoegen en de check toch voltooien. De aanbevelingen zijn dan gebaseerd op je configuratie en antwoorden.'; + + @override + String get faqQuestionRiskMeaning => + 'Wat betekenen laag, gemiddeld en hoog risico?'; + + @override + String get faqAnswerRiskMeaning => + 'Deze niveaus geven aan in hoeverre je huidige configuratie privacyrisico’s kan vergroten. Het zijn richtniveaus, geen juridische of technische certificering.'; + + @override + String get faqQuestionLegalAdvice => 'Is dit juridisch advies?'; + + @override + String get faqAnswerLegalAdvice => + 'Nee. Simplications biedt praktische oriëntatie en aanbevelingen, maar vervangt geen juridisch advies of professionele beveiligingsconsultatie.'; + + @override + String get faqQuestionCanShare => 'Kan ik mijn resultaten delen?'; + + @override + String get faqAnswerCanShare => + 'Ja. In het resultatenscherm kun je je samenvatting exporteren en delen als tekst of PDF.'; + + @override + String get websiteOpenFailed => 'Kon website niet openen.'; + + @override + String get deleteAllDataTitle => 'Alle gegevens verwijderen?'; + + @override + String get deleteAllDataBody => + 'Alle vastgelegde kamers, apparaten en antwoorden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.'; + + @override + String get deleteAllDataButton => 'Gegevens verwijderen'; + + @override + String get allDataDeleted => 'Alle opgeslagen gegevens zijn verwijderd.'; + + @override + String get projectPartners => 'Projectpartners'; + + @override + String get coordinationFunding => 'Coordinatie en financiering'; + + @override + String get coordination => 'Coordinatie'; + + @override + String get platformPrivacy => 'Plattform Privatheit'; + + @override + String get fundingAgency => 'Financierende instantie'; + + @override + String get fundingAgencyValue => + 'Duits Federaal Ministerie voor Onderzoek, Technologie en Ruimtevaart\nSubsidie 16KIS1868K'; + + @override + String get website => 'Website'; + + @override + String get dangerZone => 'Gevarenzone'; + + @override + String get dangerZoneWarning => + 'Waarschuwing: deze actie verwijdert alle opgeslagen app-gegevens permanent.'; + + @override + String get expertModeTitle => 'Expert mode'; + + @override + String get expertModeToggleLabel => 'Enable detailed expert mode'; + + @override + String get expertModeToggleHint => + 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'; + + @override + String get expertModeSourcesHint => + 'Methodologically inspired by the following research projects:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (community platform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'; + + @override + String get roomDeleteTitle => 'Kamer verwijderen?'; + + @override + String get roomDeleteBody => + 'Deze aangepaste kamer wordt verwijderd. Alle gekoppelde apparaten worden ook verwijderd.'; + + @override + String get add => 'Toevoegen'; + + @override + String get addRoomDialogTitle => 'Nieuwe kamer toevoegen'; + + @override + String get roomName => 'Kamernaam'; + + @override + String get roomNameHint => 'bijv. Woonkamer, Garage'; + + @override + String get chooseIcon => 'Kies een pictogram:'; + + @override + String get addDeviceDialogTitle => 'Nieuw apparaat toevoegen'; + + @override + String get deviceName => 'Apparaatnaam'; + + @override + String get deviceNameHint => 'bijv. Mijn slimme speaker'; + + @override + String get baseRiskLabel => 'Basisscore risico (0-100)'; + + @override + String get baseRiskHint => 'bijv. 30 (laag) tot 60 (hoog)'; + + @override + String get hasCamera => 'Heeft camera?'; + + @override + String get hasMicrophone => 'Heeft microfoon?'; + + @override + String get camera => 'Camera'; + + @override + String get microphone => 'Microfoon'; + + @override + String get summaryTitle => 'Jouw resultaat'; + + @override + String get shareResult => 'Resultaat delen'; + + @override + String get shareAsText => 'Delen als tekst'; + + @override + String get shareAsPdf => 'Delen als PDF'; + + @override + String get restart => 'Opnieuw starten'; + + @override + String get noDevicesCaptured => 'Geen apparaten vastgelegd.'; + + @override + String get noDevicesHint => + 'Start opnieuw en voeg apparaten toe om een beoordeling te krijgen.'; + + @override + String get highRisk => 'Hoog risico'; + + @override + String get mediumRisk => 'Gemiddeld risico'; + + @override + String get lowRisk => 'Laag risico'; + + @override + String get exportFailed => 'Export mislukt'; + + @override + String get summaryShareSubject => 'Simplications-resultaat'; + + @override + String get summarySharePdfText => 'Simplications-rapport als PDF'; + + @override + String get overview => 'Overzicht'; + + @override + String get evaluatedDevices => 'Beoordeelde apparaten'; + + @override + String skippedDevicesHint(Object count) { + return '$count apparaten overgeslagen omdat de vragenlijst niet is voltooid.'; + } + + @override + String get overallRisk => 'Totaal risico'; + + @override + String get generalRecommendations => 'Algemene aanbevelingen'; + + @override + String get generalRecommendationsHint => + 'Deze maatregelen gelden voor je hele smart home, ongeacht afzonderlijke apparaten.'; + + @override + String get fullCatalog => 'Volledige actiecatalogus'; + + @override + String get catalogButton => 'Open volledige actiecatalogus'; + + @override + String get risk => 'Risico'; + + @override + String get note => 'Opmerking'; + + @override + String get recommendations => 'Aanbevelingen'; + + @override + String get urgent => 'Urgent'; + + @override + String get recommended => 'Aanbevolen'; + + @override + String get optional => 'Optioneel'; + + @override + String get social => 'Sociaal'; + + @override + String get technical => 'Technisch'; + + @override + String get security => 'Beveiliging'; + + @override + String get smartHomePrivacyHeader => 'Jouw smart-home-privacy'; + + @override + String get devicesRated => 'beoordeelde apparaten'; + + @override + String get howRiskCalculated => 'Hoe wordt risico berekend?'; + + @override + String get totalScore => 'Totaal'; + + @override + String get catalogSnackBarPrefix => 'Catalogus'; + + @override + String get reportExportedAt => 'Geëxporteerd op'; + + @override + String get noActionLow => 'Alles is in orde - geen acties vereist.'; + + @override + String get noActionMedium => + 'Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een gemiddeld restrisico.'; + + @override + String get noActionHigh => + 'Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een hoog restrisico.'; + + @override + String get overallLow => + 'Goed gedaan! Je apparaten zijn grotendeels veilig geconfigureerd. Bekijk alsnog de algemene aanbevelingen.'; + + @override + String get overallMedium => + 'Er is ruimte voor verbetering. Bekijk de aanbevelingen per apparaat.'; + + @override + String get overallHigh => + 'Meerdere apparaten hebben aanzienlijke privacy-/gegevensbeschermingsrisico’s. Voer maatregelen met hoge prioriteit zo snel mogelijk uit.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' $count antwoord$suffix is gemarkeerd als \"Weet ik niet\" - neem de tijd om de instellingen van je apparaten beter te leren kennen.'; + } + + @override + String get room_living => 'Living room'; + + @override + String get room_kitchen => 'Kitchen'; + + @override + String get room_bedroom => 'Bedroom'; + + @override + String get room_child_bedroom => 'Child\'s bedroom'; + + @override + String get room_bathroom => 'Bathroom'; + + @override + String get room_office => 'Office'; + + @override + String get room_hallway => 'Hallway / Entrance'; + + @override + String get room_garden => 'Garden / Outdoor area'; + + @override + String get room_basement => 'Basement / Pantry'; + + @override + String get room_whole_home => 'Entire home'; + + @override + String get device_simple_sensor => + 'Basic sensor (e.g., motion or door sensor)'; + + @override + String get device_humidity_sensor => 'Humidity sensor'; + + @override + String get device_temperature_sensor => 'Temperature sensor'; + + @override + String get device_light_sensor => 'Light sensor'; + + @override + String get device_smart_speaker => 'Smart speaker / voice assistant'; + + @override + String get device_smart_display => 'Smart display (e.g., Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smart indoor camera'; + + @override + String get device_outdoor_camera => 'Smart outdoor camera'; + + @override + String get device_doorbell_camera => 'Smart doorbell with camera'; + + @override + String get device_baby_monitor => 'Baby monitor / baby camera'; + + @override + String get device_robot_vacuum => 'Robot vacuum'; + + @override + String get device_smart_fridge => 'Smart fridge'; + + @override + String get device_smart_oven => 'Smart oven / stove'; + + @override + String get device_smart_coffee => 'Smart coffee machine'; + + @override + String get device_smart_washing => 'Smart washer / dryer'; + + @override + String get device_smart_thermostat => 'Smart thermostat / heating control'; + + @override + String get device_smart_plug => 'Smart plug'; + + @override + String get device_smart_light => 'Smart lighting'; + + @override + String get device_smart_lock => 'Smart door lock'; + + @override + String get device_smart_blind => 'Smart blind / shutter'; + + @override + String get device_fitness_tracker => 'Fitness tracker / smartwatch'; + + @override + String get device_smart_toy => 'Smart toy'; + + @override + String get device_smart_router => 'Smart router / mesh system'; + + @override + String get device_smart_hub => 'Smart home hub (e.g., Homey, Home Assistant)'; + + @override + String get device_smart_meter => + 'Intelligent electricity meter / smart meter'; + + @override + String get device_smart_irrigation => 'Smart irrigation system'; + + @override + String get device_smart_scale => 'Smart scale'; + + @override + String get device_smart_printer => 'Smart printer'; + + @override + String get q_password_text => + 'Have you changed the default password of the device or its linked account?'; + + @override + String get q_password_hint => + 'Default passwords are often publicly known and easy to crack.'; + + @override + String get q_updates_text => + 'Are automatic security updates enabled for the device?'; + + @override + String get q_updates_hint => + 'Updates close known security vulnerabilities promptly.'; + + @override + String get q_network_text => + 'Is the device connected to a separate smart home or IoT Wi-Fi network?'; + + @override + String get q_network_hint => + 'A dedicated network for smart devices protects your main home network.'; + + @override + String get q_informed_text => + 'Are all people in the household informed about this device and its function?'; + + @override + String get q_informed_hint => + 'All household members should know what data the device captures.'; + + @override + String get q_permissions_text => + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?'; + + @override + String get q_permissions_hint => + 'Only permissions that are truly needed should be enabled.'; + + @override + String get q_mic_active_text => + 'Do you deactivate the microphone when you are not actively using it?'; + + @override + String get q_mic_active_hint => + 'Smart speakers and devices with microphones can be activated unintentionally.'; + + @override + String get q_camera_consent_text => + 'Does the camera only record areas for which everyone affected has given their consent?'; + + @override + String get q_camera_consent_hint => + 'Cameras in communal or private areas require the consent of all residents.'; + + @override + String get q_sensor_frequency_text => + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'; + + @override + String get q_sensor_frequency_hint => + 'A lower measurement frequency produces less data and limits inferences about your behavior.'; + + @override + String get q_sensor_data_deletion_text => + 'Are older measurement values deleted automatically or on request?'; + + @override + String get q_sensor_data_deletion_hint => + 'Old historical data should not be stored permanently. Check retention settings.'; + + @override + String get q_sensor_granularity_text => + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'; + + @override + String get q_sensor_granularity_hint => + 'Less granular views help prevent inferences about precise presence or behavior patterns.'; + + @override + String get q_sensor_local_text => + 'Is measurement data processed and stored locally without being transferred to the cloud?'; + + @override + String get q_sensor_local_hint => + 'Local processing prevents the vendor from accessing your measurement data.'; + + @override + String get q_voice_history_text => + 'Can you delete voice recordings from device history or disable this feature?'; + + @override + String get q_voice_history_hint => + 'BSI recommendation: Minimize recording retention or delete recordings regularly.'; + + @override + String get q_voice_local_text => + 'Is voice processing performed partly on the device locally?'; + + @override + String get q_voice_local_hint => + 'Local processing reduces the amount of data sent to the cloud.'; + + @override + String get q_skills_permissions_text => + 'Do you regularly review which skills have access to your account?'; + + @override + String get q_skills_permissions_hint => + 'Third-party skills can access sensitive data. Enable only necessary skills.'; + + @override + String get q_video_encryption_text => + 'Is video recording and transmission encrypted end-to-end?'; + + @override + String get q_video_encryption_hint => + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'; + + @override + String get q_video_storage_text => + 'Are recordings stored locally (not only in the vendor cloud)?'; + + @override + String get q_video_storage_hint => + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'; + + @override + String get q_sharing_restrictions_text => + 'Can you control who can access live view and recordings?'; + + @override + String get q_sharing_restrictions_hint => + 'You should be able to precisely control access to video recordings.'; + + @override + String get q_motion_detection_text => + 'Can you disable or schedule motion detection when you are at home?'; + + @override + String get q_motion_detection_hint => + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'; + + @override + String get q_account_required_text => + 'Can you use the device without a mandatory online account?'; + + @override + String get q_account_required_hint => + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'; + + @override + String get q_tracking_disabled_text => + 'Can you completely disable advertising and tracking features?'; + + @override + String get q_tracking_disabled_hint => + 'Smart TVs often collect viewing habit data. Look for privacy settings.'; + + @override + String get q_local_mode_text => + 'Can you use the device via HDMI or local sources without internet?'; + + @override + String get q_local_mode_hint => + 'Offline use protects usage data from being sent to the vendor.'; + + @override + String get q_data_collection_text => + 'Do temperature history and schedules stay on-device (not sent to the vendor)?'; + + @override + String get q_data_collection_hint => + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'; + + @override + String get q_offline_control_text => + 'Can you operate the thermostat offline (without internet)?'; + + @override + String get q_offline_control_hint => + 'Offline operation or local automation protects data from cloud access.'; + + @override + String get q_family_access_text => + 'Can you control who may adjust heating (e.g., restrict guests)?'; + + @override + String get q_family_access_hint => + 'Household members should have control without visitors changing everything.'; + + @override + String get q_local_control_text => + 'Can automations run locally without internet?'; + + @override + String get q_local_control_hint => + 'Local scenes and schedules protect your privacy better.'; + + @override + String get q_usage_tracking_text => + 'Have you disabled or limited vendor collection of switching patterns and usage times?'; + + @override + String get q_usage_tracking_hint => + 'Usage patterns can reveal presence and habits. Check app privacy settings.'; + + @override + String get q_offline_fallback_text => + 'Do devices still work if internet or app connection fails?'; + + @override + String get q_offline_fallback_hint => + 'Reliable local operation is important for daily use and privacy.'; + + @override + String get q_offline_unlock_text => + 'Can you unlock the lock offline (e.g., with code or key)?'; + + @override + String get q_offline_unlock_hint => + 'Backup options prevent lockout during internet or power outages.'; + + @override + String get q_access_logging_text => + 'Can you track who opened the lock and when?'; + + @override + String get q_access_logging_hint => + 'An access log helps you detect suspicious activity.'; + + @override + String get q_two_factor_text => + 'Is two-factor authentication (2FA) available for the lock account?'; + + @override + String get q_two_factor_hint => + 'BSI recommendation: 2FA protects your account from unauthorized remote access.'; + + @override + String get q_map_privacy_text => + 'Are created floor plans stored exclusively on the device locally?'; + + @override + String get q_map_privacy_hint => + 'Home floor plans are sensitive information and should not be sent to the vendor.'; + + @override + String get q_cloud_required_text => + 'Does floor-plan navigation work without cloud connection?'; + + @override + String get q_cloud_required_hint => + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.'; + + @override + String get q_vision_data_text => + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'; + + @override + String get q_vision_data_hint => + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'; + + @override + String get q_parental_control_text => + 'Are there parental control features to manage the toy?'; + + @override + String get q_parental_control_hint => + 'Parental controls should allow restricting contacts and features.'; + + @override + String get q_child_data_limits_text => + 'Can you limit which personal data the toy collects?'; + + @override + String get q_child_data_limits_hint => + 'Child-focused devices should collect and store minimal data.'; + + @override + String get q_recording_disable_text => + 'Can you disable audio and video recording on the device?'; + + @override + String get q_recording_disable_hint => + 'BSI recommendation: Recordings of children should only be possible with explicit control.'; + + @override + String get q_health_sharing_text => + 'Can you control which third parties can access your health data?'; + + @override + String get q_health_sharing_hint => + 'Health data is sensitive. Only authorized apps should have access.'; + + @override + String get q_location_tracking_text => + 'Can you disable location tracking when not needed?'; + + @override + String get q_location_tracking_hint => + 'GPS tracking uses battery and can reveal movement patterns.'; + + @override + String get q_expert_data_retention_duration_text => + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'; + + @override + String get q_expert_access_control_granular_text => + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granular access control reduces the risk of unauthorized access and misuse.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Is third-party sharing disabled or clearly limited to necessary services?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Is the sale of your data excluded (or actively disabled, where possible)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'An explicit \"no data sale\" option is a strong privacy signal.'; + + @override + String get q_expert_update_support_window_text => + 'Is it known how long the vendor guarantees security updates?'; + + @override + String get q_expert_update_support_window_hint => + 'A transparent update commitment reduces long-term security and privacy risks.'; + + @override + String get q_expert_vulnerability_process_text => + 'Is there a documented process for reporting and fixing vulnerabilities?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.'; + + @override + String get q_expert_offline_functionality_text => + 'Does the device remain meaningfully usable with limited internet connectivity?'; + + @override + String get q_expert_offline_functionality_hint => + 'More offline functionality often means less continuous data transfer to the cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'; + + @override + String get q_expert_child_data_protection_text => + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Devices in child-related contexts require especially strict privacy safeguards.'; + + @override + String get q_expert_access_revocation_text => + 'Can digital keys/access rights be revoked quickly and individually?'; + + @override + String get q_expert_access_revocation_hint => + 'Fast revocation is crucial when devices are shared or users change.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Are features that infer sensitive health or behavior profiles restricted or disableable?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inference controls reduce risks from secondary use of sensitive data.'; + + @override + String get a_password_title => 'Change default password'; + + @override + String get a_password_desc => + 'Replace the default password with a strong, unique password. Use a password manager.'; + + @override + String get a_updates_title => 'Enable automatic updates'; + + @override + String get a_updates_desc => + 'Enable automatic security updates in device or app settings.'; + + @override + String get a_network_title => 'Set up separate IoT Wi-Fi'; + + @override + String get a_network_desc => + 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'; + + @override + String get a_informed_title => 'Inform household members'; + + @override + String get a_informed_desc => + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.'; + + @override + String get a_permissions_title => 'Restrict app permissions'; + + @override + String get a_permissions_desc => + 'Check companion-app permissions in phone settings and disable unnecessary ones.'; + + @override + String get a_camera_consent_title => + 'Align camera positioning with residents'; + + @override + String get a_camera_consent_desc => + 'Obtain consent from everyone affected. The camera must not record areas without consent.'; + + @override + String get a_mic_active_title => 'Disable microphone when not in use'; + + @override + String get a_mic_active_desc => + 'Use the physical mute switch or disable the microphone in settings.'; + + @override + String get a_sensor_frequency_title => 'Reduce measurement interval'; + + @override + String get a_sensor_frequency_desc => + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'; + + @override + String get a_sensor_data_deletion_title => 'Delete old measurement values'; + + @override + String get a_sensor_data_deletion_desc => + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'; + + @override + String get a_sensor_granularity_title => 'Show less detailed data'; + + @override + String get a_sensor_granularity_desc => + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'; + + @override + String get a_sensor_local_title => 'Prefer local processing'; + + @override + String get a_sensor_local_desc => + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'; + + @override + String get a_voice_history_title => 'Delete voice recordings'; + + @override + String get a_voice_history_desc => + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'; + + @override + String get a_voice_local_title => 'Enable local voice processing'; + + @override + String get a_voice_local_desc => + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.'; + + @override + String get a_skills_permissions_title => 'Review skills/integrations'; + + @override + String get a_skills_permissions_desc => + 'Review which third-party skills have access. Disable unnecessary skills.'; + + @override + String get a_video_encryption_title => 'Enable end-to-end video encryption'; + + @override + String get a_video_encryption_desc => + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'; + + @override + String get a_video_storage_title => 'Store recordings locally'; + + @override + String get a_video_storage_desc => + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'; + + @override + String get a_sharing_restrictions_title => 'Restrict camera access'; + + @override + String get a_sharing_restrictions_desc => + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'; + + @override + String get a_motion_detection_title => + 'Disable motion detection when at home'; + + @override + String get a_motion_detection_desc => + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.'; + + @override + String get a_account_required_title => + 'Minimize privacy impact of required account'; + + @override + String get a_account_required_desc => + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'; + + @override + String get a_tracking_disabled_title => 'Disable tracking and advertising'; + + @override + String get a_tracking_disabled_desc => + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'; + + @override + String get a_local_mode_title => 'Prefer offline use'; + + @override + String get a_local_mode_desc => + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'; + + @override + String get a_data_collection_title => 'Disable history upload'; + + @override + String get a_data_collection_desc => + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'; + + @override + String get a_offline_control_title => 'Set up local control'; + + @override + String get a_offline_control_desc => + 'Configure local schedules and control without cloud dependency if the device supports it.'; + + @override + String get a_family_access_title => + 'Separate access rights for household members'; + + @override + String get a_family_access_desc => + 'Set up separate roles/accounts so that only authorized people can adjust the heating.'; + + @override + String get a_local_control_title => 'Enable local automations'; + + @override + String get a_local_control_desc => + 'Use local scenes/schedules instead of cloud automations where available.'; + + @override + String get a_usage_tracking_title => 'Disable usage tracking'; + + @override + String get a_usage_tracking_desc => + 'Disable analytics, telemetry, and usage data collection in app settings.'; + + @override + String get a_offline_fallback_title => 'Ensure offline fallback'; + + @override + String get a_offline_fallback_desc => + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'; + + @override + String get a_offline_unlock_title => 'Secure offline access'; + + @override + String get a_offline_unlock_desc => + 'Set up a physical key or emergency code and test access when internet is unavailable.'; + + @override + String get a_access_logging_title => 'Enable access log'; + + @override + String get a_access_logging_desc => + 'Enable logging and notifications for lock openings so unauthorized access can be detected.'; + + @override + String get a_two_factor_title => 'Enable two-factor authentication'; + + @override + String get a_two_factor_desc => + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.'; + + @override + String get a_map_privacy_title => 'Disable cloud floor-plan storage'; + + @override + String get a_map_privacy_desc => + 'Switch storage to local and disable cloud backups of floor plans if the option is available.'; + + @override + String get a_cloud_required_title => 'Reduce cloud dependency'; + + @override + String get a_cloud_required_desc => + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'; + + @override + String get a_vision_data_title => 'Process camera data locally only'; + + @override + String get a_vision_data_desc => + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'; + + @override + String get a_parental_control_title => 'Set up parental controls'; + + @override + String get a_parental_control_desc => + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'; + + @override + String get a_child_data_limits_title => 'Minimize data collection'; + + @override + String get a_child_data_limits_desc => + 'Disable optional profile data and collect only the child data required for core functionality.'; + + @override + String get a_recording_disable_title => 'Disable audio/video recordings'; + + @override + String get a_recording_disable_desc => + 'Disable recording features by default and enable them only briefly when specifically needed.'; + + @override + String get a_health_sharing_title => 'Restrict health data sharing'; + + @override + String get a_health_sharing_desc => + 'Revoke health data access from unnecessary third-party apps in app and account settings.'; + + @override + String get a_location_tracking_title => 'Reduce location sharing'; + + @override + String get a_location_tracking_desc => + 'Disable location tracking outside active use or allow it only while the app is in use.'; + + @override + String get a_expert_data_retention_duration_title => + 'Define retention periods'; + + @override + String get a_expert_data_retention_duration_desc => + 'Set short, clear retention periods in settings and regularly delete old data.'; + + @override + String get a_expert_access_control_granular_title => + 'Introduce granular roles and accounts'; + + @override + String get a_expert_access_control_granular_desc => + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Limit third-party sharing'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Disable partner, advertising, and analytics sharing in privacy and account settings.'; + + @override + String get a_expert_data_sale_disabled_title => 'Opt out of data sale'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'; + + @override + String get a_expert_update_support_window_title => 'Verify update commitment'; + + @override + String get a_expert_update_support_window_desc => + 'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'; + + @override + String get a_expert_vulnerability_process_title => + 'Review vendor security process'; + + @override + String get a_expert_vulnerability_process_desc => + 'Prefer vendors with a clear security contact and responsible disclosure process.'; + + @override + String get a_expert_offline_functionality_title => + 'Prioritize offline functionality'; + + @override + String get a_expert_offline_functionality_desc => + 'Enable local operating modes and minimize mandatory cloud features where the device allows.'; + + @override + String get a_expert_bystander_transparency_title => + 'Add transparency notices for bystanders'; + + @override + String get a_expert_bystander_transparency_desc => + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'; + + @override + String get a_expert_child_data_protection_title => + 'Strengthen child data protection'; + + @override + String get a_expert_child_data_protection_desc => + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'; + + @override + String get a_expert_access_revocation_title => + 'Set up rapid access revocation'; + + @override + String get a_expert_access_revocation_desc => + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Restrict inference features'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'; + + @override + String get a_dont_know_title => 'Get to know device settings better'; + + @override + String get a_dont_know_desc => + 'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'; + + @override + String get sl_base_risk => 'Baseline risk of device type'; + + @override + String get sl_child_room_bonus => 'Increased sensitivity: child\'s bedroom'; + + @override + String get sl_password => 'Default password not changed'; + + @override + String get sl_updates => 'Automatic updates not enabled'; + + @override + String get sl_network => 'No separate IoT Wi-Fi configured'; + + @override + String get sl_informed => 'Household members not informed'; + + @override + String get sl_permissions => 'App permissions not reduced'; + + @override + String get sl_camera_consent => 'No consent for camera-covered area'; + + @override + String get sl_mic_active => 'Microphone not disabled when unused'; + + @override + String get sl_sensor_frequency => 'Measurement interval not reduced'; + + @override + String get sl_sensor_data_deletion => 'Old measurement values not deleted'; + + @override + String get sl_sensor_granularity => 'Data stored with too much granularity'; + + @override + String get sl_sensor_local => 'Data transferred to cloud'; + + @override + String get sl_voice_history => 'Voice recordings not deletable'; + + @override + String get sl_voice_local => 'No local voice processing'; + + @override + String get sl_skills_permissions => 'Skills not reviewed regularly'; + + @override + String get sl_video_encryption => 'Video transmission not encrypted'; + + @override + String get sl_video_storage => 'Recordings only in vendor cloud'; + + @override + String get sl_sharing_restrictions => 'Recording access not controlled'; + + @override + String get sl_motion_detection => 'Motion detection always active'; + + @override + String get sl_account_required => 'Mandatory vendor account required'; + + @override + String get sl_tracking_disabled => 'Ad tracking not disabled'; + + @override + String get sl_local_mode => 'No offline operation possible'; + + @override + String get sl_data_collection => 'Temperature history sent to vendor'; + + @override + String get sl_offline_control => 'No offline operation possible'; + + @override + String get sl_family_access => 'Access cannot be restricted'; + + @override + String get sl_local_control => 'Automations require internet connection'; + + @override + String get sl_usage_tracking => 'Switching patterns collected by vendor'; + + @override + String get sl_offline_fallback => 'Device unusable offline'; + + @override + String get sl_offline_unlock => 'No offline unlock possible'; + + @override + String get sl_access_logging => 'No access log available'; + + @override + String get sl_two_factor => 'Two-factor authentication missing'; + + @override + String get sl_map_privacy => 'Floor plan transmitted to vendor'; + + @override + String get sl_cloud_required => 'Navigation only possible via cloud'; + + @override + String get sl_vision_data => 'Camera images stored or transmitted'; + + @override + String get sl_parental_control => 'Parental controls not configured'; + + @override + String get sl_child_data_limits => 'Data collection not limited'; + + @override + String get sl_recording_disable => 'Recording cannot be disabled'; + + @override + String get sl_health_sharing => 'Health data shared with third parties'; + + @override + String get sl_location_tracking => 'Location tracking enabled'; + + @override + String get sl_expert_data_retention_duration => + 'Retention duration unclear or too long'; + + @override + String get sl_expert_access_control_granular => + 'Granular access control missing'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Third-party sharing not limited'; + + @override + String get sl_expert_data_sale_disabled => 'Data sale not excluded'; + + @override + String get sl_expert_update_support_window => + 'Guaranteed update support window unknown'; + + @override + String get sl_expert_vulnerability_process => + 'Vulnerability process not documented'; + + @override + String get sl_expert_offline_functionality => + 'Meaningful offline operation not possible'; + + @override + String get sl_expert_bystander_transparency => + 'Transparency for nearby bystanders missing'; + + @override + String get sl_expert_child_data_protection => + 'Child-data protection measures missing'; + + @override + String get sl_expert_access_revocation => + 'Individual access revocation not possible'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Controls against sensitive inference missing'; + + @override + String get risk_hint_camera => + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'; + + @override + String get risk_hint_mic => + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'; + + @override + String get risk_hint_lock => + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'; + + @override + String get risk_hint_child_room => + 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'; + + @override + String get risk_hint_generic => + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'; + + @override + String get gen_rec_0 => + 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'; + + @override + String get gen_rec_1 => + 'Use a password manager and assign a unique, strong password to each device.'; + + @override + String get gen_rec_2 => + 'Enable multi-factor authentication (MFA) for all vendor accounts.'; + + @override + String get gen_rec_3 => + 'Define who in your household is responsible for updates, backups, and accounts.'; + + @override + String get gen_rec_4 => + 'Regularly review (at least once per quarter) all access permissions and accounts.'; + + @override + String get gen_rec_5 => + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'; + + @override + String get gen_rec_6 => + 'Use a household consent check before buying new devices and involve all household members.'; +} diff --git a/lib/l10n/app_localizations_pl.dart b/lib/l10n/app_localizations_pl.dart new file mode 100644 index 0000000..1bd6146 --- /dev/null +++ b/lib/l10n/app_localizations_pl.dart @@ -0,0 +1,1617 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Polish (`pl`). +class AppLocalizationsPl extends AppLocalizations { + AppLocalizationsPl([String locale = 'pl']) : super(locale); + + @override + String get appTitle => 'Simplications'; + + @override + String get welcomeTitle => 'Simplications\nKontrola prywatności\nSmart Home'; + + @override + String get welcomeDescription => + 'Dodaj swoje inteligentne urządzenia pokój po pokoju i otrzymaj ocenę prywatności z konkretnymi zaleceniami.'; + + @override + String get stepSelectRooms => 'Wybierz pokój'; + + @override + String get stepCaptureDevices => 'Dodaj urządzenia'; + + @override + String get stepAnswerQuestions => 'Odpowiedz na pytania'; + + @override + String get stepGetRisk => 'Uzyskaj profil ryzyka i zalecenia'; + + @override + String get start => 'Start'; + + @override + String get resume => 'Wznów'; + + @override + String get about => 'O aplikacji'; + + @override + String get faq => 'FAQ'; + + @override + String get roomSelectionTitle => 'Wybierz pokój'; + + @override + String get roomQuestion => 'Który pokój chcesz teraz sprawdzić?'; + + @override + String get roomInstruction => + 'Stuknij pokój, dodaj urządzenia, a potem wróć tutaj, aby wybrać kolejny pokój.'; + + @override + String get results => 'Wyniki'; + + @override + String get alreadyEvaluated => 'Już oceniono'; + + @override + String get notCompleted => 'Nieukończone'; + + @override + String get addRoom => 'Dodaj pokój'; + + @override + String get deviceTitlePrefix => 'Urządzenia'; + + @override + String get roomCheck => 'Przegląd pokoju'; + + @override + String get deviceQuestion => + 'Jakich inteligentnych urządzeń używasz w tym pokoju?'; + + @override + String get deviceQuestionHint => + 'Stuknij urządzenie, aby odpowiedzieć na pytania.'; + + @override + String get noKnownDevices => + 'Brak znanych urządzeń dla tego pokoju. Możesz dodać własne urządzenie.'; + + @override + String get addDevice => 'Dodaj\nurządzenie'; + + @override + String get noDevice => 'Brak urządzenia'; + + @override + String get nextRoom => 'Następny pokój'; + + @override + String get deleteDeviceTitle => 'Usunąć urządzenie?'; + + @override + String get deleteDeviceBody => + 'To niestandardowe urządzenie zostanie usunięte. Wszystkie powiązane instancje również zostaną usunięte.'; + + @override + String get delete => 'Usuń'; + + @override + String get cancel => 'Anuluj'; + + @override + String get confirm => 'Potwierdź'; + + @override + String get noDeviceDialogTitle => 'Brak urządzeń w tym pokoju?'; + + @override + String get noDeviceDialogBody => + 'Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.'; + + @override + String get noDeviceDialogBodyWithExisting => + 'Istniejące wybory urządzeń dla tego pokoju zostaną odrzucone. Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.'; + + @override + String get questionnaireTitle => 'Pytania'; + + @override + String get connectedDevice => 'Podłączone urządzenie'; + + @override + String get done => 'Gotowe'; + + @override + String get yes => 'Tak'; + + @override + String get no => 'Nie'; + + @override + String get dontKnow => 'Nie wiem'; + + @override + String get notApplicableForDevice => + 'To pytanie nie dotyczy mojego urządzenia'; + + @override + String get languageDialogTitle => 'Wybierz język'; + + @override + String get currentLanguage => 'Bieżący język'; + + @override + String get aboutScreenTitle => 'O aplikacji'; + + @override + String get faqScreenTitle => 'Najczęściej zadawane pytania'; + + @override + String get aboutSubtitle => + 'Projekt badawczy dotyczący prywatności smart home'; + + @override + String get aboutProjectName => 'Simplications'; + + @override + String get aboutPartnerTuChemnitz => 'Uniwersytet Techniczny w Chemnitz'; + + @override + String get aboutPartnerHsAnhalt => 'Anhalt University of Applied Sciences'; + + @override + String get aboutPartnerVzSachsen => 'Centrum Konsumenckie Saksonii'; + + @override + String get aboutWebsiteSimplicationsLabel => 'simplications.tucmi.de'; + + @override + String get aboutWebsiteSimplicationsUrl => 'https://simplications.tucmi.de'; + + @override + String get aboutWebsiteTuChemnitzLabel => 'tu-chemnitz.de'; + + @override + String get aboutWebsiteTuChemnitzUrl => 'https://www.tu-chemnitz.de'; + + @override + String get aboutWebsiteHsAnhaltLabel => 'hs-anhalt.de'; + + @override + String get aboutWebsiteHsAnhaltUrl => 'https://www.hs-anhalt.de'; + + @override + String get aboutWebsiteVzSachsenLabel => 'verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsiteVzSachsenUrl => + 'https://www.verbraucherzentrale-sachsen.de'; + + @override + String get aboutWebsitePlatformPrivacyLabel => 'plattform-privatheit.de'; + + @override + String get aboutWebsitePlatformPrivacyUrl => + 'https://www.plattform-privatheit.de'; + + @override + String get aboutWebsiteFundingAgencyLabel => 'bmftr.bund.de'; + + @override + String get aboutWebsiteFundingAgencyUrl => 'https://www.bmftr.bund.de'; + + @override + String get faqQuestionWhatIs => 'Czym jest Simplications?'; + + @override + String get faqAnswerWhatIs => + 'Simplications to projekt badawczy dotyczący prywatności w inteligentnym domu. Ta aplikacja jest jedną z części projektu i prowadzi Cię pokój po pokoju przez Twoje urządzenia, oferując praktyczne zalecenia na podstawie odpowiedzi.'; + + @override + String get faqQuestionHowWorks => 'Jak działa kontrola?'; + + @override + String get faqAnswerHowWorks => + 'Wybierasz pokój, dodajesz inteligentne urządzenia, odpowiadasz na pytania dotyczące danego urządzenia i otrzymujesz profil ryzyka z priorytetowymi działaniami.'; + + @override + String get faqQuestionNoPolicy => 'Dlaczego nie ma polityki prywatności?'; + + @override + String get faqAnswerNoPolicy => 'Ponieważ nie zbieramy Twoich danych.'; + + @override + String get faqQuestionDataStored => 'Gdzie przechowywane są moje dane?'; + + @override + String get faqAnswerDataStored => + 'Twoje dane z oceny są przechowywane lokalnie na urządzeniu. W ekranie O aplikacji możesz w każdej chwili usunąć wszystkie zapisane dane.'; + + @override + String get faqQuestionNoDevice => + 'Co jeśli mojego urządzenia nie ma na liście?'; + + @override + String get faqAnswerNoDevice => + 'Możesz dodać własne urządzenia i nadal ukończyć kontrolę. Zalecenia będą wtedy oparte na Twojej konfiguracji i odpowiedziach.'; + + @override + String get faqQuestionRiskMeaning => + 'Co oznacza niskie, średnie i wysokie ryzyko?'; + + @override + String get faqAnswerRiskMeaning => + 'Poziomy te pokazują, jak bardzo obecna konfiguracja może zwiększać ryzyka dla prywatności. Są to poziomy orientacyjne, a nie certyfikacja prawna lub techniczna.'; + + @override + String get faqQuestionLegalAdvice => 'Czy to porada prawna?'; + + @override + String get faqAnswerLegalAdvice => + 'Nie. Simplications zapewnia praktyczne wskazówki i rekomendacje, ale nie zastępuje porady prawnej ani profesjonalnej konsultacji bezpieczeństwa.'; + + @override + String get faqQuestionCanShare => 'Czy mogę udostępnić wyniki?'; + + @override + String get faqAnswerCanShare => + 'Tak. Na ekranie wyników możesz wyeksportować i udostępnić podsumowanie jako tekst lub PDF.'; + + @override + String get websiteOpenFailed => 'Nie można otworzyć strony internetowej.'; + + @override + String get deleteAllDataTitle => 'Usunąć wszystkie dane?'; + + @override + String get deleteAllDataBody => + 'Wszystkie zapisane pokoje, urządzenia i odpowiedzi zostaną trwale usunięte. Tej operacji nie można cofnąć.'; + + @override + String get deleteAllDataButton => 'Usuń dane'; + + @override + String get allDataDeleted => 'Wszystkie zapisane dane zostały usunięte.'; + + @override + String get projectPartners => 'Partnerzy projektu'; + + @override + String get coordinationFunding => 'Koordynacja i finansowanie'; + + @override + String get coordination => 'Koordynacja'; + + @override + String get platformPrivacy => 'Plattform Privatheit'; + + @override + String get fundingAgency => 'Instytucja finansująca'; + + @override + String get fundingAgencyValue => + 'Federalne Ministerstwo Badań, Technologii i Przestrzeni Kosmicznej\nGrant 16KIS1868K'; + + @override + String get website => 'Strona internetowa'; + + @override + String get dangerZone => 'Strefa zagrożenia'; + + @override + String get dangerZoneWarning => + 'Uwaga: Ta operacja trwale usunie wszystkie zapisane dane aplikacji.'; + + @override + String get expertModeTitle => 'Expert mode'; + + @override + String get expertModeToggleLabel => 'Enable detailed expert mode'; + + @override + String get expertModeToggleHint => + 'Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).'; + + @override + String get expertModeSourcesHint => + 'Methodologically inspired by the following research projects:'; + + @override + String get expertModeSourceCmuLabel => + 'CMU IoT Security & Privacy Label (CISPL)'; + + @override + String get expertModeSourceCmuUrl => 'https://iotsecurityprivacy.org/labels'; + + @override + String get expertModeSourceUnboxingLabel => + 'Unboxing.IoT.Privacy (community platform)'; + + @override + String get expertModeSourceUnboxingUrl => 'https://iot-privacy.info/project/'; + + @override + String get expertModeQuestionnaireHint => + 'Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.'; + + @override + String get roomDeleteTitle => 'Usunąć pokój?'; + + @override + String get roomDeleteBody => + 'Ten niestandardowy pokój zostanie usunięty. Wszystkie powiązane urządzenia również zostaną usunięte.'; + + @override + String get add => 'Dodaj'; + + @override + String get addRoomDialogTitle => 'Dodaj nowy pokój'; + + @override + String get roomName => 'Nazwa pokoju'; + + @override + String get roomNameHint => 'np. Salon, Garaż'; + + @override + String get chooseIcon => 'Wybierz ikonę:'; + + @override + String get addDeviceDialogTitle => 'Dodaj nowe urządzenie'; + + @override + String get deviceName => 'Nazwa urządzenia'; + + @override + String get deviceNameHint => 'np. Mój inteligentny głośnik'; + + @override + String get baseRiskLabel => 'Bazowy wynik ryzyka (0-100)'; + + @override + String get baseRiskHint => 'np. 30 (niskie) do 60 (wysokie)'; + + @override + String get hasCamera => 'Ma kamerę?'; + + @override + String get hasMicrophone => 'Ma mikrofon?'; + + @override + String get camera => 'Kamera'; + + @override + String get microphone => 'Mikrofon'; + + @override + String get summaryTitle => 'Twój wynik'; + + @override + String get shareResult => 'Udostępnij wynik'; + + @override + String get shareAsText => 'Udostępnij jako tekst'; + + @override + String get shareAsPdf => 'Udostępnij jako PDF'; + + @override + String get restart => 'Uruchom ponownie'; + + @override + String get noDevicesCaptured => 'Nie dodano żadnych urządzeń.'; + + @override + String get noDevicesHint => + 'Uruchom ponownie i dodaj urządzenia, aby otrzymać ocenę.'; + + @override + String get highRisk => 'Wysokie ryzyko'; + + @override + String get mediumRisk => 'Średnie ryzyko'; + + @override + String get lowRisk => 'Niskie ryzyko'; + + @override + String get exportFailed => 'Eksport nie powiódł się'; + + @override + String get summaryShareSubject => 'Wynik Simplications'; + + @override + String get summarySharePdfText => 'Raport Simplications jako PDF'; + + @override + String get overview => 'Przegląd'; + + @override + String get evaluatedDevices => 'Ocenione urządzenia'; + + @override + String skippedDevicesHint(Object count) { + return 'Pominięto $count urządzeń, ponieważ kwestionariusz nie został ukończony.'; + } + + @override + String get overallRisk => 'Ryzyko całkowite'; + + @override + String get generalRecommendations => 'Ogólne zalecenia'; + + @override + String get generalRecommendationsHint => + 'Te środki dotyczą całego Twojego smart home, niezależnie od pojedynczych urządzeń.'; + + @override + String get fullCatalog => 'Pełny katalog działań'; + + @override + String get catalogButton => 'Otwórz pełny katalog działań'; + + @override + String get risk => 'Ryzyko'; + + @override + String get note => 'Uwaga'; + + @override + String get recommendations => 'Zalecenia'; + + @override + String get urgent => 'Pilne'; + + @override + String get recommended => 'Zalecane'; + + @override + String get optional => 'Opcjonalne'; + + @override + String get social => 'Społeczne'; + + @override + String get technical => 'Techniczne'; + + @override + String get security => 'Bezpieczeństwo'; + + @override + String get smartHomePrivacyHeader => 'Prywatność Twojego smart home'; + + @override + String get devicesRated => 'ocenionych urządzeń'; + + @override + String get howRiskCalculated => 'Jak obliczane jest ryzyko?'; + + @override + String get totalScore => 'Łącznie'; + + @override + String get catalogSnackBarPrefix => 'Katalog'; + + @override + String get reportExportedAt => 'Wyeksportowano'; + + @override + String get noActionLow => + 'Wszystko w porządku - nie są wymagane żadne działania.'; + + @override + String get noActionMedium => + 'Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje średnie ryzyko resztkowe.'; + + @override + String get noActionHigh => + 'Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje wysokie ryzyko resztkowe.'; + + @override + String get overallLow => + 'Dobra robota! Twoje urządzenia są w większości skonfigurowane bezpiecznie. Mimo to sprawdź ogólne zalecenia.'; + + @override + String get overallMedium => + 'Jest miejsce na poprawę. Sprawdź zalecenia dla każdego urządzenia.'; + + @override + String get overallHigh => + 'Kilka urządzeń ma istotne ryzyka prywatności/ochrony danych. Prosimy jak najszybciej wdrożyć działania o wysokim priorytecie.'; + + @override + String dontKnowHint(Object count, Object suffix) { + return ' $count odpowiedź$suffix oznaczono jako \"Nie wiem\" - poświęć czas na lepsze poznanie ustawień swoich urządzeń.'; + } + + @override + String get room_living => 'Living room'; + + @override + String get room_kitchen => 'Kitchen'; + + @override + String get room_bedroom => 'Bedroom'; + + @override + String get room_child_bedroom => 'Child\'s bedroom'; + + @override + String get room_bathroom => 'Bathroom'; + + @override + String get room_office => 'Office'; + + @override + String get room_hallway => 'Hallway / Entrance'; + + @override + String get room_garden => 'Garden / Outdoor area'; + + @override + String get room_basement => 'Basement / Pantry'; + + @override + String get room_whole_home => 'Entire home'; + + @override + String get device_simple_sensor => + 'Basic sensor (e.g., motion or door sensor)'; + + @override + String get device_humidity_sensor => 'Humidity sensor'; + + @override + String get device_temperature_sensor => 'Temperature sensor'; + + @override + String get device_light_sensor => 'Light sensor'; + + @override + String get device_smart_speaker => 'Smart speaker / voice assistant'; + + @override + String get device_smart_display => 'Smart display (e.g., Nest Hub)'; + + @override + String get device_smart_tv => 'Smart TV'; + + @override + String get device_indoor_camera => 'Smart indoor camera'; + + @override + String get device_outdoor_camera => 'Smart outdoor camera'; + + @override + String get device_doorbell_camera => 'Smart doorbell with camera'; + + @override + String get device_baby_monitor => 'Baby monitor / baby camera'; + + @override + String get device_robot_vacuum => 'Robot vacuum'; + + @override + String get device_smart_fridge => 'Smart fridge'; + + @override + String get device_smart_oven => 'Smart oven / stove'; + + @override + String get device_smart_coffee => 'Smart coffee machine'; + + @override + String get device_smart_washing => 'Smart washer / dryer'; + + @override + String get device_smart_thermostat => 'Smart thermostat / heating control'; + + @override + String get device_smart_plug => 'Smart plug'; + + @override + String get device_smart_light => 'Smart lighting'; + + @override + String get device_smart_lock => 'Smart door lock'; + + @override + String get device_smart_blind => 'Smart blind / shutter'; + + @override + String get device_fitness_tracker => 'Fitness tracker / smartwatch'; + + @override + String get device_smart_toy => 'Smart toy'; + + @override + String get device_smart_router => 'Smart router / mesh system'; + + @override + String get device_smart_hub => 'Smart home hub (e.g., Homey, Home Assistant)'; + + @override + String get device_smart_meter => + 'Intelligent electricity meter / smart meter'; + + @override + String get device_smart_irrigation => 'Smart irrigation system'; + + @override + String get device_smart_scale => 'Smart scale'; + + @override + String get device_smart_printer => 'Smart printer'; + + @override + String get q_password_text => + 'Have you changed the default password of the device or its linked account?'; + + @override + String get q_password_hint => + 'Default passwords are often publicly known and easy to crack.'; + + @override + String get q_updates_text => + 'Are automatic security updates enabled for the device?'; + + @override + String get q_updates_hint => + 'Updates close known security vulnerabilities promptly.'; + + @override + String get q_network_text => + 'Is the device connected to a separate smart home or IoT Wi-Fi network?'; + + @override + String get q_network_hint => + 'A dedicated network for smart devices protects your main home network.'; + + @override + String get q_informed_text => + 'Are all people in the household informed about this device and its function?'; + + @override + String get q_informed_hint => + 'All household members should know what data the device captures.'; + + @override + String get q_permissions_text => + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?'; + + @override + String get q_permissions_hint => + 'Only permissions that are truly needed should be enabled.'; + + @override + String get q_mic_active_text => + 'Do you deactivate the microphone when you are not actively using it?'; + + @override + String get q_mic_active_hint => + 'Smart speakers and devices with microphones can be activated unintentionally.'; + + @override + String get q_camera_consent_text => + 'Does the camera only record areas for which everyone affected has given their consent?'; + + @override + String get q_camera_consent_hint => + 'Cameras in communal or private areas require the consent of all residents.'; + + @override + String get q_sensor_frequency_text => + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?'; + + @override + String get q_sensor_frequency_hint => + 'A lower measurement frequency produces less data and limits inferences about your behavior.'; + + @override + String get q_sensor_data_deletion_text => + 'Are older measurement values deleted automatically or on request?'; + + @override + String get q_sensor_data_deletion_hint => + 'Old historical data should not be stored permanently. Check retention settings.'; + + @override + String get q_sensor_granularity_text => + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?'; + + @override + String get q_sensor_granularity_hint => + 'Less granular views help prevent inferences about precise presence or behavior patterns.'; + + @override + String get q_sensor_local_text => + 'Is measurement data processed and stored locally without being transferred to the cloud?'; + + @override + String get q_sensor_local_hint => + 'Local processing prevents the vendor from accessing your measurement data.'; + + @override + String get q_voice_history_text => + 'Can you delete voice recordings from device history or disable this feature?'; + + @override + String get q_voice_history_hint => + 'BSI recommendation: Minimize recording retention or delete recordings regularly.'; + + @override + String get q_voice_local_text => + 'Is voice processing performed partly on the device locally?'; + + @override + String get q_voice_local_hint => + 'Local processing reduces the amount of data sent to the cloud.'; + + @override + String get q_skills_permissions_text => + 'Do you regularly review which skills have access to your account?'; + + @override + String get q_skills_permissions_hint => + 'Third-party skills can access sensitive data. Enable only necessary skills.'; + + @override + String get q_video_encryption_text => + 'Is video recording and transmission encrypted end-to-end?'; + + @override + String get q_video_encryption_hint => + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.'; + + @override + String get q_video_storage_text => + 'Are recordings stored locally (not only in the vendor cloud)?'; + + @override + String get q_video_storage_hint => + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.'; + + @override + String get q_sharing_restrictions_text => + 'Can you control who can access live view and recordings?'; + + @override + String get q_sharing_restrictions_hint => + 'You should be able to precisely control access to video recordings.'; + + @override + String get q_motion_detection_text => + 'Can you disable or schedule motion detection when you are at home?'; + + @override + String get q_motion_detection_hint => + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.'; + + @override + String get q_account_required_text => + 'Can you use the device without a mandatory online account?'; + + @override + String get q_account_required_hint => + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.'; + + @override + String get q_tracking_disabled_text => + 'Can you completely disable advertising and tracking features?'; + + @override + String get q_tracking_disabled_hint => + 'Smart TVs often collect viewing habit data. Look for privacy settings.'; + + @override + String get q_local_mode_text => + 'Can you use the device via HDMI or local sources without internet?'; + + @override + String get q_local_mode_hint => + 'Offline use protects usage data from being sent to the vendor.'; + + @override + String get q_data_collection_text => + 'Do temperature history and schedules stay on-device (not sent to the vendor)?'; + + @override + String get q_data_collection_hint => + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.'; + + @override + String get q_offline_control_text => + 'Can you operate the thermostat offline (without internet)?'; + + @override + String get q_offline_control_hint => + 'Offline operation or local automation protects data from cloud access.'; + + @override + String get q_family_access_text => + 'Can you control who may adjust heating (e.g., restrict guests)?'; + + @override + String get q_family_access_hint => + 'Household members should have control without visitors changing everything.'; + + @override + String get q_local_control_text => + 'Can automations run locally without internet?'; + + @override + String get q_local_control_hint => + 'Local scenes and schedules protect your privacy better.'; + + @override + String get q_usage_tracking_text => + 'Have you disabled or limited vendor collection of switching patterns and usage times?'; + + @override + String get q_usage_tracking_hint => + 'Usage patterns can reveal presence and habits. Check app privacy settings.'; + + @override + String get q_offline_fallback_text => + 'Do devices still work if internet or app connection fails?'; + + @override + String get q_offline_fallback_hint => + 'Reliable local operation is important for daily use and privacy.'; + + @override + String get q_offline_unlock_text => + 'Can you unlock the lock offline (e.g., with code or key)?'; + + @override + String get q_offline_unlock_hint => + 'Backup options prevent lockout during internet or power outages.'; + + @override + String get q_access_logging_text => + 'Can you track who opened the lock and when?'; + + @override + String get q_access_logging_hint => + 'An access log helps you detect suspicious activity.'; + + @override + String get q_two_factor_text => + 'Is two-factor authentication (2FA) available for the lock account?'; + + @override + String get q_two_factor_hint => + 'BSI recommendation: 2FA protects your account from unauthorized remote access.'; + + @override + String get q_map_privacy_text => + 'Are created floor plans stored exclusively on the device locally?'; + + @override + String get q_map_privacy_hint => + 'Home floor plans are sensitive information and should not be sent to the vendor.'; + + @override + String get q_cloud_required_text => + 'Does floor-plan navigation work without cloud connection?'; + + @override + String get q_cloud_required_hint => + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.'; + + @override + String get q_vision_data_text => + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?'; + + @override + String get q_vision_data_hint => + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.'; + + @override + String get q_parental_control_text => + 'Are there parental control features to manage the toy?'; + + @override + String get q_parental_control_hint => + 'Parental controls should allow restricting contacts and features.'; + + @override + String get q_child_data_limits_text => + 'Can you limit which personal data the toy collects?'; + + @override + String get q_child_data_limits_hint => + 'Child-focused devices should collect and store minimal data.'; + + @override + String get q_recording_disable_text => + 'Can you disable audio and video recording on the device?'; + + @override + String get q_recording_disable_hint => + 'BSI recommendation: Recordings of children should only be possible with explicit control.'; + + @override + String get q_health_sharing_text => + 'Can you control which third parties can access your health data?'; + + @override + String get q_health_sharing_hint => + 'Health data is sensitive. Only authorized apps should have access.'; + + @override + String get q_location_tracking_text => + 'Can you disable location tracking when not needed?'; + + @override + String get q_location_tracking_hint => + 'GPS tracking uses battery and can reveal movement patterns.'; + + @override + String get q_expert_data_retention_duration_text => + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?'; + + @override + String get q_expert_data_retention_duration_hint => + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.'; + + @override + String get q_expert_access_control_granular_text => + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?'; + + @override + String get q_expert_access_control_granular_hint => + 'Granular access control reduces the risk of unauthorized access and misuse.'; + + @override + String get q_expert_third_party_sharing_limited_text => + 'Is third-party sharing disabled or clearly limited to necessary services?'; + + @override + String get q_expert_third_party_sharing_limited_hint => + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.'; + + @override + String get q_expert_data_sale_disabled_text => + 'Is the sale of your data excluded (or actively disabled, where possible)?'; + + @override + String get q_expert_data_sale_disabled_hint => + 'An explicit \"no data sale\" option is a strong privacy signal.'; + + @override + String get q_expert_update_support_window_text => + 'Is it known how long the vendor guarantees security updates?'; + + @override + String get q_expert_update_support_window_hint => + 'A transparent update commitment reduces long-term security and privacy risks.'; + + @override + String get q_expert_vulnerability_process_text => + 'Is there a documented process for reporting and fixing vulnerabilities?'; + + @override + String get q_expert_vulnerability_process_hint => + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.'; + + @override + String get q_expert_offline_functionality_text => + 'Does the device remain meaningfully usable with limited internet connectivity?'; + + @override + String get q_expert_offline_functionality_hint => + 'More offline functionality often means less continuous data transfer to the cloud.'; + + @override + String get q_expert_bystander_transparency_text => + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?'; + + @override + String get q_expert_bystander_transparency_hint => + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.'; + + @override + String get q_expert_child_data_protection_text => + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?'; + + @override + String get q_expert_child_data_protection_hint => + 'Devices in child-related contexts require especially strict privacy safeguards.'; + + @override + String get q_expert_access_revocation_text => + 'Can digital keys/access rights be revoked quickly and individually?'; + + @override + String get q_expert_access_revocation_hint => + 'Fast revocation is crucial when devices are shared or users change.'; + + @override + String get q_expert_sensitive_inference_controls_text => + 'Are features that infer sensitive health or behavior profiles restricted or disableable?'; + + @override + String get q_expert_sensitive_inference_controls_hint => + 'Inference controls reduce risks from secondary use of sensitive data.'; + + @override + String get a_password_title => 'Change default password'; + + @override + String get a_password_desc => + 'Replace the default password with a strong, unique password. Use a password manager.'; + + @override + String get a_updates_title => 'Enable automatic updates'; + + @override + String get a_updates_desc => + 'Enable automatic security updates in device or app settings.'; + + @override + String get a_network_title => 'Set up separate IoT Wi-Fi'; + + @override + String get a_network_desc => + 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.'; + + @override + String get a_informed_title => 'Inform household members'; + + @override + String get a_informed_desc => + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.'; + + @override + String get a_permissions_title => 'Restrict app permissions'; + + @override + String get a_permissions_desc => + 'Check companion-app permissions in phone settings and disable unnecessary ones.'; + + @override + String get a_camera_consent_title => + 'Align camera positioning with residents'; + + @override + String get a_camera_consent_desc => + 'Obtain consent from everyone affected. The camera must not record areas without consent.'; + + @override + String get a_mic_active_title => 'Disable microphone when not in use'; + + @override + String get a_mic_active_desc => + 'Use the physical mute switch or disable the microphone in settings.'; + + @override + String get a_sensor_frequency_title => 'Reduce measurement interval'; + + @override + String get a_sensor_frequency_desc => + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.'; + + @override + String get a_sensor_data_deletion_title => 'Delete old measurement values'; + + @override + String get a_sensor_data_deletion_desc => + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.'; + + @override + String get a_sensor_granularity_title => 'Show less detailed data'; + + @override + String get a_sensor_granularity_desc => + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.'; + + @override + String get a_sensor_local_title => 'Prefer local processing'; + + @override + String get a_sensor_local_desc => + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.'; + + @override + String get a_voice_history_title => 'Delete voice recordings'; + + @override + String get a_voice_history_desc => + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.'; + + @override + String get a_voice_local_title => 'Enable local voice processing'; + + @override + String get a_voice_local_desc => + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.'; + + @override + String get a_skills_permissions_title => 'Review skills/integrations'; + + @override + String get a_skills_permissions_desc => + 'Review which third-party skills have access. Disable unnecessary skills.'; + + @override + String get a_video_encryption_title => 'Enable end-to-end video encryption'; + + @override + String get a_video_encryption_desc => + 'Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.'; + + @override + String get a_video_storage_title => 'Store recordings locally'; + + @override + String get a_video_storage_desc => + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.'; + + @override + String get a_sharing_restrictions_title => 'Restrict camera access'; + + @override + String get a_sharing_restrictions_desc => + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.'; + + @override + String get a_motion_detection_title => + 'Disable motion detection when at home'; + + @override + String get a_motion_detection_desc => + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.'; + + @override + String get a_account_required_title => + 'Minimize privacy impact of required account'; + + @override + String get a_account_required_desc => + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.'; + + @override + String get a_tracking_disabled_title => 'Disable tracking and advertising'; + + @override + String get a_tracking_disabled_desc => + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.'; + + @override + String get a_local_mode_title => 'Prefer offline use'; + + @override + String get a_local_mode_desc => + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.'; + + @override + String get a_data_collection_title => 'Disable history upload'; + + @override + String get a_data_collection_desc => + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.'; + + @override + String get a_offline_control_title => 'Set up local control'; + + @override + String get a_offline_control_desc => + 'Configure local schedules and control without cloud dependency if the device supports it.'; + + @override + String get a_family_access_title => + 'Separate access rights for household members'; + + @override + String get a_family_access_desc => + 'Set up separate roles/accounts so that only authorized people can adjust the heating.'; + + @override + String get a_local_control_title => 'Enable local automations'; + + @override + String get a_local_control_desc => + 'Use local scenes/schedules instead of cloud automations where available.'; + + @override + String get a_usage_tracking_title => 'Disable usage tracking'; + + @override + String get a_usage_tracking_desc => + 'Disable analytics, telemetry, and usage data collection in app settings.'; + + @override + String get a_offline_fallback_title => 'Ensure offline fallback'; + + @override + String get a_offline_fallback_desc => + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.'; + + @override + String get a_offline_unlock_title => 'Secure offline access'; + + @override + String get a_offline_unlock_desc => + 'Set up a physical key or emergency code and test access when internet is unavailable.'; + + @override + String get a_access_logging_title => 'Enable access log'; + + @override + String get a_access_logging_desc => + 'Enable logging and notifications for lock openings so unauthorized access can be detected.'; + + @override + String get a_two_factor_title => 'Enable two-factor authentication'; + + @override + String get a_two_factor_desc => + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.'; + + @override + String get a_map_privacy_title => 'Disable cloud floor-plan storage'; + + @override + String get a_map_privacy_desc => + 'Switch storage to local and disable cloud backups of floor plans if the option is available.'; + + @override + String get a_cloud_required_title => 'Reduce cloud dependency'; + + @override + String get a_cloud_required_desc => + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.'; + + @override + String get a_vision_data_title => 'Process camera data locally only'; + + @override + String get a_vision_data_desc => + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.'; + + @override + String get a_parental_control_title => 'Set up parental controls'; + + @override + String get a_parental_control_desc => + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.'; + + @override + String get a_child_data_limits_title => 'Minimize data collection'; + + @override + String get a_child_data_limits_desc => + 'Disable optional profile data and collect only the child data required for core functionality.'; + + @override + String get a_recording_disable_title => 'Disable audio/video recordings'; + + @override + String get a_recording_disable_desc => + 'Disable recording features by default and enable them only briefly when specifically needed.'; + + @override + String get a_health_sharing_title => 'Restrict health data sharing'; + + @override + String get a_health_sharing_desc => + 'Revoke health data access from unnecessary third-party apps in app and account settings.'; + + @override + String get a_location_tracking_title => 'Reduce location sharing'; + + @override + String get a_location_tracking_desc => + 'Disable location tracking outside active use or allow it only while the app is in use.'; + + @override + String get a_expert_data_retention_duration_title => + 'Define retention periods'; + + @override + String get a_expert_data_retention_duration_desc => + 'Set short, clear retention periods in settings and regularly delete old data.'; + + @override + String get a_expert_access_control_granular_title => + 'Introduce granular roles and accounts'; + + @override + String get a_expert_access_control_granular_desc => + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.'; + + @override + String get a_expert_third_party_sharing_limited_title => + 'Limit third-party sharing'; + + @override + String get a_expert_third_party_sharing_limited_desc => + 'Disable partner, advertising, and analytics sharing in privacy and account settings.'; + + @override + String get a_expert_data_sale_disabled_title => 'Opt out of data sale'; + + @override + String get a_expert_data_sale_disabled_desc => + 'Enable available \"Do not sell\" options or object to data sharing for commercial purposes.'; + + @override + String get a_expert_update_support_window_title => 'Verify update commitment'; + + @override + String get a_expert_update_support_window_desc => + 'Review the vendor\'s official update policy and plan a device replacement if no commitment is given.'; + + @override + String get a_expert_vulnerability_process_title => + 'Review vendor security process'; + + @override + String get a_expert_vulnerability_process_desc => + 'Prefer vendors with a clear security contact and responsible disclosure process.'; + + @override + String get a_expert_offline_functionality_title => + 'Prioritize offline functionality'; + + @override + String get a_expert_offline_functionality_desc => + 'Enable local operating modes and minimize mandatory cloud features where the device allows.'; + + @override + String get a_expert_bystander_transparency_title => + 'Add transparency notices for bystanders'; + + @override + String get a_expert_bystander_transparency_desc => + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.'; + + @override + String get a_expert_child_data_protection_title => + 'Strengthen child data protection'; + + @override + String get a_expert_child_data_protection_desc => + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.'; + + @override + String get a_expert_access_revocation_title => + 'Set up rapid access revocation'; + + @override + String get a_expert_access_revocation_desc => + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.'; + + @override + String get a_expert_sensitive_inference_controls_title => + 'Restrict inference features'; + + @override + String get a_expert_sensitive_inference_controls_desc => + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.'; + + @override + String get a_dont_know_title => 'Get to know device settings better'; + + @override + String get a_dont_know_desc => + 'At least one question was answered with \"I don\'t know\". Review your device settings and documentation to reduce risk more effectively.'; + + @override + String get sl_base_risk => 'Baseline risk of device type'; + + @override + String get sl_child_room_bonus => 'Increased sensitivity: child\'s bedroom'; + + @override + String get sl_password => 'Default password not changed'; + + @override + String get sl_updates => 'Automatic updates not enabled'; + + @override + String get sl_network => 'No separate IoT Wi-Fi configured'; + + @override + String get sl_informed => 'Household members not informed'; + + @override + String get sl_permissions => 'App permissions not reduced'; + + @override + String get sl_camera_consent => 'No consent for camera-covered area'; + + @override + String get sl_mic_active => 'Microphone not disabled when unused'; + + @override + String get sl_sensor_frequency => 'Measurement interval not reduced'; + + @override + String get sl_sensor_data_deletion => 'Old measurement values not deleted'; + + @override + String get sl_sensor_granularity => 'Data stored with too much granularity'; + + @override + String get sl_sensor_local => 'Data transferred to cloud'; + + @override + String get sl_voice_history => 'Voice recordings not deletable'; + + @override + String get sl_voice_local => 'No local voice processing'; + + @override + String get sl_skills_permissions => 'Skills not reviewed regularly'; + + @override + String get sl_video_encryption => 'Video transmission not encrypted'; + + @override + String get sl_video_storage => 'Recordings only in vendor cloud'; + + @override + String get sl_sharing_restrictions => 'Recording access not controlled'; + + @override + String get sl_motion_detection => 'Motion detection always active'; + + @override + String get sl_account_required => 'Mandatory vendor account required'; + + @override + String get sl_tracking_disabled => 'Ad tracking not disabled'; + + @override + String get sl_local_mode => 'No offline operation possible'; + + @override + String get sl_data_collection => 'Temperature history sent to vendor'; + + @override + String get sl_offline_control => 'No offline operation possible'; + + @override + String get sl_family_access => 'Access cannot be restricted'; + + @override + String get sl_local_control => 'Automations require internet connection'; + + @override + String get sl_usage_tracking => 'Switching patterns collected by vendor'; + + @override + String get sl_offline_fallback => 'Device unusable offline'; + + @override + String get sl_offline_unlock => 'No offline unlock possible'; + + @override + String get sl_access_logging => 'No access log available'; + + @override + String get sl_two_factor => 'Two-factor authentication missing'; + + @override + String get sl_map_privacy => 'Floor plan transmitted to vendor'; + + @override + String get sl_cloud_required => 'Navigation only possible via cloud'; + + @override + String get sl_vision_data => 'Camera images stored or transmitted'; + + @override + String get sl_parental_control => 'Parental controls not configured'; + + @override + String get sl_child_data_limits => 'Data collection not limited'; + + @override + String get sl_recording_disable => 'Recording cannot be disabled'; + + @override + String get sl_health_sharing => 'Health data shared with third parties'; + + @override + String get sl_location_tracking => 'Location tracking enabled'; + + @override + String get sl_expert_data_retention_duration => + 'Retention duration unclear or too long'; + + @override + String get sl_expert_access_control_granular => + 'Granular access control missing'; + + @override + String get sl_expert_third_party_sharing_limited => + 'Third-party sharing not limited'; + + @override + String get sl_expert_data_sale_disabled => 'Data sale not excluded'; + + @override + String get sl_expert_update_support_window => + 'Guaranteed update support window unknown'; + + @override + String get sl_expert_vulnerability_process => + 'Vulnerability process not documented'; + + @override + String get sl_expert_offline_functionality => + 'Meaningful offline operation not possible'; + + @override + String get sl_expert_bystander_transparency => + 'Transparency for nearby bystanders missing'; + + @override + String get sl_expert_child_data_protection => + 'Child-data protection measures missing'; + + @override + String get sl_expert_access_revocation => + 'Individual access revocation not possible'; + + @override + String get sl_expert_sensitive_inference_controls => + 'Controls against sensitive inference missing'; + + @override + String get risk_hint_camera => + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.'; + + @override + String get risk_hint_mic => + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.'; + + @override + String get risk_hint_lock => + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.'; + + @override + String get risk_hint_child_room => + 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.'; + + @override + String get risk_hint_generic => + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.'; + + @override + String get gen_rec_0 => + 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).'; + + @override + String get gen_rec_1 => + 'Use a password manager and assign a unique, strong password to each device.'; + + @override + String get gen_rec_2 => + 'Enable multi-factor authentication (MFA) for all vendor accounts.'; + + @override + String get gen_rec_3 => + 'Define who in your household is responsible for updates, backups, and accounts.'; + + @override + String get gen_rec_4 => + 'Regularly review (at least once per quarter) all access permissions and accounts.'; + + @override + String get gen_rec_5 => + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.'; + + @override + String get gen_rec_6 => + 'Use a household consent check before buying new devices and involve all household members.'; +} diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb new file mode 100644 index 0000000..0405506 --- /dev/null +++ b/lib/l10n/app_nl.arb @@ -0,0 +1,154 @@ +{ + "@@locale": "nl", + "appTitle": "Simplications", + "welcomeTitle": "Simplications\nSmart Home\nprivacycheck", + "welcomeDescription": "Leg je slimme apparaten kamer voor kamer vast en ontvang een privacybeoordeling met concrete aanbevelingen.", + "stepSelectRooms": "Kamer kiezen", + "stepCaptureDevices": "Apparaten vastleggen", + "stepAnswerQuestions": "Vragen beantwoorden", + "stepGetRisk": "Risicoprofiel en aanbevelingen ontvangen", + "start": "Starten", + "resume": "Doorgaan", + "about": "Over", + "faq": "FAQ", + "roomSelectionTitle": "Kamer kiezen", + "roomQuestion": "Welke kamer wilt u nu controleren?", + "roomInstruction": "Tik op een kamer, leg daar uw apparaten vast en keer terug om de volgende kamer te kiezen.", + "results": "Resultaten", + "alreadyEvaluated": "Al beoordeeld", + "notCompleted": "Niet voltooid", + "addRoom": "Kamer toevoegen", + "deviceTitlePrefix": "Apparaten", + "roomCheck": "Kamercheck", + "deviceQuestion": "Welke slimme apparaten gebruikt u in deze kamer?", + "deviceQuestionHint": "Tik op een apparaat om de vragen te beantwoorden.", + "noKnownDevices": "Geen bekende apparaten voor deze kamer. U kunt een eigen apparaat toevoegen.", + "addDevice": "Apparaat\ntoevoegen", + "noDevice": "Geen apparaat", + "nextRoom": "Volgende kamer", + "deleteDeviceTitle": "Apparaat verwijderen?", + "deleteDeviceBody": "Dit aangepaste apparaat wordt verwijderd. Alle gekoppelde instanties worden ook verwijderd.", + "delete": "Verwijderen", + "cancel": "Annuleren", + "confirm": "Bevestigen", + "noDeviceDialogTitle": "Geen apparaten in deze kamer?", + "noDeviceDialogBody": "Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", + "noDeviceDialogBodyWithExisting": "Bestaande apparaatkeuzes voor deze kamer worden verwijderd. Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", + "questionnaireTitle": "Vragen", + "connectedDevice": "Verbonden apparaat", + "done": "Klaar", + "yes": "Ja", + "no": "Nee", + "dontKnow": "Weet ik niet", + "notApplicableForDevice": "Deze vraag is niet van toepassing op mijn apparaat", + "languageDialogTitle": "Taal kiezen", + "currentLanguage": "Huidige taal", + "aboutScreenTitle": "Over de app", + "aboutSubtitle": "Onderzoeksproject over smart-home-privacy", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Technische Universiteit Chemnitz", + "aboutPartnerHsAnhalt": "Hogeschool Anhalt", + "aboutPartnerVzSachsen": "Consumentenorganisatie Saksen", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "websiteOpenFailed": "Kon website niet openen.", + "deleteAllDataTitle": "Alle gegevens verwijderen?", + "deleteAllDataBody": "Alle vastgelegde kamers, apparaten en antwoorden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.", + "deleteAllDataButton": "Gegevens verwijderen", + "allDataDeleted": "Alle opgeslagen gegevens zijn verwijderd.", + "projectPartners": "Projectpartners", + "coordinationFunding": "Coordinatie en financiering", + "coordination": "Coordinatie", + "platformPrivacy": "Plattform Privatheit", + "fundingAgency": "Financierende instantie", + "fundingAgencyValue": "Duits Federaal Ministerie voor Onderzoek, Technologie en Ruimtevaart\nSubsidie 16KIS1868K", + "website": "Website", + "dangerZone": "Gevarenzone", + "dangerZoneWarning": "Waarschuwing: deze actie verwijdert alle opgeslagen app-gegevens permanent.", + "faqScreenTitle": "Veelgestelde vragen", + "faqQuestionWhatIs": "Wat is Simplications?", + "faqAnswerWhatIs": "Simplications is een onderzoeksproject over smart-home-privacy. Deze app is een onderdeel van het project en begeleidt je kamer voor kamer door je apparaten met praktische aanbevelingen op basis van je antwoorden.", + "faqQuestionHowWorks": "Hoe werkt de check?", + "faqAnswerHowWorks": "Je kiest een kamer, voegt je slimme apparaten toe, beantwoordt apparaatspecifieke vragen en ontvangt een risicoprofiel met geprioriteerde acties.", + "faqQuestionNoPolicy": "Waarom is er geen privacybeleid?", + "faqAnswerNoPolicy": "Omdat we jouw gegevens niet verzamelen.", + "faqQuestionDataStored": "Waar worden mijn gegevens opgeslagen?", + "faqAnswerDataStored": "Je beoordelingsgegevens worden lokaal op je apparaat opgeslagen. In het Over-scherm kun je alle opgeslagen gegevens op elk moment verwijderen.", + "faqQuestionNoDevice": "Wat als mijn apparaat niet in de lijst staat?", + "faqAnswerNoDevice": "Je kunt aangepaste apparaten toevoegen en de check toch voltooien. De aanbevelingen zijn dan gebaseerd op je configuratie en antwoorden.", + "faqQuestionRiskMeaning": "Wat betekenen laag, gemiddeld en hoog risico?", + "faqAnswerRiskMeaning": "Deze niveaus geven aan in hoeverre je huidige configuratie privacyrisico’s kan vergroten. Het zijn richtniveaus, geen juridische of technische certificering.", + "faqQuestionLegalAdvice": "Is dit juridisch advies?", + "faqAnswerLegalAdvice": "Nee. Simplications biedt praktische oriëntatie en aanbevelingen, maar vervangt geen juridisch advies of professionele beveiligingsconsultatie.", + "faqQuestionCanShare": "Kan ik mijn resultaten delen?", + "faqAnswerCanShare": "Ja. In het resultatenscherm kun je je samenvatting exporteren en delen als tekst of PDF.", + "roomDeleteTitle": "Kamer verwijderen?", + "roomDeleteBody": "Deze aangepaste kamer wordt verwijderd. Alle gekoppelde apparaten worden ook verwijderd.", + "add": "Toevoegen", + "addRoomDialogTitle": "Nieuwe kamer toevoegen", + "roomName": "Kamernaam", + "roomNameHint": "bijv. Woonkamer, Garage", + "chooseIcon": "Kies een pictogram:", + "addDeviceDialogTitle": "Nieuw apparaat toevoegen", + "deviceName": "Apparaatnaam", + "deviceNameHint": "bijv. Mijn slimme speaker", + "baseRiskLabel": "Basisscore risico (0-100)", + "baseRiskHint": "bijv. 30 (laag) tot 60 (hoog)", + "hasCamera": "Heeft camera?", + "hasMicrophone": "Heeft microfoon?", + "camera": "Camera", + "microphone": "Microfoon", + "summaryTitle": "Jouw resultaat", + "shareResult": "Resultaat delen", + "shareAsText": "Delen als tekst", + "shareAsPdf": "Delen als PDF", + "restart": "Opnieuw starten", + "noDevicesCaptured": "Geen apparaten vastgelegd.", + "noDevicesHint": "Start opnieuw en voeg apparaten toe om een beoordeling te krijgen.", + "highRisk": "Hoog risico", + "mediumRisk": "Gemiddeld risico", + "lowRisk": "Laag risico", + "exportFailed": "Export mislukt", + "summaryShareSubject": "Simplications-resultaat", + "summarySharePdfText": "Simplications-rapport als PDF", + "overview": "Overzicht", + "evaluatedDevices": "Beoordeelde apparaten", + "skippedDevicesHint": "{count} apparaten overgeslagen omdat de vragenlijst niet is voltooid.", + "overallRisk": "Totaal risico", + "generalRecommendations": "Algemene aanbevelingen", + "generalRecommendationsHint": "Deze maatregelen gelden voor je hele smart home, ongeacht afzonderlijke apparaten.", + "fullCatalog": "Volledige actiecatalogus", + "catalogButton": "Open volledige actiecatalogus", + "risk": "Risico", + "note": "Opmerking", + "recommendations": "Aanbevelingen", + "urgent": "Urgent", + "recommended": "Aanbevolen", + "optional": "Optioneel", + "social": "Sociaal", + "technical": "Technisch", + "security": "Beveiliging", + "smartHomePrivacyHeader": "Jouw smart-home-privacy", + "devicesRated": "beoordeelde apparaten", + "howRiskCalculated": "Hoe wordt risico berekend?", + "totalScore": "Totaal", + "catalogSnackBarPrefix": "Catalogus", + "reportExportedAt": "Geëxporteerd op", + "noActionLow": "Alles is in orde - geen acties vereist.", + "noActionMedium": "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een gemiddeld restrisico.", + "noActionHigh": "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een hoog restrisico.", + "overallLow": "Goed gedaan! Je apparaten zijn grotendeels veilig geconfigureerd. Bekijk alsnog de algemene aanbevelingen.", + "overallMedium": "Er is ruimte voor verbetering. Bekijk de aanbevelingen per apparaat.", + "overallHigh": "Meerdere apparaten hebben aanzienlijke privacy-/gegevensbeschermingsrisico’s. Voer maatregelen met hoge prioriteit zo snel mogelijk uit.", + "dontKnowHint": " {count} antwoord{suffix} is gemarkeerd als \"Weet ik niet\" - neem de tijd om de instellingen van je apparaten beter te leren kennen." +} diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb new file mode 100644 index 0000000..5aaac56 --- /dev/null +++ b/lib/l10n/app_pl.arb @@ -0,0 +1,154 @@ +{ + "@@locale": "pl", + "appTitle": "Simplications", + "welcomeTitle": "Simplications\nKontrola prywatności\nSmart Home", + "welcomeDescription": "Dodaj swoje inteligentne urządzenia pokój po pokoju i otrzymaj ocenę prywatności z konkretnymi zaleceniami.", + "stepSelectRooms": "Wybierz pokój", + "stepCaptureDevices": "Dodaj urządzenia", + "stepAnswerQuestions": "Odpowiedz na pytania", + "stepGetRisk": "Uzyskaj profil ryzyka i zalecenia", + "start": "Start", + "resume": "Wznów", + "about": "O aplikacji", + "faq": "FAQ", + "roomSelectionTitle": "Wybierz pokój", + "roomQuestion": "Który pokój chcesz teraz sprawdzić?", + "roomInstruction": "Stuknij pokój, dodaj urządzenia, a potem wróć tutaj, aby wybrać kolejny pokój.", + "results": "Wyniki", + "alreadyEvaluated": "Już oceniono", + "notCompleted": "Nieukończone", + "addRoom": "Dodaj pokój", + "deviceTitlePrefix": "Urządzenia", + "roomCheck": "Przegląd pokoju", + "deviceQuestion": "Jakich inteligentnych urządzeń używasz w tym pokoju?", + "deviceQuestionHint": "Stuknij urządzenie, aby odpowiedzieć na pytania.", + "noKnownDevices": "Brak znanych urządzeń dla tego pokoju. Możesz dodać własne urządzenie.", + "addDevice": "Dodaj\nurządzenie", + "noDevice": "Brak urządzenia", + "nextRoom": "Następny pokój", + "deleteDeviceTitle": "Usunąć urządzenie?", + "deleteDeviceBody": "To niestandardowe urządzenie zostanie usunięte. Wszystkie powiązane instancje również zostaną usunięte.", + "delete": "Usuń", + "cancel": "Anuluj", + "confirm": "Potwierdź", + "noDeviceDialogTitle": "Brak urządzeń w tym pokoju?", + "noDeviceDialogBody": "Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", + "noDeviceDialogBodyWithExisting": "Istniejące wybory urządzeń dla tego pokoju zostaną odrzucone. Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", + "questionnaireTitle": "Pytania", + "connectedDevice": "Podłączone urządzenie", + "done": "Gotowe", + "yes": "Tak", + "no": "Nie", + "dontKnow": "Nie wiem", + "notApplicableForDevice": "To pytanie nie dotyczy mojego urządzenia", + "languageDialogTitle": "Wybierz język", + "currentLanguage": "Bieżący język", + "aboutScreenTitle": "O aplikacji", + "aboutSubtitle": "Projekt badawczy dotyczący prywatności smart home", + "aboutProjectName": "Simplications", + "aboutPartnerTuChemnitz": "Uniwersytet Techniczny w Chemnitz", + "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerVzSachsen": "Centrum Konsumenckie Saksonii", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "websiteOpenFailed": "Nie można otworzyć strony internetowej.", + "deleteAllDataTitle": "Usunąć wszystkie dane?", + "deleteAllDataBody": "Wszystkie zapisane pokoje, urządzenia i odpowiedzi zostaną trwale usunięte. Tej operacji nie można cofnąć.", + "deleteAllDataButton": "Usuń dane", + "allDataDeleted": "Wszystkie zapisane dane zostały usunięte.", + "projectPartners": "Partnerzy projektu", + "coordinationFunding": "Koordynacja i finansowanie", + "coordination": "Koordynacja", + "platformPrivacy": "Plattform Privatheit", + "fundingAgency": "Instytucja finansująca", + "fundingAgencyValue": "Federalne Ministerstwo Badań, Technologii i Przestrzeni Kosmicznej\nGrant 16KIS1868K", + "website": "Strona internetowa", + "dangerZone": "Strefa zagrożenia", + "dangerZoneWarning": "Uwaga: Ta operacja trwale usunie wszystkie zapisane dane aplikacji.", + "faqScreenTitle": "Najczęściej zadawane pytania", + "faqQuestionWhatIs": "Czym jest Simplications?", + "faqAnswerWhatIs": "Simplications to projekt badawczy dotyczący prywatności w inteligentnym domu. Ta aplikacja jest jedną z części projektu i prowadzi Cię pokój po pokoju przez Twoje urządzenia, oferując praktyczne zalecenia na podstawie odpowiedzi.", + "faqQuestionHowWorks": "Jak działa kontrola?", + "faqAnswerHowWorks": "Wybierasz pokój, dodajesz inteligentne urządzenia, odpowiadasz na pytania dotyczące danego urządzenia i otrzymujesz profil ryzyka z priorytetowymi działaniami.", + "faqQuestionNoPolicy": "Dlaczego nie ma polityki prywatności?", + "faqAnswerNoPolicy": "Ponieważ nie zbieramy Twoich danych.", + "faqQuestionDataStored": "Gdzie przechowywane są moje dane?", + "faqAnswerDataStored": "Twoje dane z oceny są przechowywane lokalnie na urządzeniu. W ekranie O aplikacji możesz w każdej chwili usunąć wszystkie zapisane dane.", + "faqQuestionNoDevice": "Co jeśli mojego urządzenia nie ma na liście?", + "faqAnswerNoDevice": "Możesz dodać własne urządzenia i nadal ukończyć kontrolę. Zalecenia będą wtedy oparte na Twojej konfiguracji i odpowiedziach.", + "faqQuestionRiskMeaning": "Co oznacza niskie, średnie i wysokie ryzyko?", + "faqAnswerRiskMeaning": "Poziomy te pokazują, jak bardzo obecna konfiguracja może zwiększać ryzyka dla prywatności. Są to poziomy orientacyjne, a nie certyfikacja prawna lub techniczna.", + "faqQuestionLegalAdvice": "Czy to porada prawna?", + "faqAnswerLegalAdvice": "Nie. Simplications zapewnia praktyczne wskazówki i rekomendacje, ale nie zastępuje porady prawnej ani profesjonalnej konsultacji bezpieczeństwa.", + "faqQuestionCanShare": "Czy mogę udostępnić wyniki?", + "faqAnswerCanShare": "Tak. Na ekranie wyników możesz wyeksportować i udostępnić podsumowanie jako tekst lub PDF.", + "roomDeleteTitle": "Usunąć pokój?", + "roomDeleteBody": "Ten niestandardowy pokój zostanie usunięty. Wszystkie powiązane urządzenia również zostaną usunięte.", + "add": "Dodaj", + "addRoomDialogTitle": "Dodaj nowy pokój", + "roomName": "Nazwa pokoju", + "roomNameHint": "np. Salon, Garaż", + "chooseIcon": "Wybierz ikonę:", + "addDeviceDialogTitle": "Dodaj nowe urządzenie", + "deviceName": "Nazwa urządzenia", + "deviceNameHint": "np. Mój inteligentny głośnik", + "baseRiskLabel": "Bazowy wynik ryzyka (0-100)", + "baseRiskHint": "np. 30 (niskie) do 60 (wysokie)", + "hasCamera": "Ma kamerę?", + "hasMicrophone": "Ma mikrofon?", + "camera": "Kamera", + "microphone": "Mikrofon", + "summaryTitle": "Twój wynik", + "shareResult": "Udostępnij wynik", + "shareAsText": "Udostępnij jako tekst", + "shareAsPdf": "Udostępnij jako PDF", + "restart": "Uruchom ponownie", + "noDevicesCaptured": "Nie dodano żadnych urządzeń.", + "noDevicesHint": "Uruchom ponownie i dodaj urządzenia, aby otrzymać ocenę.", + "highRisk": "Wysokie ryzyko", + "mediumRisk": "Średnie ryzyko", + "lowRisk": "Niskie ryzyko", + "exportFailed": "Eksport nie powiódł się", + "summaryShareSubject": "Wynik Simplications", + "summarySharePdfText": "Raport Simplications jako PDF", + "overview": "Przegląd", + "evaluatedDevices": "Ocenione urządzenia", + "skippedDevicesHint": "Pominięto {count} urządzeń, ponieważ kwestionariusz nie został ukończony.", + "overallRisk": "Ryzyko całkowite", + "generalRecommendations": "Ogólne zalecenia", + "generalRecommendationsHint": "Te środki dotyczą całego Twojego smart home, niezależnie od pojedynczych urządzeń.", + "fullCatalog": "Pełny katalog działań", + "catalogButton": "Otwórz pełny katalog działań", + "risk": "Ryzyko", + "note": "Uwaga", + "recommendations": "Zalecenia", + "urgent": "Pilne", + "recommended": "Zalecane", + "optional": "Opcjonalne", + "social": "Społeczne", + "technical": "Techniczne", + "security": "Bezpieczeństwo", + "smartHomePrivacyHeader": "Prywatność Twojego smart home", + "devicesRated": "ocenionych urządzeń", + "howRiskCalculated": "Jak obliczane jest ryzyko?", + "totalScore": "Łącznie", + "catalogSnackBarPrefix": "Katalog", + "reportExportedAt": "Wyeksportowano", + "noActionLow": "Wszystko w porządku - nie są wymagane żadne działania.", + "noActionMedium": "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje średnie ryzyko resztkowe.", + "noActionHigh": "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje wysokie ryzyko resztkowe.", + "overallLow": "Dobra robota! Twoje urządzenia są w większości skonfigurowane bezpiecznie. Mimo to sprawdź ogólne zalecenia.", + "overallMedium": "Jest miejsce na poprawę. Sprawdź zalecenia dla każdego urządzenia.", + "overallHigh": "Kilka urządzeń ma istotne ryzyka prywatności/ochrony danych. Prosimy jak najszybciej wdrożyć działania o wysokim priorytecie.", + "dontKnowHint": " {count} odpowiedź{suffix} oznaczono jako \"Nie wiem\" - poświęć czas na lepsze poznanie ustawień swoich urządzeń." +} diff --git a/lib/l10n/language_controller.dart b/lib/l10n/language_controller.dart index 446f76b..56debc3 100644 --- a/lib/l10n/language_controller.dart +++ b/lib/l10n/language_controller.dart @@ -5,6 +5,7 @@ import 'package:flutter/widgets.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'app_localizations.dart'; +import 'localization_lookup.dart'; class LanguageController extends ChangeNotifier { static const _storageKey = 'selected_language_code'; @@ -38,6 +39,7 @@ class LanguageController extends ChangeNotifier { final storedCode = prefs.getString(_storageKey); if (storedCode != null && _isSupportedLanguage(storedCode)) { _locale = Locale(storedCode); + LocalizationLookup.activate(_locale); return; } } catch (_) { @@ -49,6 +51,7 @@ class LanguageController extends ChangeNotifier { ? deviceLocale.languageCode : 'de'; _locale = Locale(inferredCode); + LocalizationLookup.activate(_locale); } Future setLocale(Locale locale) async { @@ -60,6 +63,7 @@ class LanguageController extends ChangeNotifier { } _locale = Locale(locale.languageCode); + LocalizationLookup.activate(_locale); notifyListeners(); try { diff --git a/lib/l10n/localization_lookup.dart b/lib/l10n/localization_lookup.dart new file mode 100644 index 0000000..0e17c17 --- /dev/null +++ b/lib/l10n/localization_lookup.dart @@ -0,0 +1,2292 @@ +import 'dart:ui'; + +class LocalizationLookup { + static Locale _activeLocale = const Locale('de'); + + static void activate(Locale locale) { + _activeLocale = locale; + } + + static String get activeLanguageCode => _activeLocale.languageCode; + + static const Map> + valuesByLocale = >{ + 'cs': { + "about": "O aplikaci", + "aboutPartnerHsAnhalt": "Vysoká škola Anhalt", + "aboutPartnerTuChemnitz": "Technická univerzita v Chemnitzu", + "aboutPartnerVzSachsen": "Spotřebitelské centrum Sasko", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "O aplikaci", + "aboutSubtitle": + "Výzkumný projekt zaměřený na soukromí chytré domácnosti", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Přidat", + "addDevice": "Přidat\nzařízení", + "addDeviceDialogTitle": "Přidat nové zařízení", + "addRoom": "Přidat místnost", + "addRoomDialogTitle": "Přidat novou místnost", + "allDataDeleted": "Všechna uložená data byla smazána.", + "alreadyEvaluated": "Již vyhodnoceno", + "appTitle": "Simplications", + "baseRiskHint": "např. 30 (nízké) až 60 (vysoké)", + "baseRiskLabel": "Základní skóre rizika (0-100)", + "camera": "Kamera", + "cancel": "Zrušit", + "catalogButton": "Otevřít úplný katalog opatření", + "catalogSnackBarPrefix": "Katalog", + "chooseIcon": "Vyberte ikonu:", + "confirm": "Potvrdit", + "connectedDevice": "Připojené zařízení", + "coordination": "Koordinace", + "coordinationFunding": "Koordinace a financování", + "currentLanguage": "Aktuální jazyk", + "dangerZone": "Nebezpečná zóna", + "dangerZoneWarning": + "Pozor: Tato akce trvale odstraní všechna uložená data aplikace.", + "delete": "Smazat", + "deleteAllDataBody": + "Všechny zaznamenané místnosti, zařízení a odpovědi budou trvale smazány. Tuto akci nelze vrátit zpět.", + "deleteAllDataButton": "Smazat data", + "deleteAllDataTitle": "Smazat všechna data?", + "deleteDeviceBody": + "Toto vlastní zařízení bude smazáno. Všechny navázané instance budou také odstraněny.", + "deleteDeviceTitle": "Smazat zařízení?", + "deviceName": "Název zařízení", + "deviceNameHint": "např. Můj chytrý reproduktor", + "deviceQuestion": "Která chytrá zařízení používáte v této místnosti?", + "deviceQuestionHint": "Klepněte na zařízení a odpovězte na otázky.", + "deviceTitlePrefix": "Zařízení", + "devicesRated": "hodnocených zařízení", + "done": "Hotovo", + "dontKnow": "Nevím", + "dontKnowHint": + " {count} odpověď{suffix} byla označena jako \"Nevím\" - věnujte čas lepšímu poznání nastavení svých zařízení.", + "evaluatedDevices": "Vyhodnocená zařízení", + "exportFailed": "Export se nezdařil", + "faq": "FAQ", + "faqAnswerCanShare": + "Ano. Na obrazovce výsledků můžete přehled exportovat a sdílet jako text nebo PDF.", + "faqAnswerDataStored": + "Vaše hodnocení je uloženo lokálně ve vašem zařízení. V obrazovce O aplikaci můžete všechna uložená data kdykoli smazat.", + "faqAnswerHowWorks": + "Vyberete místnost, přidáte chytrá zařízení, odpovíte na otázky pro konkrétní zařízení a získáte profil rizik s prioritizovanými kroky.", + "faqAnswerLegalAdvice": + "Ne. Simplications poskytuje praktickou orientaci a doporučení, nenahrazuje však právní nebo profesionální bezpečnostní poradenství.", + "faqAnswerNoDevice": + "Můžete přidat vlastní zařízení a kontrolu dokončit. Doporučení pak vycházejí z vaší konfigurace a odpovědí.", + "faqAnswerNoPolicy": "Protože neshromažďujeme vaše data.", + "faqAnswerRiskMeaning": + "Tyto úrovně ukazují, jak silně může vaše současné nastavení zvyšovat rizika pro soukromí. Jde o orientační úrovně, ne o právní nebo technickou certifikaci.", + "faqAnswerWhatIs": + "Simplications je výzkumný projekt zaměřený na soukromí v chytré domácnosti. Tato aplikace je jednou z částí projektu a provede vás místnost po místnosti vašimi zařízeními s praktickými doporučeními na základě vašich odpovědí.", + "faqQuestionCanShare": "Mohu sdílet své výsledky?", + "faqQuestionDataStored": "Kde jsou moje data uložena?", + "faqQuestionHowWorks": "Jak kontrola funguje?", + "faqQuestionLegalAdvice": "Jde o právní poradenství?", + "faqQuestionNoDevice": "Co když moje zařízení není v seznamu?", + "faqQuestionNoPolicy": "Proč tu není zásada ochrany osobních údajů?", + "faqQuestionRiskMeaning": "Co znamená nízké, střední a vysoké riziko?", + "faqQuestionWhatIs": "Co je Simplications?", + "faqScreenTitle": "Často kladené otázky", + "fullCatalog": "Úplný katalog opatření", + "fundingAgency": "Poskytovatel financování", + "fundingAgencyValue": + "Spolkové ministerstvo pro výzkum, technologie a vesmír\nFKZ 16KIS1868K", + "generalRecommendations": "Obecná doporučení", + "generalRecommendationsHint": + "Tato opatření platí pro celou vaši chytrou domácnost bez ohledu na jednotlivá zařízení.", + "hasCamera": "Má kameru?", + "hasMicrophone": "Má mikrofon?", + "highRisk": "Vysoké riziko", + "howRiskCalculated": "Jak se riziko počítá?", + "languageDialogTitle": "Vyberte jazyk", + "lowRisk": "Nízké riziko", + "mediumRisk": "Střední riziko", + "microphone": "Mikrofon", + "nextRoom": "Další místnost", + "no": "Ne", + "noActionHigh": + "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává vysoké zbytkové riziko.", + "noActionLow": "Vše je v pořádku - nejsou nutná žádná opatření.", + "noActionMedium": + "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává střední zbytkové riziko.", + "noDevice": "Žádné zařízení", + "noDeviceDialogBody": + "Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", + "noDeviceDialogBodyWithExisting": + "Existující výběry zařízení pro tuto místnost budou zahozeny. Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", + "noDeviceDialogTitle": "V této místnosti nejsou zařízení?", + "noDevicesCaptured": "Nebyla zaznamenána žádná zařízení.", + "noDevicesHint": + "Spusťte to znovu a přidejte zařízení, abyste získali hodnocení.", + "noKnownDevices": + "Pro tuto místnost nejsou známá žádná zařízení. Můžete přidat vlastní zařízení.", + "notApplicableForDevice": "Tato otázka se na moje zařízení nevztahuje", + "notCompleted": "Nedokončeno", + "note": "Poznámka", + "optional": "Volitelné", + "overallHigh": + "Několik zařízení má významná rizika pro soukromí/ochranu dat. Prosím co nejdříve zaveďte opatření s vysokou prioritou.", + "overallLow": + "Skvělá práce! Vaše zařízení jsou většinou bezpečně nastavena. Přesto si projděte obecná doporučení.", + "overallMedium": + "Je zde prostor ke zlepšení. Projděte si doporučení pro jednotlivá zařízení.", + "overallRisk": "Celkové riziko", + "overview": "Přehled", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projektoví partneři", + "questionnaireTitle": "Otázky", + "recommendations": "Doporučení", + "recommended": "Doporučeno", + "reportExportedAt": "Exportováno", + "restart": "Začít znovu", + "results": "Výsledky", + "resume": "Pokračovat", + "risk": "Riziko", + "roomCheck": "Kontrola místnosti", + "roomDeleteBody": + "Tato vlastní místnost bude smazána. Všechna propojená zařízení budou také odstraněna.", + "roomDeleteTitle": "Smazat místnost?", + "roomInstruction": + "Klepněte na místnost, zaznamenejte v ní zařízení a vraťte se sem, kde vyberete další místnost.", + "roomName": "Název místnosti", + "roomNameHint": "např. Obývací pokoj, Garáž", + "roomQuestion": "Kterou místnost chcete nyní zkontrolovat?", + "roomSelectionTitle": "Výběr místnosti", + "security": "Zabezpečení", + "shareAsPdf": "Sdílet jako PDF", + "shareAsText": "Sdílet jako text", + "shareResult": "Sdílet výsledek", + "skippedDevicesHint": + "{count} zařízení přeskočeno, protože dotazník nebyl dokončen.", + "smartHomePrivacyHeader": "Vaše soukromí chytré domácnosti", + "social": "Sociální", + "start": "Začít", + "stepAnswerQuestions": "Odpovězte na otázky", + "stepCaptureDevices": "Zaznamenejte zařízení", + "stepGetRisk": "Získejte rizikový profil a doporučení", + "stepSelectRooms": "Vyberte místnost", + "summarySharePdfText": "Zpráva Simplications jako PDF", + "summaryShareSubject": "Výsledek Simplications", + "summaryTitle": "Váš výsledek", + "technical": "Technické", + "totalScore": "Celkem", + "urgent": "Naléhavé", + "website": "Web", + "websiteOpenFailed": "Web se nepodařilo otevřít.", + "welcomeDescription": + "Zaznamenejte svá chytrá zařízení místnost po místnosti a získejte hodnocení soukromí s konkrétními doporučeními.", + "welcomeTitle": "Simplications\nKontrola soukromí\nchytré domácnosti", + "yes": "Ano", + }, + 'da': { + "about": "Om", + "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerTuChemnitz": "Teknisk Universitet i Chemnitz", + "aboutPartnerVzSachsen": "Forbrugercenter Sachsen", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "Om appen", + "aboutSubtitle": "Forskningsprojekt om privatliv i smarte hjem", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Tilføj", + "addDevice": "Tilføj\nenhed", + "addDeviceDialogTitle": "Tilføj ny enhed", + "addRoom": "Tilføj rum", + "addRoomDialogTitle": "Tilføj nyt rum", + "allDataDeleted": "Alle gemte data er blevet slettet.", + "alreadyEvaluated": "Allerede vurderet", + "appTitle": "Simplications", + "baseRiskHint": "f.eks. 30 (lav) til 60 (høj)", + "baseRiskLabel": "Basisrisikoscore (0-100)", + "camera": "Kamera", + "cancel": "Annuller", + "catalogButton": "Åbn fuldt handlingskatalog", + "catalogSnackBarPrefix": "Katalog", + "chooseIcon": "Vælg ikon:", + "confirm": "Bekræft", + "connectedDevice": "Tilsluttet enhed", + "coordination": "Koordination", + "coordinationFunding": "Koordination og finansiering", + "currentLanguage": "Nuværende sprog", + "dangerZone": "Farezone", + "dangerZoneWarning": + "Advarsel: Denne handling fjerner alle gemte app-data permanent.", + "delete": "Slet", + "deleteAllDataBody": + "Alle registrerede rum, enheder og svar slettes permanent. Handlingen kan ikke fortrydes.", + "deleteAllDataButton": "Slet data", + "deleteAllDataTitle": "Slet alle data?", + "deleteDeviceBody": + "Denne brugerdefinerede enhed slettes. Alle tilknyttede instanser fjernes også.", + "deleteDeviceTitle": "Slet enhed?", + "deviceName": "Enhedsnavn", + "deviceNameHint": "f.eks. Min smarte højttaler", + "deviceQuestion": "Hvilke smarte enheder bruger du i dette rum?", + "deviceQuestionHint": "Tryk på en enhed for at besvare spørgsmålene.", + "deviceTitlePrefix": "Enheder", + "devicesRated": "vurderede enheder", + "done": "Færdig", + "dontKnow": "Ved ikke", + "dontKnowHint": + " {count} svar{suffix} er markeret som \"Ved ikke\" - brug tid på at lære dine enhedsindstillinger bedre at kende.", + "evaluatedDevices": "Vurderede enheder", + "exportFailed": "Eksport mislykkedes", + "faq": "FAQ", + "faqAnswerCanShare": + "Ja. På resultatskærmen kan du eksportere og dele din opsummering som tekst eller PDF.", + "faqAnswerDataStored": + "Dine vurderingsdata gemmes lokalt på din enhed. På Om-skærmen kan du til enhver tid slette alle gemte data.", + "faqAnswerHowWorks": + "Du vælger et rum, tilføjer dine smarte enheder, besvarer enhedsspecifikke spørgsmål og får en risikoprofil med prioriterede handlinger.", + "faqAnswerLegalAdvice": + "Nej. Simplications giver praktisk vejledning og anbefalinger, men erstatter ikke juridisk rådgivning eller professionel sikkerhedsrådgivning.", + "faqAnswerNoDevice": + "Du kan tilføje brugerdefinerede enheder og stadig gennemføre tjekket. Anbefalingerne bygger så på din opsætning og dine svar.", + "faqAnswerNoPolicy": "Fordi vi ikke indsamler dine data.", + "faqAnswerRiskMeaning": + "Disse niveauer viser, hvor meget din nuværende konfiguration kan øge privatlivsrisici. De er vejledende niveauer, ikke juridisk eller teknisk certificering.", + "faqAnswerWhatIs": + "Simplications er et forskningsprojekt om privatliv i smarte hjem. Denne app er en del af projektet og guider dig rum for rum gennem dine enheder med praktiske anbefalinger baseret på dine svar.", + "faqQuestionCanShare": "Kan jeg dele mine resultater?", + "faqQuestionDataStored": "Hvor gemmes mine data?", + "faqQuestionHowWorks": "Hvordan fungerer tjekket?", + "faqQuestionLegalAdvice": "Er dette juridisk rådgivning?", + "faqQuestionNoDevice": "Hvad hvis min enhed ikke er på listen?", + "faqQuestionNoPolicy": "Hvorfor er der ingen privatlivspolitik?", + "faqQuestionRiskMeaning": "Hvad betyder lav, mellem og høj risiko?", + "faqQuestionWhatIs": "Hvad er Simplications?", + "faqScreenTitle": "Ofte stillede spørgsmål", + "fullCatalog": "Fuldt handlingskatalog", + "fundingAgency": "Finansieringsorgan", + "fundingAgencyValue": + "Tysk forbundsministerium for forskning, teknologi og rumfart\nBevilling 16KIS1868K", + "generalRecommendations": "Generelle anbefalinger", + "generalRecommendationsHint": + "Disse tiltag gælder for hele dit smarte hjem uanset individuelle enheder.", + "hasCamera": "Har kamera?", + "hasMicrophone": "Har mikrofon?", + "highRisk": "Høj risiko", + "howRiskCalculated": "Hvordan beregnes risiko?", + "languageDialogTitle": "Vælg sprog", + "lowRisk": "Lav risiko", + "mediumRisk": "Middel risiko", + "microphone": "Mikrofon", + "nextRoom": "Næste rum", + "no": "Nej", + "noActionHigh": + "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en høj rest-risiko.", + "noActionLow": "Alt er i orden - ingen handlinger nødvendige.", + "noActionMedium": + "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en middel rest-risiko.", + "noDevice": "Ingen enhed", + "noDeviceDialogBody": + "Dette rum afsluttes uden enheder og påvirker ikke scoren.", + "noDeviceDialogBodyWithExisting": + "Eksisterende enhedsvalg for dette rum kasseres. Dette rum afsluttes uden enheder og påvirker ikke scoren.", + "noDeviceDialogTitle": "Ingen enheder i dette rum?", + "noDevicesCaptured": "Ingen enheder registreret.", + "noDevicesHint": "Start forfra og tilføj enheder for at få en vurdering.", + "noKnownDevices": + "Ingen kendte enheder for dette rum. Du kan tilføje din egen enhed.", + "notApplicableForDevice": "Dette spørgsmål gælder ikke for min enhed", + "notCompleted": "Ikke afsluttet", + "note": "Bemærkning", + "optional": "Valgfri", + "overallHigh": + "Flere enheder har betydelige privatlivs-/databeskyttelsesrisici. Implementér venligst højprioriterede tiltag hurtigt.", + "overallLow": + "Godt klaret! Dine enheder er overvejende sikkert konfigureret. Gennemgå alligevel de generelle anbefalinger.", + "overallMedium": + "Der er plads til forbedringer. Gennemgå anbefalingerne for hver enhed.", + "overallRisk": "Samlet risiko", + "overview": "Oversigt", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projektpartnere", + "questionnaireTitle": "Spørgsmål", + "recommendations": "Anbefalinger", + "recommended": "Anbefalet", + "reportExportedAt": "Eksporteret den", + "restart": "Start forfra", + "results": "Resultater", + "resume": "Fortsæt", + "risk": "Risiko", + "roomCheck": "Rumtjek", + "roomDeleteBody": + "Dette brugerdefinerede rum bliver slettet. Alle tilknyttede enheder bliver også fjernet.", + "roomDeleteTitle": "Slet rum?", + "roomInstruction": + "Tryk på et rum, registrer enhederne dér, og kom tilbage hertil for at vælge næste rum.", + "roomName": "Rumnavn", + "roomNameHint": "f.eks. Stue, Garage", + "roomQuestion": "Hvilket rum vil du tjekke nu?", + "roomSelectionTitle": "Vælg rum", + "security": "Sikkerhed", + "shareAsPdf": "Del som PDF", + "shareAsText": "Del som tekst", + "shareResult": "Del resultat", + "skippedDevicesHint": + "{count} enheder er sprunget over, fordi spørgeskemaet ikke er afsluttet.", + "smartHomePrivacyHeader": "Dit smart-home-privatliv", + "social": "Social", + "start": "Start", + "stepAnswerQuestions": "Besvar spørgsmål", + "stepCaptureDevices": "Registrer enheder", + "stepGetRisk": "Få risikoprofil og anbefalinger", + "stepSelectRooms": "Vælg ét rum", + "summarySharePdfText": "Simplications-rapport som PDF", + "summaryShareSubject": "Simplications-resultat", + "summaryTitle": "Dit resultat", + "technical": "Teknisk", + "totalScore": "I alt", + "urgent": "Haster", + "website": "Websted", + "websiteOpenFailed": "Kunne ikke åbne webstedet.", + "welcomeDescription": + "Registrer dine smarte enheder rum for rum, og få en privatlivsvurdering med konkrete anbefalinger.", + "welcomeTitle": "Simplications\nSmart Home\nprivatlivstjek", + "yes": "Ja", + }, + 'de': { + "a_access_logging_desc": + "Aktivieren Sie Protokollierung und Benachrichtigungen für Schlossöffnungen, damit unbefugte Zugriffe auffallen.", + "a_access_logging_title": "Zugriffsprotokoll aktivieren", + "a_account_required_desc": + "Falls kein kontoloser Betrieb möglich ist, verwenden Sie ein separates Konto mit minimalen Profildaten und deaktivieren Sie personalisierte Dienste.", + "a_account_required_title": "Kontopflicht datenschutzarm umsetzen", + "a_camera_consent_desc": + "Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.", + "a_camera_consent_title": "Kameraausrichtung mit Bewohnern abstimmen", + "a_child_data_limits_desc": + "Deaktivieren Sie optionale Profildaten und erfassen Sie nur die für die Kernfunktion erforderlichen Kinderdaten.", + "a_child_data_limits_title": "Datenerfassung minimieren", + "a_cloud_required_desc": + "Aktivieren Sie lokale Navigation oder Offline-Modus, falls verfügbar. Wenn nicht verfügbar, bewerten Sie einen Wechsel zu einem datenschutzfreundlicheren Modell.", + "a_cloud_required_title": "Cloud-Abhängigkeit reduzieren", + "a_data_collection_desc": + "Deaktivieren Sie in der Thermostat-App die Übertragung von Temperaturhistorien an den Hersteller und verkürzen Sie die Speicherdauer.", + "a_data_collection_title": "Historien-Upload deaktivieren", + "a_dont_know_desc": + "Mindestens eine Frage wurde mit \"Weiß ich nicht\" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.", + "a_dont_know_title": "Geräteeinstellungen besser kennenlernen", + "a_expert_access_control_granular_desc": + "Nutzen Sie getrennte Konten statt Shared-Logins und vergeben Sie nur die minimal nötigen Rechte.", + "a_expert_access_control_granular_title": + "Granulare Rollen und Konten einführen", + "a_expert_access_revocation_desc": + "Stellen Sie sicher, dass digitale Schlüssel einzeln und sofort widerrufen werden können, z. B. bei Geräteverlust.", + "a_expert_access_revocation_title": + "Schnellen Zugriffswiderruf einrichten", + "a_expert_bystander_transparency_desc": + "Sorgen Sie für sichtbare Hinweise, Aufnahmeanzeigen und klare Information für betroffene Personen im Umfeld.", + "a_expert_bystander_transparency_title": + "Transparenzhinweise für Umfeld ergänzen", + "a_expert_child_data_protection_desc": + "Aktivieren Sie kindgerechte Profile, minimieren Sie Datenerhebung und deaktivieren Sie Profilbildung/Weitergabe.", + "a_expert_child_data_protection_title": "Kinderdatenschutz verschärfen", + "a_expert_data_retention_duration_desc": + "Setzen Sie klare kurze Aufbewahrungsfristen in den Einstellungen und löschen Sie Altbestände regelmäßig.", + "a_expert_data_retention_duration_title": "Speicherfristen festlegen", + "a_expert_data_sale_disabled_desc": + "Aktivieren Sie vorhandene \"Do not sell\"-Optionen bzw. widersprechen Sie der Datenweitergabe für Vermarktung.", + "a_expert_data_sale_disabled_title": "Datenverkauf widersprechen", + "a_expert_offline_functionality_desc": + "Aktivieren Sie lokale Betriebsmodi und minimieren Sie Cloud-Pflichtfunktionen, sofern das Gerät dies erlaubt.", + "a_expert_offline_functionality_title": + "Offline-Funktionalität priorisieren", + "a_expert_sensitive_inference_controls_desc": + "Deaktivieren Sie Funktionen, die sensible Gesundheits- oder Verhaltensprofile ableiten, sofern diese nicht zwingend benötigt werden.", + "a_expert_sensitive_inference_controls_title": + "Inferenzfunktionen einschränken", + "a_expert_third_party_sharing_limited_desc": + "Deaktivieren Sie Partner-, Werbe- und Analyseweitergaben in Datenschutz- und Kontoeinstellungen.", + "a_expert_third_party_sharing_limited_title": "Drittweitergabe begrenzen", + "a_expert_update_support_window_desc": + "Prüfen Sie die offizielle Update-Policy des Herstellers und planen Sie bei fehlender Zusage einen Gerätewechsel ein.", + "a_expert_update_support_window_title": "Update-Zusage verifizieren", + "a_expert_vulnerability_process_desc": + "Bevorzugen Sie Hersteller mit klarer Security-Kontaktstelle und Responsible-Disclosure-Prozess.", + "a_expert_vulnerability_process_title": + "Hersteller-Sicherheitsprozess prüfen", + "a_family_access_desc": + "Richten Sie getrennte Rollen/Konten ein, damit nur berechtigte Personen Änderungen an der Heizung vornehmen können.", + "a_family_access_title": "Zugriffsrechte für Haushaltsmitglieder trennen", + "a_health_sharing_desc": + "Entziehen Sie unnötigen Drittanbieter-Apps den Zugriff auf Gesundheitsdaten in App- und Kontoeinstellungen.", + "a_health_sharing_title": "Gesundheitsdaten-Freigaben einschränken", + "a_informed_desc": + "Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.", + "a_informed_title": "Haushaltsmitglieder informieren", + "a_local_control_desc": + "Nutzen Sie lokale Szenen/Zeitpläne statt Cloud-Automatisierungen, sofern verfügbar.", + "a_local_control_title": "Lokale Automatisierungen aktivieren", + "a_local_mode_desc": + "Nutzen Sie das Gerät primär über lokale Quellen (z. B. HDMI), um Datenübertragung an den Hersteller zu reduzieren.", + "a_local_mode_title": "Offline-Nutzung bevorzugen", + "a_location_tracking_desc": + "Deaktivieren Sie Standortverfolgung außerhalb aktiver Nutzung oder erlauben Sie sie nur beim Verwenden der App.", + "a_location_tracking_title": "Standortfreigabe reduzieren", + "a_map_privacy_desc": + "Stellen Sie die Speicherung auf lokal um und deaktivieren Sie Cloud-Backups von Grundrissen, falls diese Option verfügbar ist.", + "a_map_privacy_title": "Cloud-Grundrissspeicherung deaktivieren", + "a_mic_active_desc": + "Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.", + "a_mic_active_title": "Mikrofon bei Nichtnutzung deaktivieren", + "a_motion_detection_desc": + "Deaktivieren Sie Bewegungserkennung, wenn Personen zu Hause sind, oder setzen Sie einen Zeitplan, der sie nur in Abwesenheitszeiten aktiviert.", + "a_motion_detection_title": + "Bewegungserkennung bei Anwesenheit deaktivieren", + "a_network_desc": + "Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.", + "a_network_title": "Separates IoT-WLAN einrichten", + "a_offline_control_desc": + "Konfigurieren Sie lokale Zeitpläne und eine Bedienung ohne Cloud-Abhängigkeit, falls das Gerät dies unterstützt.", + "a_offline_control_title": "Lokale Steuerung einrichten", + "a_offline_fallback_desc": + "Prüfen Sie lokale Schalter/Taster und richten Sie Fallback-Bedienung ein, damit das Gerät auch ohne Internet nutzbar bleibt.", + "a_offline_fallback_title": "Offline-Notbetrieb sicherstellen", + "a_offline_unlock_desc": + "Richten Sie einen physischen Schlüssel oder einen Notfall-Code ein und testen Sie den Zugriff bei Ausfall der Internetverbindung.", + "a_offline_unlock_title": "Offline-Zugang absichern", + "a_parental_control_desc": + "Aktivieren Sie Elternkontrolle mit PIN und beschränken Sie Kontakte, Funktionen und Freigaben auf das Notwendige.", + "a_parental_control_title": "Elternkontrolle einrichten", + "a_password_desc": + "Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.", + "a_password_title": "Standard-Passwort ändern", + "a_permissions_desc": + "Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.", + "a_permissions_title": "App-Berechtigungen einschränken", + "a_recording_disable_desc": + "Schalten Sie Aufnahmefunktionen standardmäßig aus und aktivieren Sie sie nur bei konkretem Bedarf kurzzeitig.", + "a_recording_disable_title": "Audio/Video-Aufnahmen deaktivieren", + "a_sensor_data_deletion_desc": + "Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.", + "a_sensor_data_deletion_title": "Alte Messwerte löschen", + "a_sensor_frequency_desc": + "Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.", + "a_sensor_frequency_title": "Messintervall reduzieren", + "a_sensor_granularity_desc": + "Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.", + "a_sensor_granularity_title": "Daten weniger detailliert anzeigen", + "a_sensor_local_desc": + "Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.", + "a_sensor_local_title": "Lokale Verarbeitung bevorzugen", + "a_sharing_restrictions_desc": + "Entfernen Sie in der App alle unnötigen Freigaben und erlauben Sie Live-View/Aufnahmen nur für benötigte Konten.", + "a_sharing_restrictions_title": "Kamera-Zugriffe einschränken", + "a_skills_permissions_desc": + "Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.", + "a_skills_permissions_title": "Skills/Fähigkeiten überprüfen", + "a_tracking_disabled_desc": + "Deaktivieren Sie in den Datenschutzoptionen Tracking, personalisierte Werbung und optionale Telemetrie.", + "a_tracking_disabled_title": "Tracking und Werbung deaktivieren", + "a_two_factor_desc": + "BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.", + "a_two_factor_title": "Zwei-Faktor-Authentifizierung aktivieren", + "a_updates_desc": + "Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.", + "a_updates_title": "Automatische Updates aktivieren", + "a_usage_tracking_desc": + "Schalten Sie in den App-Einstellungen Analyse-, Telemetrie- und Nutzungsdatenerfassung aus.", + "a_usage_tracking_title": "Nutzungs-Tracking deaktivieren", + "a_video_encryption_desc": + "Aktivieren Sie in den Kamera-Einstellungen eine Ende-zu-Ende-verschlüsselte Übertragung für Livebild und Aufnahmen.", + "a_video_encryption_title": "Ende-zu-Ende-Verschlüsselung aktivieren", + "a_video_storage_desc": + "Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.", + "a_video_storage_title": "Aufnahmen lokal speichern", + "a_vision_data_desc": + "Deaktivieren Sie Upload/Speicherung von Kamerabildern und nutzen Sie, wenn möglich, ausschließlich lokale Navigationsverarbeitung.", + "a_vision_data_title": "Kameradaten nur lokal verarbeiten", + "a_voice_history_desc": + "BSI-Empfehlung: Löschen Sie Sprachaufzeichnungen regelmäßig und deaktivieren Sie die Speicherung von Sprachverlauf, falls die Option verfügbar ist.", + "a_voice_history_title": "Sprachaufzeichnungen löschen", + "a_voice_local_desc": + "Aktivieren Sie lokale Sprachverarbeitung, falls verfügbar. Falls nicht verfügbar, minimieren Sie Cloud-Speicherung von Sprachdaten.", + "a_voice_local_title": "Lokale Sprachverarbeitung aktivieren", + "about": "Über", + "aboutPartnerHsAnhalt": "Hochschule Anhalt", + "aboutPartnerTuChemnitz": "Technische Universität Chemnitz", + "aboutPartnerVzSachsen": "Verbraucherzentrale Sachsen e.V.", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "Über die App", + "aboutSubtitle": "Forschungsprojekt Smart Home Privatsphäre", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Hinzufügen", + "addDevice": "Gerät\nhinzufügen", + "addDeviceDialogTitle": "Neues Gerät hinzufügen", + "addRoom": "Raum hinzufügen", + "addRoomDialogTitle": "Neuen Raum hinzufügen", + "allDataDeleted": "Alle gespeicherten Daten wurden gelöscht.", + "alreadyEvaluated": "Bereits ausgewertet", + "appTitle": "Simplications", + "baseRiskHint": "z. B. 30 (niedrig) bis 60 (hoch)", + "baseRiskLabel": "Basis-Risiko-Punktzahl (0-100)", + "camera": "Kamera", + "cancel": "Abbrechen", + "catalogButton": "Zum vollständigen Maßnahmenkatalog", + "catalogSnackBarPrefix": "Maßnahmenkatalog", + "chooseIcon": "Symbol wählen:", + "confirm": "Bestätigen", + "connectedDevice": "Verbundenes Gerät", + "coordination": "Koordination", + "coordinationFunding": "Koordination & Förderung", + "currentLanguage": "Aktuelle Sprache", + "dangerZone": "Gefahrenbereich", + "dangerZoneWarning": + "Achtung: Diese Aktion entfernt alle gespeicherten App-Daten dauerhaft.", + "delete": "Löschen", + "deleteAllDataBody": + "Alle erfassten Räume, Geräte und Antworten werden dauerhaft gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", + "deleteAllDataButton": "Daten löschen", + "deleteAllDataTitle": "Alle Daten löschen?", + "deleteDeviceBody": + "Dieses benutzerdefinierte Gerät wird gelöscht. Alle verknüpften Instanzen werden auch entfernt.", + "deleteDeviceTitle": "Gerät löschen?", + "deviceName": "Gerätename", + "deviceNameHint": "z. B. Mein Smart Speaker", + "deviceQuestion": "Welche smarten Geräte nutzen Sie in diesem Raum?", + "deviceQuestionHint": + "Tippen Sie auf ein Gerät, um die Fragen dafür zu beantworten.", + "deviceTitlePrefix": "Geräte", + "device_baby_monitor": "Babymonitor / Babykamera", + "device_doorbell_camera": "Smarte Türklingel mit Kamera", + "device_fitness_tracker": "Fitness-Tracker / Smartwatch", + "device_humidity_sensor": "Feuchtigkeitssensor", + "device_indoor_camera": "Smarte Innenkamera", + "device_light_sensor": "Lichtsensor", + "device_outdoor_camera": "Smarte Außenkamera", + "device_robot_vacuum": "Saugroboter", + "device_simple_sensor": + "Einfacher Sensor (z. B. Bewegungs- oder Türsensor)", + "device_smart_blind": "Smarte Jalousie / Rolllade", + "device_smart_coffee": "Smarte Kaffeemaschine", + "device_smart_display": "Smart Display (z. B. Nest Hub)", + "device_smart_fridge": "Smarter Kühlschrank", + "device_smart_hub": "Smart-Home-Hub (z. B. Homey, Home Assistant)", + "device_smart_irrigation": "Smarte Bewässerungsanlage", + "device_smart_light": "Smarte Beleuchtung", + "device_smart_lock": "Smartes Türschloss", + "device_smart_meter": "Intelligenter Stromzähler / Smart Meter", + "device_smart_oven": "Smarter Backofen / Herd", + "device_smart_plug": "Smarte Steckdose", + "device_smart_printer": "Smarter Drucker", + "device_smart_router": "Smart Router / Mesh-System", + "device_smart_scale": "Smarte Waage", + "device_smart_speaker": "Smart Speaker / Sprachassistent", + "device_smart_thermostat": "Smarter Thermostat / Heizungssteuerung", + "device_smart_toy": "Smartes Spielzeug", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smarte Waschmaschine / Trockner", + "device_temperature_sensor": "Temperatursensor", + "devicesRated": "bewertete Geräte", + "done": "Fertig", + "dontKnow": "Weiß ich nicht", + "dontKnowHint": + " Es wurden {count} Antwort{suffix} mit \"Weiß ich nicht\" gegeben - nehmen Sie sich Zeit, die Einstellungen Ihrer Geräte besser kennenzulernen.", + "evaluatedDevices": "Bewertete Geräte", + "expertModeQuestionnaireHint": + "Expertenmodus: Diese Fragen vertiefen Datenpraktiken und Governance (u. a. Speicherfristen, Zugriffskontrolle, Drittweitergabe) nach Ansätzen aus CMU IoT Label und Unboxing.IoT.Privacy.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourceUnboxingLabel": + "Unboxing.IoT.Privacy (Community-Plattform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeSourcesHint": + "Methodisch angelehnt an folgende Forschungsprojekte:", + "expertModeTitle": "Expertenmodus", + "expertModeToggleHint": + "Gleicher Ablauf, aber deutlich detailliertere Fragen pro Gerät (z. B. Aufbewahrungsdauer, Zugriffskontrolle, Drittweitergabe).", + "expertModeToggleLabel": "Detaillierten Expertenmodus aktivieren", + "exportFailed": "Export fehlgeschlagen", + "faq": "FAQ", + "faqAnswerCanShare": + "Ja. Im Ergebnisbildschirm können Sie Ihre Zusammenfassung direkt als Text oder PDF exportieren und teilen.", + "faqAnswerDataStored": + "Ihre Eingaben werden lokal auf Ihrem Gerät gespeichert. In der Über-Seite können Sie alle gespeicherten Daten jederzeit löschen.", + "faqAnswerHowWorks": + "Sie wählen einen Raum, erfassen Ihre smarten Geräte, beantworten gerätespezifische Fragen und erhalten ein Risikoprofil mit priorisierten Maßnahmen.", + "faqAnswerLegalAdvice": + "Nein. Simplications bietet praktische Orientierung und Empfehlungen, ersetzt aber keine rechtliche oder professionelle Sicherheitsberatung.", + "faqAnswerNoDevice": + "Sie können eigene Geräte hinzufügen und den Check trotzdem durchführen. Die Empfehlungen basieren dann auf Ihrer Konfiguration und Ihren Antworten.", + "faqAnswerNoPolicy": "Weil wir keine Daten von Ihnen erheben.", + "faqAnswerRiskMeaning": + "Diese Stufen zeigen, wie stark Ihre aktuelle Konfiguration Privatsphäre-Risiken begünstigen kann. Sie sind eine Orientierung und keine rechtliche oder technische Zertifizierung.", + "faqAnswerWhatIs": + "Simplications ist ein Forschungsprojekt zum Smart-Home-Datenschutz. Diese App ist ein Teil des Projekts und führt Sie Raum für Raum durch Ihre Geräte mit praktischen Empfehlungen auf Basis Ihrer Antworten.", + "faqQuestionCanShare": "Kann ich mein Ergebnis teilen?", + "faqQuestionDataStored": "Wo werden meine Daten gespeichert?", + "faqQuestionHowWorks": "Wie funktioniert der Check?", + "faqQuestionLegalAdvice": "Ist das eine Rechtsberatung?", + "faqQuestionNoDevice": "Was ist, wenn mein Gerät nicht in der Liste ist?", + "faqQuestionNoPolicy": "Warum gibt es keine Datenschutzerklärung?", + "faqQuestionRiskMeaning": + "Was bedeuten niedriges, mittleres und hohes Risiko?", + "faqQuestionWhatIs": "Was ist Simplications?", + "faqScreenTitle": "Häufige Fragen", + "fullCatalog": "Vollständiger Maßnahmenkatalog", + "fundingAgency": "Fördermittelgeber", + "fundingAgencyValue": + "Bundesministerium für Forschung, Technologie und Raumfahrt\nFKZ 16KIS1868K", + "gen_rec_0": + "Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).", + "gen_rec_1": + "Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.", + "gen_rec_2": + "Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.", + "gen_rec_3": + "Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.", + "gen_rec_4": + "Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.", + "gen_rec_5": + "Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.", + "gen_rec_6": + "Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein.", + "generalRecommendations": "Allgemeine Empfehlungen", + "generalRecommendationsHint": + "Diese Maßnahmen gelten unabhängig von einzelnen Geräten für Ihr gesamtes Smart Home.", + "hasCamera": "Hat Kamera?", + "hasMicrophone": "Hat Mikrofon?", + "highRisk": "Hohes Risiko", + "howRiskCalculated": "Wie wird das Risiko berechnet?", + "languageDialogTitle": "Sprache wählen", + "lowRisk": "Niedriges Risiko", + "mediumRisk": "Mittleres Risiko", + "microphone": "Mikrofon", + "nextRoom": "Nächster Raum", + "no": "Nein", + "noActionHigh": + "Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein hohes Restrisiko.", + "noActionLow": "Alles in Ordnung - keine Maßnahmen erforderlich.", + "noActionMedium": + "Aktuell keine konkreten Maßnahmen aus Ihren Antworten ableitbar, aber es bleibt ein mittleres Restrisiko.", + "noDevice": "Kein Gerät", + "noDeviceDialogBody": + "Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.", + "noDeviceDialogBodyWithExisting": + "Vorhandene Geräteauswahlen für diesen Raum werden verworfen. Dieser Raum wird ohne Geräte abgeschlossen und fließt nicht in die Bewertung ein.", + "noDeviceDialogTitle": "Keine Geräte in diesem Raum?", + "noDevicesCaptured": "Keine Geräte erfasst.", + "noDevicesHint": + "Starten Sie erneut und fügen Sie Geräte hinzu, um eine Bewertung zu erhalten.", + "noKnownDevices": + "Keine bekannten Geräte für diesen Raum. Sie können ein eigenes Gerät hinzufügen.", + "notApplicableForDevice": "Diese Frage trifft auf mein Gerät nicht zu", + "notCompleted": "Nicht abgeschlossen", + "note": "Hinweis", + "optional": "Optional", + "overallHigh": + "Mehrere Geräte haben erhebliche Privatsphäre-/Datenschutzrisiken. Bitte setzen Sie die Maßnahmen mit hoher Priorität zeitnah um.", + "overallLow": + "Gut gemacht! Ihre Geräte sind überwiegend sicher konfiguriert. Schauen Sie trotzdem in die allgemeinen Empfehlungen.", + "overallMedium": + "Es gibt Verbesserungspotenzial. Schauen Sie sich die Empfehlungen zu den einzelnen Geräten an.", + "overallRisk": "Gesamtrisiko", + "overview": "Übersicht", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projektpartner", + "q_access_logging_hint": + "Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.", + "q_access_logging_text": + "Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?", + "q_account_required_hint": + "Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.", + "q_account_required_text": + "Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?", + "q_camera_consent_hint": + "Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.", + "q_camera_consent_text": + "Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?", + "q_child_data_limits_hint": + "Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.", + "q_child_data_limits_text": + "Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?", + "q_cloud_required_hint": + "Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.", + "q_cloud_required_text": + "Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?", + "q_data_collection_hint": + "Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.", + "q_data_collection_text": + "Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?", + "q_expert_access_control_granular_hint": + "Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.", + "q_expert_access_control_granular_text": + "Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?", + "q_expert_access_revocation_hint": + "Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.", + "q_expert_access_revocation_text": + "Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?", + "q_expert_bystander_transparency_hint": + "Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.", + "q_expert_bystander_transparency_text": + "Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?", + "q_expert_child_data_protection_hint": + "Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.", + "q_expert_child_data_protection_text": + "Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?", + "q_expert_data_retention_duration_hint": + "Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.", + "q_expert_data_retention_duration_text": + "Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?", + "q_expert_data_sale_disabled_hint": + "Eine ausdrückliche \"kein Datenverkauf\"-Option ist ein starkes Datenschutzsignal.", + "q_expert_data_sale_disabled_text": + "Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?", + "q_expert_offline_functionality_hint": + "Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.", + "q_expert_offline_functionality_text": + "Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?", + "q_expert_sensitive_inference_controls_hint": + "Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.", + "q_expert_sensitive_inference_controls_text": + "Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?", + "q_expert_third_party_sharing_limited_hint": + "Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.", + "q_expert_third_party_sharing_limited_text": + "Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?", + "q_expert_update_support_window_hint": + "Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.", + "q_expert_update_support_window_text": + "Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?", + "q_expert_vulnerability_process_hint": + "Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.", + "q_expert_vulnerability_process_text": + "Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?", + "q_family_access_hint": + "Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.", + "q_family_access_text": + "Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?", + "q_health_sharing_hint": + "Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.", + "q_health_sharing_text": + "Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?", + "q_informed_hint": + "Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.", + "q_informed_text": + "Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?", + "q_local_control_hint": + "Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.", + "q_local_control_text": + "Können Automatisierungen lokal ohne Internetverbindung erfolgen?", + "q_local_mode_hint": + "Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.", + "q_local_mode_text": + "Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?", + "q_location_tracking_hint": + "GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.", + "q_location_tracking_text": + "Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?", + "q_map_privacy_hint": + "Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.", + "q_map_privacy_text": + "Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?", + "q_mic_active_hint": + "Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.", + "q_mic_active_text": + "Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?", + "q_motion_detection_hint": + "BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.", + "q_motion_detection_text": + "Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?", + "q_network_hint": + "Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.", + "q_network_text": + "Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?", + "q_offline_control_hint": + "Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.", + "q_offline_control_text": + "Können Sie das Thermostat auch offline betreiben (ohne Internet)?", + "q_offline_fallback_hint": + "Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.", + "q_offline_fallback_text": + "Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?", + "q_offline_unlock_hint": + "Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.", + "q_offline_unlock_text": + "Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?", + "q_parental_control_hint": + "Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.", + "q_parental_control_text": + "Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?", + "q_password_hint": + "Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.", + "q_password_text": + "Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?", + "q_permissions_hint": + "Nur wirklich benötigte Berechtigungen sollten aktiviert sein.", + "q_permissions_text": + "Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?", + "q_recording_disable_hint": + "BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.", + "q_recording_disable_text": + "Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?", + "q_sensor_data_deletion_hint": + "Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.", + "q_sensor_data_deletion_text": + "Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?", + "q_sensor_frequency_hint": + "Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.", + "q_sensor_frequency_text": + "Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?", + "q_sensor_granularity_hint": + "Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.", + "q_sensor_granularity_text": + "Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?", + "q_sensor_local_hint": + "Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.", + "q_sensor_local_text": + "Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?", + "q_sharing_restrictions_hint": + "Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.", + "q_sharing_restrictions_text": + "Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?", + "q_skills_permissions_hint": + "Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.", + "q_skills_permissions_text": + "Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?", + "q_tracking_disabled_hint": + "Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.", + "q_tracking_disabled_text": + "Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?", + "q_two_factor_hint": + "BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.", + "q_two_factor_text": + "Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?", + "q_updates_hint": "Updates schließen bekannte Sicherheitslücken zeitnah.", + "q_updates_text": + "Sind automatische Sicherheits-Updates für das Gerät aktiviert?", + "q_usage_tracking_hint": + "Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.", + "q_usage_tracking_text": + "Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?", + "q_video_encryption_hint": + "BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.", + "q_video_encryption_text": + "Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?", + "q_video_storage_hint": + "Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.", + "q_video_storage_text": + "Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?", + "q_vision_data_hint": + "Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.", + "q_vision_data_text": + "Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?", + "q_voice_history_hint": + "BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.", + "q_voice_history_text": + "Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?", + "q_voice_local_hint": + "Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.", + "q_voice_local_text": + "Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?", + "questionnaireTitle": "Fragen", + "recommendations": "Empfehlungen", + "recommended": "Empfohlen", + "reportExportedAt": "Exportiert am", + "restart": "Neu starten", + "results": "Ergebnisse", + "resume": "Fortsetzen", + "risk": "Risiko", + "risk_hint_camera": + "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.", + "risk_hint_child_room": + "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.", + "risk_hint_generic": + "Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.", + "risk_hint_lock": + "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.", + "risk_hint_mic": + "Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.", + "roomCheck": "Raum-Check", + "roomDeleteBody": + "Dieser benutzerdefinierte Raum wird gelöscht. Alle verknüpften Geräte werden auch entfernt.", + "roomDeleteTitle": "Raum löschen?", + "roomInstruction": + "Tippen Sie auf einen Raum, erfassen Sie dort Ihre Geräte und kehren Sie dann hierher zurück, um den nächsten Raum zu wählen.", + "roomName": "Raumname", + "roomNameHint": "z. B. Wohnzimmer, Garage", + "roomQuestion": "Welchen Raum möchten Sie jetzt prüfen?", + "roomSelectionTitle": "Raum auswählen", + "room_basement": "Keller / Speisekammer", + "room_bathroom": "Badezimmer", + "room_bedroom": "Schlafzimmer", + "room_child_bedroom": "Kinderzimmer", + "room_garden": "Garten / Außenbereich", + "room_hallway": "Flur / Eingang", + "room_kitchen": "Küche", + "room_living": "Wohnzimmer", + "room_office": "Arbeitszimmer", + "room_whole_home": "Ganze Wohnung", + "security": "Sicherheit", + "shareAsPdf": "Als PDF teilen", + "shareAsText": "Als Text teilen", + "shareResult": "Ergebnis teilen", + "skippedDevicesHint": + "{count} Geräte übersprungen, da der Fragebogen nicht abgeschlossen wurde.", + "sl_access_logging": "Kein Zugriffsprotokoll verfügbar", + "sl_account_required": "Pflichtkonto beim Hersteller nötig", + "sl_base_risk": "Grundrisiko des Gerätetyps", + "sl_camera_consent": "Kein Einverständnis für Kamerabereich", + "sl_child_data_limits": "Datenmenge nicht eingeschränkt", + "sl_child_room_bonus": "Erhöhte Sensibilität: Kinderzimmer", + "sl_cloud_required": "Navigation nur mit Cloud möglich", + "sl_data_collection": "Temperaturverlauf an Hersteller übertragen", + "sl_expert_access_control_granular": "Granulare Zugriffskontrolle fehlt", + "sl_expert_access_revocation": "Einzelner Zugriffswiderruf nicht möglich", + "sl_expert_bystander_transparency": + "Transparenz für Betroffene im Umfeld fehlt", + "sl_expert_child_data_protection": + "Schutzmaßnahmen für Kinderdaten fehlen", + "sl_expert_data_retention_duration": "Aufbewahrungsdauer unklar/zu lang", + "sl_expert_data_sale_disabled": "Datenverkauf nicht ausgeschlossen", + "sl_expert_offline_functionality": + "Sinnvoller Betrieb ohne Internet nicht möglich", + "sl_expert_sensitive_inference_controls": + "Kontrollen gegen sensible Inferenz fehlen", + "sl_expert_third_party_sharing_limited": + "Weitergabe an Dritte nicht begrenzt", + "sl_expert_update_support_window": + "Garantierter Update-Zeitraum unbekannt", + "sl_expert_vulnerability_process": + "Schwachstellenprozess nicht dokumentiert", + "sl_family_access": "Zugriff nicht einschränkbar", + "sl_health_sharing": "Gesundheitsdaten mit Dritten geteilt", + "sl_informed": "Haushaltsmitglieder nicht informiert", + "sl_local_control": "Automatisierungen nur mit Internet", + "sl_local_mode": "Kein Offline-Betrieb möglich", + "sl_location_tracking": "Standortverfolgung aktiv", + "sl_map_privacy": "Grundriss an Hersteller übertragen", + "sl_mic_active": "Mikrofon nicht bei Nichtnutzung deaktiviert", + "sl_motion_detection": "Bewegungserkennung immer aktiv", + "sl_network": "Kein separates IoT-WLAN eingerichtet", + "sl_offline_control": "Kein Offline-Betrieb möglich", + "sl_offline_fallback": "Gerät offline nicht nutzbar", + "sl_offline_unlock": "Kein Offline-Öffnen möglich", + "sl_parental_control": "Elternkontrolle nicht eingerichtet", + "sl_password": "Standard-Passwort nicht geändert", + "sl_permissions": "App-Berechtigungen nicht reduziert", + "sl_recording_disable": "Aufnahmen nicht deaktivierbar", + "sl_sensor_data_deletion": "Alte Messwerte nicht gelöscht", + "sl_sensor_frequency": "Messintervall nicht reduziert", + "sl_sensor_granularity": "Daten zu fein granular gespeichert", + "sl_sensor_local": "Daten in die Cloud übertragen", + "sl_sharing_restrictions": "Zugriff auf Aufnahmen nicht kontrolliert", + "sl_skills_permissions": "Skills nicht regelmäßig geprüft", + "sl_tracking_disabled": "Werbe-Tracking nicht deaktiviert", + "sl_two_factor": "2-Faktor-Authentifizierung fehlt", + "sl_updates": "Automatische Updates nicht aktiv", + "sl_usage_tracking": "Schaltmuster vom Hersteller erfasst", + "sl_video_encryption": "Videoübertragung nicht verschlüsselt", + "sl_video_storage": "Aufnahmen nur in Anbieter-Cloud", + "sl_vision_data": "Kamerabilder gespeichert oder übertragen", + "sl_voice_history": "Sprachaufnahmen nicht löschbar", + "sl_voice_local": "Keine lokale Sprachverarbeitung", + "smartHomePrivacyHeader": "Ihr Smart-Home-Datenschutz", + "social": "Sozial", + "start": "Starten", + "stepAnswerQuestions": "Fragen beantworten", + "stepCaptureDevices": "Geräte erfassen", + "stepGetRisk": "Risikoprofil & Empfehlungen erhalten", + "stepSelectRooms": "Raum auswählen", + "summarySharePdfText": "Simplications Ergebnisbericht als PDF", + "summaryShareSubject": "Simplications Ergebnis", + "summaryTitle": "Ihr Ergebnis", + "technical": "Technisch", + "totalScore": "Gesamt", + "urgent": "Dringend", + "website": "Website", + "websiteOpenFailed": "Website konnte nicht geöffnet werden.", + "welcomeDescription": + "Erfassen Sie Raum für Raum Ihre smarten Geräte und erhalten Sie eine Privatsphärebewertung mit konkreten Empfehlungen.", + "welcomeTitle": "Der Simplications\nSmart Home\nPrivatsphäre-Check", + "yes": "Ja", + }, + 'en': { + "a_access_logging_desc": + "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_access_logging_title": "Enable access log", + "a_account_required_desc": + "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_camera_consent_desc": + "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_child_data_limits_desc": + "Disable optional profile data and collect only the child data required for core functionality.", + "a_child_data_limits_title": "Minimize data collection", + "a_cloud_required_desc": + "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_data_collection_desc": + "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_data_collection_title": "Disable history upload", + "a_dont_know_desc": + "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "a_dont_know_title": "Get to know device settings better", + "a_expert_access_control_granular_desc": + "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_access_control_granular_title": + "Introduce granular roles and accounts", + "a_expert_access_revocation_desc": + "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_bystander_transparency_desc": + "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_bystander_transparency_title": + "Add transparency notices for bystanders", + "a_expert_child_data_protection_desc": + "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_child_data_protection_title": + "Strengthen child data protection", + "a_expert_data_retention_duration_desc": + "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_sale_disabled_desc": + "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_offline_functionality_desc": + "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_offline_functionality_title": + "Prioritize offline functionality", + "a_expert_sensitive_inference_controls_desc": + "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_expert_sensitive_inference_controls_title": + "Restrict inference features", + "a_expert_third_party_sharing_limited_desc": + "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_update_support_window_desc": + "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_vulnerability_process_desc": + "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_family_access_desc": + "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_family_access_title": "Separate access rights for household members", + "a_health_sharing_desc": + "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_health_sharing_title": "Restrict health data sharing", + "a_informed_desc": + "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_informed_title": "Inform household members", + "a_local_control_desc": + "Use local scenes/schedules instead of cloud automations where available.", + "a_local_control_title": "Enable local automations", + "a_local_mode_desc": + "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_local_mode_title": "Prefer offline use", + "a_location_tracking_desc": + "Disable location tracking outside active use or allow it only while the app is in use.", + "a_location_tracking_title": "Reduce location sharing", + "a_map_privacy_desc": + "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_mic_active_desc": + "Use the physical mute switch or disable the microphone in settings.", + "a_mic_active_title": "Disable microphone when not in use", + "a_motion_detection_desc": + "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_network_desc": + "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_offline_control_desc": + "Configure local schedules and control without cloud dependency if the device supports it.", + "a_offline_control_title": "Set up local control", + "a_offline_fallback_desc": + "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_unlock_desc": + "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_offline_unlock_title": "Secure offline access", + "a_parental_control_desc": + "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_parental_control_title": "Set up parental controls", + "a_password_desc": + "Replace the default password with a strong, unique password. Use a password manager.", + "a_password_title": "Change default password", + "a_permissions_desc": + "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_permissions_title": "Restrict app permissions", + "a_recording_disable_desc": + "Disable recording features by default and enable them only briefly when specifically needed.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_sensor_data_deletion_desc": + "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_frequency_desc": + "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_granularity_desc": + "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_local_desc": + "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_sensor_local_title": "Prefer local processing", + "a_sharing_restrictions_desc": + "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_skills_permissions_desc": + "Review which third-party skills have access. Disable unnecessary skills.", + "a_skills_permissions_title": "Review skills/integrations", + "a_tracking_disabled_desc": + "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_two_factor_desc": + "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_two_factor_title": "Enable two-factor authentication", + "a_updates_desc": + "Enable automatic security updates in device or app settings.", + "a_updates_title": "Enable automatic updates", + "a_usage_tracking_desc": + "Disable analytics, telemetry, and usage data collection in app settings.", + "a_usage_tracking_title": "Disable usage tracking", + "a_video_encryption_desc": + "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_storage_desc": + "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_video_storage_title": "Store recordings locally", + "a_vision_data_desc": + "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_vision_data_title": "Process camera data locally only", + "a_voice_history_desc": + "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_local_desc": + "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_voice_local_title": "Enable local voice processing", + "about": "About", + "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerTuChemnitz": "Chemnitz University of Technology", + "aboutPartnerVzSachsen": "Consumer Center Saxony", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "About the app", + "aboutSubtitle": "Research project on smart home privacy", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Add", + "addDevice": "Add\ndevice", + "addDeviceDialogTitle": "Add new device", + "addRoom": "Add room", + "addRoomDialogTitle": "Add new room", + "allDataDeleted": "All saved data has been deleted.", + "alreadyEvaluated": "Already evaluated", + "appTitle": "Simplications", + "baseRiskHint": "e.g. 30 (low) to 60 (high)", + "baseRiskLabel": "Base risk score (0-100)", + "camera": "Camera", + "cancel": "Cancel", + "catalogButton": "Open full action catalog", + "catalogSnackBarPrefix": "Catalog", + "chooseIcon": "Choose icon:", + "confirm": "Confirm", + "connectedDevice": "Connected device", + "coordination": "Coordination", + "coordinationFunding": "Coordination & Funding", + "currentLanguage": "Current language", + "dangerZone": "Danger zone", + "dangerZoneWarning": + "Warning: This action permanently removes all saved app data.", + "delete": "Delete", + "deleteAllDataBody": + "All captured rooms, devices, and answers will be permanently deleted. This action cannot be undone.", + "deleteAllDataButton": "Delete data", + "deleteAllDataTitle": "Delete all data?", + "deleteDeviceBody": + "This custom device will be deleted. All linked instances will also be removed.", + "deleteDeviceTitle": "Delete device?", + "deviceName": "Device name", + "deviceNameHint": "e.g. My smart speaker", + "deviceQuestion": "Which smart devices do you use in this room?", + "deviceQuestionHint": "Tap a device to answer its questions.", + "deviceTitlePrefix": "Devices", + "device_baby_monitor": "Baby monitor / baby camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_humidity_sensor": "Humidity sensor", + "device_indoor_camera": "Smart indoor camera", + "device_light_sensor": "Light sensor", + "device_outdoor_camera": "Smart outdoor camera", + "device_robot_vacuum": "Robot vacuum", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_smart_blind": "Smart blind / shutter", + "device_smart_coffee": "Smart coffee machine", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_fridge": "Smart fridge", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_oven": "Smart oven / stove", + "device_smart_plug": "Smart plug", + "device_smart_printer": "Smart printer", + "device_smart_router": "Smart router / mesh system", + "device_smart_scale": "Smart scale", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_toy": "Smart toy", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smart washer / dryer", + "device_temperature_sensor": "Temperature sensor", + "devicesRated": "rated devices", + "done": "Done", + "dontKnow": "I don't know", + "dontKnowHint": + " {count} answer{suffix} were marked as \"I don't know\" - take time to understand your device settings better.", + "evaluatedDevices": "Evaluated devices", + "expertModeQuestionnaireHint": + "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourceUnboxingLabel": + "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeSourcesHint": + "Methodologically inspired by the following research projects:", + "expertModeTitle": "Expert mode", + "expertModeToggleHint": + "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeToggleLabel": "Enable detailed expert mode", + "exportFailed": "Export failed", + "faq": "FAQ", + "faqAnswerCanShare": + "Yes. You can export and share your summary as text or PDF directly from the results screen.", + "faqAnswerDataStored": + "Your assessment data is stored locally on your device. You can delete all stored data at any time in the About screen.", + "faqAnswerHowWorks": + "You select a room, add your smart devices, answer device-specific questions, and receive a risk profile with prioritized actions.", + "faqAnswerLegalAdvice": + "No. Simplications provides practical orientation and recommendations, but does not replace legal or professional security consultation.", + "faqAnswerNoDevice": + "You can add custom devices and still complete the check. The recommendations then rely on your provided setup and answers.", + "faqAnswerNoPolicy": "Because we do not collect your data.", + "faqAnswerRiskMeaning": + "They indicate how strongly your current configuration may expose privacy-related risks. They are guidance levels, not legal or technical certification.", + "faqAnswerWhatIs": + "Simplications is a research project on smart-home privacy. This app is one part of the project and guides you room by room through your devices with practical recommendations based on your answers.", + "faqQuestionCanShare": "Can I share my results?", + "faqQuestionDataStored": "Where is my data stored?", + "faqQuestionHowWorks": "How does the check work?", + "faqQuestionLegalAdvice": "Is this legal advice?", + "faqQuestionNoDevice": "What if my device is not listed?", + "faqQuestionNoPolicy": "Why is there no data protection policy?", + "faqQuestionRiskMeaning": "What do low, medium, and high risk mean?", + "faqQuestionWhatIs": "What is Simplications?", + "faqScreenTitle": "Frequently Asked Questions", + "fullCatalog": "Full action catalog", + "fundingAgency": "Funding body", + "fundingAgencyValue": + "German Federal Ministry of Research, Technology and Space\nGrant 16KIS1868K", + "gen_rec_0": + "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": + "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": + "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": + "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": + "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": + "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": + "Use a household consent check before buying new devices and involve all household members.", + "generalRecommendations": "General recommendations", + "generalRecommendationsHint": + "These measures apply to your whole smart home regardless of individual devices.", + "hasCamera": "Has camera?", + "hasMicrophone": "Has microphone?", + "highRisk": "High risk", + "howRiskCalculated": "How is risk calculated?", + "languageDialogTitle": "Choose language", + "lowRisk": "Low risk", + "mediumRisk": "Medium risk", + "microphone": "Microphone", + "nextRoom": "Next room", + "no": "No", + "noActionHigh": + "No concrete actions can currently be derived from your answers, but a high residual risk remains.", + "noActionLow": "Everything is fine - no actions required.", + "noActionMedium": + "No concrete actions can currently be derived from your answers, but a medium residual risk remains.", + "noDevice": "No device", + "noDeviceDialogBody": + "This room will be completed without devices and will not affect scoring.", + "noDeviceDialogBodyWithExisting": + "Existing device selections for this room will be discarded. This room will be completed without devices and will not affect scoring.", + "noDeviceDialogTitle": "No devices in this room?", + "noDevicesCaptured": "No devices captured.", + "noDevicesHint": "Restart and add devices to receive an assessment.", + "noKnownDevices": + "No known devices for this room. You can add your own device.", + "notApplicableForDevice": "This question does not apply to my device", + "notCompleted": "Not completed", + "note": "Note", + "optional": "Optional", + "overallHigh": + "Several devices have significant privacy/data-protection risks. Please implement high-priority measures promptly.", + "overallLow": + "Well done! Your devices are mostly configured securely. Still review the general recommendations.", + "overallMedium": + "There is room for improvement. Review the recommendations for each device.", + "overallRisk": "Overall risk", + "overview": "Overview", + "platformPrivacy": "Platform Privacy", + "projectPartners": "Project partners", + "q_access_logging_hint": + "An access log helps you detect suspicious activity.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_account_required_hint": + "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_account_required_text": + "Can you use the device without a mandatory online account?", + "q_camera_consent_hint": + "Cameras in communal or private areas require the consent of all residents.", + "q_camera_consent_text": + "Does the camera only record areas for which everyone affected has given their consent?", + "q_child_data_limits_hint": + "Child-focused devices should collect and store minimal data.", + "q_child_data_limits_text": + "Can you limit which personal data the toy collects?", + "q_cloud_required_hint": + "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_cloud_required_text": + "Does floor-plan navigation work without cloud connection?", + "q_data_collection_hint": + "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_data_collection_text": + "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_expert_access_control_granular_hint": + "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_access_control_granular_text": + "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_revocation_hint": + "Fast revocation is crucial when devices are shared or users change.", + "q_expert_access_revocation_text": + "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_bystander_transparency_hint": + "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_bystander_transparency_text": + "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_child_data_protection_hint": + "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_child_data_protection_text": + "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_data_retention_duration_hint": + "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_data_retention_duration_text": + "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_sale_disabled_hint": + "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_data_sale_disabled_text": + "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_offline_functionality_hint": + "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_offline_functionality_text": + "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_sensitive_inference_controls_hint": + "Inference controls reduce risks from secondary use of sensitive data.", + "q_expert_sensitive_inference_controls_text": + "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_third_party_sharing_limited_hint": + "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_third_party_sharing_limited_text": + "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_update_support_window_hint": + "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_update_support_window_text": + "Is it known how long the vendor guarantees security updates?", + "q_expert_vulnerability_process_hint": + "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_vulnerability_process_text": + "Is there a documented process for reporting and fixing vulnerabilities?", + "q_family_access_hint": + "Household members should have control without visitors changing everything.", + "q_family_access_text": + "Can you control who may adjust heating (e.g., restrict guests)?", + "q_health_sharing_hint": + "Health data is sensitive. Only authorized apps should have access.", + "q_health_sharing_text": + "Can you control which third parties can access your health data?", + "q_informed_hint": + "All household members should know what data the device captures.", + "q_informed_text": + "Are all people in the household informed about this device and its function?", + "q_local_control_hint": + "Local scenes and schedules protect your privacy better.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_mode_hint": + "Offline use protects usage data from being sent to the vendor.", + "q_local_mode_text": + "Can you use the device via HDMI or local sources without internet?", + "q_location_tracking_hint": + "GPS tracking uses battery and can reveal movement patterns.", + "q_location_tracking_text": + "Can you disable location tracking when not needed?", + "q_map_privacy_hint": + "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_map_privacy_text": + "Are created floor plans stored exclusively on the device locally?", + "q_mic_active_hint": + "Smart speakers and devices with microphones can be activated unintentionally.", + "q_mic_active_text": + "Do you deactivate the microphone when you are not actively using it?", + "q_motion_detection_hint": + "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_motion_detection_text": + "Can you disable or schedule motion detection when you are at home?", + "q_network_hint": + "A dedicated network for smart devices protects your main home network.", + "q_network_text": + "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_offline_control_hint": + "Offline operation or local automation protects data from cloud access.", + "q_offline_control_text": + "Can you operate the thermostat offline (without internet)?", + "q_offline_fallback_hint": + "Reliable local operation is important for daily use and privacy.", + "q_offline_fallback_text": + "Do devices still work if internet or app connection fails?", + "q_offline_unlock_hint": + "Backup options prevent lockout during internet or power outages.", + "q_offline_unlock_text": + "Can you unlock the lock offline (e.g., with code or key)?", + "q_parental_control_hint": + "Parental controls should allow restricting contacts and features.", + "q_parental_control_text": + "Are there parental control features to manage the toy?", + "q_password_hint": + "Default passwords are often publicly known and easy to crack.", + "q_password_text": + "Have you changed the default password of the device or its linked account?", + "q_permissions_hint": + "Only permissions that are truly needed should be enabled.", + "q_permissions_text": + "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_recording_disable_hint": + "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_recording_disable_text": + "Can you disable audio and video recording on the device?", + "q_sensor_data_deletion_hint": + "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_data_deletion_text": + "Are older measurement values deleted automatically or on request?", + "q_sensor_frequency_hint": + "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_frequency_text": + "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_granularity_hint": + "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_granularity_text": + "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_local_hint": + "Local processing prevents the vendor from accessing your measurement data.", + "q_sensor_local_text": + "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sharing_restrictions_hint": + "You should be able to precisely control access to video recordings.", + "q_sharing_restrictions_text": + "Can you control who can access live view and recordings?", + "q_skills_permissions_hint": + "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_skills_permissions_text": + "Do you regularly review which skills have access to your account?", + "q_tracking_disabled_hint": + "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_tracking_disabled_text": + "Can you completely disable advertising and tracking features?", + "q_two_factor_hint": + "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_two_factor_text": + "Is two-factor authentication (2FA) available for the lock account?", + "q_updates_hint": + "Updates close known security vulnerabilities promptly.", + "q_updates_text": + "Are automatic security updates enabled for the device?", + "q_usage_tracking_hint": + "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_usage_tracking_text": + "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_video_encryption_hint": + "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_encryption_text": + "Is video recording and transmission encrypted end-to-end?", + "q_video_storage_hint": + "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_video_storage_text": + "Are recordings stored locally (not only in the vendor cloud)?", + "q_vision_data_hint": + "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_vision_data_text": + "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_voice_history_hint": + "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_history_text": + "Can you delete voice recordings from device history or disable this feature?", + "q_voice_local_hint": + "Local processing reduces the amount of data sent to the cloud.", + "q_voice_local_text": + "Is voice processing performed partly on the device locally?", + "questionnaireTitle": "Questions", + "recommendations": "Recommendations", + "recommended": "Recommended", + "reportExportedAt": "Exported at", + "restart": "Restart", + "results": "Results", + "resume": "Resume", + "risk": "Risk", + "risk_hint_camera": + "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_child_room": + "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": + "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "risk_hint_lock": + "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_mic": + "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "roomCheck": "Room check", + "roomDeleteBody": + "This custom room will be deleted. All linked devices will also be removed.", + "roomDeleteTitle": "Delete room?", + "roomInstruction": + "Tap a room, capture your devices there, then return here to choose the next room.", + "roomName": "Room name", + "roomNameHint": "e.g. Living room, Garage", + "roomQuestion": "Which room would you like to check now?", + "roomSelectionTitle": "Select room", + "room_basement": "Basement / Pantry", + "room_bathroom": "Bathroom", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_garden": "Garden / Outdoor area", + "room_hallway": "Hallway / Entrance", + "room_kitchen": "Kitchen", + "room_living": "Living room", + "room_office": "Office", + "room_whole_home": "Entire home", + "security": "Security", + "shareAsPdf": "Share as PDF", + "shareAsText": "Share as text", + "shareResult": "Share result", + "skippedDevicesHint": + "{count} devices skipped because the questionnaire was not completed.", + "sl_access_logging": "No access log available", + "sl_account_required": "Mandatory vendor account required", + "sl_base_risk": "Baseline risk of device type", + "sl_camera_consent": "No consent for camera-covered area", + "sl_child_data_limits": "Data collection not limited", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_data_collection": "Temperature history sent to vendor", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_access_revocation": + "Individual access revocation not possible", + "sl_expert_bystander_transparency": + "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": + "Child-data protection measures missing", + "sl_expert_data_retention_duration": + "Retention duration unclear or too long", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_offline_functionality": + "Meaningful offline operation not possible", + "sl_expert_sensitive_inference_controls": + "Controls against sensitive inference missing", + "sl_expert_third_party_sharing_limited": + "Third-party sharing not limited", + "sl_expert_update_support_window": + "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_family_access": "Access cannot be restricted", + "sl_health_sharing": "Health data shared with third parties", + "sl_informed": "Household members not informed", + "sl_local_control": "Automations require internet connection", + "sl_local_mode": "No offline operation possible", + "sl_location_tracking": "Location tracking enabled", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_mic_active": "Microphone not disabled when unused", + "sl_motion_detection": "Motion detection always active", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_offline_control": "No offline operation possible", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_parental_control": "Parental controls not configured", + "sl_password": "Default password not changed", + "sl_permissions": "App permissions not reduced", + "sl_recording_disable": "Recording cannot be disabled", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_two_factor": "Two-factor authentication missing", + "sl_updates": "Automatic updates not enabled", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", + "smartHomePrivacyHeader": "Your smart home privacy", + "social": "Social", + "start": "Start", + "stepAnswerQuestions": "Answer questions", + "stepCaptureDevices": "Capture devices", + "stepGetRisk": "Get risk profile & recommendations", + "stepSelectRooms": "Select room", + "summarySharePdfText": "Simplications report as PDF", + "summaryShareSubject": "Simplications result", + "summaryTitle": "Your result", + "technical": "Technical", + "totalScore": "Total", + "urgent": "Urgent", + "website": "Website", + "websiteOpenFailed": "Could not open website.", + "welcomeDescription": + "Capture your smart devices room by room and receive a privacy assessment with concrete recommendations.", + "welcomeTitle": "Simplications\nSmart Home\nPrivacy Check", + "yes": "Yes", + }, + 'fr': { + "about": "À propos", + "aboutPartnerHsAnhalt": "Haute école d’Anhalt", + "aboutPartnerTuChemnitz": "Université technique de Chemnitz", + "aboutPartnerVzSachsen": "Centre des consommateurs de Saxe", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "À propos de l’application", + "aboutSubtitle": + "Projet de recherche sur la confidentialité des maisons connectées", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Ajouter", + "addDevice": "Ajouter\nun appareil", + "addDeviceDialogTitle": "Ajouter un nouvel appareil", + "addRoom": "Ajouter une pièce", + "addRoomDialogTitle": "Ajouter une nouvelle pièce", + "allDataDeleted": "Toutes les données enregistrées ont été supprimées.", + "alreadyEvaluated": "Déjà évalué", + "appTitle": "Simplications", + "baseRiskHint": "ex. 30 (faible) à 60 (élevé)", + "baseRiskLabel": "Score de risque de base (0-100)", + "camera": "Caméra", + "cancel": "Annuler", + "catalogButton": "Ouvrir le catalogue complet des actions", + "catalogSnackBarPrefix": "Catalogue", + "chooseIcon": "Choisir une icône :", + "confirm": "Confirmer", + "connectedDevice": "Appareil connecté", + "coordination": "Coordination", + "coordinationFunding": "Coordination et financement", + "currentLanguage": "Langue actuelle", + "dangerZone": "Zone de danger", + "dangerZoneWarning": + "Attention : cette action supprime définitivement toutes les données enregistrées de l’application.", + "delete": "Supprimer", + "deleteAllDataBody": + "Toutes les pièces, appareils et réponses enregistrés seront supprimés définitivement. Cette action est irréversible.", + "deleteAllDataButton": "Supprimer les données", + "deleteAllDataTitle": "Supprimer toutes les données ?", + "deleteDeviceBody": + "Cet appareil personnalisé sera supprimé. Toutes les instances liées seront également supprimées.", + "deleteDeviceTitle": "Supprimer l'appareil ?", + "deviceName": "Nom de l’appareil", + "deviceNameHint": "ex. Mon haut-parleur intelligent", + "deviceQuestion": + "Quels appareils intelligents utilisez-vous dans cette pièce ?", + "deviceQuestionHint": "Touchez un appareil pour répondre aux questions.", + "deviceTitlePrefix": "Appareils", + "devicesRated": "appareils évalués", + "done": "Terminé", + "dontKnow": "Je ne sais pas", + "dontKnowHint": + " {count} réponse{suffix} a été marquée \"Je ne sais pas\" - prenez le temps de mieux comprendre les paramètres de vos appareils.", + "evaluatedDevices": "Appareils évalués", + "exportFailed": "Échec de l’export", + "faq": "FAQ", + "faqAnswerCanShare": + "Oui. Depuis l’écran des résultats, vous pouvez exporter et partager votre résumé en texte ou en PDF.", + "faqAnswerDataStored": + "Vos données d’évaluation sont stockées localement sur votre appareil. Vous pouvez supprimer toutes les données enregistrées à tout moment depuis l’écran À propos.", + "faqAnswerHowWorks": + "Vous choisissez une pièce, ajoutez vos appareils intelligents, répondez à des questions spécifiques, puis recevez un profil de risque avec des actions priorisées.", + "faqAnswerLegalAdvice": + "Non. Simplications fournit une orientation pratique et des recommandations, mais ne remplace pas un conseil juridique ou une consultation professionnelle en sécurité.", + "faqAnswerNoDevice": + "Vous pouvez ajouter des appareils personnalisés et terminer le contrôle. Les recommandations s’appuieront alors sur votre configuration et vos réponses.", + "faqAnswerNoPolicy": "Parce que nous ne collectons pas vos données.", + "faqAnswerRiskMeaning": + "Ces niveaux indiquent dans quelle mesure votre configuration actuelle peut exposer des risques de confidentialité. Ce sont des niveaux d’orientation, pas une certification juridique ou technique.", + "faqAnswerWhatIs": + "Simplications est un projet de recherche sur la confidentialité des maisons connectées. Cette application est une composante du projet et vous guide pièce par pièce à travers vos appareils avec des recommandations pratiques selon vos réponses.", + "faqQuestionCanShare": "Puis-je partager mes résultats ?", + "faqQuestionDataStored": "Où sont stockées mes données ?", + "faqQuestionHowWorks": "Comment fonctionne le contrôle ?", + "faqQuestionLegalAdvice": "Est-ce un conseil juridique ?", + "faqQuestionNoDevice": + "Que faire si mon appareil n’est pas dans la liste ?", + "faqQuestionNoPolicy": + "Pourquoi n’y a-t-il pas de politique de protection des données ?", + "faqQuestionRiskMeaning": + "Que signifient risque faible, moyen et élevé ?", + "faqQuestionWhatIs": "Qu’est-ce que Simplications ?", + "faqScreenTitle": "Questions fréquentes", + "fullCatalog": "Catalogue complet des actions", + "fundingAgency": "Organisme financeur", + "fundingAgencyValue": + "Ministère fédéral allemand de la Recherche, de la Technologie et de l’Espace\nSubvention 16KIS1868K", + "generalRecommendations": "Recommandations générales", + "generalRecommendationsHint": + "Ces mesures s’appliquent à toute votre maison connectée, indépendamment des appareils individuels.", + "hasCamera": "Possède une caméra ?", + "hasMicrophone": "Possède un microphone ?", + "highRisk": "Risque élevé", + "howRiskCalculated": "Comment le risque est-il calculé ?", + "languageDialogTitle": "Choisir la langue", + "lowRisk": "Risque faible", + "mediumRisk": "Risque moyen", + "microphone": "Microphone", + "nextRoom": "Pièce suivante", + "no": "Non", + "noActionHigh": + "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel élevé demeure.", + "noActionLow": "Tout va bien - aucune action n’est nécessaire.", + "noActionMedium": + "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel moyen demeure.", + "noDevice": "Aucun appareil", + "noDeviceDialogBody": + "Cette pièce sera terminée sans appareil et n'affectera pas le score.", + "noDeviceDialogBodyWithExisting": + "Les sélections d'appareils existantes pour cette pièce seront ignorées. Cette pièce sera terminée sans appareil et n'affectera pas le score.", + "noDeviceDialogTitle": "Aucun appareil dans cette pièce ?", + "noDevicesCaptured": "Aucun appareil enregistré.", + "noDevicesHint": + "Redémarrez et ajoutez des appareils pour obtenir une évaluation.", + "noKnownDevices": + "Aucun appareil connu pour cette pièce. Vous pouvez ajouter votre propre appareil.", + "notApplicableForDevice": + "Cette question ne s'applique pas à mon appareil", + "notCompleted": "Non terminé", + "note": "Remarque", + "optional": "Optionnel", + "overallHigh": + "Plusieurs appareils présentent des risques importants pour la confidentialité/protection des données. Veuillez mettre en œuvre rapidement les mesures prioritaires.", + "overallLow": + "Bien joué ! Vos appareils sont globalement configurés de façon sûre. Consultez tout de même les recommandations générales.", + "overallMedium": + "Il y a une marge d’amélioration. Consultez les recommandations pour chaque appareil.", + "overallRisk": "Risque global", + "overview": "Vue d’ensemble", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Partenaires du projet", + "questionnaireTitle": "Questions", + "recommendations": "Recommandations", + "recommended": "Recommandé", + "reportExportedAt": "Exporté le", + "restart": "Recommencer", + "results": "Résultats", + "resume": "Continuer", + "risk": "Risque", + "roomCheck": "Vérification de la pièce", + "roomDeleteBody": + "Cette pièce personnalisée sera supprimée. Tous les appareils liés seront également supprimés.", + "roomDeleteTitle": "Supprimer la pièce ?", + "roomInstruction": + "Touchez une pièce, recensez-y vos appareils, puis revenez ici pour choisir la pièce suivante.", + "roomName": "Nom de la pièce", + "roomNameHint": "ex. Salon, Garage", + "roomQuestion": "Quelle pièce souhaitez-vous vérifier maintenant ?", + "roomSelectionTitle": "Sélectionner une pièce", + "security": "Sécurité", + "shareAsPdf": "Partager en PDF", + "shareAsText": "Partager en texte", + "shareResult": "Partager le résultat", + "skippedDevicesHint": + "{count} appareils ignorés car le questionnaire n'a pas été terminé.", + "smartHomePrivacyHeader": "La confidentialité de votre maison connectée", + "social": "Social", + "start": "Démarrer", + "stepAnswerQuestions": "Répondre aux questions", + "stepCaptureDevices": "Recenser les appareils", + "stepGetRisk": "Obtenir le profil de risque et les recommandations", + "stepSelectRooms": "Choisir une pièce", + "summarySharePdfText": "Rapport Simplications en PDF", + "summaryShareSubject": "Résultat Simplications", + "summaryTitle": "Votre résultat", + "technical": "Technique", + "totalScore": "Total", + "urgent": "Urgent", + "website": "Site web", + "websiteOpenFailed": "Impossible d’ouvrir le site web.", + "welcomeDescription": + "Renseignez vos appareils intelligents pièce par pièce et obtenez une évaluation de confidentialité avec des recommandations concrètes.", + "welcomeTitle": "Simplications\nContrôle de confidentialité\nSmart Home", + "yes": "Oui", + }, + 'nl': { + "about": "Over", + "aboutPartnerHsAnhalt": "Hogeschool Anhalt", + "aboutPartnerTuChemnitz": "Technische Universiteit Chemnitz", + "aboutPartnerVzSachsen": "Consumentenorganisatie Saksen", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "Over de app", + "aboutSubtitle": "Onderzoeksproject over smart-home-privacy", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Toevoegen", + "addDevice": "Apparaat\ntoevoegen", + "addDeviceDialogTitle": "Nieuw apparaat toevoegen", + "addRoom": "Kamer toevoegen", + "addRoomDialogTitle": "Nieuwe kamer toevoegen", + "allDataDeleted": "Alle opgeslagen gegevens zijn verwijderd.", + "alreadyEvaluated": "Al beoordeeld", + "appTitle": "Simplications", + "baseRiskHint": "bijv. 30 (laag) tot 60 (hoog)", + "baseRiskLabel": "Basisscore risico (0-100)", + "camera": "Camera", + "cancel": "Annuleren", + "catalogButton": "Open volledige actiecatalogus", + "catalogSnackBarPrefix": "Catalogus", + "chooseIcon": "Kies een pictogram:", + "confirm": "Bevestigen", + "connectedDevice": "Verbonden apparaat", + "coordination": "Coordinatie", + "coordinationFunding": "Coordinatie en financiering", + "currentLanguage": "Huidige taal", + "dangerZone": "Gevarenzone", + "dangerZoneWarning": + "Waarschuwing: deze actie verwijdert alle opgeslagen app-gegevens permanent.", + "delete": "Verwijderen", + "deleteAllDataBody": + "Alle vastgelegde kamers, apparaten en antwoorden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.", + "deleteAllDataButton": "Gegevens verwijderen", + "deleteAllDataTitle": "Alle gegevens verwijderen?", + "deleteDeviceBody": + "Dit aangepaste apparaat wordt verwijderd. Alle gekoppelde instanties worden ook verwijderd.", + "deleteDeviceTitle": "Apparaat verwijderen?", + "deviceName": "Apparaatnaam", + "deviceNameHint": "bijv. Mijn slimme speaker", + "deviceQuestion": "Welke slimme apparaten gebruikt u in deze kamer?", + "deviceQuestionHint": "Tik op een apparaat om de vragen te beantwoorden.", + "deviceTitlePrefix": "Apparaten", + "devicesRated": "beoordeelde apparaten", + "done": "Klaar", + "dontKnow": "Weet ik niet", + "dontKnowHint": + " {count} antwoord{suffix} is gemarkeerd als \"Weet ik niet\" - neem de tijd om de instellingen van je apparaten beter te leren kennen.", + "evaluatedDevices": "Beoordeelde apparaten", + "exportFailed": "Export mislukt", + "faq": "FAQ", + "faqAnswerCanShare": + "Ja. In het resultatenscherm kun je je samenvatting exporteren en delen als tekst of PDF.", + "faqAnswerDataStored": + "Je beoordelingsgegevens worden lokaal op je apparaat opgeslagen. In het Over-scherm kun je alle opgeslagen gegevens op elk moment verwijderen.", + "faqAnswerHowWorks": + "Je kiest een kamer, voegt je slimme apparaten toe, beantwoordt apparaatspecifieke vragen en ontvangt een risicoprofiel met geprioriteerde acties.", + "faqAnswerLegalAdvice": + "Nee. Simplications biedt praktische oriëntatie en aanbevelingen, maar vervangt geen juridisch advies of professionele beveiligingsconsultatie.", + "faqAnswerNoDevice": + "Je kunt aangepaste apparaten toevoegen en de check toch voltooien. De aanbevelingen zijn dan gebaseerd op je configuratie en antwoorden.", + "faqAnswerNoPolicy": "Omdat we jouw gegevens niet verzamelen.", + "faqAnswerRiskMeaning": + "Deze niveaus geven aan in hoeverre je huidige configuratie privacyrisico’s kan vergroten. Het zijn richtniveaus, geen juridische of technische certificering.", + "faqAnswerWhatIs": + "Simplications is een onderzoeksproject over smart-home-privacy. Deze app is een onderdeel van het project en begeleidt je kamer voor kamer door je apparaten met praktische aanbevelingen op basis van je antwoorden.", + "faqQuestionCanShare": "Kan ik mijn resultaten delen?", + "faqQuestionDataStored": "Waar worden mijn gegevens opgeslagen?", + "faqQuestionHowWorks": "Hoe werkt de check?", + "faqQuestionLegalAdvice": "Is dit juridisch advies?", + "faqQuestionNoDevice": "Wat als mijn apparaat niet in de lijst staat?", + "faqQuestionNoPolicy": "Waarom is er geen privacybeleid?", + "faqQuestionRiskMeaning": "Wat betekenen laag, gemiddeld en hoog risico?", + "faqQuestionWhatIs": "Wat is Simplications?", + "faqScreenTitle": "Veelgestelde vragen", + "fullCatalog": "Volledige actiecatalogus", + "fundingAgency": "Financierende instantie", + "fundingAgencyValue": + "Duits Federaal Ministerie voor Onderzoek, Technologie en Ruimtevaart\nSubsidie 16KIS1868K", + "generalRecommendations": "Algemene aanbevelingen", + "generalRecommendationsHint": + "Deze maatregelen gelden voor je hele smart home, ongeacht afzonderlijke apparaten.", + "hasCamera": "Heeft camera?", + "hasMicrophone": "Heeft microfoon?", + "highRisk": "Hoog risico", + "howRiskCalculated": "Hoe wordt risico berekend?", + "languageDialogTitle": "Taal kiezen", + "lowRisk": "Laag risico", + "mediumRisk": "Gemiddeld risico", + "microphone": "Microfoon", + "nextRoom": "Volgende kamer", + "no": "Nee", + "noActionHigh": + "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een hoog restrisico.", + "noActionLow": "Alles is in orde - geen acties vereist.", + "noActionMedium": + "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een gemiddeld restrisico.", + "noDevice": "Geen apparaat", + "noDeviceDialogBody": + "Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", + "noDeviceDialogBodyWithExisting": + "Bestaande apparaatkeuzes voor deze kamer worden verwijderd. Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", + "noDeviceDialogTitle": "Geen apparaten in deze kamer?", + "noDevicesCaptured": "Geen apparaten vastgelegd.", + "noDevicesHint": + "Start opnieuw en voeg apparaten toe om een beoordeling te krijgen.", + "noKnownDevices": + "Geen bekende apparaten voor deze kamer. U kunt een eigen apparaat toevoegen.", + "notApplicableForDevice": + "Deze vraag is niet van toepassing op mijn apparaat", + "notCompleted": "Niet voltooid", + "note": "Opmerking", + "optional": "Optioneel", + "overallHigh": + "Meerdere apparaten hebben aanzienlijke privacy-/gegevensbeschermingsrisico’s. Voer maatregelen met hoge prioriteit zo snel mogelijk uit.", + "overallLow": + "Goed gedaan! Je apparaten zijn grotendeels veilig geconfigureerd. Bekijk alsnog de algemene aanbevelingen.", + "overallMedium": + "Er is ruimte voor verbetering. Bekijk de aanbevelingen per apparaat.", + "overallRisk": "Totaal risico", + "overview": "Overzicht", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projectpartners", + "questionnaireTitle": "Vragen", + "recommendations": "Aanbevelingen", + "recommended": "Aanbevolen", + "reportExportedAt": "Geëxporteerd op", + "restart": "Opnieuw starten", + "results": "Resultaten", + "resume": "Doorgaan", + "risk": "Risico", + "roomCheck": "Kamercheck", + "roomDeleteBody": + "Deze aangepaste kamer wordt verwijderd. Alle gekoppelde apparaten worden ook verwijderd.", + "roomDeleteTitle": "Kamer verwijderen?", + "roomInstruction": + "Tik op een kamer, leg daar uw apparaten vast en keer terug om de volgende kamer te kiezen.", + "roomName": "Kamernaam", + "roomNameHint": "bijv. Woonkamer, Garage", + "roomQuestion": "Welke kamer wilt u nu controleren?", + "roomSelectionTitle": "Kamer kiezen", + "security": "Beveiliging", + "shareAsPdf": "Delen als PDF", + "shareAsText": "Delen als tekst", + "shareResult": "Resultaat delen", + "skippedDevicesHint": + "{count} apparaten overgeslagen omdat de vragenlijst niet is voltooid.", + "smartHomePrivacyHeader": "Jouw smart-home-privacy", + "social": "Sociaal", + "start": "Starten", + "stepAnswerQuestions": "Vragen beantwoorden", + "stepCaptureDevices": "Apparaten vastleggen", + "stepGetRisk": "Risicoprofiel en aanbevelingen ontvangen", + "stepSelectRooms": "Kamer kiezen", + "summarySharePdfText": "Simplications-rapport als PDF", + "summaryShareSubject": "Simplications-resultaat", + "summaryTitle": "Jouw resultaat", + "technical": "Technisch", + "totalScore": "Totaal", + "urgent": "Urgent", + "website": "Website", + "websiteOpenFailed": "Kon website niet openen.", + "welcomeDescription": + "Leg je slimme apparaten kamer voor kamer vast en ontvang een privacybeoordeling met concrete aanbevelingen.", + "welcomeTitle": "Simplications\nSmart Home\nprivacycheck", + "yes": "Ja", + }, + 'pl': { + "about": "O aplikacji", + "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerTuChemnitz": "Uniwersytet Techniczny w Chemnitz", + "aboutPartnerVzSachsen": "Centrum Konsumenckie Saksonii", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "O aplikacji", + "aboutSubtitle": "Projekt badawczy dotyczący prywatności smart home", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", + "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", + "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", + "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", + "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", + "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", + "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", + "add": "Dodaj", + "addDevice": "Dodaj\nurządzenie", + "addDeviceDialogTitle": "Dodaj nowe urządzenie", + "addRoom": "Dodaj pokój", + "addRoomDialogTitle": "Dodaj nowy pokój", + "allDataDeleted": "Wszystkie zapisane dane zostały usunięte.", + "alreadyEvaluated": "Już oceniono", + "appTitle": "Simplications", + "baseRiskHint": "np. 30 (niskie) do 60 (wysokie)", + "baseRiskLabel": "Bazowy wynik ryzyka (0-100)", + "camera": "Kamera", + "cancel": "Anuluj", + "catalogButton": "Otwórz pełny katalog działań", + "catalogSnackBarPrefix": "Katalog", + "chooseIcon": "Wybierz ikonę:", + "confirm": "Potwierdź", + "connectedDevice": "Podłączone urządzenie", + "coordination": "Koordynacja", + "coordinationFunding": "Koordynacja i finansowanie", + "currentLanguage": "Bieżący język", + "dangerZone": "Strefa zagrożenia", + "dangerZoneWarning": + "Uwaga: Ta operacja trwale usunie wszystkie zapisane dane aplikacji.", + "delete": "Usuń", + "deleteAllDataBody": + "Wszystkie zapisane pokoje, urządzenia i odpowiedzi zostaną trwale usunięte. Tej operacji nie można cofnąć.", + "deleteAllDataButton": "Usuń dane", + "deleteAllDataTitle": "Usunąć wszystkie dane?", + "deleteDeviceBody": + "To niestandardowe urządzenie zostanie usunięte. Wszystkie powiązane instancje również zostaną usunięte.", + "deleteDeviceTitle": "Usunąć urządzenie?", + "deviceName": "Nazwa urządzenia", + "deviceNameHint": "np. Mój inteligentny głośnik", + "deviceQuestion": "Jakich inteligentnych urządzeń używasz w tym pokoju?", + "deviceQuestionHint": "Stuknij urządzenie, aby odpowiedzieć na pytania.", + "deviceTitlePrefix": "Urządzenia", + "devicesRated": "ocenionych urządzeń", + "done": "Gotowe", + "dontKnow": "Nie wiem", + "dontKnowHint": + " {count} odpowiedź{suffix} oznaczono jako \"Nie wiem\" - poświęć czas na lepsze poznanie ustawień swoich urządzeń.", + "evaluatedDevices": "Ocenione urządzenia", + "exportFailed": "Eksport nie powiódł się", + "faq": "FAQ", + "faqAnswerCanShare": + "Tak. Na ekranie wyników możesz wyeksportować i udostępnić podsumowanie jako tekst lub PDF.", + "faqAnswerDataStored": + "Twoje dane z oceny są przechowywane lokalnie na urządzeniu. W ekranie O aplikacji możesz w każdej chwili usunąć wszystkie zapisane dane.", + "faqAnswerHowWorks": + "Wybierasz pokój, dodajesz inteligentne urządzenia, odpowiadasz na pytania dotyczące danego urządzenia i otrzymujesz profil ryzyka z priorytetowymi działaniami.", + "faqAnswerLegalAdvice": + "Nie. Simplications zapewnia praktyczne wskazówki i rekomendacje, ale nie zastępuje porady prawnej ani profesjonalnej konsultacji bezpieczeństwa.", + "faqAnswerNoDevice": + "Możesz dodać własne urządzenia i nadal ukończyć kontrolę. Zalecenia będą wtedy oparte na Twojej konfiguracji i odpowiedziach.", + "faqAnswerNoPolicy": "Ponieważ nie zbieramy Twoich danych.", + "faqAnswerRiskMeaning": + "Poziomy te pokazują, jak bardzo obecna konfiguracja może zwiększać ryzyka dla prywatności. Są to poziomy orientacyjne, a nie certyfikacja prawna lub techniczna.", + "faqAnswerWhatIs": + "Simplications to projekt badawczy dotyczący prywatności w inteligentnym domu. Ta aplikacja jest jedną z części projektu i prowadzi Cię pokój po pokoju przez Twoje urządzenia, oferując praktyczne zalecenia na podstawie odpowiedzi.", + "faqQuestionCanShare": "Czy mogę udostępnić wyniki?", + "faqQuestionDataStored": "Gdzie przechowywane są moje dane?", + "faqQuestionHowWorks": "Jak działa kontrola?", + "faqQuestionLegalAdvice": "Czy to porada prawna?", + "faqQuestionNoDevice": "Co jeśli mojego urządzenia nie ma na liście?", + "faqQuestionNoPolicy": "Dlaczego nie ma polityki prywatności?", + "faqQuestionRiskMeaning": "Co oznacza niskie, średnie i wysokie ryzyko?", + "faqQuestionWhatIs": "Czym jest Simplications?", + "faqScreenTitle": "Najczęściej zadawane pytania", + "fullCatalog": "Pełny katalog działań", + "fundingAgency": "Instytucja finansująca", + "fundingAgencyValue": + "Federalne Ministerstwo Badań, Technologii i Przestrzeni Kosmicznej\nGrant 16KIS1868K", + "generalRecommendations": "Ogólne zalecenia", + "generalRecommendationsHint": + "Te środki dotyczą całego Twojego smart home, niezależnie od pojedynczych urządzeń.", + "hasCamera": "Ma kamerę?", + "hasMicrophone": "Ma mikrofon?", + "highRisk": "Wysokie ryzyko", + "howRiskCalculated": "Jak obliczane jest ryzyko?", + "languageDialogTitle": "Wybierz język", + "lowRisk": "Niskie ryzyko", + "mediumRisk": "Średnie ryzyko", + "microphone": "Mikrofon", + "nextRoom": "Następny pokój", + "no": "Nie", + "noActionHigh": + "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje wysokie ryzyko resztkowe.", + "noActionLow": "Wszystko w porządku - nie są wymagane żadne działania.", + "noActionMedium": + "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje średnie ryzyko resztkowe.", + "noDevice": "Brak urządzenia", + "noDeviceDialogBody": + "Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", + "noDeviceDialogBodyWithExisting": + "Istniejące wybory urządzeń dla tego pokoju zostaną odrzucone. Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", + "noDeviceDialogTitle": "Brak urządzeń w tym pokoju?", + "noDevicesCaptured": "Nie dodano żadnych urządzeń.", + "noDevicesHint": + "Uruchom ponownie i dodaj urządzenia, aby otrzymać ocenę.", + "noKnownDevices": + "Brak znanych urządzeń dla tego pokoju. Możesz dodać własne urządzenie.", + "notApplicableForDevice": "To pytanie nie dotyczy mojego urządzenia", + "notCompleted": "Nieukończone", + "note": "Uwaga", + "optional": "Opcjonalne", + "overallHigh": + "Kilka urządzeń ma istotne ryzyka prywatności/ochrony danych. Prosimy jak najszybciej wdrożyć działania o wysokim priorytecie.", + "overallLow": + "Dobra robota! Twoje urządzenia są w większości skonfigurowane bezpiecznie. Mimo to sprawdź ogólne zalecenia.", + "overallMedium": + "Jest miejsce na poprawę. Sprawdź zalecenia dla każdego urządzenia.", + "overallRisk": "Ryzyko całkowite", + "overview": "Przegląd", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Partnerzy projektu", + "questionnaireTitle": "Pytania", + "recommendations": "Zalecenia", + "recommended": "Zalecane", + "reportExportedAt": "Wyeksportowano", + "restart": "Uruchom ponownie", + "results": "Wyniki", + "resume": "Wznów", + "risk": "Ryzyko", + "roomCheck": "Przegląd pokoju", + "roomDeleteBody": + "Ten niestandardowy pokój zostanie usunięty. Wszystkie powiązane urządzenia również zostaną usunięte.", + "roomDeleteTitle": "Usunąć pokój?", + "roomInstruction": + "Stuknij pokój, dodaj urządzenia, a potem wróć tutaj, aby wybrać kolejny pokój.", + "roomName": "Nazwa pokoju", + "roomNameHint": "np. Salon, Garaż", + "roomQuestion": "Który pokój chcesz teraz sprawdzić?", + "roomSelectionTitle": "Wybierz pokój", + "security": "Bezpieczeństwo", + "shareAsPdf": "Udostępnij jako PDF", + "shareAsText": "Udostępnij jako tekst", + "shareResult": "Udostępnij wynik", + "skippedDevicesHint": + "Pominięto {count} urządzeń, ponieważ kwestionariusz nie został ukończony.", + "smartHomePrivacyHeader": "Prywatność Twojego smart home", + "social": "Społeczne", + "start": "Start", + "stepAnswerQuestions": "Odpowiedz na pytania", + "stepCaptureDevices": "Dodaj urządzenia", + "stepGetRisk": "Uzyskaj profil ryzyka i zalecenia", + "stepSelectRooms": "Wybierz pokój", + "summarySharePdfText": "Raport Simplications jako PDF", + "summaryShareSubject": "Wynik Simplications", + "summaryTitle": "Twój wynik", + "technical": "Techniczne", + "totalScore": "Łącznie", + "urgent": "Pilne", + "website": "Strona internetowa", + "websiteOpenFailed": "Nie można otworzyć strony internetowej.", + "welcomeDescription": + "Dodaj swoje inteligentne urządzenia pokój po pokoju i otrzymaj ocenę prywatności z konkretnymi zaleceniami.", + "welcomeTitle": "Simplications\nKontrola prywatności\nSmart Home", + "yes": "Tak", + }, + }; + + static Map> get _completedValuesByLocale { + final enMap = valuesByLocale['en'] ?? const {}; + final completed = >{}; + + for (final entry in valuesByLocale.entries) { + completed[entry.key] = {...enMap, ...entry.value}; + } + + completed.putIfAbsent('en', () => Map.from(enMap)); + completed.putIfAbsent( + 'de', + () => Map.from(valuesByLocale['de'] ?? enMap), + ); + + return completed; + } + + static String translate( + String key, { + String? fallback, + Locale? locale, + Map? params, + }) { + final completedValues = _completedValuesByLocale; + final languageCode = (locale ?? _activeLocale).languageCode; + final langMap = completedValues[languageCode]; + final enMap = completedValues['en']; + final deMap = completedValues['de']; + var value = langMap?[key] ?? enMap?[key] ?? deMap?[key] ?? fallback ?? key; + if (params != null && params.isNotEmpty) { + for (final entry in params.entries) { + value = value.replaceAll('{${entry.key}}', entry.value); + } + } + return value; + } + + static Map> localizationKeysByLocale() { + final completedValues = _completedValuesByLocale; + return { + for (final entry in completedValues.entries) + entry.key: Set.from(entry.value.keys), + }; + } +} diff --git a/lib/main.dart b/lib/main.dart index 8f7309b..245f0b5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; import 'l10n/app_localizations.dart'; import 'l10n/language_controller.dart'; @@ -31,17 +30,12 @@ class _SimplicationsAppState extends State { builder: (context, _) { return MaterialApp( navigatorKey: _navigatorKey, - onGenerateTitle: (context) => AppLocalizations.of(context).appTitle(), + onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle, debugShowCheckedModeBanner: false, navigatorObservers: [appRouteObserver], locale: widget.languageController.locale, supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: const [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], + localizationsDelegates: AppLocalizations.localizationsDelegates, theme: ThemeData( colorScheme: ColorScheme.fromSeed( seedColor: const Color(0xFF00695C), diff --git a/lib/screens/about_screen.dart b/lib/screens/about_screen.dart index 1a3cba2..d35236c 100644 --- a/lib/screens/about_screen.dart +++ b/lib/screens/about_screen.dart @@ -10,12 +10,12 @@ class AboutScreen extends StatelessWidget { const AboutScreen({super.key, required this.state}); Future _openUrl(BuildContext context, String url) async { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final uri = Uri.parse(url); if (!await launchUrl(uri, mode: LaunchMode.externalApplication)) { if (!context.mounted) return; ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(localizations.websiteOpenFailed())), + SnackBar(content: Text(localizations.websiteOpenFailed)), ); } } @@ -25,22 +25,22 @@ class AboutScreen extends StatelessWidget { return; } - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final shouldDelete = await showDialog( context: context, builder: (context) => AlertDialog( icon: const Icon(Icons.warning_amber_rounded), - title: Text(localizations.deleteAllDataTitle()), - content: Text(localizations.deleteAllDataBody()), + title: Text(localizations.deleteAllDataTitle), + content: Text(localizations.deleteAllDataBody), actions: [ TextButton( onPressed: () => Navigator.pop(context, false), - child: Text(localizations.cancel()), + child: Text(localizations.cancel), ), TextButton( onPressed: () => Navigator.pop(context, true), child: Text( - localizations.deleteAllDataButton(), + localizations.deleteAllDataButton, style: const TextStyle(color: Colors.red), ), ), @@ -59,7 +59,7 @@ class AboutScreen extends StatelessWidget { } ScaffoldMessenger.of( context, - ).showSnackBar(SnackBar(content: Text(localizations.allDataDeleted()))); + ).showSnackBar(SnackBar(content: Text(localizations.allDataDeleted))); } void _setExpertMode(bool enabled) { @@ -73,10 +73,10 @@ class AboutScreen extends StatelessWidget { Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return Scaffold( - appBar: AppBar(title: Text(localizations.aboutScreenTitle())), + appBar: AppBar(title: Text(localizations.aboutScreenTitle)), body: ListView( padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 20), children: [ @@ -93,13 +93,13 @@ class AboutScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - localizations.aboutProjectName(), + localizations.aboutProjectName, style: text.titleLarge?.copyWith( fontWeight: FontWeight.bold, ), ), Text( - localizations.aboutSubtitle(), + localizations.aboutSubtitle, style: text.bodyMedium?.copyWith( color: colors.onSurfaceVariant, ), @@ -112,16 +112,16 @@ class AboutScreen extends StatelessWidget { // ── Website link ──────────────────────────────────────────── Text( - localizations.website(), + localizations.website, style: text.titleSmall?.copyWith(fontWeight: FontWeight.w700), ), const SizedBox(height: 8), _PartnerTile( colors: colors, text: text, - label: localizations.aboutProjectName(), - urlLabel: localizations.aboutWebsiteSimplicationsLabel(), - url: localizations.aboutWebsiteSimplicationsUrl(), + label: localizations.aboutProjectName, + urlLabel: localizations.aboutWebsiteSimplicationsLabel, + url: localizations.aboutWebsiteSimplicationsUrl, icon: Icons.open_in_new, highlighted: true, openUrl: (url) => _openUrl(context, url), @@ -130,34 +130,34 @@ class AboutScreen extends StatelessWidget { // ── Project partners ──────────────────────────────────────── Text( - localizations.projectPartners(), + localizations.projectPartners, style: text.titleSmall?.copyWith(fontWeight: FontWeight.w700), ), const SizedBox(height: 10), _PartnerTile( colors: colors, text: text, - label: localizations.aboutPartnerTuChemnitz(), - urlLabel: localizations.aboutWebsiteTuChemnitzLabel(), - url: localizations.aboutWebsiteTuChemnitzUrl(), + label: localizations.aboutPartnerTuChemnitz, + urlLabel: localizations.aboutWebsiteTuChemnitzLabel, + url: localizations.aboutWebsiteTuChemnitzUrl, icon: Icons.school_outlined, openUrl: (url) => _openUrl(context, url), ), _PartnerTile( colors: colors, text: text, - label: localizations.aboutPartnerHsAnhalt(), - urlLabel: localizations.aboutWebsiteHsAnhaltLabel(), - url: localizations.aboutWebsiteHsAnhaltUrl(), + label: localizations.aboutPartnerHsAnhalt, + urlLabel: localizations.aboutWebsiteHsAnhaltLabel, + url: localizations.aboutWebsiteHsAnhaltUrl, icon: Icons.school_outlined, openUrl: (url) => _openUrl(context, url), ), _PartnerTile( colors: colors, text: text, - label: localizations.aboutPartnerVzSachsen(), - urlLabel: localizations.aboutWebsiteVzSachsenLabel(), - url: localizations.aboutWebsiteVzSachsenUrl(), + label: localizations.aboutPartnerVzSachsen, + urlLabel: localizations.aboutWebsiteVzSachsenLabel, + url: localizations.aboutWebsiteVzSachsenUrl, icon: Icons.groups_outlined, openUrl: (url) => _openUrl(context, url), ), @@ -165,7 +165,7 @@ class AboutScreen extends StatelessWidget { // ── Coordination & funding ────────────────────────────────── Text( - localizations.coordinationFunding(), + localizations.coordinationFunding, style: text.titleSmall?.copyWith(fontWeight: FontWeight.w700), ), const SizedBox(height: 10), @@ -173,27 +173,27 @@ class AboutScreen extends StatelessWidget { colors: colors, text: text, icon: Icons.manage_accounts_outlined, - label: localizations.coordination(), - value: localizations.platformPrivacy(), - urlLabel: localizations.aboutWebsitePlatformPrivacyLabel(), - url: localizations.aboutWebsitePlatformPrivacyUrl(), + label: localizations.coordination, + value: localizations.platformPrivacy, + urlLabel: localizations.aboutWebsitePlatformPrivacyLabel, + url: localizations.aboutWebsitePlatformPrivacyUrl, openUrl: (url) => _openUrl(context, url), ), _InfoRow( colors: colors, text: text, icon: Icons.account_balance_outlined, - label: localizations.fundingAgency(), - value: localizations.fundingAgencyValue(), - urlLabel: localizations.aboutWebsiteFundingAgencyLabel(), - url: localizations.aboutWebsiteFundingAgencyUrl(), + label: localizations.fundingAgency, + value: localizations.fundingAgencyValue, + urlLabel: localizations.aboutWebsiteFundingAgencyLabel, + url: localizations.aboutWebsiteFundingAgencyUrl, openUrl: (url) => _openUrl(context, url), ), const SizedBox(height: 20), // ── Expert mode ─────────────────────────────────────────── Text( - localizations.expertModeTitle(), + localizations.expertModeTitle, style: text.titleSmall?.copyWith(fontWeight: FontWeight.w700), ), const SizedBox(height: 8), @@ -211,12 +211,12 @@ class AboutScreen extends StatelessWidget { contentPadding: EdgeInsets.zero, leading: Icon(Icons.science_outlined, color: colors.primary), title: Text( - localizations.expertModeToggleLabel(), + localizations.expertModeToggleLabel, style: text.titleSmall?.copyWith( fontWeight: FontWeight.w700, ), ), - subtitle: Text(localizations.expertModeToggleHint()), + subtitle: Text(localizations.expertModeToggleHint), trailing: state == null ? const Switch(value: false, onChanged: null) : ListenableBuilder( @@ -229,7 +229,7 @@ class AboutScreen extends StatelessWidget { ), const SizedBox(height: 8), Text( - localizations.expertModeSourcesHint(), + localizations.expertModeSourcesHint, style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, ), @@ -238,18 +238,18 @@ class AboutScreen extends StatelessWidget { _PartnerTile( colors: colors, text: text, - label: localizations.expertModeSourceCmuLabel(), - urlLabel: localizations.expertModeSourceCmuUrl(), - url: localizations.expertModeSourceCmuUrl(), + label: localizations.expertModeSourceCmuLabel, + urlLabel: localizations.expertModeSourceCmuUrl, + url: localizations.expertModeSourceCmuUrl, icon: Icons.open_in_new, openUrl: (url) => _openUrl(context, url), ), _PartnerTile( colors: colors, text: text, - label: localizations.expertModeSourceUnboxingLabel(), - urlLabel: localizations.expertModeSourceUnboxingUrl(), - url: localizations.expertModeSourceUnboxingUrl(), + label: localizations.expertModeSourceUnboxingLabel, + urlLabel: localizations.expertModeSourceUnboxingUrl, + url: localizations.expertModeSourceUnboxingUrl, icon: Icons.open_in_new, openUrl: (url) => _openUrl(context, url), ), @@ -260,7 +260,7 @@ class AboutScreen extends StatelessWidget { // ── Danger zone ──────────────────────────────────────────── Text( - localizations.dangerZone(), + localizations.dangerZone, style: text.titleSmall?.copyWith( fontWeight: FontWeight.w700, color: colors.error, @@ -284,7 +284,7 @@ class AboutScreen extends StatelessWidget { const SizedBox(width: 10), Expanded( child: Text( - localizations.dangerZoneWarning(), + localizations.dangerZoneWarning, style: text.bodyMedium?.copyWith( color: colors.onErrorContainer, fontWeight: FontWeight.w600, @@ -300,7 +300,7 @@ class AboutScreen extends StatelessWidget { ? FilledButton.tonalIcon( onPressed: null, icon: const Icon(Icons.delete_forever_outlined), - label: Text(localizations.deleteAllDataButton()), + label: Text(localizations.deleteAllDataButton), style: FilledButton.styleFrom( backgroundColor: colors.error, foregroundColor: colors.onError, @@ -315,7 +315,7 @@ class AboutScreen extends StatelessWidget { ? () => _deleteAllData(context) : null, icon: const Icon(Icons.delete_forever_outlined), - label: Text(localizations.deleteAllDataButton()), + label: Text(localizations.deleteAllDataButton), style: FilledButton.styleFrom( backgroundColor: colors.error, foregroundColor: colors.onError, diff --git a/lib/screens/device_questionnaire_screen.dart b/lib/screens/device_questionnaire_screen.dart index c8ccff7..ff9f31b 100644 --- a/lib/screens/device_questionnaire_screen.dart +++ b/lib/screens/device_questionnaire_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../data/catalog_data.dart'; import '../l10n/app_localizations.dart'; +import '../l10n/localization_lookup.dart'; import '../models/device.dart'; import '../models/room.dart'; import '../models/survey_state.dart'; @@ -65,7 +66,7 @@ class _DeviceQuestionnaireScreenState extends State { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final questions = device.questions; final answered = questions .where((q) => device.answerFor(q.id) != null) @@ -74,7 +75,7 @@ class _DeviceQuestionnaireScreenState extends State { return Scaffold( appBar: AppBar( - title: Text(localizations.questionnaireTitle()), + title: Text(localizations.questionnaireTitle), centerTitle: false, ), body: CustomScrollView( @@ -148,7 +149,7 @@ class _DeviceQuestionnaireScreenState extends State { if (device.template.hasCamera) _FeatureChip( icon: Icons.videocam, - label: localizations.camera(), + label: localizations.camera, colors: colors, ), if (device.template.hasMicrophone) @@ -156,14 +157,14 @@ class _DeviceQuestionnaireScreenState extends State { padding: const EdgeInsets.only(left: 6), child: _FeatureChip( icon: Icons.mic, - label: localizations.microphone(), + label: localizations.microphone, colors: colors, ), ), if (!device.template.hasCamera && !device.template.hasMicrophone) Text( - localizations.connectedDevice(), + localizations.connectedDevice, style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, ), @@ -204,7 +205,7 @@ class _DeviceQuestionnaireScreenState extends State { const SizedBox(width: 8), Expanded( child: Text( - localizations.expertModeQuestionnaireHint(), + localizations.expertModeQuestionnaireHint, style: text.bodySmall?.copyWith( color: colors.onSurface, ), @@ -257,7 +258,7 @@ class _DeviceQuestionnaireScreenState extends State { ), icon: const Icon(Icons.check_circle_outline, size: 18), label: Text( - localizations.done(), + localizations.done, style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600), ), ), @@ -323,7 +324,7 @@ class _QuestionCard extends StatelessWidget { Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final answered = answer != null; final isNotApplicable = answer == QuestionAnswer.notApplicable; final accentColor = _answerAccentColor(colors, answer); @@ -375,7 +376,7 @@ class _QuestionCard extends StatelessWidget { const SizedBox(width: 10), Expanded( child: Text( - AppLocalizations.translate(question.text), + LocalizationLookup.translate(question.text), style: text.bodyMedium?.copyWith( fontWeight: FontWeight.w500, height: 1.4, @@ -387,7 +388,7 @@ class _QuestionCard extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 34, top: 6), child: Text( - AppLocalizations.translate(question.hint), + LocalizationLookup.translate(question.hint), style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, fontStyle: FontStyle.italic, @@ -399,7 +400,7 @@ class _QuestionCard extends StatelessWidget { children: [ Expanded( child: _AnswerButton( - label: localizations.yes(), + label: localizations.yes, icon: Icons.check, isSelected: answer == QuestionAnswer.yes, tone: _AnswerButtonTone.positive, @@ -410,7 +411,7 @@ class _QuestionCard extends StatelessWidget { const SizedBox(width: 10), Expanded( child: _AnswerButton( - label: localizations.no(), + label: localizations.no, icon: Icons.close, isSelected: answer == QuestionAnswer.no, tone: _AnswerButtonTone.negative, @@ -424,7 +425,7 @@ class _QuestionCard extends StatelessWidget { SizedBox( width: double.infinity, child: _AnswerButton( - label: localizations.dontKnow(), + label: localizations.dontKnow, icon: Icons.help_outline, isSelected: answer == QuestionAnswer.dontKnow, tone: _AnswerButtonTone.neutral, @@ -453,7 +454,7 @@ class _QuestionCard extends StatelessWidget { vertical: 0, ), title: Text( - localizations.notApplicableForDevice(), + localizations.notApplicableForDevice, style: text.labelSmall?.copyWith(fontWeight: FontWeight.w600), ), ), diff --git a/lib/screens/device_selection_screen.dart b/lib/screens/device_selection_screen.dart index 35e21b4..0f64d80 100644 --- a/lib/screens/device_selection_screen.dart +++ b/lib/screens/device_selection_screen.dart @@ -37,25 +37,25 @@ class DeviceSelectionScreen extends StatelessWidget { } Future _markNoDevice(BuildContext context) async { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final hasExistingDevices = state.devicesForRoom(room.id).isNotEmpty; final shouldMarkNoDevice = await showDialog( context: context, builder: (context) => AlertDialog( - title: Text(localizations.noDeviceDialogTitle()), + title: Text(localizations.noDeviceDialogTitle), content: Text( hasExistingDevices - ? localizations.noDeviceDialogBodyWithExisting() - : localizations.noDeviceDialogBody(), + ? localizations.noDeviceDialogBodyWithExisting + : localizations.noDeviceDialogBody, ), actions: [ TextButton( onPressed: () => Navigator.pop(context, false), - child: Text(localizations.cancel()), + child: Text(localizations.cancel), ), TextButton( onPressed: () => Navigator.pop(context, true), - child: Text(localizations.confirm()), + child: Text(localizations.confirm), ), ], ), @@ -82,16 +82,16 @@ class DeviceSelectionScreen extends StatelessWidget { } void _removeCustomDevice(BuildContext context, String deviceId) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; showDialog( context: context, builder: (context) => AlertDialog( - title: Text(localizations.deleteDeviceTitle()), - content: Text(localizations.deleteDeviceBody()), + title: Text(localizations.deleteDeviceTitle), + content: Text(localizations.deleteDeviceBody), actions: [ TextButton( onPressed: () => Navigator.pop(context), - child: Text(localizations.cancel()), + child: Text(localizations.cancel), ), TextButton( onPressed: () { @@ -99,7 +99,7 @@ class DeviceSelectionScreen extends StatelessWidget { Navigator.pop(context); }, child: Text( - localizations.delete(), + localizations.delete, style: const TextStyle(color: Colors.red), ), ), @@ -112,7 +112,7 @@ class DeviceSelectionScreen extends StatelessWidget { Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final isCustomRoom = state.customRooms.any((r) => r.id == room.id); final catalogDevices = isCustomRoom ? CatalogData.allDeviceTemplates @@ -121,7 +121,7 @@ class DeviceSelectionScreen extends StatelessWidget { return Scaffold( appBar: AppBar( title: Text( - localizations.devicesTitle(CatalogData.roomName(room)), + '${localizations.deviceTitlePrefix}: ${CatalogData.roomName(room)}', style: const TextStyle(fontWeight: FontWeight.w600), ), centerTitle: false, @@ -160,7 +160,7 @@ class DeviceSelectionScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - localizations.roomCheck(), + localizations.roomCheck, style: text.labelMedium?.copyWith( color: colors.primary, fontWeight: FontWeight.w600, @@ -178,14 +178,14 @@ class DeviceSelectionScreen extends StatelessWidget { ), const SizedBox(height: 16), Text( - localizations.deviceQuestion(), + localizations.deviceQuestion, style: text.titleSmall?.copyWith( color: colors.onSurfaceVariant, ), ), const SizedBox(height: 4), Text( - localizations.deviceQuestionHint(), + localizations.deviceQuestionHint, style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, ), @@ -200,7 +200,7 @@ class DeviceSelectionScreen extends StatelessWidget { padding: const EdgeInsets.fromLTRB(20, 0, 20, 12), sliver: SliverToBoxAdapter( child: Text( - localizations.noKnownDevices(), + localizations.noKnownDevices, style: text.bodyMedium?.copyWith( color: colors.onSurfaceVariant, ), @@ -303,7 +303,7 @@ class _DeviceCard extends StatelessWidget { @override Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final contentColor = isCompleted ? colors.onSurface.withValues(alpha: 0.35) : colors.onSurfaceVariant; @@ -337,7 +337,7 @@ class _DeviceCard extends StatelessWidget { const Spacer(), if (device.hasCamera && !isCompleted) Tooltip( - message: localizations.camera(), + message: localizations.camera, child: Icon( Icons.videocam, size: 12, @@ -346,7 +346,7 @@ class _DeviceCard extends StatelessWidget { ), if (device.hasMicrophone && !isCompleted) Tooltip( - message: localizations.microphone(), + message: localizations.microphone, child: Icon(Icons.mic, size: 12, color: contentColor), ), ], @@ -404,7 +404,7 @@ class _AddDeviceCard extends StatelessWidget { @override Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return GestureDetector( onTap: onTap, @@ -424,7 +424,7 @@ class _AddDeviceCard extends StatelessWidget { Icon(Icons.add, size: 28, color: colors.primary), const SizedBox(height: 4), Text( - localizations.addDevice(), + localizations.addDevice, textAlign: TextAlign.center, style: Theme.of(context).textTheme.labelSmall?.copyWith( color: colors.primary, @@ -447,7 +447,7 @@ class _NoDeviceCard extends StatelessWidget { @override Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return GestureDetector( onTap: onTap, @@ -472,7 +472,7 @@ class _NoDeviceCard extends StatelessWidget { ), const SizedBox(height: 4), Text( - localizations.noDevice(), + localizations.noDevice, textAlign: TextAlign.center, style: Theme.of(context).textTheme.labelSmall?.copyWith( color: isSelected ? colors.secondary : colors.onSurfaceVariant, @@ -504,7 +504,7 @@ class _BottomBar extends StatelessWidget { return ListenableBuilder( listenable: state, builder: (context, _) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final hasResultsAvailable = state.hasResultsAvailable || state.hasFinishedDeviceInRoom(currentRoomId); @@ -523,7 +523,7 @@ class _BottomBar extends StatelessWidget { ), ), child: Text( - localizations.nextRoom(), + localizations.nextRoom, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -542,7 +542,7 @@ class _BottomBar extends StatelessWidget { ), ), child: Text( - localizations.results(), + localizations.results, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, diff --git a/lib/screens/faq_screen.dart b/lib/screens/faq_screen.dart index 963bfc3..25b7b31 100644 --- a/lib/screens/faq_screen.dart +++ b/lib/screens/faq_screen.dart @@ -7,13 +7,13 @@ class FaqScreen extends StatelessWidget { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final text = Theme.of(context).textTheme; final entries = _faqEntries(localizations); return Scaffold( - appBar: AppBar(title: Text(localizations.faqScreenTitle())), + appBar: AppBar(title: Text(localizations.faqScreenTitle)), body: ListView.separated( padding: const EdgeInsets.fromLTRB(16, 16, 16, 24), itemCount: entries.length, @@ -52,36 +52,36 @@ class FaqScreen extends StatelessWidget { List<_FaqEntry> _faqEntries(AppLocalizations localizations) { return [ _FaqEntry( - question: localizations.faqQuestionWhatIs(), - answer: localizations.faqAnswerWhatIs(), + question: localizations.faqQuestionWhatIs, + answer: localizations.faqAnswerWhatIs, ), _FaqEntry( - question: localizations.faqQuestionHowWorks(), - answer: localizations.faqAnswerHowWorks(), + question: localizations.faqQuestionHowWorks, + answer: localizations.faqAnswerHowWorks, ), _FaqEntry( - question: localizations.faqQuestionNoPolicy(), - answer: localizations.faqAnswerNoPolicy(), + question: localizations.faqQuestionNoPolicy, + answer: localizations.faqAnswerNoPolicy, ), _FaqEntry( - question: localizations.faqQuestionDataStored(), - answer: localizations.faqAnswerDataStored(), + question: localizations.faqQuestionDataStored, + answer: localizations.faqAnswerDataStored, ), _FaqEntry( - question: localizations.faqQuestionNoDevice(), - answer: localizations.faqAnswerNoDevice(), + question: localizations.faqQuestionNoDevice, + answer: localizations.faqAnswerNoDevice, ), _FaqEntry( - question: localizations.faqQuestionRiskMeaning(), - answer: localizations.faqAnswerRiskMeaning(), + question: localizations.faqQuestionRiskMeaning, + answer: localizations.faqAnswerRiskMeaning, ), _FaqEntry( - question: localizations.faqQuestionLegalAdvice(), - answer: localizations.faqAnswerLegalAdvice(), + question: localizations.faqQuestionLegalAdvice, + answer: localizations.faqAnswerLegalAdvice, ), _FaqEntry( - question: localizations.faqQuestionCanShare(), - answer: localizations.faqAnswerCanShare(), + question: localizations.faqQuestionCanShare, + answer: localizations.faqAnswerCanShare, ), ]; } diff --git a/lib/screens/room_selection_screen.dart b/lib/screens/room_selection_screen.dart index aa6ab71..74091fe 100644 --- a/lib/screens/room_selection_screen.dart +++ b/lib/screens/room_selection_screen.dart @@ -37,16 +37,16 @@ class RoomSelectionScreen extends StatelessWidget { } void _removeCustomRoom(BuildContext context, String roomId) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; showDialog( context: context, builder: (context) => AlertDialog( - title: Text(localizations.roomDeleteTitle()), - content: Text(localizations.roomDeleteBody()), + title: Text(localizations.roomDeleteTitle), + content: Text(localizations.roomDeleteBody), actions: [ TextButton( onPressed: () => Navigator.pop(context), - child: Text(localizations.cancel()), + child: Text(localizations.cancel), ), TextButton( onPressed: () { @@ -54,7 +54,7 @@ class RoomSelectionScreen extends StatelessWidget { Navigator.pop(context); }, child: Text( - localizations.delete(), + localizations.delete, style: const TextStyle(color: Colors.red), ), ), @@ -73,11 +73,11 @@ class RoomSelectionScreen extends StatelessWidget { Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return Scaffold( appBar: AppBar( - title: Text(localizations.roomSelectionTitle()), + title: Text(localizations.roomSelectionTitle), centerTitle: false, ), body: ListenableBuilder( @@ -95,14 +95,14 @@ class RoomSelectionScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - localizations.roomQuestion(), + localizations.roomQuestion, style: text.titleLarge?.copyWith( fontWeight: FontWeight.bold, ), ), const SizedBox(height: 8), Text( - localizations.roomInstruction(), + localizations.roomInstruction, style: text.bodyMedium?.copyWith( color: colors.onSurfaceVariant, ), @@ -186,7 +186,7 @@ class RoomSelectionScreen extends StatelessWidget { ), ), child: Text( - localizations.results(), + localizations.results, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, @@ -227,7 +227,7 @@ class _RoomCard extends StatelessWidget { @override Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return GestureDetector( onTap: onTap, @@ -293,7 +293,7 @@ class _RoomCard extends StatelessWidget { if (isCompleted) ...[ const SizedBox(height: 2), Text( - localizations.alreadyEvaluated(), + localizations.alreadyEvaluated, style: Theme.of(context).textTheme.labelSmall?.copyWith( color: colors.onSurface.withValues(alpha: 0.35), ), @@ -303,7 +303,7 @@ class _RoomCard extends StatelessWidget { ] else if (isIncomplete) ...[ const SizedBox(height: 2), Text( - localizations.notCompleted(), + localizations.notCompleted, style: Theme.of( context, ).textTheme.labelSmall?.copyWith(color: colors.error), @@ -348,7 +348,7 @@ class _AddRoomCard extends StatelessWidget { @override Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return GestureDetector( onTap: onTap, @@ -368,7 +368,7 @@ class _AddRoomCard extends StatelessWidget { Icon(Icons.add, size: 28, color: colors.primary), const SizedBox(height: 4), Text( - localizations.addRoom(), + localizations.addRoom, style: Theme.of(context).textTheme.labelMedium?.copyWith( color: colors.primary, fontWeight: FontWeight.w600, diff --git a/lib/screens/summary_screen.dart b/lib/screens/summary_screen.dart index dc3fe1d..62b201e 100644 --- a/lib/screens/summary_screen.dart +++ b/lib/screens/summary_screen.dart @@ -6,6 +6,7 @@ import 'package:share_plus/share_plus.dart'; import '../data/catalog_data.dart'; import '../l10n/app_localizations.dart'; +import '../l10n/localization_lookup.dart'; import '../models/device.dart'; import '../models/survey_state.dart'; @@ -28,7 +29,7 @@ class _SummaryScreenState extends State { Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final report = _SummaryReport.fromDevices(widget.state.devices); final devices = report.devices; final highRisk = report.highRisk; @@ -37,7 +38,7 @@ class _SummaryScreenState extends State { return Scaffold( appBar: AppBar( - title: Text(localizations.summaryTitle()), + title: Text(localizations.summaryTitle), centerTitle: false, automaticallyImplyLeading: false, leading: IconButton( @@ -46,7 +47,7 @@ class _SummaryScreenState extends State { ), actions: [ PopupMenuButton<_ShareFormat>( - tooltip: localizations.shareResult(), + tooltip: localizations.shareResult, enabled: !_isSharing, onSelected: _shareSummary, itemBuilder: (context) => [ @@ -54,7 +55,7 @@ class _SummaryScreenState extends State { value: _ShareFormat.text, child: ListTile( leading: Icon(Icons.text_snippet_outlined), - title: Text(localizations.shareAsText()), + title: Text(localizations.shareAsText), contentPadding: EdgeInsets.zero, ), ), @@ -62,7 +63,7 @@ class _SummaryScreenState extends State { value: _ShareFormat.pdf, child: ListTile( leading: Icon(Icons.picture_as_pdf_outlined), - title: Text(localizations.shareAsPdf()), + title: Text(localizations.shareAsPdf), contentPadding: EdgeInsets.zero, ), ), @@ -85,7 +86,7 @@ class _SummaryScreenState extends State { ), TextButton.icon( icon: const Icon(Icons.restart_alt, size: 18), - label: Text(localizations.restart()), + label: Text(localizations.restart), onPressed: () async { await widget.state.reset(); if (!context.mounted) { @@ -129,12 +130,12 @@ class _SummaryScreenState extends State { ), const SizedBox(height: 16), Text( - localizations.noDevicesCaptured(), + localizations.noDevicesCaptured, style: text.titleMedium, ), const SizedBox(height: 8), Text( - localizations.noDevicesHint(), + localizations.noDevicesHint, style: text.bodyMedium?.copyWith( color: colors.onSurfaceVariant, ), @@ -150,7 +151,7 @@ class _SummaryScreenState extends State { if (highRisk.isNotEmpty) ...[ SliverToBoxAdapter( child: _SectionHeader( - label: localizations.highRisk(), + label: localizations.highRisk, count: highRisk.length, color: _riskColor(RiskLevel.high), icon: Icons.warning_rounded, @@ -174,7 +175,7 @@ class _SummaryScreenState extends State { if (medRisk.isNotEmpty) ...[ SliverToBoxAdapter( child: _SectionHeader( - label: localizations.mediumRisk(), + label: localizations.mediumRisk, count: medRisk.length, color: _riskColor(RiskLevel.medium), icon: Icons.info_rounded, @@ -198,7 +199,7 @@ class _SummaryScreenState extends State { if (lowRisk.isNotEmpty) ...[ SliverToBoxAdapter( child: _SectionHeader( - label: localizations.lowRisk(), + label: localizations.lowRisk, count: lowRisk.length, color: _riskColor(RiskLevel.low), icon: Icons.check_circle_rounded, @@ -230,7 +231,7 @@ class _SummaryScreenState extends State { } Future _shareSummary(_ShareFormat format) async { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; if (_isSharing) { return; } @@ -244,7 +245,7 @@ class _SummaryScreenState extends State { if (format == _ShareFormat.text) { await SharePlus.instance.share( ShareParams( - subject: localizations.summaryShareSubject(), + subject: localizations.summaryShareSubject, text: _buildShareText(report, localizations), sharePositionOrigin: origin, ), @@ -253,8 +254,8 @@ class _SummaryScreenState extends State { final pdfBytes = await _buildSharePdf(report, localizations); await SharePlus.instance.share( ShareParams( - subject: localizations.summaryShareSubject(), - text: localizations.summarySharePdfText(), + subject: localizations.summaryShareSubject, + text: localizations.summarySharePdfText, files: [ XFile.fromData( pdfBytes, @@ -272,7 +273,7 @@ class _SummaryScreenState extends State { } ScaffoldMessenger.of( context, - ).showSnackBar(SnackBar(content: Text(localizations.exportFailed()))); + ).showSnackBar(SnackBar(content: Text(localizations.exportFailed))); } finally { if (mounted) { setState(() => _isSharing = false); @@ -358,16 +359,16 @@ class _SummaryReport { final learnHint = dontKnowAnswers > 0 ? localizations.dontKnowHint( dontKnowAnswers, - suffix: dontKnowAnswers == 1 ? '' : 'en', + dontKnowAnswers == 1 ? '' : 'en', ) : ''; if (overallLevel == RiskLevel.low) { - return '${localizations.overallLow()}$learnHint'; + return '${localizations.overallLow}$learnHint'; } if (overallLevel == RiskLevel.medium) { - return '${localizations.overallMedium()}$learnHint'; + return '${localizations.overallMedium}$learnHint'; } - return '${localizations.overallHigh()}$learnHint'; + return '${localizations.overallHigh}$learnHint'; } } @@ -385,11 +386,11 @@ Color _riskColor(RiskLevel level) { String _priorityLabel(ActionPriority priority, AppLocalizations localizations) { switch (priority) { case ActionPriority.high: - return localizations.urgent(); + return localizations.urgent; case ActionPriority.medium: - return localizations.recommended(); + return localizations.recommended; case ActionPriority.low: - return localizations.optional(); + return localizations.optional; } } @@ -414,59 +415,57 @@ String _buildShareText(_SummaryReport report, AppLocalizations localizations) { final buffer = StringBuffer(); final generatedAt = _formatDate(DateTime.now()); - buffer.writeln('Simplications - ${localizations.summaryTitle()}'); - buffer.writeln('${localizations.reportExportedAt()}: $generatedAt'); + buffer.writeln('Simplications - ${localizations.summaryTitle}'); + buffer.writeln('${localizations.reportExportedAt}: $generatedAt'); buffer.writeln(); - buffer.writeln(localizations.overview()); - buffer.writeln( - '${localizations.evaluatedDevices()}: ${report.devices.length}', - ); + buffer.writeln(localizations.overview); + buffer.writeln('${localizations.evaluatedDevices}: ${report.devices.length}'); if (report.skippedDevices > 0) { buffer.writeln(localizations.skippedDevicesHint(report.skippedDevices)); } buffer.writeln( - '${localizations.overallRisk()}: ${_riskLabel(report.overallLevel, localizations)} (${report.overallScore}/100)', + '${localizations.overallRisk}: ${_riskLabel(report.overallLevel, localizations)} (${report.overallScore}/100)', ); - buffer.writeln('${localizations.highRisk()}: ${report.highRisk.length}'); - buffer.writeln('${localizations.mediumRisk()}: ${report.mediumRisk.length}'); - buffer.writeln('${localizations.lowRisk()}: ${report.lowRisk.length}'); + buffer.writeln('${localizations.highRisk}: ${report.highRisk.length}'); + buffer.writeln('${localizations.mediumRisk}: ${report.mediumRisk.length}'); + buffer.writeln('${localizations.lowRisk}: ${report.lowRisk.length}'); if (report.devices.isNotEmpty) { buffer.writeln(report.overallMessage(localizations)); } buffer.writeln(); if (report.devices.isEmpty) { - buffer.writeln(localizations.noDevicesCaptured()); - buffer.writeln(localizations.noDevicesHint()); + buffer.writeln(localizations.noDevicesCaptured); + buffer.writeln(localizations.noDevicesHint); buffer.writeln(); } else { _writeRiskSection( buffer, - localizations.highRisk(), + localizations.highRisk, report.highRisk, localizations, ); _writeRiskSection( buffer, - localizations.mediumRisk(), + localizations.mediumRisk, report.mediumRisk, localizations, ); _writeRiskSection( buffer, - localizations.lowRisk(), + localizations.lowRisk, report.lowRisk, localizations, ); } - buffer.writeln(localizations.generalRecommendations()); - buffer.writeln(localizations.generalRecommendationsHint()); + buffer.writeln(localizations.generalRecommendations); + buffer.writeln(localizations.generalRecommendationsHint); for (final entry in CatalogData.generalRecommendations.asMap().entries) { buffer.writeln('${entry.key + 1}. ${entry.value}'); } buffer.writeln(); - buffer.writeln('${localizations.fullCatalog()}: $_catalogUrl'); + buffer.writeln('${localizations.fullCatalog}: $_catalogUrl'); return buffer.toString().trimRight(); } @@ -487,25 +486,27 @@ void _writeRiskSection( '- ${CatalogData.deviceName(device.template)} (${CatalogData.localizeText(device.roomName)})', ); buffer.writeln( - ' ${localizations.risk()}: ${_riskLabel(device.riskLevel, localizations)} (${device.riskScore}/100)', + ' ${localizations.risk}: ${_riskLabel(device.riskLevel, localizations)} (${device.riskScore}/100)', ); final actions = device.suggestedActions; final inherentRiskHint = device.inherentRiskHint == null ? null - : AppLocalizations.translate(device.inherentRiskHint!); + : LocalizationLookup.translate(device.inherentRiskHint!); if (actions.isEmpty) { buffer.writeln(' ${_noActionMessage(device.riskLevel, localizations)}'); if (inherentRiskHint != null) { - buffer.writeln(' ${localizations.note()}: $inherentRiskHint'); + buffer.writeln(' ${localizations.note}: $inherentRiskHint'); } } else { - buffer.writeln(' ${actions.length} ${localizations.recommendations()}:'); + buffer.writeln(' ${actions.length} ${localizations.recommendations}:'); for (final action in actions) { buffer.writeln( - ' - ${AppLocalizations.translate(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', + ' - ${LocalizationLookup.translate(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', + ); + buffer.writeln( + ' ${LocalizationLookup.translate(action.description)}', ); - buffer.writeln(' ${AppLocalizations.translate(action.description)}'); } } buffer.writeln(); @@ -524,15 +525,15 @@ Future _buildSharePdf( margin: const pw.EdgeInsets.all(32), build: (context) => [ pw.Text( - 'Simplications - ${localizations.summaryTitle()}', + 'Simplications - ${localizations.summaryTitle}', style: pw.TextStyle(fontSize: 22, fontWeight: pw.FontWeight.bold), ), pw.SizedBox(height: 6), - pw.Text('${localizations.reportExportedAt()}: $generatedAt'), + pw.Text('${localizations.reportExportedAt}: $generatedAt'), pw.SizedBox(height: 18), - pw.Header(level: 1, text: localizations.overview()), + pw.Header(level: 1, text: localizations.overview), pw.Bullet( - text: '${localizations.evaluatedDevices()}: ${report.devices.length}', + text: '${localizations.evaluatedDevices}: ${report.devices.length}', ), if (report.skippedDevices > 0) pw.Bullet( @@ -540,15 +541,13 @@ Future _buildSharePdf( ), pw.Bullet( text: - '${localizations.overallRisk()}: ${_riskLabel(report.overallLevel, localizations)} (${report.overallScore}/100)', - ), - pw.Bullet( - text: '${localizations.highRisk()}: ${report.highRisk.length}', + '${localizations.overallRisk}: ${_riskLabel(report.overallLevel, localizations)} (${report.overallScore}/100)', ), + pw.Bullet(text: '${localizations.highRisk}: ${report.highRisk.length}'), pw.Bullet( - text: '${localizations.mediumRisk()}: ${report.mediumRisk.length}', + text: '${localizations.mediumRisk}: ${report.mediumRisk.length}', ), - pw.Bullet(text: '${localizations.lowRisk()}: ${report.lowRisk.length}'), + pw.Bullet(text: '${localizations.lowRisk}: ${report.lowRisk.length}'), if (report.devices.isNotEmpty) ...[ pw.SizedBox(height: 8), pw.Text(report.overallMessage(localizations)), @@ -556,28 +555,28 @@ Future _buildSharePdf( pw.SizedBox(height: 16), if (report.devices.isEmpty) ...[ pw.Text( - '${localizations.noDevicesCaptured()} ${localizations.noDevicesHint()}', + '${localizations.noDevicesCaptured} ${localizations.noDevicesHint}', ), pw.SizedBox(height: 16), ] else ...[ ..._buildPdfRiskSection( - localizations.highRisk(), + localizations.highRisk, report.highRisk, localizations, ), ..._buildPdfRiskSection( - localizations.mediumRisk(), + localizations.mediumRisk, report.mediumRisk, localizations, ), ..._buildPdfRiskSection( - localizations.lowRisk(), + localizations.lowRisk, report.lowRisk, localizations, ), ], - pw.Header(level: 1, text: localizations.generalRecommendations()), - pw.Text(localizations.generalRecommendationsHint()), + pw.Header(level: 1, text: localizations.generalRecommendations), + pw.Text(localizations.generalRecommendationsHint), pw.SizedBox(height: 8), ...CatalogData.generalRecommendations.asMap().entries.map( (entry) => pw.Padding( @@ -592,7 +591,7 @@ Future _buildSharePdf( ), ), pw.SizedBox(height: 12), - pw.Text('${localizations.fullCatalog()}: $_catalogUrl'), + pw.Text('${localizations.fullCatalog}: $_catalogUrl'), ], ), ); @@ -615,14 +614,14 @@ List _buildPdfRiskSection( final actions = device.suggestedActions; final inherentRiskHint = device.inherentRiskHint == null ? null - : AppLocalizations.translate(device.inherentRiskHint!); + : LocalizationLookup.translate(device.inherentRiskHint!); final widgets = [ pw.Text( '${CatalogData.deviceName(device.template)} (${CatalogData.localizeText(device.roomName)})', style: pw.TextStyle(fontWeight: pw.FontWeight.bold), ), pw.Text( - '${localizations.risk()}: ${_riskLabel(device.riskLevel, localizations)} (${device.riskScore}/100)', + '${localizations.risk}: ${_riskLabel(device.riskLevel, localizations)} (${device.riskScore}/100)', ), pw.SizedBox(height: 4), ]; @@ -631,12 +630,12 @@ List _buildPdfRiskSection( widgets.add(pw.Text(_noActionMessage(device.riskLevel, localizations))); if (inherentRiskHint != null) { widgets.add(pw.SizedBox(height: 4)); - widgets.add(pw.Text('${localizations.note()}: $inherentRiskHint')); + widgets.add(pw.Text('${localizations.note}: $inherentRiskHint')); } } else { widgets.add( pw.Text( - '${actions.length} ${localizations.recommendations()}:', + '${actions.length} ${localizations.recommendations}:', style: pw.TextStyle(fontWeight: pw.FontWeight.bold), ), ); @@ -648,10 +647,10 @@ List _buildPdfRiskSection( crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ pw.Text( - '- ${AppLocalizations.translate(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', + '- ${LocalizationLookup.translate(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', style: pw.TextStyle(fontWeight: pw.FontWeight.bold), ), - pw.Text(AppLocalizations.translate(action.description)), + pw.Text(LocalizationLookup.translate(action.description)), ], ), ), @@ -679,33 +678,33 @@ Color _riskBg(RiskLevel level) { String _riskLabel(RiskLevel level, AppLocalizations localizations) { switch (level) { case RiskLevel.high: - return localizations.highRisk(); + return localizations.highRisk; case RiskLevel.medium: - return localizations.mediumRisk(); + return localizations.mediumRisk; case RiskLevel.low: - return localizations.lowRisk(); + return localizations.lowRisk; } } String _noActionMessage(RiskLevel level, AppLocalizations localizations) { switch (level) { case RiskLevel.low: - return localizations.noActionLow(); + return localizations.noActionLow; case RiskLevel.medium: - return localizations.noActionMedium(); + return localizations.noActionMedium; case RiskLevel.high: - return localizations.noActionHigh(); + return localizations.noActionHigh; } } String _actionTypeLabel(ActionType type, AppLocalizations localizations) { switch (type) { case ActionType.social: - return localizations.social(); + return localizations.social; case ActionType.technical: - return localizations.technical(); + return localizations.technical; case ActionType.security: - return localizations.security(); + return localizations.security; } } @@ -771,7 +770,7 @@ class _OverviewHeader extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - localizations.smartHomePrivacyHeader(), + localizations.smartHomePrivacyHeader, style: text.titleMedium?.copyWith(fontWeight: FontWeight.bold), ), const SizedBox(height: 16), @@ -812,7 +811,7 @@ class _OverviewHeader extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '${devices.length} ${localizations.devicesRated()}', + '${devices.length} ${localizations.devicesRated}', style: text.bodyMedium, ), if (skippedDevices > 0) ...[ @@ -853,15 +852,15 @@ class _OverviewHeader extends StatelessWidget { final learnHint = dontKnowCount > 0 ? localizations.dontKnowHint( dontKnowCount, - suffix: dontKnowCount == 1 ? '' : 'en', + dontKnowCount == 1 ? '' : 'en', ) : ''; if (level == RiskLevel.low) { - return '${localizations.overallLow()}$learnHint'; + return '${localizations.overallLow}$learnHint'; } else if (level == RiskLevel.medium) { - return '${localizations.overallMedium()}$learnHint'; + return '${localizations.overallMedium}$learnHint'; } else { - return '${localizations.overallHigh()}$learnHint'; + return '${localizations.overallHigh}$learnHint'; } } } @@ -885,7 +884,7 @@ class _RiskCount extends StatelessWidget { ), const SizedBox(width: 6), Text( - '$count × ${_riskLabel(level, AppLocalizations.of(context))}', + '$count × ${_riskLabel(level, AppLocalizations.of(context)!)}', style: TextStyle( fontSize: 13, color: color, @@ -971,7 +970,7 @@ class _DeviceResultCardState extends State<_DeviceResultCard> { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; final device = widget.device; @@ -981,7 +980,7 @@ class _DeviceResultCardState extends State<_DeviceResultCard> { final actions = device.suggestedActions; final inherentRiskHint = device.inherentRiskHint == null ? null - : AppLocalizations.translate(device.inherentRiskHint!); + : LocalizationLookup.translate(device.inherentRiskHint!); final noActionColor = level == RiskLevel.low ? _riskColor(RiskLevel.low) : color; @@ -1059,7 +1058,7 @@ class _DeviceResultCardState extends State<_DeviceResultCard> { ), const SizedBox(height: 4), Text( - '${localizations.risk()}: ${device.riskScore}/100', + '${localizations.risk}: ${device.riskScore}/100', style: text.labelSmall?.copyWith(color: color), ), ], @@ -1145,7 +1144,7 @@ class _DeviceResultCardState extends State<_DeviceResultCard> { Padding( padding: const EdgeInsets.fromLTRB(14, 0, 14, 6), child: Text( - '${actions.length} ${localizations.recommendations()}:', + '${actions.length} ${localizations.recommendations}:', style: text.labelSmall?.copyWith( color: colors.onSurfaceVariant, fontWeight: FontWeight.bold, @@ -1180,7 +1179,7 @@ class _ScoreBreakdownState extends State<_ScoreBreakdown> { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final factors = widget.device.scoringFactors; if (factors.isEmpty) return const SizedBox.shrink(); @@ -1213,7 +1212,7 @@ class _ScoreBreakdownState extends State<_ScoreBreakdown> { const SizedBox(width: 6), Expanded( child: Text( - localizations.howRiskCalculated(), + localizations.howRiskCalculated, style: text.labelSmall?.copyWith( color: colors.onSurfaceVariant, fontWeight: FontWeight.w600, @@ -1241,7 +1240,7 @@ class _ScoreBreakdownState extends State<_ScoreBreakdown> { mainAxisAlignment: MainAxisAlignment.end, children: [ Text( - '${localizations.totalScore()}: ${widget.device.riskScore}/100', + '${localizations.totalScore}: ${widget.device.riskScore}/100', style: text.labelSmall?.copyWith( color: riskColor, fontWeight: FontWeight.bold, @@ -1295,7 +1294,7 @@ class _FactorRow extends StatelessWidget { const SizedBox(width: 6), Expanded( child: Text( - AppLocalizations.translate(factor.label), + LocalizationLookup.translate(factor.label), style: text.bodySmall?.copyWith(height: 1.3), maxLines: 2, overflow: TextOverflow.ellipsis, @@ -1330,7 +1329,7 @@ class _ActionTile extends StatelessWidget { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; final priorityColor = action.priority == ActionPriority.high @@ -1359,7 +1358,7 @@ class _ActionTile extends StatelessWidget { children: [ Expanded( child: Text( - AppLocalizations.translate(action.title), + LocalizationLookup.translate(action.title), style: text.bodySmall?.copyWith( fontWeight: FontWeight.bold, ), @@ -1376,10 +1375,10 @@ class _ActionTile extends StatelessWidget { ), child: Text( action.priority == ActionPriority.high - ? localizations.urgent() + ? localizations.urgent : action.priority == ActionPriority.medium - ? localizations.recommended() - : localizations.optional(), + ? localizations.recommended + : localizations.optional, style: TextStyle( fontSize: 10, color: priorityColor, @@ -1391,7 +1390,7 @@ class _ActionTile extends StatelessWidget { ), const SizedBox(height: 4), Text( - AppLocalizations.translate(action.description), + LocalizationLookup.translate(action.description), style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, height: 1.4, @@ -1423,7 +1422,7 @@ class _GeneralRecommendations extends StatelessWidget { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return Padding( padding: const EdgeInsets.all(16), child: Column( @@ -1436,14 +1435,14 @@ class _GeneralRecommendations extends StatelessWidget { Icon(Icons.tips_and_updates, color: colors.primary, size: 20), const SizedBox(width: 8), Text( - localizations.generalRecommendations(), + localizations.generalRecommendations, style: text.titleSmall?.copyWith(fontWeight: FontWeight.bold), ), ], ), const SizedBox(height: 4), Text( - localizations.generalRecommendationsHint(), + localizations.generalRecommendationsHint, style: text.bodySmall?.copyWith(color: colors.onSurfaceVariant), ), const SizedBox(height: 12), @@ -1489,14 +1488,14 @@ class _GeneralRecommendations extends StatelessWidget { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - '${localizations.catalogSnackBarPrefix()}: $_catalogUrl', + '${localizations.catalogSnackBarPrefix}: $_catalogUrl', ), duration: Duration(seconds: 5), ), ); }, icon: const Icon(Icons.open_in_new, size: 16), - label: Text(localizations.catalogButton()), + label: Text(localizations.catalogButton), ), ], ), diff --git a/lib/screens/welcome_screen.dart b/lib/screens/welcome_screen.dart index 54ebec1..71fec26 100644 --- a/lib/screens/welcome_screen.dart +++ b/lib/screens/welcome_screen.dart @@ -67,7 +67,7 @@ class _WelcomeScreenState extends State with RouteAware { Widget build(BuildContext context) { final colors = Theme.of(context).colorScheme; final text = Theme.of(context).textTheme; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return Scaffold( backgroundColor: colors.surface, @@ -102,7 +102,7 @@ class _WelcomeScreenState extends State with RouteAware { ), const SizedBox(height: 16), Text( - localizations.welcomeTitle(), + localizations.welcomeTitle, style: text.headlineMedium?.copyWith( fontWeight: FontWeight.bold, height: 1.2, @@ -110,7 +110,7 @@ class _WelcomeScreenState extends State with RouteAware { ), const SizedBox(height: 10), Text( - localizations.welcomeDescription(), + localizations.welcomeDescription, style: text.bodyMedium?.copyWith( color: colors.onSurfaceVariant, height: 1.4, @@ -126,25 +126,25 @@ class _WelcomeScreenState extends State with RouteAware { _StepRow( number: '1', icon: Icons.room, - label: localizations.stepSelectRooms(), + label: localizations.stepSelectRooms, colors: colors, ), _StepRow( number: '2', icon: Icons.devices, - label: localizations.stepCaptureDevices(), + label: localizations.stepCaptureDevices, colors: colors, ), _StepRow( number: '3', icon: Icons.quiz_outlined, - label: localizations.stepAnswerQuestions(), + label: localizations.stepAnswerQuestions, colors: colors, ), _StepRow( number: '4', icon: Icons.shield_outlined, - label: localizations.stepGetRisk(), + label: localizations.stepGetRisk, colors: colors, ), ], @@ -183,8 +183,8 @@ class _WelcomeScreenState extends State with RouteAware { ), child: Text( hasProgress - ? localizations.resume() - : localizations.start(), + ? localizations.resume + : localizations.start, style: const TextStyle( fontSize: 17, fontWeight: FontWeight.w600, @@ -207,7 +207,7 @@ class _WelcomeScreenState extends State with RouteAware { Icons.help_outline, size: 16, ), - label: Text(localizations.faq()), + label: Text(localizations.faq), style: TextButton.styleFrom( foregroundColor: colors.onSurfaceVariant, textStyle: const TextStyle(fontSize: 13), @@ -226,7 +226,7 @@ class _WelcomeScreenState extends State with RouteAware { Icons.info_outline, size: 16, ), - label: Text(localizations.about()), + label: Text(localizations.about), style: TextButton.styleFrom( foregroundColor: colors.onSurfaceVariant, textStyle: const TextStyle(fontSize: 13), diff --git a/lib/widgets/custom_add_dialogs.dart b/lib/widgets/custom_add_dialogs.dart index 3897df4..f0d5e16 100644 --- a/lib/widgets/custom_add_dialogs.dart +++ b/lib/widgets/custom_add_dialogs.dart @@ -48,7 +48,7 @@ class _CustomRoomDialogState extends State { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return Dialog( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 500), @@ -59,7 +59,7 @@ class _CustomRoomDialogState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - localizations.addRoomDialogTitle(), + localizations.addRoomDialogTitle, style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600), ), const SizedBox(height: 16), @@ -67,13 +67,13 @@ class _CustomRoomDialogState extends State { controller: _nameController, onChanged: (_) => setState(() {}), decoration: InputDecoration( - labelText: localizations.roomName(), - hintText: localizations.roomNameHint(), + labelText: localizations.roomName, + hintText: localizations.roomNameHint, prefixIcon: Icon(_selectedIcon), ), ), const SizedBox(height: 16), - Text(localizations.chooseIcon()), + Text(localizations.chooseIcon), const SizedBox(height: 8), Wrap( spacing: 8, @@ -113,7 +113,7 @@ class _CustomRoomDialogState extends State { children: [ TextButton( onPressed: () => Navigator.pop(context), - child: Text(localizations.cancel()), + child: Text(localizations.cancel), ), const SizedBox(width: 8), ElevatedButton( @@ -125,7 +125,7 @@ class _CustomRoomDialogState extends State { 'icon': _selectedIcon, }); }, - child: Text(localizations.add()), + child: Text(localizations.add), ), ], ), @@ -188,7 +188,7 @@ class _CustomDeviceDialogState extends State { @override Widget build(BuildContext context) { - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; return Dialog( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 520), @@ -199,7 +199,7 @@ class _CustomDeviceDialogState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - localizations.addDeviceDialogTitle(), + localizations.addDeviceDialogTitle, style: TextStyle(fontSize: 20, fontWeight: FontWeight.w600), ), const SizedBox(height: 16), @@ -207,8 +207,8 @@ class _CustomDeviceDialogState extends State { controller: _nameController, onChanged: (_) => setState(() {}), decoration: InputDecoration( - labelText: localizations.deviceName(), - hintText: localizations.deviceNameHint(), + labelText: localizations.deviceName, + hintText: localizations.deviceNameHint, prefixIcon: Icon(_selectedIcon), ), ), @@ -218,14 +218,14 @@ class _CustomDeviceDialogState extends State { onChanged: (_) => setState(() {}), keyboardType: TextInputType.number, decoration: InputDecoration( - labelText: localizations.baseRiskLabel(), - hintText: localizations.baseRiskHint(), + labelText: localizations.baseRiskLabel, + hintText: localizations.baseRiskHint, ), ), const SizedBox(height: 16), CheckboxListTile( contentPadding: EdgeInsets.zero, - title: Text(localizations.hasCamera()), + title: Text(localizations.hasCamera), value: _hasCamera, onChanged: (value) { setState(() { @@ -235,7 +235,7 @@ class _CustomDeviceDialogState extends State { ), CheckboxListTile( contentPadding: EdgeInsets.zero, - title: Text(localizations.hasMicrophone()), + title: Text(localizations.hasMicrophone), value: _hasMicrophone, onChanged: (value) { setState(() { @@ -244,7 +244,7 @@ class _CustomDeviceDialogState extends State { }, ), const SizedBox(height: 16), - Text(localizations.chooseIcon()), + Text(localizations.chooseIcon), const SizedBox(height: 8), Wrap( spacing: 8, @@ -284,7 +284,7 @@ class _CustomDeviceDialogState extends State { children: [ TextButton( onPressed: () => Navigator.pop(context), - child: Text(localizations.cancel()), + child: Text(localizations.cancel), ), const SizedBox(width: 8), ElevatedButton( @@ -303,7 +303,7 @@ class _CustomDeviceDialogState extends State { 'hasMicrophone': _hasMicrophone, }); }, - child: Text(localizations.add()), + child: Text(localizations.add), ), ], ), diff --git a/lib/widgets/language_switcher.dart b/lib/widgets/language_switcher.dart index 93c5b06..3af064b 100644 --- a/lib/widgets/language_switcher.dart +++ b/lib/widgets/language_switcher.dart @@ -53,14 +53,14 @@ class LanguageSwitcher extends StatelessWidget { Future _showLanguageDialog(BuildContext context) async { final dialogContext = navigatorKey?.currentContext ?? context; - final localizations = AppLocalizations.of(context); + final localizations = AppLocalizations.of(context)!; final selected = await showDialog( context: dialogContext, useRootNavigator: true, builder: (context) { final activeLanguageCode = Localizations.localeOf(context).languageCode; return AlertDialog( - title: Text(localizations.languageDialogTitle()), + title: Text(localizations.languageDialogTitle), content: SizedBox( width: 320, child: ListView( diff --git a/pubspec.lock b/pubspec.lock index 7d9d339..5874155 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -214,7 +214,7 @@ packages: source: hosted version: "4.8.0" intl: - dependency: transitive + dependency: "direct main" description: name: intl sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" diff --git a/pubspec.yaml b/pubspec.yaml index 20b0005..21ce784 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+8 +version: 1.0.0+9 environment: sdk: ^3.11.5 @@ -40,6 +40,7 @@ dependencies: pdf: ^3.11.3 share_plus: ^11.0.0 shared_preferences: ^2.5.3 + intl: any url_launcher: ^6.3.1 dev_dependencies: @@ -66,6 +67,8 @@ flutter_launcher_icons: # The following section is specific to Flutter packages. flutter: + generate: true + # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/test/app_localizations_test.dart b/test/app_localizations_test.dart index 05c423b..2e84dc2 100644 --- a/test/app_localizations_test.dart +++ b/test/app_localizations_test.dart @@ -2,11 +2,12 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:simplications/l10n/app_localizations.dart'; +import 'package:simplications/l10n/localization_lookup.dart'; void main() { - group('AppLocalizations key coverage', () { + group('Localization key coverage', () { test('all supported locales keep parity with English keys', () { - final keyCoverage = AppLocalizations.localizationKeysByLocale(); + final keyCoverage = LocalizationLookup.localizationKeysByLocale(); final enKeys = keyCoverage['en']; expect(enKeys, isNotNull); @@ -30,9 +31,9 @@ void main() { }); }); - group('AppLocalizations.translate', () { + group('LocalizationLookup.translate', () { test('falls back to English when locale is unsupported', () { - final value = AppLocalizations.translate( + final value = LocalizationLookup.translate( 'start', locale: const Locale('xx'), ); @@ -41,7 +42,7 @@ void main() { }); test('replaces parameter placeholders', () { - final value = AppLocalizations.translate( + final value = LocalizationLookup.translate( 'dontKnowHint', locale: const Locale('en'), params: {'count': '2', 'suffix': 's'}, @@ -52,7 +53,7 @@ void main() { }); test('uses explicit fallback for unknown keys', () { - final value = AppLocalizations.translate( + final value = LocalizationLookup.translate( 'missing_key_example', locale: const Locale('en'), fallback: 'fallback-value', @@ -62,7 +63,7 @@ void main() { }); test('returns key when unknown key has no fallback', () { - final value = AppLocalizations.translate( + final value = LocalizationLookup.translate( 'missing_key_example', locale: const Locale('en'), ); @@ -71,13 +72,13 @@ void main() { }); }); - group('AppLocalizations.activate', () { + group('LocalizationLookup.activate', () { test('updates active language code', () { - AppLocalizations.activate(const Locale('pl')); - expect(AppLocalizations.activeLanguageCode, 'pl'); + LocalizationLookup.activate(const Locale('pl')); + expect(LocalizationLookup.activeLanguageCode, 'pl'); - AppLocalizations.activate(const Locale('de')); - expect(AppLocalizations.activeLanguageCode, 'de'); + LocalizationLookup.activate(const Locale('de')); + expect(LocalizationLookup.activeLanguageCode, 'de'); }); }); } diff --git a/test/widget_test.dart b/test/widget_test.dart index d388941..0998437 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -5,6 +5,7 @@ // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. +import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:simplications/l10n/app_localizations.dart'; @@ -18,10 +19,10 @@ void main() { ); await tester.pumpAndSettle(); - final context = tester.element(find.byType(SimplicationsApp)); - final localizations = AppLocalizations.of(context); - final hasStart = find.text(localizations.start()).evaluate().isNotEmpty; - final hasResume = find.text(localizations.resume()).evaluate().isNotEmpty; + final context = tester.element(find.byType(Scaffold).first); + final localizations = AppLocalizations.of(context)!; + final hasStart = find.text(localizations.start).evaluate().isNotEmpty; + final hasResume = find.text(localizations.resume).evaluate().isNotEmpty; expect(hasStart || hasResume, isTrue); }); diff --git a/tool/extract_localizations.dart b/tool/extract_localizations.dart new file mode 100644 index 0000000..457ce8a --- /dev/null +++ b/tool/extract_localizations.dart @@ -0,0 +1,257 @@ +import 'dart:convert'; +import 'dart:io'; + +class _Parser { + _Parser(this.input, this.index); + + final String input; + int index; + + bool get isEof => index >= input.length; + + void _skipWhitespace() { + while (!isEof) { + if (index + 1 < input.length && + input[index] == '/' && + input[index + 1] == '/') { + index += 2; + while (!isEof && input[index] != '\n') { + index++; + } + continue; + } + if (index + 1 < input.length && + input[index] == '/' && + input[index + 1] == '*') { + index += 2; + while (index + 1 < input.length && + !(input[index] == '*' && input[index + 1] == '/')) { + index++; + } + if (index + 1 < input.length) { + index += 2; + } + continue; + } + final c = input.codeUnitAt(index); + if (c == 32 || c == 9 || c == 10 || c == 13) { + index++; + continue; + } + break; + } + } + + void _expectChar(String ch) { + _skipWhitespace(); + if (isEof || input[index] != ch) { + throw StateError('Expected "$ch" at index $index'); + } + index++; + } + + bool _tryConsumeChar(String ch) { + _skipWhitespace(); + if (!isEof && input[index] == ch) { + index++; + return true; + } + return false; + } + + String _parseStringLiteral() { + _skipWhitespace(); + if (isEof || (input[index] != "'" && input[index] != '"')) { + throw StateError('Expected string literal at index $index'); + } + final quote = input[index]; + index++; + + final buffer = StringBuffer(); + while (!isEof) { + final ch = input[index++]; + if (ch == quote) { + return buffer.toString(); + } + if (ch == r'\') { + if (isEof) { + throw StateError('Invalid escape at EOF'); + } + final esc = input[index++]; + switch (esc) { + case 'n': + buffer.write('\n'); + break; + case 'r': + buffer.write('\r'); + break; + case 't': + buffer.write('\t'); + break; + case "'": + buffer.write("'"); + break; + case '"': + buffer.write('"'); + break; + case r'\': + buffer.write(r'\'); + break; + default: + buffer.write(esc); + break; + } + } else { + buffer.write(ch); + } + } + throw StateError('Unterminated string literal'); + } + + String _parseConcatenatedString() { + var value = _parseStringLiteral(); + while (true) { + _skipWhitespace(); + if (!isEof && (input[index] == "'" || input[index] == '"')) { + value += _parseStringLiteral(); + continue; + } + break; + } + return value; + } + + Map _parseInnerMap() { + final map = {}; + _expectChar('{'); + while (true) { + _skipWhitespace(); + if (_tryConsumeChar('}')) { + break; + } + final key = _parseStringLiteral(); + _expectChar(':'); + final value = _parseConcatenatedString(); + map[key] = value; + _skipWhitespace(); + _tryConsumeChar(','); + } + return map; + } + + Map> parseOuterMap() { + final outer = >{}; + _expectChar('{'); + while (true) { + _skipWhitespace(); + if (_tryConsumeChar('}')) { + break; + } + final locale = _parseStringLiteral(); + _expectChar(':'); + final inner = _parseInnerMap(); + outer[locale] = inner; + _skipWhitespace(); + _tryConsumeChar(','); + } + return outer; + } +} + +void main() { + final source = File('lib/l10n/app_localizations.dart').readAsStringSync(); + const marker = + 'static const Map> _localizedValues ='; + final markerIndex = source.indexOf(marker); + if (markerIndex == -1) { + throw StateError('Could not find _localizedValues marker'); + } + + final mapStart = source.indexOf('{', markerIndex); + final parser = _Parser(source, mapStart); + final localizedValues = parser.parseOuterMap(); + + final l10nDir = Directory('lib/l10n'); + if (!l10nDir.existsSync()) { + l10nDir.createSync(recursive: true); + } + + for (final entry in localizedValues.entries) { + final map = {'@@locale': entry.key}; + map.addAll(entry.value); + final out = const JsonEncoder.withIndent(' ').convert(map); + File('lib/l10n/app_${entry.key}.arb').writeAsStringSync('$out\n'); + stdout.writeln('Wrote lib/l10n/app_${entry.key}.arb'); + } + + final buffer = StringBuffer() + ..writeln("import 'dart:ui';") + ..writeln() + ..writeln('class LocalizationLookup {') + ..writeln(" static Locale _activeLocale = const Locale('de');") + ..writeln() + ..writeln(' static void activate(Locale locale) {') + ..writeln(' _activeLocale = locale;') + ..writeln(' }') + ..writeln() + ..writeln( + ' static String get activeLanguageCode => _activeLocale.languageCode;', + ) + ..writeln() + ..writeln( + ' static const Map> valuesByLocale =', + ) + ..writeln(' >{'); + + final sortedLocales = localizedValues.keys.toList()..sort(); + for (final locale in sortedLocales) { + buffer.writeln(" '$locale': {"); + final sortedKeys = localizedValues[locale]!.keys.toList()..sort(); + for (final key in sortedKeys) { + final value = localizedValues[locale]![key]!; + buffer.writeln(' ${jsonEncode(key)}: ${jsonEncode(value)},'); + } + buffer.writeln(' },'); + } + + buffer + ..writeln(' };') + ..writeln() + ..writeln(' static String translate(') + ..writeln(' String key, {') + ..writeln(' String? fallback,') + ..writeln(' Locale? locale,') + ..writeln(' Map? params,') + ..writeln(' }) {') + ..writeln( + ' final languageCode = (locale ?? _activeLocale).languageCode;', + ) + ..writeln(' final langMap = valuesByLocale[languageCode];') + ..writeln(" final enMap = valuesByLocale['en'];") + ..writeln(" final deMap = valuesByLocale['de'];") + ..writeln( + ' var value = langMap?[key] ?? enMap?[key] ?? deMap?[key] ?? fallback ?? key;', + ) + ..writeln(' if (params != null && params.isNotEmpty) {') + ..writeln(' for (final entry in params.entries) {') + ..writeln( + " value = value.replaceAll('{' + entry.key + '}', entry.value);", + ) + ..writeln(' }') + ..writeln(' }') + ..writeln(' return value;') + ..writeln(' }') + ..writeln() + ..writeln(' static Map> localizationKeysByLocale() {') + ..writeln(' return {') + ..writeln(' for (final entry in valuesByLocale.entries)') + ..writeln(' entry.key: Set.from(entry.value.keys),') + ..writeln(' };') + ..writeln(' }') + ..writeln('}'); + + File( + 'lib/l10n/localization_lookup.dart', + ).writeAsStringSync('${buffer.toString()}\n'); + stdout.writeln('Wrote lib/l10n/localization_lookup.dart'); +} From 151b7366d0172dcdcd1ff8b767dcb29eda7b6dae Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 13 May 2026 15:52:27 +0200 Subject: [PATCH 5/5] Update Polish localization and increment version to 1.0.0+10 - Expanded the Polish localization file with detailed privacy recommendations for smart home devices. - Added new keys for various device types and privacy measures. - Updated existing translations for clarity and consistency. - Incremented the version number in pubspec.yaml to reflect the changes. --- lib/l10n/app_cs.arb | 553 ++++++++++++++++++++++++++++++++++---------- lib/l10n/app_da.arb | 553 ++++++++++++++++++++++++++++++++++---------- lib/l10n/app_fr.arb | 553 ++++++++++++++++++++++++++++++++++---------- lib/l10n/app_nl.arb | 553 ++++++++++++++++++++++++++++++++++---------- lib/l10n/app_pl.arb | 553 ++++++++++++++++++++++++++++++++++---------- pubspec.yaml | 2 +- 6 files changed, 2156 insertions(+), 611 deletions(-) diff --git a/lib/l10n/app_cs.arb b/lib/l10n/app_cs.arb index 749a8eb..3f5d688 100644 --- a/lib/l10n/app_cs.arb +++ b/lib/l10n/app_cs.arb @@ -1,154 +1,463 @@ { "@@locale": "cs", - "appTitle": "Simplications", - "welcomeTitle": "Simplications\nKontrola soukromí\nchytré domácnosti", - "welcomeDescription": "Zaznamenejte svá chytrá zařízení místnost po místnosti a získejte hodnocení soukromí s konkrétními doporučeními.", - "stepSelectRooms": "Vyberte místnost", - "stepCaptureDevices": "Zaznamenejte zařízení", - "stepAnswerQuestions": "Odpovězte na otázky", - "stepGetRisk": "Získejte rizikový profil a doporučení", - "start": "Začít", - "resume": "Pokračovat", + "a_access_logging_desc": "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_access_logging_title": "Enable access log", + "a_account_required_desc": "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_camera_consent_desc": "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_child_data_limits_desc": "Disable optional profile data and collect only the child data required for core functionality.", + "a_child_data_limits_title": "Minimize data collection", + "a_cloud_required_desc": "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_data_collection_desc": "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_data_collection_title": "Disable history upload", + "a_dont_know_desc": "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "a_dont_know_title": "Get to know device settings better", + "a_expert_access_control_granular_desc": "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_access_control_granular_title": "Introduce granular roles and accounts", + "a_expert_access_revocation_desc": "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_bystander_transparency_desc": "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_bystander_transparency_title": "Add transparency notices for bystanders", + "a_expert_child_data_protection_desc": "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_child_data_protection_title": "Strengthen child data protection", + "a_expert_data_retention_duration_desc": "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_sale_disabled_desc": "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_offline_functionality_desc": "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_offline_functionality_title": "Prioritize offline functionality", + "a_expert_sensitive_inference_controls_desc": "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_expert_sensitive_inference_controls_title": "Restrict inference features", + "a_expert_third_party_sharing_limited_desc": "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_update_support_window_desc": "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_vulnerability_process_desc": "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_family_access_desc": "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_family_access_title": "Separate access rights for household members", + "a_health_sharing_desc": "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_health_sharing_title": "Restrict health data sharing", + "a_informed_desc": "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_informed_title": "Inform household members", + "a_local_control_desc": "Use local scenes/schedules instead of cloud automations where available.", + "a_local_control_title": "Enable local automations", + "a_local_mode_desc": "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_local_mode_title": "Prefer offline use", + "a_location_tracking_desc": "Disable location tracking outside active use or allow it only while the app is in use.", + "a_location_tracking_title": "Reduce location sharing", + "a_map_privacy_desc": "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_mic_active_desc": "Use the physical mute switch or disable the microphone in settings.", + "a_mic_active_title": "Disable microphone when not in use", + "a_motion_detection_desc": "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_network_desc": "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_offline_control_desc": "Configure local schedules and control without cloud dependency if the device supports it.", + "a_offline_control_title": "Set up local control", + "a_offline_fallback_desc": "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_unlock_desc": "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_offline_unlock_title": "Secure offline access", + "a_parental_control_desc": "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_parental_control_title": "Set up parental controls", + "a_password_desc": "Replace the default password with a strong, unique password. Use a password manager.", + "a_password_title": "Change default password", + "a_permissions_desc": "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_permissions_title": "Restrict app permissions", + "a_recording_disable_desc": "Disable recording features by default and enable them only briefly when specifically needed.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_sensor_data_deletion_desc": "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_frequency_desc": "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_granularity_desc": "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_local_desc": "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_sensor_local_title": "Prefer local processing", + "a_sharing_restrictions_desc": "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_skills_permissions_desc": "Review which third-party skills have access. Disable unnecessary skills.", + "a_skills_permissions_title": "Review skills/integrations", + "a_tracking_disabled_desc": "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_two_factor_desc": "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_two_factor_title": "Enable two-factor authentication", + "a_updates_desc": "Enable automatic security updates in device or app settings.", + "a_updates_title": "Enable automatic updates", + "a_usage_tracking_desc": "Disable analytics, telemetry, and usage data collection in app settings.", + "a_usage_tracking_title": "Disable usage tracking", + "a_video_encryption_desc": "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_storage_desc": "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_video_storage_title": "Store recordings locally", + "a_vision_data_desc": "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_vision_data_title": "Process camera data locally only", + "a_voice_history_desc": "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_local_desc": "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_voice_local_title": "Enable local voice processing", "about": "O aplikaci", - "faq": "FAQ", - "roomSelectionTitle": "Výběr místnosti", - "roomQuestion": "Kterou místnost chcete nyní zkontrolovat?", - "roomInstruction": "Klepněte na místnost, zaznamenejte v ní zařízení a vraťte se sem, kde vyberete další místnost.", - "results": "Výsledky", - "alreadyEvaluated": "Již vyhodnoceno", - "notCompleted": "Nedokončeno", - "addRoom": "Přidat místnost", - "deviceTitlePrefix": "Zařízení", - "roomCheck": "Kontrola místnosti", - "deviceQuestion": "Která chytrá zařízení používáte v této místnosti?", - "deviceQuestionHint": "Klepněte na zařízení a odpovězte na otázky.", - "noKnownDevices": "Pro tuto místnost nejsou známá žádná zařízení. Můžete přidat vlastní zařízení.", - "addDevice": "Přidat\nzařízení", - "noDevice": "Žádné zařízení", - "nextRoom": "Další místnost", - "deleteDeviceTitle": "Smazat zařízení?", - "deleteDeviceBody": "Toto vlastní zařízení bude smazáno. Všechny navázané instance budou také odstraněny.", - "delete": "Smazat", - "cancel": "Zrušit", - "confirm": "Potvrdit", - "noDeviceDialogTitle": "V této místnosti nejsou zařízení?", - "noDeviceDialogBody": "Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", - "noDeviceDialogBodyWithExisting": "Existující výběry zařízení pro tuto místnost budou zahozeny. Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", - "questionnaireTitle": "Otázky", - "connectedDevice": "Připojené zařízení", - "done": "Hotovo", - "yes": "Ano", - "no": "Ne", - "dontKnow": "Nevím", - "notApplicableForDevice": "Tato otázka se na moje zařízení nevztahuje", - "languageDialogTitle": "Vyberte jazyk", - "currentLanguage": "Aktuální jazyk", - "aboutScreenTitle": "O aplikaci", - "aboutSubtitle": "Výzkumný projekt zaměřený na soukromí chytré domácnosti", - "aboutProjectName": "Simplications", - "aboutPartnerTuChemnitz": "Technická univerzita v Chemnitzu", "aboutPartnerHsAnhalt": "Vysoká škola Anhalt", + "aboutPartnerTuChemnitz": "Technická univerzita v Chemnitzu", "aboutPartnerVzSachsen": "Spotřebitelské centrum Sasko", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "O aplikaci", + "aboutSubtitle": "Výzkumný projekt zaměřený na soukromí chytré domácnosti", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", - "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", - "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", - "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", - "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", - "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", - "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", - "websiteOpenFailed": "Web se nepodařilo otevřít.", - "deleteAllDataTitle": "Smazat všechna data?", - "deleteAllDataBody": "Všechny zaznamenané místnosti, zařízení a odpovědi budou trvale smazány. Tuto akci nelze vrátit zpět.", - "deleteAllDataButton": "Smazat data", + "add": "Přidat", + "addDevice": "Přidat\nzařízení", + "addDeviceDialogTitle": "Přidat nové zařízení", + "addRoom": "Přidat místnost", + "addRoomDialogTitle": "Přidat novou místnost", "allDataDeleted": "Všechna uložená data byla smazána.", - "projectPartners": "Projektoví partneři", - "coordinationFunding": "Koordinace a financování", + "alreadyEvaluated": "Již vyhodnoceno", + "appTitle": "Simplications", + "baseRiskHint": "např. 30 (nízké) až 60 (vysoké)", + "baseRiskLabel": "Základní skóre rizika (0-100)", + "camera": "Kamera", + "cancel": "Zrušit", + "catalogButton": "Otevřít úplný katalog opatření", + "catalogSnackBarPrefix": "Katalog", + "chooseIcon": "Vyberte ikonu:", + "confirm": "Potvrdit", + "connectedDevice": "Připojené zařízení", "coordination": "Koordinace", - "platformPrivacy": "Plattform Privatheit", - "fundingAgency": "Poskytovatel financování", - "fundingAgencyValue": "Spolkové ministerstvo pro výzkum, technologie a vesmír\nFKZ 16KIS1868K", - "website": "Web", + "coordinationFunding": "Koordinace a financování", + "currentLanguage": "Aktuální jazyk", "dangerZone": "Nebezpečná zóna", "dangerZoneWarning": "Pozor: Tato akce trvale odstraní všechna uložená data aplikace.", - "faqScreenTitle": "Často kladené otázky", - "faqQuestionWhatIs": "Co je Simplications?", - "faqAnswerWhatIs": "Simplications je výzkumný projekt zaměřený na soukromí v chytré domácnosti. Tato aplikace je jednou z částí projektu a provede vás místnost po místnosti vašimi zařízeními s praktickými doporučeními na základě vašich odpovědí.", - "faqQuestionHowWorks": "Jak kontrola funguje?", + "delete": "Smazat", + "deleteAllDataBody": "Všechny zaznamenané místnosti, zařízení a odpovědi budou trvale smazány. Tuto akci nelze vrátit zpět.", + "deleteAllDataButton": "Smazat data", + "deleteAllDataTitle": "Smazat všechna data?", + "deleteDeviceBody": "Toto vlastní zařízení bude smazáno. Všechny navázané instance budou také odstraněny.", + "deleteDeviceTitle": "Smazat zařízení?", + "device_baby_monitor": "Baby monitor / baby camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_humidity_sensor": "Humidity sensor", + "device_indoor_camera": "Smart indoor camera", + "device_light_sensor": "Light sensor", + "device_outdoor_camera": "Smart outdoor camera", + "device_robot_vacuum": "Robot vacuum", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_smart_blind": "Smart blind / shutter", + "device_smart_coffee": "Smart coffee machine", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_fridge": "Smart fridge", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_oven": "Smart oven / stove", + "device_smart_plug": "Smart plug", + "device_smart_printer": "Smart printer", + "device_smart_router": "Smart router / mesh system", + "device_smart_scale": "Smart scale", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_toy": "Smart toy", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smart washer / dryer", + "device_temperature_sensor": "Temperature sensor", + "deviceName": "Název zařízení", + "deviceNameHint": "např. Můj chytrý reproduktor", + "deviceQuestion": "Která chytrá zařízení používáte v této místnosti?", + "deviceQuestionHint": "Klepněte na zařízení a odpovězte na otázky.", + "devicesRated": "hodnocených zařízení", + "deviceTitlePrefix": "Zařízení", + "done": "Hotovo", + "dontKnow": "Nevím", + "dontKnowHint": " {count} odpověď{suffix} byla označena jako \"Nevím\" - věnujte čas lepšímu poznání nastavení svých zařízení.", + "evaluatedDevices": "Vyhodnocená zařízení", + "expertModeQuestionnaireHint": "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourcesHint": "Methodologically inspired by the following research projects:", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeTitle": "Expert mode", + "expertModeToggleHint": "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeToggleLabel": "Enable detailed expert mode", + "exportFailed": "Export se nezdařil", + "faq": "FAQ", + "faqAnswerCanShare": "Ano. Na obrazovce výsledků můžete přehled exportovat a sdílet jako text nebo PDF.", + "faqAnswerDataStored": "Vaše hodnocení je uloženo lokálně ve vašem zařízení. V obrazovce O aplikaci můžete všechna uložená data kdykoli smazat.", "faqAnswerHowWorks": "Vyberete místnost, přidáte chytrá zařízení, odpovíte na otázky pro konkrétní zařízení a získáte profil rizik s prioritizovanými kroky.", - "faqQuestionNoPolicy": "Proč tu není zásada ochrany osobních údajů?", + "faqAnswerLegalAdvice": "Ne. Simplications poskytuje praktickou orientaci a doporučení, nenahrazuje však právní nebo profesionální bezpečnostní poradenství.", + "faqAnswerNoDevice": "Můžete přidat vlastní zařízení a kontrolu dokončit. Doporučení pak vycházejí z vaší konfigurace a odpovědí.", "faqAnswerNoPolicy": "Protože neshromažďujeme vaše data.", + "faqAnswerRiskMeaning": "Tyto úrovně ukazují, jak silně může vaše současné nastavení zvyšovat rizika pro soukromí. Jde o orientační úrovně, ne o právní nebo technickou certifikaci.", + "faqAnswerWhatIs": "Simplications je výzkumný projekt zaměřený na soukromí v chytré domácnosti. Tato aplikace je jednou z částí projektu a provede vás místnost po místnosti vašimi zařízeními s praktickými doporučeními na základě vašich odpovědí.", + "faqQuestionCanShare": "Mohu sdílet své výsledky?", "faqQuestionDataStored": "Kde jsou moje data uložena?", - "faqAnswerDataStored": "Vaše hodnocení je uloženo lokálně ve vašem zařízení. V obrazovce O aplikaci můžete všechna uložená data kdykoli smazat.", + "faqQuestionHowWorks": "Jak kontrola funguje?", + "faqQuestionLegalAdvice": "Jde o právní poradenství?", "faqQuestionNoDevice": "Co když moje zařízení není v seznamu?", - "faqAnswerNoDevice": "Můžete přidat vlastní zařízení a kontrolu dokončit. Doporučení pak vycházejí z vaší konfigurace a odpovědí.", + "faqQuestionNoPolicy": "Proč tu není zásada ochrany osobních údajů?", "faqQuestionRiskMeaning": "Co znamená nízké, střední a vysoké riziko?", - "faqAnswerRiskMeaning": "Tyto úrovně ukazují, jak silně může vaše současné nastavení zvyšovat rizika pro soukromí. Jde o orientační úrovně, ne o právní nebo technickou certifikaci.", - "faqQuestionLegalAdvice": "Jde o právní poradenství?", - "faqAnswerLegalAdvice": "Ne. Simplications poskytuje praktickou orientaci a doporučení, nenahrazuje však právní nebo profesionální bezpečnostní poradenství.", - "faqQuestionCanShare": "Mohu sdílet své výsledky?", - "faqAnswerCanShare": "Ano. Na obrazovce výsledků můžete přehled exportovat a sdílet jako text nebo PDF.", - "roomDeleteTitle": "Smazat místnost?", - "roomDeleteBody": "Tato vlastní místnost bude smazána. Všechna propojená zařízení budou také odstraněna.", - "add": "Přidat", - "addRoomDialogTitle": "Přidat novou místnost", - "roomName": "Název místnosti", - "roomNameHint": "např. Obývací pokoj, Garáž", - "chooseIcon": "Vyberte ikonu:", - "addDeviceDialogTitle": "Přidat nové zařízení", - "deviceName": "Název zařízení", - "deviceNameHint": "např. Můj chytrý reproduktor", - "baseRiskLabel": "Základní skóre rizika (0-100)", - "baseRiskHint": "např. 30 (nízké) až 60 (vysoké)", + "faqQuestionWhatIs": "Co je Simplications?", + "faqScreenTitle": "Často kladené otázky", + "fullCatalog": "Úplný katalog opatření", + "fundingAgency": "Poskytovatel financování", + "fundingAgencyValue": "Spolkové ministerstvo pro výzkum, technologie a vesmír\nFKZ 16KIS1868K", + "gen_rec_0": "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": "Use a household consent check before buying new devices and involve all household members.", + "generalRecommendations": "Obecná doporučení", + "generalRecommendationsHint": "Tato opatření platí pro celou vaši chytrou domácnost bez ohledu na jednotlivá zařízení.", "hasCamera": "Má kameru?", "hasMicrophone": "Má mikrofon?", - "camera": "Kamera", + "highRisk": "Vysoké riziko", + "howRiskCalculated": "Jak se riziko počítá?", + "languageDialogTitle": "Vyberte jazyk", + "lowRisk": "Nízké riziko", + "mediumRisk": "Střední riziko", "microphone": "Mikrofon", - "summaryTitle": "Váš výsledek", - "shareResult": "Sdílet výsledek", - "shareAsText": "Sdílet jako text", - "shareAsPdf": "Sdílet jako PDF", - "restart": "Začít znovu", + "nextRoom": "Další místnost", + "no": "Ne", + "noActionHigh": "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává vysoké zbytkové riziko.", + "noActionLow": "Vše je v pořádku - nejsou nutná žádná opatření.", + "noActionMedium": "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává střední zbytkové riziko.", + "noDevice": "Žádné zařízení", + "noDeviceDialogBody": "Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", + "noDeviceDialogBodyWithExisting": "Existující výběry zařízení pro tuto místnost budou zahozeny. Tato místnost bude uzavřena bez zařízení a neovlivní hodnocení.", + "noDeviceDialogTitle": "V této místnosti nejsou zařízení?", "noDevicesCaptured": "Nebyla zaznamenána žádná zařízení.", "noDevicesHint": "Spusťte to znovu a přidejte zařízení, abyste získali hodnocení.", - "highRisk": "Vysoké riziko", - "mediumRisk": "Střední riziko", - "lowRisk": "Nízké riziko", - "exportFailed": "Export se nezdařil", - "summaryShareSubject": "Výsledek Simplications", - "summarySharePdfText": "Zpráva Simplications jako PDF", - "overview": "Přehled", - "evaluatedDevices": "Vyhodnocená zařízení", - "skippedDevicesHint": "{count} zařízení přeskočeno, protože dotazník nebyl dokončen.", - "overallRisk": "Celkové riziko", - "generalRecommendations": "Obecná doporučení", - "generalRecommendationsHint": "Tato opatření platí pro celou vaši chytrou domácnost bez ohledu na jednotlivá zařízení.", - "fullCatalog": "Úplný katalog opatření", - "catalogButton": "Otevřít úplný katalog opatření", - "risk": "Riziko", + "noKnownDevices": "Pro tuto místnost nejsou známá žádná zařízení. Můžete přidat vlastní zařízení.", + "notApplicableForDevice": "Tato otázka se na moje zařízení nevztahuje", + "notCompleted": "Nedokončeno", "note": "Poznámka", + "optional": "Volitelné", + "overallHigh": "Několik zařízení má významná rizika pro soukromí/ochranu dat. Prosím co nejdříve zaveďte opatření s vysokou prioritou.", + "overallLow": "Skvělá práce! Vaše zařízení jsou většinou bezpečně nastavena. Přesto si projděte obecná doporučení.", + "overallMedium": "Je zde prostor ke zlepšení. Projděte si doporučení pro jednotlivá zařízení.", + "overallRisk": "Celkové riziko", + "overview": "Přehled", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projektoví partneři", + "q_access_logging_hint": "An access log helps you detect suspicious activity.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_account_required_hint": "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_account_required_text": "Can you use the device without a mandatory online account?", + "q_camera_consent_hint": "Cameras in communal or private areas require the consent of all residents.", + "q_camera_consent_text": "Does the camera only record areas for which everyone affected has given their consent?", + "q_child_data_limits_hint": "Child-focused devices should collect and store minimal data.", + "q_child_data_limits_text": "Can you limit which personal data the toy collects?", + "q_cloud_required_hint": "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_cloud_required_text": "Does floor-plan navigation work without cloud connection?", + "q_data_collection_hint": "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_data_collection_text": "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_expert_access_control_granular_hint": "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_access_control_granular_text": "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_revocation_hint": "Fast revocation is crucial when devices are shared or users change.", + "q_expert_access_revocation_text": "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_bystander_transparency_hint": "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_bystander_transparency_text": "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_child_data_protection_hint": "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_child_data_protection_text": "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_data_retention_duration_hint": "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_data_retention_duration_text": "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_sale_disabled_hint": "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_data_sale_disabled_text": "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_offline_functionality_hint": "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_offline_functionality_text": "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_sensitive_inference_controls_hint": "Inference controls reduce risks from secondary use of sensitive data.", + "q_expert_sensitive_inference_controls_text": "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_third_party_sharing_limited_hint": "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_third_party_sharing_limited_text": "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_update_support_window_hint": "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_update_support_window_text": "Is it known how long the vendor guarantees security updates?", + "q_expert_vulnerability_process_hint": "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_vulnerability_process_text": "Is there a documented process for reporting and fixing vulnerabilities?", + "q_family_access_hint": "Household members should have control without visitors changing everything.", + "q_family_access_text": "Can you control who may adjust heating (e.g., restrict guests)?", + "q_health_sharing_hint": "Health data is sensitive. Only authorized apps should have access.", + "q_health_sharing_text": "Can you control which third parties can access your health data?", + "q_informed_hint": "All household members should know what data the device captures.", + "q_informed_text": "Are all people in the household informed about this device and its function?", + "q_local_control_hint": "Local scenes and schedules protect your privacy better.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_mode_hint": "Offline use protects usage data from being sent to the vendor.", + "q_local_mode_text": "Can you use the device via HDMI or local sources without internet?", + "q_location_tracking_hint": "GPS tracking uses battery and can reveal movement patterns.", + "q_location_tracking_text": "Can you disable location tracking when not needed?", + "q_map_privacy_hint": "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_map_privacy_text": "Are created floor plans stored exclusively on the device locally?", + "q_mic_active_hint": "Smart speakers and devices with microphones can be activated unintentionally.", + "q_mic_active_text": "Do you deactivate the microphone when you are not actively using it?", + "q_motion_detection_hint": "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_motion_detection_text": "Can you disable or schedule motion detection when you are at home?", + "q_network_hint": "A dedicated network for smart devices protects your main home network.", + "q_network_text": "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_offline_control_hint": "Offline operation or local automation protects data from cloud access.", + "q_offline_control_text": "Can you operate the thermostat offline (without internet)?", + "q_offline_fallback_hint": "Reliable local operation is important for daily use and privacy.", + "q_offline_fallback_text": "Do devices still work if internet or app connection fails?", + "q_offline_unlock_hint": "Backup options prevent lockout during internet or power outages.", + "q_offline_unlock_text": "Can you unlock the lock offline (e.g., with code or key)?", + "q_parental_control_hint": "Parental controls should allow restricting contacts and features.", + "q_parental_control_text": "Are there parental control features to manage the toy?", + "q_password_hint": "Default passwords are often publicly known and easy to crack.", + "q_password_text": "Have you changed the default password of the device or its linked account?", + "q_permissions_hint": "Only permissions that are truly needed should be enabled.", + "q_permissions_text": "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_recording_disable_hint": "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_recording_disable_text": "Can you disable audio and video recording on the device?", + "q_sensor_data_deletion_hint": "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_data_deletion_text": "Are older measurement values deleted automatically or on request?", + "q_sensor_frequency_hint": "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_frequency_text": "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_granularity_hint": "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_granularity_text": "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_local_hint": "Local processing prevents the vendor from accessing your measurement data.", + "q_sensor_local_text": "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sharing_restrictions_hint": "You should be able to precisely control access to video recordings.", + "q_sharing_restrictions_text": "Can you control who can access live view and recordings?", + "q_skills_permissions_hint": "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_skills_permissions_text": "Do you regularly review which skills have access to your account?", + "q_tracking_disabled_hint": "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_tracking_disabled_text": "Can you completely disable advertising and tracking features?", + "q_two_factor_hint": "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_two_factor_text": "Is two-factor authentication (2FA) available for the lock account?", + "q_updates_hint": "Updates close known security vulnerabilities promptly.", + "q_updates_text": "Are automatic security updates enabled for the device?", + "q_usage_tracking_hint": "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_usage_tracking_text": "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_video_encryption_hint": "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_encryption_text": "Is video recording and transmission encrypted end-to-end?", + "q_video_storage_hint": "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_video_storage_text": "Are recordings stored locally (not only in the vendor cloud)?", + "q_vision_data_hint": "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_vision_data_text": "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_voice_history_hint": "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_history_text": "Can you delete voice recordings from device history or disable this feature?", + "q_voice_local_hint": "Local processing reduces the amount of data sent to the cloud.", + "q_voice_local_text": "Is voice processing performed partly on the device locally?", + "questionnaireTitle": "Otázky", "recommendations": "Doporučení", - "urgent": "Naléhavé", "recommended": "Doporučeno", - "optional": "Volitelné", - "social": "Sociální", - "technical": "Technické", + "reportExportedAt": "Exportováno", + "restart": "Začít znovu", + "results": "Výsledky", + "resume": "Pokračovat", + "risk": "Riziko", + "risk_hint_camera": "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_child_room": "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "risk_hint_lock": "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_mic": "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "room_basement": "Basement / Pantry", + "room_bathroom": "Bathroom", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_garden": "Garden / Outdoor area", + "room_hallway": "Hallway / Entrance", + "room_kitchen": "Kitchen", + "room_living": "Living room", + "room_office": "Office", + "room_whole_home": "Entire home", + "roomCheck": "Kontrola místnosti", + "roomDeleteBody": "Tato vlastní místnost bude smazána. Všechna propojená zařízení budou také odstraněna.", + "roomDeleteTitle": "Smazat místnost?", + "roomInstruction": "Klepněte na místnost, zaznamenejte v ní zařízení a vraťte se sem, kde vyberete další místnost.", + "roomName": "Název místnosti", + "roomNameHint": "např. Obývací pokoj, Garáž", + "roomQuestion": "Kterou místnost chcete nyní zkontrolovat?", + "roomSelectionTitle": "Výběr místnosti", "security": "Zabezpečení", + "shareAsPdf": "Sdílet jako PDF", + "shareAsText": "Sdílet jako text", + "shareResult": "Sdílet výsledek", + "skippedDevicesHint": "{count} zařízení přeskočeno, protože dotazník nebyl dokončen.", + "sl_access_logging": "No access log available", + "sl_account_required": "Mandatory vendor account required", + "sl_base_risk": "Baseline risk of device type", + "sl_camera_consent": "No consent for camera-covered area", + "sl_child_data_limits": "Data collection not limited", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_data_collection": "Temperature history sent to vendor", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_access_revocation": "Individual access revocation not possible", + "sl_expert_bystander_transparency": "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": "Child-data protection measures missing", + "sl_expert_data_retention_duration": "Retention duration unclear or too long", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_offline_functionality": "Meaningful offline operation not possible", + "sl_expert_sensitive_inference_controls": "Controls against sensitive inference missing", + "sl_expert_third_party_sharing_limited": "Third-party sharing not limited", + "sl_expert_update_support_window": "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_family_access": "Access cannot be restricted", + "sl_health_sharing": "Health data shared with third parties", + "sl_informed": "Household members not informed", + "sl_local_control": "Automations require internet connection", + "sl_local_mode": "No offline operation possible", + "sl_location_tracking": "Location tracking enabled", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_mic_active": "Microphone not disabled when unused", + "sl_motion_detection": "Motion detection always active", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_offline_control": "No offline operation possible", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_parental_control": "Parental controls not configured", + "sl_password": "Default password not changed", + "sl_permissions": "App permissions not reduced", + "sl_recording_disable": "Recording cannot be disabled", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_two_factor": "Two-factor authentication missing", + "sl_updates": "Automatic updates not enabled", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", "smartHomePrivacyHeader": "Vaše soukromí chytré domácnosti", - "devicesRated": "hodnocených zařízení", - "howRiskCalculated": "Jak se riziko počítá?", + "social": "Sociální", + "start": "Začít", + "stepAnswerQuestions": "Odpovězte na otázky", + "stepCaptureDevices": "Zaznamenejte zařízení", + "stepGetRisk": "Získejte rizikový profil a doporučení", + "stepSelectRooms": "Vyberte místnost", + "summarySharePdfText": "Zpráva Simplications jako PDF", + "summaryShareSubject": "Výsledek Simplications", + "summaryTitle": "Váš výsledek", + "technical": "Technické", "totalScore": "Celkem", - "catalogSnackBarPrefix": "Katalog", - "reportExportedAt": "Exportováno", - "noActionLow": "Vše je v pořádku - nejsou nutná žádná opatření.", - "noActionMedium": "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává střední zbytkové riziko.", - "noActionHigh": "Z vašich odpovědí nyní nelze odvodit konkrétní opatření, ale zůstává vysoké zbytkové riziko.", - "overallLow": "Skvělá práce! Vaše zařízení jsou většinou bezpečně nastavena. Přesto si projděte obecná doporučení.", - "overallMedium": "Je zde prostor ke zlepšení. Projděte si doporučení pro jednotlivá zařízení.", - "overallHigh": "Několik zařízení má významná rizika pro soukromí/ochranu dat. Prosím co nejdříve zaveďte opatření s vysokou prioritou.", - "dontKnowHint": " {count} odpověď{suffix} byla označena jako \"Nevím\" - věnujte čas lepšímu poznání nastavení svých zařízení." + "urgent": "Naléhavé", + "website": "Web", + "websiteOpenFailed": "Web se nepodařilo otevřít.", + "welcomeDescription": "Zaznamenejte svá chytrá zařízení místnost po místnosti a získejte hodnocení soukromí s konkrétními doporučeními.", + "welcomeTitle": "Simplications\nKontrola soukromí\nchytré domácnosti", + "yes": "Ano" } diff --git a/lib/l10n/app_da.arb b/lib/l10n/app_da.arb index 48dc54b..3a6d285 100644 --- a/lib/l10n/app_da.arb +++ b/lib/l10n/app_da.arb @@ -1,154 +1,463 @@ { "@@locale": "da", - "appTitle": "Simplications", - "welcomeTitle": "Simplications\nSmart Home\nprivatlivstjek", - "welcomeDescription": "Registrer dine smarte enheder rum for rum, og få en privatlivsvurdering med konkrete anbefalinger.", - "stepSelectRooms": "Vælg ét rum", - "stepCaptureDevices": "Registrer enheder", - "stepAnswerQuestions": "Besvar spørgsmål", - "stepGetRisk": "Få risikoprofil og anbefalinger", - "start": "Start", - "resume": "Fortsæt", + "a_access_logging_desc": "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_access_logging_title": "Enable access log", + "a_account_required_desc": "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_camera_consent_desc": "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_child_data_limits_desc": "Disable optional profile data and collect only the child data required for core functionality.", + "a_child_data_limits_title": "Minimize data collection", + "a_cloud_required_desc": "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_data_collection_desc": "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_data_collection_title": "Disable history upload", + "a_dont_know_desc": "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "a_dont_know_title": "Get to know device settings better", + "a_expert_access_control_granular_desc": "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_access_control_granular_title": "Introduce granular roles and accounts", + "a_expert_access_revocation_desc": "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_bystander_transparency_desc": "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_bystander_transparency_title": "Add transparency notices for bystanders", + "a_expert_child_data_protection_desc": "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_child_data_protection_title": "Strengthen child data protection", + "a_expert_data_retention_duration_desc": "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_sale_disabled_desc": "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_offline_functionality_desc": "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_offline_functionality_title": "Prioritize offline functionality", + "a_expert_sensitive_inference_controls_desc": "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_expert_sensitive_inference_controls_title": "Restrict inference features", + "a_expert_third_party_sharing_limited_desc": "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_update_support_window_desc": "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_vulnerability_process_desc": "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_family_access_desc": "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_family_access_title": "Separate access rights for household members", + "a_health_sharing_desc": "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_health_sharing_title": "Restrict health data sharing", + "a_informed_desc": "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_informed_title": "Inform household members", + "a_local_control_desc": "Use local scenes/schedules instead of cloud automations where available.", + "a_local_control_title": "Enable local automations", + "a_local_mode_desc": "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_local_mode_title": "Prefer offline use", + "a_location_tracking_desc": "Disable location tracking outside active use or allow it only while the app is in use.", + "a_location_tracking_title": "Reduce location sharing", + "a_map_privacy_desc": "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_mic_active_desc": "Use the physical mute switch or disable the microphone in settings.", + "a_mic_active_title": "Disable microphone when not in use", + "a_motion_detection_desc": "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_network_desc": "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_offline_control_desc": "Configure local schedules and control without cloud dependency if the device supports it.", + "a_offline_control_title": "Set up local control", + "a_offline_fallback_desc": "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_unlock_desc": "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_offline_unlock_title": "Secure offline access", + "a_parental_control_desc": "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_parental_control_title": "Set up parental controls", + "a_password_desc": "Replace the default password with a strong, unique password. Use a password manager.", + "a_password_title": "Change default password", + "a_permissions_desc": "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_permissions_title": "Restrict app permissions", + "a_recording_disable_desc": "Disable recording features by default and enable them only briefly when specifically needed.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_sensor_data_deletion_desc": "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_frequency_desc": "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_granularity_desc": "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_local_desc": "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_sensor_local_title": "Prefer local processing", + "a_sharing_restrictions_desc": "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_skills_permissions_desc": "Review which third-party skills have access. Disable unnecessary skills.", + "a_skills_permissions_title": "Review skills/integrations", + "a_tracking_disabled_desc": "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_two_factor_desc": "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_two_factor_title": "Enable two-factor authentication", + "a_updates_desc": "Enable automatic security updates in device or app settings.", + "a_updates_title": "Enable automatic updates", + "a_usage_tracking_desc": "Disable analytics, telemetry, and usage data collection in app settings.", + "a_usage_tracking_title": "Disable usage tracking", + "a_video_encryption_desc": "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_storage_desc": "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_video_storage_title": "Store recordings locally", + "a_vision_data_desc": "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_vision_data_title": "Process camera data locally only", + "a_voice_history_desc": "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_local_desc": "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_voice_local_title": "Enable local voice processing", "about": "Om", - "faq": "FAQ", - "roomSelectionTitle": "Vælg rum", - "roomQuestion": "Hvilket rum vil du tjekke nu?", - "roomInstruction": "Tryk på et rum, registrer enhederne dér, og kom tilbage hertil for at vælge næste rum.", - "results": "Resultater", - "alreadyEvaluated": "Allerede vurderet", - "notCompleted": "Ikke afsluttet", - "addRoom": "Tilføj rum", - "deviceTitlePrefix": "Enheder", - "roomCheck": "Rumtjek", - "deviceQuestion": "Hvilke smarte enheder bruger du i dette rum?", - "deviceQuestionHint": "Tryk på en enhed for at besvare spørgsmålene.", - "noKnownDevices": "Ingen kendte enheder for dette rum. Du kan tilføje din egen enhed.", - "addDevice": "Tilføj\nenhed", - "noDevice": "Ingen enhed", - "nextRoom": "Næste rum", - "deleteDeviceTitle": "Slet enhed?", - "deleteDeviceBody": "Denne brugerdefinerede enhed slettes. Alle tilknyttede instanser fjernes også.", - "delete": "Slet", - "cancel": "Annuller", - "confirm": "Bekræft", - "noDeviceDialogTitle": "Ingen enheder i dette rum?", - "noDeviceDialogBody": "Dette rum afsluttes uden enheder og påvirker ikke scoren.", - "noDeviceDialogBodyWithExisting": "Eksisterende enhedsvalg for dette rum kasseres. Dette rum afsluttes uden enheder og påvirker ikke scoren.", - "questionnaireTitle": "Spørgsmål", - "connectedDevice": "Tilsluttet enhed", - "done": "Færdig", - "yes": "Ja", - "no": "Nej", - "dontKnow": "Ved ikke", - "notApplicableForDevice": "Dette spørgsmål gælder ikke for min enhed", - "languageDialogTitle": "Vælg sprog", - "currentLanguage": "Nuværende sprog", - "aboutScreenTitle": "Om appen", - "aboutSubtitle": "Forskningsprojekt om privatliv i smarte hjem", - "aboutProjectName": "Simplications", - "aboutPartnerTuChemnitz": "Teknisk Universitet i Chemnitz", "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerTuChemnitz": "Teknisk Universitet i Chemnitz", "aboutPartnerVzSachsen": "Forbrugercenter Sachsen", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "Om appen", + "aboutSubtitle": "Forskningsprojekt om privatliv i smarte hjem", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", - "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", - "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", - "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", - "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", - "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", - "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", - "websiteOpenFailed": "Kunne ikke åbne webstedet.", - "deleteAllDataTitle": "Slet alle data?", - "deleteAllDataBody": "Alle registrerede rum, enheder og svar slettes permanent. Handlingen kan ikke fortrydes.", - "deleteAllDataButton": "Slet data", + "add": "Tilføj", + "addDevice": "Tilføj\nenhed", + "addDeviceDialogTitle": "Tilføj ny enhed", + "addRoom": "Tilføj rum", + "addRoomDialogTitle": "Tilføj nyt rum", "allDataDeleted": "Alle gemte data er blevet slettet.", - "projectPartners": "Projektpartnere", - "coordinationFunding": "Koordination og finansiering", + "alreadyEvaluated": "Allerede vurderet", + "appTitle": "Simplications", + "baseRiskHint": "f.eks. 30 (lav) til 60 (høj)", + "baseRiskLabel": "Basisrisikoscore (0-100)", + "camera": "Kamera", + "cancel": "Annuller", + "catalogButton": "Åbn fuldt handlingskatalog", + "catalogSnackBarPrefix": "Katalog", + "chooseIcon": "Vælg ikon:", + "confirm": "Bekræft", + "connectedDevice": "Tilsluttet enhed", "coordination": "Koordination", - "platformPrivacy": "Plattform Privatheit", - "fundingAgency": "Finansieringsorgan", - "fundingAgencyValue": "Tysk forbundsministerium for forskning, teknologi og rumfart\nBevilling 16KIS1868K", - "website": "Websted", + "coordinationFunding": "Koordination og finansiering", + "currentLanguage": "Nuværende sprog", "dangerZone": "Farezone", "dangerZoneWarning": "Advarsel: Denne handling fjerner alle gemte app-data permanent.", - "faqScreenTitle": "Ofte stillede spørgsmål", - "faqQuestionWhatIs": "Hvad er Simplications?", - "faqAnswerWhatIs": "Simplications er et forskningsprojekt om privatliv i smarte hjem. Denne app er en del af projektet og guider dig rum for rum gennem dine enheder med praktiske anbefalinger baseret på dine svar.", - "faqQuestionHowWorks": "Hvordan fungerer tjekket?", + "delete": "Slet", + "deleteAllDataBody": "Alle registrerede rum, enheder og svar slettes permanent. Handlingen kan ikke fortrydes.", + "deleteAllDataButton": "Slet data", + "deleteAllDataTitle": "Slet alle data?", + "deleteDeviceBody": "Denne brugerdefinerede enhed slettes. Alle tilknyttede instanser fjernes også.", + "deleteDeviceTitle": "Slet enhed?", + "device_baby_monitor": "Baby monitor / baby camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_humidity_sensor": "Humidity sensor", + "device_indoor_camera": "Smart indoor camera", + "device_light_sensor": "Light sensor", + "device_outdoor_camera": "Smart outdoor camera", + "device_robot_vacuum": "Robot vacuum", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_smart_blind": "Smart blind / shutter", + "device_smart_coffee": "Smart coffee machine", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_fridge": "Smart fridge", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_oven": "Smart oven / stove", + "device_smart_plug": "Smart plug", + "device_smart_printer": "Smart printer", + "device_smart_router": "Smart router / mesh system", + "device_smart_scale": "Smart scale", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_toy": "Smart toy", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smart washer / dryer", + "device_temperature_sensor": "Temperature sensor", + "deviceName": "Enhedsnavn", + "deviceNameHint": "f.eks. Min smarte højttaler", + "deviceQuestion": "Hvilke smarte enheder bruger du i dette rum?", + "deviceQuestionHint": "Tryk på en enhed for at besvare spørgsmålene.", + "devicesRated": "vurderede enheder", + "deviceTitlePrefix": "Enheder", + "done": "Færdig", + "dontKnow": "Ved ikke", + "dontKnowHint": " {count} svar{suffix} er markeret som \"Ved ikke\" - brug tid på at lære dine enhedsindstillinger bedre at kende.", + "evaluatedDevices": "Vurderede enheder", + "expertModeQuestionnaireHint": "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourcesHint": "Methodologically inspired by the following research projects:", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeTitle": "Expert mode", + "expertModeToggleHint": "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeToggleLabel": "Enable detailed expert mode", + "exportFailed": "Eksport mislykkedes", + "faq": "FAQ", + "faqAnswerCanShare": "Ja. På resultatskærmen kan du eksportere og dele din opsummering som tekst eller PDF.", + "faqAnswerDataStored": "Dine vurderingsdata gemmes lokalt på din enhed. På Om-skærmen kan du til enhver tid slette alle gemte data.", "faqAnswerHowWorks": "Du vælger et rum, tilføjer dine smarte enheder, besvarer enhedsspecifikke spørgsmål og får en risikoprofil med prioriterede handlinger.", - "faqQuestionNoPolicy": "Hvorfor er der ingen privatlivspolitik?", + "faqAnswerLegalAdvice": "Nej. Simplications giver praktisk vejledning og anbefalinger, men erstatter ikke juridisk rådgivning eller professionel sikkerhedsrådgivning.", + "faqAnswerNoDevice": "Du kan tilføje brugerdefinerede enheder og stadig gennemføre tjekket. Anbefalingerne bygger så på din opsætning og dine svar.", "faqAnswerNoPolicy": "Fordi vi ikke indsamler dine data.", + "faqAnswerRiskMeaning": "Disse niveauer viser, hvor meget din nuværende konfiguration kan øge privatlivsrisici. De er vejledende niveauer, ikke juridisk eller teknisk certificering.", + "faqAnswerWhatIs": "Simplications er et forskningsprojekt om privatliv i smarte hjem. Denne app er en del af projektet og guider dig rum for rum gennem dine enheder med praktiske anbefalinger baseret på dine svar.", + "faqQuestionCanShare": "Kan jeg dele mine resultater?", "faqQuestionDataStored": "Hvor gemmes mine data?", - "faqAnswerDataStored": "Dine vurderingsdata gemmes lokalt på din enhed. På Om-skærmen kan du til enhver tid slette alle gemte data.", + "faqQuestionHowWorks": "Hvordan fungerer tjekket?", + "faqQuestionLegalAdvice": "Er dette juridisk rådgivning?", "faqQuestionNoDevice": "Hvad hvis min enhed ikke er på listen?", - "faqAnswerNoDevice": "Du kan tilføje brugerdefinerede enheder og stadig gennemføre tjekket. Anbefalingerne bygger så på din opsætning og dine svar.", + "faqQuestionNoPolicy": "Hvorfor er der ingen privatlivspolitik?", "faqQuestionRiskMeaning": "Hvad betyder lav, mellem og høj risiko?", - "faqAnswerRiskMeaning": "Disse niveauer viser, hvor meget din nuværende konfiguration kan øge privatlivsrisici. De er vejledende niveauer, ikke juridisk eller teknisk certificering.", - "faqQuestionLegalAdvice": "Er dette juridisk rådgivning?", - "faqAnswerLegalAdvice": "Nej. Simplications giver praktisk vejledning og anbefalinger, men erstatter ikke juridisk rådgivning eller professionel sikkerhedsrådgivning.", - "faqQuestionCanShare": "Kan jeg dele mine resultater?", - "faqAnswerCanShare": "Ja. På resultatskærmen kan du eksportere og dele din opsummering som tekst eller PDF.", - "roomDeleteTitle": "Slet rum?", - "roomDeleteBody": "Dette brugerdefinerede rum bliver slettet. Alle tilknyttede enheder bliver også fjernet.", - "add": "Tilføj", - "addRoomDialogTitle": "Tilføj nyt rum", - "roomName": "Rumnavn", - "roomNameHint": "f.eks. Stue, Garage", - "chooseIcon": "Vælg ikon:", - "addDeviceDialogTitle": "Tilføj ny enhed", - "deviceName": "Enhedsnavn", - "deviceNameHint": "f.eks. Min smarte højttaler", - "baseRiskLabel": "Basisrisikoscore (0-100)", - "baseRiskHint": "f.eks. 30 (lav) til 60 (høj)", + "faqQuestionWhatIs": "Hvad er Simplications?", + "faqScreenTitle": "Ofte stillede spørgsmål", + "fullCatalog": "Fuldt handlingskatalog", + "fundingAgency": "Finansieringsorgan", + "fundingAgencyValue": "Tysk forbundsministerium for forskning, teknologi og rumfart\nBevilling 16KIS1868K", + "gen_rec_0": "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": "Use a household consent check before buying new devices and involve all household members.", + "generalRecommendations": "Generelle anbefalinger", + "generalRecommendationsHint": "Disse tiltag gælder for hele dit smarte hjem uanset individuelle enheder.", "hasCamera": "Har kamera?", "hasMicrophone": "Har mikrofon?", - "camera": "Kamera", + "highRisk": "Høj risiko", + "howRiskCalculated": "Hvordan beregnes risiko?", + "languageDialogTitle": "Vælg sprog", + "lowRisk": "Lav risiko", + "mediumRisk": "Middel risiko", "microphone": "Mikrofon", - "summaryTitle": "Dit resultat", - "shareResult": "Del resultat", - "shareAsText": "Del som tekst", - "shareAsPdf": "Del som PDF", - "restart": "Start forfra", + "nextRoom": "Næste rum", + "no": "Nej", + "noActionHigh": "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en høj rest-risiko.", + "noActionLow": "Alt er i orden - ingen handlinger nødvendige.", + "noActionMedium": "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en middel rest-risiko.", + "noDevice": "Ingen enhed", + "noDeviceDialogBody": "Dette rum afsluttes uden enheder og påvirker ikke scoren.", + "noDeviceDialogBodyWithExisting": "Eksisterende enhedsvalg for dette rum kasseres. Dette rum afsluttes uden enheder og påvirker ikke scoren.", + "noDeviceDialogTitle": "Ingen enheder i dette rum?", "noDevicesCaptured": "Ingen enheder registreret.", "noDevicesHint": "Start forfra og tilføj enheder for at få en vurdering.", - "highRisk": "Høj risiko", - "mediumRisk": "Middel risiko", - "lowRisk": "Lav risiko", - "exportFailed": "Eksport mislykkedes", - "summaryShareSubject": "Simplications-resultat", - "summarySharePdfText": "Simplications-rapport som PDF", - "overview": "Oversigt", - "evaluatedDevices": "Vurderede enheder", - "skippedDevicesHint": "{count} enheder er sprunget over, fordi spørgeskemaet ikke er afsluttet.", - "overallRisk": "Samlet risiko", - "generalRecommendations": "Generelle anbefalinger", - "generalRecommendationsHint": "Disse tiltag gælder for hele dit smarte hjem uanset individuelle enheder.", - "fullCatalog": "Fuldt handlingskatalog", - "catalogButton": "Åbn fuldt handlingskatalog", - "risk": "Risiko", + "noKnownDevices": "Ingen kendte enheder for dette rum. Du kan tilføje din egen enhed.", + "notApplicableForDevice": "Dette spørgsmål gælder ikke for min enhed", + "notCompleted": "Ikke afsluttet", "note": "Bemærkning", + "optional": "Valgfri", + "overallHigh": "Flere enheder har betydelige privatlivs-/databeskyttelsesrisici. Implementér venligst højprioriterede tiltag hurtigt.", + "overallLow": "Godt klaret! Dine enheder er overvejende sikkert konfigureret. Gennemgå alligevel de generelle anbefalinger.", + "overallMedium": "Der er plads til forbedringer. Gennemgå anbefalingerne for hver enhed.", + "overallRisk": "Samlet risiko", + "overview": "Oversigt", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projektpartnere", + "q_access_logging_hint": "An access log helps you detect suspicious activity.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_account_required_hint": "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_account_required_text": "Can you use the device without a mandatory online account?", + "q_camera_consent_hint": "Cameras in communal or private areas require the consent of all residents.", + "q_camera_consent_text": "Does the camera only record areas for which everyone affected has given their consent?", + "q_child_data_limits_hint": "Child-focused devices should collect and store minimal data.", + "q_child_data_limits_text": "Can you limit which personal data the toy collects?", + "q_cloud_required_hint": "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_cloud_required_text": "Does floor-plan navigation work without cloud connection?", + "q_data_collection_hint": "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_data_collection_text": "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_expert_access_control_granular_hint": "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_access_control_granular_text": "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_revocation_hint": "Fast revocation is crucial when devices are shared or users change.", + "q_expert_access_revocation_text": "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_bystander_transparency_hint": "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_bystander_transparency_text": "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_child_data_protection_hint": "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_child_data_protection_text": "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_data_retention_duration_hint": "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_data_retention_duration_text": "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_sale_disabled_hint": "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_data_sale_disabled_text": "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_offline_functionality_hint": "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_offline_functionality_text": "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_sensitive_inference_controls_hint": "Inference controls reduce risks from secondary use of sensitive data.", + "q_expert_sensitive_inference_controls_text": "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_third_party_sharing_limited_hint": "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_third_party_sharing_limited_text": "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_update_support_window_hint": "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_update_support_window_text": "Is it known how long the vendor guarantees security updates?", + "q_expert_vulnerability_process_hint": "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_vulnerability_process_text": "Is there a documented process for reporting and fixing vulnerabilities?", + "q_family_access_hint": "Household members should have control without visitors changing everything.", + "q_family_access_text": "Can you control who may adjust heating (e.g., restrict guests)?", + "q_health_sharing_hint": "Health data is sensitive. Only authorized apps should have access.", + "q_health_sharing_text": "Can you control which third parties can access your health data?", + "q_informed_hint": "All household members should know what data the device captures.", + "q_informed_text": "Are all people in the household informed about this device and its function?", + "q_local_control_hint": "Local scenes and schedules protect your privacy better.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_mode_hint": "Offline use protects usage data from being sent to the vendor.", + "q_local_mode_text": "Can you use the device via HDMI or local sources without internet?", + "q_location_tracking_hint": "GPS tracking uses battery and can reveal movement patterns.", + "q_location_tracking_text": "Can you disable location tracking when not needed?", + "q_map_privacy_hint": "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_map_privacy_text": "Are created floor plans stored exclusively on the device locally?", + "q_mic_active_hint": "Smart speakers and devices with microphones can be activated unintentionally.", + "q_mic_active_text": "Do you deactivate the microphone when you are not actively using it?", + "q_motion_detection_hint": "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_motion_detection_text": "Can you disable or schedule motion detection when you are at home?", + "q_network_hint": "A dedicated network for smart devices protects your main home network.", + "q_network_text": "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_offline_control_hint": "Offline operation or local automation protects data from cloud access.", + "q_offline_control_text": "Can you operate the thermostat offline (without internet)?", + "q_offline_fallback_hint": "Reliable local operation is important for daily use and privacy.", + "q_offline_fallback_text": "Do devices still work if internet or app connection fails?", + "q_offline_unlock_hint": "Backup options prevent lockout during internet or power outages.", + "q_offline_unlock_text": "Can you unlock the lock offline (e.g., with code or key)?", + "q_parental_control_hint": "Parental controls should allow restricting contacts and features.", + "q_parental_control_text": "Are there parental control features to manage the toy?", + "q_password_hint": "Default passwords are often publicly known and easy to crack.", + "q_password_text": "Have you changed the default password of the device or its linked account?", + "q_permissions_hint": "Only permissions that are truly needed should be enabled.", + "q_permissions_text": "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_recording_disable_hint": "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_recording_disable_text": "Can you disable audio and video recording on the device?", + "q_sensor_data_deletion_hint": "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_data_deletion_text": "Are older measurement values deleted automatically or on request?", + "q_sensor_frequency_hint": "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_frequency_text": "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_granularity_hint": "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_granularity_text": "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_local_hint": "Local processing prevents the vendor from accessing your measurement data.", + "q_sensor_local_text": "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sharing_restrictions_hint": "You should be able to precisely control access to video recordings.", + "q_sharing_restrictions_text": "Can you control who can access live view and recordings?", + "q_skills_permissions_hint": "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_skills_permissions_text": "Do you regularly review which skills have access to your account?", + "q_tracking_disabled_hint": "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_tracking_disabled_text": "Can you completely disable advertising and tracking features?", + "q_two_factor_hint": "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_two_factor_text": "Is two-factor authentication (2FA) available for the lock account?", + "q_updates_hint": "Updates close known security vulnerabilities promptly.", + "q_updates_text": "Are automatic security updates enabled for the device?", + "q_usage_tracking_hint": "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_usage_tracking_text": "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_video_encryption_hint": "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_encryption_text": "Is video recording and transmission encrypted end-to-end?", + "q_video_storage_hint": "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_video_storage_text": "Are recordings stored locally (not only in the vendor cloud)?", + "q_vision_data_hint": "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_vision_data_text": "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_voice_history_hint": "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_history_text": "Can you delete voice recordings from device history or disable this feature?", + "q_voice_local_hint": "Local processing reduces the amount of data sent to the cloud.", + "q_voice_local_text": "Is voice processing performed partly on the device locally?", + "questionnaireTitle": "Spørgsmål", "recommendations": "Anbefalinger", - "urgent": "Haster", "recommended": "Anbefalet", - "optional": "Valgfri", - "social": "Social", - "technical": "Teknisk", + "reportExportedAt": "Eksporteret den", + "restart": "Start forfra", + "results": "Resultater", + "resume": "Fortsæt", + "risk": "Risiko", + "risk_hint_camera": "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_child_room": "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "risk_hint_lock": "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_mic": "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "room_basement": "Basement / Pantry", + "room_bathroom": "Bathroom", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_garden": "Garden / Outdoor area", + "room_hallway": "Hallway / Entrance", + "room_kitchen": "Kitchen", + "room_living": "Living room", + "room_office": "Office", + "room_whole_home": "Entire home", + "roomCheck": "Rumtjek", + "roomDeleteBody": "Dette brugerdefinerede rum bliver slettet. Alle tilknyttede enheder bliver også fjernet.", + "roomDeleteTitle": "Slet rum?", + "roomInstruction": "Tryk på et rum, registrer enhederne dér, og kom tilbage hertil for at vælge næste rum.", + "roomName": "Rumnavn", + "roomNameHint": "f.eks. Stue, Garage", + "roomQuestion": "Hvilket rum vil du tjekke nu?", + "roomSelectionTitle": "Vælg rum", "security": "Sikkerhed", + "shareAsPdf": "Del som PDF", + "shareAsText": "Del som tekst", + "shareResult": "Del resultat", + "skippedDevicesHint": "{count} enheder er sprunget over, fordi spørgeskemaet ikke er afsluttet.", + "sl_access_logging": "No access log available", + "sl_account_required": "Mandatory vendor account required", + "sl_base_risk": "Baseline risk of device type", + "sl_camera_consent": "No consent for camera-covered area", + "sl_child_data_limits": "Data collection not limited", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_data_collection": "Temperature history sent to vendor", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_access_revocation": "Individual access revocation not possible", + "sl_expert_bystander_transparency": "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": "Child-data protection measures missing", + "sl_expert_data_retention_duration": "Retention duration unclear or too long", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_offline_functionality": "Meaningful offline operation not possible", + "sl_expert_sensitive_inference_controls": "Controls against sensitive inference missing", + "sl_expert_third_party_sharing_limited": "Third-party sharing not limited", + "sl_expert_update_support_window": "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_family_access": "Access cannot be restricted", + "sl_health_sharing": "Health data shared with third parties", + "sl_informed": "Household members not informed", + "sl_local_control": "Automations require internet connection", + "sl_local_mode": "No offline operation possible", + "sl_location_tracking": "Location tracking enabled", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_mic_active": "Microphone not disabled when unused", + "sl_motion_detection": "Motion detection always active", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_offline_control": "No offline operation possible", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_parental_control": "Parental controls not configured", + "sl_password": "Default password not changed", + "sl_permissions": "App permissions not reduced", + "sl_recording_disable": "Recording cannot be disabled", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_two_factor": "Two-factor authentication missing", + "sl_updates": "Automatic updates not enabled", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", "smartHomePrivacyHeader": "Dit smart-home-privatliv", - "devicesRated": "vurderede enheder", - "howRiskCalculated": "Hvordan beregnes risiko?", + "social": "Social", + "start": "Start", + "stepAnswerQuestions": "Besvar spørgsmål", + "stepCaptureDevices": "Registrer enheder", + "stepGetRisk": "Få risikoprofil og anbefalinger", + "stepSelectRooms": "Vælg ét rum", + "summarySharePdfText": "Simplications-rapport som PDF", + "summaryShareSubject": "Simplications-resultat", + "summaryTitle": "Dit resultat", + "technical": "Teknisk", "totalScore": "I alt", - "catalogSnackBarPrefix": "Katalog", - "reportExportedAt": "Eksporteret den", - "noActionLow": "Alt er i orden - ingen handlinger nødvendige.", - "noActionMedium": "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en middel rest-risiko.", - "noActionHigh": "Der kan i øjeblikket ikke udledes konkrete handlinger fra dine svar, men der er fortsat en høj rest-risiko.", - "overallLow": "Godt klaret! Dine enheder er overvejende sikkert konfigureret. Gennemgå alligevel de generelle anbefalinger.", - "overallMedium": "Der er plads til forbedringer. Gennemgå anbefalingerne for hver enhed.", - "overallHigh": "Flere enheder har betydelige privatlivs-/databeskyttelsesrisici. Implementér venligst højprioriterede tiltag hurtigt.", - "dontKnowHint": " {count} svar{suffix} er markeret som \"Ved ikke\" - brug tid på at lære dine enhedsindstillinger bedre at kende." + "urgent": "Haster", + "website": "Websted", + "websiteOpenFailed": "Kunne ikke åbne webstedet.", + "welcomeDescription": "Registrer dine smarte enheder rum for rum, og få en privatlivsvurdering med konkrete anbefalinger.", + "welcomeTitle": "Simplications\nSmart Home\nprivatlivstjek", + "yes": "Ja" } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index daa4e85..a6d9d65 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -1,154 +1,463 @@ { "@@locale": "fr", - "appTitle": "Simplications", - "welcomeTitle": "Simplications\nContrôle de confidentialité\nSmart Home", - "welcomeDescription": "Renseignez vos appareils intelligents pièce par pièce et obtenez une évaluation de confidentialité avec des recommandations concrètes.", - "stepSelectRooms": "Choisir une pièce", - "stepCaptureDevices": "Recenser les appareils", - "stepAnswerQuestions": "Répondre aux questions", - "stepGetRisk": "Obtenir le profil de risque et les recommandations", - "start": "Démarrer", - "resume": "Continuer", + "a_access_logging_desc": "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_access_logging_title": "Enable access log", + "a_account_required_desc": "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_camera_consent_desc": "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_child_data_limits_desc": "Disable optional profile data and collect only the child data required for core functionality.", + "a_child_data_limits_title": "Minimize data collection", + "a_cloud_required_desc": "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_data_collection_desc": "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_data_collection_title": "Disable history upload", + "a_dont_know_desc": "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "a_dont_know_title": "Get to know device settings better", + "a_expert_access_control_granular_desc": "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_access_control_granular_title": "Introduce granular roles and accounts", + "a_expert_access_revocation_desc": "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_bystander_transparency_desc": "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_bystander_transparency_title": "Add transparency notices for bystanders", + "a_expert_child_data_protection_desc": "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_child_data_protection_title": "Strengthen child data protection", + "a_expert_data_retention_duration_desc": "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_sale_disabled_desc": "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_offline_functionality_desc": "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_offline_functionality_title": "Prioritize offline functionality", + "a_expert_sensitive_inference_controls_desc": "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_expert_sensitive_inference_controls_title": "Restrict inference features", + "a_expert_third_party_sharing_limited_desc": "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_update_support_window_desc": "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_vulnerability_process_desc": "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_family_access_desc": "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_family_access_title": "Separate access rights for household members", + "a_health_sharing_desc": "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_health_sharing_title": "Restrict health data sharing", + "a_informed_desc": "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_informed_title": "Inform household members", + "a_local_control_desc": "Use local scenes/schedules instead of cloud automations where available.", + "a_local_control_title": "Enable local automations", + "a_local_mode_desc": "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_local_mode_title": "Prefer offline use", + "a_location_tracking_desc": "Disable location tracking outside active use or allow it only while the app is in use.", + "a_location_tracking_title": "Reduce location sharing", + "a_map_privacy_desc": "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_mic_active_desc": "Use the physical mute switch or disable the microphone in settings.", + "a_mic_active_title": "Disable microphone when not in use", + "a_motion_detection_desc": "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_network_desc": "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_offline_control_desc": "Configure local schedules and control without cloud dependency if the device supports it.", + "a_offline_control_title": "Set up local control", + "a_offline_fallback_desc": "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_unlock_desc": "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_offline_unlock_title": "Secure offline access", + "a_parental_control_desc": "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_parental_control_title": "Set up parental controls", + "a_password_desc": "Replace the default password with a strong, unique password. Use a password manager.", + "a_password_title": "Change default password", + "a_permissions_desc": "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_permissions_title": "Restrict app permissions", + "a_recording_disable_desc": "Disable recording features by default and enable them only briefly when specifically needed.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_sensor_data_deletion_desc": "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_frequency_desc": "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_granularity_desc": "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_local_desc": "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_sensor_local_title": "Prefer local processing", + "a_sharing_restrictions_desc": "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_skills_permissions_desc": "Review which third-party skills have access. Disable unnecessary skills.", + "a_skills_permissions_title": "Review skills/integrations", + "a_tracking_disabled_desc": "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_two_factor_desc": "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_two_factor_title": "Enable two-factor authentication", + "a_updates_desc": "Enable automatic security updates in device or app settings.", + "a_updates_title": "Enable automatic updates", + "a_usage_tracking_desc": "Disable analytics, telemetry, and usage data collection in app settings.", + "a_usage_tracking_title": "Disable usage tracking", + "a_video_encryption_desc": "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_storage_desc": "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_video_storage_title": "Store recordings locally", + "a_vision_data_desc": "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_vision_data_title": "Process camera data locally only", + "a_voice_history_desc": "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_local_desc": "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_voice_local_title": "Enable local voice processing", "about": "À propos", - "faq": "FAQ", - "roomSelectionTitle": "Sélectionner une pièce", - "roomQuestion": "Quelle pièce souhaitez-vous vérifier maintenant ?", - "roomInstruction": "Touchez une pièce, recensez-y vos appareils, puis revenez ici pour choisir la pièce suivante.", - "results": "Résultats", - "alreadyEvaluated": "Déjà évalué", - "notCompleted": "Non terminé", - "addRoom": "Ajouter une pièce", - "deviceTitlePrefix": "Appareils", - "roomCheck": "Vérification de la pièce", - "deviceQuestion": "Quels appareils intelligents utilisez-vous dans cette pièce ?", - "deviceQuestionHint": "Touchez un appareil pour répondre aux questions.", - "noKnownDevices": "Aucun appareil connu pour cette pièce. Vous pouvez ajouter votre propre appareil.", - "addDevice": "Ajouter\nun appareil", - "noDevice": "Aucun appareil", - "nextRoom": "Pièce suivante", - "deleteDeviceTitle": "Supprimer l'appareil ?", - "deleteDeviceBody": "Cet appareil personnalisé sera supprimé. Toutes les instances liées seront également supprimées.", - "delete": "Supprimer", - "cancel": "Annuler", - "confirm": "Confirmer", - "noDeviceDialogTitle": "Aucun appareil dans cette pièce ?", - "noDeviceDialogBody": "Cette pièce sera terminée sans appareil et n'affectera pas le score.", - "noDeviceDialogBodyWithExisting": "Les sélections d'appareils existantes pour cette pièce seront ignorées. Cette pièce sera terminée sans appareil et n'affectera pas le score.", - "questionnaireTitle": "Questions", - "connectedDevice": "Appareil connecté", - "done": "Terminé", - "yes": "Oui", - "no": "Non", - "dontKnow": "Je ne sais pas", - "notApplicableForDevice": "Cette question ne s'applique pas à mon appareil", - "languageDialogTitle": "Choisir la langue", - "currentLanguage": "Langue actuelle", - "aboutScreenTitle": "À propos de l’application", - "aboutSubtitle": "Projet de recherche sur la confidentialité des maisons connectées", - "aboutProjectName": "Simplications", - "aboutPartnerTuChemnitz": "Université technique de Chemnitz", "aboutPartnerHsAnhalt": "Haute école d’Anhalt", + "aboutPartnerTuChemnitz": "Université technique de Chemnitz", "aboutPartnerVzSachsen": "Centre des consommateurs de Saxe", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "À propos de l’application", + "aboutSubtitle": "Projet de recherche sur la confidentialité des maisons connectées", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", - "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", - "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", - "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", - "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", - "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", - "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", - "websiteOpenFailed": "Impossible d’ouvrir le site web.", - "deleteAllDataTitle": "Supprimer toutes les données ?", - "deleteAllDataBody": "Toutes les pièces, appareils et réponses enregistrés seront supprimés définitivement. Cette action est irréversible.", - "deleteAllDataButton": "Supprimer les données", + "add": "Ajouter", + "addDevice": "Ajouter\nun appareil", + "addDeviceDialogTitle": "Ajouter un nouvel appareil", + "addRoom": "Ajouter une pièce", + "addRoomDialogTitle": "Ajouter une nouvelle pièce", "allDataDeleted": "Toutes les données enregistrées ont été supprimées.", - "projectPartners": "Partenaires du projet", - "coordinationFunding": "Coordination et financement", + "alreadyEvaluated": "Déjà évalué", + "appTitle": "Simplications", + "baseRiskHint": "ex. 30 (faible) à 60 (élevé)", + "baseRiskLabel": "Score de risque de base (0-100)", + "camera": "Caméra", + "cancel": "Annuler", + "catalogButton": "Ouvrir le catalogue complet des actions", + "catalogSnackBarPrefix": "Catalogue", + "chooseIcon": "Choisir une icône :", + "confirm": "Confirmer", + "connectedDevice": "Appareil connecté", "coordination": "Coordination", - "platformPrivacy": "Plattform Privatheit", - "fundingAgency": "Organisme financeur", - "fundingAgencyValue": "Ministère fédéral allemand de la Recherche, de la Technologie et de l’Espace\nSubvention 16KIS1868K", - "website": "Site web", + "coordinationFunding": "Coordination et financement", + "currentLanguage": "Langue actuelle", "dangerZone": "Zone de danger", "dangerZoneWarning": "Attention : cette action supprime définitivement toutes les données enregistrées de l’application.", - "faqScreenTitle": "Questions fréquentes", - "faqQuestionWhatIs": "Qu’est-ce que Simplications ?", - "faqAnswerWhatIs": "Simplications est un projet de recherche sur la confidentialité des maisons connectées. Cette application est une composante du projet et vous guide pièce par pièce à travers vos appareils avec des recommandations pratiques selon vos réponses.", - "faqQuestionHowWorks": "Comment fonctionne le contrôle ?", + "delete": "Supprimer", + "deleteAllDataBody": "Toutes les pièces, appareils et réponses enregistrés seront supprimés définitivement. Cette action est irréversible.", + "deleteAllDataButton": "Supprimer les données", + "deleteAllDataTitle": "Supprimer toutes les données ?", + "deleteDeviceBody": "Cet appareil personnalisé sera supprimé. Toutes les instances liées seront également supprimées.", + "deleteDeviceTitle": "Supprimer l'appareil ?", + "device_baby_monitor": "Baby monitor / baby camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_humidity_sensor": "Humidity sensor", + "device_indoor_camera": "Smart indoor camera", + "device_light_sensor": "Light sensor", + "device_outdoor_camera": "Smart outdoor camera", + "device_robot_vacuum": "Robot vacuum", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_smart_blind": "Smart blind / shutter", + "device_smart_coffee": "Smart coffee machine", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_fridge": "Smart fridge", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_oven": "Smart oven / stove", + "device_smart_plug": "Smart plug", + "device_smart_printer": "Smart printer", + "device_smart_router": "Smart router / mesh system", + "device_smart_scale": "Smart scale", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_toy": "Smart toy", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smart washer / dryer", + "device_temperature_sensor": "Temperature sensor", + "deviceName": "Nom de l’appareil", + "deviceNameHint": "ex. Mon haut-parleur intelligent", + "deviceQuestion": "Quels appareils intelligents utilisez-vous dans cette pièce ?", + "deviceQuestionHint": "Touchez un appareil pour répondre aux questions.", + "devicesRated": "appareils évalués", + "deviceTitlePrefix": "Appareils", + "done": "Terminé", + "dontKnow": "Je ne sais pas", + "dontKnowHint": " {count} réponse{suffix} a été marquée \"Je ne sais pas\" - prenez le temps de mieux comprendre les paramètres de vos appareils.", + "evaluatedDevices": "Appareils évalués", + "expertModeQuestionnaireHint": "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourcesHint": "Methodologically inspired by the following research projects:", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeTitle": "Expert mode", + "expertModeToggleHint": "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeToggleLabel": "Enable detailed expert mode", + "exportFailed": "Échec de l’export", + "faq": "FAQ", + "faqAnswerCanShare": "Oui. Depuis l’écran des résultats, vous pouvez exporter et partager votre résumé en texte ou en PDF.", + "faqAnswerDataStored": "Vos données d’évaluation sont stockées localement sur votre appareil. Vous pouvez supprimer toutes les données enregistrées à tout moment depuis l’écran À propos.", "faqAnswerHowWorks": "Vous choisissez une pièce, ajoutez vos appareils intelligents, répondez à des questions spécifiques, puis recevez un profil de risque avec des actions priorisées.", - "faqQuestionNoPolicy": "Pourquoi n’y a-t-il pas de politique de protection des données ?", + "faqAnswerLegalAdvice": "Non. Simplications fournit une orientation pratique et des recommandations, mais ne remplace pas un conseil juridique ou une consultation professionnelle en sécurité.", + "faqAnswerNoDevice": "Vous pouvez ajouter des appareils personnalisés et terminer le contrôle. Les recommandations s’appuieront alors sur votre configuration et vos réponses.", "faqAnswerNoPolicy": "Parce que nous ne collectons pas vos données.", + "faqAnswerRiskMeaning": "Ces niveaux indiquent dans quelle mesure votre configuration actuelle peut exposer des risques de confidentialité. Ce sont des niveaux d’orientation, pas une certification juridique ou technique.", + "faqAnswerWhatIs": "Simplications est un projet de recherche sur la confidentialité des maisons connectées. Cette application est une composante du projet et vous guide pièce par pièce à travers vos appareils avec des recommandations pratiques selon vos réponses.", + "faqQuestionCanShare": "Puis-je partager mes résultats ?", "faqQuestionDataStored": "Où sont stockées mes données ?", - "faqAnswerDataStored": "Vos données d’évaluation sont stockées localement sur votre appareil. Vous pouvez supprimer toutes les données enregistrées à tout moment depuis l’écran À propos.", + "faqQuestionHowWorks": "Comment fonctionne le contrôle ?", + "faqQuestionLegalAdvice": "Est-ce un conseil juridique ?", "faqQuestionNoDevice": "Que faire si mon appareil n’est pas dans la liste ?", - "faqAnswerNoDevice": "Vous pouvez ajouter des appareils personnalisés et terminer le contrôle. Les recommandations s’appuieront alors sur votre configuration et vos réponses.", + "faqQuestionNoPolicy": "Pourquoi n’y a-t-il pas de politique de protection des données ?", "faqQuestionRiskMeaning": "Que signifient risque faible, moyen et élevé ?", - "faqAnswerRiskMeaning": "Ces niveaux indiquent dans quelle mesure votre configuration actuelle peut exposer des risques de confidentialité. Ce sont des niveaux d’orientation, pas une certification juridique ou technique.", - "faqQuestionLegalAdvice": "Est-ce un conseil juridique ?", - "faqAnswerLegalAdvice": "Non. Simplications fournit une orientation pratique et des recommandations, mais ne remplace pas un conseil juridique ou une consultation professionnelle en sécurité.", - "faqQuestionCanShare": "Puis-je partager mes résultats ?", - "faqAnswerCanShare": "Oui. Depuis l’écran des résultats, vous pouvez exporter et partager votre résumé en texte ou en PDF.", - "roomDeleteTitle": "Supprimer la pièce ?", - "roomDeleteBody": "Cette pièce personnalisée sera supprimée. Tous les appareils liés seront également supprimés.", - "add": "Ajouter", - "addRoomDialogTitle": "Ajouter une nouvelle pièce", - "roomName": "Nom de la pièce", - "roomNameHint": "ex. Salon, Garage", - "chooseIcon": "Choisir une icône :", - "addDeviceDialogTitle": "Ajouter un nouvel appareil", - "deviceName": "Nom de l’appareil", - "deviceNameHint": "ex. Mon haut-parleur intelligent", - "baseRiskLabel": "Score de risque de base (0-100)", - "baseRiskHint": "ex. 30 (faible) à 60 (élevé)", + "faqQuestionWhatIs": "Qu’est-ce que Simplications ?", + "faqScreenTitle": "Questions fréquentes", + "fullCatalog": "Catalogue complet des actions", + "fundingAgency": "Organisme financeur", + "fundingAgencyValue": "Ministère fédéral allemand de la Recherche, de la Technologie et de l’Espace\nSubvention 16KIS1868K", + "gen_rec_0": "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": "Use a household consent check before buying new devices and involve all household members.", + "generalRecommendations": "Recommandations générales", + "generalRecommendationsHint": "Ces mesures s’appliquent à toute votre maison connectée, indépendamment des appareils individuels.", "hasCamera": "Possède une caméra ?", "hasMicrophone": "Possède un microphone ?", - "camera": "Caméra", + "highRisk": "Risque élevé", + "howRiskCalculated": "Comment le risque est-il calculé ?", + "languageDialogTitle": "Choisir la langue", + "lowRisk": "Risque faible", + "mediumRisk": "Risque moyen", "microphone": "Microphone", - "summaryTitle": "Votre résultat", - "shareResult": "Partager le résultat", - "shareAsText": "Partager en texte", - "shareAsPdf": "Partager en PDF", - "restart": "Recommencer", + "nextRoom": "Pièce suivante", + "no": "Non", + "noActionHigh": "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel élevé demeure.", + "noActionLow": "Tout va bien - aucune action n’est nécessaire.", + "noActionMedium": "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel moyen demeure.", + "noDevice": "Aucun appareil", + "noDeviceDialogBody": "Cette pièce sera terminée sans appareil et n'affectera pas le score.", + "noDeviceDialogBodyWithExisting": "Les sélections d'appareils existantes pour cette pièce seront ignorées. Cette pièce sera terminée sans appareil et n'affectera pas le score.", + "noDeviceDialogTitle": "Aucun appareil dans cette pièce ?", "noDevicesCaptured": "Aucun appareil enregistré.", "noDevicesHint": "Redémarrez et ajoutez des appareils pour obtenir une évaluation.", - "highRisk": "Risque élevé", - "mediumRisk": "Risque moyen", - "lowRisk": "Risque faible", - "exportFailed": "Échec de l’export", - "summaryShareSubject": "Résultat Simplications", - "summarySharePdfText": "Rapport Simplications en PDF", - "overview": "Vue d’ensemble", - "evaluatedDevices": "Appareils évalués", - "skippedDevicesHint": "{count} appareils ignorés car le questionnaire n'a pas été terminé.", - "overallRisk": "Risque global", - "generalRecommendations": "Recommandations générales", - "generalRecommendationsHint": "Ces mesures s’appliquent à toute votre maison connectée, indépendamment des appareils individuels.", - "fullCatalog": "Catalogue complet des actions", - "catalogButton": "Ouvrir le catalogue complet des actions", - "risk": "Risque", + "noKnownDevices": "Aucun appareil connu pour cette pièce. Vous pouvez ajouter votre propre appareil.", + "notApplicableForDevice": "Cette question ne s'applique pas à mon appareil", + "notCompleted": "Non terminé", "note": "Remarque", + "optional": "Optionnel", + "overallHigh": "Plusieurs appareils présentent des risques importants pour la confidentialité/protection des données. Veuillez mettre en œuvre rapidement les mesures prioritaires.", + "overallLow": "Bien joué ! Vos appareils sont globalement configurés de façon sûre. Consultez tout de même les recommandations générales.", + "overallMedium": "Il y a une marge d’amélioration. Consultez les recommandations pour chaque appareil.", + "overallRisk": "Risque global", + "overview": "Vue d’ensemble", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Partenaires du projet", + "q_access_logging_hint": "An access log helps you detect suspicious activity.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_account_required_hint": "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_account_required_text": "Can you use the device without a mandatory online account?", + "q_camera_consent_hint": "Cameras in communal or private areas require the consent of all residents.", + "q_camera_consent_text": "Does the camera only record areas for which everyone affected has given their consent?", + "q_child_data_limits_hint": "Child-focused devices should collect and store minimal data.", + "q_child_data_limits_text": "Can you limit which personal data the toy collects?", + "q_cloud_required_hint": "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_cloud_required_text": "Does floor-plan navigation work without cloud connection?", + "q_data_collection_hint": "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_data_collection_text": "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_expert_access_control_granular_hint": "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_access_control_granular_text": "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_revocation_hint": "Fast revocation is crucial when devices are shared or users change.", + "q_expert_access_revocation_text": "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_bystander_transparency_hint": "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_bystander_transparency_text": "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_child_data_protection_hint": "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_child_data_protection_text": "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_data_retention_duration_hint": "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_data_retention_duration_text": "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_sale_disabled_hint": "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_data_sale_disabled_text": "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_offline_functionality_hint": "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_offline_functionality_text": "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_sensitive_inference_controls_hint": "Inference controls reduce risks from secondary use of sensitive data.", + "q_expert_sensitive_inference_controls_text": "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_third_party_sharing_limited_hint": "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_third_party_sharing_limited_text": "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_update_support_window_hint": "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_update_support_window_text": "Is it known how long the vendor guarantees security updates?", + "q_expert_vulnerability_process_hint": "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_vulnerability_process_text": "Is there a documented process for reporting and fixing vulnerabilities?", + "q_family_access_hint": "Household members should have control without visitors changing everything.", + "q_family_access_text": "Can you control who may adjust heating (e.g., restrict guests)?", + "q_health_sharing_hint": "Health data is sensitive. Only authorized apps should have access.", + "q_health_sharing_text": "Can you control which third parties can access your health data?", + "q_informed_hint": "All household members should know what data the device captures.", + "q_informed_text": "Are all people in the household informed about this device and its function?", + "q_local_control_hint": "Local scenes and schedules protect your privacy better.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_mode_hint": "Offline use protects usage data from being sent to the vendor.", + "q_local_mode_text": "Can you use the device via HDMI or local sources without internet?", + "q_location_tracking_hint": "GPS tracking uses battery and can reveal movement patterns.", + "q_location_tracking_text": "Can you disable location tracking when not needed?", + "q_map_privacy_hint": "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_map_privacy_text": "Are created floor plans stored exclusively on the device locally?", + "q_mic_active_hint": "Smart speakers and devices with microphones can be activated unintentionally.", + "q_mic_active_text": "Do you deactivate the microphone when you are not actively using it?", + "q_motion_detection_hint": "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_motion_detection_text": "Can you disable or schedule motion detection when you are at home?", + "q_network_hint": "A dedicated network for smart devices protects your main home network.", + "q_network_text": "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_offline_control_hint": "Offline operation or local automation protects data from cloud access.", + "q_offline_control_text": "Can you operate the thermostat offline (without internet)?", + "q_offline_fallback_hint": "Reliable local operation is important for daily use and privacy.", + "q_offline_fallback_text": "Do devices still work if internet or app connection fails?", + "q_offline_unlock_hint": "Backup options prevent lockout during internet or power outages.", + "q_offline_unlock_text": "Can you unlock the lock offline (e.g., with code or key)?", + "q_parental_control_hint": "Parental controls should allow restricting contacts and features.", + "q_parental_control_text": "Are there parental control features to manage the toy?", + "q_password_hint": "Default passwords are often publicly known and easy to crack.", + "q_password_text": "Have you changed the default password of the device or its linked account?", + "q_permissions_hint": "Only permissions that are truly needed should be enabled.", + "q_permissions_text": "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_recording_disable_hint": "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_recording_disable_text": "Can you disable audio and video recording on the device?", + "q_sensor_data_deletion_hint": "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_data_deletion_text": "Are older measurement values deleted automatically or on request?", + "q_sensor_frequency_hint": "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_frequency_text": "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_granularity_hint": "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_granularity_text": "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_local_hint": "Local processing prevents the vendor from accessing your measurement data.", + "q_sensor_local_text": "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sharing_restrictions_hint": "You should be able to precisely control access to video recordings.", + "q_sharing_restrictions_text": "Can you control who can access live view and recordings?", + "q_skills_permissions_hint": "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_skills_permissions_text": "Do you regularly review which skills have access to your account?", + "q_tracking_disabled_hint": "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_tracking_disabled_text": "Can you completely disable advertising and tracking features?", + "q_two_factor_hint": "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_two_factor_text": "Is two-factor authentication (2FA) available for the lock account?", + "q_updates_hint": "Updates close known security vulnerabilities promptly.", + "q_updates_text": "Are automatic security updates enabled for the device?", + "q_usage_tracking_hint": "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_usage_tracking_text": "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_video_encryption_hint": "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_encryption_text": "Is video recording and transmission encrypted end-to-end?", + "q_video_storage_hint": "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_video_storage_text": "Are recordings stored locally (not only in the vendor cloud)?", + "q_vision_data_hint": "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_vision_data_text": "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_voice_history_hint": "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_history_text": "Can you delete voice recordings from device history or disable this feature?", + "q_voice_local_hint": "Local processing reduces the amount of data sent to the cloud.", + "q_voice_local_text": "Is voice processing performed partly on the device locally?", + "questionnaireTitle": "Questions", "recommendations": "Recommandations", - "urgent": "Urgent", "recommended": "Recommandé", - "optional": "Optionnel", - "social": "Social", - "technical": "Technique", + "reportExportedAt": "Exporté le", + "restart": "Recommencer", + "results": "Résultats", + "resume": "Continuer", + "risk": "Risque", + "risk_hint_camera": "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_child_room": "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "risk_hint_lock": "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_mic": "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "room_basement": "Basement / Pantry", + "room_bathroom": "Bathroom", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_garden": "Garden / Outdoor area", + "room_hallway": "Hallway / Entrance", + "room_kitchen": "Kitchen", + "room_living": "Living room", + "room_office": "Office", + "room_whole_home": "Entire home", + "roomCheck": "Vérification de la pièce", + "roomDeleteBody": "Cette pièce personnalisée sera supprimée. Tous les appareils liés seront également supprimés.", + "roomDeleteTitle": "Supprimer la pièce ?", + "roomInstruction": "Touchez une pièce, recensez-y vos appareils, puis revenez ici pour choisir la pièce suivante.", + "roomName": "Nom de la pièce", + "roomNameHint": "ex. Salon, Garage", + "roomQuestion": "Quelle pièce souhaitez-vous vérifier maintenant ?", + "roomSelectionTitle": "Sélectionner une pièce", "security": "Sécurité", + "shareAsPdf": "Partager en PDF", + "shareAsText": "Partager en texte", + "shareResult": "Partager le résultat", + "skippedDevicesHint": "{count} appareils ignorés car le questionnaire n'a pas été terminé.", + "sl_access_logging": "No access log available", + "sl_account_required": "Mandatory vendor account required", + "sl_base_risk": "Baseline risk of device type", + "sl_camera_consent": "No consent for camera-covered area", + "sl_child_data_limits": "Data collection not limited", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_data_collection": "Temperature history sent to vendor", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_access_revocation": "Individual access revocation not possible", + "sl_expert_bystander_transparency": "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": "Child-data protection measures missing", + "sl_expert_data_retention_duration": "Retention duration unclear or too long", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_offline_functionality": "Meaningful offline operation not possible", + "sl_expert_sensitive_inference_controls": "Controls against sensitive inference missing", + "sl_expert_third_party_sharing_limited": "Third-party sharing not limited", + "sl_expert_update_support_window": "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_family_access": "Access cannot be restricted", + "sl_health_sharing": "Health data shared with third parties", + "sl_informed": "Household members not informed", + "sl_local_control": "Automations require internet connection", + "sl_local_mode": "No offline operation possible", + "sl_location_tracking": "Location tracking enabled", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_mic_active": "Microphone not disabled when unused", + "sl_motion_detection": "Motion detection always active", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_offline_control": "No offline operation possible", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_parental_control": "Parental controls not configured", + "sl_password": "Default password not changed", + "sl_permissions": "App permissions not reduced", + "sl_recording_disable": "Recording cannot be disabled", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_two_factor": "Two-factor authentication missing", + "sl_updates": "Automatic updates not enabled", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", "smartHomePrivacyHeader": "La confidentialité de votre maison connectée", - "devicesRated": "appareils évalués", - "howRiskCalculated": "Comment le risque est-il calculé ?", + "social": "Social", + "start": "Démarrer", + "stepAnswerQuestions": "Répondre aux questions", + "stepCaptureDevices": "Recenser les appareils", + "stepGetRisk": "Obtenir le profil de risque et les recommandations", + "stepSelectRooms": "Choisir une pièce", + "summarySharePdfText": "Rapport Simplications en PDF", + "summaryShareSubject": "Résultat Simplications", + "summaryTitle": "Votre résultat", + "technical": "Technique", "totalScore": "Total", - "catalogSnackBarPrefix": "Catalogue", - "reportExportedAt": "Exporté le", - "noActionLow": "Tout va bien - aucune action n’est nécessaire.", - "noActionMedium": "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel moyen demeure.", - "noActionHigh": "Aucune action concrète ne peut actuellement être déduite de vos réponses, mais un risque résiduel élevé demeure.", - "overallLow": "Bien joué ! Vos appareils sont globalement configurés de façon sûre. Consultez tout de même les recommandations générales.", - "overallMedium": "Il y a une marge d’amélioration. Consultez les recommandations pour chaque appareil.", - "overallHigh": "Plusieurs appareils présentent des risques importants pour la confidentialité/protection des données. Veuillez mettre en œuvre rapidement les mesures prioritaires.", - "dontKnowHint": " {count} réponse{suffix} a été marquée \"Je ne sais pas\" - prenez le temps de mieux comprendre les paramètres de vos appareils." + "urgent": "Urgent", + "website": "Site web", + "websiteOpenFailed": "Impossible d’ouvrir le site web.", + "welcomeDescription": "Renseignez vos appareils intelligents pièce par pièce et obtenez une évaluation de confidentialité avec des recommandations concrètes.", + "welcomeTitle": "Simplications\nContrôle de confidentialité\nSmart Home", + "yes": "Oui" } diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 0405506..f1674c2 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -1,154 +1,463 @@ { "@@locale": "nl", - "appTitle": "Simplications", - "welcomeTitle": "Simplications\nSmart Home\nprivacycheck", - "welcomeDescription": "Leg je slimme apparaten kamer voor kamer vast en ontvang een privacybeoordeling met concrete aanbevelingen.", - "stepSelectRooms": "Kamer kiezen", - "stepCaptureDevices": "Apparaten vastleggen", - "stepAnswerQuestions": "Vragen beantwoorden", - "stepGetRisk": "Risicoprofiel en aanbevelingen ontvangen", - "start": "Starten", - "resume": "Doorgaan", + "a_access_logging_desc": "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_access_logging_title": "Enable access log", + "a_account_required_desc": "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_camera_consent_desc": "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_child_data_limits_desc": "Disable optional profile data and collect only the child data required for core functionality.", + "a_child_data_limits_title": "Minimize data collection", + "a_cloud_required_desc": "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_data_collection_desc": "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_data_collection_title": "Disable history upload", + "a_dont_know_desc": "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "a_dont_know_title": "Get to know device settings better", + "a_expert_access_control_granular_desc": "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_access_control_granular_title": "Introduce granular roles and accounts", + "a_expert_access_revocation_desc": "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_bystander_transparency_desc": "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_bystander_transparency_title": "Add transparency notices for bystanders", + "a_expert_child_data_protection_desc": "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_child_data_protection_title": "Strengthen child data protection", + "a_expert_data_retention_duration_desc": "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_sale_disabled_desc": "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_offline_functionality_desc": "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_offline_functionality_title": "Prioritize offline functionality", + "a_expert_sensitive_inference_controls_desc": "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_expert_sensitive_inference_controls_title": "Restrict inference features", + "a_expert_third_party_sharing_limited_desc": "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_update_support_window_desc": "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_vulnerability_process_desc": "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_family_access_desc": "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_family_access_title": "Separate access rights for household members", + "a_health_sharing_desc": "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_health_sharing_title": "Restrict health data sharing", + "a_informed_desc": "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_informed_title": "Inform household members", + "a_local_control_desc": "Use local scenes/schedules instead of cloud automations where available.", + "a_local_control_title": "Enable local automations", + "a_local_mode_desc": "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_local_mode_title": "Prefer offline use", + "a_location_tracking_desc": "Disable location tracking outside active use or allow it only while the app is in use.", + "a_location_tracking_title": "Reduce location sharing", + "a_map_privacy_desc": "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_mic_active_desc": "Use the physical mute switch or disable the microphone in settings.", + "a_mic_active_title": "Disable microphone when not in use", + "a_motion_detection_desc": "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_network_desc": "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_offline_control_desc": "Configure local schedules and control without cloud dependency if the device supports it.", + "a_offline_control_title": "Set up local control", + "a_offline_fallback_desc": "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_unlock_desc": "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_offline_unlock_title": "Secure offline access", + "a_parental_control_desc": "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_parental_control_title": "Set up parental controls", + "a_password_desc": "Replace the default password with a strong, unique password. Use a password manager.", + "a_password_title": "Change default password", + "a_permissions_desc": "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_permissions_title": "Restrict app permissions", + "a_recording_disable_desc": "Disable recording features by default and enable them only briefly when specifically needed.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_sensor_data_deletion_desc": "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_frequency_desc": "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_granularity_desc": "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_local_desc": "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_sensor_local_title": "Prefer local processing", + "a_sharing_restrictions_desc": "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_skills_permissions_desc": "Review which third-party skills have access. Disable unnecessary skills.", + "a_skills_permissions_title": "Review skills/integrations", + "a_tracking_disabled_desc": "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_two_factor_desc": "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_two_factor_title": "Enable two-factor authentication", + "a_updates_desc": "Enable automatic security updates in device or app settings.", + "a_updates_title": "Enable automatic updates", + "a_usage_tracking_desc": "Disable analytics, telemetry, and usage data collection in app settings.", + "a_usage_tracking_title": "Disable usage tracking", + "a_video_encryption_desc": "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_storage_desc": "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_video_storage_title": "Store recordings locally", + "a_vision_data_desc": "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_vision_data_title": "Process camera data locally only", + "a_voice_history_desc": "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_local_desc": "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_voice_local_title": "Enable local voice processing", "about": "Over", - "faq": "FAQ", - "roomSelectionTitle": "Kamer kiezen", - "roomQuestion": "Welke kamer wilt u nu controleren?", - "roomInstruction": "Tik op een kamer, leg daar uw apparaten vast en keer terug om de volgende kamer te kiezen.", - "results": "Resultaten", - "alreadyEvaluated": "Al beoordeeld", - "notCompleted": "Niet voltooid", - "addRoom": "Kamer toevoegen", - "deviceTitlePrefix": "Apparaten", - "roomCheck": "Kamercheck", - "deviceQuestion": "Welke slimme apparaten gebruikt u in deze kamer?", - "deviceQuestionHint": "Tik op een apparaat om de vragen te beantwoorden.", - "noKnownDevices": "Geen bekende apparaten voor deze kamer. U kunt een eigen apparaat toevoegen.", - "addDevice": "Apparaat\ntoevoegen", - "noDevice": "Geen apparaat", - "nextRoom": "Volgende kamer", - "deleteDeviceTitle": "Apparaat verwijderen?", - "deleteDeviceBody": "Dit aangepaste apparaat wordt verwijderd. Alle gekoppelde instanties worden ook verwijderd.", - "delete": "Verwijderen", - "cancel": "Annuleren", - "confirm": "Bevestigen", - "noDeviceDialogTitle": "Geen apparaten in deze kamer?", - "noDeviceDialogBody": "Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", - "noDeviceDialogBodyWithExisting": "Bestaande apparaatkeuzes voor deze kamer worden verwijderd. Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", - "questionnaireTitle": "Vragen", - "connectedDevice": "Verbonden apparaat", - "done": "Klaar", - "yes": "Ja", - "no": "Nee", - "dontKnow": "Weet ik niet", - "notApplicableForDevice": "Deze vraag is niet van toepassing op mijn apparaat", - "languageDialogTitle": "Taal kiezen", - "currentLanguage": "Huidige taal", - "aboutScreenTitle": "Over de app", - "aboutSubtitle": "Onderzoeksproject over smart-home-privacy", - "aboutProjectName": "Simplications", - "aboutPartnerTuChemnitz": "Technische Universiteit Chemnitz", "aboutPartnerHsAnhalt": "Hogeschool Anhalt", + "aboutPartnerTuChemnitz": "Technische Universiteit Chemnitz", "aboutPartnerVzSachsen": "Consumentenorganisatie Saksen", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "Over de app", + "aboutSubtitle": "Onderzoeksproject over smart-home-privacy", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", - "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", - "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", - "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", - "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", - "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", - "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", - "websiteOpenFailed": "Kon website niet openen.", - "deleteAllDataTitle": "Alle gegevens verwijderen?", - "deleteAllDataBody": "Alle vastgelegde kamers, apparaten en antwoorden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.", - "deleteAllDataButton": "Gegevens verwijderen", + "add": "Toevoegen", + "addDevice": "Apparaat\ntoevoegen", + "addDeviceDialogTitle": "Nieuw apparaat toevoegen", + "addRoom": "Kamer toevoegen", + "addRoomDialogTitle": "Nieuwe kamer toevoegen", "allDataDeleted": "Alle opgeslagen gegevens zijn verwijderd.", - "projectPartners": "Projectpartners", - "coordinationFunding": "Coordinatie en financiering", + "alreadyEvaluated": "Al beoordeeld", + "appTitle": "Simplications", + "baseRiskHint": "bijv. 30 (laag) tot 60 (hoog)", + "baseRiskLabel": "Basisscore risico (0-100)", + "camera": "Camera", + "cancel": "Annuleren", + "catalogButton": "Open volledige actiecatalogus", + "catalogSnackBarPrefix": "Catalogus", + "chooseIcon": "Kies een pictogram:", + "confirm": "Bevestigen", + "connectedDevice": "Verbonden apparaat", "coordination": "Coordinatie", - "platformPrivacy": "Plattform Privatheit", - "fundingAgency": "Financierende instantie", - "fundingAgencyValue": "Duits Federaal Ministerie voor Onderzoek, Technologie en Ruimtevaart\nSubsidie 16KIS1868K", - "website": "Website", + "coordinationFunding": "Coordinatie en financiering", + "currentLanguage": "Huidige taal", "dangerZone": "Gevarenzone", "dangerZoneWarning": "Waarschuwing: deze actie verwijdert alle opgeslagen app-gegevens permanent.", - "faqScreenTitle": "Veelgestelde vragen", - "faqQuestionWhatIs": "Wat is Simplications?", - "faqAnswerWhatIs": "Simplications is een onderzoeksproject over smart-home-privacy. Deze app is een onderdeel van het project en begeleidt je kamer voor kamer door je apparaten met praktische aanbevelingen op basis van je antwoorden.", - "faqQuestionHowWorks": "Hoe werkt de check?", + "delete": "Verwijderen", + "deleteAllDataBody": "Alle vastgelegde kamers, apparaten en antwoorden worden permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.", + "deleteAllDataButton": "Gegevens verwijderen", + "deleteAllDataTitle": "Alle gegevens verwijderen?", + "deleteDeviceBody": "Dit aangepaste apparaat wordt verwijderd. Alle gekoppelde instanties worden ook verwijderd.", + "deleteDeviceTitle": "Apparaat verwijderen?", + "device_baby_monitor": "Baby monitor / baby camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_humidity_sensor": "Humidity sensor", + "device_indoor_camera": "Smart indoor camera", + "device_light_sensor": "Light sensor", + "device_outdoor_camera": "Smart outdoor camera", + "device_robot_vacuum": "Robot vacuum", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_smart_blind": "Smart blind / shutter", + "device_smart_coffee": "Smart coffee machine", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_fridge": "Smart fridge", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_oven": "Smart oven / stove", + "device_smart_plug": "Smart plug", + "device_smart_printer": "Smart printer", + "device_smart_router": "Smart router / mesh system", + "device_smart_scale": "Smart scale", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_toy": "Smart toy", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smart washer / dryer", + "device_temperature_sensor": "Temperature sensor", + "deviceName": "Apparaatnaam", + "deviceNameHint": "bijv. Mijn slimme speaker", + "deviceQuestion": "Welke slimme apparaten gebruikt u in deze kamer?", + "deviceQuestionHint": "Tik op een apparaat om de vragen te beantwoorden.", + "devicesRated": "beoordeelde apparaten", + "deviceTitlePrefix": "Apparaten", + "done": "Klaar", + "dontKnow": "Weet ik niet", + "dontKnowHint": " {count} antwoord{suffix} is gemarkeerd als \"Weet ik niet\" - neem de tijd om de instellingen van je apparaten beter te leren kennen.", + "evaluatedDevices": "Beoordeelde apparaten", + "expertModeQuestionnaireHint": "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourcesHint": "Methodologically inspired by the following research projects:", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeTitle": "Expert mode", + "expertModeToggleHint": "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeToggleLabel": "Enable detailed expert mode", + "exportFailed": "Export mislukt", + "faq": "FAQ", + "faqAnswerCanShare": "Ja. In het resultatenscherm kun je je samenvatting exporteren en delen als tekst of PDF.", + "faqAnswerDataStored": "Je beoordelingsgegevens worden lokaal op je apparaat opgeslagen. In het Over-scherm kun je alle opgeslagen gegevens op elk moment verwijderen.", "faqAnswerHowWorks": "Je kiest een kamer, voegt je slimme apparaten toe, beantwoordt apparaatspecifieke vragen en ontvangt een risicoprofiel met geprioriteerde acties.", - "faqQuestionNoPolicy": "Waarom is er geen privacybeleid?", + "faqAnswerLegalAdvice": "Nee. Simplications biedt praktische oriëntatie en aanbevelingen, maar vervangt geen juridisch advies of professionele beveiligingsconsultatie.", + "faqAnswerNoDevice": "Je kunt aangepaste apparaten toevoegen en de check toch voltooien. De aanbevelingen zijn dan gebaseerd op je configuratie en antwoorden.", "faqAnswerNoPolicy": "Omdat we jouw gegevens niet verzamelen.", + "faqAnswerRiskMeaning": "Deze niveaus geven aan in hoeverre je huidige configuratie privacyrisico’s kan vergroten. Het zijn richtniveaus, geen juridische of technische certificering.", + "faqAnswerWhatIs": "Simplications is een onderzoeksproject over smart-home-privacy. Deze app is een onderdeel van het project en begeleidt je kamer voor kamer door je apparaten met praktische aanbevelingen op basis van je antwoorden.", + "faqQuestionCanShare": "Kan ik mijn resultaten delen?", "faqQuestionDataStored": "Waar worden mijn gegevens opgeslagen?", - "faqAnswerDataStored": "Je beoordelingsgegevens worden lokaal op je apparaat opgeslagen. In het Over-scherm kun je alle opgeslagen gegevens op elk moment verwijderen.", + "faqQuestionHowWorks": "Hoe werkt de check?", + "faqQuestionLegalAdvice": "Is dit juridisch advies?", "faqQuestionNoDevice": "Wat als mijn apparaat niet in de lijst staat?", - "faqAnswerNoDevice": "Je kunt aangepaste apparaten toevoegen en de check toch voltooien. De aanbevelingen zijn dan gebaseerd op je configuratie en antwoorden.", + "faqQuestionNoPolicy": "Waarom is er geen privacybeleid?", "faqQuestionRiskMeaning": "Wat betekenen laag, gemiddeld en hoog risico?", - "faqAnswerRiskMeaning": "Deze niveaus geven aan in hoeverre je huidige configuratie privacyrisico’s kan vergroten. Het zijn richtniveaus, geen juridische of technische certificering.", - "faqQuestionLegalAdvice": "Is dit juridisch advies?", - "faqAnswerLegalAdvice": "Nee. Simplications biedt praktische oriëntatie en aanbevelingen, maar vervangt geen juridisch advies of professionele beveiligingsconsultatie.", - "faqQuestionCanShare": "Kan ik mijn resultaten delen?", - "faqAnswerCanShare": "Ja. In het resultatenscherm kun je je samenvatting exporteren en delen als tekst of PDF.", - "roomDeleteTitle": "Kamer verwijderen?", - "roomDeleteBody": "Deze aangepaste kamer wordt verwijderd. Alle gekoppelde apparaten worden ook verwijderd.", - "add": "Toevoegen", - "addRoomDialogTitle": "Nieuwe kamer toevoegen", - "roomName": "Kamernaam", - "roomNameHint": "bijv. Woonkamer, Garage", - "chooseIcon": "Kies een pictogram:", - "addDeviceDialogTitle": "Nieuw apparaat toevoegen", - "deviceName": "Apparaatnaam", - "deviceNameHint": "bijv. Mijn slimme speaker", - "baseRiskLabel": "Basisscore risico (0-100)", - "baseRiskHint": "bijv. 30 (laag) tot 60 (hoog)", + "faqQuestionWhatIs": "Wat is Simplications?", + "faqScreenTitle": "Veelgestelde vragen", + "fullCatalog": "Volledige actiecatalogus", + "fundingAgency": "Financierende instantie", + "fundingAgencyValue": "Duits Federaal Ministerie voor Onderzoek, Technologie en Ruimtevaart\nSubsidie 16KIS1868K", + "gen_rec_0": "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": "Use a household consent check before buying new devices and involve all household members.", + "generalRecommendations": "Algemene aanbevelingen", + "generalRecommendationsHint": "Deze maatregelen gelden voor je hele smart home, ongeacht afzonderlijke apparaten.", "hasCamera": "Heeft camera?", "hasMicrophone": "Heeft microfoon?", - "camera": "Camera", + "highRisk": "Hoog risico", + "howRiskCalculated": "Hoe wordt risico berekend?", + "languageDialogTitle": "Taal kiezen", + "lowRisk": "Laag risico", + "mediumRisk": "Gemiddeld risico", "microphone": "Microfoon", - "summaryTitle": "Jouw resultaat", - "shareResult": "Resultaat delen", - "shareAsText": "Delen als tekst", - "shareAsPdf": "Delen als PDF", - "restart": "Opnieuw starten", + "nextRoom": "Volgende kamer", + "no": "Nee", + "noActionHigh": "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een hoog restrisico.", + "noActionLow": "Alles is in orde - geen acties vereist.", + "noActionMedium": "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een gemiddeld restrisico.", + "noDevice": "Geen apparaat", + "noDeviceDialogBody": "Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", + "noDeviceDialogBodyWithExisting": "Bestaande apparaatkeuzes voor deze kamer worden verwijderd. Deze kamer wordt zonder apparaten afgerond en telt niet mee in de score.", + "noDeviceDialogTitle": "Geen apparaten in deze kamer?", "noDevicesCaptured": "Geen apparaten vastgelegd.", "noDevicesHint": "Start opnieuw en voeg apparaten toe om een beoordeling te krijgen.", - "highRisk": "Hoog risico", - "mediumRisk": "Gemiddeld risico", - "lowRisk": "Laag risico", - "exportFailed": "Export mislukt", - "summaryShareSubject": "Simplications-resultaat", - "summarySharePdfText": "Simplications-rapport als PDF", - "overview": "Overzicht", - "evaluatedDevices": "Beoordeelde apparaten", - "skippedDevicesHint": "{count} apparaten overgeslagen omdat de vragenlijst niet is voltooid.", - "overallRisk": "Totaal risico", - "generalRecommendations": "Algemene aanbevelingen", - "generalRecommendationsHint": "Deze maatregelen gelden voor je hele smart home, ongeacht afzonderlijke apparaten.", - "fullCatalog": "Volledige actiecatalogus", - "catalogButton": "Open volledige actiecatalogus", - "risk": "Risico", + "noKnownDevices": "Geen bekende apparaten voor deze kamer. U kunt een eigen apparaat toevoegen.", + "notApplicableForDevice": "Deze vraag is niet van toepassing op mijn apparaat", + "notCompleted": "Niet voltooid", "note": "Opmerking", + "optional": "Optioneel", + "overallHigh": "Meerdere apparaten hebben aanzienlijke privacy-/gegevensbeschermingsrisico’s. Voer maatregelen met hoge prioriteit zo snel mogelijk uit.", + "overallLow": "Goed gedaan! Je apparaten zijn grotendeels veilig geconfigureerd. Bekijk alsnog de algemene aanbevelingen.", + "overallMedium": "Er is ruimte voor verbetering. Bekijk de aanbevelingen per apparaat.", + "overallRisk": "Totaal risico", + "overview": "Overzicht", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Projectpartners", + "q_access_logging_hint": "An access log helps you detect suspicious activity.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_account_required_hint": "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_account_required_text": "Can you use the device without a mandatory online account?", + "q_camera_consent_hint": "Cameras in communal or private areas require the consent of all residents.", + "q_camera_consent_text": "Does the camera only record areas for which everyone affected has given their consent?", + "q_child_data_limits_hint": "Child-focused devices should collect and store minimal data.", + "q_child_data_limits_text": "Can you limit which personal data the toy collects?", + "q_cloud_required_hint": "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_cloud_required_text": "Does floor-plan navigation work without cloud connection?", + "q_data_collection_hint": "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_data_collection_text": "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_expert_access_control_granular_hint": "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_access_control_granular_text": "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_revocation_hint": "Fast revocation is crucial when devices are shared or users change.", + "q_expert_access_revocation_text": "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_bystander_transparency_hint": "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_bystander_transparency_text": "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_child_data_protection_hint": "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_child_data_protection_text": "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_data_retention_duration_hint": "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_data_retention_duration_text": "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_sale_disabled_hint": "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_data_sale_disabled_text": "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_offline_functionality_hint": "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_offline_functionality_text": "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_sensitive_inference_controls_hint": "Inference controls reduce risks from secondary use of sensitive data.", + "q_expert_sensitive_inference_controls_text": "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_third_party_sharing_limited_hint": "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_third_party_sharing_limited_text": "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_update_support_window_hint": "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_update_support_window_text": "Is it known how long the vendor guarantees security updates?", + "q_expert_vulnerability_process_hint": "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_vulnerability_process_text": "Is there a documented process for reporting and fixing vulnerabilities?", + "q_family_access_hint": "Household members should have control without visitors changing everything.", + "q_family_access_text": "Can you control who may adjust heating (e.g., restrict guests)?", + "q_health_sharing_hint": "Health data is sensitive. Only authorized apps should have access.", + "q_health_sharing_text": "Can you control which third parties can access your health data?", + "q_informed_hint": "All household members should know what data the device captures.", + "q_informed_text": "Are all people in the household informed about this device and its function?", + "q_local_control_hint": "Local scenes and schedules protect your privacy better.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_mode_hint": "Offline use protects usage data from being sent to the vendor.", + "q_local_mode_text": "Can you use the device via HDMI or local sources without internet?", + "q_location_tracking_hint": "GPS tracking uses battery and can reveal movement patterns.", + "q_location_tracking_text": "Can you disable location tracking when not needed?", + "q_map_privacy_hint": "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_map_privacy_text": "Are created floor plans stored exclusively on the device locally?", + "q_mic_active_hint": "Smart speakers and devices with microphones can be activated unintentionally.", + "q_mic_active_text": "Do you deactivate the microphone when you are not actively using it?", + "q_motion_detection_hint": "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_motion_detection_text": "Can you disable or schedule motion detection when you are at home?", + "q_network_hint": "A dedicated network for smart devices protects your main home network.", + "q_network_text": "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_offline_control_hint": "Offline operation or local automation protects data from cloud access.", + "q_offline_control_text": "Can you operate the thermostat offline (without internet)?", + "q_offline_fallback_hint": "Reliable local operation is important for daily use and privacy.", + "q_offline_fallback_text": "Do devices still work if internet or app connection fails?", + "q_offline_unlock_hint": "Backup options prevent lockout during internet or power outages.", + "q_offline_unlock_text": "Can you unlock the lock offline (e.g., with code or key)?", + "q_parental_control_hint": "Parental controls should allow restricting contacts and features.", + "q_parental_control_text": "Are there parental control features to manage the toy?", + "q_password_hint": "Default passwords are often publicly known and easy to crack.", + "q_password_text": "Have you changed the default password of the device or its linked account?", + "q_permissions_hint": "Only permissions that are truly needed should be enabled.", + "q_permissions_text": "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_recording_disable_hint": "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_recording_disable_text": "Can you disable audio and video recording on the device?", + "q_sensor_data_deletion_hint": "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_data_deletion_text": "Are older measurement values deleted automatically or on request?", + "q_sensor_frequency_hint": "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_frequency_text": "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_granularity_hint": "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_granularity_text": "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_local_hint": "Local processing prevents the vendor from accessing your measurement data.", + "q_sensor_local_text": "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sharing_restrictions_hint": "You should be able to precisely control access to video recordings.", + "q_sharing_restrictions_text": "Can you control who can access live view and recordings?", + "q_skills_permissions_hint": "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_skills_permissions_text": "Do you regularly review which skills have access to your account?", + "q_tracking_disabled_hint": "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_tracking_disabled_text": "Can you completely disable advertising and tracking features?", + "q_two_factor_hint": "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_two_factor_text": "Is two-factor authentication (2FA) available for the lock account?", + "q_updates_hint": "Updates close known security vulnerabilities promptly.", + "q_updates_text": "Are automatic security updates enabled for the device?", + "q_usage_tracking_hint": "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_usage_tracking_text": "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_video_encryption_hint": "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_encryption_text": "Is video recording and transmission encrypted end-to-end?", + "q_video_storage_hint": "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_video_storage_text": "Are recordings stored locally (not only in the vendor cloud)?", + "q_vision_data_hint": "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_vision_data_text": "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_voice_history_hint": "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_history_text": "Can you delete voice recordings from device history or disable this feature?", + "q_voice_local_hint": "Local processing reduces the amount of data sent to the cloud.", + "q_voice_local_text": "Is voice processing performed partly on the device locally?", + "questionnaireTitle": "Vragen", "recommendations": "Aanbevelingen", - "urgent": "Urgent", "recommended": "Aanbevolen", - "optional": "Optioneel", - "social": "Sociaal", - "technical": "Technisch", + "reportExportedAt": "Geëxporteerd op", + "restart": "Opnieuw starten", + "results": "Resultaten", + "resume": "Doorgaan", + "risk": "Risico", + "risk_hint_camera": "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_child_room": "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "risk_hint_lock": "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_mic": "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "room_basement": "Basement / Pantry", + "room_bathroom": "Bathroom", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_garden": "Garden / Outdoor area", + "room_hallway": "Hallway / Entrance", + "room_kitchen": "Kitchen", + "room_living": "Living room", + "room_office": "Office", + "room_whole_home": "Entire home", + "roomCheck": "Kamercheck", + "roomDeleteBody": "Deze aangepaste kamer wordt verwijderd. Alle gekoppelde apparaten worden ook verwijderd.", + "roomDeleteTitle": "Kamer verwijderen?", + "roomInstruction": "Tik op een kamer, leg daar uw apparaten vast en keer terug om de volgende kamer te kiezen.", + "roomName": "Kamernaam", + "roomNameHint": "bijv. Woonkamer, Garage", + "roomQuestion": "Welke kamer wilt u nu controleren?", + "roomSelectionTitle": "Kamer kiezen", "security": "Beveiliging", + "shareAsPdf": "Delen als PDF", + "shareAsText": "Delen als tekst", + "shareResult": "Resultaat delen", + "skippedDevicesHint": "{count} apparaten overgeslagen omdat de vragenlijst niet is voltooid.", + "sl_access_logging": "No access log available", + "sl_account_required": "Mandatory vendor account required", + "sl_base_risk": "Baseline risk of device type", + "sl_camera_consent": "No consent for camera-covered area", + "sl_child_data_limits": "Data collection not limited", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_data_collection": "Temperature history sent to vendor", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_access_revocation": "Individual access revocation not possible", + "sl_expert_bystander_transparency": "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": "Child-data protection measures missing", + "sl_expert_data_retention_duration": "Retention duration unclear or too long", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_offline_functionality": "Meaningful offline operation not possible", + "sl_expert_sensitive_inference_controls": "Controls against sensitive inference missing", + "sl_expert_third_party_sharing_limited": "Third-party sharing not limited", + "sl_expert_update_support_window": "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_family_access": "Access cannot be restricted", + "sl_health_sharing": "Health data shared with third parties", + "sl_informed": "Household members not informed", + "sl_local_control": "Automations require internet connection", + "sl_local_mode": "No offline operation possible", + "sl_location_tracking": "Location tracking enabled", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_mic_active": "Microphone not disabled when unused", + "sl_motion_detection": "Motion detection always active", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_offline_control": "No offline operation possible", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_parental_control": "Parental controls not configured", + "sl_password": "Default password not changed", + "sl_permissions": "App permissions not reduced", + "sl_recording_disable": "Recording cannot be disabled", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_two_factor": "Two-factor authentication missing", + "sl_updates": "Automatic updates not enabled", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", "smartHomePrivacyHeader": "Jouw smart-home-privacy", - "devicesRated": "beoordeelde apparaten", - "howRiskCalculated": "Hoe wordt risico berekend?", + "social": "Sociaal", + "start": "Starten", + "stepAnswerQuestions": "Vragen beantwoorden", + "stepCaptureDevices": "Apparaten vastleggen", + "stepGetRisk": "Risicoprofiel en aanbevelingen ontvangen", + "stepSelectRooms": "Kamer kiezen", + "summarySharePdfText": "Simplications-rapport als PDF", + "summaryShareSubject": "Simplications-resultaat", + "summaryTitle": "Jouw resultaat", + "technical": "Technisch", "totalScore": "Totaal", - "catalogSnackBarPrefix": "Catalogus", - "reportExportedAt": "Geëxporteerd op", - "noActionLow": "Alles is in orde - geen acties vereist.", - "noActionMedium": "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een gemiddeld restrisico.", - "noActionHigh": "Er kunnen momenteel geen concrete acties uit je antwoorden worden afgeleid, maar er blijft een hoog restrisico.", - "overallLow": "Goed gedaan! Je apparaten zijn grotendeels veilig geconfigureerd. Bekijk alsnog de algemene aanbevelingen.", - "overallMedium": "Er is ruimte voor verbetering. Bekijk de aanbevelingen per apparaat.", - "overallHigh": "Meerdere apparaten hebben aanzienlijke privacy-/gegevensbeschermingsrisico’s. Voer maatregelen met hoge prioriteit zo snel mogelijk uit.", - "dontKnowHint": " {count} antwoord{suffix} is gemarkeerd als \"Weet ik niet\" - neem de tijd om de instellingen van je apparaten beter te leren kennen." + "urgent": "Urgent", + "website": "Website", + "websiteOpenFailed": "Kon website niet openen.", + "welcomeDescription": "Leg je slimme apparaten kamer voor kamer vast en ontvang een privacybeoordeling met concrete aanbevelingen.", + "welcomeTitle": "Simplications\nSmart Home\nprivacycheck", + "yes": "Ja" } diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 5aaac56..4b39c91 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -1,154 +1,463 @@ { "@@locale": "pl", - "appTitle": "Simplications", - "welcomeTitle": "Simplications\nKontrola prywatności\nSmart Home", - "welcomeDescription": "Dodaj swoje inteligentne urządzenia pokój po pokoju i otrzymaj ocenę prywatności z konkretnymi zaleceniami.", - "stepSelectRooms": "Wybierz pokój", - "stepCaptureDevices": "Dodaj urządzenia", - "stepAnswerQuestions": "Odpowiedz na pytania", - "stepGetRisk": "Uzyskaj profil ryzyka i zalecenia", - "start": "Start", - "resume": "Wznów", + "a_access_logging_desc": "Enable logging and notifications for lock openings so unauthorized access can be detected.", + "a_access_logging_title": "Enable access log", + "a_account_required_desc": "If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.", + "a_account_required_title": "Minimize privacy impact of required account", + "a_camera_consent_desc": "Obtain consent from everyone affected. The camera must not record areas without consent.", + "a_camera_consent_title": "Align camera positioning with residents", + "a_child_data_limits_desc": "Disable optional profile data and collect only the child data required for core functionality.", + "a_child_data_limits_title": "Minimize data collection", + "a_cloud_required_desc": "Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.", + "a_cloud_required_title": "Reduce cloud dependency", + "a_data_collection_desc": "Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.", + "a_data_collection_title": "Disable history upload", + "a_dont_know_desc": "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + "a_dont_know_title": "Get to know device settings better", + "a_expert_access_control_granular_desc": "Use separate accounts instead of shared logins and grant only the minimum necessary permissions.", + "a_expert_access_control_granular_title": "Introduce granular roles and accounts", + "a_expert_access_revocation_desc": "Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.", + "a_expert_access_revocation_title": "Set up rapid access revocation", + "a_expert_bystander_transparency_desc": "Provide visible notices, recording indicators, and clear information for people in the surrounding area.", + "a_expert_bystander_transparency_title": "Add transparency notices for bystanders", + "a_expert_child_data_protection_desc": "Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.", + "a_expert_child_data_protection_title": "Strengthen child data protection", + "a_expert_data_retention_duration_desc": "Set short, clear retention periods in settings and regularly delete old data.", + "a_expert_data_retention_duration_title": "Define retention periods", + "a_expert_data_sale_disabled_desc": "Enable available \"Do not sell\" options or object to data sharing for commercial purposes.", + "a_expert_data_sale_disabled_title": "Opt out of data sale", + "a_expert_offline_functionality_desc": "Enable local operating modes and minimize mandatory cloud features where the device allows.", + "a_expert_offline_functionality_title": "Prioritize offline functionality", + "a_expert_sensitive_inference_controls_desc": "Disable features that infer sensitive health or behavioral profiles unless strictly necessary.", + "a_expert_sensitive_inference_controls_title": "Restrict inference features", + "a_expert_third_party_sharing_limited_desc": "Disable partner, advertising, and analytics sharing in privacy and account settings.", + "a_expert_third_party_sharing_limited_title": "Limit third-party sharing", + "a_expert_update_support_window_desc": "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + "a_expert_update_support_window_title": "Verify update commitment", + "a_expert_vulnerability_process_desc": "Prefer vendors with a clear security contact and responsible disclosure process.", + "a_expert_vulnerability_process_title": "Review vendor security process", + "a_family_access_desc": "Set up separate roles/accounts so that only authorized people can adjust the heating.", + "a_family_access_title": "Separate access rights for household members", + "a_health_sharing_desc": "Revoke health data access from unnecessary third-party apps in app and account settings.", + "a_health_sharing_title": "Restrict health data sharing", + "a_informed_desc": "Inform all residents about what data the device collects, who has access, and how it can be disabled.", + "a_informed_title": "Inform household members", + "a_local_control_desc": "Use local scenes/schedules instead of cloud automations where available.", + "a_local_control_title": "Enable local automations", + "a_local_mode_desc": "Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.", + "a_local_mode_title": "Prefer offline use", + "a_location_tracking_desc": "Disable location tracking outside active use or allow it only while the app is in use.", + "a_location_tracking_title": "Reduce location sharing", + "a_map_privacy_desc": "Switch storage to local and disable cloud backups of floor plans if the option is available.", + "a_map_privacy_title": "Disable cloud floor-plan storage", + "a_mic_active_desc": "Use the physical mute switch or disable the microphone in settings.", + "a_mic_active_title": "Disable microphone when not in use", + "a_motion_detection_desc": "Disable motion detection when people are home, or set a schedule that activates it only during absence.", + "a_motion_detection_title": "Disable motion detection when at home", + "a_network_desc": "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + "a_network_title": "Set up separate IoT Wi-Fi", + "a_offline_control_desc": "Configure local schedules and control without cloud dependency if the device supports it.", + "a_offline_control_title": "Set up local control", + "a_offline_fallback_desc": "Check local switches/buttons and set up fallback controls so the device remains usable without internet.", + "a_offline_fallback_title": "Ensure offline fallback", + "a_offline_unlock_desc": "Set up a physical key or emergency code and test access when internet is unavailable.", + "a_offline_unlock_title": "Secure offline access", + "a_parental_control_desc": "Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.", + "a_parental_control_title": "Set up parental controls", + "a_password_desc": "Replace the default password with a strong, unique password. Use a password manager.", + "a_password_title": "Change default password", + "a_permissions_desc": "Check companion-app permissions in phone settings and disable unnecessary ones.", + "a_permissions_title": "Restrict app permissions", + "a_recording_disable_desc": "Disable recording features by default and enable them only briefly when specifically needed.", + "a_recording_disable_title": "Disable audio/video recordings", + "a_sensor_data_deletion_desc": "Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.", + "a_sensor_data_deletion_title": "Delete old measurement values", + "a_sensor_frequency_desc": "If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.", + "a_sensor_frequency_title": "Reduce measurement interval", + "a_sensor_granularity_desc": "If possible, switch to less granular display or evaluation, for example daily values instead of minute values.", + "a_sensor_granularity_title": "Show less detailed data", + "a_sensor_local_desc": "Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.", + "a_sensor_local_title": "Prefer local processing", + "a_sharing_restrictions_desc": "Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.", + "a_sharing_restrictions_title": "Restrict camera access", + "a_skills_permissions_desc": "Review which third-party skills have access. Disable unnecessary skills.", + "a_skills_permissions_title": "Review skills/integrations", + "a_tracking_disabled_desc": "Disable tracking, personalized advertising, and optional telemetry in privacy settings.", + "a_tracking_disabled_title": "Disable tracking and advertising", + "a_two_factor_desc": "BSI recommendation: Enable 2FA for your lock account to protect remote access.", + "a_two_factor_title": "Enable two-factor authentication", + "a_updates_desc": "Enable automatic security updates in device or app settings.", + "a_updates_title": "Enable automatic updates", + "a_usage_tracking_desc": "Disable analytics, telemetry, and usage data collection in app settings.", + "a_usage_tracking_title": "Disable usage tracking", + "a_video_encryption_desc": "Enable end-to-end encrypted transmission for live view and recordings in your camera app/settings.", + "a_video_encryption_title": "Enable end-to-end video encryption", + "a_video_storage_desc": "Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.", + "a_video_storage_title": "Store recordings locally", + "a_vision_data_desc": "Disable upload/storage of camera images and use exclusively local navigation processing where possible.", + "a_vision_data_title": "Process camera data locally only", + "a_voice_history_desc": "BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.", + "a_voice_history_title": "Delete voice recordings", + "a_voice_local_desc": "Enable local voice processing if available. If not, minimize cloud storage of voice data.", + "a_voice_local_title": "Enable local voice processing", "about": "O aplikacji", - "faq": "FAQ", - "roomSelectionTitle": "Wybierz pokój", - "roomQuestion": "Który pokój chcesz teraz sprawdzić?", - "roomInstruction": "Stuknij pokój, dodaj urządzenia, a potem wróć tutaj, aby wybrać kolejny pokój.", - "results": "Wyniki", - "alreadyEvaluated": "Już oceniono", - "notCompleted": "Nieukończone", - "addRoom": "Dodaj pokój", - "deviceTitlePrefix": "Urządzenia", - "roomCheck": "Przegląd pokoju", - "deviceQuestion": "Jakich inteligentnych urządzeń używasz w tym pokoju?", - "deviceQuestionHint": "Stuknij urządzenie, aby odpowiedzieć na pytania.", - "noKnownDevices": "Brak znanych urządzeń dla tego pokoju. Możesz dodać własne urządzenie.", - "addDevice": "Dodaj\nurządzenie", - "noDevice": "Brak urządzenia", - "nextRoom": "Następny pokój", - "deleteDeviceTitle": "Usunąć urządzenie?", - "deleteDeviceBody": "To niestandardowe urządzenie zostanie usunięte. Wszystkie powiązane instancje również zostaną usunięte.", - "delete": "Usuń", - "cancel": "Anuluj", - "confirm": "Potwierdź", - "noDeviceDialogTitle": "Brak urządzeń w tym pokoju?", - "noDeviceDialogBody": "Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", - "noDeviceDialogBodyWithExisting": "Istniejące wybory urządzeń dla tego pokoju zostaną odrzucone. Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", - "questionnaireTitle": "Pytania", - "connectedDevice": "Podłączone urządzenie", - "done": "Gotowe", - "yes": "Tak", - "no": "Nie", - "dontKnow": "Nie wiem", - "notApplicableForDevice": "To pytanie nie dotyczy mojego urządzenia", - "languageDialogTitle": "Wybierz język", - "currentLanguage": "Bieżący język", - "aboutScreenTitle": "O aplikacji", - "aboutSubtitle": "Projekt badawczy dotyczący prywatności smart home", - "aboutProjectName": "Simplications", - "aboutPartnerTuChemnitz": "Uniwersytet Techniczny w Chemnitz", "aboutPartnerHsAnhalt": "Anhalt University of Applied Sciences", + "aboutPartnerTuChemnitz": "Uniwersytet Techniczny w Chemnitz", "aboutPartnerVzSachsen": "Centrum Konsumenckie Saksonii", + "aboutProjectName": "Simplications", + "aboutScreenTitle": "O aplikacji", + "aboutSubtitle": "Projekt badawczy dotyczący prywatności smart home", + "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", + "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", + "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", + "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", + "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", + "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", "aboutWebsiteSimplicationsLabel": "simplications.tucmi.de", "aboutWebsiteSimplicationsUrl": "https://simplications.tucmi.de", "aboutWebsiteTuChemnitzLabel": "tu-chemnitz.de", "aboutWebsiteTuChemnitzUrl": "https://www.tu-chemnitz.de", - "aboutWebsiteHsAnhaltLabel": "hs-anhalt.de", - "aboutWebsiteHsAnhaltUrl": "https://www.hs-anhalt.de", "aboutWebsiteVzSachsenLabel": "verbraucherzentrale-sachsen.de", "aboutWebsiteVzSachsenUrl": "https://www.verbraucherzentrale-sachsen.de", - "aboutWebsitePlatformPrivacyLabel": "plattform-privatheit.de", - "aboutWebsitePlatformPrivacyUrl": "https://www.plattform-privatheit.de", - "aboutWebsiteFundingAgencyLabel": "bmftr.bund.de", - "aboutWebsiteFundingAgencyUrl": "https://www.bmftr.bund.de", - "websiteOpenFailed": "Nie można otworzyć strony internetowej.", - "deleteAllDataTitle": "Usunąć wszystkie dane?", - "deleteAllDataBody": "Wszystkie zapisane pokoje, urządzenia i odpowiedzi zostaną trwale usunięte. Tej operacji nie można cofnąć.", - "deleteAllDataButton": "Usuń dane", + "add": "Dodaj", + "addDevice": "Dodaj\nurządzenie", + "addDeviceDialogTitle": "Dodaj nowe urządzenie", + "addRoom": "Dodaj pokój", + "addRoomDialogTitle": "Dodaj nowy pokój", "allDataDeleted": "Wszystkie zapisane dane zostały usunięte.", - "projectPartners": "Partnerzy projektu", - "coordinationFunding": "Koordynacja i finansowanie", + "alreadyEvaluated": "Już oceniono", + "appTitle": "Simplications", + "baseRiskHint": "np. 30 (niskie) do 60 (wysokie)", + "baseRiskLabel": "Bazowy wynik ryzyka (0-100)", + "camera": "Kamera", + "cancel": "Anuluj", + "catalogButton": "Otwórz pełny katalog działań", + "catalogSnackBarPrefix": "Katalog", + "chooseIcon": "Wybierz ikonę:", + "confirm": "Potwierdź", + "connectedDevice": "Podłączone urządzenie", "coordination": "Koordynacja", - "platformPrivacy": "Plattform Privatheit", - "fundingAgency": "Instytucja finansująca", - "fundingAgencyValue": "Federalne Ministerstwo Badań, Technologii i Przestrzeni Kosmicznej\nGrant 16KIS1868K", - "website": "Strona internetowa", + "coordinationFunding": "Koordynacja i finansowanie", + "currentLanguage": "Bieżący język", "dangerZone": "Strefa zagrożenia", "dangerZoneWarning": "Uwaga: Ta operacja trwale usunie wszystkie zapisane dane aplikacji.", - "faqScreenTitle": "Najczęściej zadawane pytania", - "faqQuestionWhatIs": "Czym jest Simplications?", - "faqAnswerWhatIs": "Simplications to projekt badawczy dotyczący prywatności w inteligentnym domu. Ta aplikacja jest jedną z części projektu i prowadzi Cię pokój po pokoju przez Twoje urządzenia, oferując praktyczne zalecenia na podstawie odpowiedzi.", - "faqQuestionHowWorks": "Jak działa kontrola?", + "delete": "Usuń", + "deleteAllDataBody": "Wszystkie zapisane pokoje, urządzenia i odpowiedzi zostaną trwale usunięte. Tej operacji nie można cofnąć.", + "deleteAllDataButton": "Usuń dane", + "deleteAllDataTitle": "Usunąć wszystkie dane?", + "deleteDeviceBody": "To niestandardowe urządzenie zostanie usunięte. Wszystkie powiązane instancje również zostaną usunięte.", + "deleteDeviceTitle": "Usunąć urządzenie?", + "device_baby_monitor": "Baby monitor / baby camera", + "device_doorbell_camera": "Smart doorbell with camera", + "device_fitness_tracker": "Fitness tracker / smartwatch", + "device_humidity_sensor": "Humidity sensor", + "device_indoor_camera": "Smart indoor camera", + "device_light_sensor": "Light sensor", + "device_outdoor_camera": "Smart outdoor camera", + "device_robot_vacuum": "Robot vacuum", + "device_simple_sensor": "Basic sensor (e.g., motion or door sensor)", + "device_smart_blind": "Smart blind / shutter", + "device_smart_coffee": "Smart coffee machine", + "device_smart_display": "Smart display (e.g., Nest Hub)", + "device_smart_fridge": "Smart fridge", + "device_smart_hub": "Smart home hub (e.g., Homey, Home Assistant)", + "device_smart_irrigation": "Smart irrigation system", + "device_smart_light": "Smart lighting", + "device_smart_lock": "Smart door lock", + "device_smart_meter": "Intelligent electricity meter / smart meter", + "device_smart_oven": "Smart oven / stove", + "device_smart_plug": "Smart plug", + "device_smart_printer": "Smart printer", + "device_smart_router": "Smart router / mesh system", + "device_smart_scale": "Smart scale", + "device_smart_speaker": "Smart speaker / voice assistant", + "device_smart_thermostat": "Smart thermostat / heating control", + "device_smart_toy": "Smart toy", + "device_smart_tv": "Smart TV", + "device_smart_washing": "Smart washer / dryer", + "device_temperature_sensor": "Temperature sensor", + "deviceName": "Nazwa urządzenia", + "deviceNameHint": "np. Mój inteligentny głośnik", + "deviceQuestion": "Jakich inteligentnych urządzeń używasz w tym pokoju?", + "deviceQuestionHint": "Stuknij urządzenie, aby odpowiedzieć na pytania.", + "devicesRated": "ocenionych urządzeń", + "deviceTitlePrefix": "Urządzenia", + "done": "Gotowe", + "dontKnow": "Nie wiem", + "dontKnowHint": " {count} odpowiedź{suffix} oznaczono jako \"Nie wiem\" - poświęć czas na lepsze poznanie ustawień swoich urządzeń.", + "evaluatedDevices": "Ocenione urządzenia", + "expertModeQuestionnaireHint": "Expert mode: these questions deepen data-practice and governance coverage (including retention, access control, and third-party sharing) based on CMU IoT Label and Unboxing.IoT.Privacy approaches.", + "expertModeSourceCmuLabel": "CMU IoT Security & Privacy Label (CISPL)", + "expertModeSourceCmuUrl": "https://iotsecurityprivacy.org/labels", + "expertModeSourcesHint": "Methodologically inspired by the following research projects:", + "expertModeSourceUnboxingLabel": "Unboxing.IoT.Privacy (community platform)", + "expertModeSourceUnboxingUrl": "https://iot-privacy.info/project/", + "expertModeTitle": "Expert mode", + "expertModeToggleHint": "Same workflow, but much more detailed device questions (e.g., retention duration, access control, third-party sharing).", + "expertModeToggleLabel": "Enable detailed expert mode", + "exportFailed": "Eksport nie powiódł się", + "faq": "FAQ", + "faqAnswerCanShare": "Tak. Na ekranie wyników możesz wyeksportować i udostępnić podsumowanie jako tekst lub PDF.", + "faqAnswerDataStored": "Twoje dane z oceny są przechowywane lokalnie na urządzeniu. W ekranie O aplikacji możesz w każdej chwili usunąć wszystkie zapisane dane.", "faqAnswerHowWorks": "Wybierasz pokój, dodajesz inteligentne urządzenia, odpowiadasz na pytania dotyczące danego urządzenia i otrzymujesz profil ryzyka z priorytetowymi działaniami.", - "faqQuestionNoPolicy": "Dlaczego nie ma polityki prywatności?", + "faqAnswerLegalAdvice": "Nie. Simplications zapewnia praktyczne wskazówki i rekomendacje, ale nie zastępuje porady prawnej ani profesjonalnej konsultacji bezpieczeństwa.", + "faqAnswerNoDevice": "Możesz dodać własne urządzenia i nadal ukończyć kontrolę. Zalecenia będą wtedy oparte na Twojej konfiguracji i odpowiedziach.", "faqAnswerNoPolicy": "Ponieważ nie zbieramy Twoich danych.", + "faqAnswerRiskMeaning": "Poziomy te pokazują, jak bardzo obecna konfiguracja może zwiększać ryzyka dla prywatności. Są to poziomy orientacyjne, a nie certyfikacja prawna lub techniczna.", + "faqAnswerWhatIs": "Simplications to projekt badawczy dotyczący prywatności w inteligentnym domu. Ta aplikacja jest jedną z części projektu i prowadzi Cię pokój po pokoju przez Twoje urządzenia, oferując praktyczne zalecenia na podstawie odpowiedzi.", + "faqQuestionCanShare": "Czy mogę udostępnić wyniki?", "faqQuestionDataStored": "Gdzie przechowywane są moje dane?", - "faqAnswerDataStored": "Twoje dane z oceny są przechowywane lokalnie na urządzeniu. W ekranie O aplikacji możesz w każdej chwili usunąć wszystkie zapisane dane.", + "faqQuestionHowWorks": "Jak działa kontrola?", + "faqQuestionLegalAdvice": "Czy to porada prawna?", "faqQuestionNoDevice": "Co jeśli mojego urządzenia nie ma na liście?", - "faqAnswerNoDevice": "Możesz dodać własne urządzenia i nadal ukończyć kontrolę. Zalecenia będą wtedy oparte na Twojej konfiguracji i odpowiedziach.", + "faqQuestionNoPolicy": "Dlaczego nie ma polityki prywatności?", "faqQuestionRiskMeaning": "Co oznacza niskie, średnie i wysokie ryzyko?", - "faqAnswerRiskMeaning": "Poziomy te pokazują, jak bardzo obecna konfiguracja może zwiększać ryzyka dla prywatności. Są to poziomy orientacyjne, a nie certyfikacja prawna lub techniczna.", - "faqQuestionLegalAdvice": "Czy to porada prawna?", - "faqAnswerLegalAdvice": "Nie. Simplications zapewnia praktyczne wskazówki i rekomendacje, ale nie zastępuje porady prawnej ani profesjonalnej konsultacji bezpieczeństwa.", - "faqQuestionCanShare": "Czy mogę udostępnić wyniki?", - "faqAnswerCanShare": "Tak. Na ekranie wyników możesz wyeksportować i udostępnić podsumowanie jako tekst lub PDF.", - "roomDeleteTitle": "Usunąć pokój?", - "roomDeleteBody": "Ten niestandardowy pokój zostanie usunięty. Wszystkie powiązane urządzenia również zostaną usunięte.", - "add": "Dodaj", - "addRoomDialogTitle": "Dodaj nowy pokój", - "roomName": "Nazwa pokoju", - "roomNameHint": "np. Salon, Garaż", - "chooseIcon": "Wybierz ikonę:", - "addDeviceDialogTitle": "Dodaj nowe urządzenie", - "deviceName": "Nazwa urządzenia", - "deviceNameHint": "np. Mój inteligentny głośnik", - "baseRiskLabel": "Bazowy wynik ryzyka (0-100)", - "baseRiskHint": "np. 30 (niskie) do 60 (wysokie)", + "faqQuestionWhatIs": "Czym jest Simplications?", + "faqScreenTitle": "Najczęściej zadawane pytania", + "fullCatalog": "Pełny katalog działań", + "fundingAgency": "Instytucja finansująca", + "fundingAgencyValue": "Federalne Ministerstwo Badań, Technologii i Przestrzeni Kosmicznej\nGrant 16KIS1868K", + "gen_rec_0": "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + "gen_rec_1": "Use a password manager and assign a unique, strong password to each device.", + "gen_rec_2": "Enable multi-factor authentication (MFA) for all vendor accounts.", + "gen_rec_3": "Define who in your household is responsible for updates, backups, and accounts.", + "gen_rec_4": "Regularly review (at least once per quarter) all access permissions and accounts.", + "gen_rec_5": "Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.", + "gen_rec_6": "Use a household consent check before buying new devices and involve all household members.", + "generalRecommendations": "Ogólne zalecenia", + "generalRecommendationsHint": "Te środki dotyczą całego Twojego smart home, niezależnie od pojedynczych urządzeń.", "hasCamera": "Ma kamerę?", "hasMicrophone": "Ma mikrofon?", - "camera": "Kamera", + "highRisk": "Wysokie ryzyko", + "howRiskCalculated": "Jak obliczane jest ryzyko?", + "languageDialogTitle": "Wybierz język", + "lowRisk": "Niskie ryzyko", + "mediumRisk": "Średnie ryzyko", "microphone": "Mikrofon", - "summaryTitle": "Twój wynik", - "shareResult": "Udostępnij wynik", - "shareAsText": "Udostępnij jako tekst", - "shareAsPdf": "Udostępnij jako PDF", - "restart": "Uruchom ponownie", + "nextRoom": "Następny pokój", + "no": "Nie", + "noActionHigh": "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje wysokie ryzyko resztkowe.", + "noActionLow": "Wszystko w porządku - nie są wymagane żadne działania.", + "noActionMedium": "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje średnie ryzyko resztkowe.", + "noDevice": "Brak urządzenia", + "noDeviceDialogBody": "Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", + "noDeviceDialogBodyWithExisting": "Istniejące wybory urządzeń dla tego pokoju zostaną odrzucone. Ten pokój zostanie zakończony bez urządzeń i nie wpłynie na ocenę.", + "noDeviceDialogTitle": "Brak urządzeń w tym pokoju?", "noDevicesCaptured": "Nie dodano żadnych urządzeń.", "noDevicesHint": "Uruchom ponownie i dodaj urządzenia, aby otrzymać ocenę.", - "highRisk": "Wysokie ryzyko", - "mediumRisk": "Średnie ryzyko", - "lowRisk": "Niskie ryzyko", - "exportFailed": "Eksport nie powiódł się", - "summaryShareSubject": "Wynik Simplications", - "summarySharePdfText": "Raport Simplications jako PDF", - "overview": "Przegląd", - "evaluatedDevices": "Ocenione urządzenia", - "skippedDevicesHint": "Pominięto {count} urządzeń, ponieważ kwestionariusz nie został ukończony.", - "overallRisk": "Ryzyko całkowite", - "generalRecommendations": "Ogólne zalecenia", - "generalRecommendationsHint": "Te środki dotyczą całego Twojego smart home, niezależnie od pojedynczych urządzeń.", - "fullCatalog": "Pełny katalog działań", - "catalogButton": "Otwórz pełny katalog działań", - "risk": "Ryzyko", + "noKnownDevices": "Brak znanych urządzeń dla tego pokoju. Możesz dodać własne urządzenie.", + "notApplicableForDevice": "To pytanie nie dotyczy mojego urządzenia", + "notCompleted": "Nieukończone", "note": "Uwaga", + "optional": "Opcjonalne", + "overallHigh": "Kilka urządzeń ma istotne ryzyka prywatności/ochrony danych. Prosimy jak najszybciej wdrożyć działania o wysokim priorytecie.", + "overallLow": "Dobra robota! Twoje urządzenia są w większości skonfigurowane bezpiecznie. Mimo to sprawdź ogólne zalecenia.", + "overallMedium": "Jest miejsce na poprawę. Sprawdź zalecenia dla każdego urządzenia.", + "overallRisk": "Ryzyko całkowite", + "overview": "Przegląd", + "platformPrivacy": "Plattform Privatheit", + "projectPartners": "Partnerzy projektu", + "q_access_logging_hint": "An access log helps you detect suspicious activity.", + "q_access_logging_text": "Can you track who opened the lock and when?", + "q_account_required_hint": "Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.", + "q_account_required_text": "Can you use the device without a mandatory online account?", + "q_camera_consent_hint": "Cameras in communal or private areas require the consent of all residents.", + "q_camera_consent_text": "Does the camera only record areas for which everyone affected has given their consent?", + "q_child_data_limits_hint": "Child-focused devices should collect and store minimal data.", + "q_child_data_limits_text": "Can you limit which personal data the toy collects?", + "q_cloud_required_hint": "Devices with local navigation are more privacy-friendly because no room data is uploaded.", + "q_cloud_required_text": "Does floor-plan navigation work without cloud connection?", + "q_data_collection_hint": "History can reveal presence patterns and habits. Local storage reduces unwanted analysis.", + "q_data_collection_text": "Do temperature history and schedules stay on-device (not sent to the vendor)?", + "q_expert_access_control_granular_hint": "Granular access control reduces the risk of unauthorized access and misuse.", + "q_expert_access_control_granular_text": "Can you control access rights granularly (roles, separate accounts, no shared default logins)?", + "q_expert_access_revocation_hint": "Fast revocation is crucial when devices are shared or users change.", + "q_expert_access_revocation_text": "Can digital keys/access rights be revoked quickly and individually?", + "q_expert_bystander_transparency_hint": "This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.", + "q_expert_bystander_transparency_text": "Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?", + "q_expert_child_data_protection_hint": "Devices in child-related contexts require especially strict privacy safeguards.", + "q_expert_child_data_protection_text": "Are child-data protections active (minimization, no profiling, restrictive sharing)?", + "q_expert_data_retention_duration_hint": "Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.", + "q_expert_data_retention_duration_text": "Is the retention duration for your personal data explicitly defined and limited to what is necessary?", + "q_expert_data_sale_disabled_hint": "An explicit \"no data sale\" option is a strong privacy signal.", + "q_expert_data_sale_disabled_text": "Is the sale of your data excluded (or actively disabled, where possible)?", + "q_expert_offline_functionality_hint": "More offline functionality often means less continuous data transfer to the cloud.", + "q_expert_offline_functionality_text": "Does the device remain meaningfully usable with limited internet connectivity?", + "q_expert_sensitive_inference_controls_hint": "Inference controls reduce risks from secondary use of sensitive data.", + "q_expert_sensitive_inference_controls_text": "Are features that infer sensitive health or behavior profiles restricted or disableable?", + "q_expert_third_party_sharing_limited_hint": "Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.", + "q_expert_third_party_sharing_limited_text": "Is third-party sharing disabled or clearly limited to necessary services?", + "q_expert_update_support_window_hint": "A transparent update commitment reduces long-term security and privacy risks.", + "q_expert_update_support_window_text": "Is it known how long the vendor guarantees security updates?", + "q_expert_vulnerability_process_hint": "Prefer vendors that provide responsible disclosure policies or clear security contact information.", + "q_expert_vulnerability_process_text": "Is there a documented process for reporting and fixing vulnerabilities?", + "q_family_access_hint": "Household members should have control without visitors changing everything.", + "q_family_access_text": "Can you control who may adjust heating (e.g., restrict guests)?", + "q_health_sharing_hint": "Health data is sensitive. Only authorized apps should have access.", + "q_health_sharing_text": "Can you control which third parties can access your health data?", + "q_informed_hint": "All household members should know what data the device captures.", + "q_informed_text": "Are all people in the household informed about this device and its function?", + "q_local_control_hint": "Local scenes and schedules protect your privacy better.", + "q_local_control_text": "Can automations run locally without internet?", + "q_local_mode_hint": "Offline use protects usage data from being sent to the vendor.", + "q_local_mode_text": "Can you use the device via HDMI or local sources without internet?", + "q_location_tracking_hint": "GPS tracking uses battery and can reveal movement patterns.", + "q_location_tracking_text": "Can you disable location tracking when not needed?", + "q_map_privacy_hint": "Home floor plans are sensitive information and should not be sent to the vendor.", + "q_map_privacy_text": "Are created floor plans stored exclusively on the device locally?", + "q_mic_active_hint": "Smart speakers and devices with microphones can be activated unintentionally.", + "q_mic_active_text": "Do you deactivate the microphone when you are not actively using it?", + "q_motion_detection_hint": "BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.", + "q_motion_detection_text": "Can you disable or schedule motion detection when you are at home?", + "q_network_hint": "A dedicated network for smart devices protects your main home network.", + "q_network_text": "Is the device connected to a separate smart home or IoT Wi-Fi network?", + "q_offline_control_hint": "Offline operation or local automation protects data from cloud access.", + "q_offline_control_text": "Can you operate the thermostat offline (without internet)?", + "q_offline_fallback_hint": "Reliable local operation is important for daily use and privacy.", + "q_offline_fallback_text": "Do devices still work if internet or app connection fails?", + "q_offline_unlock_hint": "Backup options prevent lockout during internet or power outages.", + "q_offline_unlock_text": "Can you unlock the lock offline (e.g., with code or key)?", + "q_parental_control_hint": "Parental controls should allow restricting contacts and features.", + "q_parental_control_text": "Are there parental control features to manage the toy?", + "q_password_hint": "Default passwords are often publicly known and easy to crack.", + "q_password_text": "Have you changed the default password of the device or its linked account?", + "q_permissions_hint": "Only permissions that are truly needed should be enabled.", + "q_permissions_text": "Have you disabled unnecessary app permissions (e.g., location, contacts)?", + "q_recording_disable_hint": "BSI recommendation: Recordings of children should only be possible with explicit control.", + "q_recording_disable_text": "Can you disable audio and video recording on the device?", + "q_sensor_data_deletion_hint": "Old historical data should not be stored permanently. Check retention settings.", + "q_sensor_data_deletion_text": "Are older measurement values deleted automatically or on request?", + "q_sensor_frequency_hint": "A lower measurement frequency produces less data and limits inferences about your behavior.", + "q_sensor_frequency_text": "Can you reduce the sensor measurement interval (e.g., measure less frequently)?", + "q_sensor_granularity_hint": "Less granular views help prevent inferences about precise presence or behavior patterns.", + "q_sensor_granularity_text": "Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?", + "q_sensor_local_hint": "Local processing prevents the vendor from accessing your measurement data.", + "q_sensor_local_text": "Is measurement data processed and stored locally without being transferred to the cloud?", + "q_sharing_restrictions_hint": "You should be able to precisely control access to video recordings.", + "q_sharing_restrictions_text": "Can you control who can access live view and recordings?", + "q_skills_permissions_hint": "Third-party skills can access sensitive data. Enable only necessary skills.", + "q_skills_permissions_text": "Do you regularly review which skills have access to your account?", + "q_tracking_disabled_hint": "Smart TVs often collect viewing habit data. Look for privacy settings.", + "q_tracking_disabled_text": "Can you completely disable advertising and tracking features?", + "q_two_factor_hint": "BSI recommendation: 2FA protects your account from unauthorized remote access.", + "q_two_factor_text": "Is two-factor authentication (2FA) available for the lock account?", + "q_updates_hint": "Updates close known security vulnerabilities promptly.", + "q_updates_text": "Are automatic security updates enabled for the device?", + "q_usage_tracking_hint": "Usage patterns can reveal presence and habits. Check app privacy settings.", + "q_usage_tracking_text": "Have you disabled or limited vendor collection of switching patterns and usage times?", + "q_video_encryption_hint": "BSI recommendation: Encrypted connections prevent interception and data theft in transit.", + "q_video_encryption_text": "Is video recording and transmission encrypted end-to-end?", + "q_video_storage_hint": "Local storage gives you more control over your data; cloud-only storage depends on vendor security.", + "q_video_storage_text": "Are recordings stored locally (not only in the vendor cloud)?", + "q_vision_data_hint": "Camera images should be processed locally for navigation and neither stored nor sent to the vendor.", + "q_vision_data_text": "If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?", + "q_voice_history_hint": "BSI recommendation: Minimize recording retention or delete recordings regularly.", + "q_voice_history_text": "Can you delete voice recordings from device history or disable this feature?", + "q_voice_local_hint": "Local processing reduces the amount of data sent to the cloud.", + "q_voice_local_text": "Is voice processing performed partly on the device locally?", + "questionnaireTitle": "Pytania", "recommendations": "Zalecenia", - "urgent": "Pilne", "recommended": "Zalecane", - "optional": "Opcjonalne", - "social": "Społeczne", - "technical": "Techniczne", + "reportExportedAt": "Wyeksportowano", + "restart": "Uruchom ponownie", + "results": "Wyniki", + "resume": "Wznów", + "risk": "Ryzyko", + "risk_hint_camera": "You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.", + "risk_hint_child_room": "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + "risk_hint_generic": "You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.", + "risk_hint_lock": "You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.", + "risk_hint_mic": "You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.", + "room_basement": "Basement / Pantry", + "room_bathroom": "Bathroom", + "room_bedroom": "Bedroom", + "room_child_bedroom": "Child's bedroom", + "room_garden": "Garden / Outdoor area", + "room_hallway": "Hallway / Entrance", + "room_kitchen": "Kitchen", + "room_living": "Living room", + "room_office": "Office", + "room_whole_home": "Entire home", + "roomCheck": "Przegląd pokoju", + "roomDeleteBody": "Ten niestandardowy pokój zostanie usunięty. Wszystkie powiązane urządzenia również zostaną usunięte.", + "roomDeleteTitle": "Usunąć pokój?", + "roomInstruction": "Stuknij pokój, dodaj urządzenia, a potem wróć tutaj, aby wybrać kolejny pokój.", + "roomName": "Nazwa pokoju", + "roomNameHint": "np. Salon, Garaż", + "roomQuestion": "Który pokój chcesz teraz sprawdzić?", + "roomSelectionTitle": "Wybierz pokój", "security": "Bezpieczeństwo", + "shareAsPdf": "Udostępnij jako PDF", + "shareAsText": "Udostępnij jako tekst", + "shareResult": "Udostępnij wynik", + "skippedDevicesHint": "Pominięto {count} urządzeń, ponieważ kwestionariusz nie został ukończony.", + "sl_access_logging": "No access log available", + "sl_account_required": "Mandatory vendor account required", + "sl_base_risk": "Baseline risk of device type", + "sl_camera_consent": "No consent for camera-covered area", + "sl_child_data_limits": "Data collection not limited", + "sl_child_room_bonus": "Increased sensitivity: child's bedroom", + "sl_cloud_required": "Navigation only possible via cloud", + "sl_data_collection": "Temperature history sent to vendor", + "sl_expert_access_control_granular": "Granular access control missing", + "sl_expert_access_revocation": "Individual access revocation not possible", + "sl_expert_bystander_transparency": "Transparency for nearby bystanders missing", + "sl_expert_child_data_protection": "Child-data protection measures missing", + "sl_expert_data_retention_duration": "Retention duration unclear or too long", + "sl_expert_data_sale_disabled": "Data sale not excluded", + "sl_expert_offline_functionality": "Meaningful offline operation not possible", + "sl_expert_sensitive_inference_controls": "Controls against sensitive inference missing", + "sl_expert_third_party_sharing_limited": "Third-party sharing not limited", + "sl_expert_update_support_window": "Guaranteed update support window unknown", + "sl_expert_vulnerability_process": "Vulnerability process not documented", + "sl_family_access": "Access cannot be restricted", + "sl_health_sharing": "Health data shared with third parties", + "sl_informed": "Household members not informed", + "sl_local_control": "Automations require internet connection", + "sl_local_mode": "No offline operation possible", + "sl_location_tracking": "Location tracking enabled", + "sl_map_privacy": "Floor plan transmitted to vendor", + "sl_mic_active": "Microphone not disabled when unused", + "sl_motion_detection": "Motion detection always active", + "sl_network": "No separate IoT Wi-Fi configured", + "sl_offline_control": "No offline operation possible", + "sl_offline_fallback": "Device unusable offline", + "sl_offline_unlock": "No offline unlock possible", + "sl_parental_control": "Parental controls not configured", + "sl_password": "Default password not changed", + "sl_permissions": "App permissions not reduced", + "sl_recording_disable": "Recording cannot be disabled", + "sl_sensor_data_deletion": "Old measurement values not deleted", + "sl_sensor_frequency": "Measurement interval not reduced", + "sl_sensor_granularity": "Data stored with too much granularity", + "sl_sensor_local": "Data transferred to cloud", + "sl_sharing_restrictions": "Recording access not controlled", + "sl_skills_permissions": "Skills not reviewed regularly", + "sl_tracking_disabled": "Ad tracking not disabled", + "sl_two_factor": "Two-factor authentication missing", + "sl_updates": "Automatic updates not enabled", + "sl_usage_tracking": "Switching patterns collected by vendor", + "sl_video_encryption": "Video transmission not encrypted", + "sl_video_storage": "Recordings only in vendor cloud", + "sl_vision_data": "Camera images stored or transmitted", + "sl_voice_history": "Voice recordings not deletable", + "sl_voice_local": "No local voice processing", "smartHomePrivacyHeader": "Prywatność Twojego smart home", - "devicesRated": "ocenionych urządzeń", - "howRiskCalculated": "Jak obliczane jest ryzyko?", + "social": "Społeczne", + "start": "Start", + "stepAnswerQuestions": "Odpowiedz na pytania", + "stepCaptureDevices": "Dodaj urządzenia", + "stepGetRisk": "Uzyskaj profil ryzyka i zalecenia", + "stepSelectRooms": "Wybierz pokój", + "summarySharePdfText": "Raport Simplications jako PDF", + "summaryShareSubject": "Wynik Simplications", + "summaryTitle": "Twój wynik", + "technical": "Techniczne", "totalScore": "Łącznie", - "catalogSnackBarPrefix": "Katalog", - "reportExportedAt": "Wyeksportowano", - "noActionLow": "Wszystko w porządku - nie są wymagane żadne działania.", - "noActionMedium": "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje średnie ryzyko resztkowe.", - "noActionHigh": "Na podstawie Twoich odpowiedzi nie można obecnie wskazać konkretnych działań, ale pozostaje wysokie ryzyko resztkowe.", - "overallLow": "Dobra robota! Twoje urządzenia są w większości skonfigurowane bezpiecznie. Mimo to sprawdź ogólne zalecenia.", - "overallMedium": "Jest miejsce na poprawę. Sprawdź zalecenia dla każdego urządzenia.", - "overallHigh": "Kilka urządzeń ma istotne ryzyka prywatności/ochrony danych. Prosimy jak najszybciej wdrożyć działania o wysokim priorytecie.", - "dontKnowHint": " {count} odpowiedź{suffix} oznaczono jako \"Nie wiem\" - poświęć czas na lepsze poznanie ustawień swoich urządzeń." + "urgent": "Pilne", + "website": "Strona internetowa", + "websiteOpenFailed": "Nie można otworzyć strony internetowej.", + "welcomeDescription": "Dodaj swoje inteligentne urządzenia pokój po pokoju i otrzymaj ocenę prywatności z konkretnymi zaleceniami.", + "welcomeTitle": "Simplications\nKontrola prywatności\nSmart Home", + "yes": "Tak" } diff --git a/pubspec.yaml b/pubspec.yaml index 21ce784..19a420c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+9 +version: 1.0.0+10 environment: sdk: ^3.11.5