chahinebrini 704958320b refactor(domains): gemeinsamer 10/20-Slot-Pool, Free-Tier entfernt
Custom-Domain-Slots sind jetzt EIN gemeinsamer Pool für web + mail
(Pro 10 / Legend 20) statt getrennter web/mail-Buckets. Free-Tier ist
entfallen — PLAN_LIMITS hat nur noch pro + legend, getPlanLimits
defaultet auf pro.

Backend:
- plan-features: customDomains ist eine Zahl (CustomDomainLimits weg)
- index.post: Slot-Check gegen Gesamt-Count, Fehler einheitlich LIMIT_REACHED
- index.get: liefert { items, count, limit }
- change-preview + coach/message an die neue Form angepasst

Frontend:
- useCustomDomains: count/limit (Zahlen) statt countsByType/limits
- AddDomainSheet: ein generischer Limit-Hinweis (error_limit_reached)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 18:40:28 +02:00

1333 lines
70 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": "One moment...",
"cancel": "Cancel",
"continue": "Continue",
"back": "Back",
"error": "Error",
"success": "Success",
"ok": "OK",
"confirm": "Confirm",
"retry": "Try again",
"unknown_error": "Unknown error"
},
"auth": {
"welcomeBack": "Welcome back",
"signinSubtitle": "Sign in to continue.",
"signin": "Sign in",
"signingIn": "One moment...",
"signup": "Sign up",
"signupTitle": "Create account",
"signupSubtitle": "Join the community.",
"signOut": "Sign out",
"email": "Email",
"emailPlaceholder": "Email",
"emailRequired": "Email *",
"password": "Password",
"passwordPlaceholder": "Password",
"passwordRequired": "Password * (min. 8 characters)",
"passwordMin8": "Password must be at least 8 characters.",
"newPassword": "New password",
"nickname": "Username",
"nicknamePlaceholder": "Username * (visible to others)",
"noAccount": "No account yet?",
"alreadyRegistered": "Already registered?",
"fillRequired": "Please fill in all required fields.",
"googleSignin": "Sign in with Google",
"appleSignin": "Sign in with Apple",
"googleSignup": "Sign up with Google",
"appleSignup": "Sign up with Apple",
"orWithEmail": "or with email",
"forgotPassword": "Forgot password?",
"resetPasswordTitle": "Reset password",
"resetPasswordSubtitle": "Enter your email and we'll send you a reset link.",
"resetPasswordSend": "Send link",
"resetPasswordSent": "Email sent",
"resetPasswordSentDesc": "Check your inbox. The link is valid for 60 minutes.",
"resetPasswordSentDescPrefix": "Check your inbox for ",
"resetPasswordSentDescSuffix": ". The link is valid for 60 minutes.",
"backToLogin": "← Back to sign in",
"backToLoginPlain": "Back to sign in",
"backToSignup": "← Back to sign up",
"chooseAvatar": "Choose avatar",
"privacyNotice": "Your data is stored securely on servers in Germany. We never sell data to third parties.",
"acceptTerms": "I accept the",
"acceptTermsSuffix": " and have read the privacy policy.",
"termsLink": "Terms of Service",
"pleaseAcceptTerms": "Please accept the Terms of Service.",
"confirmEmailTitle": "Confirm email",
"confirmEmailDesc": "We sent a 6-digit code to %{email}.",
"confirmEmailLine1": "We sent a 6-digit code to",
"confirmEmailLine2": "",
"confirmBtn": "Confirm",
"confirmed": "Confirmed! Redirecting...",
"confirming": "Confirming sign-in...",
"confirmSuccess": "Successfully signed in!",
"confirmTimeout": "Timed out please try again.",
"confirmFailed": "Confirmation failed.",
"resend": "Resend",
"resendCooldown": "Resend (%{seconds}s)",
"noCode": "Didn't receive a code?",
"deviceLimitTitle": "Device limit reached",
"deviceLimitDesc": "Your current plan doesn't allow more devices. Free up another device or upgrade your plan to continue on this device.",
"deviceLimitUpgrade": "Upgrade plan",
"toLogin": "Back to sign in",
"oauthFailed": "Sign in failed",
"loginFailed": "Sign in failed",
"registerFailed": "Registration failed",
"device_locked_headline": "This device is locked",
"device_locked_body": "You tried to sign in on this device. It is bound to a different Rebreak account. This lock protects you from bypassing your own protection setup in a moment of urge.",
"device_locked_countdown": "Release in progress — %{remaining} left",
"device_locked_email_hint": "If you no longer know your original account: check your email inbox for 'Rebreak device locked' — we sent you a message.",
"device_locked_use_original": "Sign in with original account",
"device_locked_back": "Back to sign in",
"resetOtpTitle": "Enter code",
"resetOtpLine1": "We sent a 6-digit code to",
"resetOtpLine2": "Please enter it below.",
"resetOtpConfirmBtn": "Continue",
"resetOtpResend": "Resend code",
"resetOtpBackToForgot": "Back",
"newPasswordTitle": "New password",
"newPasswordSubtitle": "Choose a password with at least 8 characters.",
"newPasswordPlaceholder": "New password",
"newPasswordConfirmPlaceholder": "Confirm password",
"newPasswordSave": "Save password",
"newPasswordSaved": "Password updated.",
"newPasswordMismatch": "Passwords don't match.",
"newPasswordCancelLink": "Cancel and sign in again"
},
"landing": {
"appName": "Rebreak",
"tagline": "You're not walking alone.",
"start": "Sign up"
},
"splash": {
"tagline": "You will never walk alone!",
"subtitle": "Together we'll make it.",
"madeInGermany": "Made in Germany"
},
"applock": {
"title": "Rebreak is locked",
"subtitle": "Unlock the app to continue.",
"unlock": "Unlock",
"prompt": "Unlock Rebreak",
"signOut_title": "Sign out?",
"signOut_body": "You can sign back in with your email and password afterwards."
},
"appHeader": {
"appName": "ReBreak",
"sosLabel": "SOS",
"sosTagline": "we're here for you",
"sosSubtitle": "Tap if you need help",
"editProfile": "Edit profile",
"settings": "Settings",
"signOut": "Sign out"
},
"headerMenu": {
"profile": "Profile",
"settings": "Settings",
"games": "ReBreak Games",
"debug": "Debug",
"logout": "Sign out"
},
"tabs": {
"home": "Home",
"chat": "Chat",
"coach": "Coach",
"blocker": "Blocker",
"mail": "Mail",
"profile": "Profile"
},
"games": {
"title": "ReBreak Games",
"subtitle": "Casual play outside SOS — Memory, Snake, Tetris and Tic-Tac-Toe.",
"back_to_picker": "Games",
"last_score": "Score: %{score}",
"skeleton_footer": "Skeleton — Highscore leaderboard coming in Phase C"
},
"home": {
"tagline": "You're not walking alone.",
"start": "Get started",
"greeting_morning": "Good morning",
"greeting_day": "Good afternoon",
"greeting_evening": "Good evening",
"streak_days_one": "day clean",
"streak_days_other": "days clean",
"streak_start": "Start your first day",
"quote_of_day": "Thought of the day",
"quick_access": "Quick access",
"stats_urges": "Urges",
"stats_chats": "Chats",
"stats_mails": "Mails blocked"
},
"coach": {
"title": "Lyra",
"subtitle": "Your CBT coach",
"welcome": "Hi! I'm Lyra, your personal coach. How are you doing today? I'm here to listen and help.",
"input_placeholder": "Write to me...",
"new_chat": "New chat",
"lyra": "Lyra",
"modeBadge": {
"coach": "Coach",
"sos": "SOS"
},
"placeholder": "What's on your mind?",
"speaking": "Lyra is speaking...",
"recording": "Recording...",
"transcribing": "Processing...",
"feedback_saved": "Feedback saved",
"welcome_back": "Welcome back",
"online": "online",
"thinking": "typing …",
"error": "Something went wrong. Please try again."
},
"blocker": {
"title": "Blocker",
"subtitle": "208,000+ domains blocked",
"status_active": "Active",
"status_inactive": "Inactive",
"filter_label": "Gambling Filter",
"filter_active_desc": "All gambling sites are being blocked",
"filter_inactive_desc": "Filter is disabled",
"tamper_title": "Tamper protection",
"tamper_desc": "The filter is secured against easy disabling. Unlocking requires a 6-hour cooldown period.",
"custom_domains": "Custom Domains",
"add_domain": "Add",
"help_link": "Help & FAQ about Blocker",
"status_approved": "Approved",
"status_rejected": "Rejected",
"status_pending": "Pending",
"add_sheet_title": "Add filter",
"add_sheet_label": "Domain or email address",
"add_sheet_placeholder": "e.g. casino.com or info@casino.com",
"add_sheet_invalid": "Please enter a valid domain or email address",
"add_sheet_help": "We automatically detect whether it's a website or an email sender.",
"preview_web": "Domain filter: %{value}",
"preview_mail": "Email filter: %{value}",
"preview_invalid": "Invalid format",
"custom_filter_overview_title": "Your Filters",
"custom_filter_overview_count": "%{count} of %{max}",
"add_sheet_warning_free": "This domain stays on your list permanently — you cannot remove it later.",
"add_sheet_warning_pro": "This domain is permanent. You can release it to the global blocklist — the slot becomes free again and it will protect every ReBreak user.",
"add_sheet_confirm_permanent": "I understand this domain is permanent.",
"add_sheet_add_failed": "Failed to add domain.",
"add_sheet_already_global": "%{domain} is already on the global blocklist — no slot needed.",
"add_sheet_already_protected": "%{domain} is already fully protected — on the blocklist AND in your VIP second layer. Nothing to do.",
"add_sheet_in_global_not_vip": "%{domain} is already on our blocklist (Layer 1). You can additionally add it to your VIP second layer — then it stays blocked even if Layer 1 is ever off. No slot is used.",
"add_sheet_add_to_vip_cta": "Add to VIP list",
"cooldown_banner_title": "Cooldown running",
"deactivation_actionsheet_title": "Start 24-hour cooldown?",
"deactivation_actionsheet_message": "Protection stays active during this time. You can cancel anytime.",
"deactivation_start_cta": "Start cooldown",
"deactivation_failed_msg": "Could not start cooldown.",
"deactivation_heading": "Before you deactivate",
"deactivation_title": "We get it.",
"deactivation_intro": "Before you turn off protection, here's what you should know:",
"deactivation_bullet1_title": "24-hour cooldown",
"deactivation_bullet1_text": "Protection stays active for 24 hours even after you start the cooldown. This time gives you space to let the urge pass.",
"deactivation_bullet2_title": "You can cancel anytime",
"deactivation_bullet2_text": "If the urge fades: one tap and the cooldown is gone. Protection just stays on.",
"deactivation_bullet3_title": "Other tools are here",
"deactivation_bullet3_text": "Breathing exercise, Lyra, your streak — everything stays available while you wait.",
"deactivation_breathe_cta": "Breathe for 3 min",
"deactivation_start_anyway": "Start cooldown anyway",
"deactivation_starting": "Starting cooldown…",
"deactivation_cancel_failed": "Could not cancel cooldown.",
"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_empty": "No custom domains yet.\nTap + to add one.",
"domain_badge_voting": "Voting",
"domain_badge_pruefung": "Review",
"domain_badge_rejected": "Rejected",
"domain_badge_active": "Active",
"domain_btn_freigeben": "Release",
"domain_btn_erneut": "Retry",
"domain_btn_in_abstimmung": "In voting",
"domain_btn_rebreak_prueft": "ReBreak reviewing",
"domain_confirm_legend_resubmit": "Resubmit to ReBreak?",
"domain_confirm_legend_first": "Send domain to ReBreak?",
"domain_confirm_community_resubmit": "Resubmit to community vote?",
"domain_confirm_community_first": "Release domain to community vote?",
"domain_confirm_legend_message": "%{domain} will be sent directly to the ReBreak team for manual review.",
"domain_confirm_community_message": "%{domain} will be released to the community vote (yes/no voting).",
"domain_success_legend_title": "Domain submitted",
"domain_success_community_title": "Domain in voting",
"domain_success_legend_message": "The ReBreak team is reviewing this domain manually. You'll get a notification with the result.",
"domain_success_community_message": "The community can now vote. You'll be notified once the result is in.",
"upgrade_alert_title": "Pro upgrade",
"upgrade_alert_desc": "Stripe checkout is coming in step 11.",
"protection_card_title": "ReBreak protection",
"protection_card_locked_title": "ReBreak protection active",
"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_settings_a11y": "Protection settings",
"protection_stat_domains": "Domains",
"protection_stat_method": "Method",
"protection_stat_method_dns": "DNS",
"protection_stat_method_native": "Native",
"protection_stat_status": "Status",
"protection_stat_status_live": "Live",
"permission_denied": {
"title": "Protection was denied",
"body": "iOS didn't install the filter because \"Don't Allow\" was tapped in the system dialog. We can try again — this time please tap \"Allow\".",
"retry_cta": "Try again",
"retry_loading": "One moment...",
"settings_cta": "Open Settings",
"fallback_label": "If the dialog doesn't appear",
"fallback_body": "Settings → Screen Time → Content & Privacy — VPN/Filter must be allowed. As a last resort: delete the app and reinstall via TestFlight."
},
"family_controls_error": {
"title": "App-Lock couldn't activate",
"body": "iOS can't communicate with the Screen Time service right now. This sometimes happens after \"Don't Allow\" or when the background service is stuck.",
"retry_cta": "Try again",
"retry_loading": "One moment...",
"settings_cta": "Open Settings",
"fallback_label": "If it still doesn't work",
"fallback_body": "1. Restart your iPhone. 2. In Settings, make sure you're signed in with your Apple ID and Screen Time is enabled. 3. Last resort: delete the app and reinstall via TestFlight."
},
"activate_url_failed_title": "Could not activate URL filter",
"activate_url_failed_msg": "Unknown error.\nYou can try again or check System Settings.",
"activate_settings_btn": "Settings",
"protection_off_title": "Protection is off",
"protection_off_message": "The filter isn't running but should be. Want to turn it back on?",
"reactivate_btn": "Turn protection back on",
"protection_off_later": "Later",
"activate_app_lock_failed_title": "Could not activate App Lock",
"activate_app_lock_failed_msg": "The required permission was denied. You can try again.",
"sync_list_failed_title": "Filter list could not be loaded",
"sync_list_failed_msg": "Please try again later.",
"activation_failed_title": "Activation failed",
"details_done": "Done",
"details_title": "Protection details",
"details_active_title": "Protection active",
"details_domains_blocked": "%{value} domains blocked",
"details_layers_heading": "Active layers",
"details_layer_url_label": "Network filter",
"details_layer_url_desc": "Blocks gambling domains system-wide (NEFilter Extension)",
"details_layer_applock_label": "App lock",
"details_layer_applock_desc": "ReBreak cannot be deleted impulsively",
"details_layer_vpn_label": "VPN filter",
"details_layer_vpn_desc": "Local DNS filter via VpnService",
"details_layer_a11y_label": "Browser filter",
"details_layer_a11y_desc": "Detects URL input in browser apps",
"details_layer_tamper_label": "Tamper lock",
"details_layer_tamper_desc": "Watchdog against external deactivation",
"details_lyra_cta_title": "Don't need protection anymore?",
"details_lyra_cta_subtitle": "Talk to Lyra about it — she's listening.",
"details_deactivate_link": "Deactivate anyway",
"layers_url_filter_title": "URL filter",
"layers_url_filter_subtitle_active": "System-wide filter active",
"layers_url_filter_subtitle_inactive": "Blocks gambling sites in Safari + apps",
"layers_app_lock_title": "App lock",
"layers_app_lock_subtitle_active": "Locked — disable only via the cooldown",
"layers_app_lock_subtitle_inactive": "Stops you from switching off ReBreak or the filter on impulse",
"layers_app_lock_warning": "Once active, you can only disable protection through a 24-hour cooldown. That's by design.",
"layers_app_lock_locked_hint": "System-locked. Only disable via iOS Settings → Screen Time → Management by ReBreak.",
"layers_a11y_subtitle_active": "Accessibility active — app protection armed",
"layers_a11y_subtitle_inactive": "Accessibility not enabled — set it up now",
"kpi_global_label": "Domains blocked worldwide",
"kpi_global_subtitle": "Active entries in the global blocklist",
"delta_week": "this week",
"delta_month": "this month",
"kpi_submissions_title": "Your submitted domains",
"kpi_submissions_subtitle": "Status of your contributions to the global list",
"kpi_my_submissions": "total",
"kpi_status_active": "active",
"kpi_status_vote": "in vote",
"kpi_status_review": "in review",
"kpi_in_vote": "In vote",
"kpi_in_review": "In review",
"kpi_avg_per_user": "Avg. domains per user",
"kpi_avg_wait": "Avg. wait",
"kpi_days_suffix": "days",
"faq_heading": "FAQ",
"faq1_q": "How does protection work?",
"faq1_a": "Protection runs directly in iOS as a content filter. Gambling sites are blocked locally on your device — no traffic leaves your iPhone.",
"faq2_q": "How many sites are blocked?",
"faq2_a": "Over 208,000 domains from a curated global blocklist — online casinos, sports betting, gambling platforms and related sites. The list is updated regularly.",
"faq3_q": "Can I add my own domains?",
"faq3_a": "Yes. From the domain list on the blocker page you can add custom domains that get blocked in addition to the global list.",
"faq4_q": "Why can't I turn protection off immediately?",
"faq4_a": "In the moment of urge, you often want to disable fast — and regret it after. The 24-hour cooldown gives you time for the urge to pass. You can cancel the cooldown anytime — protection then simply stays on.",
"more_info_title": "Disable protection",
"cooldown_elapsed_title": "Protection is off",
"cooldown_elapsed_message": "The cooldown has elapsed — protection was disabled. You can now turn off the ReBreak accessibility service in Settings.",
"cooldown_elapsed_message_ios": "The cooldown has elapsed — protection was disabled.",
"cooldown_elapsed_open_settings": "Open Settings",
"app_lock_coming_soon_badge": "Soon",
"app_lock_coming_soon_desc": "App lock coming soon — filter protection is already active.",
"type_web": "Website",
"type_mail": "Email",
"add_web_label": "Domain",
"add_web_placeholder": "e.g. casino.com",
"add_web_help": "This website will be blocked on all your protected devices.",
"add_mail_label": "Email address or domain",
"add_mail_placeholder": "e.g. newsletter@casino.com or casino.com",
"add_mail_help": "Email address or mail domain. We block all emails from this sender.",
"add_mail_invalid": "Please enter a pattern.",
"add_sheet_cta": "Add",
"section_domains": "Your Domains",
"section_mails": "Your Email Filters",
"count_label": "%{count}/%{max}",
"error_web_limit_reached": "You've used all your domain slots. Remove a domain or upgrade to Pro/Legend.",
"error_mail_limit_reached": "You've used all your email slots. Remove an email pattern or upgrade to Pro/Legend.",
"error_limit_reached": "All domain slots are full. Submit a domain for review — a slot frees up once it's accepted.",
"error_invalid_mail": "Please enter a full email address or mail domain (e.g. info@only4-subscribers.com).",
"error_invalid_input": "Please enter a valid domain or email address.",
"error_duplicate": "You've already added this entry — it's in your filter list.",
"kind_override_label": "This is an email address / mail sender",
"empty_web": "No custom domains yet.\nTap + to add one.",
"empty_mail": "No mail domains yet. Tap + to block an email address or domain.",
"vip_section_title": "My blocked sites",
"vip_empty": "No custom sites yet.\nTap + to block a website.",
"vip_global_hint": "+ %{count} known gambling sites automatically protected",
"my_filters_title": "My Filters",
"my_filters_empty": "No filters yet. Tap + to block a website or email.",
"vip_layer2_title": "VIP List",
"vip_layer2_desc": "Second-layer protection: this list activates if the URL filter (Layer 1) has a technical issue. It includes your custom domains plus a curated global portion.",
"vip_layer2_global_hint": "+ %{count} known gambling sites automatically protected",
"vip_layer2_count": "%{count} sites in your VIP list",
"vip_section_custom_title": "My VIP domains",
"vip_section_curated_title": "Top predefined sites",
"vip_section_custom_count": "%{count} custom",
"vip_section_curated_count": "%{count} curated",
"remove_domain_sheet_heading": "Remove domain",
"remove_domain_title": "Take a moment.",
"remove_domain_intro": "You're about to remove this site from your personal blocklist. This takes effect immediately — the site would be reachable again.",
"remove_domain_bullet1_title": "Other sites stay protected",
"remove_domain_bullet1_text": "The global blocklist with 200,000+ domains stays active. Only this one site would be unblocked.",
"remove_domain_bullet2_title": "This is risky in a craving moment",
"remove_domain_bullet2_text": "You added this site yourself — probably for a good reason. Wait until the urge passes.",
"remove_domain_keep_cta": "Keep protection",
"remove_domain_remove_anyway": "Remove anyway",
"remove_domain_removing": "Removing…",
"remove_domain_failed": "Remove failed.",
"remove_domain_actionsheet_title": "Really remove domain?",
"remove_domain_actionsheet_message": "%{domain} will be immediately deleted from your blocklist.",
"remove_domain_confirm_cta": "Remove"
},
"onboarding": {
"lyra": {
"welcome": { "body": "Hi, I'm Lyra. Glad you're here — the first step is often the hardest, and you've already taken it." },
"privacy": { "body": "Before we start — a promise. We only know you by your alias. No real name, no trackers, no ads. You're safe here." },
"nickname": { "body": "What should I call you? Pick an alias — only the community sees it, no real name needed." },
"diga_choice": { "body": "Do you have a prescription code from your health insurance? Then everything's unlocked for you." },
"diga_code": { "body": "Type your code — I'll check it for you." },
"plan": { "body": "To keep the protection running on your device, we need a plan — first 14 days are free. What feels right for you?" },
"payment": { "body": "Quick step: confirm your trial. You can cancel anytime — it all runs through Apple." },
"protection": { "body": "Now the important part — the protection on your device. Ready?" },
"protection_url": { "body": "An iOS dialog is coming. Tap \"Allow\" — the bottom button (not the big blue one on top — that's the trap)." },
"protection_lock": { "body": "Now the app lock. iOS asks for Screen Time access — tap \"Continue\", again the bottom button (not the blue one)." },
"protection_url_android": { "body": "Android will ask for VPN permission. Tap \"OK\" — this isn't a real VPN; the filter runs locally on your device." },
"protection_lock_android": { "body": "Last step: I'll open Accessibility settings now. Find \"ReBreak\" there and flip the switch on — then come right back." },
"done": { "body": "Done. Day 1 of your new streak — and you're not walking alone." },
"audio_play": "Enable voice",
"audio_loading": "Loading voice...",
"audio_stop": "Stop playback",
"audio_disable": "Disable voice"
},
"welcome": {
"cta_primary": "Let's go",
"bullet_anon": "Anonymous — no real name needed",
"bullet_protect": "Gambling sites get blocked",
"bullet_community": "Others walking the same path"
},
"privacy": {
"cta_primary": "Got it",
"promise_alias": "Only your alias is visible",
"promise_minimal": "We store as little as possible",
"promise_no_ads": "No trackers, no ads",
"promise_germany": "Servers in Germany · GDPR-compliant"
},
"nickname": {
"cta_primary": "Save",
"label": "YOUR ALIAS",
"placeholder": "e.g. wanderer84",
"hint": "332 characters. Changeable anytime.",
"error_too_short": "Minimum 3 characters.",
"error_too_long": "Maximum 32 characters.",
"error_profanity": "Please pick a neutral alias.",
"error_taken": "This alias is already taken."
},
"diga_choice": {
"cta_yes": "Yes, I have a code",
"cta_no": "No, show me plans",
"hint": "A DiGA code is issued by your health insurance and gives you full access without payment."
},
"diga_code": {
"cta_primary": "Redeem",
"cta_secondary": "No code after all — back",
"label": "PRESCRIPTION CODE",
"hint": "Internal test codes: REBREAK-TEST-001 to -010",
"error_not_found": "This code doesn't exist. Check the spelling please.",
"error_already_used": "This code has already been redeemed.",
"error_expired": "This code has expired.",
"error_invalid_input": "Please enter a valid code."
},
"plan": {
"cta_trial": "Start 14 days free",
"cta_legend": "Choose Legend",
"billing_monthly": "Monthly",
"billing_yearly": "Yearly",
"billing_savings": "2 months free",
"tier_pro_badge": "Recommended",
"tier_pro_price_monthly": "€3.99 / month",
"tier_pro_price_yearly": "€3.33 / month",
"tier_pro_anchor_yearly": "€47.88",
"tier_pro_total_yearly": "€39.90 / year",
"tier_pro_subline_monthly": "First 14 days free",
"tier_pro_subline_yearly": "14 days free + 2 months gift",
"tier_legend_price_monthly": "€7.99 / month",
"tier_legend_price_yearly": "€6.66 / month",
"tier_legend_anchor_yearly": "€95.88",
"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_lyra": "Lyra coach unlimited",
"feat_mail": "Mail filter for casino spam",
"feat_community": "Community + streaks",
"feat_legend_all_pro": "Everything in Pro",
"feat_legend_multi_device": "Protection on Mac + Windows",
"feat_legend_voice": "Premium Lyra voice",
"disclaimer": "Auto-renew. Cancel anytime in iOS Settings.",
"hardship_link": "Tight on money? Write to us."
},
"payment": {
"cta_dev_skip": "Continue (dev skip)",
"dev_label": "Dev stub",
"dev_body": "The real payment sheet (RevenueCat / StoreKit) is coming in the next phase. For now we set step='pre_protection' and move on to protection setup."
},
"protection": {
"cta_primary": "Activate protection",
"cta_open_a11y": "Open Accessibility settings",
"cta_check_a11y": "I've enabled ReBreak",
"url_title": "Step 1 of 2 — Content filter",
"lock_title": "Step 2 of 2 — App lock",
"url_title_android": "Step 1 of 2 — DNS filter",
"lock_title_android": "Step 2 of 2 — Tamper protection",
"tap_marker_hint": "Apple puts the big blue button on top (\"Don't Allow\") — please tap the BOTTOM button, not the top one.",
"tap_marker_hint_android_vpn": "Android will show a VPN permission request. Tap \"OK\" — we only use the VPN API locally as a DNS filter; no traffic leaves your device.",
"tap_marker_hint_android_a11y": "Once you flip the ReBreak switch on, the service protects your settings from accidental disabling. Then come back to the app.",
"android_a11y_pending_title": "Waiting for Accessibility activation",
"android_a11y_pending_body": "If you didn't enable Accessibility, open it again and turn ReBreak on.",
"dialog_button_allow": "Tap \"Allow\"",
"dialog_button_continue": "Tap \"Continue\"",
"dialog_button_vpn_ok": "Tap \"OK\"",
"dialog_button_a11y_toggle": "Toggle the switch",
"applock_failed_title": "App lock failed",
"applock_failed_msg": "You can try again or skip this step — the URL filter is already running.",
"applock_skip": "Skip",
"error_title": "Protection couldn't be activated",
"error_unknown": "Unknown error. Please try again.",
"feat_blocklist_title": "Global filter",
"feat_blocklist_desc": "Gambling domains blocked in browsers + apps.",
"feat_ios_title": "iOS NEFilter",
"feat_ios_desc": "Apple's Network Extension — secure and deep in the system.",
"feat_android_title": "Android VPN filter",
"feat_android_desc": "Local DNS filter — no external server.",
"feat_cooldown_title": "Cooldown protection",
"feat_cooldown_desc": "24h friction before you can disable protection.",
"permission_note": "In the next iOS / Android dialog: please tap \"Allow\"."
},
"done": {
"cta_primary": "Enter the app",
"headline": "You're in.",
"subhead": "Day 1 of your streak. You're not alone — the community is here, Lyra too.",
"faq_section_title": "Frequently asked"
},
"step_progress": "Step %{current} of %{total}",
"block_spotlight": {
"body": "Activate protection now. Tap here — iOS will ask if ReBreak can block gambling sites."
},
"nickname_spotlight": {
"title": "Pick your alias",
"body": "This is your only name on rebreak. No one sees your email or real name.",
"finish": "Got it"
}
},
"protection_onboarding": {
"sheet_title": "Set up protection",
"sheet_intro": "Set up both protection layers in this order. Once the app lock is active, you won't be able to open VPN settings anymore.",
"step_vpn_title": "Enable VPN protection",
"step_vpn_desc": "Blocks gambling domains system-wide via DNS on your device. Must be set up first.",
"step_vpn_cta": "Enable VPN protection",
"step_a11y_title": "Enable app lock",
"step_a11y_desc": "Prevents you from impulsively disabling ReBreak or the VPN filter. Only available after the VPN step.",
"step_a11y_cta": "Enable app lock",
"skip_cta": "Set up later"
},
"mail": {
"title": "Mail Shield",
"subtitle": "Automatically block gambling emails",
"plan_free": "Free",
"stat_accounts": "Mailbox",
"stat_domains": "Domains",
"stat_interval": "Scan interval",
"connect_title": "Connect your mailbox",
"connect_desc": "Rebreak automatically scans for gambling emails and blocks them — without reading your emails.",
"connect_cta": "Connect now",
"privacy_1": "Only subject + sender are checked",
"privacy_2": "No access to email content",
"privacy_3": "GDPR-compliant, servers in Germany",
"providers_title": "Supported providers",
"provider_other": "Other providers",
"empty_title": "No emails blocked yet",
"empty_subtitle": "Connect your mailbox so Rebreak can protect you automatically.",
"connect_sheet_title": "Connect mailbox",
"connect_sheet_subtitle": "Choose your email provider. Rebreak deletes gambling emails automatically — your message content is never read.",
"provider_gmail": "Gmail",
"provider_icloud": "iCloud Mail",
"provider_outlook": "Outlook",
"provider_outlook_disabled_badge": "Coming soon",
"provider_outlook_disabled_hint": "Microsoft accounts need a new sign-in method, we're working on it.",
"provider_yahoo": "Yahoo Mail",
"provider_gmx": "GMX / Web.de",
"app_password_required_title": "App password required",
"app_password_guide_gmail": "Gmail requires an app-specific password (not your regular Google password). Enable 2FA and create an app password at myaccount.google.com/apppasswords.",
"app_password_guide_icloud": "iCloud requires an app-specific password. Go to appleid.apple.com → Sign in → App-specific passwords.",
"app_password_guide_outlook": "Outlook with Microsoft account: Enable 2FA and create an app password at account.microsoft.com/security.",
"app_password_guide_yahoo": "Yahoo requires an app password. Enable 2FA and create it at login.yahoo.com/account/security.",
"app_password_guide_gmx": "GMX / Web.de: Enable IMAP in settings and use your regular password or an app password if 2FA is active.",
"app_password_guide_other": "Enter your email address and app password. Rebreak detects your provider automatically from the domain (e.g. IONOS, Strato, 1&1). An app password is recommended if available.",
"app_password_open_link": "Create app password now",
"form_email_label": "Email address",
"form_email_placeholder": "your@email.com",
"form_password_label": "App password",
"form_password_placeholder": "App password (not your login password)",
"form_privacy_note": "Your password is stored AES-encrypted. The content of your emails is never read — only subject and sender.",
"form_connect_btn": "Connect mailbox",
"form_fields_required": "Email and password are required.",
"connect_failed": "Connection failed. Please check your credentials.",
"section_accounts": "Mailboxes",
"add_account_a11y": "Add mailbox",
"empty_state_title": "No mailbox connected",
"empty_state_subtitle": "Connect your first mailbox — Rebreak will delete gambling emails automatically before you see them.",
"empty_state_cta": "Connect first mailbox",
"account_active": "Active",
"account_inactive": "Inactive",
"account_last_scan": "%{time} ago",
"account_never_scanned": "Not scanned yet",
"account_just_now": "just now",
"account_stat_blocked": "Blocked",
"account_stat_scanned": "Scanned",
"account_stat_block_rate": "Block rate",
"account_disconnect_confirm_title": "Disconnect mailbox?",
"account_disconnect_confirm_message": "%{email} will be disconnected and all scan data will be deleted.",
"account_disconnect_confirm_btn": "Disconnect",
"stats_blocked": "Blocked",
"stats_accounts": "Mailboxes",
"stats_next_scan": "Next scan",
"stats_next_scan_soon": "soon",
"stats_mode": "Mode",
"stats_account_summary": "across %{count} mailbox(es)",
"scheduled": "Scheduled",
"account_of_scanned": "of %{scanned} scanned",
"activity_log_count": "%{count} mail(s) blocked",
"connect_success_title": "Mailbox connected",
"connect_success_message": "Rebreak will now automatically scan for gambling emails.",
"upgrade_alert_title": "More mailboxes",
"upgrade_alert_desc": "Upgrade to Pro for up to 3 mailboxes, or Legend for unlimited.",
"add_account": "Add mailbox",
"section_accounts_count": "%{used} of %{max} connected",
"section_accounts_count_unlimited": "%{used} connected · unlimited",
"live": "Live",
"disconnect": "Disconnect",
"loading": "Loading…",
"app_password_placeholder": "App password",
"scan_interval_label": "Scan interval",
"realtime_desc": "Real-time blocking via IMAP IDLE",
"free_scan_interval_hint": "Free plan: fixed 4h interval. Upgrade for 1h.",
"account_change_password": "Change password",
"edit_account_title": "Update password",
"edit_account_subtitle": "Enter the new app password for %{email}. The previous password will be replaced.",
"edit_account_save": "Save",
"activity_log_title": "Recently blocked",
"activity_log_subtitle": "Mails blocked in the last 24h",
"activity_log_empty": "No mails blocked in the last 24h",
"activity_log_more": "+ %{count} more",
"activity_no_subject": "(no subject)",
"chart_title": "Last 7 days",
"chart_week_total": "%{count} this week",
"status_auth_error": "Auth Error",
"status_connect_error": "Connection Error",
"status_error_tap_hint": "Tap to fix",
"status_stale": "Stale",
"status_stale_last_scan": "last scan %{rel}",
"status_live_idle": "IDLE active since %{rel}",
"status_live_no_new_mail": "connected · no new mail since %{rel}",
"status_waiting_first_connect": "Waiting for first connection",
"auth_error_title": "App Password invalid",
"auth_error_subtitle": "The app password for %{email} has expired or is incorrect. Please renew it and enter it below.",
"auth_error_renew_link": "Create new app password",
"errors": {
"auth_failed": "The app password is incorrect. Please regenerate it at your mail provider and enter it here.",
"app_password_required": "Your mail provider requires an app-specific password. Create one in your account settings.",
"connection_failed": "Could not connect to the mail server. Please try again later.",
"host_unreachable": "Mail server unreachable. Check your internet connection — or your provider may not be supported yet. Write to: support@rebreak.org",
"tls_error": "Secure connection to the mail server failed. Please contact your provider.",
"rate_limited": "Too many connection attempts. Please wait a few minutes and try again.",
"unknown": "Connection failed. Check your app password or write us at support@rebreak.org — we'll add your provider."
},
"consent": {
"title": "Before you connect your inbox",
"intro": "Rebreak scans your inbox specifically for gambling promotional emails and deletes them automatically. This processing may allow conclusions to be drawn about a gambling disorder — we treat this as a special category of data under Art. 9 GDPR.",
"legal_text": "By connecting my email inbox, I expressly consent to Rebreak scanning my inbox specifically for gambling promotional emails and deleting them. I acknowledge that this processing may allow conclusions to be drawn about a gambling disorder, and I expressly consent to this processing of health-related data pursuant to Art. 9(2)(a) GDPR. I may withdraw this consent at any time with future effect by disconnecting the mail connection in the app settings.",
"checkbox_label": "I expressly consent",
"cta_next": "Continue",
"more_link": "More about this processing",
"reminder_title": "Important privacy update",
"reminder_body_one": "We have updated our consent wording for mail processing. Your existing mailbox connection requires your renewed explicit consent — otherwise we will pause automatic deletion.",
"reminder_body_other": "We have updated our consent wording for mail processing. Your %{count} existing mailbox connections require your renewed explicit consent — otherwise we will pause automatic deletion.",
"reminder_legal_short": "I consent to the processing of my mailbox contents under Art. 9(2)(a) GDPR.",
"reminder_cta_consent": "I consent",
"reminder_cta_later": "Later",
"reminder_cta_disconnect": "Disconnect now",
"reminder_consent_error": "Failed to save consent. Please try again."
},
"title_label": "Label",
"title_placeholder": "e.g. Personal Gmail, Work",
"title_edit_title": "Edit label",
"title_save": "Save",
"settings_section_label": "Settings",
"row_title": "Label",
"row_email": "Email",
"row_password": "Password",
"row_disconnect": "Disconnect",
"account_chart_unavailable": "Daily chart loading …",
"disconnect_confirm_title": "Disconnect mailbox?",
"disconnect_confirm_body": "%{email} will be disconnected and all scan data deleted.",
"more_infos_title": "More Info",
"more_infos_subtitle": "Blocked — last 30 days",
"stats": {
"blocked_per_day_heading": "Blocked",
"blocked_per_day_sublabel": "%{total} mails blocked · %{avg} last week",
"blocked_per_week_heading": "Blocked — recent weeks",
"blocked_per_month_heading": "Blocked — recent months",
"distribution_heading": "Distribution by mailbox",
"distribution_center_label": "total",
"distribution_other": "Others",
"distribution_other_n": "+%{n} more",
"empty_title": "No mails blocked yet",
"empty_body": "Once mails are blocked, an overview will appear here."
},
"filter": {
"all": "All"
},
"oauth": {
"warning_title": "Note on visibility in your Microsoft account",
"warning_body": "Microsoft will show you a permission dialog. The app name \"Rebreak\" will appear there and will be visible in your Microsoft account overview under App permissions. If your Microsoft account is shared with others, you should take this into account.",
"warning_continue": "Understood, sign in with Microsoft",
"warning_cancel": "Back to selection",
"pending_label": "Microsoft sign-in in progress…",
"pending_hint": "Complete the step in your browser and then return here.",
"error_aborted": "Sign-in cancelled.",
"error_no_code": "OAuth failed — no authorization code received.",
"error_callback_failed": "Connection could not be completed. Please try again.",
"disconnect_hint_title": "Connection removed",
"disconnect_hint_body": "The tokens have been deleted from our database. Unfortunately Microsoft does not support server-side revocation by third-party apps. To fully remove Rebreak's permission from your Microsoft account: account.microsoft.com → Security → App permissions → find Rebreak → Remove.",
"disconnect_hint_open_ms": "Open Microsoft"
},
"account_chart_collecting_title": "Collecting data",
"account_chart_collecting_body": "Analysis available after 24h",
"scan_now": "Scan now",
"scan_running": "Scanning…",
"scan_done": "%{count} blocked",
"scan_error": "Scan failed",
"email_change_not_supported": "Email change coming soon"
},
"settings": {
"title": "Settings",
"account_section": "Account",
"prefs_section": "Preferences",
"danger_section": "Danger Zone",
"edit_profile": "Edit profile",
"devices": "Devices",
"devices_desc": "Manage registered devices",
"subscription": "Subscription",
"subscription_desc": "Plan & upgrade path",
"subscription_plan_free": "Free",
"subscription_plan_pro": "Pro",
"subscription_plan_legend": "Legend",
"subscription_sheet_title": "Your subscription",
"subscription_sheet_body": "Manage your subscription at rebreak.org — upgrade, downgrade or cancel there.",
"subscription_sheet_cta": "Go to rebreak.org/account",
"plan_free": "Free",
"push_notifications": "Push notifications",
"streak_reminders": "Streak reminders",
"language": "Language",
"language_desc": "German / English / French / Arabic",
"language_current": "English",
"upgrade_cta": "Upgrade to Pro — €29/year",
"delete_account": "Delete account",
"delete_desc": "All data will be permanently deleted.",
"sign_out": "Sign out",
"coming_soon_title": "Coming soon",
"coming_soon_desc": "Settings will be wired up in Phase 3. Currently skeleton only.",
"soon_badge": "Soon",
"skeleton_footer": "Settings skeleton — see ops/UI_MIGRATION_PLAN.md",
"section_profile": "Profile",
"profile_edit": "Nickname & avatar",
"profile_edit_desc": "Nickname, avatar image, personal data",
"profile_avatar": "Choose avatar",
"profile_avatar_desc": "Preset library or your own photo",
"section_theme": "Theme & language",
"theme": "Theme",
"theme_desc": "Light / Dark / System",
"section_notifications": "Notifications",
"notifications_push": "Push notifications",
"notifications_push_desc": "Toggle individual categories",
"notifications_streak": "Streak reminders",
"notifications_streak_desc": "Daily nudges to stay on track",
"section_devices": "Devices & subscription",
"section_lyra": "Lyra (Legend)",
"lyra_voice": "Lyra voice",
"lyra_voice_desc": "Voice picker — Legend-plan exclusive",
"lyra_voice_only_legend": "Legend plan only",
"theme_picker_title": "Choose theme",
"theme_system": "System",
"theme_light": "Light",
"theme_dark": "Dark",
"language_picker_title": "Choose language",
"language_de": "Deutsch",
"language_en": "English",
"language_fr": "Français",
"language_ar": "العربية",
"lyra_voice_default": "Default",
"lyra_voice_1": "Voice 1",
"lyra_voice_2": "Voice 2",
"lyra_voice_picker_title": "Choose Lyra voice",
"lyra_voice_sarah": "Sarah (warm)",
"lyra_voice_aria": "Aria (calm)",
"lyra_voice_charlotte": "Charlotte (clear)",
"lyra_voice_alice": "Alice (neutral)",
"lyra_voice_bill": "Bill (deep)",
"section_debug": "Debug",
"debug_llm": "LLM provider",
"debug_llm_desc": "Model & prompt tuning (DEV)",
"debug_tts": "TTS provider",
"debug_tts_desc": "Cartesia / ElevenLabs / Gemini (DEV)",
"debug_plan": "Override plan (DEV)",
"debug_plan_desc": "POST /api/dev/set-plan — staging only",
"debug_realtime": "Realtime connection (DEV)",
"debug_realtime_desc": "Connection state, channels, event log",
"devices_page_title": "Registered devices",
"devices_slots": "Device slots",
"devices_slots_desc": "Your %{plan} plan allows this many simultaneous devices.",
"devices_this_device": "This device",
"devices_since": "since",
"devices_just_now": "just active",
"devices_mins_ago": "%{count}m ago",
"devices_hours_ago": "%{count}h ago",
"devices_days_ago": "%{count}d ago",
"devices_empty": "No devices registered",
"devices_hint": "Devices you remove will re-register on next sign-in. This device cannot be removed while you are signed in.",
"devices_remove_title": "Remove device",
"devices_remove_desc": "The device slot will be freed. It can re-register on next sign-in.",
"devices_remove_confirm": "Remove",
"section_security": "Security",
"app_lock": "App lock",
"app_lock_desc": "Unlock with Face ID, Touch ID or passcode when opening",
"app_lock_unavailable": "Not available on this device",
"app_lock_desc_android": "Unlock with fingerprint, face unlock or PIN when opening",
"notifications_push_sublabel": "Reminders, Lyra messages, streak updates",
"notifications_streak_time": "Reminder time",
"notifications_streak_time_desc": "When should the daily reminder appear?",
"notifications_streak_time_picker_title": "Choose reminder time",
"notifications_streak_time_picker_desc": "Select hour and minute for your daily streak reminder.",
"notifications_hour": "Hour",
"notifications_minute": "Minute",
"section_help": "Help & Support",
"help_faq": "FAQ",
"help_faq_desc": "Common questions about the app",
"help_contact": "Contact",
"help_contact_desc": "Write to us — we reply within 2448h",
"help_about": "About Rebreak",
"help_about_desc": "Mission, privacy, DiGA path",
"help_crisis": "Crisis help",
"help_crisis_desc": "External counselling & emergency numbers",
"rtl_restart_title": "Restart required",
"rtl_restart_body": "Please close the app and reopen it to apply the new text direction."
},
"device_limit": {
"title": "Device limit reached",
"subtitle": "%{count} of %{max} device slots used (%{plan}) — remove a device to continue",
"hint": "Removed devices can re-register on next sign-in.",
"remove_cta": "Remove device",
"this_device": "This device"
},
"urge": {
"title": "SOS — Breathing exercise",
"step_dashboard": "Start",
"step_emotion": "Emotion",
"step_breathing": "Breathing",
"step_games": "Lyra games",
"step_result": "Reflection",
"step_done": "Done",
"feel_urge": "Feeling a strong urge right now?",
"feel_urge_desc": "We'll guide you through a short reset, step by step.",
"yes_urge": "Yes, I need help",
"just_play": "Just play",
"this_week": "This week",
"total_urges": "Urges",
"overcome_count": "Overcome",
"breathing_exercises": "Breathing sessions",
"having_urge": "You're not alone.",
"how_feeling": "How are you feeling right now?",
"emotion_stress": "Stress",
"emotion_sadness": "Sadness",
"emotion_anger": "Anger",
"emotion_empty": "Emptiness",
"emotion_boredom": "Boredom",
"emotion_other": "Other",
"lets_breathe": "Let's breathe for a minute",
"breathing_desc": "Just 3 rounds. Your mind usually feels calmer afterwards.",
"round": "Round %{current} / %{total}",
"round_simple": "Round %{current} / %{total}",
"intro": "Deep breathing helps overcome the urge.",
"inhale": "Inhale",
"hold": "Hold",
"exhale": "Exhale",
"start": "Start exercise",
"start_exercise": "Start breathing",
"skip": "Skip",
"game_offer_title": "Lyra games",
"game_offer_text": "Pick a short game. 2-3 minutes are often enough to break the urge.",
"just_play_lyra": "Need a quick focus reset? Pick a game.",
"game_memory": "Memory",
"game_tictactoe": "Tic-Tac-Toe",
"game_snake": "Snake",
"game_tetris": "Tetris",
"game_memory_desc": "Find pairs and regain focus",
"game_tictactoe_desc": "Quick duel for clear decisions",
"game_snake_desc": "Rhythm over rumination",
"game_tetris_desc": "Organize patterns, calm your mind",
"skip_games": "Skip games",
"back": "Back",
"open_lyra": "Open with Lyra",
"game_start_title": "Start game",
"game_start_desc": "%{game} will be started with Lyra.",
"how_overcome": "How did it go afterwards?",
"answer_helps": "Your answer helps you spot patterns and get stronger.",
"i_overcame": "I overcame the urge",
"i_gave_in": "I gave in",
"overcame_msg": "Strong. Every resisted urge rewires your brain.",
"gave_in_msg": "No judgment. Honesty is the start of the next win.",
"save": "Save",
"done_title": "Well done!",
"done_desc": "You completed the breathing exercise. Your nervous system has calmed down.",
"done_back": "Back",
"well_done": "Great job",
"chin_up": "Keep your head up",
"overcame_result": "You broke the urge loop. Stay close to what helps you.",
"gave_in_result": "A setback is not the end. Breathe and restart.",
"back_to_dashboard": "Back to dashboard"
},
"notifications": {
"title": "Notifications",
"empty_title": "No notifications",
"empty_subtitle": "You're all caught up.",
"mark_all_read": "Mark all as read",
"liked_post": "liked your post",
"commented_post": "commented on your post",
"voted_domain": "voted on your domain",
"domain_accepted": "is now in the global blocklist",
"domain_accepted_sub": "Tap to open your blocklist",
"domain_rejected": "was rejected and removed from your list",
"new_follower": "started following you",
"generic": "sent you a notification",
"just_now": "just now",
"min_ago": "%{n} min ago",
"hours_ago": "%{n} h ago",
"days_ago": "%{n} d ago"
},
"chat": {
"title": "Chat",
"dms": "Direct Messages",
"rooms": "Groups",
"groups": "Groups",
"direct": "Direct",
"no_chats": "No chats yet",
"no_rooms": "No groups yet",
"start_dm": "Start new DM",
"placeholder": "Write a message…",
"you": "You: ",
"just_now": "just now",
"loading": "Loading…",
"send_failed": "Failed to send message.",
"create_group": "Create group",
"create": "Create",
"room_name": "Group name",
"room_description": "Description (optional)",
"public_room": "Public group",
"join_mode": "Join mode",
"join_mode_approval": "With approval",
"join_mode_invite": "Invite only",
"join": "Join",
"join_pending": "Join request pending…",
"join_required": "Join the group to participate.",
"members": "Members",
"settings": "Settings",
"info": "Info",
"leave_room": "Leave group",
"reply": "Reply",
"reply_to": "Replying to",
"like": "Like",
"unlike": "Unlike",
"copy": "Copy",
"image_attachment": "Image",
"file_attachment": "File",
"upload_failed": "Upload failed",
"member_count": "%{n} members",
"member_count_online": "%{n} members · %{online} online",
"pending_request": "Join requests",
"approve": "Approve",
"reject": "Reject",
"avatar_updated": "Group photo updated",
"send": "Send",
"search_placeholder": "Search conversations…"
},
"community": {
"compose_placeholder": "What's on your mind?",
"compose_default_user": "You",
"compose_photo_perm_title": "Photo access",
"compose_photo_perm_desc": "Please allow access to your photos in iOS Settings.",
"image": "Image",
"cancel": "Cancel",
"share": "Share",
"no_posts": "Be the first to share something",
"cat_all": "All",
"cat_games": "Games",
"cat_domain": "Domain Votes",
"cat_lyra": "Lyra",
"cat_rebreak": "ReBreak",
"like": "Like",
"comment": "Comment",
"comments_title": "Comments",
"comments_empty": "No comments yet be the first!",
"reply": "Reply",
"reply_to": "Replying to",
"send": "Send",
"comment_placeholder": "Write a comment…",
"filter": "Filter",
"published": "Published",
"post_failed": "Failed to publish post.",
"anonymous_label": "Anonymous",
"tier_starter": "Starter",
"tier_pro": "Pro",
"tier_legend": "Legend",
"bot_admin": "Admin",
"bot_ai": "AI",
"reposted_suffix": "reposted",
"domain_proposal_label": "Blocklist proposal",
"domain_added_to_blocklist": "Added to global blocklist",
"domain_added": "In the global blocklist",
"domain_proposed": "Proposed for inclusion",
"domain_vote_own": "You can't vote on your own proposal.",
"vote_yes": "Yes",
"vote_no": "No",
"vote_rejected": "Rejected",
"vote_in_review": "Under review",
"voted_thanks": "Thanks for your vote!",
"recent_posts": "RECENT POSTS"
},
"streak": {
"label_one": "day",
"label_other": "days",
"label_suffix": "clean"
},
"profile": {
"edit_title": "Edit profile",
"edit_save": "Save",
"edit_photo_cta": "Choose your own photo",
"edit_photo_perm_title": "Photo access",
"edit_photo_perm_desc": "Please allow access to your photos in iOS Settings.",
"edit_preset_label": "Choose avatar",
"edit_nickname_label": "Nickname",
"edit_nickname_hint": "Visible to other members — max. 32 characters.",
"crop_title": "Choose crop",
"crop_confirm": "Apply",
"crop_hint": "Move and zoom the image to select the desired crop area.",
"crop_reset": "Reset",
"streak_section_label": "STREAK",
"streak_days_protected": "days protected",
"streak_since": "since %{date}",
"streak_longest": "Longest streak: %{days} days",
"cooldown": {
"heading": "COOLDOWN HISTORY",
"window_label": "last %{weeks}W",
"week_label": "W%{n}",
"none": "No cooldowns in the last 8 weeks",
"count_one": "1 cooldown over %{weeks} weeks",
"count_other": "%{n} cooldowns over %{weeks} weeks",
"avg_last": "Ø 1 every %{avg} weeks · last %{date}",
"patterns": {
"toggle_label": "More insights",
"hour_heading": "When do you start cooldowns?",
"day_heading": "Which days?",
"reason_heading": "Common terms",
"cancel_rate": "Cooldowns cancelled: %{pct}%",
"not_enough": "Not enough patterns yet",
"weekday_mon": "Mon",
"weekday_tue": "Tue",
"weekday_wed": "Wed",
"weekday_thu": "Thu",
"weekday_fri": "Fri",
"weekday_sat": "Sat",
"weekday_sun": "Sun",
"hour_morning": "Morning",
"hour_afternoon": "Afternoon",
"hour_evening": "Evening",
"hour_night": "Night"
}
},
"privacy_section_title": "Privacy",
"show_online_status": "Show online status",
"show_online_status_hint": "Only people you follow see when you're online"
},
"demographics": {
"employment_status_employed": "employed",
"employment_status_self_employed": "self-employed",
"employment_status_in_training": "in education / training",
"employment_status_unemployed": "unemployed / job-seeking",
"employment_status_retired": "retired / pensioned",
"employment_status_homemaking": "homemaking / care work",
"employment_status_other": "other",
"industry_it_software": "IT / Software",
"industry_healthcare": "Healthcare / Medicine",
"industry_education": "Education / Teaching",
"industry_hospitality": "Hospitality / Hotels",
"industry_construction": "Construction / Trades",
"industry_banking_finance": "Banking / Finance",
"industry_sales_marketing": "Sales / Marketing",
"industry_public_admin": "Public administration",
"industry_logistics": "Logistics / Transport",
"industry_creative_media": "Creative / Media",
"industry_other": "other",
"tenure_less_1y": "less than 1 year",
"tenure_1_3y": "1-3 years",
"tenure_3_5y": "3-5 years",
"tenure_5_10y": "5-10 years",
"tenure_more_10y": "more than 10 years",
"shift_work_yes": "Yes",
"shift_work_no": "No",
"shift_work_unknown": "n/a",
"section_beruf": "EMPLOYMENT",
"section_wohnort": "LOCATION",
"field_status": "Status",
"field_shift_work": "Shift work",
"field_industry": "Industry",
"field_job_tenure": "In job since",
"field_bundesland": "State",
"field_city": "City",
"picker_employment_status": "Employment status",
"picker_industry": "Industry",
"picker_job_tenure": "Time in current job",
"picker_bundesland": "State"
},
"devices": {
"section_title_this": "This device",
"section_title_others": "Other protected devices",
"subtitle_legend": "Protection across up to 3 devices — whichever one you use.",
"subtitle_free": "Current device protected.",
"add_mac": "Add Mac",
"add_windows": "Add Windows (coming soon)",
"upgrade_cta": "Upgrade to Legend",
"status_pending": "Ready to install",
"status_active": "Active",
"status_revoked": "Removed",
"label_placeholder": "e.g. MacBook Pro",
"label_default": "MacBook Pro",
"label_question": "What should this Mac be called?",
"prepare_profile": "Prepare profile",
"lyra_intro": "Three steps. I'll walk you through each one — if something goes wrong, tap Help.",
"step_1_title": "Download the profile",
"step_1_body": "Tap the button below. If you're on your Mac, it opens the profile file directly. On your phone? You'll get a QR code — scan it on your Mac to get the file.",
"step_2_title": "Install the profile",
"step_2_body": "On the Mac: double-click the downloaded file → System Settings opens → \"Install Profile\" → enter your Mac password → done.",
"step_3_title": "Use a standard account",
"step_3_body": "Important: use a standard account on the Mac, not admin. If you ever have an urgent need to remove the profile, you'll need the admin password — ideally held by someone you trust (partner, friend). That's the real protection layer.",
"step_4_title": "Done",
"step_4_body": "Once installed, just open any website in a browser or app on your Mac — we'll detect it automatically and activate protection.",
"download_button": "Download profile to Mac",
"confirm_installed": "I've installed it ✓",
"waiting_install": "Waiting for profile installation on your Mac…",
"waiting_hint": "As soon as you open a website in a browser or app, we'll automatically activate your device.",
"activated_toast": "Mac connected!",
"need_help": "I need help",
"success_title": "Mac protected!",
"success_body": "You can add more devices whenever you like.",
"remove_warning_title": "Remove profile manually",
"remove_warning_body": "We can't delete the profile remotely. On the Mac: System Settings → Profiles → ReBreak → Remove (admin password required).",
"add_device": "Add new device",
"progress_label": "%{count} of %{max} devices",
"progress_at_limit": "Maximum reached",
"add_windows_enabled": "Add Windows PC",
"windows_label_question": "What should this Windows PC be called?",
"windows_label_default": "Windows PC",
"windows_label_placeholder": "e.g. Gaming PC",
"windows_lyra_intro": "Five quick steps. I'll walk you through each one — if something goes wrong, tap Help.",
"windows_step_1_title": "Download the file",
"windows_step_1_body": "Tap the button below — on your Windows PC. The .reg file will be downloaded.",
"windows_step_2_title": "Run the .reg file",
"windows_step_2_body": "Double-click the downloaded .reg file. Windows will ask: 'Do you want to add keys to the registry?' → Click 'Yes'.",
"windows_step_3_title": "Confirm UAC prompt",
"windows_step_3_body": "If a blue UAC prompt appears: click 'Yes'. This is the admin confirmation.",
"windows_step_4_title": "Activate DNS",
"windows_step_4_body": "Open Windows Settings → Network & Internet → click your Wi-Fi → DNS server assignment → 'Edit' → choose 'Encrypted only (DNS over HTTPS)' → select 'rebreak-...' from the list.",
"windows_step_5_title": "Done",
"windows_step_5_body": "Once you've saved the DNS selection, tap 'I've installed it' and I'll count your PC as a protected device.",
"windows_download_button": "Download file to Windows PC",
"windows_success_title": "Windows PC protected!",
"windows_success_body": "You can add more devices whenever you like.",
"windows_remove_warning_body": "We can't delete the registry entry remotely. On the PC: Regedit → HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\DoHSvc → remove the key.",
"bound_badge": "Bound",
"release_request_title": "Release device?",
"release_request_body": "The device will be released after 24 hours. You can cancel the release at any time before that.",
"release_request_confirm": "Start release",
"release_countdown": "Release in %{remaining}",
"release_cancel": "Cancel release",
"release_cancel_confirm": "Really cancel the release?",
"release_cancel_body": "The device will remain bound to your account.",
"release_cancel_cta": "Yes, cancel"
},
"plan": {
"change": {
"header_upgrade": "You're switching to {{to}}.",
"header_downgrade": "You're switching from {{from}} to {{to}}.",
"section_gains": "What you're getting",
"section_keeps": "What stays the same",
"section_changes": "What changes",
"downgrade_reassurance": "Your core protection keeps running.",
"downgrade_no_delete_title": "Nothing gets deleted.",
"downgrade_no_delete_body": "Everything paused comes back immediately when you upgrade again.",
"downgrade_recovery_note": "If this change weakens your protection at a moment when you feel uncertain — write to Lyra. Or write to us. We'll find a solution.",
"billing_hint": "Manage your subscription at rebreak.org.",
"grace_days_one": "expires in {{count}} day",
"grace_days_other": "expires in {{count}} days",
"cta_confirm_upgrade": "Let's go",
"cta_confirm_downgrade": "Got it, continue",
"cta_stay": "Stay on {{plan}}",
"action_keep": "stays",
"action_limited": "will be limited",
"action_paused": "will be paused",
"action_grace": "Grace period",
"action_degraded": "protection ending",
"action_unlocked": "unlocked"
}
},
"plan_limit": {
"mail_banner_title": "Mailboxes over plan limit",
"mail_banner_body_one": "You have {{used}} mailbox, {{plan}} protects {{max}} — {{over}} is paused.",
"mail_banner_body_other": "You have {{used}} mailboxes, {{plan}} protects {{max}} — {{over}} are paused.",
"mail_account_paused": "Paused (plan downgrade)",
"mail_add_disabled_hint": "Remove a mailbox first or upgrade.",
"blocker_domain_over_limit": "You have {{used}} custom domains, {{plan}} allows {{max}} — all stay active, you can't add new ones until you're under {{max}}.",
"blocker_add_disabled_hint": "Remove a domain first or upgrade.",
"blocker_basic_protection": "Basic protection active — full protection against all known gambling sites: Pro/Legend.",
"device_degraded_title": "Protection expired",
"device_degraded_body": "The profile is still installed on the device. Remove it manually or get Legend back.",
"device_add_limit_hint": "All {{max}} device slots are used. Remove a device or upgrade.",
"device_add_limit_short": "Limit reached"
},
"gameOver": {
"title": "Game over",
"score": "Score",
"best": "Best",
"newBest": "New best",
"retry": "Play again",
"exit": "Exit",
"motivational_0": "You gave yourself a short break. That counts.",
"motivational_1": "Every minute of focus is a minute for you.",
"motivational_2": "Training your attention — that's exactly what you just did.",
"motivational_3": "Well played. And good that you're here.",
"motivational_4": "Small pauses, big impact.",
"lyra_title_record": "New record!",
"lyra_body_record": "You surpassed yourself. Impressive.",
"lyra_title_good": "Excellent!",
"lyra_body_good": "You were fully in the zone — the urge had no chance.",
"lyra_title_ok": "Keep going",
"lyra_body_ok": "Every round moves you forward. Stay with it.",
"lyra_title_low": "Next time",
"lyra_body_low": "Showing up already counts. You've got this.",
"rating_saved": "Rating saved",
"save_rating": "Save rating",
"feedback_placeholder": "What did you like or miss?",
"share_result": "Share to community",
"share_to_community": "Share your result",
"share_challenge": "Can you beat this?",
"share_loading": "Lyra is writing...",
"post_to_community": "Post",
"posted": "Posted to the community feed",
"post_error": "Posting failed, please try again",
"regen_suggestion": "New suggestion",
"regen_confirm_title": "Discard text?",
"regen_confirm_body": "Discard your current text and fetch a new suggestion?",
"regen_confirm_ok": "Discard"
},
"alert": {
"error_generic": "Something went wrong — please try again.",
"error_file_too_large": "The image is too large.",
"details_label": "Details",
"compress_error_title": "Could not process image"
},
"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_q2": "How does the blocker work?",
"faq_a2": "On iOS the blocker runs as a network content filter directly on your device — no traffic leaves your iPhone. Over 208,000 gambling domains are blocked locally. Disabling requires a 24-hour cooldown so you can resist impulses.",
"faq_q3": "How does the Mac DNS profile work?",
"faq_a3": "You download a configuration profile that activates a DNS-over-HTTPS filter on your Mac. Gambling domains are blocked system-wide — in Safari, Chrome, Firefox and all other apps. Removing the profile requires the admin password.",
"faq_q4": "Can I cancel my subscription?",
"faq_a4": "Yes. Manage your subscription at rebreak.org/account — cancel, downgrade or upgrade there. Your subscription runs until the end of the paid period.",
"faq_q5": "What happens to my data?",
"faq_a5": "Your data is stored exclusively on servers in Germany (Hetzner). We never sell data to third parties. Lyra chat histories remain private. The full privacy policy is at rebreak.org/datenschutz.",
"faq_q6": "How do I report bugs or give feedback?",
"faq_a6": "Write to us at hilfe@rebreak.org. We reply within 2448 hours on business days. For urgent technical issues please use the subject line 'Bug: ...'.",
"faq_q7": "What if I accidentally have a gambling domain in my custom list?",
"faq_a7": "Custom domains on your blocklist are permanent. If you added one by mistake, write to us — we can correct it manually. On the Pro plan, you can release domains to a community vote and recover the slot.",
"faq_q8": "What is DiGA?",
"faq_a8": "DiGA stands for Digitale Gesundheitsanwendung (Digital Health Application) — a certification by Germany's Federal Institute for Drugs and Medical Devices (BfArM). DiGA-certified apps can be prescribed by doctors and reimbursed by health insurers. Rebreak is on the DiGA certification path.",
"contact_title": "Contact",
"contact_email_label": "Support by email",
"contact_email_desc": "Write to us for technical help, feedback or privacy requests. We reply within 2448 hours on business days.",
"contact_email_cta": "Send email",
"contact_address_label": "Address",
"contact_address_block": "Rebreak\nhilfe@rebreak.org\n\nGermany",
"about_title": "About Rebreak",
"about_headline": "Rebreak",
"about_body": "Rebreak is a German app for gambling addiction — we're building the first DiGA-certified companion for problematic gambling.\n\nOur approach combines technical protection (blocker, mail filter, DNS profiles) with an AI coach based on cognitive behavioural therapy methods. Everything runs on German servers at Hetzner, fully GDPR-compliant.\n\nRebreak is not a substitute for professional therapy. We see ourselves as a complement — a 24/7 tool for moments when you're alone with the urge.",
"about_fact_diga": "DiGA certification path active",
"about_fact_servers": "Servers exclusively in Germany (Hetzner)",
"about_fact_privacy": "GDPR-compliant — no data shared with third parties",
"crisis_title": "Crisis help",
"crisis_section_gambling": "Gambling counselling",
"crisis_section_general": "General crisis support",
"crisis_bzga_label": "BZgA Gambling Helpline",
"crisis_bzga_sublabel": "0800 1 372 700 · free · 24/7",
"crisis_checkdein_label": "check-dein-spiel.de",
"crisis_checkdein_sublabel": "Online counselling & self-test",
"crisis_anonyme_label": "Anonyme Spieler",
"crisis_anonyme_sublabel": "www.anonyme-spieler.org · self-help groups",
"crisis_seelsorge_label": "Telefonseelsorge",
"crisis_seelsorge_sublabel": "0800 111 0 111 · free · 24/7",
"crisis_emergency_label": "Acute suicidal thoughts?",
"crisis_emergency_desc": "If you or someone nearby is in immediate danger, call emergency services immediately.",
"crisis_emergency_cta": "112 — Emergency",
"crisis_disclaimer": "These services are independent of Rebreak. We refer you onward but do not offer counselling ourselves."
},
"presence": {
"online": "Online",
"just_now": "just now",
"minutes_ago": "%{minutes} min ago",
"hours_ago": "%{hours} h ago",
"days_ago": "%{days} d ago"
}
}