{
    "page.title": "Fail2ban UI Dashboard",
    "nav.dashboard": "Dashboard",
    "nav.filter_debug": "Filter Debug",
    "nav.settings": "Settings",
    "restart_banner.message": "Fail2ban configuration changed. To apply the changes, please ",
    "restart_banner.button": "Restart Service",
    "restart_banner.restart_success": "Fail2ban service restarted and passed health check",
    "restart_banner.reload_success": "Fail2ban configuration reloaded successfully (no systemd service restart)",
    "dashboard.title": "Dashboard",
    "dashboard.overview": "Overview active Jails and Blocks",
    "dashboard.overview_hint": "Use the search to filter banned IPs and click a jail to edit its configuration.",
    "dashboard.search_label": "Search Banned IPs",
    "dashboard.search_placeholder": "Enter IP address to search",
    "dashboard.external_ip": "Your ext. IP:",
    "dashboard.manage_servers": "Manage Servers",
    "dashboard.no_servers_title": "No Fail2ban servers configured",
    "dashboard.no_servers_body": "Add a server to start monitoring and controlling Fail2ban instances.",
    "dashboard.loading_summary": "Loading summary data…",
    "dashboard.errors.summary_failed": "Failed to load summary from server.",
    "dashboard.no_enabled_servers_title": "No active connectors",
    "dashboard.no_enabled_servers_body": "Enable the local connector or register a remote Fail2ban server to see live data.",
    "dashboard.cards.active_jails": "Active Jails",
    "dashboard.cards.total_banned": "Total Banned IPs",
    "dashboard.cards.new_last_hour": "New Last Hour",
    "dashboard.cards.total_logged": "Stored Ban Events",
    "dashboard.cards.recurring_week": "Recurring IPs (7 days)",
    "dashboard.cards.recurring_hint": "Watch repeated offenders detected in the last seven days.",
    "dashboard.table.jail_name": "Jail Name",
    "dashboard.table.total_banned": "Total Banned",
    "dashboard.table.new_last_hour": "New Last Hour",
    "dashboard.table.banned_ips": "Banned IPs (Unban)",
    "dashboard.no_jails": "No jails found.",
    "dashboard.overview_detail": "The lists must not expanded to search for an IP.",
    "dashboard.table.time": "Time",
    "dashboard.table.jail": "Jail",
    "dashboard.table.ip": "IP",
    "dashboard.table.log_line": "Log Line",
    "dashboard.no_banned_ips": "No banned IPs",
    "dashboard.unban": "Unban",
    "dashboard.manual_block.title": "Manual Block IP",
    "dashboard.manual_block.subtitle": "Manually block an IP address in a specific jail.",
    "dashboard.manual_block.expand_hint": "Click to expand and block an IP address",
    "dashboard.manual_block.jail_label": "Select Jail",
    "dashboard.manual_block.jail_placeholder": "Choose a jail...",
    "dashboard.manual_block.ip_label": "IP Address",
    "dashboard.manual_block.ip_placeholder": "e.g., 88.76.21.123",
    "dashboard.manual_block.button": "Block IP",
    "dashboard.manual_block.confirm": "Block IP {ip} in jail {jail}?",
    "dashboard.manual_block.success": "IP blocked successfully",
    "dashboard.manual_block.error": "Error blocking IP",
    "dashboard.manual_block.jail_required": "Please select a jail",
    "dashboard.manual_block.ip_required": "Please enter an IP address",
    "dashboard.manual_block.invalid_ip": "Please enter a valid IP address",
    "dashboard.banned.show_more": "Show more",
    "dashboard.banned.show_less": "Hide extra",
    "logs.overview.title": "Internal Log Overview",
    "logs.overview.subtitle": "Events stored by Fail2ban-UI across all connectors.",
    "logs.overview.refresh": "Refresh data",
    "logs.overview.total_events": "Total stored events",
    "logs.overview.per_server": "Events per server",
    "logs.overview.recent_events_title": "Recent stored events",
    "logs.overview.recent_empty": "No stored events found.",
    "logs.overview.empty": "No ban events recorded yet.",
    "logs.overview.open_insights": "Open insights",
    "logs.overview.total_today": "Today",
    "logs.overview.total_week": "Last 7 days",
    "logs.overview.per_server_empty": "No per-server data available yet.",
    "logs.overview.recent_filtered_empty": "No stored events match the current filters.",
    "logs.overview.recent_count_label": "Events shown",
    "logs.overview.country_unknown": "Unknown",
    "logs.overview.last_seen": "Last seen",
    "logs.table.server": "Server",
    "logs.table.count": "Count",
    "logs.table.jail": "Jail",
    "logs.table.ip": "IP",
    "logs.table.time": "Time",
    "logs.table.country": "Country",
    "logs.table.actions": "Actions",
    "logs.actions.whois": "Whois",
    "logs.actions.logs": "Logs",
    "logs.search.label": "Search events",
    "logs.search.placeholder": "Search IP, jail or server",
    "logs.search.country_label": "Country",
    "logs.search.country_all": "All countries",
    "logs.search.country_unknown": "Unknown",
    "logs.badge.recurring": "Recurring",
    "logs.modal.whois_title": "Whois Information",
    "logs.modal.logs_title": "Logs",
    "logs.modal.jail": "Jail",
    "logs.modal.insights_title": "Ban Insights",
    "logs.modal.insights_description": "Country distribution and recurring offenders.",
    "logs.modal.insights_countries": "Bans by country",
    "logs.modal.insights_countries_empty": "No bans recorded for this period.",
    "logs.modal.insights_countries_hint": "Top origins for the selected time range.",
    "logs.modal.insights_recurring_hint": "IP addresses repeatedly triggering Fail2ban.",
    "logs.modal.total_overall_note": "Lifetime bans recorded",
    "logs.modal.total_today_note": "Last 24 hours",
    "logs.modal.total_week_note": "Weekly activity",
    "logs.modal.insights_recurring": "Recurring IPs",
    "logs.modal.insights_recurring_empty": "No recurring IPs detected.",
    "filter_debug.title": "Filter Debug",
    "filter_debug.select_filter": "Select a Filter",
    "filter_debug.filter_content": "Filter Content",
    "filter_debug.filter_content_hint": "Edit the filter regex below for testing. Changes are temporary and not saved.",
    "filter_debug.filter_content_hint_readonly": "Filter content is shown read-only. Click 'Edit' to modify for testing. Changes are temporary and not saved.",
    "filter_debug.edit_filter": "Edit",
    "filter_debug.cancel_edit": "Cancel",
    "filter_debug.log_lines": "Log Lines",
    "filter_debug.log_lines_placeholder": "Enter log lines here...",
    "filter_debug.test_filter": "Test Filter",
    "filter_debug.test_results_title": "Test Results",
    "filter_debug.no_matches": "No matches found.",
    "settings.title": "Settings",
    "settings.general": "General Settings",
    "settings.language": "Language",
    "settings.server_port": "Server Port",
    "settings.server_port_placeholder": "e.g., 8080",
    "settings.port_env_set": "Port is set via PORT environment variable:",
    "settings.port_env_hint": "To change the port via Web UI, remove the PORT environment variable and restart the container.",
    "settings.port_restart_hint": "⚠️ Port changes require a container restart to take effect.",
    "settings.enable_debug": "Enable Debug Log",
    "settings.enable_console": "Enable Console Output",
    "settings.console.title": "Console Output",
    "settings.console.clear": "Clear",
    "settings.console.save_hint": "Please save your settings first before logs will be displayed here.",
    "settings.alert": "Alert Settings",
    "settings.callback_url": "Fail2ban Callback URL",
    "settings.callback_url_placeholder": "http://127.0.0.1:8080",
    "settings.callback_url_hint": "This URL is used by all Fail2Ban instances to send ban alerts back to Fail2Ban UI. For local deployments, use the same port as Fail2Ban UI (e.g., http://127.0.0.1:8080). For reverse proxy setups, use your TLS-encrypted endpoint (e.g., https://fail2ban.example.com).",
    "settings.callback_secret": "Fail2ban Callback URL Secret",
    "settings.callback_secret_placeholder": "Auto-generated 42-character secret",
    "settings.callback_secret.description": "This secret is used to authenticate ban API requests. It is automatically included to the fail2ban action configuration.",
    "settings.destination_email": "Destination Email (Alerts Receiver)",
    "settings.destination_email_placeholder": "alerts@swissmakers.ch",
    "settings.alert_countries": "Alert Countries",
    "settings.alert_countries_description": "Choose the countries for which you want to receive email alerts when a block is triggered.",
    "settings.email_alerts": "Email Alert Preferences",
    "settings.email_alerts_for_bans": "Enable email alerts for bans",
    "settings.email_alerts_for_unbans": "Enable email alerts for unbans",
    "settings.smtp": "SMTP Configuration",
    "settings.smtp_host": "SMTP Host",
    "settings.smtp_host_placeholder": "e.g., smtp.gmail.com",
    "settings.smtp_port": "SMTP Port",
    "settings.smtp_username": "SMTP Username",
    "settings.smtp_username_placeholder": "e.g., user@example.com",
    "settings.smtp_password": "SMTP Password",
    "settings.smtp_password_placeholder": "Enter SMTP Password",
    "settings.smtp_sender": "Sender Email",
    "settings.smtp_sender_placeholder": "noreply@swissmakers.ch",
    "settings.smtp_tls": "Use TLS (Recommended)",
    "settings.send_test_email": "Send Test Email",
    "settings.fail2ban": "Global Default Fail2Ban Configurations",
    "settings.fail2ban.description": "These settings will be applied to all enabled Fail2Ban servers and stored in their jail.local [DEFAULT] section.",
    "settings.enable_bantime_increment": "Enable Bantime Increment",
    "settings.enable_bantime_increment.description": "If set to true, the bantime will be calculated using the formula: bantime = findtime * (number of failures / maxretry) * (1 + bantime.rndtime).",
    "settings.default_jail_enable": "Enable Jails by Default",
    "settings.default_jail_enable.description": "If enabled, all jails will be enabled by default. When disabled, jails must be explicitly enabled.",
    "settings.default_bantime": "Default Bantime",
    "settings.default_bantime.description": "The number of seconds that a host is banned. Time format: 1m = 1 minutes, 1h = 1 hour, 1d = 1 day, 1w = 1 week, 1mo = 1 month, 1y = 1 year.",
    "settings.default_bantime_placeholder": "e.g., 48h",
    "settings.banaction": "Banaction",
    "settings.banaction.description": "Default banning action (e.g. iptables-multiport, iptables-allports, firewallcmd-multiport, etc). It is used to define action_* variables.",
    "settings.banaction_allports": "Banaction Allports",
    "settings.banaction_allports.description": "Banning action for all ports (e.g. iptables-allports, firewallcmd-allports, etc). Used when a jail needs to ban all ports instead of specific ones.",
    "settings.default_findtime": "Default Findtime",
    "settings.default_findtime.description": "A host is banned if it has generated 'maxretry' failures during the last 'findtime' seconds. Time format: 1m = 1 minutes, 1h = 1 hours, 1d = 1 days, 1w = 1 week, 1mo = 1 month, 1y = 1 year.",
    "settings.default_findtime_placeholder": "e.g., 30m",
    "settings.default_max_retry": "Default Max Retry",
    "settings.default_max_retry.description": "Number of failures before a host gets banned.",
    "settings.default_max_retry_placeholder": "Enter maximum retries",
    "settings.geoip_provider": "GeoIP Provider",
    "settings.geoip_provider.description": "Choose the GeoIP lookup provider. MaxMind requires a local database file, while Built-in uses a free online API.",
    "settings.geoip_provider.maxmind": "MaxMind (Local Database)",
    "settings.geoip_provider.builtin": "Built-in (ip-api.com)",
    "settings.geoip_database_path": "GeoIP Database Path",
    "settings.geoip_database_path.description": "Path to the MaxMind GeoLite2-Country database file.",
    "settings.max_log_lines": "Maximum Log Lines",
    "settings.max_log_lines.description": "Maximum number of log lines to include in ban notifications. Most relevant lines are selected automatically.",
    "settings.ignore_ips": "Ignore IPs",
    "settings.ignore_ips.description": "Space separated list of IP addresses, CIDR masks or DNS hosts. Fail2ban will not ban a host which matches an address in this list.",
    "settings.ignore_ips_placeholder": "IPs to ignore, separated by spaces",
    "settings.advanced.title": "Advanced Actions for Recurring Offenders",
    "settings.advanced.description": "Automatically synchronize recurring offenders to an external firewall or blocklist.",
    "settings.advanced.refresh_log": "Refresh Log",
    "settings.advanced.test_button": "Manually Block / Test",
    "settings.advanced.enable": "Enable automatic permanent blocking",
    "settings.advanced.threshold": "Threshold before permanent block",
    "settings.advanced.threshold_hint": "Once an IP reaches this number of bans it will be forwarded to the integration.",
    "settings.advanced.integration": "Integration",
    "settings.advanced.integration_none": "Select integration",
    "settings.advanced.integration_hint": "Choose the firewall or appliance where permanent bans should be created.",
    "settings.advanced.mikrotik.note": "Provide SSH access to your Mikrotik router and the address list that should contain blocked IPs.",
    "settings.advanced.mikrotik.host": "Host",
    "settings.advanced.mikrotik.port": "Port",
    "settings.advanced.mikrotik.username": "SSH Username",
    "settings.advanced.mikrotik.password": "SSH Password",
    "settings.advanced.mikrotik.key": "SSH Key Path (optional)",
    "settings.advanced.mikrotik.list": "Address List Name",
    "settings.advanced.pfsense.note": "Requires the pfSense REST API package. Enter the API key and alias to manage.",
    "settings.advanced.pfsense.install_link": "Install REST API Package",
    "settings.advanced.pfsense.api_key_setup": "Setup API Key",
    "settings.advanced.pfsense.base_url": "Base URL",
    "settings.advanced.pfsense.token": "API Key",
    "settings.advanced.pfsense.token_hint": "Generate in System > REST API > Keys in pfSense webConfigurator",
    "settings.advanced.pfsense.alias": "Alias Name",
    "settings.advanced.pfsense.skip_tls": "Skip TLS verification (self-signed)",
    "settings.advanced.opnsense.note": "Enter the OPNsense API credentials and alias to manage.",
    "settings.advanced.opnsense.api_docs": "API Documentation",
    "settings.advanced.opnsense.api_key_setup": "Setup API Key",
    "settings.advanced.opnsense.base_url": "Base URL",
    "settings.advanced.opnsense.key": "API Key",
    "settings.advanced.opnsense.key_hint": "Generate in System > Access > Users > API Keys",
    "settings.advanced.opnsense.secret": "API Secret",
    "settings.advanced.opnsense.secret_hint": "Generate together with API key",
    "settings.advanced.opnsense.alias": "Alias Name",
    "settings.advanced.opnsense.skip_tls": "Skip TLS verification (self-signed)",
    "settings.advanced.log_title": "Permanent Block Log",
    "settings.advanced.log_empty": "No permanent blocks recorded yet.",
    "settings.advanced.log_ip": "IP",
    "settings.advanced.log_integration": "Integration",
    "settings.advanced.log_status": "Status",
    "settings.advanced.log_message": "Message",
    "settings.advanced.log_server": "Server",
    "settings.advanced.log_updated": "Updated",
    "settings.advanced.log_actions": "Actions",
    "settings.advanced.unblock_btn": "Remove",
    "settings.advanced.test_title": "Manually Block / Test",
    "settings.advanced.test_ip": "IP address",
    "settings.advanced.test_server": "Optional server",
    "settings.advanced.test_server_none": "Use global integration settings",
    "settings.advanced.test_block": "Block IP",
    "settings.advanced.test_unblock": "Remove IP",
    "settings.save": "Save",
    "modal.filter_config": "Filter / Jail Configuration:",
    "modal.filter_config_edit": "Edit Filter / Jail",
    "modal.filter_config_label": "Filter Configuration",
    "modal.filter_config_hint": "If left empty, an empty filter file will be created.",
    "modal.filter_name": "Filter Name",
    "modal.filter_name_hint": "Only alphanumeric characters, dashes, and underscores are allowed.",
    "modal.jail_config": "Jail Configuration",
    "modal.jail_config_hint": "Jail configuration will be auto-populated when you select a filter.",
    "modal.jail_config_label": "Jail Configuration",
    "modal.jail_filter": "Filter (optional)",
    "modal.jail_filter_hint": "Selecting a filter will auto-populate the jail configuration.",
    "modal.jail_name": "Jail Name",
    "modal.jail_name_hint": "Only alphanumeric characters, dashes, and underscores are allowed.",
    "modal.test_logpath": "Test Logpath",
    "modal.local_server_logpath_note": "ℹ️ Note:",
    "modal.local_server_logpath_text_prefix": "For a local fail2ban server (e.g. installed on container host system or in a container on same host), log files must also be mounted to the fail2ban-ui container (e.g.,",
    "modal.local_server_logpath_text_suffix": ") this is required so that the fail2ban-ui can verify logpath variables or paths when updating jails.",
    "modal.create": "Create",
    "modal.create_filter": "Create New Filter",
    "modal.create_filter_title": "Create New Filter",
    "modal.create_jail": "Create New Jail",
    "modal.create_jail_title": "Create New Jail",
    "modal.cancel": "Cancel",
    "modal.save": "Save",
    "modal.close": "Close",
    "loading": "Loading...",
    "dashboard.manage_jails": "Manage Jails",
    "modal.manage_jails_title": "Manage Jails",
    "servers.selector.label": "Active Server",
    "servers.selector.empty": "No servers configured",
    "servers.selector.none": "No server configured. Please add a Fail2ban server.",
    "servers.modal.title": "Manage Fail2ban Servers",
    "servers.modal.description": "Register remote Fail2ban instances and choose how the UI connects to them.",
    "servers.modal.list_title": "Registered Servers",
    "servers.modal.list_empty": "No servers configured yet. Add your first Fail2ban server using the form on the right.",
    "servers.modal.form_title": "Add or Update Server",
    "servers.form.name": "Display Name",
    "servers.form.name_placeholder": "My Fail2ban server",
    "servers.form.type": "Connection Type",
    "servers.type.local": "Local (same host)",
    "servers.type.ssh": "SSH",
    "servers.type.agent": "API Agent",
    "servers.form.host": "Hostname / IP",
    "servers.form.host_placeholder": "fail2ban.example.com",
    "servers.form.port": "Port",
    "servers.form.port_placeholder": "22",
    "servers.form.socket_path": "Fail2ban Socket Path",
    "servers.form.socket_path_placeholder": "/var/run/fail2ban/fail2ban.sock",
    "servers.form.log_path": "Fail2ban Log Path",
    "servers.form.log_path_placeholder": "/var/log/fail2ban.log",
    "servers.form.hostname": "Server Hostname",
    "servers.form.hostname_placeholder": "optional",
    "servers.form.ssh_user": "SSH User",
    "servers.form.ssh_user_placeholder": "sa_fail2ban",
    "servers.form.ssh_key": "SSH Private Key Path",
    "servers.form.ssh_key_placeholder": "/config/.ssh/id_rsa",
    "servers.form.ssh_key_help": "Place your SSH private key in the /config/.ssh/ directory (mounted config volume). The key file must have permissions 600 (chmod 600). Example: /config/.ssh/id_rsa",
    "servers.form.agent_url": "Agent URL",
    "servers.form.agent_url_placeholder": "https://host:9443",
    "servers.form.agent_secret": "Agent Secret",
    "servers.form.agent_secret_placeholder": "shared secret token",
    "servers.form.tags": "Tags",
    "servers.form.tags_placeholder": "comma,separated,tags",
    "servers.form.set_default": "Set as default server",
    "servers.form.enabled": "Enable connector",
    "servers.form.submit": "Save Server",
    "servers.form.reset": "Reset",
    "servers.form.new_server": "New Server",
    "servers.form.success": "Server saved successfully.",
    "servers.badge.default": "Default",
    "servers.badge.enabled": "Enabled",
    "servers.badge.disabled": "Disabled",
    "servers.badge.restart_needed": "Restart required",
    "servers.actions.edit": "Edit",
    "servers.actions.set_default": "Set default",
    "servers.actions.enable": "Enable",
    "servers.actions.disable": "Disable",
    "servers.actions.test": "Test connection",
    "servers.actions.test_success": "Connection successful",
    "servers.actions.test_failure": "Connection failed",
    "servers.actions.restart": "Restart Fail2ban",
    "servers.actions.reload": "Reload Fail2ban",
    "servers.actions.reload_tooltip": "For local connectors, only a configuration reload is possible via the socket connection. The container cannot restart the Fail2ban service using systemctl. To perform a full restart, run 'systemctl restart fail2ban' directly on the host system.",
    "servers.actions.delete": "Delete",
    "servers.actions.delete_confirm": "Delete this server entry?",
    "servers.form.select_key": "Select Private Key",
    "servers.form.select_key_placeholder": "Manual entry",
    "servers.form.no_keys": "No SSH keys found; enter path manually",
    "filter_debug.not_available": "Filter debug is only available for local connectors.",
    "filter_debug.local_missing": "The local Fail2ban filter directory was not found on this host.",
    "email.ban.title": "Security alert: Fail2Ban blocked a new IP-address",
    "email.ban.intro": "Fail2Ban-UI detected a bad request or repeated authentication failures and automatically blocked the source-IP. Review the metadata and log excerpts below.",
    "email.ban.subject.banned": "Banned",
    "email.ban.subject.from": "from",
    "email.ban.details.banned_ip": "Banned IP",
    "email.ban.details.jail": "Jail",
    "email.ban.details.hostname": "Hostname",
    "email.ban.details.failed_attempts": "Failed attempts",
    "email.ban.details.country": "Country",
    "email.ban.details.timestamp": "Timestamp",
    "email.ban.whois_title": "WHOIS footprint",
    "email.ban.logs_title": "Relevant log excerpts",
    "email.test.title": "Email delivery test",
    "email.test.intro": "This message confirms that your SMTP configuration is working correctly and can deliver HTML formatted emails.",
    "email.test.subject": "Test Email from Fail2Ban UI",
    "email.test.details.recipient": "Recipient",
    "email.test.details.smtp_host": "SMTP host",
    "email.test.details.triggered_at": "Triggered at",
    "email.test.whois_no_data": "No WHOIS lookup is executed for test emails.",
    "email.test.sample_logs": "2025-01-01T12:00:00Z Sample log entry of Fail2ban-UI.",
    "email.whois.no_data": "WHOIS data was not captured for this event.",
    "email.logs.no_data": "No log entries were captured for this block.",
    "email.footer.text": "This message was generated automatically by Fail2Ban-UI",
    "email.unban.title": "IP Address Unbanned",
    "email.unban.intro": "An IP address has been unbanned from a Fail2Ban jail.",
    "email.unban.subject.unbanned": "Unbanned",
    "email.unban.subject.from": "from",
    "email.unban.details.unbanned_ip": "Unbanned IP",
    "email.unban.details.jail": "Jail",
    "email.unban.details.hostname": "Hostname",
    "email.unban.details.country": "Country",
    "email.unban.details.timestamp": "Timestamp",
    "lotr.email.title": "A Dark Servant Has Been Banished",
    "lotr.email.intro": "The guardians of Middle-earth have detected a threat and banished it from the realm.",
    "lotr.email.you_shall_not_pass": "YOU SHALL NOT PASS",
    "lotr.email.footer": "May the servers be protected. One ban to rule them all.",
    "lotr.email.details.dark_servant_location": "The Dark Servant's Location",
    "lotr.email.details.realm_protection": "The Realm of Protection",
    "lotr.email.details.origins": "Origins from the",
    "lotr.email.details.banished_at": "Banished at the",
    "lotr.email.unban.title": "The held prisoner has been released",
    "lotr.email.unban.intro": "The guardians of Middle-earth have restored access to the realm.",
    "lotr.email.unban.details.restored_ip": "Restored IP",
    "lotr.banished": "Banished from the realm",
    "lotr.realms_protected": "Realms Protected",
    "lotr.threats_banished": "Threats Banished",
    "toast.ban.title": "New block occurred",
    "toast.ban.action": "banned in",
    "toast.unban.title": "IP unblocked",
    "toast.unban.action": "unblocked from",
    "auth.login_title": "Sign in to Fail2ban UI",
    "auth.login_description": "Please authenticate to access the management interface",
    "auth.login_button": "Sign in with OIDC",
    "auth.logging_in": "Redirecting to login...",
    "auth.logout": "Logout",
    "auth.user_info": "User Information",
    "auth.session_expired": "Your session has expired. Please log in again.",
    "auth.login_required": "Authentication required"
  }
  