diff --git a/public/assets/i18n/de.json b/public/assets/i18n/de.json index 1b2580e..e826a34 100755 --- a/public/assets/i18n/de.json +++ b/public/assets/i18n/de.json @@ -4,220 +4,5 @@ "label": "Deutsch", "flag": "🇩🇪", "enabled": true - }, - "pages": { - "main": { - "meta": { - "title": "NO TITLE" - }, - "sections": { - "security": { - "security_kicker": "Security & privacy", - "security_title": "Privacy-first-Design: Deine Testdaten gehören dir.", - "security_intro": "USBCheck wurde von Anfang an so konzipiert, dass deine Daten geschĂĽtzt bleiben. Der Browser-Schnelltest arbeitet ausschlieĂźlich mit Testdateien. Deine eigenen Dokumente, Bilder oder Backups werden weder gelesen noch ĂĽbertragen. Im Pro-Modus hast du volle Kontrolle, ob und welche Reports mit deinem Account synchronisiert werden.", - "security_card1_title": "Local-only Tests", - "security_card1_text": "Alle Schreib- und Lesetests erfolgen lokal auf deinem USB-Stick. Der Browser greift nur auf die Testdateien zu – nicht auf deine privaten Inhalte.", - "security_card2_title": "Transparente Reports", - "security_card2_text": "Wenn du dich einloggst, kannst du Testberichte in deinem Account speichern, exportieren oder wieder löschen. Du entscheidest, welche Daten im System bleiben.", - "security_card3_title": "Schonend fĂĽr deine Hardware", - "security_card3_text": "Der Schnelltest arbeitet mit moderaten Datenmengen, um unnötigen VerschleiĂź zu vermeiden. Der Pro-Modus warnt deutlich, wenn ein Vollscan mit hoher Schreiblast ausgefĂĽhrt wird." - }, - "how": { - "how_kicker": "How USBCheck works", - "how_title": "Schnelltest im Browser, Pro-Modus mit Tiefenanalyse.", - "how_intro": "USBCheck wurde entwickelt, um zwei Welten zu verbinden: einen einfachen Schnelltest fĂĽr alle und einen tiefgehenden Pro-Modus fĂĽr Power-User, Techniker und Admins. Der Schnelltest läuft direkt im Browser, ohne Installation. FĂĽr den Pro-Modus wird ein kleines Helfer-Tool verwendet, das auf Wunsch F3- / badblocks-ähnliche Tests ausfĂĽhrt und damit Kapazitäts-Fakes sicher enttarnt.", - "how_step1_title": "Browser-Test starten", - "how_step1_text": "Du öffnest den Schnelltest unter", - "how_step2_title": "Schreib-, Lese- und IntegritätsprĂĽfung", - "how_step2_text": "Der Browser erstellt Testdateien, misst Schreib- und Leserate und vergleicht Hash-Werte, um Datenfehler zu erkennen – alles lokal und ohne Ăśbertragung deiner Inhalte.", - "how_step3_title": "Optional: Pro-Modus fĂĽr Vollscan", - "how_step3_text": "Wer mehr wissen will, installiert das optionale Helfer-Tool. Dieses kann die gesamte Kapazität des Sticks prĂĽfen, Fakes identifizieren und detaillierte Reports erzeugen – ideal fĂĽr Refurbisher, IT-Abteilungen oder Labore.", - "how_side_title": "Free vs Pro at a glance", - "how_side_free": "pages.main.sections.how.how_side_free", - "how_side_pro": "pages.main.sections.how.how_side_pro", - "how_side_account": "pages.main.sections.how.how_side_account" - }, - "hero": { - "hero_kicker": "Detect fake USB sticks before you lose data", - "hero_title": "Is my USB fake?", - "hero_lead": "USBCheck kombiniert einen schnellen Browser-Test mit einem professionellen Pro-Modus. So erkennst du gefälschte USB-Sticks, zu kleine echte Kapazität und langsame Billig-Controller – bevor deine Dateien verschwinden.", - "cta_quick": "Start free quick check", - "cta_learn": "Learn more about Free & Pro", - "trust1_title": "No install for quick check", - "trust1_text": "Browser-basierter Test direkt auf deinem Stick.", - "trust2_title": "Real write & read tests", - "trust2_text": "Schreib-/Lesetests mit echten Daten – keine synthetische Theorie.", - "trust3_title": "Privacy first", - "trust3_text": "Deine Testdaten bleiben lokal – Reports nur auf Wunsch.", - "quick_label": "QUICK CHECK PREVIEW", - "quick_title": "Test a USB drive in under 2 minutes", - "badge_free": "Free", - "quick_metric1_label": "Write performance", - "quick_metric1_value": "~ 75–120 MB/s*", - "quick_metric2_label": "Integrity checks", - "quick_metric2_value": "512 MB sample", - "quick_intro": "Der Schnelltest prĂĽft eine definierte Datenmenge auf deinem Stick und misst:", - "quick_li1": "Schreib- und Leserate", - "quick_li2": "Datenintegrität (Hash-Vergleich)", - "quick_li3": "Verdächtige AbbrĂĽche oder Fehler", - "quick_visual_title": "Quick test indicator", - "quick_visual_text": "So sieht die Schnelltest-Vorschau aus: GrĂĽn markiert einen stabilen Stick, Orange warnt bei Auffälligkeiten.", - "quick_visual_window": "Result window", - "quick_footnote": "*Beispielwerte – deine Ergebnisse hängen von Stick, Port & System ab.", - "quick_cta": "Go to free quick check" - }, - "features": { - "features_kicker": "Free & Pro features", - "features_title": "Starte mit dem kostenlosen Schnelltest – wechsle in den Pro-Modus, wenn du mehr brauchst.", - "features_intro": "USBCheck wächst mit deinen Anforderungen: Private Nutzer brauchen oft nur eine schnelle Einschätzung. Profis möchten tiefer einsteigen, Kapazitäten verifizieren und Reports archivieren. Genau dafĂĽr ist der Pro-Modus gedacht.", - "features_free_title": "Free Quick Check", - "features_free_badge": "Recommended for most users", - "features_free_text": "Ideal fĂĽr alle, die schnell prĂĽfen möchten, ob ein USB-Stick zumindest grundlegend performant und stabil arbeitet – ganz ohne Installation.", - "features_free_li1": "• Browser-basierter Schnelltest direkt auf deinem Stick", - "features_free_li2": "• Schreib- und Lesegeschwindigkeit mit realen Testdaten", - "features_free_li3": "• Hash-basierte IntegritätsprĂĽfung einer Testmenge", - "features_free_li4": "• Auswahl verschiedener Teststufen (z. B. 200 MB, 2 GB)", - "features_free_li5": "• Keine Registrierung erforderlich", - "features_free_cta": "Start free quick check", - "features_pro_title": "Pro Mode", - "features_pro_badge": "For power users & teams", - "features_pro_text": "FĂĽr alle, die volle Kontrolle brauchen: IT-Abteilungen, Techniker, Refurbisher, Labore oder Unternehmen, die regelmäßig größere Stick-Mengen testen.", - "features_pro_li1": "• Tiefenscan der gesamten Kapazität (ähnlich F3 / badblocks)", - "features_pro_li2": "• Erkennung von Kapazitäts-Fakes und defekten Bereichen", - "features_pro_li3": "• Detaillierte, speicherbare Testberichte (JSON, PDF)", - "features_pro_li4": "• Optional: API-Zugriff fĂĽr automatisierte Testprozesse", - "features_pro_li5": "• Multi-Device- und Multi-User-Support (ĂĽber Login-Bereich)", - "features_pro_note": "Der Pro-Modus erfordert ein kleines Helfer-Tool auf deinem System. Dieses arbeitet lokal und kann bei Bedarf mit deinem Account auf USBCheck verbunden werden." - }, - "faq": { - "faq_kicker": "FAQ", - "faq_title": "Häufige Fragen zu USBCheck", - "faq_intro": "Hier findest du Antworten auf häufig gestellte Fragen. Der FAQ-Bereich kann jederzeit erweitert werden, wenn neue Anwendungsfälle hinzukommen oder du Feedback von Nutzern erhältst.", - "faq_q1": "Ist der Schnelltest wirklich komplett im Browser?", - "faq_a1": "Ja. Der Schnelltest läuft vollständig im Browser und nutzt moderne Browser-APIs, um Testdateien auf deinem Stick zu schreiben und wieder auszulesen. Es wird nichts ohne deine Zustimmung hochgeladen.", - "faq_q2": "Brauche ich ein Konto, um den Schnelltest zu benutzen?", - "faq_a2": "Nein. Der kostenlose Schnelltest ist ohne Registrierung nutzbar. Ein Login ist nur notwendig, wenn du Testberichte speichern, mehrere Sticks verwalten oder den Pro-Modus nutzen möchtest.", - "faq_q3": "Kann USBCheck jeden Fake-Stick sicher erkennen?", - "faq_a3": "Kein Tool kann eine 100 %-Garantie geben. Der Pro-Modus mit Vollscan ist jedoch darauf ausgelegt, typische Fälschungsmuster (Manipulation der gemeldeten Kapazität, instabile Bereiche, Fehler ab einer bestimmten FĂĽllmenge) sehr zuverlässig zu erkennen.", - "faq_q4": "Wie fĂĽgt sich das Tool in mein bestehendes System ein?", - "faq_a4": "USBCheck ist von Anfang an fĂĽr Automatisierung gedacht. Ăśber den Pro-Modus und die geplante API kannst du Tests in bestehende Workflows integrieren – beispielsweise in WareneingangsprĂĽfungen oder Qualitätskontrollen." - }, - "problem": { - "problem_kicker": "Why fake USB sticks are dangerous", - "problem_title": "Gefälschte USB-Sticks kosten Geld – und im schlimmsten Fall deine Daten.", - "problem_p1": "Viele Billig-USB-Sticks werben mit unrealistisch hohen Kapazitäten. In Wahrheit wurde der Controller manipuliert: Der Stick meldet z. B. 256 GB, obwohl physisch nur 32 GB verbaut sind. Die Folge: Daten werden scheinbar korrekt kopiert, später aber stillschweigend ĂĽberschrieben oder beschädigt.", - "problem_p2": "USBCheck hilft dir, solche Fakes zu erkennen, bevor du sie produktiv einsetzt – egal ob du einzelne Sticks privat nutzt oder größere Chargen fĂĽr dein Unternehmen prĂĽfst.", - "problem_card1_title": "Verlust wichtiger Dateien", - "problem_card1_text": "Fotos, Projektdateien, Backups – alles kann betroffen sein, wenn der Stick weniger speichert als behauptet. Defekte Sektoren bleiben oft unbemerkt, bis es zu spät ist.", - "problem_card2_title": "Kosten durch defekte Chargen", - "problem_card2_text": "Unternehmen, Reseller und Agenturen verteilen USB-Sticks oft in groĂźer StĂĽckzahl. Fakes bedeuten Reklamationen, Imageschaden und erneute Produktionskosten.", - "problem_card3_title": "Unsichere Performance", - "problem_card3_text": "Langsame Controller, instabile Firmware und schwankende Schreibraten sind typisch fĂĽr Fake-Sticks. Das erhöht das Risiko von Fehlern – besonders bei groĂźen Dateien." - } - } - }, - "dashboard": { - "sections": { - "dashboard": { - "dashboard_kicker": "Dashboard", - "dashboard_title": "Willkommen", - "dashboard_intro": "Hier kannst du deine USB-Tests verwalten, Geräte ĂĽbersichtlich organisieren und später den Pro-Modus aktivieren. Dieser Bereich ist aktuell noch im Aufbau – du bekommst aber schon einen ersten Ăśberblick.", - "dashboard_plan_label": "Aktueller Plan", - "dashboard_card_tests_title": "Letzte Tests", - "dashboard_card_tests_text": "Hier werden später deine letzten Schnelltests und Pro-Scans angezeigt – inklusive Status, Geschwindigkeit und IntegritätsprĂĽfung.", - "dashboard_card_tests_empty": "Noch keine Testdaten vorhanden. Starte einen ersten Test ĂĽber den Browser oder den Pro-Modus.", - "dashboard_card_devices_title": "Deine USB-Geräte", - "dashboard_card_devices_text": "Später kannst du hier deine getesteten Sticks verwalten: Hersteller, Modell, Seriennummer und erkannte Kapazität.", - "dashboard_card_devices_empty": "Noch keine Geräte gespeichert. Nach deinen ersten Tests kannst du USB-Sticks hier als Geräte anlegen.", - "dashboard_card_next_title": "Nächste Schritte", - "dashboard_card_next_text": "USBCheck ist noch im Aufbau. Du gehörst zu den ersten Nutzern – später findest du hier Pro-Optionen, API-Zugänge und Detail-Reports.", - "dashboard_card_next_item1": "• Browser-FakeCheck testen und Feedback geben", - "dashboard_card_next_item2": "• Pro-Modus-Features definieren (z. B. Vollscan, Reports, API)", - "dashboard_card_next_item3": "• Accounts & SSO (my-log.in) finalisieren", - "dashboard_card_next_cta": "Zum Browser-FakeCheck" - } - }, - "meta": { - "title": "{{primary_domain}} – Dashboard", - "description": "Beschreibung fĂĽr Dashboard auf {{primary_domain}}" - } - }, - "fakecheck": { - "sections": { - "hero": { - "fake_hero_kicker": "FakeCheck – Browser-Modus", - "fake_hero_title": "Ist mein USB-Stick fake?", - "fake_hero_lead": "Der FakeCheck hilft dir, typische Fake-Sticks aufzuspĂĽren: Browser-basierte Schreib-/Lesetests und PlausibilitätsprĂĽfungen der nutzbaren Kapazität – ohne Installation.", - "fake_cta_start": "Browser-Test starten (Demo)", - "fake_cta_back_home": "Zur Ăśbersicht zurĂĽck", - "fake_hero_hint": "Der FakeCheck im Browser arbeitet mit Testdateien und Lese-/Schreibmustern, die du in einem ausgewählten Ordner anlegst. Deine echten Dateien bleiben unangetastet.", - "fake_box_title": "Was der Browser-Test leisten kann", - "fake_box_point1_title": "Schreib-/Lesetest mit Testdateien", - "fake_box_point1_text": "Der Browser legt Testdateien im gewählten Ordner an, misst Schreib- und Leseraten und prĂĽft, ob gelesene Daten mit den geschriebenen Mustern ĂĽbereinstimmen.", - "fake_box_point2_title": "Plausibilitätscheck der Kapazität", - "fake_box_point2_text": "Aus der Menge der erfolgreich geschriebenen und verifizierten Daten ergibt sich ein realistischer Eindruck, wie viel Nutzkapazität tatsächlich stabil ankommt.", - "fake_box_point3_title": "JSON-Report fĂĽr deine Dokumentation", - "fake_box_point3_text": "Alle Ergebnisse werden in einem strukturierten JSON-Report gesammelt, den du speichern, hochladen oder fĂĽr spätere Vergleiche nutzen kannst." - } - }, - "meta": { - "title": "{{primary_domain}} – Fakecheck", - "description": "Beschreibung fĂĽr Fakecheck auf {{primary_domain}}" - } - }, - "login": { - "sections": { - "login": { - "auth_kicker": "Account & Login", - "auth_title": "Melde dich bei USBCheck an", - "auth_intro": "Mit einem Account kannst du Tests speichern, Reports exportieren und den Pro-Modus auf mehreren Geräten nutzen. Die Registrierung ist kostenlos – du kannst später jederzeit auf Pro upgraden.", - "auth_tab_login": "Login", - "auth_tab_register": "Registrieren", - "auth_login_title": "Login", - "auth_login_text": "Melde dich mit deiner E-Mail-Adresse und deinem Passwort an.", - "auth_login_email_label": "E-Mail-Adresse", - "auth_login_password_label": "Passwort", - "auth_login_submit": "Einloggen", - "auth_login_forgot": "Passwort vergessen?", - "auth_register_title": "Kostenlos registrieren", - "auth_register_text": "Erstelle einen kostenlosen Account, um Tests zu speichern, Berichte zu exportieren und den Pro-Modus später freizuschalten.", - "auth_register_name_label": "Name", - "auth_register_email_label": "E-Mail-Adresse", - "auth_register_password_label": "Passwort", - "auth_register_submit": "Account erstellen", - "auth_register_hint": "Durch die Registrierung akzeptierst du die Datenschutzerklärung und das Impressum von USBCheck." - } - }, - "meta": { - "title": "{{primary_domain}} – Login", - "description": "Beschreibung fĂĽr Login auf {{primary_domain}}" - } - }, - "tools": { - "meta": { - "title": "{{primary_domain}} – Tools", - "description": "Beschreibung fĂĽr Tools auf {{primary_domain}}" - } - } - }, - "layout_end": { - "logout_modal_title": "Wirklich ausloggen?", - "logout_modal_text": "Wenn du dich abmeldest, werden deine Sitzung und alle nicht gespeicherten Aktionen beendet. Du kannst dich jederzeit wieder einloggen.", - "logout_modal_cancel": "Abbrechen", - "logout_modal_confirm": "Ja, ausloggen" - }, - "header": { - "header_slogan": "Test USB drives", - "header_btn_login": "\">\n Login", - "header_menu_dashboard": "Dashboard", - "header_menu_logout": "Logout", - "logout_title": "Wirklich abmelden?", - "logout_text": "Du wirst von deinem USBCheck-Konto abgemeldet. Aktive Tests im Browser-Modus sind davon nicht betroffen.", - "logout_cancel": "Abbrechen", - "logout_confirm": "Ja, abmelden" - }, - "footer": { - "footer_imprint": "footer.footer_imprint", - "footer_privacy": "footer.footer_privacy" } -} \ No newline at end of file +} diff --git a/tools/i18n_collect_keys.php b/tools/i18n_collect_keys.php index 1dd391a..f63231b 100644 --- a/tools/i18n_collect_keys.php +++ b/tools/i18n_collect_keys.php @@ -10,6 +10,12 @@ * * und trägt fehlende Keys in public/assets/i18n/de.json ein. * + * WICHTIG (angepasst): + * - partials/structure/{name}.php wird jetzt unter + * partials.structure.{name}.{key} + * abgelegt (nicht mehr im Root). + * - meta-Keys werden in jedem Block an erste Stelle gesetzt. + * * Aufruf: * - CLI: php tools/i18n_collect_keys.php * - HTTP: https://.../tools/i18n_collect_keys.php @@ -344,13 +350,12 @@ foreach ($scanDirs as $dir) { $key = "pages.$slug.sections.main.$key"; - // 4c) partials/structure/{name}.php → z.B. header.*, footer.* + // 4c) partials/structure/{name}.php → z.B. header.*, footer.*, layout_* } elseif (preg_match('~^partials/structure/([^/]+)\.(php|html?|phtml)$~', $relPath, $m)) { $section = $m[1]; // header, footer, layout_start, layout_end, app_config, ... - // FĂĽr header/footer/… legen wir den Root so an, wie die Datei heiĂźt: - // header_slogan → header.header_slogan - $key = $section . '.' . $key; + // NEU: unter partials.structure.{section}.{key} + $key = "partials.structure.$section.$key"; } } @@ -434,6 +439,34 @@ if (is_dir($landingRoot)) { } } +// ------------------------------- +// 5c) meta-Keys in jedem Block nach vorne ziehen +// ------------------------------- +function reorderMetaFirstRecursive(array &$node): void +{ + // Zuerst rekursiv in die Tiefe gehen + foreach ($node as $k => &$v) { + if (is_array($v)) { + reorderMetaFirstRecursive($v); + } + } + unset($v); + + // Wenn es in diesem Block einen 'meta'-Key gibt, diesen an erste Stelle setzen + if (array_key_exists('meta', $node) && count($node) > 1) { + $metaValue = $node['meta']; + unset($node['meta']); + + // Rest in aktueller Reihenfolge behalten + $rest = $node; + + // Neu zusammensetzen: meta zuerst + $node = ['meta' => $metaValue] + $rest; + } +} + +reorderMetaFirstRecursive($data); + // ------------------------------- // 6) de.json zurĂĽckschreiben // -------------------------------