clusev/lang/en/settings.php

100 lines
4.0 KiB
PHP

<?php
// Settings (profile + security) page strings (R16). Shared buttons live in common.php.
return [
// Identity header
'account' => 'Account',
'role_admin' => 'Administrator',
// Section nav tabs
'tab_profile' => 'Profile',
'tab_security' => 'Security',
'tab_users' => 'Users',
'tab_sessions' => 'Sessions',
'tab_email' => 'Email',
// Profile panel
'profile_title' => 'Profile',
'profile_subtitle' => 'Name and email',
'name' => 'Name',
'email' => 'Email',
// Password panel
'password_title' => 'Password',
'password_subtitle' => 'At least 10 characters',
'current_password' => 'Current password',
'new_password' => 'New password',
'repeat_password' => 'Repeat',
'change_password' => 'Change password',
// Two-factor panel
'twofa_title' => 'Two-factor authentication',
'twofa_subtitle' => 'TOTP (authenticator app)',
'twofa_status_on' => '2FA is active',
'twofa_status_off' => '2FA is not set up',
'twofa_hint_on' => 'Login requires a TOTP code.',
'twofa_hint_off' => 'Recommended — protects login with a second factor.',
'twofa_setup' => 'Set up',
'twofa_recommended' => '2FA is optional but recommended — secure your account with an authenticator or a security key.',
'twofa_remove_totp' => 'Remove authenticator',
// Account recovery (last-resort) note — admin-only, post-login
'recovery_note' => 'Account recovery (last resort): sign in to the host over SSH and run `clusev reset-admin`.',
// Notifications
'profile_saved' => 'Profile saved.',
'password_changed' => 'Password changed.',
// Disable-2FA confirmation modal
'disable_2fa_heading' => 'Remove authenticator',
'disable_2fa_body' => 'Remove the authenticator (TOTP) as a factor? Security keys are kept.',
'disable_2fa_notify' => 'Authenticator removed.',
// Stub tabs (filled in 0.9.0)
// Page title
'title' => 'Settings — Clusev',
// IP/CIDR whitelist validation
'lp_whitelist_invalid' => ':value is not a valid IP/CIDR.',
// Login protection tab
'tab_login_protection' => 'Login protection',
'lp_title' => 'Login protection',
'lp_subtitle' => 'Blocks IP addresses after too many failed sign-in attempts.',
'lp_enabled' => 'Enabled',
'lp_maxretry' => 'Max. attempts',
'lp_findtime' => 'Time window (min.)',
'lp_bantime' => 'Ban duration (min.)',
'lp_whitelist' => 'Whitelist (IP/CIDR, one per line)',
'lp_whitelist_hint' => 'These addresses are never counted or blocked. Loopback is always exempt.',
'lp_current_ip' => 'Your current IP',
'lp_current_ip_exempt' => 'exempt',
'lp_whitelist_my_ip' => 'Add my IP to the whitelist',
'lp_save' => 'Save',
'lp_saved' => 'Login protection saved.',
'lp_bans_title' => 'Active blocks',
'lp_ban_reason' => 'Reason',
'lp_ban_attempts' => 'Attempts',
'lp_ban_until' => 'blocked until :time',
'lp_no_bans' => 'No active blocks.',
'lp_unban' => 'Unblock',
'lp_unban_heading' => 'Unblock IP?',
'lp_unban_body' => ':ip will be allowed again.',
'lp_unban_notify' => 'IP unblocked.',
'lp_unban_all' => 'Unblock all',
'lp_unban_all_heading' => 'Clear all blocks?',
'lp_unban_all_body' => 'All currently blocked IP addresses will be allowed again.',
'lp_unban_all_notify' => 'All blocks cleared.',
'lp_lockout_note' => 'Logged-in operators are never blocked and can unblock their own IP here. Emergency: clusev unban <ip> on the host shell.',
// Threat-detection status indicator (env-driven, no toggle). Deliberately neutral naming
// (no "honeypot"/"decoy"/"deception", env-var name omitted) — the deception layer must not
// reveal itself in the UI.
'hp_title' => 'Threat detection',
'hp_subtitle' => 'Automatic ban of scanning attackers',
'hp_note' => 'Automatically bans scanning IP addresses on sight. Controlled via an environment variable. Hits appear under Threats.',
'hp_on' => 'Enabled',
'hp_off' => 'Disabled',
];