<?php
return [
// Generic
'errors.generic' => 'An unexpected error occurred',
// Auth
'errors.auth.authentication_required' => 'Authentication required',
'errors.auth.invalid_csrf_token' => 'Invalid CSRF token',
'errors.auth.missing_credentials' => 'Username and password required',
'errors.auth.invalid_credentials' => 'Invalid credentials',
'errors.auth.invalid_api_key' => 'Invalid API key',
'errors.auth.gateway_token_missing_fields' => 'userid and token are required',
'errors.auth.invalid_or_expired_gateway_token' => 'Invalid or expired token',
'errors.auth.username_or_email_required' => 'Username or email is required',
'errors.auth.token_required' => 'Token is required',
'errors.auth.invalid_or_expired_token' => 'Invalid or expired token',
'errors.auth.token_and_password_required' => 'Token and new password are required',
'errors.auth.weak_password' => 'Password must be at least 8 characters long',
'errors.auth.reset_failed' => 'Failed to reset password',
'errors.auth.forbidden' => 'Forbidden',
// Registration
'errors.register.invalid_submission' => 'Invalid submission',
'errors.register.too_fast' => 'Please take your time filling out the form.',
'errors.register.session_expired' => 'Session expired. Please refresh the page and try again.',
'errors.register.rate_limited' => 'Too many registration attempts. Please try again later.',
'errors.register.required_fields' => 'Username, password, and real name are required',
'errors.register.invalid_username_format' => 'Username must be 3-20 characters, letters, numbers, and underscores only',
'errors.register.invalid_username_format_spaces' => 'Username must be 3-20 characters, letters, numbers, underscores, and single spaces between words only',
'errors.register.restricted_name' => 'This username or real name is not allowed',
'errors.register.weak_password' => 'Password must be at least 8 characters long',
'errors.register.user_exists' => 'A user with this username or name already exists. Please try logging in or contact the sysop for assistance.',
'errors.register.email_required' => 'Email address is required',
'errors.register.reason_required' => 'Reason for joining is required',
'errors.register.failed' => 'Registration failed. Please try again later.',
// Reminder
'errors.reminder.username_required' => 'Username is required',
'errors.reminder.user_not_found_or_logged_in' => 'User not found or already logged in',
'errors.reminder.send_failed' => 'Failed to send reminder. Please try again later.',
// Settings
'errors.settings.invalid_input' => 'Invalid input',
'errors.settings.update_failed' => 'Failed to update settings',
'errors.settings.exception' => 'Failed to update settings',
'errors.dashboard.invalid_layout' => 'Invalid layout data.',
// Messages
'errors.messages.share_create_failed' => 'Failed to create share link',
'errors.messages.share_lookup_failed' => 'Failed to load share links',
'errors.messages.share_revoke_failed' => 'Failed to revoke share link',
'errors.messages.not_found' => 'Message not found',
'errors.admin.ai_settings.save_failed' => 'Failed to save AI settings',
'errors.admin.ai_settings.share_summary_disabled' => 'AI share summaries are not enabled',
'errors.admin.ai_settings.share_summary_failed' => 'Failed to generate summary',
'errors.messages.netmail.not_found' => 'Message not found',
'errors.messages.netmail.delete_failed' => 'Failed to delete message',
'errors.messages.netmail.bulk_delete.invalid_input' => 'A non-empty message ID list is required',
'errors.messages.netmail.bulk_read.invalid_input' => 'A non-empty message ID list is required',
'errors.messages.netmail.bulk_read.failed' => 'Failed to mark messages as read',
'errors.messages.echomail.bulk_read.invalid_input' => 'A non-empty message ID list is required',
'errors.messages.echomail.bulk_read.failed' => 'Failed to mark messages as read',
'errors.messages.echomail.bulk_delete.admin_required' => 'Admin privileges are required',
'errors.messages.echomail.bulk_delete.invalid_input' => 'A non-empty message ID list is required',
'errors.messages.echomail.bulk_delete.user_not_found' => 'User not found',
'errors.messages.echomail.stats.subscription_required' => 'Subscription required for this echo area',
'errors.messages.echomail.not_found' => 'Message not found',
'errors.messages.echomail.edit.admin_required' => 'Admin privileges are required',
'errors.messages.echomail.edit.invalid_art_format' => 'Invalid art format value',
'errors.messages.body_too_large' => 'Message body exceeds the 16 KB FidoNet limit',
'errors.messages.echomail.edit.nothing_to_update' => 'No fields to update',
'errors.messages.echomail.edit.save_failed' => 'Failed to save changes',
'errors.messages.echomail.ignore.invalid_input' => 'Sender name is required',
'errors.messages.echomail.ignore.invalid_rule' => 'Ignore rule not found',
'errors.messages.echomail.ignore.save_failed' => 'Failed to save ignore rule',
'errors.messages.echomail.ignore.message_not_available' => 'Unable to load the selected message',
'errors.messages.echomail.save_ad.admin_required' => 'Admin privileges are required',
'errors.messages.echomail.save_ad.not_ansi' => 'Only ANSI echomail messages can be saved to the ad library',
'errors.messages.echomail.save_ad.failed' => 'Failed to save message to the ad library',
'errors.messages.netmail.edit.forbidden' => 'You do not have permission to edit this message',
'errors.messages.netmail.attachment.no_file' => 'No attachment uploaded',
'errors.messages.netmail.attachment.upload_error' => 'Attachment upload failed',
'errors.messages.netmail.attachment.too_large' => 'Attachment exceeds maximum allowed size',
'errors.messages.netmail.attachment.store_failed' => 'Failed to store uploaded attachment',
'errors.messages.send.invalid_type' => 'Invalid message type',
'errors.messages.send.failed' => 'Failed to send message',
'errors.messages.send.exception' => 'Failed to send message',
// Notify
'errors.notify.user_id_missing' => 'Unable to resolve user session',
'errors.notify.invalid_state' => 'Invalid notification state payload',
'errors.notify.invalid_target' => 'Invalid notification target',
'errors.realtime.invalid_payload' => 'Invalid realtime command payload',
'errors.realtime.unknown_command' => 'Unknown realtime command',
// Polls
'errors.polls.option_required' => 'A poll option is required',
'errors.polls.not_found' => 'Poll not found',
'errors.polls.invalid_option' => 'Invalid poll option',
'errors.polls.vote_failed' => 'Failed to record vote',
'errors.polls.insufficient_credits' => 'Failed to deduct credits. You may have insufficient balance.',
'errors.polls.question_required' => 'Poll question is required',
'errors.polls.question_length_invalid' => 'Poll question must be between 10 and 500 characters',
'errors.polls.options_count_invalid' => 'Poll must include between 2 and 10 options',
'errors.polls.option_empty' => 'Poll options cannot be empty',
'errors.polls.option_length_invalid' => 'Poll options must be 200 characters or fewer',
'errors.polls.options_duplicate' => 'Poll options must be unique',
'errors.polls.create_failed' => 'Failed to create poll',
// Shoutbox
'errors.shoutbox.message_required' => 'Message is required',
'errors.shoutbox.message_too_long' => 'Message cannot exceed 280 characters',
// Chat
'errors.chat.feature_disabled' => 'Chat is disabled',
'errors.chat.invalid_message_query' => 'Invalid chat message query',
'errors.chat.invalid_send_target' => 'Invalid chat target',
'errors.chat.message_length_invalid' => 'Message must be between 1 and 1000 characters',
'errors.chat.room_not_found' => 'Chat room not found',
'errors.chat.user_banned' => 'You are banned from this room',
'errors.chat.recipient_not_found' => 'Recipient not found',
'errors.chat.send_blocked' => 'Message could not be sent',
'errors.chat.admin_required' => 'Admin privileges are required',
'errors.chat.invalid_moderation_request' => 'Invalid moderation request',
'errors.chat.user_not_found' => 'User not found',
// Echo Areas
'errors.echoareas.admin_required' => 'Admin privileges are required',
'errors.echoareas.not_found' => 'Echo area not found',
'errors.echoareas.invalid_posting_name_policy' => 'Invalid posting name policy',
'errors.echoareas.invalid_art_format_hint' => 'Invalid art format hint',
'errors.echoareas.tag_description_required' => 'Tag and description are required',
'errors.echoareas.invalid_tag_format' => 'Invalid tag format',
'errors.echoareas.invalid_color_format' => 'Invalid color format',
'errors.echoareas.unknown_domain' => 'Select a configured network domain',
'errors.echoareas.tag_already_exists' => 'An echo area with that tag already exists',
'errors.echoareas.create_failed' => 'Failed to create echo area',
'errors.echoareas.not_found_or_unchanged' => 'Echo area not found or no changes made',
'errors.echoareas.update_failed' => 'Failed to update echo area',
'errors.echoareas.delete_blocked_has_messages' => 'Cannot delete echo area with existing messages',
'errors.echoareas.delete_failed' => 'Failed to delete echo area',
// File Areas
'errors.fileareas.not_found' => 'File area not found',
'errors.fileareas.create_failed' => 'Failed to create file area',
'errors.fileareas.update_failed' => 'Failed to update file area',
'errors.fileareas.delete_failed' => 'Failed to delete file area',
// Files
'errors.files.feature_disabled' => 'File areas feature is disabled',
'errors.files.area_id_required' => 'File area ID is required',
'errors.files.access_denied' => 'Access denied to this file area',
'errors.files.not_found' => 'File not found',
'errors.files.share_not_found_or_forbidden' => 'Share link not found or not permitted',
'errors.files.delete_failed' => 'Failed to delete file',
'errors.files.rehatch_local' => 'Cannot rehatch a file in a local-only area',
'errors.files.rehatch_private' => 'Cannot rehatch a file in a private area',
'errors.files.rehatch_failed' => 'Rehatch failed',
'errors.files.scan_forbidden' => 'Admin access required to scan files',
'errors.files.scan_disabled' => 'Virus scanning is disabled',
'errors.files.scan_failed' => 'Virus scan failed',
'errors.files.invalid_scan_status' => 'Invalid scan status value',
'errors.files.rename_filename_required' => 'New filename is required',
'errors.files.rename_forbidden' => 'You do not have permission to rename this file',
'errors.files.rename_conflict' => 'A file with that name already exists in this area',
'errors.files.rename_failed' => 'Failed to rename file',
'errors.files.short_description_required' => 'Short description is required',
'errors.files.edit_forbidden' => 'You do not have permission to edit this file',
'errors.files.edit_failed' => 'Failed to update file',
'errors.files.move_forbidden' => 'Only administrators can move files between areas',
'errors.files.move_conflict' => 'A file with that name already exists in the target area',
'errors.files.move_failed' => 'Failed to move file',
'errors.files.upload.no_file' => 'No file uploaded',
'errors.files.upload.area_id_required' => 'File area ID is required',
'errors.files.upload.short_description_required' => 'Short description is required',
'errors.files.upload.area_not_found' => 'File area not found',
'errors.files.upload.read_only' => 'This file area is read-only',
'errors.files.upload.admin_only' => 'Only administrators can upload files to this area',
'errors.files.upload.virus_detected' => 'File rejected: virus detected',
'errors.files.upload.insufficient_credits' => 'Insufficient credits to upload this file',
'errors.files.upload.failed' => 'Failed to upload file',
'errors.files.link.invalid_url' => 'A valid URL is required',
'errors.files.link.file_name_required' => 'File name is required',
'errors.files.link.add_failed' => 'Failed to add link',
'errors.admin.file_approvals.load_failed' => 'Failed to load pending file approvals',
'errors.admin.file_approvals.not_found' => 'Pending file not found',
'errors.admin.file_approvals.not_pending' => 'File is not awaiting approval',
'errors.admin.file_approvals.approve_failed' => 'Failed to approve file upload',
'errors.admin.file_approvals.reject_failed' => 'Failed to reject file upload',
'errors.files.download.insufficient_credits' => 'Insufficient credits to download this file',
'errors.files.comments_not_enabled' => 'Comments are not enabled for this file area',
'errors.files.comments_forbidden' => 'You do not have permission to comment here',
'errors.files.comment_body_required' => 'Comment body is required',
'errors.files.comment_post_failed' => 'Failed to post comment',
'errors.files.invalid_reply_target' => 'Invalid reply target',
'errors.fileareas.comment_area_failed' => 'Failed to create or link comment area',
// Admin Users
'errors.admin.users.not_found' => 'User not found',
'errors.admin.users.create_failed' => 'Failed to create user',
'errors.admin.users.update_failed' => 'Failed to update user',
'errors.admin.users.delete_failed' => 'Failed to delete user',
// Admin Polls
'errors.admin.polls.question_required' => 'Question is required',
'errors.admin.polls.options_required' => 'At least two options are required',
'errors.admin.polls.not_found' => 'Poll not found',
'errors.admin.polls.create_failed' => 'Failed to create poll',
'errors.admin.polls.update_failed' => 'Failed to update poll',
'errors.admin.polls.delete_failed' => 'Failed to delete poll',
// Message Drafts
'errors.messages.drafts.invalid_input' => 'Invalid draft payload',
'errors.messages.drafts.user_id_missing' => 'Unable to resolve user session',
'errors.messages.drafts.save_failed' => 'Failed to save draft',
'errors.messages.drafts.list_failed' => 'Failed to load drafts',
'errors.messages.drafts.not_found' => 'Draft not found',
'errors.messages.drafts.get_failed' => 'Failed to load draft',
'errors.messages.drafts.delete_failed' => 'Failed to delete draft',
'errors.messages.templates.not_licensed' => 'Message templates require a registered license',
'errors.messages.templates.not_found' => 'Template not found',
'errors.messages.templates.name_required' => 'Template name is required',
'errors.messages.templates.name_too_long' => 'Template name must be 100 characters or less',
'errors.economy.not_licensed' => 'Economy viewer requires a registered license',
'errors.referrals.not_licensed' => 'Referral analytics require a registered license',
'errors.messages.netmail.get_failed' => 'Failed to load message',
'errors.messages.echomail.get_failed' => 'Failed to load message',
// Message Search / Read State
'errors.messages.search.query_too_short' => 'Search query must be at least 2 characters',
'errors.messages.read.user_id_missing' => 'Unable to resolve user session',
'errors.messages.read.invalid_type' => 'Invalid message type',
'errors.messages.read.mark_failed' => 'Failed to mark message as read',
'errors.messages.save.user_id_missing' => 'Unable to resolve user session',
'errors.messages.save.invalid_type' => 'Invalid message type',
'errors.messages.save.failed' => 'Failed to save message',
'errors.messages.unsave.user_id_missing' => 'Unable to resolve user session',
'errors.messages.unsave.invalid_type' => 'Invalid message type',
'errors.messages.unsave.failed' => 'Failed to unsave message',
'errors.messages.unsave.not_saved' => 'Message was not saved or already removed',
// User Profile / Stats / Transactions
'errors.user.profile.current_password_incorrect' => 'Current password is incorrect',
'errors.user.profile.new_password_too_short' => 'New password must be at least 6 characters long',
'errors.user.profile.update_failed' => 'Failed to update profile',
'errors.user.stats.admin_required' => 'Admin privileges are required',
'errors.user.stats.user_not_found' => 'User not found',
'errors.user.transactions.admin_required' => 'Admin privileges are required',
'errors.user.transactions.user_not_found' => 'User not found',
'errors.user.transactions.list_failed' => 'Failed to load transactions',
'errors.user.activity.admin_required' => 'Admin privileges are required',
'errors.user.activity.user_not_found' => 'User not found',
'errors.user.activity.list_failed' => 'Failed to load activity log',
// Credits
'errors.credits.feature_disabled' => 'Credits feature is disabled',
'errors.credits.send.invalid_amount' => 'Amount must be between 1 and 200',
'errors.credits.send.self_transfer_forbidden' => 'You cannot send credits to yourself',
'errors.credits.send.recipient_not_found' => 'Recipient not found',
'errors.credits.send.insufficient_balance' => 'Insufficient balance',
'errors.credits.send.debit_failed' => 'Failed to debit sender account',
'errors.credits.send.credit_failed' => 'Failed to credit recipient account',
'errors.credits.send.failed' => 'Credit transfer failed',
// User Sessions / Activity
'errors.user.sessions.revoke_failed' => 'Failed to revoke session',
'errors.user.sessions.revoke_all_failed' => 'Failed to revoke sessions',
'errors.user.activity.session_missing' => 'Active session is required',
// BinkP
'errors.binkp.admin_required' => 'Admin access required',
'errors.binkp.status_failed' => 'Failed to load BinkP status',
'errors.binkp.poll_failed' => 'Failed to poll BinkP uplink',
'errors.binkp.poll_all_failed' => 'Failed to poll all BinkP uplinks',
'errors.binkp.process_packets_failed' => 'Failed to process packets',
'errors.binkp.uplinks_list_failed' => 'Failed to load BinkP uplinks',
'errors.binkp.files_inbound_failed' => 'Failed to load inbound BinkP files',
'errors.binkp.files_outbound_failed' => 'Failed to load outbound BinkP files',
'errors.binkp.process_outbound_failed' => 'Failed to process outbound queue',
'errors.binkp.connection_test_failed' => 'Failed to test BinkP connection',
'errors.binkp.logs.failed' => 'Failed to load BinkP logs',
'errors.binkp.logs.search_failed' => 'Log search failed',
'errors.binkp.logs.search_query_too_short' => 'Search query must be at least 2 characters',
'errors.binkp.kept_packets.failed' => 'Failed to load kept packets',
'errors.binkp.kept_packets.invalid_type' => 'type must be inbound or outbound',
'errors.binkp.kept_packets.license_required' => 'Viewing packet files requires registration',
'errors.binkp.kept_packets.inspect_failed' => 'Failed to inspect packet',
'errors.binkp.queue.inspect_failed' => 'Failed to inspect queue packet',
'errors.binkp.uplink.address_hostname_required' => 'Address and hostname are required',
'errors.binkp.uplink.address_required' => 'Uplink address is required',
'errors.messages.forward_email.email_required' => 'An email address is required',
'errors.messages.forward_email.invalid_type' => 'Invalid message type',
'errors.messages.forward_email.mail_disabled' => 'Email sending is not configured',
'errors.messages.forward_email.failed' => 'Failed to forward message by email',
'errors.binkp.uplink.poll_failed' => 'Failed to poll BinkP uplink',
'errors.binkp.uplink.poll_all_failed' => 'Failed to poll all BinkP uplinks',
'errors.binkp.uplink.add_failed' => 'Failed to add BinkP uplink',
'errors.binkp.uplink.update_failed' => 'Failed to update BinkP uplink',
'errors.binkp.uplink.remove_failed' => 'Failed to remove BinkP uplink',
'errors.binkp.files.inbound_failed' => 'Failed to load inbound BinkP files',
'errors.binkp.files.outbound_failed' => 'Failed to load outbound BinkP files',
'errors.binkp.files.process_inbound_failed' => 'Failed to process inbound BinkP queue',
'errors.binkp.files.process_outbound_failed' => 'Failed to process outbound BinkP queue',
'errors.binkp.files.delete_outbound_failed' => 'Failed to delete outbound BinkP file',
'errors.binkp.files.retry_error_failed' => 'Failed to retry inbound error file',
'errors.binkp.config.invalid_section' => 'Invalid BinkP configuration section',
'errors.binkp.config.update_failed' => 'Failed to update BinkP configuration',
// Admin Pending Users
'errors.admin.pending_users.admin_required' => 'Admin privileges are required',
'errors.admin.pending_users.list_failed' => 'Failed to load pending users',
'errors.admin.pending_users.not_found' => 'Pending user not found',
'errors.admin.pending_users.get_failed' => 'Failed to load pending user',
'errors.admin.pending_users.approve_failed' => 'Failed to approve pending user',
'errors.admin.pending_users.reject_failed' => 'Failed to reject pending user',
// Admin Users (extended)
'errors.admin.users.admin_required' => 'Admin privileges are required',
'errors.admin.users.list_failed' => 'Failed to load users',
'errors.admin.users.get_failed' => 'Failed to load user',
'errors.admin.users.real_name_required' => 'Real name is required',
'errors.admin.users.password_too_short' => 'Password must be at least 8 characters long',
'errors.admin.users.update_status_failed' => 'Failed to update user status',
'errors.admin.users.create_required_fields' => 'Username, real name, and password are required',
'errors.admin.users.invalid_username_format' => 'Invalid username format',
'errors.admin.users.restricted_name' => 'This username or real name is not allowed',
'errors.admin.users.username_exists' => 'Username already exists',
'errors.admin.users.cleanup_failed' => 'Failed to clean up registrations',
'errors.admin.users.reminder_not_allowed' => 'User is not eligible for reminder',
'errors.admin.users.reminder_send_failed' => 'Failed to send reminder',
'errors.admin.users.need_reminders_failed' => 'Failed to load reminder candidates',
'errors.admin.users.credits_disabled' => 'The credits system is disabled',
'errors.admin.users.invalid_credit_amount' => 'Credit amount must be a positive integer',
'errors.admin.users.credit_note_required' => 'A note is required for manual credit grants',
'errors.admin.users.credit_grant_failed' => 'Failed to grant credits',
// Admin Debug
'errors.admin.debug_failed' => 'Failed to load admin debug information',
// Admin BBS / Appearance / Shell
'errors.admin.bbs_settings.load_failed' => 'Failed to load BBS settings',
'errors.admin.bbs_settings.invalid_payload' => 'Invalid configuration payload',
'errors.admin.bbs_settings.invalid_credits_config' => 'Invalid credits configuration',
'errors.admin.bbs_settings.save_failed' => 'Failed to save BBS settings',
'errors.admin.appearance.load_failed' => 'Failed to load appearance settings',
'errors.admin.appearance.branding.invalid_accent_color' => 'Invalid accent color format',
'errors.admin.appearance.branding.footer_too_long' => 'Footer text must be 500 characters or less',
'errors.admin.appearance.branding.save_failed' => 'Failed to save branding settings',
'errors.admin.appearance.content.save_failed' => 'Failed to save content settings',
'errors.admin.appearance.navigation.save_failed' => 'Failed to save navigation settings',
'errors.admin.appearance.seo.save_failed' => 'Failed to save SEO settings',
'errors.admin.appearance.shell.save_failed' => 'Failed to save shell settings',
'errors.admin.appearance.login.save_failed' => 'Failed to save login appearance settings',
'errors.admin.appearance.login.ansi_too_large' => 'Login ANSI content must be 200,000 characters or less',
'errors.admin.appearance.term_server.list_failed' => 'Failed to load terminal screens',
'errors.admin.appearance.term_server.load_failed' => 'Failed to load terminal screen',
'errors.admin.appearance.term_server.save_failed' => 'Failed to save terminal screen',
'errors.admin.appearance.term_server.upload.no_file' => 'No terminal screen file uploaded',
'errors.admin.appearance.term_server.upload.failed' => 'Failed to upload terminal screen',
'errors.admin.appearance.term_server.upload.file_too_large' => 'Terminal screen file exceeds size limit',
'errors.admin.appearance.term_server.delete.failed' => 'Failed to delete terminal screen',
'errors.admin.appearance.sixel.list_failed' => 'Failed to load sixel screens',
'errors.admin.appearance.sixel.upload.no_file' => 'No sixel file uploaded',
'errors.admin.appearance.sixel.upload.failed' => 'Failed to upload sixel screen',
'errors.admin.appearance.sixel.upload.file_too_large' => 'Sixel file exceeds size limit (5MB)',
'errors.admin.appearance.sixel.delete.failed' => 'Failed to delete sixel screen',
'errors.admin.appearance.term_border.invalid_style' => 'Invalid border style',
'errors.admin.appearance.term_border.save_failed' => 'Failed to save border style',
'errors.admin.appearance.term_menu_keys.invalid_key' => 'Menu keys must be a single letter or digit',
'errors.admin.appearance.term_menu_keys.duplicate_key' => 'Each menu key must be unique',
'errors.admin.appearance.term_menu_keys.quit_required' => 'A key must be assigned to Quit',
'errors.admin.appearance.term_menu_keys.save_failed' => 'Failed to save menu key settings',
'errors.admin.appearance.message_reader.save_failed' => 'Failed to save message reader settings',
'errors.admin.appearance.dashboard.save_failed' => 'Failed to save dashboard layout',
'errors.admin.appearance.markdown_preview.failed' => 'Failed to render markdown preview',
'errors.admin.appearance.splash.license_required' => 'A valid license is required to configure splash pages',
'errors.admin.appearance.splash.save_failed' => 'Failed to save splash settings',
'errors.admin.appearance.file_areas.save_failed' => 'Failed to save file areas settings',
'errors.admin.dashboard.ram_usage_unavailable' => 'RAM usage details are not available on this system.',
'errors.admin.shell_art.list_failed' => 'Failed to list shell art files',
'errors.admin.shell_art.upload.no_file' => 'No shell art file uploaded',
'errors.admin.shell_art.upload.upload_error' => 'Shell art upload failed',
'errors.admin.shell_art.upload.file_too_large' => 'Shell art file exceeds size limit',
'errors.admin.shell_art.upload.failed' => 'Failed to upload shell art',
'errors.admin.shell_art.delete.invalid_name' => 'Invalid shell art filename',
'errors.admin.shell_art.delete.failed' => 'Failed to delete shell art',
'errors.admin.taglines.load_failed' => 'Failed to load taglines',
'errors.admin.taglines.save_failed' => 'Failed to save taglines',
'errors.admin.mrc_settings.load_failed' => 'Failed to load MRC settings',
'errors.admin.mrc_settings.save_failed' => 'Failed to save MRC settings',
'errors.admin.mrc_settings.restart_failed' => 'Failed to restart MRC daemon',
'errors.admin.bbs_system.load_failed' => 'Failed to load system settings',
'errors.admin.bbs_system.save_failed' => 'Failed to save system settings',
'errors.admin.binkp_config.load_failed' => 'Failed to load BinkP configuration',
'errors.admin.binkp_config.save_failed' => 'Failed to save BinkP configuration',
'errors.admin.binkp_config.reload_failed' => 'Failed to reload BinkP configuration',
'errors.admin.dosdoors_config.load_failed' => 'Failed to load DOS doors configuration',
'errors.admin.dosdoors_config.save_failed' => 'Failed to save DOS doors configuration',
'errors.admin.native_doors.load_failed' => 'Failed to load native doors configuration',
'errors.admin.native_doors.save_failed' => 'Failed to save native doors configuration',
'errors.admin.native_doors.sync_failed' => 'Failed to sync native doors',
'errors.admin.webdoors_config.load_failed' => 'Failed to load webdoors configuration',
'errors.admin.webdoors_config.save_failed' => 'Failed to save webdoors configuration',
'errors.admin.webdoors_config.activate_failed' => 'Failed to activate webdoors configuration',
'errors.admin.jsdosdoors_config.load_failed' => 'Failed to load JS-DOS doors configuration',
'errors.admin.jsdosdoors_config.save_failed' => 'Failed to save JS-DOS doors configuration',
'errors.admin.jsdosdoors_config.activate_failed' => 'Failed to activate JS-DOS doors configuration',
// JS-DOS door session errors
'errors.jsdosdoor.game_not_found' => 'Game not found',
'errors.jsdosdoor.session_create_failed' => 'Failed to create game session',
'errors.jsdosdoor.session_end_failed' => 'Failed to end game session',
'errors.jsdosdoor.asset_load_failed' => 'Failed to load game assets',
'errors.jsdosdoor.file_sync_failed' => 'Failed to sync JS-DOS files',
'errors.admin.filearea_rules.load_failed' => 'Failed to load file area rules',
'errors.admin.filearea_rules.save_failed' => 'Failed to save file area rules',
'errors.admin.ads.list_failed' => 'Failed to load advertisements',
'errors.admin.ads.upload.no_file' => 'No advertisement file uploaded',
'errors.admin.ads.upload.upload_error' => 'Advertisement upload failed',
'errors.admin.ads.upload.file_too_large' => 'Advertisement file exceeds size limit',
'errors.admin.ads.upload.read_failed' => 'Failed to read uploaded advertisement file',
'errors.admin.ads.upload.failed' => 'Failed to upload advertisement',
'errors.admin.ads.not_found' => 'Advertisement not found',
'errors.admin.ads.load_one_failed' => 'Failed to load advertisement',
'errors.admin.ads.invalid_payload' => 'Invalid advertisement payload',
'errors.admin.ads.save_failed' => 'Failed to save advertisement',
'errors.admin.ads.delete_failed' => 'Failed to delete advertisement',
'errors.admin.ad_campaigns.list_failed' => 'Failed to load ad campaigns',
'errors.admin.ad_campaigns.log_failed' => 'Failed to load ad campaign log',
'errors.admin.ad_campaigns.meta_failed' => 'Failed to load ad campaign metadata',
'errors.admin.ad_campaigns.not_found' => 'Ad campaign not found',
'errors.admin.ad_campaigns.load_one_failed' => 'Failed to load ad campaign',
'errors.admin.ad_campaigns.invalid_payload' => 'Invalid ad campaign payload',
'errors.admin.ad_campaigns.create_failed' => 'Failed to create ad campaign',
'errors.admin.ad_campaigns.save_failed' => 'Failed to save ad campaign',
'errors.admin.ad_campaigns.delete_failed' => 'Failed to delete ad campaign',
'errors.admin.ad_campaigns.run_failed' => 'Failed to run ad campaign',
'errors.admin.chat_rooms.invalid_name_length' => 'Room name must be 1-64 characters',
'errors.admin.chat_rooms.create_failed' => 'Failed to create chat room',
'errors.admin.chat_rooms.not_found' => 'Chat room not found',
'errors.admin.chat_rooms.lobby_name_locked' => 'Lobby name cannot be changed',
'errors.admin.chat_rooms.update_failed' => 'Failed to update chat room',
'errors.admin.chat_rooms.lobby_delete_forbidden' => 'Lobby cannot be deleted',
'errors.admin.chat_rooms.delete_failed' => 'Failed to delete chat room',
'errors.admin.chat_rooms.matterbridge_gateway_required' => 'Matterbridge gateway is required when bridging is enabled',
'errors.admin.chat_rooms.matterbridge_options_invalid' => 'Matterbridge channel options must be valid',
'errors.admin.matterbridge_settings.load_failed' => 'Failed to load Matterbridge settings',
'errors.admin.matterbridge_settings.save_failed' => 'Failed to save Matterbridge settings',
'errors.admin.shoutbox.hide_failed' => 'Failed to hide shout',
'errors.admin.shoutbox.unhide_failed' => 'Failed to unhide shout',
'errors.admin.shoutbox.delete_failed' => 'Failed to delete shout',
'errors.admin.packet_bbs.node_id_required' => 'Node ID is required',
'errors.admin.packet_bbs.node_exists' => 'A node with that ID already exists',
'errors.admin.packet_bbs.node_not_found' => 'Node not found',
'errors.admin.packet_bbs.key_generate_failed' => 'Failed to generate key.',
'errors.admin.packet_bbs.request_failed' => 'Request failed.',
'errors.admin.packet_bbs.save_failed' => 'Save failed.',
'errors.admin.insecure_nodes.create_failed' => 'Failed to add insecure node',
'errors.admin.insecure_nodes.update_failed' => 'Failed to update insecure node',
'errors.admin.insecure_nodes.delete_failed' => 'Failed to delete insecure node',
'errors.admin.crashmail.retry_failed' => 'Failed to retry crashmail item',
'errors.admin.crashmail.cancel_failed' => 'Failed to cancel crashmail item',
'errors.admin.crashmail.poll_failed' => 'Failed to run crashmail poll',
'errors.admin.custom_templates.list_failed' => 'Failed to list custom templates',
'errors.admin.custom_templates.get_failed' => 'Failed to load custom template',
'errors.admin.custom_templates.save_failed' => 'Failed to save custom template',
'errors.admin.custom_templates.delete_failed' => 'Failed to delete custom template',
'errors.admin.custom_templates.install_failed' => 'Failed to install custom template',
'errors.admin.auto_feed.not_found' => 'Feed source not found',
'errors.admin.auto_feed.required_fields' => 'Feed URL, echo area, and posting user are required',
'errors.admin.auto_feed.invalid_url' => 'Feed URL is invalid',
'errors.admin.auto_feed.echoarea_not_found' => 'Echo area not found',
'errors.admin.auto_feed.user_not_found' => 'Posting user not found',
'errors.admin.auto_feed.duplicate_source' => 'Feed source already exists',
'errors.admin.auto_feed.create_failed' => 'Failed to create feed source',
'errors.admin.auto_feed.update_failed' => 'Failed to update feed source',
'errors.admin.auto_feed.check_failed' => 'Feed check failed',
'errors.admin.activity_stats.table_missing' => 'Activity log table is not available',
// Address Book
'errors.address_book.list_failed' => 'Failed to load address book entries',
'errors.address_book.not_found' => 'Entry not found',
'errors.address_book.get_failed' => 'Failed to load address book entry',
'errors.address_book.user_not_found' => 'User ID not found in authentication data',
'errors.address_book.invalid_fidonet_format' => 'Invalid Fidonet address format. Use format like 1:234/567 or 1:234/567.0',
'errors.address_book.required_fields' => 'Name and Fidonet address are required',
'errors.address_book.duplicate_entry' => 'Address book entry already exists',
'errors.address_book.create_failed' => 'Failed to create address book entry',
'errors.address_book.update_failed' => 'Failed to update address book entry',
'errors.address_book.delete_failed' => 'Failed to delete address book entry',
'errors.address_book.search_failed' => 'Failed to search address book entries',
'errors.address_book.stats_failed' => 'Failed to load address book statistics',
// Shared Messages
'errors.messages.shared.lookup_failed' => 'Failed to load shared message',
'errors.messages.shared.user_shares_failed' => 'Failed to load user shares',
'errors.messages.shared.access_denied' => 'Message not found or access denied',
'errors.messages.shared.sharing_disabled' => 'Sharing is disabled for your account',
'errors.messages.shared.max_active_reached' => 'Maximum number of active shares reached',
'errors.messages.shared.not_found_or_expired' => 'Share not found or expired',
'errors.messages.shared.login_required' => 'Login required to access this share',
'errors.messages.shared.original_not_found' => 'Original message not found',
'errors.messages.shared.not_found' => 'Share not found',
'errors.messages.shared.friendly_url_only_echomail' => 'Friendly URLs are only available for echomail shares',
'errors.messages.shared.slug_generation_failed' => 'Cannot generate share slug for this message',
'errors.messages.share.image_upload_failed' => 'Failed to upload preview image',
'errors.messages.share.image_remove_failed' => 'Failed to remove preview image',
'errors.messages.share.image_invalid_type' => 'Only image files are allowed',
'errors.messages.share.image_too_large' => 'Image must be 5 MB or smaller',
// Subscriptions
'errors.subscriptions.echoarea_id_required' => 'Echoarea ID required',
'errors.subscriptions.invalid_action' => 'Invalid action',
'errors.subscriptions.admin_required' => 'Admin access required',
// Nodelist API
'errors.nodelist.api.endpoint_not_found' => 'API endpoint not found',
'errors.nodelist.api.address_required' => 'Address parameter required',
'errors.nodelist.api.node_not_found' => 'Node not found',
'errors.nodelist.api.zone_required' => 'Zone parameter required',
'errors.nodelist.api.internal_error' => 'Failed to process nodelist API request',
'errors.nodelist.admin_required' => 'Administrator access required',
'errors.nodelist.import.domain_required' => 'Please specify a network domain',
'errors.nodelist.import.domain_invalid' => 'Domain should contain only letters, numbers, underscores, and hyphens',
'errors.nodelist.import.file_required' => 'Please select a valid nodelist file',
'errors.nodelist.import.invalid_format' => 'Invalid nodelist format',
'errors.nodelist.import.zip_extension_missing' => 'ZIP extension not available',
'errors.nodelist.import.zip_open_failed' => 'Could not open ZIP file',
'errors.nodelist.import.archive_unsupported' => 'Archive format {format} not supported in web interface (use command line)',
'errors.nodelist.import.archive_nodelist_missing' => 'Could not find nodelist file in archive',
'errors.nodelist.import.extract_failed' => 'Failed to extract archive',
'errors.nodelist.import.failed' => 'Failed to import nodelist',
// Settings / Taglines
'errors.settings.load_failed' => 'Failed to load user settings',
'errors.taglines.load_failed' => 'Failed to load taglines',
// Referrals
'errors.referrals.code_not_found' => 'Referral code not found',
'errors.referrals.stats_failed' => 'Failed to load referral statistics',
'errors.referrals.admin_stats_failed' => 'Failed to load admin referral statistics',
// WebDoor
'errors.webdoor.feature_disabled' => 'Game system is not enabled',
'errors.webdoor.auth_required' => 'Not authenticated',
'errors.webdoor.invalid_slot' => 'Invalid slot number',
'errors.webdoor.save_too_large' => 'Save data exceeds maximum size',
'errors.webdoor.save_not_found' => 'Save not found',
// Door API
'errors.door.door_name_required' => 'Door name required',
'errors.door.admin_only' => 'This door is restricted to administrators',
'errors.door.insufficient_credits' => 'Insufficient credits',
'errors.door.insufficient_credits_detail' => 'This door costs {required} credits. You have {balance} credits.',
'errors.door.capacity_reached' => 'Door is at capacity',
'errors.door.capacity_reached_detail' => 'This door is currently in use. Only {max_nodes} player(s) allowed at a time. Please try again later.',
'errors.door.launch_failed' => 'Failed to start door session',
'errors.door.session_id_required' => 'Session ID required',
'errors.door.session_unauthorized' => 'Unauthorized',
'errors.door.session_end_failed' => 'Failed to end session',
'errors.door.session_get_failed' => 'Failed to get session',
'errors.door.asset.invalid_type' => 'Invalid asset type',
'errors.door.asset.door_not_found' => 'Door not found',
'errors.door.asset.not_defined' => 'Asset not defined in manifest',
'errors.door.asset.file_not_found' => 'Asset file not found',
'errors.door.asset.access_denied' => 'Access denied',
// TIC Processing
'errors.tic.file_area_create_failed' => 'Failed to create file area from TIC metadata',
'errors.tic.validation_failed' => 'TIC file validation failed',
'errors.tic.virus_detected' => 'File rejected: virus detected',
'errors.tic.processing_failed' => 'TIC processing failed',
// Virus Scanner
'errors.virus_scanner.not_available' => 'Virus scanning not available',
'errors.virus_scanner.file_not_found' => 'File not found for virus scan',
'errors.virus_scanner.scan_error' => 'Virus scan error',
// VirusTotal scanner backend
'errors.virustotal.not_configured' => 'VirusTotal API key not configured',
'errors.virustotal.file_too_large' => 'File too large for VirusTotal upload (max 32 MB)',
'errors.virustotal.upload_failed' => 'Failed to upload file to VirusTotal',
'errors.virustotal.api_error' => 'VirusTotal API error',
'errors.virustotal.analysis_pending' => 'VirusTotal analysis still in progress; re-scan later',
// Language overlay editor
'errors.admin.i18n_overrides.invalid_locale' => 'Invalid or unsupported locale',
'errors.admin.i18n_overrides.missing_params' => 'Locale and catalog name are required',
'errors.admin.i18n_overrides.load_failed' => 'Failed to load catalog',
'errors.admin.i18n_overrides.save_failed' => 'Failed to save overrides',
// BBS Directory (user submissions)
'errors.bbs_directory.name_required' => 'BBS name is required',
'errors.bbs_directory.duplicate_name' => 'A BBS with that name already exists',
'errors.bbs_directory.submit_failed' => 'Submission failed. Please try again.',
// BBS Directory (admin)
'errors.admin.bbs_directory.not_found' => 'BBS directory entry not found',
'errors.admin.bbs_directory.robot_not_found' => 'Robot rule not found',
'errors.admin.bbs_directory.name_required' => 'BBS name is required',
'errors.admin.bbs_directory.duplicate_name' => 'A BBS with that name already exists',
'errors.admin.bbs_directory.robot_required_fields' => 'Name, echo area, and processor type are required',
'errors.admin.bbs_directory.run_failed' => 'Robot run failed',
'errors.admin.bbs_directory.invalid_processor_type' => 'Unknown or unsupported processor type',
'errors.admin.bbs_directory.merge_missing_discard' => 'discard_id is required',
'errors.admin.bbs_directory.merge_failed' => 'Merge failed',
'errors.admin.echomail_robots.invalid_config_json' => 'Processor config is not valid JSON',
'errors.files.iso_not_mounted' => 'File area is not mounted',
'errors.files.iso_readonly' => 'ISO-backed files cannot be modified',
'errors.fileareas.reindex_failed' => 'Failed to start ISO re-index',
'errors.admin.areafix.invalid_json' => 'Invalid request payload',
'errors.admin.areafix.uplink_required' => 'Uplink address is required',
'errors.admin.areafix.invalid_robot' => 'Robot must be "areafix" or "filefix"',
'errors.admin.areafix.commands_required' => 'At least one command is required',
'errors.admin.areafix.send_failed' => 'Failed to send command',
'errors.admin.areafix.history_failed' => 'Failed to load message history',
'errors.admin.areafix.sync_failed' => 'Failed to sync areas',
'errors.admin.poll.failed' => 'Failed to poll BinkP uplink',
'errors.admin.lovlynet.invalid_json' => 'Invalid request payload',
'errors.admin.lovlynet.invalid_area_type' => 'Invalid area type',
'errors.admin.lovlynet.request_message_required' => 'Request message is required',
'errors.admin.lovlynet.not_configured' => 'LovlyNet is not configured',
'errors.admin.lovlynet.request_config_missing' => 'LovlyNet request settings are incomplete',
'errors.admin.lovlynet.help_fetch_failed' => 'Failed to load help text',
'errors.admin.lovlynet.request_send_failed' => 'Failed to send request netmail',
'errors.admin.lovlynet.filearea_files_failed' => 'Failed to load file area files',
'errors.admin.lovlynet.invalid_file_id' => 'Invalid file ID',
'errors.admin.lovlynet.hatch_failed' => 'Failed to hatch file',
'errors.admin.lovlynet.not_registered' => 'Not registered with LovlyNet',
'errors.admin.lovlynet.registration_update_failed' => 'Registration update failed',
'errors.admin.lovlynet.checklist_fix_failed' => 'Failed to apply fix',
// QWK Offline Mail
'errors.qwk.disabled' => 'QWK offline mail is not enabled on this system',
'errors.qwk.no_file' => 'No REP file received. Send the file in the "rep" field.',
'errors.qwk.upload_error' => 'File upload error',
'errors.qwk.invalid_extension' => 'Please upload a .REP or .ZIP file',
'errors.qwk.processing_failed' => 'Failed to process REP packet',
'errors.qwk.status_failed' => 'Failed to retrieve QWK status',
'errors.qwk.invalid_format' => 'Format must be "qwk" or "qwke"',
'errors.qwk.invalid_input' => 'echoarea_ids array is required',
'errors.qwk.save_failed' => 'Failed to save area selections',
// Interests
'errors.interests.not_found' => 'Interest not found.',
'errors.interests.name_required' => 'Interest name is required.',
'errors.interests.name_taken' => 'An interest with that name already exists.',
'errors.interests.slug_taken' => 'An interest with that slug already exists.',
'errors.interests.feature_disabled' => 'The interests feature is not enabled.',
'errors.interests.crosspost_cooldown' => 'You must wait {minutes} more minute(s) before cross-posting again.',
'errors.mcp.not_enabled' => 'MCP services are not enabled on this system.',
'errors.mcp.license_required' => 'A registered license is required for the MCP server feature.',
'errors.mcp.generate_failed' => 'Failed to generate MCP key.',
'errors.mcp.revoke_failed' => 'Failed to revoke MCP key.',
'errors.mcp.load_failed' => 'Failed to load MCP key status.',
// Ad Analytics
'errors.admin.ad_analytics.license_required' => 'A valid license is required to view ad analytics.',
'errors.admin.ad_analytics.load_failed' => 'Failed to load ad analytics.',
// Ads - content command validation
'errors.admin.ads.invalid_content_command' => 'The selected content command is not allowed.',
'errors.admin.weather.preview_failed' => 'Failed to generate weather report preview.',
// Markdown image upload
'errors.markdown_images.upload_failed' => 'Image upload failed. Please try again.',
'errors.markdown_images.invalid_type' => 'Unsupported image type. Please use JPEG, PNG, GIF, or WebP.',
'errors.markdown_images.too_large' => 'Image is too large. Maximum size is 5 MB.',
// Wall message
'errors.admin.wall.empty_message' => 'Message cannot be empty.',
'errors.admin.wall.message_too_long' => 'Message too long (max 1000 characters).',
// Msg (private admin message)
'errors.admin.msg.no_username' => 'Username is required.',
'errors.admin.msg.empty_message' => 'Message cannot be empty.',
'errors.admin.msg.message_too_long' => 'Message too long (max 1000 characters).',
'errors.admin.msg.user_not_found' => 'User not found.',
// Echomail moderation
'errors.admin.echomail_moderation.not_found' => 'Message not found or not pending moderation.',
// AI Bots
'errors.admin.ai_bots.not_found' => 'Bot not found.',
'errors.admin.ai_bots.name_invalid' => 'Bot name must be 1-100 characters.',
'errors.admin.ai_bots.username_invalid' => 'Username must be 1-50 alphanumeric or underscore characters.',
'errors.admin.ai_bots.username_taken' => 'That username is already taken.',
'errors.admin.ai_bots.create_failed' => 'Failed to create bot.',
'errors.admin.ai_bots.update_failed' => 'Failed to update bot.',
'errors.admin.ai_bots.delete_failed' => 'Failed to delete bot.',
// URL preview (unfurl)
'errors.url_preview.invalid_url' => 'Invalid URL.',
'errors.url_preview.fetch_failed' => 'Could not fetch a preview for that URL.',
// AI Assistant
'errors.ai_assistant.disabled' => 'AI assistant is not enabled on this system.',
'errors.ai_assistant.not_configured' => 'AI assistant is not configured.',
'errors.ai_assistant.prompt_too_long' => 'Prompt exceeds the 500 character limit.',
'errors.ai_assistant.insufficient_credits' => 'Insufficient credits for AI assistant.',
'errors.ai_assistant.failed' => 'AI request failed. Please try again.',
// PacketBBS TOTP
'errors.packetbbs_totp.invalid_code' => 'Invalid code. Check your authenticator app and try again.',
'errors.packetbbs_totp.no_pending_secret' => 'No enrollment in progress. Please start setup again.',
'errors.packetbbs_totp.not_enabled' => 'PacketBBS authenticator is not enabled.',
'errors.packetbbs_totp.setup_failed' => 'Failed to set up authenticator. Please try again.',
'errors.packetbbs_totp.disable_failed' => 'Failed to disable authenticator. Please try again.',
'errors.bulletins.invalid_ids' => 'Invalid bulletin list.',
'errors.admin.bulletins.invalid_payload' => 'Invalid bulletin data.',
'errors.admin.bulletins.save_failed' => 'Failed to save bulletin.',
'errors.admin.networks.load_failed' => 'Failed to load networks',
'errors.admin.networks.save_failed' => 'Failed to save network',
'errors.admin.networks.change_domain_failed' => 'Failed to change domain',
'errors.admin.networks.delete_in_use' => 'Network is in use',
'errors.admin.networks.delete_failed' => 'Failed to delete network',
'errors.meshcore.invalid_node_id' => 'Node ID must be 12 or 64 lowercase hex characters.',
'errors.meshcore.contact_exists' => 'A contact with this node ID already exists.',
'errors.meshcore.not_found' => 'Contact not found.',
'errors.meshcore.qr_unrecognized' => 'Unrecognized QR code format.',
'errors.meshcore.qr_camera_denied' => 'Camera access denied.',
];
|