Files
Gnuboard7/public/install/lang/en.php
T
HeuJung c08dae7cb0 perf(core): 서빙 API 부팅 비용 최적화 (information_schema 가드 + 훅/오토로드/config 캐시)
매 요청 균일하게 발생하던 부팅 오버헤드를 4개 축에서 제거한다.

- 설치 완료 상태에서 매 요청 반복되던 information_schema 조회(알림·본인인증
 테이블 hasTable)를 installer_completed 가드로 스킵. 미설치 환경은 기존
 hasTable 폴백 유지.
- 코어+모듈+플러그인 정적 훅 매핑을 bootstrap/cache/hooks.php 에 사전 계산해
 매 요청 디렉토리 스캔·리플렉션·클래스 로딩을 제거(route:cache 동형).
 등록↔발화 계약·매핑 바이트 동일. 확장/코어 변경 시 자동 재생성, 캐시
 부재·손상은 스캔 폴백.
- 확장 소스(Modules\*/Plugins\*)를 autoload-extensions.php 의 classmap 에
 편입해 findFile 파일시스템 스캔을 제거(느린 FS·cold OPcache 환경 직격).
 클래스 로딩은 여전히 lazy, PSR-4 폴백 유지.
- config 캐시를 변경 지점(설정 저장/코어·확장 업데이트/APP_KEY 재생성/설치
 완료)에서 clear 후 즉시 재생성하도록 ConfigCacheHelper 로 일원화. clear 만
 하고 방치돼 캐시가 영구 비활성으로 남던 성능 손실 제거. HookCacheManager::read
 요청당 1회 로드(memo)로 중복 파싱 제거.

부팅 매핑 fingerprint 스캔↔캐시 완전 동일(229 action + 35 filter). 신규/수정
8개 스위트 54 pass. 순수 내부 부팅 인프라 — 확장 공개 표면·훅 계약 불변.
2026-07-03 17:47:23 +09:00

911 lines
54 KiB
PHP

<?php
// /install/lang/en.php
return [
// Common
'next' => 'Next',
'previous' => 'Previous',
'install' => 'Install',
'cancel' => 'Cancel',
'yes' => 'Yes',
'no' => 'No',
'loading' => 'Loading...',
'saving' => 'Saving...',
'save_failed' => 'Save failed',
'error' => 'Error',
// Step 0: Welcome
'welcome_title' => 'Getting Started with Gnuboard7',
'welcome_desc' => 'Welcome to Gnuboard7. This is the first step of the installation.<br>Follow the guided steps in order to complete the required environment setup quickly and reliably.',
'select_language' => 'Select Language',
'storage_permission_check' => 'Directory Permission Check',
'storage_permission_required' => 'Storage Folder Permission Required',
'storage_permission_failed' => 'Insufficient storage folder permissions',
'storage_not_exists' => 'Storage Folder Not Found',
'storage_not_exists_message' => 'The storage folder does not exist. Please create a storage folder in the project root.',
'storage_not_writable' => 'Storage Folder Not Writable',
'storage_not_writable_message' => 'The storage folder is not writable. Please check the folder owner or group permissions.',
'storage_ownership_mismatch' => 'Storage Folder Ownership Mismatch',
'storage_ownership_mismatch_message' => 'The storage folder owner (:owner) does not match the web server user (:web_user). Current permissions (:permissions) allow only the owner to write, so the web server cannot write. Please apply one of the options below.',
'storage_permission_guide' => 'Please grant <strong>755</strong> permission to the Storage folder.',
'storage_permission_guide_detail' => 'Run the command below or change permissions via FTP:',
'storage_permission_command_linux' => 'chmod -R 755 :path',
'current_owner' => 'Owner',
'current_group' => 'Group',
'current_permissions' => 'Permissions',
'required_permissions' => 'Required',
'unknown' => 'Unknown',
'recheck_permission' => 'Recheck',
'permission_checking' => 'Checking permissions...',
// Step 1: License
'license_title' => 'License Agreement',
'license_agreement' => 'License Terms',
'i_agree' => 'I agree to the above license terms',
'must_agree' => 'You must agree to the license to continue.',
'license_not_found' => 'License information not found.',
// Step 2: Requirements
'checking_requirements' => 'Checking server requirements...',
'php_version' => 'PHP Version',
'php_modules' => 'PHP Modules',
'directory_permissions' => 'Directory Permissions',
'disk_space' => 'Disk Space',
'https' => 'HTTPS',
'required' => 'Required',
'enabled' => 'Enabled',
'not_enabled' => 'Not Enabled',
'recommended' => 'Recommended',
'needs_fix' => 'Needs Fix',
'requirements_check_failed' => 'Requirements check failed',
'all_requirements_met' => 'All requirements are met.',
'some_requirements_failed' => 'Some requirements are not met. Please check your server configuration.',
'recheck' => 'Recheck',
'requirements_not_met' => 'Required conditions are not met. Please check your environment and try again.',
'badge_required' => 'Required',
'badge_optional' => 'Optional',
'or_above' => 'or above',
'fix_permission' => 'Insufficient write permission',
'including_subdirectories' => 'including subdirectories',
'and_more' => 'and :count more',
'error_php_version' => 'PHP Version',
'error_missing_extensions' => 'Missing required PHP extensions',
'error_disk_space' => 'Disk Space',
'error_directory_permissions' => 'Insufficient directory write permissions',
'error_required_files' => 'Required files missing',
'error_required_files_missing_label' => 'Required files missing',
'error_required_files_not_writable_label' => 'Required files not writable',
'error_required_files_ownership_mismatch_label' => 'Required files ownership mismatch',
'ownership_mismatch_option_666' => '[Alternative 2] Last resort — grant write permission to the file for everyone (reduced security, not recommended):',
'required_files' => 'Required Files',
'file_exists' => 'Exists',
'file_missing' => 'Missing',
'file_not_writable' => 'Not Writable',
'required_files_fix_guide' => 'Run the following command in your project root:',
'minimum' => 'minimum',
'required_text' => 'required',
// Step 3: Configuration
'database_settings' => 'Database Settings',
'database_type' => 'Database Type',
'db_host' => 'Database Host',
'db_port' => 'Port',
'db_name' => 'Database Name',
'db_username' => 'Username',
'db_password' => 'Password',
'db_prefix' => 'Table Prefix',
'db_prefix_hint' => 'Prefix added to all table names. (e.g., g7_users, g7_posts) Up to 6 characters.',
'db_prefix_placeholder' => 'g7_',
'test_write_db_connection' => 'Test Write DB Connection',
'test_read_db_connection' => 'Test Read DB Connection',
'use_read_db' => 'Use Read DB Settings',
'database_settings_read' => 'Database Settings (Read DB) - Optional',
'site_settings' => 'Site Settings',
'app_name' => 'Site Name',
'app_url' => 'Site URL',
'admin_account' => 'Admin Account',
'admin_name' => 'Admin Name',
'admin_language' => 'Admin Language',
'admin_email' => 'Admin Email',
'admin_password' => 'Admin Password',
'admin_password_confirm' => 'Confirm Password',
'start_installation' => 'Start Installation',
// Step 5: Installation
'installation_title' => 'Installation in Progress',
'installation_in_progress' => 'Installing Gnuboard7. Please wait...',
'installation_in_progress_message' => 'Installation is in progress. Redirecting to installation page.',
'overall_progress' => 'Overall Progress',
'preparing' => 'Preparing...',
'waiting_installation' => 'Waiting for installation to start...',
'processing' => 'Processing...',
'installation_complete' => 'Installation Complete',
'installation_failed' => 'Installation Failed',
'retry_installation' => 'Retry',
'do_not_close_page' => 'Do not close this page until the installation is complete.',
'installation_log' => 'Installation Log',
'hide_log' => 'Hide Log',
'show_log' => 'Show Log',
'back_to_settings' => 'Back to Settings',
'progress_status' => 'Installation List',
'hide_progress' => 'Hide Installation List',
'show_progress' => 'Show Installation List',
'installation_completed' => 'Installation Complete!',
'recommendations' => 'Post-Installation Recommendations',
'recommendation_env_permission' => 'Set .env file permissions to 644 (chmod 644 .env)',
'recommendation_https' => 'Use HTTPS in production environment',
// .env permission hardening hint (Step 5 completion screen, shown when not 0600)
'env_hardening_hint_title' => '.env Permission Hardening (Optional)',
'env_hardening_hint_current_status' => 'Current .env permission is %s (owner: %s). The most secure permission is 0600 (owner read/write only). To apply additional hardening, run the appropriate command below with sudo based on your environment.',
'env_hardening_hint_option_strict' => 'CLI user = web server user (single-user environment)',
'env_hardening_hint_option_group' => 'CLI user ≠ web server user (self-hosted server, etc. — group-readable compromise)',
'env_hardening_hint_note' => 'Verify your environment before running. Applying the wrong permission may prevent the web server from reading .env and cause the site to stop responding.',
// Step 5: Complete
'installation_info' => 'Installation Information',
'installation_complete_message' => 'Gnuboard7 has been successfully installed!',
'installed_version_label' => 'Installed version:',
'site_url' => 'Site URL',
'installed_at' => 'Installed At',
'go_to_admin_login' => 'Admin Login',
// Re-entry
'completed_tasks' => 'Completed Tasks',
'interrupted_task' => 'Interrupted Task',
'pending_tasks' => 'Pending Tasks',
'interrupted_during_execution' => 'Interrupted during execution',
'resume_continue' => 'Continue',
'installation_resuming' => 'Installation Resuming',
// Error Messages - Common
'error_occurred' => 'An error occurred',
'please_try_again' => 'Please try again.',
'invalid_input' => 'Invalid input.',
// Error Messages - Validation (Database)
'error_db_host_required' => 'Database host is required.',
'error_db_name_required' => 'Database name is required.',
'error_db_username_required' => 'Database username is required.',
'error_db_credentials_required' => 'Database name and username are required.',
'error_db_prefix_too_long' => 'Table prefix may be up to :max characters. (entered: :current) A long prefix makes some table index names exceed the database identifier limit.',
'error_db_privileges_insufficient' => 'Insufficient database privileges.',
'error_db_not_tested' => 'Please test the database connection first.',
'error_write_db_not_tested' => 'Please test Write DB connection first.',
'error_read_db_not_tested' => 'Please test Read DB connection first.',
// Error Messages - Validation (Database) (detailed)
'error_db_privileges_insufficient_detail' => 'Insufficient privileges for :type database: :missing',
'error_db_connection_failed_detail' => ':type database connection failed: :error',
'error_db_test_failed' => 'Error occurred during database testing',
// Error Messages - Validation (Admin Account)
'error_admin_email_invalid' => 'Please enter a valid email address.',
'error_admin_language_invalid' => 'Please select a valid language.',
'error_admin_name_required' => 'Please enter admin name.',
'error_admin_password_required' => 'Please enter admin password.',
'error_admin_password_min' => 'Password must be at least 8 characters long.',
'error_admin_password_confirm_required' => 'Please enter password confirmation.',
'error_password_mismatch' => 'Passwords do not match.',
'error_app_name_required' => 'Please enter site name.',
'error_app_url_required' => 'Please enter site URL.',
'error_field_required' => 'This field is required.',
// Error Messages - System (Requirements)
'error_requirements_check_failed' => 'An error occurred while checking requirements.',
'error_php_version_insufficient' => 'PHP version does not meet requirements.',
'error_php_extensions_missing' => 'Some required PHP extensions are not installed.',
'error_disk_space_insufficient' => 'Insufficient disk space.',
'error_disk_space_unknown' => 'Unable to determine disk space.',
'error_directory_not_writable' => 'Some directories are not writable.',
// Error Messages - System (Requirements) (detailed)
'error_php_version_insufficient_detail' => 'PHP version does not meet requirements (current: :current, required: :min+)',
'error_disk_space_insufficient_detail' => 'Insufficient disk space (current: :current MB, required: :min MB)',
'error_directory_not_writable_detail' => 'Some directories are not writable. Run the command below to grant the permissions.',
'error_required_files_missing' => 'Required files are missing.',
'error_step_file_not_found' => 'Step file not found. Installation files may be corrupted.',
'error_state_file_creation_failed' => 'Unable to create installation state file (state.json). Please check write permissions for the storage/installer directory.',
'error_invalid_step_access' => 'Invalid step access',
'error_invalid_step_access_message' => 'Please follow the installation steps in order.',
// Success Messages - Database
'success_db_write_connected' => 'Write database connection and privileges verified successfully.',
'success_db_read_connected' => 'Read database connection and privileges verified successfully.',
// Success Messages - Requirements
'success_requirements_met' => 'All requirements are met.',
'success_php_version' => 'PHP version meets requirements.',
'success_php_extensions' => 'All required PHP extensions are installed.',
'success_disk_space' => 'Sufficient disk space available.',
'success_directories_writable' => 'All directories are writable.',
'success_required_files' => 'All required files exist.',
// Success Messages - Requirements (detailed)
'success_php_version_detail' => 'PHP version meets requirements (current: :current, required: :min+)',
'success_disk_space_detail' => 'Sufficient disk space available (current: :current MB, required: :min MB)',
// HTTPS Messages
'https_enabled' => 'HTTPS is enabled (recommended)',
'https_disabled' => 'HTTPS is disabled. We recommend using HTTPS for security.',
// API Response Messages
'api_method_not_allowed' => 'Only POST requests are allowed.',
'api_invalid_request' => 'Invalid request data.',
'api_unexpected_error' => 'An unexpected error occurred.',
// Step Names (for helper functions)
'step_0_welcome' => 'Welcome',
'step_1_license' => 'License Agreement',
'step_2_requirements' => 'Requirements Check',
'step_3_configuration' => 'Configuration',
'step_4_extension_selection' => 'Extension Selection',
'step_5_installation' => 'Installation',
'step_6_complete' => 'Complete',
'step_unknown' => 'Unknown Step',
// Task Names (for helper functions)
'task_composer_check' => 'Checking Package Manager',
'task_composer_install' => 'Installing Required Packages',
'task_env_create' => 'Creating Configuration File',
'task_env_update' => 'Updating Configuration File',
'task_key_generate' => 'Generating Security Key',
'task_dependency_precheck' => 'Extension Dependency Precheck',
'task_db_cleanup' => 'Cleaning Up Existing Database Tables',
'task_db_migrate' => 'Creating Database Tables',
'task_db_seed' => 'Initializing Default Data',
'task_template_install' => 'Installing Admin Template',
'task_template_activate' => 'Activating Admin Template',
'task_module_install' => 'Installing Module',
'task_module_activate' => 'Activating Module',
'task_plugin_install' => 'Installing Plugin',
'task_plugin_activate' => 'Activating Plugin',
'task_user_template_install' => 'Installing User Template',
'task_user_template_activate' => 'Activating User Template',
'task_language_pack_install' => 'Installing Language Pack',
'task_cache_clear' => 'Cleaning Up Temporary Files',
'task_create_settings_json' => 'Creating Settings Files',
'task_complete_flag' => 'Finalizing Installation',
'task_config_cache' => 'Building Configuration Cache',
'task_unknown' => 'Unknown Task',
// Task Group Names
'task_group_environment' => 'Environment Setup',
'task_group_database' => 'Database',
'task_group_admin_templates' => 'Admin Templates',
'task_group_modules' => 'Modules',
'task_group_plugins' => 'Plugins',
'task_group_user_templates' => 'User Templates',
'task_group_language_packs' => 'Language Packs',
'task_group_finalize' => 'Finalize',
// Group Status Labels
'status_pending' => 'Pending',
'status_in_progress' => 'In Progress',
'status_completed' => 'Completed',
'status_failed' => 'Failed',
'status_aborted' => 'Aborted',
// Error Messages - Worker (Composer)
'error_composer_not_installed' => 'Composer is not installed.',
'error_composer_install_failed' => 'Composer dependency installation failed',
// Log Messages - Worker (Composer)
'log_composer_check_success' => 'Composer check completed',
'log_composer_check_skipped_bundled' => 'Composer check skipped — bundled vendor mode',
'log_composer_check_auto_fallback' => 'Composer not installed — will auto-fallback to bundled vendor mode',
'log_composer_already_installed' => 'Composer dependencies are already installed',
'log_composer_install_success' => 'Composer dependency installation completed',
'log_composer_vendor_without_lock' => 'vendor directory exists but composer.lock is missing (incomplete state)',
'log_composer_removing_vendor' => 'Removing vendor directory and reinstalling...',
'log_composer_vendor_deleted' => 'vendor directory deleted',
'log_composer_vendor_delete_failed' => 'Failed to delete vendor directory (continuing anyway)',
'log_composer_installing_from_lock' => 'Installing dependencies from composer.lock...',
'log_composer_fresh_install' => 'Installing new Composer dependencies...',
'log_composer_cache_cleared' => 'Cleared previous package cache',
// Error Messages - Worker (.env)
'error_env_example_not_found' => '.env.example file not found',
'error_env_create_failed' => '.env file creation failed',
'error_env_not_found' => '.env file not found.',
// Log Messages - Worker (.env)
'log_env_create_success' => '.env file creation completed',
'log_env_update_success' => '.env file updated successfully',
'log_env_readonly_skip' => '.env file is read-only, skipping update.',
'log_env_flag_skipped' => '.env file is read-only, skipping installation completion flag.',
// Error Messages - Worker (Key)
'error_key_generate_failed' => 'Application key generation failed',
// Log Messages - Worker (Key)
'log_key_generate_success' => 'Application key generation completed',
// Error Messages - Worker (Database)
'error_db_migrate_failed' => 'Database table creation failed',
'error_db_seed_failed' => 'Default data initialization failed',
// Log Messages - Worker (Database)
'log_db_migrate_success' => 'Database migration completed',
'log_db_seed_success' => 'Database seeding completed',
// Error Messages - Worker (Template)
'error_template_install_failed' => 'Template installation failed',
'error_template_activate_failed' => 'Template activation failed',
// Log Messages - Worker (Template)
'log_template_install_success' => 'Template installation completed',
'log_template_activate_success' => 'Template activation completed',
// Error Messages - Worker (Module)
'error_module_install_failed' => 'Module installation failed',
'error_module_activate_failed' => 'Module activation failed',
// Log Messages - Worker (Module)
'log_module_install_success' => 'Module installation completed',
'log_module_activate_success' => 'Module activation completed',
// Error Messages - Worker (Plugin)
'error_plugin_install_failed' => 'Plugin installation failed',
'error_plugin_activate_failed' => 'Plugin activation failed',
// Log Messages - Worker (Plugin)
'log_plugin_install_success' => 'Plugin installation completed',
'log_plugin_activate_success' => 'Plugin activation completed',
// Error Messages - Worker (User Template)
'error_user_template_install_failed' => 'User template installation failed',
'error_user_template_activate_failed' => 'User template activation failed',
// Log Messages - Worker (User Template)
'log_user_template_install_success' => 'User template installation completed',
'log_user_template_activate_success' => 'User template activation completed',
// Error/Log Messages - Worker (Language Pack)
'error_language_pack_install_failed' => 'Language pack installation failed',
'log_language_pack_install_success' => 'Language pack installation completed',
'warning_language_pack_install_partial' => 'Language pack install partially failed: :identifier (continuing)',
// Error Messages - Worker (Cache)
'error_cache_clear_failed' => 'Cache clearing failed',
'error_config_cache_failed' => 'Configuration cache build failed',
// Log Messages - Worker (Cache)
'log_cache_clear_success' => 'Cache clearing completed',
'log_config_cache_success' => 'Configuration cache built',
// Error Messages - Worker (Settings JSON)
'error_settings_json_failed' => 'Settings file creation failed',
// Log Messages - Worker (Settings JSON)
'log_creating_settings' => 'Creating settings JSON files...',
'log_settings_json_created' => 'Settings JSON files created successfully',
// Error Messages - Worker (Admin)
'error_autoload_not_found' => 'vendor/autoload.php file not found',
'error_app_bootstrap_not_found' => 'bootstrap/app.php file not found',
// Log Messages - Worker (Complete)
'log_complete_flag_success' => 'Installation completion flag set successfully',
'log_installation_completed' => 'Installation completed successfully',
'log_installation_failed' => 'Installation failed',
'log_installation_task_failed' => '[Failed] :task: :message',
'log_installation_exception' => '[Failed] Installation error occurred: :error',
// Worker Log Messages (Task Progress)
'log_task_in_progress' => ':task in progress...',
'log_task_completed' => ':task completed',
'log_task_skipped' => ':task (already exists, skipped)',
'manual_commands_guide' => '💡 You can run the following commands manually:',
'log_separator' => '========================================',
'log_error_occurred' => '❌ Error occurred: :error',
'log_env_file_created' => '.env file created successfully',
'log_env_flag_added' => 'Installation complete flag added to .env file',
'log_installed_flag_created' => 'g7_installed flag file created',
'log_state_updated' => 'Installation state updated successfully',
'log_all_tasks_completed' => '🎉 All installation tasks completed successfully!',
'log_already_completed' => ':task (already completed)',
// Worker Abort Messages
'abort_connection_lost' => '[Aborted] Browser connection lost.',
'abort_rollback_start' => "[Aborted] Starting rollback for current task ':task'.",
'abort_rollback_success' => '[Aborted] Rollback completed: :message',
'abort_rollback_failed' => '[Aborted] Rollback failed: :message (continuing)',
'abort_no_rollback_needed' => '[Aborted] No rollback needed. (current_task is null or already completed)',
'abort_by_user' => "[Aborted] User aborted installation. (Current task: :task)",
'abort_installation_stopped' => 'Installation aborted.',
// Worker Failed Task Rollback Messages
'failed_rollback_start' => "[Failed] Starting rollback for failed task ':task'.",
'failed_rollback_success' => '[Failed] Rollback completed: :message',
'failed_rollback_failed' => '[Failed] Rollback failed: :message',
'failed_rollback_manual_cleanup' => '[Notice] Rollback failed. Please manually clean up the database and try installation again.',
'failed_rollback_manual_cleanup_detail' => 'Use a database management tool (such as phpMyAdmin) to delete created tables or reset the database, then retry installation.',
'failed_rollback_db_restart' => '[Notice] Database has been rolled back. On retry, installation will restart from database setup.',
'failed_rollback_retry' => '[Notice] The task failed. Please try the installation again.',
'failed_rollback_retry_detail' => 'On retry, installation will resume from the failed task. If the problem persists, refer to the manual commands above.',
// Worker SSE Connection Messages
'sse_connection_established' => 'SSE connection established',
'sse_method_not_allowed' => 'Method not allowed. SSE requires GET request.',
// DB Task No Abort Messages
'db_task_no_abort' => 'Cannot abort during database operations. The abort will happen after the current task completes.',
'db_task_in_progress' => 'Database operation in progress...',
// Worker Error Detail Messages
'error_composer_process_failed' => 'Failed to start composer install process',
'error_composer_exit_code' => 'Composer install failed with exit code: :code',
'error_env_example_not_found_detail' => '.env.example file not found at: :path',
'error_env_write_failed' => 'Failed to write .env file at: :path',
'error_complete_flag_failed' => 'Installation completion flag setting failed',
'error_unexpected_exception' => 'An unexpected error has occurred',
// install-process.php Messages
'error_method_not_allowed' => 'Only POST requests are allowed.',
'error_config_not_in_session' => 'Configuration not found in session. Please complete Step 3 first.',
'error_required_fields_missing' => 'Required fields are missing: :fields',
'log_installation_config_saved' => 'Installation configuration saved - Waiting for SSE connection',
'success_installation_started' => 'Installation started successfully.',
'error_installation_start_failed' => 'Installation process start failed',
'error_installation_start_exception' => 'Error occurred while starting installation: :error',
// get-install-state.php Messages
'error_get_method_required' => 'Only GET requests are allowed.',
'error_state_query_failed' => 'An error occurred while querying installation state.',
// Page Refresh/Leave Warnings (Browser shows default message, but clarifying intent)
'confirm_leave_installation' => 'Installation is in progress. Leaving this page may cause installation issues.',
'confirm_resume_installation' => 'Installation was in progress. Would you like to resume the installation?',
'resume_installation_btn' => 'Resume Installation',
'cancel_installation_btn' => 'Cancel',
// Installation Already Completed Messages
'installation_already_completed' => 'Installation Complete',
'installation_already_completed_message' => 'Gnuboard7 is already installed. Redirecting to homepage...',
// URL Parameter Access Messages
'url_parameter_not_supported' => 'URL Parameter Not Supported',
'url_parameter_redirect_message' => 'The installation process is managed by sessions. Redirecting to the current Step :current instead of requested Step :requested.',
// Installation Abort Related
'abort_installation' => 'Abort Installation',
'aborting' => 'Aborting',
'confirm_abort_installation' => 'Are you sure you want to abort the installation? The current installation progress will be preserved, and you can resume from where you left off later.',
'installation_aborted' => 'Installation Aborted',
'installation_aborted_message' => 'The installation was interrupted due to browser closure or refresh. You can resume the installation from where it was interrupted.',
'clean_state' => 'Clean State',
'cleaning' => 'Cleaning',
'state_cleaned' => 'State has been cleaned',
'clean_failed' => 'Clean failed',
'clean_error' => 'Error occurred while cleaning',
'resuming' => 'Resuming',
'resume_failed' => 'Resume failed',
'resume_error' => 'Error occurred while resuming',
'abort_failed' => 'Abort failed',
'abort_error_occurred' => 'Error occurred while aborting',
// Validation Error Messages (validation.php)
'validation_required' => ':field is required.',
'validation_email' => ':field must be a valid email address.',
'validation_min' => ':field must be at least :min characters.',
'validation_max' => ':field must not exceed :max characters.',
'validation_url' => ':field must be a valid URL.',
'validation_alpha_num' => ':field may only contain letters and numbers.',
'validation_alpha_num_underscore' => ':field may only contain lowercase letters, numbers, and underscores (_).',
'validation_starts_with_alpha' => ':field must start with a lowercase letter.',
'validation_confirmed' => ':field confirmation does not match.',
'validation_numeric' => ':field must be a number.',
'validation_integer' => ':field must be an integer.',
'validation_in' => ':field must be one of: :values',
// Field Labels (validation.php)
'fields' => [
'db_host' => 'Database Host',
'db_port' => 'Database Port',
'db_database' => 'Database Name',
'db_username' => 'Database Username',
'db_password' => 'Database Password',
'db_write_host' => 'Write Database Host',
'db_write_port' => 'Write Database Port',
'db_write_database' => 'Write Database Name',
'db_write_username' => 'Write Database Username',
'db_write_password' => 'Write Database Password',
'db_prefix' => 'Table Prefix',
'db_read_host' => 'Read Database Host',
'db_read_port' => 'Read Database Port',
'db_read_database' => 'Read Database Name',
'db_read_username' => 'Read Database Username',
'db_read_password' => 'Read Database Password',
'app_name' => 'Site Name',
'app_url' => 'Site URL',
'admin_name' => 'Admin Name',
'admin_language' => 'Admin Language',
'admin_email' => 'Admin Email',
'admin_password' => 'Admin Password',
'admin_password_confirmation' => 'Admin Password Confirmation',
'email' => 'Email',
'password' => 'Password',
'password_confirmation' => 'Password Confirmation',
],
// JavaScript Client Messages (installer.js)
'testing_connection' => 'Testing connection...',
'connection_failed_prefix' => 'Connection failed:',
'validation_incomplete_alert' => 'Please complete all required fields and database connection tests.',
'validation_incomplete_title' => 'Please complete the following items:',
'confirm_leave_page' => 'Settings have not been saved. Are you sure you want to leave this page?',
'installation_in_progress_alert' => 'Installation is in progress. Do you want to go back to the settings page?',
'confirm_go_to_settings' => "Do you want to go back to the settings page?",
'confirm_go_to_settings_simple' => "Do you want to go back to the settings page?\n\nInstallation state will be reset and all tasks will start from the beginning.\n\n⚠️ Database tables will NOT be deleted automatically.\nPlease clean up manually using phpMyAdmin if needed.",
'confirm_go_to_settings_title' => 'Go to Settings Page',
'confirm_go_to_settings_desc' => 'Installation state will be reset and all tasks will start from the beginning.\n\n⚠️ Database tables will NOT be deleted automatically. Please clean up manually using phpMyAdmin if needed.',
'confirm_go_to_settings_btn' => 'Go',
'reset_db_checkbox_label' => 'Reset database (delete created tables)',
'error_state_reset_failed' => 'Failed to reset state.\n\n:message\n\nPlease refresh the page and try again.',
'confirm_force_go_to_settings' => 'An error occurred while resetting state.\n\nDo you still want to go to the settings page?',
'view_error_details' => 'View error details',
'installation_error_occurred' => 'An error occurred during installation.',
'installation_start_error' => 'Error starting installation',
'installation_start_failed' => 'Unable to start installation.',
'unknown_error_occurred' => 'An unknown error has occurred.',
// SSE connection failure messages
'sse_connection_timeout' => 'SSE real-time connection failed. Please check server configuration or refresh the page.',
'sse_server_config_guide' => 'If you are the server administrator, please check the following settings:
[Nginx Configuration]
location /install/api/ {
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 600s;
}
[Apache Configuration]
# .htaccess or httpd.conf
<Location /install/api/>
SetEnv no-gzip 1
</Location>
[PHP Configuration]
// Add to the top of install-worker.php
ini_set(\'output_buffering\', \'off\');
ini_set(\'zlib.output_compression\', \'off\');
@apache_setenv(\'no-gzip\', 1);
[Shared Hosting]
Contact your hosting provider about SSE (Server-Sent Events) support.
Firewalls or proxies may be blocking long-lived HTTP connections.',
// Installation mode (SSE / polling)
'installation_mode_label' => 'Installation Mode',
'installation_mode_sse_title' => 'Real-time Streaming (SSE) — Recommended',
'installation_mode_sse_desc' => 'The server streams progress in real time. Fastest and most reliable in standard environments.',
'installation_mode_polling_title' => 'Compatibility Mode (Polling)',
'installation_mode_polling_desc' => 'Use this when SSE connection errors occur behind an Nginx proxy, shared hosting, etc. Status is polled every second.',
'sse_fallback_confirm' => 'SSE connection failed.\n\nWould you like to retry in compatibility mode (polling)?',
'sse_probe_incompat_use_polling' => "SSE real-time connection is not available in this environment.\n\nProceed with installation in compatibility mode (polling)?\n\n[OK] Start installation in polling mode\n[Cancel] Return to start screen",
'start_installation_button' => 'Start Installation',
// Step 4 dependency warnings
'dependency_warning_title' => 'Missing Dependencies Detected',
'dependency_warning_description' => 'The following extensions are required. Click "Auto-select required items" to resolve them in one click.',
'dependency_auto_select' => 'Auto-select required items',
'dependency_missing_tooltip' => 'Please resolve dependencies first',
'dependency_precheck_failed' => 'Dependency precheck failed — return to Step 4 and select the missing modules/plugins',
// Step 3 existing database detection
'db_existing_g7_badge' => 'Existing G7 installation detected',
'db_existing_foreign_badge' => 'Foreign data detected',
'db_existing_mixed_badge' => 'Mixed G7 + foreign tables',
'db_existing_g7_title' => 'Existing G7 Installation Detected',
'db_existing_foreign_title' => 'Foreign Data Detected',
'db_existing_mixed_title' => 'Mixed Data Detected',
'db_existing_generic_title' => 'Existing Tables Detected',
'db_existing_g7_desc' => 'The selected database already contains a G7 installation. Forcing the install will drop the existing G7 tables that start with the table prefix you entered. Back up first.',
'db_existing_foreign_desc' => 'The selected database contains unknown tables. Forcing the install will only drop tables that start with the table prefix you entered; tables with a different prefix are preserved. Back up first.',
'db_existing_mixed_desc' => 'The selected database contains a mix of G7 and other tables. Forcing the install will only drop tables that start with the table prefix you entered; tables with a different prefix are preserved.',
'db_existing_generic_desc' => 'The selected database contains existing tables. Forcing the install will only drop tables that start with the table prefix you entered.',
'db_existing_tables_list' => 'Detected tables (up to 20):',
'db_backup_guide' => 'Backup command example (verify host/user/database before running):',
'db_backup_confirmed' => 'I have backed up and agree that existing tables starting with my table prefix will be dropped',
'error_db_cleanup_consent_required' => 'You must consent to dropping existing tables before proceeding to the next step.',
'db_force_proceed_drop' => 'Drop existing tables and install',
'db_force_proceed_confirmed' => 'Force install mode (existing tables will be dropped)',
'log_db_cleanup_skipped' => 'Skipping existing table cleanup (no action)',
'log_db_cleanup_empty' => 'No existing tables. Skipping cleanup.',
'log_db_cleanup_dropping' => 'Dropping {count} existing tables...',
'log_db_cleanup_done' => 'Dropped {count} existing tables.',
'error_db_cleanup_failed' => 'Failed to clean up existing database tables',
// Dark Mode
'toggle_theme' => 'Toggle Theme',
'dark_mode' => 'Dark Mode',
'light_mode' => 'Light Mode',
// Step 4: Extension Selection
'extension_selection_description' => 'Select the extensions to install. Admin template is required.',
'loading_extensions' => 'Loading extensions...',
'admin_templates' => 'Admin Templates',
'admin_templates_description' => 'Select a template for the admin panel.',
'user_templates' => 'User Templates',
'user_templates_description' => 'Select a template for the front pages.',
'modules' => 'Modules',
'modules_description' => 'Select modules to install. Modules provide major features like boards and e-commerce.',
'plugins' => 'Plugins',
'plugins_description' => 'Select plugins to install. Plugins provide additional features like payments and notifications.',
'language_packs' => 'Language Packs',
'language_packs_description' => 'Select bundled language packs for additional language support. Each pack requires its target extension to be selected.',
'optional' => 'Optional',
'no_extensions_found' => 'No extensions available.',
'no_user_templates' => 'No user templates available.',
'no_modules' => 'No modules available.',
'no_plugins' => 'No plugins available.',
'no_language_packs' => 'No bundled language packs available.',
'language_pack_disabled_by_extension' => 'Disabled — its target extension is not selected.',
'language_pack_scope_core' => 'Core',
'language_pack_scope_module' => 'Module',
'language_pack_scope_plugin' => 'Plugin',
'language_pack_scope_template' => 'Template',
'bulk_select_all_optional' => 'Select all available items',
'bulk_select_section' => 'Select all',
// Brand name
'brand_name' => 'Gnuboard7',
// Step 3 — Vendor installation mode
'vendor_mode_title' => 'Vendor Installation Mode',
'vendor_mode_description' => 'Choose how to install PHP package dependencies (vendor/).',
'vendor_mode_auto_title' => 'Auto',
'vendor_mode_auto_description' => 'Use Composer when available, fall back to bundled vendor when not.',
'vendor_mode_auto_status_ok' => 'Environment auto-detected',
'vendor_mode_composer_title' => 'Run Composer',
'vendor_mode_composer_description' => 'Install latest versions via composer install (requires internet + proc_open).',
'vendor_mode_composer_status_ok' => 'proc_open available',
'vendor_mode_composer_status_blocked' => 'proc_open() blocked — unavailable',
'vendor_mode_bundled_title' => 'Use Bundled Vendor',
'vendor_mode_bundled_description' => 'Extract vendor-bundle.zip (offline install, composer not required).',
'vendor_mode_bundled_status_ok' => 'vendor-bundle.zip found',
'vendor_mode_bundled_status_no_ziparchive' => 'ZipArchive extension missing — unavailable',
'vendor_mode_bundled_status_no_zip' => 'vendor-bundle.zip not found — unavailable',
'vendor_mode_badge_recommended' => 'Recommended',
'vendor_mode_badge_dev' => 'Development',
'vendor_mode_badge_shared' => 'Shared hosting',
'vendor_mode_change_later_html' => 'You can change this later via <code>php artisan core:update --vendor-mode=...</code>.',
// Installation stuck detection
'error_installation_stuck' => 'Installation has stopped responding. The server worker may be stuck running a command. Please refresh and retry. If the problem persists, check storage/logs/installation.log.',
'extension_load_failed' => 'Failed to load extension list.',
'no_admin_template_error' => 'Admin template is required but not found. Please ensure at least one admin template exists in the templates directory.',
'selection_summary' => 'Selection Summary',
'selected_count' => ':count selected',
'admin_template_required' => 'At least one admin template must be selected.',
'proceed_to_installation' => 'Proceed to Installation',
'version' => 'Version',
'select' => 'Select',
'selected' => 'Selected',
'dependencies' => 'Dependencies',
'dependency_type_module' => 'Module',
'dependency_type_plugin' => 'Plugin',
'dependency_type_admin_template' => 'Admin Template',
'dependency_type_user_template' => 'User Template',
'dependency_type_other' => 'Other',
'dep_auto_badge_label' => 'Required dependency',
'dep_lock_message' => ':names requires this item. Please deselect that extension first.',
'dep_version_required' => 'Required',
'dep_version_available' => 'Available',
'author' => 'Author',
'retry' => 'Retry',
'select_all' => 'Select All',
'deselect_all' => 'Deselect All',
// install-worker.php i18n keys
'db_task_abort_detected_before_start' => '[DB Task] Abort detected before start - skipping task.',
'db_task_failed_rollback_start' => '[DB Task] :task failed - starting rollback.',
'db_task_abort_reason_connection' => 'Connection lost',
'db_task_abort_reason_user' => 'User requested',
'db_task_completed_abort_detected' => '[DB Task] Abort detected after :task completed (:reason) - starting rollback.',
'db_task_completed_rollback_start' => '[Aborted] Starting rollback after :task completed.',
'log_removing_state_file' => 'Removing installer state file...',
'log_state_file_removed' => 'Installer state file removed successfully.',
'log_state_file_remove_failed' => 'Warning: Failed to remove installer state file.',
'error_worker_exception' => 'Installation worker SSE exception',
// rollback-functions.php i18n keys
'log_prefix_rollback' => '[Rollback]',
'log_prefix_force_rollback' => '[Force Rollback]',
'rollback_not_needed_recreatable' => 'Rollback not needed (can be recreated)',
'rollback_not_needed_overwritable' => 'Rollback not needed (can be overwritten on reinstall/reactivation)',
'rollback_unknown_task' => 'Unknown task: :task',
'rollback_error' => '[Rollback Error] :task: :error',
'rollback_exception' => 'Exception during rollback: :error',
'rollback_migrate_start' => 'Starting migration rollback (migrate:rollback).',
'rollback_migrate_result' => 'migrate:rollback result: :result',
'rollback_migrate_success' => 'Migration rollback completed',
'rollback_migrate_failed_code' => 'Migration rollback failed (returnCode: :code)',
'rollback_migrate_failed' => 'Migration rollback failed',
'rollback_migrate_error' => 'Error during migration rollback: :error',
'rollback_seed_no_config' => 'No DB configuration found. Skipping seed rollback.',
'rollback_seed_already_done' => 'Seed already completed (rollback not needed)',
'rollback_seed_interrupted' => 'Seed was interrupted. Truncating tables.',
'rollback_seed_force_truncate' => 'Force truncating seed data.',
'rollback_table_truncated' => "Table ':table' truncated.",
'rollback_table_truncate_skipped' => "Table ':table' TRUNCATE skipped: :error",
'rollback_seed_data_deleted' => 'Seed data deleted.',
'rollback_db_connection_failed' => 'DB connection failed: :error',
'rollback_db_connection_failed_skip' => 'DB connection failed. Skipping seed rollback.',
'rollback_seed_error' => 'Error during seed processing: :error',
'rollback_env_flag_removed' => 'Removed INSTALLER_COMPLETED from .env.',
'rollback_installed_flag_removed' => 'Deleted g7_installed file.',
'rollback_runtime_removed' => 'Cleaned up installer runtime config.',
'error_worker_busy' => 'Another install worker is in progress. Please retry shortly.',
'rollback_complete_flag_removed' => 'Installation completion flags removed: :details',
'rollback_complete_flag_error' => 'Error removing completion flag: :error',
'rollback_no_current_task' => 'No current task to rollback. (current_task is null)',
'rollback_task_already_completed' => "':task' is already completed. (rollback not needed)",
'rollback_current_task_start' => "[Aborted] Starting rollback for current task ':task'.",
'rollback_no_completed_tasks' => 'No completed tasks to rollback.',
'rollback_checking_tasks' => 'Checking rollbackable tasks...',
'rollback_no_matching_tasks' => 'No tasks to rollback. (no matching tasks in rollbackable list)',
'rollback_tasks_to_rollback' => 'Tasks to rollback: :tasks',
'rollback_task_rolling_back' => "Rolling back ':task'...",
'rollback_task_success' => "':task' rollback succeeded",
'rollback_task_failed' => "':task' rollback failed: :error",
'manual_cmd_settings_json' => 'settings.json is generated automatically. Please retry the installation.',
// state-management.php i18n keys
'state_reset_requested' => 'Requested navigation to settings page.',
'state_reset_db_notice' => 'DB is not automatically reset. Please clean up manually if needed.',
'state_save_failed' => 'Failed to save state file.',
'state_reset_completed' => 'Installation state has been reset. (Moving to Step :step)',
'abort_api_requested' => '[Abort API] Abort requested - user requested installation abort',
'abort_api_current_status' => '[Abort API] Current installation_status: :status',
'abort_api_current_task' => '[Abort API] Current current_task: :task',
'abort_api_completed_count' => '[Abort API] Completed task count: :count',
'abort_api_already_completed' => 'Installation is already completed and cannot be aborted.',
'abort_api_already_aborted' => 'Installation is already aborted.',
'abort_api_not_running' => 'No installation to abort.',
'abort_user_requested' => 'User requested installation abort.',
'abort_api_status_change' => '[Abort API] Changing installation_status to "aborted".',
'abort_api_save_result' => '[Abort API] state.json save result: :result',
'abort_api_verify_status' => '[Abort API] Verify after save - installation_status: :status',
'error_state_management' => 'State management error',
'error_log_prefix' => '[Error] :error',
// functions.php i18n keys
'error_db_name_username_required' => 'Database name and username are required.',
'error_db_invalid_parameter' => 'Database :field contains characters that are not allowed.',
'error_db_connection_failed' => 'Database connection failed: :error',
'error_privilege_check_failed' => 'Error occurred during privilege check',
// Required file setup (Step 5)
'file_setup_title' => 'Create Required Files',
'file_setup_description' => 'The following files are required in the project root to proceed with installation.',
'file_setup_guide' => 'Run the following command in your terminal from the project root directory:',
'file_check_button' => 'Verify files',
'file_checking' => 'Checking...',
'files_not_found_yet' => 'Required files not found yet. Please create the files and try again.',
'copy_command' => 'Copy',
'copied' => 'Copied!',
// Step 2 permission guidance
'permission_fix_guide' => 'Run the following command in your terminal or SSH to grant permissions:',
'ownership_mismatch_option_group' => '[Recommended] Group sharing — change group to the web server user and grant write permission:',
'ownership_mismatch_option_chown' => '[Alternative 1] Change owner — transfer ownership to the web server user:',
'ownership_mismatch_option_777' => '[Alternative 2] Last resort — grant write permission to everyone (reduced security, not recommended):',
'ownership_mismatch_hint' => '※ Current owner: :owner / Web server user: :web_user. Choose the option that matches your environment.',
'permission_fallback_title' => 'If the command above does not resolve the issue',
'permission_fallback_detail' => 'Some environments (e.g. dedicated servers) may require: chmod -R 775 :path',
'permission_windows_hint' => '※ On Windows, open Command Prompt (cmd) as Administrator and run the command. Alternatively, you can set permissions via folder Properties → Security tab.',
'directory_create_guide' => 'Run the following command to create the missing directories:',
// Directory names (Step 2)
'dir_bootstrap_cache' => 'Bootstrap cache directory',
'dir_vendor' => 'Packages directory',
'dir_modules' => 'Modules directory',
'dir_modules_pending' => 'Modules pending directory',
'dir_plugins' => 'Plugins directory',
'dir_plugins_pending' => 'Plugins pending directory',
'dir_templates' => 'Templates directory',
'dir_templates_pending' => 'Templates pending directory',
// save-extensions.php i18n keys
'log_extensions_selected' => 'Extension selection complete: :admin admin template(s), :user user template(s), :modules module(s), :plugins plugin(s), :language_packs language pack(s)',
'log_extensions_saved' => 'Extension selection has been saved.',
'error_admin_template_required' => 'Please select at least one admin template.',
'error_invalid_extension_identifier' => 'Extension identifier ":identifier" is not in an allowed format (group: :group). Only letters, digits, and `._-` are accepted.',
// Core update settings
'core_update_settings' => 'Core Update Settings (Optional)',
'core_update_pending_path' => 'Update Pending Directory Path',
'core_update_pending_path_help' => 'Leave empty to use the default (storage/app/core_pending). Enter an absolute path or a path relative to the Gnuboard7 root to use a custom location.',
'core_update_github_url' => 'GitHub Repository URL',
'core_update_github_url_help' => 'GitHub repository URL to check for core updates.',
'core_update_github_token' => 'GitHub Access Token',
'core_update_github_token_help' => 'A GitHub Personal Access Token is required for private repositories. Leave empty for public repositories.',
'check_core_pending_path' => 'Check Path',
'dir_core_pending' => 'Core update pending directory',
'core_pending_will_be_created' => 'Directory does not exist. It will be created automatically during installation.',
'core_pending_path_ok' => 'Path is valid.',
'core_pending_info' => 'Owner: :owner, Group: :group, Permissions: :permissions',
'error_core_pending_not_directory' => 'The specified path is not a directory.',
'error_core_pending_not_writable' => 'Directory (:path) is not writable.',
'error_core_pending_parent_not_writable' => 'Parent directory (:path) is not writable, cannot create automatically.',
'error_path_required' => 'Please enter a path.',
'error_core_pending_path_invalid' => 'The path you entered is not a valid directory or is not in an allowed format.',
// PHP CLI / Composer Settings
'php_cli_settings' => 'PHP CLI Settings (Optional)',
'php_cli_settings_required' => 'PHP CLI Settings (Required)',
'php_cli_settings_help' => 'If PHP CLI is not in the system PATH or has a different version on your hosting environment, you can specify the path directly. No changes needed for typical environments.',
'php_cli_settings_help_required' => 'The default php command is not available on this server. Please specify the correct PHP CLI path and verify it.',
'php_binary_path' => 'PHP CLI Path',
'php_binary_path_help' => 'e.g. /usr/local/php82/bin/php (default: php)',
'composer_binary_path' => 'Composer Path',
'composer_binary_path_help' => 'Leave empty to auto-detect from system PATH. .phar file paths are also supported.',
'verify_version' => 'Verify Version',
'auto_detect_php' => 'Auto-detect PHP',
'detecting_php' => 'Scanning for PHP binaries...',
'detected_php_binaries' => 'Detected PHP binaries (click to select):',
'no_php_detected' => 'No PHP binaries found on this server.',
'php_detected_count' => ':count PHP binary(ies) found.',
'success_php_binary_version' => ':path — PHP :version ✓',
'error_php_path_empty' => 'PHP binary path is empty.',
'error_php_path_not_exists' => 'File does not exist: :path',
'error_php_exec_failed' => 'PHP execution failed: :path',
'error_php_version_too_low' => ':path — PHP :version (minimum :min required)',
'error_php_version_parse_failed' => 'Failed to parse PHP version.',
'error_php_cli_not_verified' => 'PHP CLI path has not been verified. Please click the "Verify Version" button.',
'error_composer_not_verified' => 'Composer execution has not been verified. Please click the "Verify Version" button.',
'error_composer_path_not_exists' => 'File does not exist: :path',
'error_composer_exec_failed' => 'Composer execution failed: :path',
'error_composer_version_parse_failed' => 'Failed to parse Composer version.',
'error_check_failed' => 'Check request failed. Please verify network or server status.',
'session_cookie_blocked_title' => 'Session Cookie Blocked',
'session_cookie_blocked_description' => 'Your browser is not preserving the installer session cookie (PHPSESSID), which may cause the installation to stall. You may proceed but it is not recommended — please try one of the workarounds below.',
'session_cookie_blocked_remedy_1' => 'Try a different browser. Incognito/Private windows usually have stricter cookie policies — a regular window is recommended.',
'session_cookie_blocked_remedy_2' => 'Disable cookie/site-data blocking in your browser and refresh the page.',
'session_cookie_blocked_remedy_3' => 'Access via IP or localhost instead of a domain name. Example: http://localhost:port/install/',
'session_cookie_blocked_technical_detail' => 'Technical detail: Installer session cookie round-trip verification failed. (Likely caused by SameSite policy, non-standard port, browser tracking protection, or similar combination.)',
'session_cookie_blocked_dismiss' => 'Dismiss warning',
'success_composer_version' => ':path — Composer :version ✓',
'composer_install_guide_title' => 'Composer Installation Guide',
'composer_install_guide_message' => 'Composer is not installed. You can install it using the following methods:',
'composer_install_guide_global' => 'Global installation (recommended):',
'composer_install_guide_local' => 'Local installation (project directory):',
'composer_install_guide_hosting' => 'Hosting environment installation (if above methods fail):',
'composer_install_guide_pwd_hint' => 'After installation, check the absolute path of the current directory with the command below:',
'composer_install_guide_phar_hint' => 'Enter the full execution command with absolute path in the Composer path field above. Example: /usr/local/php84/bin/php /home/user/g7/composer.phar',
'composer_install_guide_link' => 'For detailed instructions, visit <a href="https://getcomposer.org/download/" target="_blank" rel="noopener">getcomposer.org</a>.',
'composer_checking' => 'Checking Composer...',
'cli_status_checking' => 'Checking...',
'cli_status_verified' => '✓ Verified',
'cli_status_not_verified' => '✗ Not verified',
'cli_status_optional_bundled' => '— Optional (bundled mode)',
// Environment Check Enhancements
'required_functions' => 'Required Functions',
'required_functions_available' => 'Available',
'required_functions_disabled' => ':count disabled',
'success_required_functions' => 'Required functions (exec, proc_open, shell_exec) are all available.',
'error_disabled_functions' => 'The following functions are disabled and installation cannot proceed: :functions. Please ask your hosting provider to enable them.',
'php_cli_version' => 'PHP CLI Version',
'php_cli_version_check_skipped' => 'exec function is disabled, CLI version check skipped.',
'php_cli_version_unknown' => 'Unable to determine PHP CLI version.',
'php_cli_version_matched' => 'Matched (Web: :web, CLI: :cli)',
'php_cli_version_mismatch' => 'Mismatch (Web: :web, CLI: :cli)',
'php_cli_version_mismatch_hint' => 'Please specify the correct PHP CLI path in Step 3.',
'success_core_pending_path' => 'Path is valid and writable.',
// Combined .env guidance
'required_files_fix_guide_combined' => '.env file creation and permission setup required. Run the following command:',
// Relative path alternative
'or_relative_path' => 'Or from the G7 root directory:',
];
?>