chahinebrini e8ea00568e feat(native): devices page — 2-line entries, single UIMenu CTA, dynamic counter, slimmer buttons
- MobileDeviceRow: collapse to 2 lines (name+badge / lastSeen · seit date)
- ProtectedDeviceRow: collapse to 2 lines (name+badge / seit date or degraded hint)
- Both rows now use alignItems:center for visual parity
- Replace dual Mac/Windows buttons with single UIMenu "+ neues Gerät hinzufügen"
- MenuView disabled (no-op TouchableOpacity) when at device limit
- Dynamic counter below subtitle: "X von 3 Geräten · noch Y frei" / "Maximum erreicht"
- paddingVertical 16→12 on all primary CTAs in devices.tsx, AddMacSheet, AddWindowsSheet
- New i18n keys: devices.add_device, devices.counter_some, devices.counter_limit (DE/EN/FR)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 23:10:09 +02:00

992 lines
48 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",
"firstName": "First name",
"lastName": "Last name",
"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"
},
"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": "Block domain",
"add_sheet_label": "Domain",
"add_sheet_placeholder": "e.g. bet365.com",
"add_sheet_invalid": "Please enter a valid domain (e.g. example.com)",
"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.",
"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",
"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 back on",
"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.",
"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_open_settings": "Open Settings",
"app_lock_coming_soon_badge": "Soon",
"app_lock_coming_soon_desc": "App lock coming soon — filter protection is already active."
},
"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",
"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",
"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"
},
"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",
"pending_request": "Join requests",
"approve": "Approve",
"reject": "Reject",
"avatar_updated": "Group photo updated",
"send": "Send"
},
"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!"
},
"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"
}
}
},
"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",
"counter_some": "{{count}} of {{max}} devices · {{remaining}} more available",
"counter_limit": "Maximum reached — {{max}} of {{max}} devices",
"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."
},
"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"
},
"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"
}
}