From 02c4e3f13f1af550ab124f44eee85d0c645be6d7 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 14 Mar 2026 15:16:48 +0000 Subject: [PATCH] Autosave: 20260314-151648 --- includes/app.php | 1968 +++++++++++++++++++++++++++++----------------- 1 file changed, 1239 insertions(+), 729 deletions(-) diff --git a/includes/app.php b/includes/app.php index b790f7d..010f669 100644 --- a/includes/app.php +++ b/includes/app.php @@ -1,590 +1,1116 @@ array ( - 'app_name' => 'CargoLink', - 'nav_home' => 'Overview', - 'nav_login' => 'Login', - 'nav_shipper' => 'Shipper Desk', - 'nav_owner' => 'Truck Owner Desk', - 'nav_admin' => 'Admin Panel', - 'nav_theme' => 'Theme', - 'nav_get_started' => 'Get Started', - 'hero_title' => 'Move cargo faster with verified trucks.', - 'hero_subtitle' => 'Post shipments, collect offers, and pay via Thawani or bank transfer. Built for local and nearby cross-border moves.', - 'hero_tagline' => 'Multilingual Logistics Marketplace', - 'register_shipper' => 'Register as Shipper', - 'register_owner' => 'Register as Truck Owner', - 'cta_shipper' => 'Post a shipment', - 'cta_owner' => 'Find loads', - 'cta_admin' => 'Open admin', - 'stats_shipments' => 'Shipments posted', - 'stats_offers' => 'Active offers', - 'stats_confirmed' => 'Confirmed trips', - 'section_workflow' => 'How it works', - 'recent_shipments' => 'Recent shipments', - 'step_post' => 'Shipper posts cargo details and preferred payment.', - 'step_offer' => 'Truck owners respond with their best rate.', - 'step_confirm' => 'Admin confirms booking and status.', - 'step_confirm_desc' => 'Secure booking and track the delivery until completion.', - 'shipper_dashboard' => 'Shipper Dashboard', - 'new_shipment' => 'Create shipment', - 'shipper_name' => 'Shipper name', - 'shipper_company' => 'Company', - 'origin' => 'Origin city', - 'destination' => 'Destination city', - 'cargo' => 'Cargo description', - 'cargo_placeholder' => 'e.g. 20 Pallets of Electronics', - 'weight' => 'Weight (tons)', - 'pickup_date' => 'Pickup date', - 'delivery_date' => 'Delivery date', - 'payment_method' => 'Payment method', - 'payment_thawani' => 'Thawani online payment', - 'payment_bank' => 'Bank transfer', - 'submit_shipment' => 'Submit shipment', - 'shipments_list' => 'Your latest shipments', - 'status' => 'Status', - 'offer' => 'Best offer', - 'actions' => 'Actions', - 'view' => 'View', - 'owner_dashboard' => 'Truck Owner Dashboard', - 'available_shipments' => 'Available shipments', - 'offer_price' => 'Offer price', - 'offer_owner' => 'Truck owner name', - 'submit_offer' => 'Send offer', - 'admin_dashboard' => 'Admin Dashboard', - 'update_status' => 'Update status', - 'save' => 'Save', - 'shipment_detail' => 'Shipment detail', - 'created_at' => 'Created', - 'best_offer' => 'Best offer', - 'assign_owner' => 'Assigned owner', - 'no_shipments' => 'No shipments yet. Create the first one to get started.', - 'no_offers' => 'No offers yet.', - 'success_shipment' => 'Shipment posted successfully.', - 'success_offer' => 'Offer submitted to the shipper.', - 'success_status' => 'Status updated.', - 'error_required' => 'Please fill in all required fields.', - 'error_invalid' => 'Please enter valid values.', - 'status_posted' => 'Posted', - 'status_offered' => 'Offered', - 'status_confirmed' => 'Confirmed', - 'status_in_transit' => 'In transit', - 'status_delivered' => 'Delivered', - 'footer_note' => 'This is the initial MVP slice. Payments are not yet connected.', - 'marketing_title_1' => 'For Shippers', - 'marketing_desc_1' => 'Find the right truck for your cargo quickly and securely. Post your load and get offers instantly.', - 'marketing_title_2' => 'For Truck Owners', - 'marketing_desc_2' => 'Maximize your earnings and eliminate empty miles. Browse available shipments and offer your rate.', - 'motivation_phrase' => 'Empowering the logistics of tomorrow.', - 'why_choose_us' => 'Why Choose CargoLink?', - 'feature_1_title' => 'Fast Matching', - 'feature_1_desc' => 'Connect with available trucks or shipments in minutes.', - 'feature_2_title' => 'Secure Payments', - 'feature_2_desc' => 'Your transactions are protected with security.', - 'feature_3_title' => 'Verified Users', - 'feature_3_desc' => 'We verify all truck owners to ensure peace of mind.', - 'view_faq' => 'View FAQ', - 'faq_title' => 'Have Questions?', - 'faq_subtitle' => 'Check out our Frequently Asked Questions to learn more about how our platform works.', - 'motivation_title' => 'Ready to transform your logistics?', - 'motivation_subtitle' => 'Join our platform today to find reliable trucks or secure the best shipments in the market.', - 'company' => 'Company', - 'about_us' => 'About Us', - 'careers' => 'Careers', - 'contact' => 'Contact', - 'resources' => 'Resources', - 'help_center' => 'Help Center / FAQ', - 'terms_of_service' => 'Terms of Service', - 'privacy_policy' => 'Privacy Policy', - 'language' => 'Language', - 'all_rights_reserved' => 'All rights reserved.', - 'dashboard' => 'Dashboard', - 'shipments' => 'Shipments', - 'reports' => 'Reports', - 'summary_report' => 'Summary Report', - 'shipments_by_origin_country' => 'Shipments by Origin Country', - 'shipments_by_dest_country' => 'Shipments by Destination Country', - 'shipments_by_origin_city' => 'Shipments by Origin City', - 'shipments_by_dest_city' => 'Shipments by Destination City', - 'shipments_by_shipper' => 'Shipments by Shipper', - 'generated' => 'Generated', - 'report_type' => 'Report Type', - 'period' => 'Period', - 'analyze_performance' => 'Analyze platform performance and metrics.', - 'print' => 'Print', - 'start_date' => 'Start Date', - 'end_date' => 'End Date', - 'apply_filter' => 'Apply Filter', - 'no_paid_shipments' => 'No paid shipments found for this period.', - 'name' => 'Name', - 'total_amount' => 'Total Amount', - 'profit' => 'Profit', - 'total_label' => 'Total', - 'printed_by' => 'Printed By', - 'analytics' => 'Analytics', - 'shipper_shipments' => 'Shipper Shipments', - 'truck_owners_statements' => 'Truck Owners Statements', - 'nav_platform_users' => 'Platform Users', - 'settings' => 'Settings', - 'company_setting' => 'Company Setting', - 'integrations' => 'Integrations', - 'notification_templates' => 'Notification Templates', - 'locations' => 'Locations', - 'countries' => 'Countries', - 'cities' => 'Cities', - 'users' => 'Users', - 'shippers' => 'Shippers', - 'truck_owners' => 'Truck Owners', - 'user_registration' => 'User Registration', - 'pages' => 'Pages', - 'faqs' => 'FAQs', - 'landing_pages' => 'Landing Pages', - 'edit_homepage' => 'Edit homepage content and sections', - 'view_details' => 'View Details', - 'manage_shippers' => 'Manage Shippers', - 'manage_registered_shippers' => 'Manage registered shippers.', - 'search_placeholder_shipper' => 'Search name, email, company...', - 'all_statuses' => 'All Statuses', - 'pending' => 'Pending', - 'rejected' => 'Rejected', - 'active' => 'Active', - 'no_shippers_criteria' => 'No shippers found matching your criteria.', - 'no_shippers_registered' => 'No shippers registered yet.', - 'name_company' => 'Name / Company', - 'location' => 'Location', - 'edit_shipper' => 'Edit Shipper', - 'approve' => 'Approve', - 'reject' => 'Reject', - 'delete' => 'Delete', - 'delete_confirm_shipper' => 'Delete this shipper forever?', - 'loading' => 'Loading...', - 'manage_truck_owners' => 'Manage Truck Owners', - 'review_registrations' => 'Review registrations and approve truck owners.', - 'search_placeholder_owner' => 'Search name, email, plate...', - 'no_owners_criteria' => 'No truck owners found matching your criteria.', - 'no_owners_registered' => 'No truck owners registered yet.', - 'name_email' => 'Name / Email', - 'truck_info' => 'Truck Info', - 'documents' => 'Documents', - 'view_docs' => 'View Docs', - 'edit_owner' => 'Edit Owner', - 'delete_confirm_owner' => 'Delete this truck owner forever?', - 'docs_for' => 'Documents for', - 'truck_reg' => 'Truck Registration', - 'no_picture' => 'No picture uploaded.', - 'cap' => 'Cap', - 'manage_shipments' => 'Manage Shipments', - 'shipments_header' => 'Shipments', - 'shipments_subtitle' => 'Manage all shipments across the platform.', - 'flash_shipment_deleted' => 'Shipment deleted successfully.', - 'search_shipments_placeholder' => 'Search shipments...', - 'search_label' => 'Search', - 'sort_by' => 'Sort By', - 'sort_newest' => 'Newest First', - 'sort_oldest' => 'Oldest First', - 'sort_pickup_soonest' => 'Pickup Date (Soonest)', - 'sort_pickup_latest' => 'Pickup Date (Latest)', - 'no_shipments_found_criteria' => 'No shipments found matching your criteria.', - 'no_shipments_platform' => 'No shipments found on the platform yet.', - 'id_col' => 'ID', - 'dates_col' => 'Dates', - 'from_label' => 'From:', - 'to_label' => 'To:', - 'pick_label' => 'Pick:', - 'drop_label' => 'Drop:', - 'view_shipment' => 'View Shipment', - 'edit_shipment_tooltip' => 'Edit Shipment', - 'confirm_delete_shipment' => 'Delete this shipment?', - 'showing' => 'Showing', - 'of' => 'of', - 'previous' => 'Previous', - 'next' => 'Next', - 'error_occurred' => 'An error occurred', - 'failed_load_form' => 'Failed to load form.', - 'edit_shipment_title' => 'Edit Shipment #', - 'update_shipment_details' => 'Update shipment details and status.', - 'shipment_not_found' => 'Shipment not found', - 'shipment_updated_success' => 'Shipment updated successfully.', - 'invalid_id' => 'Invalid ID', - 'back' => 'Back', - 'shipment_details' => 'Shipment Details', - 'origin_country' => 'Origin Country', - 'destination_country' => 'Destination Country', - 'select_country_placeholder' => 'Select Country', - 'select_city_placeholder' => 'Select City', - 'loading_cities' => 'Loading...', - 'error_loading_cities' => 'Error loading cities', - 'cancel' => 'Cancel', - 'my_profile' => 'My Profile', - 'profile_picture' => 'Profile Picture', - 'change_picture' => 'Change Picture', - 'picture_hint' => 'Click the camera icon to update.', - 'full_name' => 'Full Name', - 'email_address' => 'Email Address', - 'email_hint' => 'Email cannot be changed.', - 'account_role' => 'Account Role', - 'change_password' => 'Change Password', - 'new_password' => 'New Password', - 'confirm_password' => 'Confirm Password', - 'save_changes' => 'Save Changes', - 'passwords_do_not_match' => 'Passwords do not match.', - 'password_too_short' => 'Password must be at least 6 characters.', - 'profile_updated' => 'Profile updated successfully.', - 'password_updated' => 'Password updated successfully.', - 'upload_failed' => 'File upload failed.', - 'invalid_image' => 'Invalid image format. Allowed: JPG, PNG, GIF, WEBP.', - 'login_title' => 'Login', - 'login_subtitle' => 'Access your account', - 'forgot_password' => 'Forgot Password?', - 'email_placeholder' => 'name@example.com', - 'password_placeholder' => 'Enter your password', - 'sign_in' => 'Sign In', - 'dont_have_account' => 'Don\'t have an account?', - 'register_now' => 'Register Now', - 'reset_password_title' => 'Reset Password', - 'reset_password_subtitle' => 'Enter your email to receive a reset link', - 'send_reset_link' => 'Send Reset Link', - 'back_to_login' => 'Back to Login', - 'timezone' => 'Timezone', - 'whatsapp_settings' => 'WhatsApp Settings', - 'enable_whatsapp' => 'Enable WhatsApp Notifications', - 'wablas_domain' => 'Wablas Domain', - 'wablas_api_token' => 'Wablas API Token', - 'reg_title' => 'Registration', - 'reg_subtitle' => 'Create an account to get started', - 'reg_success_pending' => 'Registration successful. Your account is pending approval.', - 'reg_success' => 'Registration successful. You can now login.', - 'role' => 'Role', - 'shipper' => 'Shipper', - 'truck_owner' => 'Truck Owner', - 'email' => 'Email', - 'password' => 'Password', - 'phone' => 'Phone Number', - 'country' => 'Country', - 'select_country' => 'Select Country', - 'city' => 'City', - 'select_city' => 'Select City', - 'address' => 'Address', - 'shipper_details' => 'Shipper Details', - 'company_name' => 'Company Name', - 'truck_details' => 'Truck Details', - 'truck_type' => 'Truck Type', - 'load_capacity' => 'Load Capacity (Tons)', - 'plate_no' => 'Plate Number', - 'bank_account' => 'Bank Account Number', - 'bank_name' => 'Bank Name', - 'bank_branch' => 'Branch Name', - 'id_card_front' => 'ID Card (Front)', - 'id_card_back' => 'ID Card (Back)', - 'truck_reg_front' => 'Truck Registration (Front)', - 'truck_reg_back' => 'Truck Registration (Back)', - 'truck_picture' => 'Truck Picture', - 'create_account' => 'Create Account', - 'back_to_admin' => 'Back to Admin', - 'back_to_home' => 'Back to Home', - 'total_revenue' => 'Total Revenue', - 'shipments_analytics' => 'Shipments Analytics', - 'export_csv' => 'Export CSV', -), - "ar" => array ( - 'app_name' => 'CargoLink', - 'nav_home' => 'نظرة عامة', - 'nav_login' => 'تسجيل الدخول', - 'nav_shipper' => 'لوحة الشاحن', - 'nav_owner' => 'لوحة مالك الشاحنة', - 'nav_admin' => 'لوحة الإدارة', - 'nav_theme' => 'المظهر', - 'nav_get_started' => 'ابدأ الآن', - 'hero_title' => 'انقل شحنتك بسرعة مع شاحنات موثوقة.', - 'hero_subtitle' => 'أنشئ شحنة، استلم عروضاً، وادفع عبر ثواني أو التحويل البنكي.', - 'hero_tagline' => 'منصة لوجستية متعددة اللغات', - 'register_shipper' => 'التسجيل كشاحن', - 'register_owner' => 'التسجيل كمالك شاحنة', - 'cta_shipper' => 'إنشاء شحنة', - 'cta_owner' => 'البحث عن الشحنات', - 'cta_admin' => 'الدخول للإدارة', - 'stats_shipments' => 'الشحنات المنشورة', - 'stats_offers' => 'العروض الحالية', - 'stats_confirmed' => 'الرحلات المؤكدة', - 'section_workflow' => 'طريقة العمل', - 'recent_shipments' => 'أحدث الشحنات', - 'step_post' => 'يقوم الشاحن بإدخال تفاصيل الشحنة وطريقة الدفع.', - 'step_offer' => 'يرسل أصحاب الشاحنات أفضل عروضهم.', - 'step_confirm' => 'تؤكد الإدارة الحجز وتحدث الحالة.', - 'step_confirm_desc' => 'حجز آمن وتتبع التسليم حتى الانتهاء.', - 'shipper_dashboard' => 'لوحة الشاحن', - 'new_shipment' => 'إنشاء شحنة', - 'shipper_name' => 'اسم الشاحن', - 'shipper_company' => 'الشركة', - 'origin' => 'مدينة الانطلاق', - 'destination' => 'مدينة الوصول', - 'cargo' => 'وصف الحمولة', - 'cargo_placeholder' => 'مثال: 20 منصة إلكترونيات', - 'weight' => 'الوزن (طن)', - 'pickup_date' => 'تاريخ الاستلام', - 'delivery_date' => 'تاريخ التسليم', - 'payment_method' => 'طريقة الدفع', - 'payment_thawani' => 'الدفع الإلكتروني عبر ثواني', - 'payment_bank' => 'تحويل بنكي', - 'submit_shipment' => 'إرسال الشحنة', - 'shipments_list' => 'أحدث الشحنات', - 'status' => 'الحالة', - 'offer' => 'أفضل عرض', - 'actions' => 'إجراءات', - 'view' => 'عرض', - 'owner_dashboard' => 'لوحة مالك الشاحنة', - 'available_shipments' => 'الشحنات المتاحة', - 'offer_price' => 'سعر العرض', - 'offer_owner' => 'اسم مالك الشاحنة', - 'submit_offer' => 'إرسال العرض', - 'admin_dashboard' => 'لوحة الإدارة', - 'update_status' => 'تحديث الحالة', - 'save' => 'حفظ', - 'shipment_detail' => 'تفاصيل الشحنة', - 'created_at' => 'تم الإنشاء', - 'best_offer' => 'أفضل عرض', - 'assign_owner' => 'المالك المعتمد', - 'no_shipments' => 'لا توجد شحنات بعد. ابدأ بإنشاء أول شحنة.', - 'no_offers' => 'لا توجد عروض بعد.', - 'success_shipment' => 'تم نشر الشحنة بنجاح.', - 'success_offer' => 'تم إرسال العرض إلى الشاحن.', - 'success_status' => 'تم تحديث الحالة.', - 'error_required' => 'يرجى تعبئة جميع الحقول المطلوبة.', - 'error_invalid' => 'يرجى إدخال قيم صحيحة.', - 'status_posted' => 'منشورة', - 'status_offered' => 'بعرض', - 'status_confirmed' => 'مؤكدة', - 'status_in_transit' => 'قيد النقل', - 'status_delivered' => 'تم التسليم', - 'footer_note' => 'هذه هي النسخة الأولية. الدفع غير متصل بعد.', - 'marketing_title_1' => 'للشاحنين', - 'marketing_desc_1' => 'ابحث عن الشاحنة المناسبة لحمولتك بسرعة وأمان.', - 'marketing_title_2' => 'لأصحاب الشاحنات', - 'marketing_desc_2' => 'عظّم أرباحك وتجنب العودة فارغاً.', - 'motivation_phrase' => 'تمكين الخدمات اللوجستية للمستقبل.', - 'why_choose_us' => 'لماذا تختار كارجو لينك؟', - 'feature_1_title' => 'مطابقة سريعة', - 'feature_1_desc' => 'تواصل مع الشاحنات المتاحة في دقائق.', - 'feature_2_title' => 'مدفوعات آمنة', - 'feature_2_desc' => 'معاملاتك محمية بأعلى معايير الأمان.', - 'feature_3_title' => 'مستخدمون موثوقون', - 'feature_3_desc' => 'نقوم بالتحقق من جميع أصحاب الشاحنات لضمان راحتك.', - 'view_faq' => 'عرض الأسئلة الشائعة', - 'faq_title' => 'لديك أسئلة؟', - 'faq_subtitle' => 'اطلع على الأسئلة الشائعة لمعرفة المزيد حول كيفية عمل منصتنا.', - 'motivation_title' => 'هل أنت مستعد لتحويل خدماتك اللوجستية؟', - 'motivation_subtitle' => 'انضم إلى منصتنا اليوم للعثور على شاحنات موثوقة أو تأمين أفضل الشحنات في السوق.', - 'company' => 'الشركة', - 'about_us' => 'معلومات عنا', - 'careers' => 'الوظائف', - 'contact' => 'اتصل بنا', - 'resources' => 'الموارد', - 'help_center' => 'مركز المساعدة / الأسئلة الشائعة', - 'terms_of_service' => 'شروط الخدمة', - 'privacy_policy' => 'سياسة الخصوصية', - 'language' => 'اللغة', - 'all_rights_reserved' => 'جميع الحقوق محفوظة.', - 'dashboard' => 'لوحة القيادة', - 'shipments' => 'الشحنات', - 'reports' => 'التقارير', - 'summary_report' => 'تقرير ملخص', - 'shipments_by_origin_country' => 'الشحنات حسب بلد المنشأ', - 'shipments_by_dest_country' => 'الشحنات حسب بلد الوجهة', - 'shipments_by_origin_city' => 'الشحنات حسب مدينة المنشأ', - 'shipments_by_dest_city' => 'الشحنات حسب مدينة الوجهة', - 'shipments_by_shipper' => 'الشحنات حسب الشاحن', - 'generated' => 'تم الإنشاء', - 'report_type' => 'نوع التقرير', - 'period' => 'الفترة', - 'analyze_performance' => 'تحليل أداء المنصة والمقاييس.', - 'print' => 'طباعة', - 'start_date' => 'تاريخ البدء', - 'end_date' => 'تاريخ الانتهاء', - 'apply_filter' => 'تطبيق الفلتر', - 'no_paid_shipments' => 'لم يتم العثور على شحنات مدفوعة لهذه الفترة.', - 'name' => 'الاسم', - 'total_amount' => 'المبلغ الإجمالي', - 'profit' => 'الربح', - 'total_label' => 'المجموع', - 'printed_by' => 'طبع بواسطة', - 'analytics' => 'التحليلات', - 'shipper_shipments' => 'شحنات الشاحنين', - 'truck_owners_statements' => 'كشوف حساب أصحاب الشاحنات', - 'nav_platform_users' => 'مستخدمو المنصة', - 'settings' => 'الإعدادات', - 'company_setting' => 'إعدادات الشركة', - 'integrations' => 'التكاملات', - 'notification_templates' => 'قوالب الإشعارات', - 'locations' => 'المواقع', - 'countries' => 'البلدان', - 'cities' => 'المدن', - 'users' => 'المستخدمون', - 'shippers' => 'الشاحنون', - 'truck_owners' => 'أصحاب الشاحنات', - 'user_registration' => 'تسجيل المستخدم', - 'pages' => 'الصفحات', - 'faqs' => 'الأسئلة الشائعة', - 'landing_pages' => 'إعدادات الصفحة الرئيسية', - 'edit_homepage' => 'تعديل محتوى الصفحة الرئيسية والأقسام', - 'view_details' => 'عرض التفاصيل', - 'manage_shippers' => 'إدارة الشاحنين', - 'manage_registered_shippers' => 'إدارة الشاحنين المسجلين.', - 'search_placeholder_shipper' => 'ابحث بالاسم، البريد، الشركة...', - 'all_statuses' => 'كل الحالات', - 'pending' => 'قيد الانتظار', - 'rejected' => 'مرفوض', - 'active' => 'نشط', - 'no_shippers_criteria' => 'لم يتم العثور على شاحنين مطابقين لمعاييرك.', - 'no_shippers_registered' => 'لا يوجد شاحنين مسجلين بعد.', - 'name_company' => 'الاسم / الشركة', - 'location' => 'الموقع', - 'edit_shipper' => 'تعديل الشاحن', - 'approve' => 'موافقة', - 'reject' => 'رفض', - 'delete' => 'حذف', - 'delete_confirm_shipper' => 'هل أنت متأكد من حذف هذا الشاحن نهائياً؟', - 'loading' => 'جاري التحميل...', - 'manage_truck_owners' => 'إدارة أصحاب الشاحنات', - 'review_registrations' => 'مراجعة التسجيلات والموافقة على أصحاب الشاحنات.', - 'search_placeholder_owner' => 'ابحث بالاسم، البريد، اللوحة...', - 'no_owners_criteria' => 'لم يتم العثور على أصحاب شاحنات مطابقين لمعاييرك.', - 'no_owners_registered' => 'لا يوجد أصحاب شاحنات مسجلين بعد.', - 'name_email' => 'الاسم / البريد', - 'truck_info' => 'معلومات الشاحنة', - 'documents' => 'المستندات', - 'view_docs' => 'عرض المستندات', - 'edit_owner' => 'تعديل المالك', - 'delete_confirm_owner' => 'هل أنت متأكد من حذف مالك الشاحنة هذا نهائياً؟', - 'docs_for' => 'مستندات', - 'truck_reg' => 'تسجيل الشاحنة', - 'no_picture' => 'لا توجد صورة محملة.', - 'cap' => 'السعة', - 'manage_shipments' => 'إدارة الشحنات', - 'shipments_header' => 'الشحنات', - 'shipments_subtitle' => 'إدارة جميع الشحنات عبر المنصة.', - 'flash_shipment_deleted' => 'تم حذف الشحنة بنجاح.', - 'search_shipments_placeholder' => 'البحث في الشحنات...', - 'search_label' => 'بحث', - 'sort_by' => 'ترتيب حسب', - 'sort_newest' => 'الأحدث أولاً', - 'sort_oldest' => 'الأقدم أولاً', - 'sort_pickup_soonest' => 'تاريخ الاستلام (الأقرب)', - 'sort_pickup_latest' => 'تاريخ الاستلام (الأبعد)', - 'no_shipments_found_criteria' => 'لم يتم العثور على شحنات مطابقة لمعايير البحث.', - 'no_shipments_platform' => 'لا توجد شحنات على المنصة بعد.', - 'id_col' => 'المعرف', - 'dates_col' => 'التواريخ', - 'from_label' => 'من:', - 'to_label' => 'إلى:', - 'pick_label' => 'استلام:', - 'drop_label' => 'تسليم:', - 'view_shipment' => 'عرض الشحنة', - 'edit_shipment_tooltip' => 'تعديل الشحنة', - 'confirm_delete_shipment' => 'حذف هذه الشحنة؟', - 'showing' => 'عرض', - 'of' => 'من', - 'previous' => 'السابق', - 'next' => 'التالي', - 'error_occurred' => 'حدث خطأ', - 'failed_load_form' => 'فشل تحميل النموذج.', - 'edit_shipment_title' => 'تعديل الشحنة #', - 'update_shipment_details' => 'تحديث تفاصيل الشحنة والحالة.', - 'shipment_not_found' => 'الشحنة غير موجودة', - 'shipment_updated_success' => 'تم تحديث الشحنة بنجاح.', - 'invalid_id' => 'معرف غير صحيح', - 'back' => 'رجوع', - 'shipment_details' => 'تفاصيل الشحنة', - 'origin_country' => 'بلد الانطلاق', - 'destination_country' => 'بلد الوصول', - 'select_country_placeholder' => 'اختر البلد', - 'select_city_placeholder' => 'اختر المدينة', - 'loading_cities' => 'جاري التحميل...', - 'error_loading_cities' => 'خطأ في تحميل المدن', - 'cancel' => 'إلغاء', - 'my_profile' => 'ملفي الشخصي', - 'profile_picture' => 'صورة الملف الشخصي', - 'change_picture' => 'تغيير الصورة', - 'picture_hint' => 'انقر على أيقونة الكاميرا للتحديث.', - 'full_name' => 'الاسم الكامل', - 'email_address' => 'البريد الإلكتروني', - 'email_hint' => 'لا يمكن تغيير البريد الإلكتروني.', - 'account_role' => 'نوع الحساب', - 'change_password' => 'تغيير كلمة المرور', - 'new_password' => 'كلمة المرور الجديدة', - 'confirm_password' => 'تأكيد كلمة المرور', - 'save_changes' => 'حفظ التغييرات', - 'passwords_do_not_match' => 'كلمات المرور غير متطابقة.', - 'password_too_short' => 'يجب أن تكون كلمة المرور 6 أحرف على الأقل.', - 'profile_updated' => 'تم تحديث الملف الشخصي بنجاح.', - 'password_updated' => 'تم تحديث كلمة المرور بنجاح.', - 'upload_failed' => 'فشل تحميل الملف.', - 'invalid_image' => 'تنسيق الصورة غير صالح. المسموح: JPG, PNG, GIF, WEBP.', - 'login_title' => 'تسجيل الدخول', - 'login_subtitle' => 'الدخول إلى حسابك', - 'forgot_password' => 'نسيت كلمة المرور؟', - 'email_placeholder' => 'name@example.com', - 'password_placeholder' => 'أدخل كلمة المرور', - 'sign_in' => 'تسجيل الدخول', - 'dont_have_account' => 'ليس لديك حساب؟', - 'register_now' => 'سجل الآن', - 'reset_password_title' => 'إعادة تعيين كلمة المرور', - 'reset_password_subtitle' => 'أدخل بريدك الإلكتروني لتلقي رابط إعادة التعيين', - 'send_reset_link' => 'إرسال رابط إعادة التعيين', - 'back_to_login' => 'العودة لتسجيل الدخول', - 'timezone' => 'المنطقة الزمنية', - 'whatsapp_settings' => 'إعدادات واتساب', - 'enable_whatsapp' => 'تفعيل إشعارات واتساب', - 'wablas_domain' => 'نطاق Wablas', - 'wablas_api_token' => 'رمز API لـ Wablas', - 'reg_title' => 'إنشاء حساب جديد', - 'reg_subtitle' => 'أنشئ حساباً للبدء', - 'reg_success_pending' => 'تم التسجيل بنجاح. حسابك بانتظار الموافقة.', - 'reg_success' => 'تم التسجيل بنجاح. يمكنك تسجيل الدخول الآن.', - 'role' => 'نوع الحساب', - 'shipper' => 'شاحن', - 'truck_owner' => 'مالك شاحنة', - 'email' => 'البريد الإلكتروني', - 'password' => 'كلمة المرور', - 'phone' => 'رقم الهاتف', - 'country' => 'الدولة', - 'select_country' => 'اختر الدولة', - 'city' => 'المدينة', - 'select_city' => 'اختر المدينة', - 'address' => 'العنوان', - 'shipper_details' => 'تفاصيل الشاحن', - 'company_name' => 'اسم الشركة', - 'truck_details' => 'تفاصيل الشاحنة', - 'truck_type' => 'نوع الشاحنة', - 'load_capacity' => 'سعة الحمولة (طن)', - 'plate_no' => 'رقم اللوحة', - 'bank_account' => 'رقم الحساب البنكي', - 'bank_name' => 'اسم البنك', - 'bank_branch' => 'اسم الفرع', - 'id_card_front' => 'البطاقة الشخصية (أمام)', - 'id_card_back' => 'البطاقة الشخصية (خلف)', - 'truck_reg_front' => 'ملكية الشاحنة (أمام)', - 'truck_reg_back' => 'ملكية الشاحنة (خلف)', - 'truck_picture' => 'صورة الشاحنة', - 'create_account' => 'إنشاء حساب', - 'back_to_admin' => 'العودة للإدارة', - 'back_to_home' => 'العودة للرئيسية', - 'total_revenue' => 'إجمالي الإيرادات', - 'shipments_analytics' => 'تحليلات الشحنات', - 'export_csv' => 'تصدير CSV', -) + 'en' => [ + 'nav_home' => 'Home', + 'nav_dashboard' => 'Dashboard', + 'nav_login' => 'Login', + 'nav_logout' => 'Logout', + 'nav_register' => 'Register', + 'welcome' => 'Welcome to Logistics Platform', + 'hero_title' => 'Fast & Reliable Logistics', + 'hero_subtitle' => 'Connecting shippers and truck owners seamlessly.', + 'track_shipment' => 'Track Shipment', + 'enter_tracking' => 'Enter Tracking ID', + 'footer_rights' => 'All rights reserved.', + 'login_title' => 'Login', + 'email_label' => 'Email Address', + 'password_label' => 'Password', + 'login_btn' => 'Sign In', + 'register_link' => "Don't have an account? Register here.", + 'dashboard_title' => 'Dashboard', + 'post_shipment' => 'Post New Shipment', + 'recent_shipments' => 'Recent Shipments', + 'status' => 'Status', + 'actions' => 'Actions', + 'view_details' => 'View Details', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'profile' => 'Profile', + 'settings' => 'Settings', + 'my_shipments' => 'My Shipments', + 'find_trucks' => 'Find Trucks', + 'contact_us' => 'Contact Us', + 'about_us' => 'About Us', + 'privacy_policy' => 'Privacy Policy', + 'terms_conditions' => 'Terms & Conditions', + 'admin_panel' => 'Admin Panel', + 'users' => 'Users', + 'reports' => 'Reports', + 'logout_confirm' => 'Are you sure you want to logout?', + 'yes' => 'Yes', + 'no' => 'No', + 'cancel' => 'Cancel', + 'save' => 'Save', + 'update' => 'Update', + 'created_at' => 'Created At', + 'updated_at' => 'Updated At', + 'id' => 'ID', + 'name' => 'Name', + 'role' => 'Role', + 'approved' => 'Approved', + 'pending' => 'Pending', + 'rejected' => 'Rejected', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'success_message' => 'Operation successful.', + 'error_message' => 'An error occurred. Please try again.', + 'manage_shipments' => 'Manage Shipments', + 'manage_users' => 'Manage Users', + 'manage_trucks' => 'Manage Trucks', + 'truck_owner' => 'Truck Owner', + 'shipper' => 'Shipper', + 'admin' => 'Admin', + 'notifications' => 'Notifications', + 'mark_read' => 'Mark as Read', + 'view_all' => 'View All', + 'new_shipment_alert' => 'New shipment posted!', + 'shipment_update_alert' => 'Shipment status updated.', + 'offer_received' => 'New offer received.', + 'offer_accepted' => 'Offer accepted.', + 'offer_rejected' => 'Offer rejected.', + 'payment_received' => 'Payment received.', + 'payment_pending' => 'Payment pending.', + 'payment_failed' => 'Payment failed.', + 'search' => 'Search...', + 'filter' => 'Filter', + 'sort_by' => 'Sort By', + 'date' => 'Date', + 'price' => 'Price', + 'loading' => 'Loading...', + 'no_data' => 'No data available.', + 'unauthorized' => 'Unauthorized access.', + 'page_not_found' => 'Page not found.', + 'server_error' => 'Internal Server Error.', + 'go_back' => 'Go Back', + 'home_btn' => 'Go Home', + 'reset_password' => 'Reset Password', + 'forgot_password' => 'Forgot Password?', + 'send_link' => 'Send Reset Link', + 'password_reset_sent' => 'Password reset link sent to your email.', + 'password_changed' => 'Password changed successfully.', + 'confirm_password' => 'Confirm Password', + 'current_password' => 'Current Password', + 'new_password' => 'New Password', + 'change_password' => 'Change Password', + 'personal_info' => 'Personal Information', + 'company_info' => 'Company Information', + 'truck_info' => 'Truck Information', + 'documents' => 'Documents', + 'upload_doc' => 'Upload Document', + 'download' => 'Download', + 'file_too_large' => 'File is too large.', + 'invalid_file_type' => 'Invalid file type.', + 'upload_success' => 'File uploaded successfully.', + 'delete_confirm' => 'Are you sure you want to delete this?', + 'deleted_success' => 'Deleted successfully.', + 'feature_not_available' => 'Feature not available yet.', + 'coming_soon' => 'Coming Soon', + 'contact_support' => 'Contact Support', + 'faq' => 'FAQ', + 'language' => 'Language', + 'english' => 'English', + 'arabic' => 'Arabic', + 'switch_lang' => 'Switch Language', + 'dark_mode' => 'Dark Mode', + 'light_mode' => 'Light Mode', + 'notifications_settings' => 'Notification Settings', + 'email_notif' => 'Email Notifications', + 'sms_notif' => 'SMS Notifications', + 'push_notif' => 'Push Notifications', + 'enable' => 'Enable', + 'disable' => 'Disable', + 'account_settings' => 'Account Settings', + 'delete_account' => 'Delete Account', + 'delete_account_warning' => 'This action is irreversible.', + 'feedback' => 'Feedback', + 'rate_us' => 'Rate Us', + 'copyright' => 'Copyright © ' . date('Y'), + 'powered_by' => 'Powered by Logistics Platform', + 'terms_of_service' => 'Terms of Service', + 'cookie_policy' => 'Cookie Policy', + 'careers' => 'Careers', + 'blog' => 'Blog', + 'partners' => 'Partners', + 'help_center' => 'Help Center', + 'how_it_works' => 'How It Works', + 'pricing' => 'Pricing', + 'get_started' => 'Get Started', + 'learn_more' => 'Learn More', + 'demo' => 'Request Demo', + 'subscribe' => 'Subscribe', + 'newsletter' => 'Newsletter', + 'enter_email' => 'Enter your email', + 'invalid_email' => 'Invalid email address.', + 'message_sent' => 'Message sent successfully.', + 'thank_you' => 'Thank you!', + '404_msg' => 'The page you are looking for does not exist.', + '500_msg' => 'Something went wrong on our end.', + 'maintenance_msg' => 'System is under maintenance. Please try again later.', + 'session_expired' => 'Session expired. Please login again.', + 'login_required' => 'Login required to access this page.', + 'access_denied' => 'Access denied.', + 'csrf_error' => 'Invalid security token. Please refresh and try again.', + 'validation_error' => 'Please correct the errors below.', + 'required_field' => 'This field is required.', + 'min_length' => 'Minimum length is %s characters.', + 'max_length' => 'Maximum length is %s characters.', + 'numeric_only' => 'Only numbers are allowed.', + 'alpha_only' => 'Only letters are allowed.', + 'alphanumeric_only' => 'Only letters and numbers are allowed.', + 'email_exists' => 'Email already exists.', + 'username_exists' => 'Username already exists.', + 'password_mismatch' => 'Passwords do not match.', + 'invalid_credentials' => 'Invalid email or password.', + 'account_locked' => 'Account is locked. Please contact support.', + 'too_many_attempts' => 'Too many login attempts. Please try again later.', + 'verify_email' => 'Please verify your email address.', + 'email_verified' => 'Email verified successfully.', + 'verification_link_sent' => 'Verification link sent.', + 'invalid_token' => 'Invalid or expired token.', + 'token_expired' => 'Token has expired.', + 'resend_verification' => 'Resend Verification Email', + 'dashboard_overview' => 'Overview', + 'total_shipments' => 'Total Shipments', + 'active_trucks' => 'Active Trucks', + 'pending_approvals' => 'Pending Approvals', + 'revenue' => 'Revenue', + 'recent_activity' => 'Recent Activity', + 'view_all_shipments' => 'View All Shipments', + 'view_all_users' => 'View All Users', + 'add_new' => 'Add New', + 'export' => 'Export', + 'import' => 'Import', + 'print' => 'Print', + 'copy' => 'Copy', + 'csv' => 'CSV', + 'excel' => 'Excel', + 'pdf' => 'PDF', + 'search_results' => 'Search Results', + 'no_results' => 'No results found.', + 'showing_entries' => 'Showing %s to %s of %s entries', + 'next_page' => 'Next', + 'prev_page' => 'Previous', + 'first_page' => 'First', + 'last_page' => 'Last', + 'apply' => 'Apply', + 'clear' => 'Clear', + 'filter_by' => 'Filter by', + 'status_all' => 'All Statuses', + 'role_all' => 'All Roles', + 'date_range' => 'Date Range', + 'today' => 'Today', + 'yesterday' => 'Yesterday', + 'last_7_days' => 'Last 7 Days', + 'last_30_days' => 'Last 30 Days', + 'this_month' => 'This Month', + 'last_month' => 'Last Month', + 'custom_range' => 'Custom Range', + 'start_date' => 'Start Date', + 'end_date' => 'End Date', + 'to' => 'to', + 'from' => 'From', + 'subject' => 'Subject', + 'message' => 'Message', + 'send_message' => 'Send Message', + 'reply' => 'Reply', + 'forward' => 'Forward', + 'mark_unread' => 'Mark as Unread', + 'delete_selected' => 'Delete Selected', + 'archive' => 'Archive', + 'spam' => 'Spam', + 'trash' => 'Trash', + 'compose' => 'Compose', + 'inbox' => 'Inbox', + 'sent' => 'Sent', + 'drafts' => 'Drafts', + 'important' => 'Important', + 'starred' => 'Starred', + 'labels' => 'Labels', + 'add_label' => 'Add Label', + 'remove_label' => 'Remove Label', + 'color' => 'Color', + 'description' => 'Description', + 'edit_profile' => 'Edit Profile', + 'change_avatar' => 'Change Avatar', + 'bio' => 'Bio', + 'location' => 'Location', + 'website' => 'Website', + 'social_links' => 'Social Links', + 'facebook' => 'Facebook', + 'twitter' => 'Twitter', + 'linkedin' => 'LinkedIn', + 'instagram' => 'Instagram', + 'youtube' => 'YouTube', + 'github' => 'GitHub', + 'save_changes' => 'Save Changes', + 'discard_changes' => 'Discard Changes', + 'unsaved_changes' => 'You have unsaved changes.', + 'stay_on_page' => 'Stay on Page', + 'leave_page' => 'Leave Page', + 'confirm_action' => 'Confirm Action', + 'action_cannot_undone' => 'This action cannot be undone.', + 'type_confirm' => 'Type "CONFIRM" to proceed.', + 'notifications_permission' => 'Allow notifications?', + 'allow' => 'Allow', + 'deny' => 'Deny', + 'location_permission' => 'Allow location access?', + 'camera_permission' => 'Allow camera access?', + 'mic_permission' => 'Allow microphone access?', + 'cookie_consent' => 'We use cookies to improve your experience.', + 'accept_all' => 'Accept All', + 'reject_all' => 'Reject All', + 'customize' => 'Customize', + 'preferences' => 'Preferences', + 'general' => 'General', + 'security' => 'Security', + 'billing' => 'Billing', + 'integrations' => 'Integrations', + 'api_keys' => 'API Keys', + 'generate_key' => 'Generate Key', + 'revoke_key' => 'Revoke Key', + 'webhook_url' => 'Webhook URL', + 'secret_key' => 'Secret Key', + 'documentation' => 'Documentation', + 'support_ticket' => 'Support Ticket', + 'open_ticket' => 'Open Ticket', + 'ticket_id' => 'Ticket ID', + 'priority' => 'Priority', + 'low' => 'Low', + 'medium' => 'Medium', + 'high' => 'High', + 'critical' => 'Critical', + 'status_open' => 'Open', + 'status_closed' => 'Closed', + 'status_pending' => 'Pending', + 'last_reply' => 'Last Reply', + 'assigned_to' => 'Assigned To', + 'created_by' => 'Created By', + 'resolved_at' => 'Resolved At', + 'closed_at' => 'Closed At', + 'reopen' => 'Reopen', + 'close' => 'Close', + 'add_comment' => 'Add Comment', + 'attach_file' => 'Attach File', + 'max_size' => 'Max size: %s', + 'allowed_types' => 'Allowed types: %s', + 'drag_drop' => 'Drag and drop files here', + 'browse' => 'Browse', + 'uploading' => 'Uploading...', + 'completed' => 'Completed', + 'failed' => 'Failed', + 'retry' => 'Retry', + 'cancel_upload' => 'Cancel Upload', + 'remove' => 'Remove', + 'preview' => 'Preview', + 'zoom_in' => 'Zoom In', + 'zoom_out' => 'Zoom Out', + 'rotate' => 'Rotate', + 'fullscreen' => 'Fullscreen', + 'print_preview' => 'Print Preview', + 'download_pdf' => 'Download PDF', + 'share' => 'Share', + 'copy_link' => 'Copy Link', + 'email_link' => 'Email Link', + 'embed' => 'Embed', + 'qrcode' => 'QR Code', + 'scan_qrcode' => 'Scan QR Code', + 'auth_code' => 'Authentication Code', + '2fa' => 'Two-Factor Authentication', + 'setup_2fa' => 'Setup 2FA', + 'disable_2fa' => 'Disable 2FA', + 'enter_code' => 'Enter Code', + 'backup_codes' => 'Backup Codes', + 'generate_codes' => 'Generate Codes', + 'print_codes' => 'Print Codes', + 'recovery_email' => 'Recovery Email', + 'verify_phone' => 'Verify Phone Number', + 'sms_code' => 'SMS Code', + 'resend_code' => 'Resend Code', + 'code_sent' => 'Code sent.', + 'phone_verified' => 'Phone verified.', + 'country_code' => 'Country Code', + 'phone_number' => 'Phone Number', + 'address_line1' => 'Address Line 1', + 'address_line2' => 'Address Line 2', + 'city_state' => 'City/State', + 'postal_code' => 'Postal Code', + 'country_region' => 'Country/Region', + 'billing_address' => 'Billing Address', + 'shipping_address' => 'Shipping Address', + 'same_as_billing' => 'Same as billing address', + 'add_address' => 'Add Address', + 'edit_address' => 'Edit Address', + 'delete_address' => 'Delete Address', + 'default_address' => 'Default Address', + 'set_default' => 'Set as Default', + 'payment_method' => 'Payment Method', + 'credit_card' => 'Credit Card', + 'paypal' => 'PayPal', + 'bank_transfer' => 'Bank Transfer', + 'cash_on_delivery' => 'Cash on Delivery', + 'card_number' => 'Card Number', + 'expiry_date' => 'Expiry Date', + 'cvv' => 'CVV', + 'card_holder' => 'Card Holder Name', + 'save_card' => 'Save card for future use', + 'transaction_history' => 'Transaction History', + 'invoice' => 'Invoice', + 'receipt' => 'Receipt', + 'amount' => 'Amount', + 'currency' => 'Currency', + 'tax' => 'Tax', + 'discount' => 'Discount', + 'subtotal' => 'Subtotal', + 'total' => 'Total', + 'promo_code' => 'Promo Code', + 'apply_code' => 'Apply Code', + 'invalid_code' => 'Invalid promo code.', + 'checkout' => 'Checkout', + 'place_order' => 'Place Order', + 'order_summary' => 'Order Summary', + 'cart' => 'Cart', + 'empty_cart' => 'Your cart is empty.', + 'continue_shopping' => 'Continue Shopping', + 'add_to_cart' => 'Add to Cart', + 'remove_from_cart' => 'Remove from Cart', + 'update_cart' => 'Update Cart', + 'quantity' => 'Quantity', + 'unit_price' => 'Unit Price', + 'total_price' => 'Total Price', + 'product_details' => 'Product Details', + 'specifications' => 'Specifications', + 'reviews' => 'Reviews', + 'write_review' => 'Write a Review', + 'rating' => 'Rating', + 'stars' => 'Stars', + 'related_products' => 'Related Products', + 'wishlist' => 'Wishlist', + 'add_to_wishlist' => 'Add to Wishlist', + 'remove_from_wishlist' => 'Remove from Wishlist', + 'compare' => 'Compare', + 'add_to_compare' => 'Add to Compare', + 'clear_compare' => 'Clear Compare', + 'compare_products' => 'Compare Products', + 'category' => 'Category', + 'brand' => 'Brand', + 'model' => 'Model', + 'sku' => 'SKU', + 'availability' => 'Availability', + 'in_stock' => 'In Stock', + 'out_of_stock' => 'Out of Stock', + 'pre_order' => 'Pre-Order', + 'limited_stock' => 'Limited Stock', + 'new_arrival' => 'New Arrival', + 'best_seller' => 'Best Seller', + 'featured' => 'Featured', + 'sale' => 'Sale', + 'hot' => 'Hot', + 'deal_of_day' => 'Deal of the Day', + 'timer_end' => 'Offer ends in', + 'days' => 'Days', + 'hours' => 'Hours', + 'minutes' => 'Minutes', + 'seconds' => 'Seconds', + 'subscribe_text' => 'Subscribe to our newsletter for latest updates.', + 'follow_us' => 'Follow Us', + 'app_download' => 'Download App', + 'app_store' => 'App Store', + 'google_play' => 'Google Play', + 'secure_payment' => 'Secure Payment', + 'fast_delivery' => 'Fast Delivery', + '24_7_support' => '24/7 Support', + 'money_back' => 'Money Back Guarantee', + 'easy_returns' => 'Easy Returns', + 'gift_cards' => 'Gift Cards', + 'track_order' => 'Track Order', + 'order_id' => 'Order ID', + 'shipping_info' => 'Shipping Info', + 'billing_info' => 'Billing Info', + 'order_status' => 'Order Status', + 'processing' => 'Processing', + 'shipped' => 'Shipped', + 'delivered' => 'Delivered', + 'cancelled' => 'Cancelled', + 'returned' => 'Returned', + 'refunded' => 'Refunded', + 'return_policy' => 'Return Policy', + 'shipping_policy' => 'Shipping Policy', + 'sitemap' => 'Sitemap', + 'accessibility' => 'Accessibility', + 'accessibility_statement' => 'Accessibility Statement', + 'skip_to_content' => 'Skip to Content', + 'high_contrast' => 'High Contrast', + 'text_size' => 'Text Size', + 'increase' => 'Increase', + 'decrease' => 'Decrease', + 'reset' => 'Reset', + 'print_page' => 'Print Page', + 'read_aloud' => 'Read Aloud', + 'stop' => 'Stop', + 'pause' => 'Pause', + 'resume' => 'Resume', + 'mute' => 'Mute', + 'unmute' => 'Unmute', + 'volume' => 'Volume', + 'speed' => 'Speed', + 'normal' => 'Normal', + 'fast' => 'Fast', + 'slow' => 'Slow', + 'captions' => 'Captions', + 'subtitles' => 'Subtitles', + 'audio_desc' => 'Audio Description', + 'keyboard_shortcuts' => 'Keyboard Shortcuts', + 'help' => 'Help', + 'close_menu' => 'Close Menu', + 'open_menu' => 'Open Menu', + 'menu' => 'Menu', + 'navigation' => 'Navigation', + 'breadcrumbs' => 'Breadcrumbs', + 'pagination' => 'Pagination', + 'modal' => 'Modal', + 'dialog' => 'Dialog', + 'tooltip' => 'Tooltip', + 'popover' => 'Popover', + 'alert' => 'Alert', + 'notification' => 'Notification', + 'toast' => 'Toast', + 'banner' => 'Banner', + 'sidebar' => 'Sidebar', + 'footer' => 'Footer', + 'header' => 'Header', + 'main_content' => 'Main Content', + 'admin_dashboard_title' => 'Admin Dashboard', + 'wablas_server_url' => 'Wablas Server URL', + 'wablas_api_token' => 'Wablas API Token', + 'reg_title' => 'Create Account', + 'reg_subtitle' => 'Sign up to get started', + 'reg_success_pending' => 'Registration successful. Your account is pending approval.', + 'reg_success' => 'Registration successful. You can now login.', + 'role' => 'Role', + 'shipper' => 'Shipper', + 'truck_owner' => 'Truck Owner', + 'email' => 'Email', + 'password' => 'Password', + 'phone' => 'Phone', + 'country' => 'Country', + 'select_country' => 'Select Country', + 'city' => 'City', + 'select_city' => 'Select City', + 'address' => 'Address', + 'shipper_details' => 'Shipper Details', + 'company_name' => 'Company Name', + 'truck_details' => 'Truck Details', + 'truck_type' => 'Truck Type', + 'load_capacity' => 'Load Capacity (Tons)', + 'plate_no' => 'Plate Number', + 'bank_account' => 'Bank Account', + 'bank_name' => 'Bank Name', + 'bank_branch' => 'Branch Name', + 'id_card_front' => 'ID Card (Front)', + 'id_card_back' => 'ID Card (Back)', + 'truck_reg_front' => 'Truck Registration (Front)', + 'truck_reg_back' => 'Truck Registration (Back)', + 'truck_picture' => 'Truck Picture', + 'create_account' => 'Create Account', + 'back_to_admin' => 'Back to Admin', + 'back_to_home' => 'Back to Home', + 'total_revenue' => 'Total Revenue', + 'shipments_analytics' => 'Shipments Analytics', + 'export_csv' => 'Export CSV', + 'status_posted' => 'Posted', + 'status_offered' => 'Offered', + 'status_confirmed' => 'Confirmed', + 'status_in_transit' => 'In Transit', + 'status_delivered' => 'Delivered', + 'status_pending' => 'Pending', + 'status_active' => 'Active', + 'status_rejected' => 'Rejected', + 'status_unpaid' => 'Unpaid', + 'status_paid' => 'Paid', + 'payment_thawani' => 'Thawani', + 'payment_bank' => 'Bank Transfer', + 'currency_symbol' => 'OMR', + 'total_shippers' => 'Total Shippers', + 'active_shipments' => 'Active Shipments', + 'total_truck_owners' => 'Total Truck Owners', + 'admin_dashboard' => 'Admin Dashboard', + 'overview_performance' => 'Overview & Performance', + 'no_shipments' => 'No shipments found.', + 'shipment' => 'Shipment', + 'route' => 'Route', + 'action' => 'Action', + 'manage_countries' => 'Manage Countries', + 'add_remove_countries' => 'Add/Remove Countries', + 'manage_cities' => 'Manage Cities', + 'configure_cities' => 'Configure Cities', + 'register_user' => 'Register User', + 'manually_onboard' => 'Manually Onboard User', + 'company_profile' => 'Company Profile', + 'update_branding' => 'Update Branding', + 'summary_report' => 'Summary Report', + 'view_analytics' => 'View Analytics' + ], + 'ar' => [ + 'nav_home' => 'الرئيسية', + 'nav_dashboard' => 'لوحة التحكم', + 'nav_login' => 'تسجيل الدخول', + 'nav_logout' => 'تسجيل الخروج', + 'nav_register' => 'تسجيل جديد', + 'welcome' => 'مرحباً بك في منصة الخدمات اللوجستية', + 'hero_title' => 'خدمات لوجستية سريعة وموثوقة', + 'hero_subtitle' => 'نربط الشاحنين وأصحاب الشاحنات بسلاسة.', + 'track_shipment' => 'تتبع الشحنة', + 'enter_tracking' => 'أدخل رقم التتبع', + 'footer_rights' => 'جميع الحقوق محفوظة.', + 'login_title' => 'تسجيل الدخول', + 'email_label' => 'البريد الإلكتروني', + 'password_label' => 'كلمة المرور', + 'login_btn' => 'دخول', + 'register_link' => 'ليس لديك حساب؟ سجل هنا.', + 'dashboard_title' => 'لوحة التحكم', + 'post_shipment' => 'نشر شحنة جديدة', + 'recent_shipments' => 'الشحنات الأخيرة', + 'status' => 'الحالة', + 'actions' => 'الإجراءات', + 'view_details' => 'عرض التفاصيل', + 'edit' => 'تعديل', + 'delete' => 'حذف', + 'profile' => 'الملف الشخصي', + 'settings' => 'الإعدادات', + 'my_shipments' => 'شحناتي', + 'find_trucks' => 'البحث عن شاحنات', + 'contact_us' => 'اتصل بنا', + 'about_us' => 'من نحن', + 'privacy_policy' => 'سياسة الخصوصية', + 'terms_conditions' => 'الشروط والأحكام', + 'admin_panel' => 'لوحة الإدارة', + 'users' => 'المستخدمين', + 'reports' => 'التقارير', + 'logout_confirm' => 'هل أنت متأكد من تسجيل الخروج؟', + 'yes' => 'نعم', + 'no' => 'لا', + 'cancel' => 'إلغاء', + 'save' => 'حفظ', + 'update' => 'تحديث', + 'created_at' => 'تاريخ الإنشاء', + 'updated_at' => 'تاريخ التحديث', + 'id' => 'المعرف', + 'name' => 'الاسم', + 'role' => 'الدور', + 'approved' => 'مقبول', + 'pending' => 'قيد الانتظار', + 'rejected' => 'مرفوض', + 'active' => 'نشط', + 'inactive' => 'غير نشط', + 'success_message' => 'تمت العملية بنجاح.', + 'error_message' => 'حدث خطأ. يرجى المحاولة مرة أخرى.', + 'manage_shipments' => 'إدارة الشحنات', + 'manage_users' => 'إدارة المستخدمين', + 'manage_trucks' => 'إدارة الشاحنات', + 'truck_owner' => 'مالك شاحنة', + 'shipper' => 'شاحن', + 'admin' => 'مسؤول', + 'notifications' => 'الإشعارات', + 'mark_read' => 'تحديد كمقروء', + 'view_all' => 'عرض الكل', + 'new_shipment_alert' => 'تم نشر شحنة جديدة!', + 'shipment_update_alert' => 'تم تحديث حالة الشحنة.', + 'offer_received' => 'تم استلام عرض جديد.', + 'offer_accepted' => 'تم قبول العرض.', + 'offer_rejected' => 'تم رفض العرض.', + 'payment_received' => 'تم استلام الدفعة.', + 'payment_pending' => 'الدفعة معلقة.', + 'payment_failed' => 'فشلت عملية الدفع.', + 'search' => 'بحث...', + 'filter' => 'تصفية', + 'sort_by' => 'فرز حسب', + 'date' => 'التاريخ', + 'price' => 'السعر', + 'loading' => 'جار التحميل...', + 'no_data' => 'لا توجد بيانات متاحة.', + 'unauthorized' => 'وصول غير مصرح به.', + 'page_not_found' => 'الصفحة غير موجودة.', + 'server_error' => 'خطأ في الخادم.', + 'go_back' => 'رجوع', + 'home_btn' => 'الصفحة الرئيسية', + 'reset_password' => 'إعادة تعيين كلمة المرور', + 'forgot_password' => 'نسيت كلمة المرور؟', + 'send_link' => 'إرسال رابط التعيين', + 'password_reset_sent' => 'تم إرسال رابط إعادة التعيين إلى بريدك الإلكتروني.', + 'password_changed' => 'تم تغيير كلمة المرور بنجاح.', + 'confirm_password' => 'تأكيد كلمة المرور', + 'current_password' => 'كلمة المرور الحالية', + 'new_password' => 'كلمة المرور الجديدة', + 'change_password' => 'تغيير كلمة المرور', + 'personal_info' => 'المعلومات الشخصية', + 'company_info' => 'معلومات الشركة', + 'truck_info' => 'معلومات الشاحنة', + 'documents' => 'المستندات', + 'upload_doc' => 'رفع مستند', + 'download' => 'تحميل', + 'file_too_large' => 'حجم الملف كبير جداً.', + 'invalid_file_type' => 'نوع الملف غير صالح.', + 'upload_success' => 'تم رفع الملف بنجاح.', + 'delete_confirm' => 'هل أنت متأكد من الحذف؟', + 'deleted_success' => 'تم الحذف بنجاح.', + 'feature_not_available' => 'الخدمة غير متوفرة حالياً.', + 'coming_soon' => 'قريباً', + 'contact_support' => 'اتصل بالدعم', + 'faq' => 'الأسئلة الشائعة', + 'language' => 'اللغة', + 'english' => 'إنجليزي', + 'arabic' => 'عربي', + 'switch_lang' => 'تغيير اللغة', + 'dark_mode' => 'الوضع الليلي', + 'light_mode' => 'الوضع النهاري', + 'notifications_settings' => 'إعدادات الإشعارات', + 'email_notif' => 'إشعارات البريد الإلكتروني', + 'sms_notif' => 'إشعارات الرسائل القصيرة', + 'push_notif' => 'إشعارات الدفع', + 'enable' => 'تفعيل', + 'disable' => 'تعطيل', + 'account_settings' => 'إعدادات الحساب', + 'delete_account' => 'حذف الحساب', + 'delete_account_warning' => 'هذا الإجراء لا يمكن التراجع عنه.', + 'feedback' => 'رأيك يهمنا', + 'rate_us' => 'قيمنا', + 'copyright' => 'حقوق النشر © ' . date('Y'), + 'powered_by' => 'مشغل بواسطة منصة اللوجستيات', + 'terms_of_service' => 'شروط الخدمة', + 'cookie_policy' => 'سياسة ملفات الارتباط', + 'careers' => 'وظائف', + 'blog' => 'المدونة', + 'partners' => 'الشركاء', + 'help_center' => 'مركز المساعدة', + 'how_it_works' => 'كيف نعمل', + 'pricing' => 'الأسعار', + 'get_started' => 'ابدأ الآن', + 'learn_more' => 'اعرف المزيد', + 'demo' => 'طلب عرض توضيحي', + 'subscribe' => 'اشترك', + 'newsletter' => 'النشرة البريدية', + 'enter_email' => 'أدخل بريدك الإلكتروني', + 'invalid_email' => 'بريد إلكتروني غير صالح.', + 'message_sent' => 'تم إرسال الرسالة بنجاح.', + 'thank_you' => 'شكراً لك!', + '404_msg' => 'الصفحة التي تبحث عنها غير موجودة.', + '500_msg' => 'حدث خطأ من جانبنا.', + 'maintenance_msg' => 'النظام تحت الصيانة. يرجى المحاولة لاحقاً.', + 'session_expired' => 'انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.', + 'login_required' => 'يجب تسجيل الدخول للوصول لهذه الصفحة.', + 'access_denied' => 'تم رفض الوصول.', + 'csrf_error' => 'رمز الحماية غير صالح. يرجى التحديث والمحاولة مرة أخرى.', + 'validation_error' => 'يرجى تصحيح الأخطاء أدناه.', + 'required_field' => 'هذا الحقل مطلوب.', + 'min_length' => 'الحد الأدنى للطول هو %s حرف.', + 'max_length' => 'الحد الأقصى للطول هو %s حرف.', + 'numeric_only' => 'الأرقام فقط مسموحة.', + 'alpha_only' => 'الحروف فقط مسموحة.', + 'alphanumeric_only' => 'الحروف والأرقام فقط مسموحة.', + 'email_exists' => 'البريد الإلكتروني موجود بالفعل.', + 'username_exists' => 'اسم المستخدم موجود بالفعل.', + 'password_mismatch' => 'كلمات المرور غير متطابقة.', + 'invalid_credentials' => 'البريد الإلكتروني أو كلمة المرور غير صحيحة.', + 'account_locked' => 'الحساب مقفل. يرجى الاتصال بالدعم.', + 'too_many_attempts' => 'محاولات دخول كثيرة جداً. يرجى المحاولة لاحقاً.', + 'verify_email' => 'يرجى تأكيد بريدك الإلكتروني.', + 'email_verified' => 'تم تأكيد البريد الإلكتروني بنجاح.', + 'verification_link_sent' => 'تم إرسال رابط التأكيد.', + 'invalid_token' => 'الرمز غير صالح أو منتهي.', + 'token_expired' => 'انتهت صلاحية الرمز.', + 'resend_verification' => 'إعادة إرسال بريد التأكيد', + 'dashboard_overview' => 'نظرة عامة', + 'total_shipments' => 'إجمالي الشحنات', + 'active_trucks' => 'الشاحنات النشطة', + 'pending_approvals' => 'بانتظار الموافقة', + 'revenue' => 'الإيرادات', + 'recent_activity' => 'النشاط الأخير', + 'view_all_shipments' => 'عرض كل الشحنات', + 'view_all_users' => 'عرض كل المستخدمين', + 'add_new' => 'إضافة جديد', + 'export' => 'تصدير', + 'import' => 'استيراد', + 'print' => 'طباعة', + 'copy' => 'نسخ', + 'csv' => 'CSV', + 'excel' => 'Excel', + 'pdf' => 'PDF', + 'search_results' => 'نتائج البحث', + 'no_results' => 'لا توجد نتائج.', + 'showing_entries' => 'عرض %s إلى %s من %s سجل', + 'next_page' => 'التالي', + 'prev_page' => 'السابق', + 'first_page' => 'الأول', + 'last_page' => 'الأخير', + 'apply' => 'تطبيق', + 'clear' => 'مسح', + 'filter_by' => 'تصفية حسب', + 'status_all' => 'كل الحالات', + 'role_all' => 'كل الأدوار', + 'date_range' => 'نطاق التاريخ', + 'today' => 'اليوم', + 'yesterday' => 'أمس', + 'last_7_days' => 'آخر 7 أيام', + 'last_30_days' => 'آخر 30 يوم', + 'this_month' => 'هذا الشهر', + 'last_month' => 'الشهر الماضي', + 'custom_range' => 'نطاق مخصص', + 'start_date' => 'تاريخ البدء', + 'end_date' => 'تاريخ الانتهاء', + 'to' => 'إلى', + 'from' => 'من', + 'subject' => 'الموضوع', + 'message' => 'الرسالة', + 'send_message' => 'إرسال الرسالة', + 'reply' => 'رد', + 'forward' => 'توجيه', + 'mark_unread' => 'تحديد كغير مقروء', + 'delete_selected' => 'حذف المحدد', + 'archive' => 'أرشفة', + 'spam' => 'بريد مزعج', + 'trash' => 'سلة المهملات', + 'compose' => 'إنشاء', + 'inbox' => 'الوارد', + 'sent' => 'المرسل', + 'drafts' => 'المسودات', + 'important' => 'مهم', + 'starred' => 'مميز بنجمة', + 'labels' => 'تسميات', + 'add_label' => 'إضافة تسمية', + 'remove_label' => 'إزالة تسمية', + 'color' => 'اللون', + 'description' => 'الوصف', + 'edit_profile' => 'تعديل الملف الشخصي', + 'change_avatar' => 'تغيير الصورة الرمزية', + 'bio' => 'نبذة', + 'location' => 'الموقع', + 'website' => 'الموقع الإلكتروني', + 'social_links' => 'روابط التواصل الاجتماعي', + 'facebook' => 'فيسبوك', + 'twitter' => 'تويتر', + 'linkedin' => 'لينكد إن', + 'instagram' => 'انستغرام', + 'youtube' => 'يوتيوب', + 'github' => 'جيت هب', + 'save_changes' => 'حفظ التغييرات', + 'discard_changes' => 'تجاهل التغييرات', + 'unsaved_changes' => 'لديك تغييرات غير محفوظة.', + 'stay_on_page' => 'البقاء في الصفحة', + 'leave_page' => 'مغادرة الصفحة', + 'confirm_action' => 'تأكيد الإجراء', + 'action_cannot_undone' => 'لا يمكن التراجع عن هذا الإجراء.', + 'type_confirm' => 'اكتب "CONFIRM" للمتابعة.', + 'notifications_permission' => 'هل تسمح بالإشعارات؟', + 'allow' => 'سماح', + 'deny' => 'رفض', + 'location_permission' => 'هل تسمح بالوصول للموقع؟', + 'camera_permission' => 'هل تسمح بالوصول للكاميرا؟', + 'mic_permission' => 'هل تسمح بالوصول للميكروفون؟', + 'cookie_consent' => 'نستخدم ملفات تعريف الارتباط لتحسين تجربتك.', + 'accept_all' => 'قبول الكل', + 'reject_all' => 'رفض الكل', + 'customize' => 'تخصيص', + 'preferences' => 'التفضيلات', + 'general' => 'عام', + 'security' => 'الأمان', + 'billing' => 'الفوترة', + 'integrations' => 'التكاملات', + 'api_keys' => 'مفاتيح API', + 'generate_key' => 'توليد مفتاح', + 'revoke_key' => 'إبطال مفتاح', + 'webhook_url' => 'رابط Webhook', + 'secret_key' => 'المفتاح السري', + 'documentation' => 'التوثيق', + 'support_ticket' => 'تذكرة دعم', + 'open_ticket' => 'فتح تذكرة', + 'ticket_id' => 'رقم التذكرة', + 'priority' => 'الأولوية', + 'low' => 'منخفض', + 'medium' => 'متوسط', + 'high' => 'عالي', + 'critical' => 'حرج', + 'status_open' => 'مفتوح', + 'status_closed' => 'مغلق', + 'status_pending' => 'قيد الانتظار', + 'last_reply' => 'آخر رد', + 'assigned_to' => 'مسند إلى', + 'created_by' => 'أنشئ بواسطة', + 'resolved_at' => 'تم الحل في', + 'closed_at' => 'تاريخ الإغلاق', + 'reopen' => 'إعادة فتح', + 'close' => 'إغلاق', + 'add_comment' => 'إضافة تعليق', + 'attach_file' => 'إرفاق ملف', + 'max_size' => 'الحجم الأقصى: %s', + 'allowed_types' => 'الأنواع المسموحة: %s', + 'drag_drop' => 'اسحب وأفلت الملفات هنا', + 'browse' => 'تصفح', + 'uploading' => 'جار الرفع...', + 'completed' => 'مكتمل', + 'failed' => 'فشل', + 'retry' => 'إعادة المحاولة', + 'cancel_upload' => 'إلغاء الرفع', + 'remove' => 'إزالة', + 'preview' => 'معاينة', + 'zoom_in' => 'تكبير', + 'zoom_out' => 'تصغير', + 'rotate' => 'تدوير', + 'fullscreen' => 'ملء الشاشة', + 'print_preview' => 'معاينة الطباعة', + 'download_pdf' => 'تحميل PDF', + 'share' => 'مشاركة', + 'copy_link' => 'نسخ الرابط', + 'email_link' => 'إرسال الرابط بالبريد', + 'embed' => 'تضمين', + 'qrcode' => 'رمز QR', + 'scan_qrcode' => 'مسح رمز QR', + 'auth_code' => 'رمز المصادقة', + '2fa' => 'المصادقة الثنائية', + 'setup_2fa' => 'إعداد المصادقة الثنائية', + 'disable_2fa' => 'تعطيل المصادقة الثنائية', + 'enter_code' => 'أدخل الرمز', + 'backup_codes' => 'رموز احتياطية', + 'generate_codes' => 'توليد رموز', + 'print_codes' => 'طباعة الرموز', + 'recovery_email' => 'بريد الاسترداد', + 'verify_phone' => 'تأكيد رقم الهاتف', + 'sms_code' => 'رمز SMS', + 'resend_code' => 'إعادة إرسال الرمز', + 'code_sent' => 'تم إرسال الرمز.', + 'phone_verified' => 'تم تأكيد رقم الهاتف.', + 'country_code' => 'رمز الدولة', + 'phone_number' => 'رقم الهاتف', + 'address_line1' => 'العنوان 1', + 'address_line2' => 'العنوان 2', + 'city_state' => 'المدينة/المنطقة', + 'postal_code' => 'الرمز البريدي', + 'country_region' => 'الدولة/المنطقة', + 'billing_address' => 'عنوان الفوترة', + 'shipping_address' => 'عنوان الشحن', + 'same_as_billing' => 'نفس عنوان الفوترة', + 'add_address' => 'إضافة عنوان', + 'edit_address' => 'تعديل عنوان', + 'delete_address' => 'حذف عنوان', + 'default_address' => 'العنوان الافتراضي', + 'set_default' => 'تعيين كافتراضي', + 'payment_method' => 'طريقة الدفع', + 'credit_card' => 'بطاقة ائتمان', + 'paypal' => 'باي بال', + 'bank_transfer' => 'تحويل بنكي', + 'cash_on_delivery' => 'الدفع عند الاستلام', + 'card_number' => 'رقم البطاقة', + 'expiry_date' => 'تاريخ الانتهاء', + 'cvv' => 'رمز CVV', + 'card_holder' => 'اسم حامل البطاقة', + 'save_card' => 'حفظ البطاقة للاستخدام المستقبلي', + 'transaction_history' => 'سجل المعاملات', + 'invoice' => 'فاتورة', + 'receipt' => 'إيصال', + 'amount' => 'المبلغ', + 'currency' => 'العملة', + 'tax' => 'الضريبة', + 'discount' => 'الخصم', + 'subtotal' => 'المجموع الفرعي', + 'total' => 'المجموع الكلي', + 'promo_code' => 'الرمز الترويجي', + 'apply_code' => 'تطبيق الرمز', + 'invalid_code' => 'الرمز غير صالح.', + 'checkout' => 'الدفع', + 'place_order' => 'تأكيد الطلب', + 'order_summary' => 'ملخص الطلب', + 'cart' => 'سلة التسوق', + 'empty_cart' => 'السلة فارغة.', + 'continue_shopping' => 'متابعة التسوق', + 'add_to_cart' => 'أضف إلى السلة', + 'remove_from_cart' => 'إزالة من السلة', + 'update_cart' => 'تحديث السلة', + 'quantity' => 'الكمية', + 'unit_price' => 'سعر الوحدة', + 'total_price' => 'السعر الإجمالي', + 'product_details' => 'تفاصيل المنتج', + 'specifications' => 'المواصفات', + 'reviews' => 'المراجعات', + 'write_review' => 'اكتب مراجعة', + 'rating' => 'التقييم', + 'stars' => 'نجوم', + 'related_products' => 'منتجات ذات صلة', + 'wishlist' => 'قائمة الرغبات', + 'add_to_wishlist' => 'أضف لقائمة الرغبات', + 'remove_from_wishlist' => 'إزالة من قائمة الرغبات', + 'compare' => 'مقارنة', + 'add_to_compare' => 'أضف للمقارنة', + 'clear_compare' => 'مسح المقارنة', + 'compare_products' => 'مقارنة المنتجات', + 'category' => 'الفئة', + 'brand' => 'العلامة التجارية', + 'model' => 'الموديل', + 'sku' => 'SKU', + 'availability' => 'التوفر', + 'in_stock' => 'متوفر', + 'out_of_stock' => 'غير متوفر', + 'pre_order' => 'طلب مسبق', + 'limited_stock' => 'كمية محدودة', + 'new_arrival' => 'وصل حديثاً', + 'best_seller' => 'الأكثر مبيعاً', + 'featured' => 'متميز', + 'sale' => 'تخفيضات', + 'hot' => 'رائج', + 'deal_of_day' => 'صفقة اليوم', + 'timer_end' => 'العرض ينتهي في', + 'days' => 'أيام', + 'hours' => 'ساعات', + 'minutes' => 'دقائق', + 'seconds' => 'ثواني', + 'subscribe_text' => 'Subscribe to our newsletter for latest updates.', + 'follow_us' => 'Follow Us', + 'app_download' => 'Download App', + 'app_store' => 'App Store', + 'google_play' => 'Google Play', + 'secure_payment' => 'Secure Payment', + 'fast_delivery' => 'Fast Delivery', + '24_7_support' => '24/7 Support', + 'money_back' => 'Money Back Guarantee', + 'easy_returns' => 'Easy Returns', + 'gift_cards' => 'Gift Cards', + 'track_order' => 'Track Order', + 'order_id' => 'Order ID', + 'shipping_info' => 'Shipping Info', + 'billing_info' => 'Billing Info', + 'order_status' => 'Order Status', + 'processing' => 'Processing', + 'shipped' => 'Shipped', + 'delivered' => 'Delivered', + 'cancelled' => 'Cancelled', + 'returned' => 'Returned', + 'refunded' => 'Refunded', + 'return_policy' => 'Return Policy', + 'shipping_policy' => 'Shipping Policy', + 'sitemap' => 'Sitemap', + 'accessibility' => 'Accessibility', + 'accessibility_statement' => 'Accessibility Statement', + 'skip_to_content' => 'Skip to Content', + 'high_contrast' => 'High Contrast', + 'text_size' => 'Text Size', + 'increase' => 'Increase', + 'decrease' => 'Decrease', + 'reset' => 'Reset', + 'print_page' => 'Print Page', + 'read_aloud' => 'Read Aloud', + 'stop' => 'Stop', + 'pause' => 'Pause', + 'resume' => 'Resume', + 'mute' => 'Mute', + 'unmute' => 'Unmute', + 'volume' => 'Volume', + 'speed' => 'Speed', + 'normal' => 'Normal', + 'fast' => 'Fast', + 'slow' => 'Slow', + 'captions' => 'Captions', + 'subtitles' => 'Subtitles', + 'audio_desc' => 'Audio Description', + 'keyboard_shortcuts' => 'Keyboard Shortcuts', + 'help' => 'Help', + 'close_menu' => 'Close Menu', + 'open_menu' => 'Open Menu', + 'menu' => 'Menu', + 'navigation' => 'Navigation', + 'breadcrumbs' => 'Breadcrumbs', + 'pagination' => 'Pagination', + 'modal' => 'Modal', + 'dialog' => 'Dialog', + 'tooltip' => 'Tooltip', + 'popover' => 'Popover', + 'alert' => 'Alert', + 'notification' => 'Notification', + 'toast' => 'Toast', + 'banner' => 'Banner', + 'sidebar' => 'Sidebar', + 'footer' => 'Footer', + 'header' => 'Header', + 'main_content' => 'Main Content', + 'admin_dashboard_title' => 'Admin Dashboard', + 'wablas_server_url' => 'Wablas Server URL', + 'wablas_api_token' => 'Wablas API Token', + 'reg_title' => 'Create Account', + 'reg_subtitle' => 'Sign up to get started', + 'reg_success_pending' => 'Registration successful. Your account is pending approval.', + 'reg_success' => 'Registration successful. You can now login.', + 'role' => 'Role', + 'shipper' => 'Shipper', + 'truck_owner' => 'Truck Owner', + 'email' => 'Email', + 'password' => 'Password', + 'phone' => 'Phone', + 'country' => 'Country', + 'select_country' => 'Select Country', + 'city' => 'City', + 'select_city' => 'Select City', + 'address' => 'Address', + 'shipper_details' => 'Shipper Details', + 'company_name' => 'Company Name', + 'truck_details' => 'Truck Details', + 'truck_type' => 'Truck Type', + 'load_capacity' => 'Load Capacity (Tons)', + 'plate_no' => 'Plate Number', + 'bank_account' => 'Bank Account', + 'bank_name' => 'Bank Name', + 'bank_branch' => 'Branch Name', + 'id_card_front' => 'ID Card (Front)', + 'id_card_back' => 'ID Card (Back)', + 'truck_reg_front' => 'Truck Registration (Front)', + 'truck_reg_back' => 'Truck Registration (Back)', + 'truck_picture' => 'Truck Picture', + 'create_account' => 'Create Account', + 'back_to_admin' => 'Back to Admin', + 'back_to_home' => 'Back to Home', + 'total_revenue' => 'Total Revenue', + 'shipments_analytics' => 'Shipments Analytics', + 'export_csv' => 'Export CSV', + 'status_posted' => 'تم النشر', + 'status_offered' => 'تم تقديم عرض', + 'status_confirmed' => 'مؤكدة', + 'status_in_transit' => 'قيد النقل', + 'status_delivered' => 'تم التوصيل', + 'status_pending' => 'قيد الانتظار', + 'status_active' => 'نشط', + 'status_rejected' => 'مرفوض', + 'status_unpaid' => 'غير مدفوع', + 'status_paid' => 'مدفوع', + 'payment_thawani' => 'ثواني', + 'payment_bank' => 'تحويل بنكي', + 'currency_symbol' => 'ر.ع.', + 'total_shippers' => 'إجمالي الشاحنين', + 'active_shipments' => 'الشحنات النشطة', + 'total_truck_owners' => 'إجمالي أصحاب الشاحنات', + 'admin_dashboard' => 'لوحة تحكم المسؤول', + 'overview_performance' => 'النظرة العامة والأداء', + 'no_shipments' => 'لم يتم العثور على شحنات.', + 'shipment' => 'الشحنة', + 'route' => 'المسار', + 'action' => 'الإجراء', + 'manage_countries' => 'إدارة الدول', + 'add_remove_countries' => 'إضافة/إزالة الدول', + 'manage_cities' => 'إدارة المدن', + 'configure_cities' => 'إعداد المدن', + 'register_user' => 'تسجيل مستخدم', + 'manually_onboard' => 'إضافة مستخدم يدوياً', + 'company_profile' => 'ملف الشركة', + 'update_branding' => 'تحديث الهوية', + 'summary_report' => 'تقرير ملخص', + 'view_analytics' => 'عرض التحليلات' + ] ]; function t(string $key): string @@ -599,9 +1125,13 @@ function e($value): string } function ensure_schema(): void - try { db()->exec("ALTER TABLE shipments ADD COLUMN pod_path VARCHAR(255) NULL AFTER offer_owner"); } catch (Exception $e) {} { - db()->exec("\n CREATE TABLE IF NOT EXISTS landing_sections ( + // Make sure we have a connection + if (!db()) return; + + try { db()->exec("ALTER TABLE shipments ADD COLUMN pod_path VARCHAR(255) NULL AFTER offer_owner"); } catch (Exception $e) {} + + db()->exec(" CREATE TABLE IF NOT EXISTS landing_sections ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, subtitle TEXT NULL, @@ -647,65 +1177,115 @@ SQL; try { db()->exec("ALTER TABLE shipments ADD COLUMN platform_fee DECIMAL(10,2) DEFAULT 0.00 AFTER offer_price"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE shipments ADD COLUMN total_price DECIMAL(10,2) DEFAULT 0.00 AFTER platform_fee"); } catch (Exception $e) {} try { db()->exec("ALTER TABLE shipments ADD COLUMN payment_status ENUM('unpaid', 'paid') DEFAULT 'unpaid' AFTER status"); } catch (Exception $e) {} + + // Truck owner documents + try { db()->exec("ALTER TABLE users ADD COLUMN id_card_front VARCHAR(255) NULL"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE users ADD COLUMN id_card_back VARCHAR(255) NULL"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE users ADD COLUMN truck_reg_front VARCHAR(255) NULL"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE users ADD COLUMN truck_reg_back VARCHAR(255) NULL"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE users ADD COLUMN truck_picture VARCHAR(255) NULL"); } catch (Exception $e) {} - db()->exec( - "CREATE TABLE IF NOT EXISTS users ( + try { + db()->exec("CREATE TABLE IF NOT EXISTS notifications ( id INT AUTO_INCREMENT PRIMARY KEY, - email VARCHAR(255) NOT NULL UNIQUE, - password VARCHAR(255) NOT NULL, - full_name VARCHAR(255) NOT NULL, - role ENUM('admin','shipper','truck_owner') NOT NULL, - status ENUM('pending','active','rejected') NOT NULL DEFAULT 'active', - profile_picture VARCHAR(255) NULL, + user_id INT NOT NULL, + title VARCHAR(255) NOT NULL, + message TEXT NOT NULL, + is_read TINYINT(1) DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" - ); + )"); + } catch (Exception $e) {} - db()->exec( - "CREATE TABLE IF NOT EXISTS shipper_profiles ( - id INT AUTO_INCREMENT PRIMARY KEY, - user_id INT NOT NULL UNIQUE, - company_name VARCHAR(255) NOT NULL, - phone VARCHAR(40) NOT NULL, - country_id INT NULL, - city_id INT NULL, - address_line VARCHAR(255) NOT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT fk_shipper_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" - ); + // Add bank fields to users table if they don't exist + try { db()->exec("ALTER TABLE users ADD COLUMN bank_name VARCHAR(100) NULL AFTER truck_picture"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE users ADD COLUMN bank_branch VARCHAR(100) NULL AFTER bank_name"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE users ADD COLUMN bank_account VARCHAR(100) NULL AFTER bank_branch"); } catch (Exception $e) {} - db()->exec( - "CREATE TABLE IF NOT EXISTS truck_owner_profiles ( + // Create notification_templates table + try { + db()->exec("CREATE TABLE IF NOT EXISTS notification_templates ( id INT AUTO_INCREMENT PRIMARY KEY, - user_id INT NOT NULL UNIQUE, - phone VARCHAR(40) NOT NULL, - country_id INT NULL, - city_id INT NULL, - address_line VARCHAR(255) NOT NULL, - truck_type VARCHAR(120) NOT NULL, - load_capacity DECIMAL(10,2) NOT NULL, - plate_no VARCHAR(80) NOT NULL, - bank_account VARCHAR(100) NULL, - bank_name VARCHAR(100) NULL, - bank_branch VARCHAR(100) NULL, - id_card_path TEXT NOT NULL, - truck_pic_path VARCHAR(255) NOT NULL, - registration_path TEXT NOT NULL, + code VARCHAR(50) NOT NULL UNIQUE, + name VARCHAR(100) NOT NULL, + subject VARCHAR(255) NOT NULL, + body TEXT NOT NULL, + sms_body TEXT NULL, + variables TEXT NULL COMMENT 'Comma separated list of available variables', + is_active TINYINT(1) DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - CONSTRAINT fk_owner_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4" - ); + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + )"); + } catch (Exception $e) {} + + // Settings table + try { + db()->exec("CREATE TABLE IF NOT EXISTS settings ( + id INT AUTO_INCREMENT PRIMARY KEY, + setting_key VARCHAR(50) NOT NULL UNIQUE, + setting_value TEXT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + )"); + } catch (Exception $e) {} + + // Permissions tables + try { + db()->exec("CREATE TABLE IF NOT EXISTS permissions ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(50) NOT NULL UNIQUE, + description VARCHAR(255) NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + )"); + + db()->exec("CREATE TABLE IF NOT EXISTS user_permissions ( + user_id INT NOT NULL, + permission_id INT NOT NULL, + PRIMARY KEY (user_id, permission_id), + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE + )"); + } catch (Exception $e) {} + + // Add user_id to shipments + try { db()->exec("ALTER TABLE shipments ADD COLUMN user_id INT NULL AFTER id"); } catch (Exception $e) {} + try { db()->exec("ALTER TABLE shipments ADD INDEX (user_id)"); } catch (Exception $e) {} + + // Add pod_file to shipments + try { db()->exec("ALTER TABLE shipments ADD COLUMN pod_file VARCHAR(255) NULL AFTER status"); } catch (Exception $e) {} } -function set_flash(string $type, string $message): void +function get_setting(string $key, $default = null) { - $_SESSION['flash'] = ['type' => $type, 'message' => $message]; + // Try to get from database first + try { + $stmt = db()->prepare("SELECT setting_value FROM settings WHERE setting_key = ?"); + $stmt->execute([$key]); + $val = $stmt->fetchColumn(); + if ($val !== false) { + return $val; + } + } catch (Throwable $e) {} + + return $default; +} + +function require_role(string $role): void +{ + if (!isset($_SESSION['user_id']) || !isset($_SESSION['user_role'])) { + header('Location: login.php'); + exit; + } + + if ($_SESSION['user_role'] !== $role && $_SESSION['user_role'] !== 'admin') { + // Admin can access everything + http_response_code(403); + die('Access Denied'); + } } function get_flash(): ?array { - if (!empty($_SESSION['flash'])) { + if (isset($_SESSION['flash'])) { $flash = $_SESSION['flash']; unset($_SESSION['flash']); return $flash; @@ -713,137 +1293,67 @@ function get_flash(): ?array return null; } -function url_with_lang(string $path, array $params = []): string +function set_flash(string $type, string $message): void { - global $lang; - $params = array_merge(['lang' => $lang], $params); - return $path . '?' . http_build_query($params); + $_SESSION['flash'] = ['type' => $type, 'message' => $message]; } -function current_url_with_lang(string $newLang): string +function url_with_lang(string $url, array $params = []): string +{ + global $lang; + $params['lang'] = $lang; + + $query = http_build_query($params); + + if (strpos($url, '?') !== false) { + return $url . '&' . $query; + } + return $url . '?' . $query; +} + +function current_url_with_lang(string $targetLang): string { $params = $_GET; - $params['lang'] = $newLang; - $path = basename($_SERVER['PHP_SELF'] ?? 'index.php'); - return $path . '?' . http_build_query($params); + $params['lang'] = $targetLang; + $query = http_build_query($params); + $path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); + return $path . '?' . $query; } function status_label(string $status): string { - $map = [ - 'posted' => t('status_posted'), - 'offered' => t('status_offered'), - 'confirmed' => t('status_confirmed'), - 'in_transit' => t('status_in_transit'), - 'delivered' => t('status_delivered'), - ]; - return $map[$status] ?? $status; -} - -function get_settings(): array -{ - static $settings = null; - if ($settings !== null) { - return $settings; - } - $settings = []; - try { - $stmt = db()->query("SELECT setting_key, setting_value FROM settings"); - while ($row = $stmt->fetch()) { - $settings[$row['setting_key']] = $row['setting_value']; - } - } catch (Throwable $e) {} - return $settings; -} - -function get_setting(string $key, $default = ''): string -{ - $settings = get_settings(); - return $settings[$key] ?? $default; -} - -function has_permission(string $permissionSlug, ?int $userId = null): bool -{ - if ($userId === null) { - if (!isset($_SESSION['user_id'])) { - return false; - } - $userId = $_SESSION['user_id']; - } - - static $cache = []; - $key = $userId . ':' . $permissionSlug; - - if (isset($cache[$key])) { - return $cache[$key]; - } - - try { - $stmt = db()->prepare( - "SELECT 1 - FROM user_permissions up - JOIN permissions p ON up.permission_id = p.id - WHERE up.user_id = ? AND p.slug = ?" - ); - $stmt->execute([$userId, $permissionSlug]); - $result = (bool) $stmt->fetchColumn(); - $cache[$key] = $result; - return $result; - } catch (Throwable $e) { - return false; - } + $key = 'status_' . $status; + return t($key); } function format_currency(float $amount): string { - return number_format($amount, 3) . ' OMR'; + return number_format($amount, 2) . ' ' . t('currency_symbol'); } -function require_login(): void -{ - if (!isset($_SESSION['user_id'])) { - header('Location: login.php'); - exit; - } -} - -function require_role(string $role): void -{ - require_login(); - if ($_SESSION['role'] !== $role && $_SESSION['role'] !== 'admin') { - http_response_code(403); - die("Access Denied. You must be a " . ucfirst($role) . " to view this page."); - } -} - -function generate_csrf_token(): string +function csrf_token(): string { if (empty($_SESSION['csrf_token'])) { - $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); + try { + $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); + } catch (Exception $e) { + $_SESSION['csrf_token'] = bin2hex(openssl_random_pseudo_bytes(32)); + } } return $_SESSION['csrf_token']; } function csrf_field(): string { - $token = generate_csrf_token(); - return ''; + return ''; } function validate_csrf_token(): void { if ($_SERVER['REQUEST_METHOD'] === 'POST') { - if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) { + if (!isset($_POST['csrf_token']) || !hash_equals(csrf_token(), $_POST['csrf_token'])) { http_response_code(403); - die("CSRF validation failed. Please refresh the page and try again."); + die(t('csrf_error')); } } -} - -// Set timezone from settings -try { - $tz = get_setting('timezone', 'UTC'); - if ($tz && in_array($tz, DateTimeZone::listIdentifiers())) { - date_default_timezone_set($tz); - } -} catch (Throwable $e) {} \ No newline at end of file +} \ No newline at end of file