From 4987d05f10eca857a0914dc8a0789d737a18cb2a Mon Sep 17 00:00:00 2001 From: chahinebrini Date: Tue, 9 Jun 2026 03:05:16 +0200 Subject: [PATCH] fix(native): per-device bypass gate + 300k copy + locale/marketing polish - protection.ts: gate recoveringFromBypass on a local 'everActiveHere' flag, set after a successful activateUrlFilter(). The 'protection off' sheet + tamper push no longer fire on fresh devices/sims where protection was never activated locally. Root cause: backend protectionShouldBeActive is the account DEFAULT (only false after a held cooldown), not an 'ever active' signal. - locales: blocklist size 208k -> 300k (native de/en/fr/ar + marketing de/en). - bundles already-deployed prior polish living in these files: native wording (clean->spielfrei, DiGA wording), marketing de-AI pass (live on prod). - NEXT_RELEASE.md seeded for the next app release. Co-Authored-By: Claude Opus 4.8 --- apps/marketing/app/locales/de.json | 72 +++++++++++++-------------- apps/marketing/app/locales/en.json | 72 +++++++++++++-------------- apps/rebreak-native/NEXT_RELEASE.md | 9 ++++ apps/rebreak-native/lib/protection.ts | 40 +++++++++++++-- apps/rebreak-native/locales/ar.json | 10 ++-- apps/rebreak-native/locales/de.json | 24 ++++----- apps/rebreak-native/locales/en.json | 24 ++++----- apps/rebreak-native/locales/fr.json | 10 ++-- 8 files changed, 151 insertions(+), 110 deletions(-) create mode 100644 apps/rebreak-native/NEXT_RELEASE.md diff --git a/apps/marketing/app/locales/de.json b/apps/marketing/app/locales/de.json index fb9e5ff..7abfe3e 100644 --- a/apps/marketing/app/locales/de.json +++ b/apps/marketing/app/locales/de.json @@ -25,16 +25,16 @@ "blocker_feat_custom": "Eigene Domains hinzufügen", "blocker_feat_cooldown": "Cooldown-Schutz vor Rückfällen", "oasis_badge": "Warum OASIS allein nicht reicht", - "oasis_title": "Täglich neue Casinos –", + "oasis_title": "Täglich neue Casinos,", "oasis_subtitle": "ohne Lizenz, ohne Sperre.", - "oasis_desc": "Der OASIS-Selbstausschluss sperrt dich nur bei lizenzierten Anbietern. Doch täglich gehen neue Casino-Seiten online – viele ohne Lizenz, viele offshore. Diese Seiten kennen OASIS nicht. ReBreak schützt dich auch dort: mit einer täglich aktualisierten Datenbank von über 208.000 Domains.", + "oasis_desc": "Der OASIS-Selbstausschluss sperrt dich nur bei lizenzierten Anbietern. Aber täglich gehen neue Casino-Seiten online. Viele ohne Lizenz, viele offshore. Diese Seiten kennen OASIS nicht. ReBreak schützt dich auch dort: mit einer täglich aktualisierten Datenbank von über 300.000 Domains.", "oasis_new_domains": "neue Gambling-Domains täglich", "oasis_offshore": "Casinos ohne Lizenz umgehen OASIS komplett", "oasis_updated": "Domains täglich aktualisiert durch ReBreak", "streak_badge": "Streak & Ersparnisse", "streak_title": "Jeden Tag zählt.", "streak_subtitle": "Sichtbarer Fortschritt.", - "streak_desc": "Sieh wie viele Tage du gewonnen hast – und wie viel Geld du nicht verloren hast. Meilenstein-Badges motivieren weiter.", + "streak_desc": "Sieh wie viele Tage du gewonnen hast, und wie viel Geld du nicht verloren hast. Meilenstein-Badges motivieren weiter.", "streak_days_free": "Tage frei", "streak_saved": "gespart", "crisis_badge": "Krisenmomente meistern", @@ -42,14 +42,14 @@ "crisis_subtitle": "Du bist vorbereitet.", "sos_title": "SOS – Sofort-Hilfe", "sos_subtitle": "Ein Klick. Sofort.", - "sos_desc": "Der Drang dauert im Schnitt nur 15–20 Minuten. ReBreak führt dich Schritt für Schritt durch diesen Moment – bis er vorüber ist.", + "sos_desc": "Der Drang dauert im Schnitt nur 15–20 Minuten. ReBreak führt dich Schritt für Schritt durch diesen Moment, bis er vorüber ist.", "sos_angry": "Wütend", "sos_sad": "Niedergedrückt", "sos_stressed": "Gestresst", "sos_empty": "Leer", "breathing_title": "4-7-8 Atemübung", "breathing_subtitle": "Puls senken in 60 Sekunden", - "breathing_desc": "Wissenschaftlich belegt: 4 Sekunden einatmen, 7 halten, 8 ausatmen – der Körper schaltet automatisch in den Ruhemodus.", + "breathing_desc": "Wissenschaftlich belegt: 4 Sekunden einatmen, 7 halten, 8 ausatmen, und der Körper schaltet automatisch in den Ruhemodus.", "breathing_breathe": "Atme", "breathing_inhale": "4s einatmen", "breathing_hold": "7s halten", @@ -57,19 +57,19 @@ "coach_badge": "Wenn SOS nicht reicht", "coach_title": "Coach & Community.", "coach_subtitle": "Immer auf Abruf.", - "coach_desc": "Ein KI-Coach, der dich wirklich kennt – personalisiert, CBT-basiert, ohne Urteil. Und eine echte Community aus Menschen, die verstehen was du durchmachst.", + "coach_desc": "Ein KI-Coach, der dich kennt: personalisiert, CBT-basiert, ohne Urteil. Dazu eine echte Community aus Menschen, die verstehen was du durchmachst.", "coach_label": "KI-Coach", "founding_badge": "Gründungsmitglied", - "founding_desc": "Die ersten {count} Mitglieder bekommen 1 Monat Standard gratis – automatisch, kein Code nötig.", + "founding_desc": "Die ersten {count} Mitglieder bekommen 1 Monat Standard gratis, automatisch, kein Code nötig.", "founding_slots": "{current} / {total} Plätze", - "founding_cta": "Jetzt Platz sichern – kostenlos", + "founding_cta": "Jetzt Platz sichern, kostenlos", "mail_badge": "Mail-Bereinigung", "mail_title": "Bonus-Mails?", "mail_subtitle": "Nie gesehen.", - "mail_desc": "Casinos bombardieren dich täglich mit Angeboten und Rabatten. ReBreak verbindet sich mit deinem Postfach und verschiebt diese Mails in den Papierkorb – bevor du sie siehst.", - "mail_feat_providers": "Gmail, GMX, Outlook – alle großen Anbieter", + "mail_desc": "Casinos bombardieren dich täglich mit Angeboten und Rabatten. ReBreak verbindet sich mit deinem Postfach und verschiebt diese Mails in den Papierkorb, bevor du sie überhaupt siehst.", + "mail_feat_providers": "Gmail, GMX, Outlook und alle großen Anbieter", "mail_feat_intervals": "Echtzeit, stündlich oder alle 4 Stunden", - "mail_feat_privacy": "Keine Mail wird gelesen – nur analysiert", + "mail_feat_privacy": "Keine Mail wird gelesen, nur analysiert", "mail_mock_blocked": "Blockiert", "mail_mock_scanned": "Gescannt", "mail_mock_rate": "Treffer", @@ -78,7 +78,7 @@ "magic_badge": "Lock-Modus für iPhone", "magic_title": "RebreakMagic.", "magic_subtitle": "Der Lock-Modus ohne Reset.", - "magic_desc": "Eine kleine Mac-Begleit-App, die dein iPhone in den Lock-Modus versetzt — ReBreak ist danach nicht mehr löschbar und der Filter nicht mehr abschaltbar. „Magic“, weil das normalerweise einen kompletten iPhone-Reset bedeutet. Bei uns: USB anschließen, ein Klick, ~2 Minuten — Fotos, Apps und Daten bleiben.", + "magic_desc": "Eine kleine Mac-Begleit-App, die dein iPhone in den Lock-Modus versetzt. ReBreak ist danach nicht mehr löschbar und der Filter nicht mehr abschaltbar. „Magic“, weil das normalerweise einen kompletten iPhone-Reset bedeutet. Bei uns reicht USB anschließen, ein Klick, ~2 Minuten. Fotos, Apps und Daten bleiben.", "magic_feat_noreset": "Kein Werks-Reset, keine Datenmigration", "magic_feat_speed": "~2 Minuten Setup via USB-Kabel", "magic_feat_lock": "App nicht mehr löschbar, Filter nicht abschaltbar", @@ -87,8 +87,8 @@ "magic_cta_windows": "ReBreak für Windows laden", "magic_note": "Optional. Empfohlen für Phasen mit hohem Bypass-Risiko.", "final_title": "Fang jetzt an.", - "final_desc": "Du bist nicht kaputt. Das System ist manipulativ. Wir helfen dir zurück.", - "final_cta": "14 Tage kostenlos testen – anonym", + "final_desc": "Du bist nicht kaputt. Das System ist darauf ausgelegt, dich festzuhalten. Wir helfen dir wieder raus.", + "final_cta": "14 Tage kostenlos testen, anonym", "chat_msg_1": "Ich spüre den Drang wieder stark...", "chat_msg_2": "Ich verstehe. Was triggert dich gerade? Lass uns das durchgehen.", "chat_msg_3": "Stress bei der Arbeit.", @@ -97,7 +97,7 @@ "blocked": { "lyra": "Lyra", "title": "Diese Seite ist blockiert", - "message": "ReBreak hat diese Seite für dich gesperrt. Du hast dich entschieden, stark zu sein – und das hier ist der Beweis.", + "message": "ReBreak hat diese Seite für dich gesperrt. Du hast dich entschieden, stark zu sein, und das hier ist der Beweis.", "day": "Tag", "days": "Tage", "clean": "clean", @@ -107,14 +107,14 @@ "back_to_app": "Zurück zur App", "quote_1": "Jede blockierte Seite ist ein Beweis deiner Stärke.", "quote_2": "Der Drang geht vorbei. Dein Fortschritt bleibt.", - "quote_3": "Du hast diese Seite nicht gebraucht – und du brauchst sie nicht.", + "quote_3": "Du hast diese Seite nicht gebraucht, und du brauchst sie nicht.", "quote_4": "Stark sein bedeutet, in diesem Moment Nein zu sagen.", "quote_5": "Das hier ist dein Schutzwall. Du hast ihn aufgebaut." }, "resources": { "blocklist_title": "Community-Blocklist", - "blocklist_desc": "Wächst täglich – von der Community, für die Community. Aktuell {count} Domains blockiert.", - "chart_label": "Blockierte Domains – letzten 12 Monate", + "blocklist_desc": "Wächst täglich, von der Community für die Community. Aktuell {count} Domains blockiert.", + "chart_label": "Blockierte Domains, letzte 12 Monate", "hotlines_title": "Sofort-Hilfe & Hotlines", "hotlines_desc": "Kostenlos, anonym, rund um die Uhr erreichbar.", "tips_title": "Was jetzt hilft", @@ -129,28 +129,28 @@ "tip_breathing": "4-7-8 Atemübung bei akutem Drang", "tip_breathing_desc": "4 Sek. einatmen, 7 halten, 8 ausatmen. Aktiviert das parasympathische Nervensystem und bricht den Impulsdrang.", "tip_15min": "Die 15-Minuten-Regel", - "tip_15min_desc": "Warte 15 Minuten bevor du eine Entscheidung triffst. Gambling-Drang ist eine Welle – sie kommt und geht.", + "tip_15min_desc": "Warte 15 Minuten bevor du eine Entscheidung triffst. Gambling-Drang ist eine Welle, die kommt und wieder geht.", "tip_move": "Raus und bewegen", "tip_move_desc": "Ein 10-minütiger Spaziergang setzt Endorphine frei und unterbricht automatisch den Drang-Kreislauf.", "tip_triggers": "Trigger kennen", "tip_triggers_desc": "Stress, Langeweile, Abend allein? Wer seine Muster kennt, kann gegensteuern bevor der Drang überwältigt.", "fact1_title": "Variable Belohnungen aktivieren denselben Kreislauf wie Drogen", "fact1_text": "Das Nicht-Wissen, ob man gewinnt, schüttet mehr Dopamin aus als ein sicherer Gewinn. Design, kein Zufall.", - "fact2_title": "Online-Casinos sind 24/7 verfügbar – kein natürlicher Stopper", + "fact2_title": "Online-Casinos sind 24/7 verfügbar, ohne natürlichen Stopper", "fact2_text": "Früher war das Casino physisch. Heute ist es das Handy. Kein Schließtag, keine Scham durch andere.", "fact3_title": "Virtuelle Währungen verschleiern echten Geldverlust", - "fact3_text": "Chips, Coins, Credits – das Gehirn verarbeitet diese nicht wie Bargeld. Das ist kein Fehler im System.", - "fact4_title": "Die Quote gewinnt immer – mathematisch", + "fact3_text": "Chips, Coins, Credits: das Gehirn verarbeitet diese nicht wie Bargeld. Das ist kein Fehler im System.", + "fact4_title": "Die Quote gewinnt immer, rein mathematisch", "fact4_text": "Jedes legale Casino hat eingebaute Marge. Langfristig verlieren 100 % der Spieler Geld. Keine Pechsträhne." }, "pricing": { - "founding_banner": "Founding Member – Die ersten 100 bekommen 3 Monate Legend gratis", + "founding_banner": "Founding Member: Die ersten 100 bekommen 3 Monate Legend gratis", "title": "Dein Weg, dein Tempo", - "subtitle_start": "Jetzt starten –", + "subtitle_start": "Jetzt starten,", "subtitle_end": "wähle deinen Plan.", - "cross_device_tagline": "Ein Abo schützt alle deine Geräte – Handy und Computer, geräteübergreifend.", + "cross_device_tagline": "Ein Abo schützt alle deine Geräte: Handy und Computer, geräteübergreifend.", "pro_meaning_title": "Was bedeutet Pro wirklich?", - "pro_meaning_desc": "Mit Pro trägst du aktiv dazu bei, dass die ReBreak Blocklist für alle wächst. Du kannst Domains direkt hinzufügen und Einreichungen anderer Nutzer prüfen. Du leitest Gruppen, hast keinen KI-Gedächtnisverlust – und stehst an der Spitze für alle, die noch kämpfen.", + "pro_meaning_desc": "Mit Pro trägst du aktiv dazu bei, dass die ReBreak Blocklist für alle wächst. Du kannst Domains direkt hinzufügen und Einreichungen anderer Nutzer prüfen. Du leitest Gruppen, hast keinen KI-Gedächtnisverlust und stehst vorne für alle, die noch kämpfen.", "comparison_title": "Was ist inklusive?", "comparison_subtitle": "Vollständiger Vergleich aller Pläne", "feature": "Feature", @@ -172,17 +172,17 @@ "billing_per_month": "/ Monat", "billing_per_year": "/ Monat, jährlich", "plan_pro_title": "Pro", - "plan_pro_desc": "Voller Schutz für ein Gerät – alles, was du im Alltag brauchst.", + "plan_pro_desc": "Voller Schutz für ein Gerät, alles was du im Alltag brauchst.", "plan_pro_btn": "Pro starten", "plan_legend_title": "Legend", - "plan_legend_desc": "Lückenloser Schutz auf bis zu 5 Geräten – inkl. Selbstbindungs-Modus.", + "plan_legend_desc": "Lückenloser Schutz auf bis zu 5 Geräten, inkl. Selbstbindungs-Modus.", "plan_legend_btn": "Legend starten", "plan_loading": "Wird geladen...", "plan_recommended": "Empfohlen", - "feat_pro_devices": "2 Geräte – 1 Smartphone (iOS/Android) + 1 Computer (Mac oder Windows)", + "feat_pro_devices": "2 Geräte: 1 Smartphone (iOS/Android) + 1 Computer (Mac oder Windows)", "feat_pro_domains": "5 eigene Domains (rückfüllbar)", "feat_pro_mail": "Echtzeit-Mail-Schutz (IMAP-IDLE, 2 Konten)", - "feat_blocklist": "ReBreak Blocklist (208k+ Domains)", + "feat_blocklist": "ReBreak Blocklist (300k+ Domains)", "feat_coach_pro": "KI-Coach Lyra mit Streak & Urge-Statistiken", "feat_streak": "Streak & Ersparnisse Tracker", "feat_urge": "Urge Tracker + Atemübung", @@ -192,10 +192,10 @@ "feat_buddy": "Buddy System", "feat_urge_stats": "Urge-Statistiken & Muster", "feat_all_pro": "Alles aus Pro", - "feat_legend_devices": "5 Geräte – 3 mobil (iOS/Android) + 2 stationär (Mac & Windows)", + "feat_legend_devices": "5 Geräte: 3 mobil (iOS/Android) + 2 stationär (Mac & Windows)", "feat_legend_domains": "Unbegrenzte eigene Domains", "feat_legend_mail": "Echtzeit-Mail-Schutz (IMAP-IDLE, unbegrenzte Konten)", - "feat_legend_binder": "RebReakBinder – Selbstbindungs-Modus (opt-in, macOS)", + "feat_legend_binder": "RebReakBinder: Selbstbindungs-Modus (opt-in, macOS)", "feat_legend_add": "Domains direkt zur ReBreak Blocklist hinzufügen", "feat_legend_validate": "Community-Domains validieren", "feat_legend_groups": "Gruppen gründen & leiten", @@ -204,7 +204,7 @@ "comp_domains": "Eigene Domains", "comp_mail": "Mail-Schutz", "comp_coach": "KI-Coach Lyra", - "comp_blocklist": "ReBreak Blocklist (208k+ Domains)", + "comp_blocklist": "ReBreak Blocklist (300k+ Domains)", "comp_streak": "Streak & Ersparnisse Tracker", "comp_urge": "Urge Tracker + Atemübung", "comp_sos": "SOS-Button (Sofort-Hilfe)", @@ -225,15 +225,15 @@ "comp_pro_coach_val": "Streak + Urge-Stats", "comp_legend_coach_val": "+ Langzeit-Gedächtnis", "faq1_q": "Muss ich eine E-Mail-Adresse angeben?", - "faq1_a": "Ja, für die Registrierung wird eine E-Mail-Adresse benötigt. Deine Daten werden ausschließlich auf deutschen Servern gespeichert und verarbeitet – vollständig anonym, nach strengen DSGVO-Standards. Kein Name, kein Standort, kein Nutzungsverhalten wird an Dritte weitergegeben.", + "faq1_a": "Ja, für die Registrierung wird eine E-Mail-Adresse benötigt. Deine Daten werden ausschließlich auf deutschen Servern gespeichert und verarbeitet, vollständig anonym und nach strengen DSGVO-Standards. Kein Name, kein Standort, kein Nutzungsverhalten wird an Dritte weitergegeben.", "faq2_q": "Was ist der Unterschied zwischen Pro und Legend?", - "faq2_a": "Pro schützt 2 Geräte – dein Smartphone und deinen Computer (Mac oder Windows) – mit Echtzeit-Mail-Schutz (IMAP-IDLE, 2 Konten), ReBreak Blocklist (208k+ Domains) und Lyra mit Streak/Urge-Stats. Legend deckt BIS ZU 5 Geräte ab (3 mobil + 2 stationär), hat unbegrenzte Mail-Konten und Domains, schaltet den Rebreak-Magic-Selbstbindungs-Modus frei und gibt dir Lyra mit Langzeit-Gedächtnis sowie Gruppen-Leitung.", + "faq2_a": "Pro schützt 2 Geräte, also dein Smartphone und deinen Computer (Mac oder Windows), mit Echtzeit-Mail-Schutz (IMAP-IDLE, 2 Konten), ReBreak Blocklist (300k+ Domains) und Lyra mit Streak/Urge-Stats. Legend deckt BIS ZU 5 Geräte ab (3 mobil + 2 stationär), hat unbegrenzte Mail-Konten und Domains, schaltet den Rebreak-Magic-Selbstbindungs-Modus frei und gibt dir Lyra mit Langzeit-Gedächtnis sowie Gruppen-Leitung.", "faq3_q": "Welche Zahlungszyklen gibt es?", "faq3_a": "Monatlich (voller Preis) oder jährlich (Spare 39%). Du kannst jederzeit wechseln.", "faq4_q": "Kann ich jederzeit kündigen?", "faq4_a": "Ja, du kannst dein Abo jederzeit kündigen. Du behältst den Zugang bis zum Ende der bezahlten Periode.", "faq5_q": "Was ist der RebReakBinder?", - "faq5_a": "Der RebReakBinder ist ein optionaler Selbstbindungs-Modus auf macOS (Legend exklusiv). Er bindet die Schutz-App so an dein Gerät, dass du sie im akuten Druck NICHT einfach selbst deinstallieren kannst – nur eine Vertrauensperson kann lösen. Vollständig opt-in, jederzeit umkehrbar mit Bedenkzeit.", + "faq5_a": "Der RebReakBinder ist ein optionaler Selbstbindungs-Modus auf macOS (Legend exklusiv). Er bindet die Schutz-App so an dein Gerät, dass du sie im akuten Druck NICHT einfach selbst deinstallieren kannst. Lösen kann nur eine Vertrauensperson. Vollständig opt-in, jederzeit umkehrbar mit Bedenkzeit.", "faq6_q": "Ist ReBreak ein Ersatz für professionelle Hilfe?", "faq6_a": "Nein. ReBreak ist ein Selbsthilfe-Tool. Bei Krisen: BZgA Sucht & Drogen Hotline 0800 1372700 oder Telefonseelsorge 0800 1110 111." } diff --git a/apps/marketing/app/locales/en.json b/apps/marketing/app/locales/en.json index 1bf644d..2047008 100644 --- a/apps/marketing/app/locales/en.json +++ b/apps/marketing/app/locales/en.json @@ -25,16 +25,16 @@ "blocker_feat_custom": "Add custom domains", "blocker_feat_cooldown": "Cooldown protection against relapses", "oasis_badge": "Why OASIS alone isn't enough", - "oasis_title": "New casinos daily –", + "oasis_title": "New casinos every day,", "oasis_subtitle": "without license, without ban.", - "oasis_desc": "The OASIS self-exclusion only blocks you at licensed providers. But new casino sites go online daily – many without a license, many offshore. These sites don't know OASIS. ReBreak protects you there too: with a daily updated database of over 208,000 domains.", + "oasis_desc": "The OASIS self-exclusion only blocks you at licensed providers. But new casino sites go online every single day. Many without a license, many offshore. These sites don't know OASIS. ReBreak protects you there too, with a daily updated database of over 300,000 domains.", "oasis_new_domains": "new gambling domains daily", "oasis_offshore": "Casinos without license bypass OASIS completely", "oasis_updated": "Domains updated daily by ReBreak", "streak_badge": "Streak & Savings", "streak_title": "Every day counts.", "streak_subtitle": "Visible progress.", - "streak_desc": "See how many days you've won – and how much money you haven't lost. Milestone badges keep you motivated.", + "streak_desc": "See how many days you've won, and how much money you haven't lost. Milestone badges keep you motivated.", "streak_days_free": "Days free", "streak_saved": "saved", "crisis_badge": "Mastering crisis moments", @@ -42,14 +42,14 @@ "crisis_subtitle": "You are prepared.", "sos_title": "SOS – Instant Help", "sos_subtitle": "One click. Instant.", - "sos_desc": "The urge lasts on average only 15–20 minutes. ReBreak guides you step by step through this moment – until it passes.", + "sos_desc": "The urge lasts on average only 15–20 minutes. ReBreak guides you step by step through this moment, until it passes.", "sos_angry": "Angry", "sos_sad": "Depressed", "sos_stressed": "Stressed", "sos_empty": "Empty", "breathing_title": "4-7-8 Breathing Exercise", "breathing_subtitle": "Lower pulse in 60 seconds", - "breathing_desc": "Scientifically proven: breathe in for 4 seconds, hold for 7, breathe out for 8 – the body automatically switches to rest mode.", + "breathing_desc": "Scientifically proven: breathe in for 4 seconds, hold for 7, breathe out for 8, and the body automatically switches to rest mode.", "breathing_breathe": "Breathe", "breathing_inhale": "4s inhale", "breathing_hold": "7s hold", @@ -57,19 +57,19 @@ "coach_badge": "When SOS isn't enough", "coach_title": "Coach & Community.", "coach_subtitle": "Always on call.", - "coach_desc": "An AI coach that truly knows you – personalized, CBT-based, without judgment. And a real community of people who understand what you're going through.", + "coach_desc": "An AI coach that knows you: personalized, CBT-based, without judgment. Plus a real community of people who understand what you're going through.", "coach_label": "AI Coach", "founding_badge": "Founding Member", - "founding_desc": "The first {count} members get 1 month Standard free – automatically, no code needed.", + "founding_desc": "The first {count} members get 1 month Standard free, automatically, no code needed.", "founding_slots": "{current} / {total} Spots", - "founding_cta": "Secure your spot – free", + "founding_cta": "Secure your spot, free", "mail_badge": "Mail Cleanup", "mail_title": "Bonus emails?", "mail_subtitle": "Never seen.", - "mail_desc": "Casinos bombard you daily with offers and discounts. ReBreak connects to your inbox and moves these emails to trash – before you see them.", - "mail_feat_providers": "Gmail, GMX, Outlook – all major providers", + "mail_desc": "Casinos bombard you daily with offers and discounts. ReBreak connects to your inbox and moves these emails to trash before you ever see them.", + "mail_feat_providers": "Gmail, GMX, Outlook and all major providers", "mail_feat_intervals": "Real-time, hourly or every 4 hours", - "mail_feat_privacy": "No email is read – only analyzed", + "mail_feat_privacy": "No email is read, only analyzed", "mail_mock_blocked": "Blocked", "mail_mock_scanned": "Scanned", "mail_mock_rate": "Hit rate", @@ -78,7 +78,7 @@ "magic_badge": "Lock Mode for iPhone", "magic_title": "RebreakMagic.", "magic_subtitle": "Lock Mode without a reset.", - "magic_desc": "A small Mac companion app that puts your iPhone into Lock Mode — ReBreak can no longer be deleted and the filter can no longer be switched off. “Magic” because this normally requires a full iPhone factory reset. With us: plug in via USB, one click, ~2 minutes — photos, apps and data stay.", + "magic_desc": "A small Mac companion app that puts your iPhone into Lock Mode. ReBreak can no longer be deleted and the filter can no longer be switched off. “Magic” because this normally requires a full iPhone factory reset. With us it's plug in via USB, one click, ~2 minutes. Your photos, apps and data stay.", "magic_feat_noreset": "No factory reset, no data migration", "magic_feat_speed": "~2 minute setup via USB cable", "magic_feat_lock": "App not removable, filter not switchable", @@ -87,8 +87,8 @@ "magic_cta_windows": "Download ReBreak for Windows", "magic_note": "Optional. Recommended for phases with high bypass risk.", "final_title": "Start now.", - "final_desc": "You're not broken. The system is manipulative. We help you back.", - "final_cta": "Try free for 14 days – anonymous", + "final_desc": "You're not broken. The system is built to keep you hooked. We help you find your way back.", + "final_cta": "Try free for 14 days, anonymous", "chat_msg_1": "I feel the urge strongly again...", "chat_msg_2": "I understand. What's triggering you right now? Let's go through this.", "chat_msg_3": "Stress at work.", @@ -97,7 +97,7 @@ "blocked": { "lyra": "Lyra", "title": "This site is blocked", - "message": "ReBreak blocked this site for you. You chose to be strong – and this is the proof.", + "message": "ReBreak blocked this site for you. You chose to be strong, and this is the proof.", "day": "Day", "days": "Days", "clean": "clean", @@ -107,14 +107,14 @@ "back_to_app": "Back to app", "quote_1": "Every blocked site is proof of your strength.", "quote_2": "The urge passes. Your progress stays.", - "quote_3": "You didn't need this site – and you don't need it.", + "quote_3": "You didn't need this site, and you don't need it.", "quote_4": "Being strong means saying no in this moment.", "quote_5": "This is your wall of protection. You built it." }, "resources": { "blocklist_title": "Community Blocklist", - "blocklist_desc": "Growing daily – by the community, for the community. Currently {count} domains blocked.", - "chart_label": "Blocked domains – last 12 months", + "blocklist_desc": "Growing daily, by the community for the community. Currently {count} domains blocked.", + "chart_label": "Blocked domains, last 12 months", "hotlines_title": "Instant Help & Hotlines", "hotlines_desc": "Free, anonymous, available 24/7.", "tips_title": "What helps now", @@ -129,28 +129,28 @@ "tip_breathing": "4-7-8 breathing exercise for acute urges", "tip_breathing_desc": "Inhale 4 sec, hold 7, exhale 8. Activates the parasympathetic nervous system and breaks the impulse.", "tip_15min": "The 15-minute rule", - "tip_15min_desc": "Wait 15 minutes before making a decision. Gambling urge is a wave – it comes and goes.", + "tip_15min_desc": "Wait 15 minutes before making a decision. The gambling urge is a wave that comes and goes.", "tip_move": "Get out and move", "tip_move_desc": "A 10-minute walk releases endorphins and automatically interrupts the urge cycle.", "tip_triggers": "Know your triggers", "tip_triggers_desc": "Stress, boredom, evening alone? Those who know their patterns can counteract before the urge overwhelms.", "fact1_title": "Variable rewards activate the same circuit as drugs", "fact1_text": "Not knowing if you'll win releases more dopamine than a certain win. Design, not accident.", - "fact2_title": "Online casinos are available 24/7 – no natural stopper", + "fact2_title": "Online casinos are available 24/7, with no natural stopper", "fact2_text": "The casino used to be physical. Today it's your phone. No closing day, no shame from others.", "fact3_title": "Virtual currencies obscure real money loss", - "fact3_text": "Chips, coins, credits – the brain doesn't process these like cash. That's not a bug in the system.", - "fact4_title": "The house always wins – mathematically", + "fact3_text": "Chips, coins, credits: the brain doesn't process these like cash. That's not a bug in the system.", + "fact4_title": "The house always wins, mathematically", "fact4_text": "Every legal casino has a built-in margin. Long-term, 100% of players lose money. No bad luck streak." }, "pricing": { - "founding_banner": "Founding Member – First 100 get 3 months Legend free", + "founding_banner": "Founding Member: First 100 get 3 months Legend free", "title": "Your path, your pace", - "subtitle_start": "Start now –", + "subtitle_start": "Start now,", "subtitle_end": "choose your plan.", - "cross_device_tagline": "One subscription protects all your devices – phone and computer, everywhere.", + "cross_device_tagline": "One subscription protects all your devices: phone and computer, everywhere.", "pro_meaning_title": "What does Pro really mean?", - "pro_meaning_desc": "With Pro you actively contribute to growing the ReBreak blocklist for everyone. You can add domains directly and review submissions from other users. You lead groups, have no AI memory loss – and stand at the forefront for everyone still fighting.", + "pro_meaning_desc": "With Pro you actively contribute to growing the ReBreak blocklist for everyone. You can add domains directly and review submissions from other users. You lead groups, have no AI memory loss, and stand at the front for everyone still fighting.", "comparison_title": "What's included?", "comparison_subtitle": "Complete comparison of all plans", "feature": "Feature", @@ -172,17 +172,17 @@ "billing_per_month": "/ month", "billing_per_year": "/ month, billed yearly", "plan_pro_title": "Pro", - "plan_pro_desc": "Full protection for one device – everything you need day to day.", + "plan_pro_desc": "Full protection for one device, everything you need day to day.", "plan_pro_btn": "Start Pro", "plan_legend_title": "Legend", - "plan_legend_desc": "Seamless protection on up to 5 devices – incl. self-binding mode.", + "plan_legend_desc": "Seamless protection on up to 5 devices, incl. self-binding mode.", "plan_legend_btn": "Start Legend", "plan_loading": "Loading...", "plan_recommended": "Recommended", - "feat_pro_devices": "2 devices – 1 smartphone (iOS/Android) + 1 computer (Mac or Windows)", + "feat_pro_devices": "2 devices: 1 smartphone (iOS/Android) + 1 computer (Mac or Windows)", "feat_pro_domains": "5 custom domains (refillable)", "feat_pro_mail": "Real-time mail protection (IMAP IDLE, 2 accounts)", - "feat_blocklist": "ReBreak Blocklist (208k+ domains)", + "feat_blocklist": "ReBreak Blocklist (300k+ domains)", "feat_coach_pro": "AI Coach Lyra with streak & urge stats", "feat_streak": "Streak & Savings Tracker", "feat_urge": "Urge Tracker + Breathing Exercise", @@ -192,10 +192,10 @@ "feat_buddy": "Buddy System", "feat_urge_stats": "Urge statistics & patterns", "feat_all_pro": "Everything in Pro", - "feat_legend_devices": "5 devices – 3 mobile (iOS/Android) + 2 desktop (Mac & Windows)", + "feat_legend_devices": "5 devices: 3 mobile (iOS/Android) + 2 desktop (Mac & Windows)", "feat_legend_domains": "Unlimited custom domains", "feat_legend_mail": "Real-time mail protection (IMAP IDLE, unlimited accounts)", - "feat_legend_binder": "RebReakBinder – self-binding mode (opt-in, macOS)", + "feat_legend_binder": "RebReakBinder: self-binding mode (opt-in, macOS)", "feat_legend_add": "Add domains directly to the ReBreak Blocklist", "feat_legend_validate": "Validate community domains", "feat_legend_groups": "Create & lead groups", @@ -204,7 +204,7 @@ "comp_domains": "Custom Domains", "comp_mail": "Mail Protection", "comp_coach": "AI Coach Lyra", - "comp_blocklist": "ReBreak Blocklist (208k+ domains)", + "comp_blocklist": "ReBreak Blocklist (300k+ domains)", "comp_streak": "Streak & Savings Tracker", "comp_urge": "Urge Tracker + Breathing", "comp_sos": "SOS Button (Instant Help)", @@ -225,15 +225,15 @@ "comp_pro_coach_val": "Streak + Urge Stats", "comp_legend_coach_val": "+ Long-term memory", "faq1_q": "Do I need to provide an email address?", - "faq1_a": "Yes, an email address is required for registration. Your data is stored and processed exclusively on German servers – fully anonymously, according to strict GDPR standards.", + "faq1_a": "Yes, an email address is required for registration. Your data is stored and processed exclusively on German servers, fully anonymously and according to strict GDPR standards.", "faq2_q": "What's the difference between Pro and Legend?", - "faq2_a": "Pro protects 2 devices – your smartphone and your computer (Mac or Windows) – with real-time mail protection (IMAP IDLE, 2 accounts), ReBreak Blocklist (208k+ domains) and Lyra with streak/urge stats. Legend covers UP TO 5 devices (3 mobile + 2 desktop), has unlimited mail accounts and domains, unlocks the Rebreak Magic self-binding mode and gives you Lyra with long-term memory plus group leadership.", + "faq2_a": "Pro protects 2 devices, your smartphone and your computer (Mac or Windows), with real-time mail protection (IMAP IDLE, 2 accounts), ReBreak Blocklist (300k+ domains) and Lyra with streak/urge stats. Legend covers UP TO 5 devices (3 mobile + 2 desktop), has unlimited mail accounts and domains, unlocks the Rebreak Magic self-binding mode and gives you Lyra with long-term memory plus group leadership.", "faq3_q": "What billing cycles are available?", "faq3_a": "Monthly (full price) or yearly (save 39%). You can switch at any time.", "faq4_q": "Can I cancel at any time?", "faq4_a": "Yes, you can cancel your subscription at any time. You keep access until the end of the paid period.", "faq5_q": "What is the RebReakBinder?", - "faq5_a": "The RebReakBinder is an optional self-binding mode on macOS (Legend exclusive). It binds the protection app to your device so you CANNOT uninstall it yourself under acute pressure – only a trusted person can release it. Fully opt-in, reversible at any time with a cooling-off period.", + "faq5_a": "The RebReakBinder is an optional self-binding mode on macOS (Legend exclusive). It binds the protection app to your device so you CANNOT uninstall it yourself under acute pressure. Only a trusted person can release it. Fully opt-in, reversible at any time with a cooling-off period.", "faq6_q": "Is ReBreak a substitute for professional help?", "faq6_a": "No. ReBreak is a self-help tool. In crises: contact a professional or call a helpline." } diff --git a/apps/rebreak-native/NEXT_RELEASE.md b/apps/rebreak-native/NEXT_RELEASE.md new file mode 100644 index 0000000..8342db2 --- /dev/null +++ b/apps/rebreak-native/NEXT_RELEASE.md @@ -0,0 +1,9 @@ +# Next Release — Notes + +- Fix: the "Protection is off" sheet and the "Protection tampered" push no longer + fire on devices where protection was never activated locally (fresh installs, + new devices, simulators). The bypass state now requires a local + "was active here" flag, set after a successful activation — instead of relying + on the account-wide backend default. Real bypasses (VPN/profile removed on a + device that had protection) are still detected. +- Copy: blocklist size updated 208k → 300k across all locales (de/en/fr/ar). diff --git a/apps/rebreak-native/lib/protection.ts b/apps/rebreak-native/lib/protection.ts index 7c805a3..367155d 100644 --- a/apps/rebreak-native/lib/protection.ts +++ b/apps/rebreak-native/lib/protection.ts @@ -101,6 +101,27 @@ export async function getCooldownTestMode(): Promise { return val === "1"; } +// ─── Per-Device "war hier schon mal aktiv"-Flag ───────────────────────────── +// `protectionShouldBeActive` (Backend) ist der DEFAULT jedes Accounts: true, +// solange kein Cooldown durchgehalten wurde. Es bedeutet NICHT "Schutz war +// jemals auf DIESEM Gerät aktiv". Ohne dieses lokale Flag würde +// `recoveringFromBypass` auf jedem frischen Gerät/Sim sofort feuern (→ Bypass- +// Push + blockierendes ProtectionOffSheet), obwohl hier nie Schutz lief. Das +// Flag wird nach erfolgreichem activateUrlFilter() gesetzt und gated den +// Bypass-Zustand in getCombinedState(). +const PROTECTION_EVER_ACTIVE_KEY = "protection:everActiveHere"; + +async function markProtectionActivatedHere(): Promise { + await AsyncStorage.setItem(PROTECTION_EVER_ACTIVE_KEY, "1").catch(() => {}); +} + +async function wasProtectionEverActiveHere(): Promise { + const val = await AsyncStorage.getItem(PROTECTION_EVER_ACTIVE_KEY).catch( + () => null, + ); + return val === "1"; +} + // ─── Public API ──────────────────────────────────────────────────────────── export const protection = { @@ -184,6 +205,10 @@ export const protection = { // protectionShouldBeActive=false und Bypass-Detection feuert nicht mehr). // Best-effort — wenn das Backend nicht erreichbar ist, lokal nicht blocken. if (res.enabled) { + // Lokales "war hier schon mal aktiv"-Signal — gated recoveringFromBypass + // (siehe getCombinedState), damit Bypass-Push/Sheet nicht auf frischen + // Geräten feuern, wo der Schutz nie lief. + void markProtectionActivatedHere(); apiFetch("/api/protection/mark-active", { method: "POST" }).catch(() => {}); } return res; @@ -546,11 +571,12 @@ export const protection = { * Phase-Berechnung folgt der State-Machine im Plan. */ async getCombinedState(): Promise { - const [rawLayers, cooldown, backend, nefilterRes] = await Promise.all([ + const [rawLayers, cooldown, backend, nefilterRes, everActiveHere] = await Promise.all([ this.getDeviceState(), this.getCooldownStatus(), this.getBackendProtectionState(), Platform.OS === "ios" ? this.isNeFilterActive() : Promise.resolve({ enabled: false }), + wasProtectionEverActiveHere(), ]); // Android's native module reports {vpn, accessibility, tamperLock}; the UI @@ -578,14 +604,20 @@ export const protection = { // (urlFilter=true) ODER via System-/MDM-Profil-NEFilter (nefilterActive=true). // MDM-Mode: NEFilter läuft autonom — App-Code hat urlFilter=false (kein VPN), // aber nefilterActive=true. Beide gelten als aktiver Schutz. - // "recoveringFromBypass" AUSSCHLIESSLICH wenn: Backend sagt Schutz soll aktiv - // sein UND weder VPN noch NEFilter laufen UND wir nicht MDM-managed sind. + // "recoveringFromBypass" AUSSCHLIESSLICH wenn: der Schutz auf DIESEM Gerät + // schon einmal lokal aktiv war (everActiveHere) UND Backend sagt Schutz soll + // aktiv sein UND weder VPN noch NEFilter laufen UND wir nicht MDM-managed + // sind. Ohne everActiveHere ist "shouldBeActive + kein Filter" nur der + // normale Erst-Setup-/Aus-Zustand (Account-Default shouldBeActive=true) → + // `inactive` (Setup-CTA), KEIN Bypass-Push/Sheet. const filterActive = layers.urlFilter === true || layers.nefilterActive === true; const phase: ProtectionPhase = cooldown.active ? "cooldownActive" : filterActive ? "active" - : backend?.protectionShouldBeActive === true && !backend?.mdmManaged + : everActiveHere && + backend?.protectionShouldBeActive === true && + !backend?.mdmManaged ? "recoveringFromBypass" : "inactive"; diff --git a/apps/rebreak-native/locales/ar.json b/apps/rebreak-native/locales/ar.json index 8c19cd1..4c7268f 100644 --- a/apps/rebreak-native/locales/ar.json +++ b/apps/rebreak-native/locales/ar.json @@ -169,7 +169,7 @@ }, "blocker": { "title": "الحاجب", - "subtitle": "تم حجب أكثر من 208,000 نطاق", + "subtitle": "تم حجب أكثر من 300,000 نطاق", "status_active": "نشط", "status_inactive": "غير نشط", "filter_label": "فلتر القمار", @@ -219,7 +219,7 @@ "domain_section_title": "النطاقات المخصصة", "domain_add_a11y": "إضافة نطاق", "domain_limit_title": "تم الوصول للحد", - "domain_limit_desc": "Pro: 208 ألف+ نطاق، يُستعاد المقعد عند المشاركة — اضغط للتفاصيل", + "domain_limit_desc": "Pro: 300 ألف+ نطاق، يُستعاد المقعد عند المشاركة — اضغط للتفاصيل", "domain_empty": "لا توجد نطاقات مخصصة بعد.\nاضغط + لإضافة نطاق.", "domain_badge_voting": "تصويت", "domain_badge_pruefung": "مراجعة", @@ -246,8 +246,8 @@ "protection_subtitle_inactive": "اضغط لتفعيل الحماية", "protection_subtitle_cooldown": "التهدئة جارية — الحماية لا تزال نشطة", "protection_subtitle_free": "الفلتر نشط — %{count} نطاقات مخصصة", - "protection_subtitle_legend": "محمي من 208,000+ نطاق + حتى 10 مخصصة", - "protection_subtitle_pro": "محمي من 208,000+ نطاق + 5 مخصصة", + "protection_subtitle_legend": "محمي من 300,000+ نطاق + حتى 10 مخصصة", + "protection_subtitle_pro": "محمي من 300,000+ نطاق + 5 مخصصة", "protection_settings_a11y": "إعدادات الحماية", "protection_stat_domains": "النطاقات", "protection_stat_method": "الطريقة", @@ -498,7 +498,7 @@ "tier_legend_total_yearly": "79,90 € / سنة", "tier_legend_subline_monthly": "للحماية على أجهزة متعددة", "tier_legend_subline_yearly": "شهران هدية · أجهزة متعددة", - "feat_blocklist": "أكثر من 208000 نطاق قمار محجوب", + "feat_blocklist": "أكثر من 300000 نطاق قمار محجوب", "feat_lyra": "Lyra غير محدود", "feat_mail": "فلتر البريد لرسائل الكازينو", "feat_community": "المجتمع + السلاسل", diff --git a/apps/rebreak-native/locales/de.json b/apps/rebreak-native/locales/de.json index 5aa6ca5..93763c8 100644 --- a/apps/rebreak-native/locales/de.json +++ b/apps/rebreak-native/locales/de.json @@ -151,8 +151,8 @@ "greeting_morning": "Guten Morgen", "greeting_day": "Guten Tag", "greeting_evening": "Guten Abend", - "streak_days_one": "Tag clean", - "streak_days_other": "Tage clean", + "streak_days_one": "Tag spielfrei", + "streak_days_other": "Tage spielfrei", "streak_start": "Starte deinen ersten Tag", "quote_of_day": "Gedanke des Tages", "quick_access": "Schnellzugriff", @@ -184,7 +184,7 @@ }, "blocker": { "title": "Blocker", - "subtitle": "208.000+ Domains blockiert", + "subtitle": "300.000+ Domains blockiert", "status_active": "Aktiv", "status_inactive": "Inaktiv", "filter_label": "Gambling-Filter", @@ -237,7 +237,7 @@ "domain_section_title": "Eigene Domains", "domain_add_a11y": "Domain hinzufügen", "domain_limit_title": "Limit erreicht", - "domain_limit_desc": "Pro: 208k+ Domains, Refill bei Freigabe — tippe für Details", + "domain_limit_desc": "Pro: 300k+ Domains, Refill bei Freigabe — tippe für Details", "domain_empty": "Noch keine eigenen Domains.\nTippe + um eine hinzuzufügen.", "domain_badge_voting": "Voting", "domain_badge_pruefung": "Prüfung", @@ -264,8 +264,8 @@ "protection_subtitle_inactive": "Tippe um den Schutz zu aktivieren", "protection_subtitle_cooldown": "Cooldown läuft — Schutz weiter aktiv", "protection_subtitle_free": "Filter aktiv — %{count} eigene Domains", - "protection_subtitle_legend": "Geschützt vor 208.000+ Domains + bis zu 20 eigenen", - "protection_subtitle_pro": "Geschützt vor 208.000+ Domains + bis zu 10 eigenen", + "protection_subtitle_legend": "Geschützt vor 300.000+ Domains + bis zu 20 eigenen", + "protection_subtitle_pro": "Geschützt vor 300.000+ Domains + bis zu 10 eigenen", "protection_settings_a11y": "Schutz-Einstellungen", "protection_stat_domains": "Domains", "protection_stat_method": "Methode", @@ -469,7 +469,7 @@ "setup_step2_subtitle_pending": "Sichert den App-Lock gegen Deinstallation ab", "setup_step2_subtitle_done": "Bildschirmzeit ist gesperrt", "setup_step3_title": "URL-Filter aktivieren", - "setup_step3_subtitle_pending": "Blockt 208.000+ Gambling-Seiten system-weit", + "setup_step3_subtitle_pending": "Blockt 300.000+ Gambling-Seiten system-weit", "setup_step3_subtitle_done": "Filter läuft, du bist geschützt", "setup_step3_cta": "URL-Filter aktivieren", "setup_step3_warning": "Sobald aktiv kannst du den Schutz nur über einen 24-Stunden-Cooldown abschalten. Das ist gewollt.", @@ -477,7 +477,7 @@ "setup_complete_subtitle": "Alle drei Schutz-Ebenen sind eingerichtet.", "setup_step_locked_hint": "Erst Schritt %{step} abschließen", "android_step1_title": "VPN aktivieren", - "android_step1_subtitle_pending": "Blockt 208.000+ Gambling-Seiten system-weit via DNS-Filter", + "android_step1_subtitle_pending": "Blockt 300.000+ Gambling-Seiten system-weit via DNS-Filter", "android_step1_subtitle_done": "VPN-Filter läuft", "android_step1_cta": "VPN aktivieren", "android_step2_title": "ReBreak - Schutz", @@ -599,7 +599,7 @@ "tier_legend_total_yearly": "79,90 € / Jahr", "tier_legend_subline_monthly": "Für Multi-Device-Schutz", "tier_legend_subline_yearly": "2 Monate geschenkt · Multi-Device", - "feat_blocklist": "208 000+ Glücksspiel-Domains blockiert", + "feat_blocklist": "300 000+ Glücksspiel-Domains blockiert", "feat_lyra": "Lyra-Coach unbegrenzt", "feat_mail": "Mail-Filter für Casino-Spam", "feat_community": "Community + Streaks", @@ -1241,7 +1241,7 @@ "streak": { "label_one": "Tag", "label_other": "Tage", - "label_suffix": "clean" + "label_suffix": "spielfrei" }, "profile": { "edit_title": "Profil bearbeiten", @@ -1506,7 +1506,7 @@ "help": { "faq_title": "FAQ", "faq_q1": "Was ist Rebreak?", - "faq_a1": "Rebreak ist eine deutsche App, die Menschen mit problematischem Glücksspielverhalten dabei unterstützt, clean zu bleiben. Sie kombiniert einen technischen Sperr-Mechanismus (Blocker) mit einem KI-Coach (Lyra), Community-Support und einem Mail-Schutz — alles DSGVO-konform auf deutschen Servern.", + "faq_a1": "Rebreak ist eine deutsche App, die Menschen mit problematischem Glücksspielverhalten dabei unterstützt, spielfrei zu bleiben. Sie kombiniert einen technischen Sperr-Mechanismus (Blocker) mit einem KI-Coach (Lyra), Community-Support und einem Mail-Schutz — alles DSGVO-konform auf deutschen Servern.", "faq_q2": "Wie funktioniert der Blocker?", "faq_a2": "Der Blocker arbeitet mit zwei Schutzschichten. Layer 1 ist ein geräteweiter URL-Filter, der rund 330.000 Glücksspiel-Domains direkt auf deinem iPhone blockiert — kein Traffic verlässt dein Gerät. Layer 2 ist ein Zweitschutz mit einer kuratierten Liste der Top-Glücksspielseiten deines Landes sowie deinen eigenen Custom-Domains. Den Schutz deaktivieren erfordert einen 24-Stunden-Cooldown.", "faq_q3": "Wie funktioniert das Mac-DNS-Profil?", @@ -1603,7 +1603,7 @@ "feature_sos_01": "Übrigens: Der SOS-Bereich hat jetzt Minispiele als Ablenkung — Memory, Snake, Tetris. Nicht als Spaß-Feature, sondern weil kurze kognitive Aufgaben den Drang-Loop unterbrechen." }, "diga_milestone": { - "badge": "Tag %{days} Clean", + "badge": "Tag %{days} spielfrei", "title": "%{days} Tage ohne Glücksspiel", "body": "Das ist außergewöhnlich — und du hilfst uns, ReBreak als offizielle DiGA (Digitale Gesundheitsanwendung) zuzulassen. Dafür brauchen wir anonyme demografische Daten. Freiwillig, 2 Minuten.", "cta": "Daten ausfüllen", diff --git a/apps/rebreak-native/locales/en.json b/apps/rebreak-native/locales/en.json index 58204e1..d35837a 100644 --- a/apps/rebreak-native/locales/en.json +++ b/apps/rebreak-native/locales/en.json @@ -151,8 +151,8 @@ "greeting_morning": "Good morning", "greeting_day": "Good afternoon", "greeting_evening": "Good evening", - "streak_days_one": "day clean", - "streak_days_other": "days clean", + "streak_days_one": "day gambling-free", + "streak_days_other": "days gambling-free", "streak_start": "Start your first day", "quote_of_day": "Thought of the day", "quick_access": "Quick access", @@ -184,7 +184,7 @@ }, "blocker": { "title": "Blocker", - "subtitle": "208,000+ domains blocked", + "subtitle": "300,000+ domains blocked", "status_active": "Active", "status_inactive": "Inactive", "filter_label": "Gambling Filter", @@ -237,7 +237,7 @@ "domain_section_title": "Custom domains", "domain_add_a11y": "Add domain", "domain_limit_title": "Limit reached", - "domain_limit_desc": "Pro: 208k+ domains, refill on release — tap for details", + "domain_limit_desc": "Pro: 300k+ domains, refill on release — tap for details", "domain_empty": "No custom domains yet.\nTap + to add one.", "domain_badge_voting": "Voting", "domain_badge_pruefung": "Review", @@ -264,8 +264,8 @@ "protection_subtitle_inactive": "Tap to activate protection", "protection_subtitle_cooldown": "Cooldown running — protection still active", "protection_subtitle_free": "Filter active — %{count} custom domains", - "protection_subtitle_legend": "Protected against 208,000+ domains + up to 10 custom", - "protection_subtitle_pro": "Protected against 208,000+ domains + 5 custom", + "protection_subtitle_legend": "Protected against 300,000+ domains + up to 10 custom", + "protection_subtitle_pro": "Protected against 300,000+ domains + 5 custom", "protection_settings_a11y": "Protection settings", "protection_stat_domains": "Domains", "protection_stat_method": "Method", @@ -469,7 +469,7 @@ "setup_step2_subtitle_pending": "Prevents uninstall by locking Screen Time", "setup_step2_subtitle_done": "Screen Time is locked", "setup_step3_title": "Activate URL filter", - "setup_step3_subtitle_pending": "Blocks 208,000+ gambling sites system-wide", + "setup_step3_subtitle_pending": "Blocks 300,000+ gambling sites system-wide", "setup_step3_subtitle_done": "Filter running, you are protected", "setup_step3_cta": "Activate URL filter", "setup_step3_warning": "Once active, you can only disable protection through a 24-hour cooldown. That's by design.", @@ -477,7 +477,7 @@ "setup_complete_subtitle": "All three protection layers are set up.", "setup_step_locked_hint": "Complete step %{step} first", "android_step1_title": "Activate VPN", - "android_step1_subtitle_pending": "Blocks 208,000+ gambling sites system-wide via DNS filter", + "android_step1_subtitle_pending": "Blocks 300,000+ gambling sites system-wide via DNS filter", "android_step1_subtitle_done": "VPN filter running", "android_step1_cta": "Activate VPN", "android_step2_title": "ReBreak Protection", @@ -599,7 +599,7 @@ "tier_legend_total_yearly": "€79.90 / year", "tier_legend_subline_monthly": "For multi-device protection", "tier_legend_subline_yearly": "2 months gift · multi-device", - "feat_blocklist": "208,000+ gambling domains blocked", + "feat_blocklist": "300,000+ gambling domains blocked", "feat_lyra": "Lyra coach unlimited", "feat_mail": "Mail filter for casino spam", "feat_community": "Community + streaks", @@ -1241,7 +1241,7 @@ "streak": { "label_one": "day", "label_other": "days", - "label_suffix": "clean" + "label_suffix": "gambling-free" }, "profile": { "edit_title": "Edit profile", @@ -1506,7 +1506,7 @@ "help": { "faq_title": "FAQ", "faq_q1": "What is Rebreak?", - "faq_a1": "Rebreak is a German app that helps people with problematic gambling behaviour stay clean. It combines a technical blocking mechanism with an AI coach (Lyra), community support and email protection — fully GDPR-compliant on German servers.", + "faq_a1": "Rebreak is a German app that helps people with problematic gambling behaviour stay gambling-free. It combines a technical blocking mechanism with an AI coach (Lyra), community support and email protection — fully GDPR-compliant on German servers.", "faq_q2": "How does the blocker work?", "faq_a2": "The blocker uses two protection layers. Layer 1 is a device-wide URL filter that blocks around 330,000 gambling domains directly on your iPhone — no traffic leaves your device. Layer 2 is a second line of defence with a curated list of the top gambling sites in your country plus your own custom domains. Disabling protection requires a 24-hour cooldown.", "faq_q3": "How does the Mac DNS profile work?", @@ -1586,7 +1586,7 @@ "days_ago": "%{days} d ago" }, "diga_milestone": { - "badge": "Day %{days} Clean", + "badge": "Day %{days} gambling-free", "title": "%{days} days without gambling", "body": "That's extraordinary — and you help us get ReBreak officially certified as a DiGA (Digital Health Application). We need anonymous demographic data for that. Voluntary, 2 minutes.", "cta": "Fill in data", diff --git a/apps/rebreak-native/locales/fr.json b/apps/rebreak-native/locales/fr.json index d16996a..4104b2e 100644 --- a/apps/rebreak-native/locales/fr.json +++ b/apps/rebreak-native/locales/fr.json @@ -169,7 +169,7 @@ }, "blocker": { "title": "Bloqueur", - "subtitle": "208 000+ domaines bloqués", + "subtitle": "300 000+ domaines bloqués", "status_active": "Actif", "status_inactive": "Inactif", "filter_label": "Filtre jeux d'argent", @@ -219,7 +219,7 @@ "domain_section_title": "Domaines personnalisés", "domain_add_a11y": "Ajouter un domaine", "domain_limit_title": "Limite atteinte", - "domain_limit_desc": "Pro : 208k+ domaines, rechargement à la libération — appuyez pour les détails", + "domain_limit_desc": "Pro : 300k+ domaines, rechargement à la libération — appuyez pour les détails", "domain_empty": "Aucun domaine personnalisé.\nAppuyez sur + pour en ajouter un.", "domain_badge_voting": "Vote", "domain_badge_pruefung": "Vérification", @@ -246,8 +246,8 @@ "protection_subtitle_inactive": "Appuyez pour activer la protection", "protection_subtitle_cooldown": "Pause de sécurité en cours — protection toujours active", "protection_subtitle_free": "Filtre actif — %{count} domaines personnalisés", - "protection_subtitle_legend": "Protégé contre 208 000+ domaines + jusqu'à 10 personnalisés", - "protection_subtitle_pro": "Protégé contre 208 000+ domaines + 5 personnalisés", + "protection_subtitle_legend": "Protégé contre 300 000+ domaines + jusqu'à 10 personnalisés", + "protection_subtitle_pro": "Protégé contre 300 000+ domaines + 5 personnalisés", "protection_settings_a11y": "Paramètres de protection", "protection_stat_domains": "Domaines", "protection_stat_method": "Méthode", @@ -496,7 +496,7 @@ "tier_legend_total_yearly": "79,90 € / an", "tier_legend_subline_monthly": "Pour protection multi-appareils", "tier_legend_subline_yearly": "2 mois offerts · multi-appareils", - "feat_blocklist": "208 000+ domaines de jeu bloqués", + "feat_blocklist": "300 000+ domaines de jeu bloqués", "feat_lyra": "Coach Lyra illimité", "feat_mail": "Filtre mail anti-spam casino", "feat_community": "Communauté + séries",