chahinebrini e76be7ee78 feat(profile): Profile-Page komplett + Header-Dropdown + UI-Pattern-Fixes
Profile (3 Iterationen):
- app/profile/index.tsx + components/profile/* (Header, StatsBar, Approved,
  Streak, UrgeStats, Demographics, DigaMissionBanner)
- echte Live-Daten via useMe-Hook (Avatar/Nickname/Plan/Email/Provider-Pill)
- Demographics mit echten Inputs (TextInput + Bottom-Sheet-Selects),
  debounced auto-save, Pro-Trial-Reward-Banner, Mikro-Why-Texte
- Approved Domains als plain integer (KEIN Plan-Slot/Cap)
- Friendly Hint-Text statt Progress-Bar (alignSelf:'stretch' Pattern)
- StatsBar zentriert mit 3 prominenten Cards (vertikale Dividers)
- Cooldown-Timeline als Liste mit 1px-Rail
- ApprovedDomainsList: Collapse-Chevron rechts in Title-Row (Pattern-Fix)
- Eigene vs fremde Profile-Ansicht streng getrennt (DSGVO/Anonymität)

Header-Dropdown (kein 3-Punkte-Icon):
- Avatar als Trigger im AppHeader (User-Wunsch)
- Custom-Modal beide Plattformen, Card-Style
- SOS prominent oben (nur Wort 'SOS' rot, Tagline 'wir sind für dich da' klein darunter)
- Profile/Settings/Games/Debug(__DEV__)/Logout
- Logout neutral (nicht rot — Recovery-tonal)
- AppHeader: neue showBack + title Props für Sub-Routes

Routes (Stub bis Phase C):
- app/profile/[userId].tsx — anonym (nur public-Stats)
- app/settings.tsx — Coming-Soon-Skeleton
- app/games.tsx — Standalone Games-Page mit GameCard-Grid
- app/debug.tsx — __DEV__-only

Game-Picker (Migration aus Nuxt):
- components/games/{GameCard, StarRating, GameRatingStars}
- 2x2 Grid, 56pt SVG-Icons (inline aus components/urge/gameSvgs.ts)
- Live-Backend /api/games/ratings (silent-fail)
- Re-use UrgeGames.tsx ohne TTS/Cooldown-Loop

UI-Pattern-Fixes (alle aus screenshot-User-Feedback 2026-05-07):
- Snake-Bug (food-pellet React-18-StrictMode-Reducer-double-call) gefixt
- Snake-Buttons platform-native (iOS-blue / Android-ripple)
- Tetris-Margins (16px paddingHorizontal)
- PostCard-Buttons Apple-44pt-Hit-Area (Image-Select, Image-Remove,
  Cancel, Share-Pill — via hitSlop)
- ProfileHeader Demographics-Hint: alignSelf:'stretch' Pattern
- ApprovedDomainsList Collapse: Title flex:1 + Chevron rechts
- ProtectionDetailsSheet FAQ-Items: alignSelf:'stretch' defensive
- AppHeader Back-Button: neue showBack-Prop + chevron-back

Memory + Plan-Docs:
- 17 Memory-Files dokumentieren System-Wissen + Patterns
- ops/{CUTOVER, UI_MIGRATION, PROFILE_PAGE, WEBHOOK, GAMES_1V1,
  RELEASE_READINESS, TESTING_STATE, MAESTRO_HOSTING}_*.md

Backend bleibt unverändert (Tier-LLM + Nickname + sort:latency
sind seit gestern deployed).
2026-05-07 18:22:58 +02:00

636 lines
29 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"common": {
"loading": "Einen Moment...",
"cancel": "Abbrechen",
"continue": "Weiter",
"back": "Zurück",
"error": "Fehler",
"success": "Erfolgreich",
"ok": "OK",
"confirm": "Bestätigen",
"retry": "Erneut versuchen",
"unknown_error": "Unbekannter Fehler"
},
"auth": {
"welcomeBack": "Willkommen zurück",
"signinSubtitle": "Melde dich an, um weiterzumachen.",
"signin": "Anmelden",
"signingIn": "Einen Moment...",
"signup": "Registrieren",
"signupTitle": "Konto erstellen",
"signupSubtitle": "Werde Teil der Community.",
"signOut": "Abmelden",
"email": "E-Mail",
"emailPlaceholder": "E-Mail",
"emailRequired": "E-Mail *",
"password": "Passwort",
"passwordPlaceholder": "Passwort",
"passwordRequired": "Passwort * (min. 8 Zeichen)",
"passwordMin8": "Passwort muss mindestens 8 Zeichen haben.",
"newPassword": "Neues Passwort",
"firstName": "Vorname",
"lastName": "Nachname",
"nickname": "Benutzername",
"nicknamePlaceholder": "Benutzername * (sichtbar für andere)",
"noAccount": "Noch kein Konto?",
"alreadyRegistered": "Bereits registriert?",
"fillRequired": "Bitte alle Pflichtfelder ausfüllen.",
"googleSignin": "Mit Google anmelden",
"appleSignin": "Mit Apple anmelden",
"googleSignup": "Mit Google registrieren",
"appleSignup": "Mit Apple registrieren",
"orWithEmail": "oder mit E-Mail",
"forgotPassword": "Passwort vergessen?",
"resetPasswordTitle": "Passwort zurücksetzen",
"resetPasswordSubtitle": "Gib deine E-Mail-Adresse ein und wir senden dir einen Link zum Zurücksetzen.",
"resetPasswordSend": "Link senden",
"resetPasswordSent": "E-Mail gesendet",
"resetPasswordSentDesc": "Prüfe dein Postfach. Der Link ist 60 Minuten gültig.",
"resetPasswordSentDescPrefix": "Prüfe dein Postfach für ",
"resetPasswordSentDescSuffix": ". Der Link ist 60 Minuten gültig.",
"backToLogin": "← Zurück zum Login",
"backToLoginPlain": "Zurück zum Login",
"backToSignup": "← Zurück zur Registrierung",
"chooseAvatar": "Avatar wählen",
"privacyNotice": "Deine Daten werden sicher auf Servern in Deutschland gespeichert. Wir verkaufen keine Daten an Dritte.",
"acceptTerms": "Ich akzeptiere die",
"acceptTermsSuffix": " und habe die Datenschutzerklärung gelesen.",
"termsLink": "Nutzungsbedingungen",
"pleaseAcceptTerms": "Bitte akzeptiere die Nutzungsbedingungen.",
"confirmEmailTitle": "E-Mail bestätigen",
"confirmEmailDesc": "Wir haben einen 6-stelligen Code an %{email} gesendet.",
"confirmEmailLine1": "Wir haben einen 6-stelligen Code an",
"confirmEmailLine2": "gesendet.",
"confirmBtn": "Bestätigen",
"confirmed": "Bestätigt! Du wirst weitergeleitet...",
"confirming": "Anmeldung wird bestätigt...",
"confirmSuccess": "Erfolgreich angemeldet!",
"confirmTimeout": "Zeitüberschreitung bitte erneut versuchen.",
"confirmFailed": "Bestätigung fehlgeschlagen.",
"resend": "Erneut senden",
"resendCooldown": "Erneut senden (%{seconds}s)",
"noCode": "Keinen Code erhalten?",
"deviceLimitTitle": "Geräte-Limit erreicht",
"deviceLimitDesc": "Dein aktueller Plan erlaubt nicht mehr Geräte. Gib ein anderes Gerät frei oder upgrade deinen Plan, um auf diesem Gerät weiterzumachen.",
"deviceLimitUpgrade": "Plan upgraden",
"toLogin": "Zur Anmeldung",
"oauthFailed": "Anmeldung fehlgeschlagen",
"loginFailed": "Anmeldung fehlgeschlagen",
"registerFailed": "Registrierung fehlgeschlagen"
},
"landing": {
"appName": "Rebreak",
"tagline": "Du gehst nicht allein.",
"start": "Loslegen",
"version": "v0.1.0 — RN Migration Phase 1 Skeleton"
},
"splash": {
"tagline": "You will never walk alone!",
"subtitle": "Zusammen schaffen wir das.",
"madeInGermany": "Made in Germany"
},
"appHeader": {
"appName": "ReBreak",
"sosLabel": "SOS",
"sosTagline": "wir sind für dich da",
"sosSubtitle": "Hier lang wenn du Hilfe brauchst",
"editProfile": "Profil bearbeiten",
"settings": "Einstellungen",
"signOut": "Abmelden"
},
"headerMenu": {
"profile": "Profil",
"settings": "Einstellungen",
"games": "ReBreak Games",
"debug": "Debug",
"logout": "Abmelden"
},
"tabs": {
"home": "Home",
"chat": "Chat",
"coach": "Coach",
"blocker": "Blocker",
"mail": "Mail",
"profile": "Profil"
},
"games": {
"title": "ReBreak Games",
"subtitle": "Casual spielen ohne SOS — Memory, Snake, Tetris und Tic-Tac-Toe.",
"back_to_picker": "Spiele",
"last_score": "Score: {{score}}",
"skeleton_footer": "Skeleton — Highscore-Leaderboard kommt in Phase C"
},
"home": {
"tagline": "Du gehst nicht allein.",
"start": "Loslegen",
"greeting_morning": "Guten Morgen",
"greeting_day": "Guten Tag",
"greeting_evening": "Guten Abend",
"streak_days_one": "Tag clean",
"streak_days_other": "Tage clean",
"streak_start": "Starte deinen ersten Tag",
"quote_of_day": "Gedanke des Tages",
"quick_access": "Schnellzugriff",
"stats_urges": "Impulse",
"stats_chats": "Gespräche",
"stats_mails": "Mails blockiert"
},
"coach": {
"title": "Lyra",
"subtitle": "Dein CBT-Coach",
"welcome": "Hallo! Ich bin Lyra, dein persönlicher Coach. Wie geht es dir heute? Ich bin hier, um dir zuzuhören und zu helfen.",
"input_placeholder": "Schreib mir...",
"new_chat": "Neues Gespräch",
"lyra": "Lyra",
"placeholder": "Was beschäftigt dich?",
"speaking": "Lyra spricht...",
"recording": "Aufnahme läuft...",
"transcribing": "Wird verarbeitet...",
"feedback_saved": "Feedback gespeichert",
"welcome_back": "Willkommen zurück",
"online": "online",
"thinking": "schreibt …",
"error": "Etwas ist schiefgelaufen. Bitte versuche es erneut."
},
"blocker": {
"title": "Blocker",
"subtitle": "208.000+ Domains blockiert",
"status_active": "Aktiv",
"status_inactive": "Inaktiv",
"filter_label": "Gambling-Filter",
"filter_active_desc": "Alle Gambling-Seiten werden blockiert",
"filter_inactive_desc": "Filter ist deaktiviert",
"tamper_title": "Manipulationsschutz",
"tamper_desc": "Der Filter ist gegen einfaches Deaktivieren gesichert. Eine Entsperrung erfordert eine 6-Stunden-Abkühlphase.",
"custom_domains": "Eigene Domains",
"add_domain": "Hinzufügen",
"help_link": "Hilfe & FAQ zum Blocker",
"status_approved": "Genehmigt",
"status_rejected": "Abgelehnt",
"status_pending": "Ausstehend",
"add_sheet_title": "Domain blockieren",
"add_sheet_label": "Domain",
"add_sheet_placeholder": "z.B. bet365.com",
"add_sheet_invalid": "Bitte gültige Domain eingeben (z.B. example.com)",
"add_sheet_warning_free": "Diese Domain bleibt dauerhaft auf deiner Liste — du kannst sie später nicht entfernen.",
"add_sheet_warning_pro": "Diese Domain ist permanent. Du kannst sie zur globalen Blocklist freigeben — dann wird der Slot frei und sie schützt alle ReBreak-User.",
"add_sheet_confirm_permanent": "Ich verstehe dass diese Domain permanent ist.",
"add_sheet_add_failed": "Hinzufügen fehlgeschlagen.",
"add_sheet_already_global": "%{domain} steht bereits in der globalen Sperrliste — kein Slot nötig.",
"cooldown_banner_title": "Cooldown läuft",
"deactivation_actionsheet_title": "24-Stunden-Cooldown starten?",
"deactivation_actionsheet_message": "Schutz bleibt während dieser Zeit aktiv. Du kannst jederzeit abbrechen.",
"deactivation_start_cta": "Cooldown starten",
"deactivation_failed_msg": "Cooldown konnte nicht gestartet werden.",
"deactivation_heading": "Bevor du deaktivierst",
"deactivation_title": "Wir verstehen das.",
"deactivation_intro": "Bevor du den Schutz abschaltest, hier was du wissen solltest:",
"deactivation_bullet1_title": "24 Stunden Cooldown",
"deactivation_bullet1_text": "Der Schutz bleibt 24h aktiv, selbst wenn du den Cooldown startest. Diese Zeit gibt dir Raum den Drang abklingen zu lassen.",
"deactivation_bullet2_title": "Du kannst jederzeit abbrechen",
"deactivation_bullet2_text": "Wenn der Drang nachlässt: ein Tap und der Cooldown ist weg. Der Schutz bleibt einfach an.",
"deactivation_bullet3_title": "Andere Werkzeuge sind da",
"deactivation_bullet3_text": "Atemübung, Lyra, deine Streak — alles bleibt verfügbar während du wartest.",
"deactivation_breathe_cta": "Jetzt 3 min atmen",
"deactivation_start_anyway": "Cooldown trotzdem starten",
"deactivation_starting": "Cooldown wird gestartet…",
"deactivation_cancel_failed": "Cooldown konnte nicht abgebrochen werden.",
"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_empty": "Noch keine eigenen Domains.\nTippe + um eine hinzuzufügen.",
"domain_badge_voting": "Voting",
"domain_badge_pruefung": "Prüfung",
"domain_badge_rejected": "Abgelehnt",
"domain_badge_active": "Aktiv",
"domain_btn_freigeben": "Freigeben",
"domain_btn_erneut": "Erneut",
"domain_btn_in_abstimmung": "In Abstimmung",
"domain_btn_rebreak_prueft": "ReBreak prüft",
"domain_confirm_legend_resubmit": "Erneut an ReBreak senden?",
"domain_confirm_legend_first": "Domain an ReBreak senden?",
"domain_confirm_community_resubmit": "Erneut zur Abstimmung freigeben?",
"domain_confirm_community_first": "Domain zur Abstimmung freigeben?",
"domain_confirm_legend_message": "%{domain} wird direkt an das ReBreak-Team weitergeleitet und manuell geprüft.",
"domain_confirm_community_message": "%{domain} wird zur Community-Abstimmung freigegeben (Yes/No-Voting).",
"domain_success_legend_title": "Domain eingereicht",
"domain_success_community_title": "Domain in Abstimmung",
"domain_success_legend_message": "Das ReBreak-Team prüft die Domain manuell. Du bekommst eine Benachrichtigung beim Ergebnis.",
"domain_success_community_message": "Die Community kann jetzt abstimmen. Du wirst beim Ergebnis benachrichtigt.",
"upgrade_alert_title": "Pro-Upgrade",
"upgrade_alert_desc": "Stripe-Checkout kommt in Step 11.",
"protection_card_title": "ReBreak-Schutz",
"protection_card_locked_title": "ReBreak-Schutz aktiv",
"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 10 eigenen",
"protection_subtitle_pro": "Geschützt vor 208.000+ Domains + 5 eigenen",
"protection_settings_a11y": "Schutz-Einstellungen",
"protection_stat_domains": "Domains",
"protection_stat_method": "Methode",
"protection_stat_method_dns": "DNS",
"protection_stat_method_native": "Native",
"protection_stat_status": "Status",
"protection_stat_status_live": "Live",
"activate_url_failed_title": "URL-Filter konnte nicht aktiviert werden",
"activate_url_failed_msg": "Unbekannter Fehler.\nDu kannst es nochmal versuchen oder System-Einstellungen prüfen.",
"activate_settings_btn": "Einstellungen",
"activate_app_lock_failed_title": "App-Lock konnte nicht aktiviert werden",
"activate_app_lock_failed_msg": "Bildschirmzeit-Berechtigung wurde verweigert. Du kannst es nochmal versuchen.",
"sync_list_failed_title": "Filter-Liste konnte nicht geladen werden",
"sync_list_failed_msg": "Bitte später nochmal versuchen.",
"activation_failed_title": "Aktivierung fehlgeschlagen",
"details_done": "Fertig",
"details_title": "Schutz-Details",
"details_active_title": "Schutz aktiv",
"details_domains_blocked": "%{value} Domains blockiert",
"details_layers_heading": "Aktive Layer",
"details_layer_url_label": "Network-Filter",
"details_layer_url_desc": "Blockt Gambling-Domains system-weit (NEFilter Extension)",
"details_layer_applock_label": "App-Lock",
"details_layer_applock_desc": "ReBreak kann nicht impulsiv gelöscht werden",
"details_layer_vpn_label": "VPN-Filter",
"details_layer_vpn_desc": "Lokaler DNS-Filter via VpnService",
"details_layer_a11y_label": "Browser-Filter",
"details_layer_a11y_desc": "Erkennt URL-Eingaben in Browser-Apps",
"details_layer_tamper_label": "Tamper-Lock",
"details_layer_tamper_desc": "Watchdog gegen externes Deaktivieren",
"details_lyra_cta_title": "Brauchst du den Schutz nicht mehr?",
"details_lyra_cta_subtitle": "Sprich mit Lyra darüber — sie hört zu.",
"details_deactivate_link": "Ich will trotzdem deaktivieren",
"layers_url_filter_title": "URL-Filter",
"layers_url_filter_subtitle_active": "System-weiter Filter aktiv",
"layers_url_filter_subtitle_inactive": "Blockt Gambling-Seiten in Safari + Apps",
"layers_app_lock_title": "App-Lock",
"layers_app_lock_subtitle_active": "Familienzugriff aktiv",
"layers_app_lock_subtitle_inactive": "Verhindert dass du ReBreak im Impuls löschst",
"layers_app_lock_warning": "Sobald aktiv kannst du den Schutz nur über einen 24-Stunden-Cooldown abschalten. Das ist gewollt.",
"kpi_global_label": "Geblockte Domains weltweit",
"kpi_global_subtitle": "Aktive Einträge in der globalen Blockliste",
"delta_week": "diese Woche",
"delta_month": "diesen Monat",
"kpi_submissions_title": "Deine eingereichten Domains",
"kpi_submissions_subtitle": "Status deiner Beiträge zur globalen Liste",
"kpi_my_submissions": "insgesamt",
"kpi_status_active": "aktiv",
"kpi_status_vote": "im Vote",
"kpi_status_review": "in Prüfung",
"kpi_in_vote": "Im Vote",
"kpi_in_review": "In Prüfung",
"kpi_avg_per_user": "Ø Domains pro User",
"kpi_avg_wait": "Ø Wartezeit",
"kpi_days_suffix": "Tage",
"faq_heading": "Häufige Fragen",
"faq1_q": "Wie funktioniert der Schutz?",
"faq1_a": "Der Schutz läuft direkt im iOS-System als Inhaltsfilter. Glücksspielseiten werden lokal auf deinem Gerät blockiert — kein Datenverkehr verlässt dein iPhone.",
"faq2_q": "Wie viele Seiten werden blockiert?",
"faq2_a": "Über 208.000 Domains aus einer kuratierten globalen Blockliste — Online-Casinos, Sportwetten, Glücksspiel-Plattformen und verwandte Seiten. Die Liste wird regelmäßig aktualisiert.",
"faq3_q": "Kann ich eigene Domains hinzufügen?",
"faq3_a": "Ja. Über die Domain-Liste auf der Blocker-Seite kannst du eigene Domains hinzufügen, die zusätzlich zur globalen Liste blockiert werden.",
"faq4_q": "Warum kann ich den Schutz nicht sofort abschalten?",
"faq4_a": "Wenn du im Drang bist, willst du oft schnell deaktivieren — und es danach bereuen. Der 24-Stunden-Cooldown gibt dir Zeit, den Drang abklingen zu lassen. Du kannst den Cooldown jederzeit abbrechen — der Schutz bleibt dann einfach an.",
"more_info_title": "Wie funktioniert der Cooldown?"
},
"mail": {
"title": "Mail-Schutz",
"subtitle": "Gambling-Mails automatisch blockieren",
"plan_free": "Free",
"stat_accounts": "Postfach",
"stat_domains": "Domains",
"stat_interval": "Scan-Intervall",
"connect_title": "Verbinde dein Postfach",
"connect_desc": "Rebreak scannt automatisch nach Gambling-Mails und blockiert sie — ohne deine E-Mails zu lesen.",
"connect_cta": "Jetzt verbinden",
"privacy_1": "Nur Betreff + Absender werden geprüft",
"privacy_2": "Kein Zugriff auf Mail-Inhalte",
"privacy_3": "DSGVO-konform, Server in DE",
"providers_title": "Unterstützte Anbieter",
"provider_other": "Andere",
"empty_title": "Noch keine Mails blockiert",
"empty_subtitle": "Verbinde dein Postfach, damit Rebreak automatisch schützt.",
"connect_sheet_title": "Postfach verbinden",
"connect_sheet_subtitle": "Wähle deinen E-Mail-Anbieter. Rebreak löscht Gambling-Mails automatisch — Inhalte werden nie gelesen.",
"provider_gmail": "Gmail",
"provider_icloud": "iCloud Mail",
"provider_outlook": "Outlook",
"provider_yahoo": "Yahoo Mail",
"provider_gmx": "GMX / Web.de",
"app_password_required_title": "App-Passwort erforderlich",
"app_password_guide_gmail": "Gmail erfordert ein App-spezifisches Passwort (kein normales Google-Passwort). Aktiviere 2FA und erstelle ein App-Passwort unter myaccount.google.com/apppasswords.",
"app_password_guide_icloud": "iCloud erfordert ein App-spezifisches Passwort. Gehe zu appleid.apple.com → Anmelden → App-spezifische Passwörter.",
"app_password_guide_outlook": "Outlook mit Microsoft-Konto: Aktiviere 2FA und erstelle ein App-Passwort unter account.microsoft.com/security.",
"app_password_guide_yahoo": "Yahoo erfordert ein App-Passwort. Aktiviere 2FA und erstelle es unter login.yahoo.com/account/security.",
"app_password_guide_gmx": "GMX / Web.de: Aktiviere IMAP in den Einstellungen und verwende dein normales Passwort oder ein App-Passwort falls 2FA aktiv.",
"app_password_guide_other": "Gib die IMAP-Zugangsdaten deines E-Mail-Anbieters ein. App-Passwort empfohlen wenn vorhanden.",
"app_password_open_link": "Jetzt App-Passwort erstellen",
"form_email_label": "E-Mail-Adresse",
"form_email_placeholder": "deine@email.de",
"form_password_label": "App-Passwort",
"form_password_placeholder": "App-Passwort (nicht dein Login-Passwort)",
"form_privacy_note": "Dein Passwort wird AES-verschlüsselt gespeichert. Inhalte deiner Mails werden nie gelesen — nur Betreff und Absender.",
"form_connect_btn": "Postfach verbinden",
"form_fields_required": "E-Mail und Passwort sind erforderlich.",
"connect_failed": "Verbindung fehlgeschlagen. Prüfe deine Zugangsdaten.",
"section_accounts": "Postfächer",
"add_account_a11y": "Postfach hinzufügen",
"empty_state_title": "Kein Postfach verbunden",
"empty_state_subtitle": "Verbinde dein erstes Postfach — Rebreak löscht Gambling-Mails automatisch, bevor du sie siehst.",
"empty_state_cta": "Erstes Postfach verbinden",
"account_active": "Aktiv",
"account_inactive": "Inaktiv",
"account_last_scan": "Zuletzt vor %{time}",
"account_never_scanned": "Noch nicht gescannt",
"account_just_now": "gerade eben",
"account_stat_blocked": "Blockiert",
"account_stat_scanned": "Gescannt",
"account_stat_block_rate": "Block-Rate",
"account_disconnect_confirm_title": "Postfach trennen?",
"account_disconnect_confirm_message": "%{email} wird getrennt und alle Scan-Daten werden gelöscht.",
"account_disconnect_confirm_btn": "Trennen",
"stats_blocked": "Blockiert",
"stats_accounts": "Postfächer",
"stats_next_scan": "Nächster Scan",
"stats_next_scan_soon": "gleich",
"stats_mode": "Modus",
"stats_account_summary": "über %{count} Postfach/Postfächer",
"scheduled": "Geplant",
"account_of_scanned": "von %{scanned} gescannt",
"activity_log_count": "%{count} Mail(s) blockiert",
"connect_success_title": "Postfach verbunden",
"connect_success_message": "Rebreak scannt ab jetzt automatisch nach Gambling-Mails.",
"add_account": "Postfach hinzufügen",
"section_accounts_count": "%{used} von %{max} verbunden",
"section_accounts_count_unlimited": "%{used} verbunden · unbegrenzt",
"live": "Live",
"disconnect": "Trennen",
"loading": "Lädt…",
"app_password_placeholder": "App-Passwort",
"scan_interval_label": "Scan-Intervall",
"realtime_desc": "Echtzeit-Blockierung via IMAP IDLE",
"free_scan_interval_hint": "Free-Plan: fest 4h. Upgrade für 1h.",
"account_change_password": "Passwort ändern",
"edit_account_title": "Passwort aktualisieren",
"edit_account_subtitle": "Gib das neue App-Passwort für %{email} ein. Das alte Passwort wird ersetzt.",
"edit_account_save": "Speichern",
"activity_log_title": "Kürzlich blockiert",
"activity_log_subtitle": "In den letzten 24h blockierte Mails",
"activity_log_empty": "Keine Mails in den letzten 24h blockiert",
"activity_log_more": "+ %{count} weitere",
"activity_no_subject": "(kein Betreff)",
"upgrade_alert_title": "Mehr Postfächer",
"upgrade_alert_desc": "Upgrade auf Pro für bis zu 3 Postfächer, auf Legend für unbegrenzte Postfächer."
},
"settings": {
"title": "Einstellungen",
"account_section": "Konto",
"prefs_section": "Einstellungen",
"danger_section": "Danger Zone",
"edit_profile": "Profil bearbeiten",
"devices": "Geräte",
"devices_desc": "Registrierte Geräte verwalten",
"subscription": "Abonnement",
"subscription_desc": "Plan & Upgrade-Pfad",
"plan_free": "Free",
"push_notifications": "Push-Benachrichtigungen",
"streak_reminders": "Streak-Erinnerungen",
"language": "Sprache",
"language_desc": "Deutsch / Englisch",
"language_current": "Deutsch",
"upgrade_cta": "Auf Pro upgraden — 29 €/Jahr",
"delete_account": "Konto löschen",
"delete_desc": "Alle Daten werden unwiderruflich gelöscht.",
"sign_out": "Abmelden",
"coming_soon_title": "Coming soon",
"coming_soon_desc": "Settings werden in Phase 3 wired-up. Aktuell nur Skeleton.",
"soon_badge": "Soon",
"skeleton_footer": "Settings-Skeleton — siehe ops/UI_MIGRATION_PLAN.md",
"section_profile": "Profil",
"profile_edit": "Nickname & Avatar",
"profile_edit_desc": "Nickname, Avatar-Bild, persönliche Daten",
"profile_avatar": "Avatar wählen",
"profile_avatar_desc": "Preset-Library oder eigenes Foto",
"section_theme": "Theme & Sprache",
"theme": "Theme",
"theme_desc": "Hell / Dunkel / System",
"section_notifications": "Benachrichtigungen",
"notifications_push": "Push-Benachrichtigungen",
"notifications_push_desc": "Einzelne Kategorien an/aus",
"notifications_streak": "Streak-Erinnerungen",
"notifications_streak_desc": "Tägliche Anstöße zum Dranbleiben",
"section_devices": "Geräte & Abo",
"section_lyra": "Lyra (Legend)",
"lyra_voice": "Lyra-Stimme",
"lyra_voice_desc": "Voice-Picker — verfügbar im Legend-Plan",
"section_debug": "Debug",
"debug_llm": "LLM-Provider",
"debug_llm_desc": "Modell & Prompt-Tuning (DEV)",
"debug_tts": "TTS-Provider",
"debug_tts_desc": "Cartesia / ElevenLabs / Gemini (DEV)"
},
"urge": {
"title": "SOS — Atemübung",
"step_dashboard": "Start",
"step_emotion": "Emotion",
"step_breathing": "Atmung",
"step_games": "Lyra Games",
"step_result": "Reflexion",
"step_done": "Fertig",
"feel_urge": "Spürst du gerade einen starken Impuls?",
"feel_urge_desc": "Wir führen dich in kleinen Schritten durch einen sicheren Reset.",
"yes_urge": "Ja, ich brauche Hilfe",
"just_play": "Nur kurz spielen",
"this_week": "Diese Woche",
"total_urges": "Impulse",
"overcome_count": "Überwunden",
"breathing_exercises": "Atemübungen",
"having_urge": "Du bist nicht allein.",
"how_feeling": "Wie fühlst du dich gerade?",
"emotion_stress": "Stress",
"emotion_sadness": "Trauer",
"emotion_anger": "Wut",
"emotion_empty": "Leere",
"emotion_boredom": "Langeweile",
"emotion_other": "Anderes",
"lets_breathe": "Lass uns kurz atmen",
"breathing_desc": "Nur 3 Runden. Danach ist dein Kopf meist deutlich ruhiger.",
"round": "Runde %{current} / %{total}",
"round_simple": "Runde %{current} / %{total}",
"intro": "Tief durchatmen hilft, den Impuls zu überwältigen.",
"inhale": "Einatmen",
"hold": "Halten",
"exhale": "Ausatmen",
"start": "Übung starten",
"start_exercise": "Atemübung starten",
"skip": "Überspringen",
"game_offer_title": "Lyra Games",
"game_offer_text": "Wähle ein kurzes Spiel. 2-3 Minuten reichen oft, um den Impuls zu brechen.",
"just_play_lyra": "Kleiner Fokus-Reset gefällig? Such dir ein Spiel aus.",
"game_memory": "Memory",
"game_tictactoe": "Tic-Tac-Toe",
"game_snake": "Snake",
"game_tetris": "Tetris",
"game_memory_desc": "Paare finden, Fokus zurückholen",
"game_tictactoe_desc": "Schnelles Duell für klare Entscheidungen",
"game_snake_desc": "Rhythmus statt Grübeln",
"game_tetris_desc": "Muster ordnen, Kopf beruhigen",
"skip_games": "Spiele überspringen",
"back": "Zurück",
"open_lyra": "Mit Lyra öffnen",
"game_start_title": "Spiel starten",
"game_start_desc": "%{game} wird mit Lyra gestartet.",
"how_overcome": "Wie ging es danach?",
"answer_helps": "Deine Antwort hilft dir, Muster zu erkennen und stärker zu werden.",
"i_overcame": "Ich habe den Impuls überwunden",
"i_gave_in": "Ich habe nachgegeben",
"overcame_msg": "Stark. Jeder überwundene Impuls trainiert dein Gehirn neu.",
"gave_in_msg": "Kein Urteil. Ehrlichkeit ist der Startpunkt für den nächsten Sieg.",
"save": "Speichern",
"done_title": "Sehr gut!",
"done_desc": "Du hast die Atemübung abgeschlossen. Dein Nervensystem hat sich beruhigt.",
"done_back": "Zurück",
"well_done": "Stark gemacht",
"chin_up": "Kopf hoch",
"overcame_result": "Du hast den Impuls durchbrochen. Bleib bei dem, was dir gut tut.",
"gave_in_result": "Ein Rückschritt ist kein Ende. Atme durch und starte neu.",
"back_to_dashboard": "Zurück zum Dashboard"
},
"notifications": {
"title": "Benachrichtigungen",
"empty_title": "Keine Benachrichtigungen",
"empty_subtitle": "Du bist auf dem neuesten Stand.",
"mark_all_read": "Alle als gelesen markieren",
"liked_post": "hat deinen Beitrag geliked",
"commented_post": "hat deinen Beitrag kommentiert",
"voted_domain": "hat über deine Domain abgestimmt",
"domain_accepted": "ist jetzt in der globalen Sperrliste",
"domain_accepted_sub": "Tippe um deine Sperrliste zu öffnen",
"domain_rejected": "wurde abgelehnt und aus deiner Liste entfernt",
"new_follower": "folgt dir jetzt",
"generic": "hat dich benachrichtigt",
"just_now": "gerade eben",
"min_ago": "vor %{n} Min",
"hours_ago": "vor %{n} Std",
"days_ago": "vor %{n} T"
},
"chat": {
"title": "Chat",
"dms": "Direktnachrichten",
"rooms": "Gruppen",
"groups": "Gruppen",
"direct": "Direkt",
"no_chats": "Noch keine Chats",
"no_rooms": "Noch keine Gruppen",
"start_dm": "Neuen DM starten",
"placeholder": "Nachricht schreiben…",
"you": "Du: ",
"just_now": "gerade",
"loading": "Laden…",
"send_failed": "Nachricht konnte nicht gesendet werden.",
"create_group": "Gruppe erstellen",
"create": "Erstellen",
"room_name": "Gruppenname",
"room_description": "Beschreibung (optional)",
"public_room": "Öffentliche Gruppe",
"join_mode": "Beitrittsmodus",
"join_mode_approval": "Mit Freigabe",
"join_mode_invite": "Nur Einladung",
"join": "Beitreten",
"join_pending": "Beitritt wird geprüft…",
"join_required": "Tritt der Gruppe bei, um mitzuschreiben.",
"members": "Mitglieder",
"settings": "Einstellungen",
"info": "Info",
"leave_room": "Gruppe verlassen",
"reply": "Antworten",
"reply_to": "Antwort an",
"like": "Liken",
"unlike": "Like entfernen",
"copy": "Kopieren",
"image_attachment": "Bild",
"file_attachment": "Datei",
"upload_failed": "Upload fehlgeschlagen",
"member_count": "%{n} Mitglieder",
"pending_request": "Beitrittsanfragen",
"approve": "Annehmen",
"reject": "Ablehnen",
"avatar_updated": "Gruppenbild aktualisiert",
"send": "Senden"
},
"community": {
"compose_placeholder": "Was bewegt dich gerade?",
"compose_default_user": "Du",
"compose_photo_perm_title": "Foto-Zugriff",
"compose_photo_perm_desc": "Bitte erlaube den Zugriff auf deine Fotos in den iOS-Einstellungen.",
"image": "Bild",
"cancel": "Abbrechen",
"share": "Teilen",
"no_posts": "Sei der Erste der was teilt",
"cat_all": "Alle",
"cat_games": "Games",
"cat_domain": "Domain-Votes",
"cat_lyra": "Lyra",
"cat_rebreak": "ReBreak",
"like": "Gefällt mir",
"comment": "Kommentar",
"comments_title": "Kommentare",
"comments_empty": "Noch keine Kommentare sei der Erste!",
"reply": "Antworten",
"reply_to": "Antwort an",
"send": "Senden",
"comment_placeholder": "Kommentar schreiben…",
"filter": "Filter",
"published": "Veröffentlicht",
"post_failed": "Post konnte nicht veröffentlicht werden.",
"anonymous_label": "Anonym",
"tier_starter": "Starter",
"tier_pro": "Pro",
"tier_legend": "Legend",
"bot_admin": "Admin",
"bot_ai": "KI",
"reposted_suffix": "hat repostet",
"domain_proposal_label": "Sperrlisten-Vorschlag",
"domain_added_to_blocklist": "Zur globalen Sperrliste hinzugefügt",
"domain_added": "In der globalen Sperrliste",
"domain_proposed": "Zur Aufnahme vorgeschlagen",
"domain_vote_own": "Du kannst nicht über deinen eigenen Vorschlag abstimmen.",
"vote_yes": "Ja",
"vote_no": "Nein",
"vote_rejected": "Abgelehnt",
"vote_in_review": "In Prüfung",
"voted_thanks": "Danke für deine Stimme!"
},
"streak": {
"label_one": "Tag",
"label_other": "Tage",
"label_suffix": "clean"
}
}