feat: implement Arabic language support with RTL layout and automated translation scripts

This commit is contained in:
Ümit Tunç
2026-05-19 23:57:03 +03:00
parent bbe26d22af
commit fc0ebf1a28
19 changed files with 1166 additions and 2 deletions
+87
View File
@@ -0,0 +1,87 @@
<?php
return [
'nav-blog' => 'مدونة',
'meta-index-title' => 'مدونة',
'meta-index-description' => 'مشاركاتنا الحالية',
'empty' => 'لا يوجد حاليا أي مشاركات بلوق.',
'title' => 'منشورات المدونة',
'navigation_label' => 'مدونة',
'model_label' => 'مشاركة المدونة',
'plural_model_label' => 'منشورات المدونة',
'create' => 'إنشاء مشاركة مدونة جديدة',
'edit' => 'تحرير مشاركة المدونة',
'save' => 'يحفظ',
'cancel' => 'يلغي',
'delete' => 'حذف مشاركة المدونة',
'restore' => 'استعادة مشاركة المدونة',
'force_delete' => 'حذف نهائيا',
'title_field' => 'عنوان',
'slug_field' => 'مسار URL',
'content_field' => 'محتويات',
'excerpt_field' => 'ملخص',
'meta_title_field' => 'عنوان ميتا',
'meta_description_field' => 'وصف ميتا',
'status_field' => 'القاسي',
'featured_image_field' => 'صورة مميزة',
'published_at_field' => 'تاريخ النشر',
'author_field' => 'الكاتب',
'category_field' => 'فئة',
'tags_field' => 'العلامات',
'view_count_field' => 'عدد المشاهدات',
'is_featured_field' => 'مميز',
'allow_comments_field' => 'السماح بالتعليقات',
'content_section' => 'محتويات',
'settings_section' => 'إعدادات المدونة',
'seo_section' => 'إعدادات تحسين محركات البحث',
'translations_section' => 'ترجمات',
'slug_helper' => 'الجزء الذي سيظهر في عنوان URL. على سبيل المثال: مشاركة مدونة',
'excerpt_helper' => 'ملخص منشور المدونة (500 حرف كحد أقصى)',
'featured_image_helper' => 'اختر صورة مميزة لمنشور المدونة',
'category_helper' => 'قم بتعيين منشور المدونة إلى فئة',
'tags_helper' => 'إضافة علامات لمنشور المدونة',
'published_at_helper' => 'إذا تركت فارغة، يتم استخدام التاريخ الحالي',
'is_featured_helper' => 'قم بوضع علامة على مشاركة المدونة هذه كمميزة',
'allow_comments_helper' => 'السماح بالتعليقات على مشاركة المدونة هذه',
'meta_title_helper' => 'عنوان لمحركات البحث (60 حرفًا كحد أقصى)',
'meta_description_helper' => 'وصف محركات البحث (160 حرفًا كحد أقصى)',
'status_draft' => 'مسودة',
'status_published' => 'تم نشره',
'status_archived' => 'مؤرشف',
'created_successfully' => 'تم إنشاء مشاركة المدونة بنجاح.',
'updated_successfully' => 'تم تحديث مشاركة المدونة بنجاح.',
'deleted_successfully' => 'تم حذف مشاركة المدونة بنجاح.',
'restored_successfully' => 'تمت استعادة مشاركة المدونة بنجاح.',
'table_title' => 'عنوان',
'table_slug' => 'مسار URL',
'table_status' => 'القاسي',
'table_author' => 'الكاتب',
'table_category' => 'فئة',
'table_published_at' => 'تاريخ النشر',
'table_view_count' => 'وجهات النظر',
'table_created_at' => 'تاريخ الإنشاء',
'table_updated_at' => 'تاريخ التحديث',
'title_required' => 'حقل العنوان مطلوب.',
'slug_required' => 'حقل مسار URL مطلوب.',
'slug_unique' => 'مسار URL هذا قيد الاستخدام بالفعل.',
'content_required' => 'حقل المحتوى مطلوب.',
'author_required' => 'حقل المؤلف مطلوب.',
'by' => 'الكاتب',
'comments' => 'تعليق',
'share' => 'يشارك',
'author' => 'الكاتب',
'all_posts' => 'جميع المقالات',
'you_might_also_like' => 'قد يعجبك أيضًا',
'read_more' => 'اقرأ المزيد',
'reply' => 'رد',
'share_thoughts' => 'هل يمكنك مشاركة أفكارك؟',
'comment_form_description' => 'لن يتم نشر عنوان بريدك الإلكتروني. الحقول المطلوبة مشار إليها بـ *.',
'name' => 'إعلان',
'email' => 'بريد إلكتروني',
'website' => 'موقع إلكتروني',
'comment' => 'تعليق',
'submit' => 'يرسل',
'comment_submitted' => 'لقد تم إرسال تعليقك. سيتم نشره بعد الموافقة عليه.',
'comments_disabled' => 'تم تعطيل التعليقات على منشور المدونة هذا.',
'all_categories' => 'جميع الفئات',
];
+37
View File
@@ -0,0 +1,37 @@
<?php
return [
'title' => 'فئات المدونة',
'navigation_label' => 'فئات المدونة',
'model_label' => 'فئة المدونة',
'plural_model_label' => 'فئات المدونة',
'create' => 'إنشاء فئة مدونة جديدة',
'edit' => 'تحرير فئة المدونة',
'save' => 'يحفظ',
'cancel' => 'يلغي',
'delete' => 'حذف فئة المدونة',
'restore' => 'استعادة فئة المدونة',
'force_delete' => 'حذف نهائيا',
'general_section' => 'معلومات عامة',
'name_field' => 'اسم الفئة',
'slug_field' => 'مسار URL',
'description_field' => 'توضيح',
'color_field' => 'لون',
'sort_order_field' => 'ترتيب',
'is_active_field' => 'نشيط',
'slug_helper' => 'الجزء الذي سيظهر في عنوان URL. مثال: التكنولوجيا',
'description_helper' => 'وصف الفئة (اختياري)',
'color_helper' => 'حدد لون الفئة (بتنسيق سداسي عشري)',
'sort_order_helper' => 'الترتيب الذي يتم به إدراج الفئات (الأرقام الأصغر تأتي أولاً)',
'is_active_helper' => 'جعل الفئة نشطة/سلبية',
'created_successfully' => 'تم إنشاء فئة المدونة بنجاح.',
'updated_successfully' => 'تم تحديث فئة المدونة بنجاح.',
'deleted_successfully' => 'تم حذف فئة المدونة بنجاح.',
'restored_successfully' => 'تمت استعادة فئة المدونة بنجاح.',
'blogs_count' => 'عدد المدونات',
'table_created_at' => 'تاريخ الإنشاء',
'table_updated_at' => 'تاريخ التحديث',
'name_required' => 'حقل اسم الفئة مطلوب.',
'slug_required' => 'حقل مسار URL مطلوب.',
'slug_unique' => 'مسار URL هذا قيد الاستخدام بالفعل.',
];
+72
View File
@@ -0,0 +1,72 @@
<?php
return [
'navigation_label' => 'التطبيقات المهنية',
'model_label' => 'طلب',
'plural_model_label' => 'التطبيقات المهنية',
'title' => 'نموذج الوظيفي',
'description' => 'للانضمام إلى فريقنا، يمكنك إرسال سيرتك الذاتية عن طريق ملء النموذج أدناه.',
'job_application_title' => 'تطبيق الوظيفة',
'job_application_description' => 'للانضمام إلى فريقنا، يمكنك إرسال سيرتك الذاتية عن طريق ملء النموذج أدناه.',
'internship_title' => 'تطبيق التدريب',
'internship_description' => 'احصل على معلومات حول برنامج التدريب عن بعد الخاص بنا وقم بالتقديم.',
'name' => 'Ad Soyad',
'email' => 'بريد إلكتروني',
'phone' => 'هاتف',
'cv' => 'السيرة الذاتية (CV)',
'nda' => 'تم التوقيع على اتفاقية عدم الإفشاء',
'contract' => 'العقد الموقع',
'git_knowledge' => 'معلومات الجهاز الهضمي',
'ai_usage' => 'استخدام أدوات الذكاء الاصطناعي',
'message' => 'رسالة',
'status' => 'القاسي',
'type' => 'نوع التطبيق',
'job' => 'تطبيق الوظيفة',
'internship' => 'تطبيق التدريب',
'submit' => 'تقديم الطلب',
'success_message' => 'لقد تم استلام طلبك بنجاح. شكرًا لك.',
'download_cv' => 'تحميل السيرة الذاتية',
'created_at' => 'تاريخ التقديم',
'dear_developer' => 'عزيزي المرشح المطور،',
'intro_text_1' => 'باعتبارنا Trunçgil Technology، نحن نعمل مع مطورين مستقلين من جميع المستويات لمشروعنا البرمجي القائم على Laravel الذي نقوم بتطويره. يتم تطبيق نظام الدفع على أساس المشكلة/المهام كنموذج عمل، ويتم تقديم المهام للمرشحين مقابل رسوم محددة مسبقًا.',
'intro_text_2' => 'السبب الرئيسي وراء طلبنا منك المعلومات التالية هو أننا بحاجة إلى توفير وصول محدود إلى أكواد المصدر لمشروعنا أثناء تقييم طلبك. لذلك، من أجل ضمان الأمن القانوني وحماية حقوق الأطراف، يجب فحص مستندات <strong>اتفاقية السرية (NDA)</strong> و<strong>اتفاقية المقاول المستقل</strong> التالية ويجب تقديم الإصدارات الموقعة أثناء تقديم الطلب.',
'intro_text_3' => 'يرجى ملء النموذج أدناه وتحميل المستندات الموقعة كملف واحد بتنسيق PDF أو كملف مضغوط.',
'intro_text_4' => 'سيتم استخدام معلوماتك بشكل سري فقط لغرض عملية التقديم والحماية القانونية بين الطرفين.',
'thanks' => 'شكرًا لك.',
'company_details' => 'TRUNCGIL TEKNOLOJI SANAYI VE TICARET LİMİTED ŞIRKETİ<br>العنوان: çamtepe Mah. محمود توفيق أتاي بول. غازي عنتاب تكنوبارك رقم: 4A İç Kapı رقم: 1 شاهينبي / غازي عنتاب<br>البريد الإلكتروني: info@truncgil.com.tr<br>رقم الضريبة: 8591492435 – شاهينبي ف.د. | ميرسيس: 0859149243500001',
'working_model_title' => 'نموذج العمل لدينا',
'working_model_subtitle' => 'العمل عن بعد على أساس المشكلة',
'terms_title' => 'الشروط والأحكام',
'fully_remote' => 'عن بعد بالكامل:',
'fully_remote_desc' => 'يمكنك العمل من أي مكان في العالم، وفي بيئة العمل الخاصة بك.',
'independent_contractor' => 'المقاول المستقل:',
'independent_contractor_desc' => 'يمكنك المساهمة في مشاريعنا من خلال نموذج العمل الحر.',
'mandatory_documents' => 'المستندات الإلزامية:',
'mandatory_documents_desc' => 'لأسباب أمنية، يعد توقيع اتفاقية عدم الإفشاء ووثائق المقاول المستقل أمرًا إلزاميًا.',
'nda_label' => 'اتفاقية عدم الإفصاح (NDA)',
'contract_label' => 'اتفاقية المقاول المستقل',
'form_title' => 'استمارة الطلب',
'form_subtitle' => 'يرجى ملء كافة الحقول بشكل كامل.',
'nda_description' => 'اتفاقية الخصوصية الموقعة (PDF، بحد أقصى 5 ميجابايت)',
'contract_description' => 'اتفاقية مقاول مستقل موقعة (PDF، بحد أقصى 5 ميجابايت)',
'git_confirmation' => 'أعرف كيفية استخدام نظام التحكم في إصدار GIT.',
'ai_confirmation' => 'أستخدم أدوات الذكاء الاصطناعي (Copilot، ChatGPT، وما إلى ذلك) بشكل فعال في عمليات تطوير البرمجيات.',
'message_placeholder' => 'مهاراتك وخبراتك وما تريد إضافته...',
'cv_description' => 'PDF، DOC، DOCX (ماكس 5 ميجابايت)',
'success' => 'ناجح!',
'ok' => 'نعم',
'error' => 'حتى!',
'validation_error' => 'يرجى التحقق من النموذج بحثًا عن الأخطاء.',
'error_message' => 'حدث خطأ أثناء تقديم الطلب. يرجى المحاولة مرة أخرى.',
'remote_work_title' => 'العمل عن بعد بالكامل',
'remote_work_details' => 'يتم ضمان تنسيق الفريق من خلال اجتماعات الاستعداد اليومية. في بعض المشاريع، تكون ساعات العمل أكثر مرونة. يتم تقييم المتدربين بناءً على واحد أو أكثر من المشاريع الحقيقية التي تناسب سيرتهم الذاتية وكفاءاتهم.',
'application_conditions_title' => 'شروط التقديم',
'condition_not_only_for_internship' => 'لا يتم قبول الأشخاص الذين يرغبون فقط في الحصول على تدريب داخلي. المرشحون المنفتحون على التطوير ويهدفون إلى المساهمة هم أولويتنا.',
'condition_intent_letter' => 'في قسم الرسائل، يجب عليك إرسال خطاب نوايا يوضح كيفية مساهمتك في مشاريعنا.',
'daily_standup' => 'الوقوف اليومي',
'daily_standup_desc' => 'يتم ضمان التواصل ومراقبة التقدم داخل الفريق من خلال اجتماعات قصيرة تعقد كل يوم.',
'flexible_projects' => 'مرنة وموجهة نحو المشروع',
'flexible_projects_desc' => 'المرونة ضرورية في مشاريعنا. أنت تشارك في مشاريع حقيقية تناسب قدراتك.',
'focus_on_development' => 'التركيز على التنمية',
'intent_letter' => 'خطاب النوايا',
];
+103
View File
@@ -0,0 +1,103 @@
<?php
return [
'title' => 'لوحة القيادة',
'navigation_label' => 'لوحة القيادة',
'widgets' =>
[
'system_stats' =>
[
'title' => 'إحصائيات النظام',
'description' => 'الوضع العام للمنصة',
],
'recent_activities' =>
[
'title' => 'أحدث الأنشطة',
'description' => 'المحتوى الذي تم إنشاؤه مؤخرًا',
],
'translation_progress' =>
[
'title' => 'حالة الترجمة',
'description' => 'تقدم الترجمة حسب اللغة',
],
'user_activity' =>
[
'title' => 'نشاط المستخدم',
'description' => 'المستخدمون النشطون والأدوار',
],
'content_overview' =>
[
'title' => 'ملخص المحتوى',
'description' => 'حالة الصفحة والترجمة',
],
],
'stats' =>
[
'total_users' => 'إجمالي المستخدمين',
'total_pages' => 'إجمالي الصفحات',
'total_translations' => 'الترجمة الشاملة',
'active_languages' => 'اللغة النشطة',
'published_pages' => 'الصفحة المنشورة',
'draft_translations' => 'مسودة الترجمة',
'pending_translations' => 'في انتظار الترجمة',
'published_translations' => 'الترجمة المنشورة',
],
'activities' =>
[
'recent_pages' => 'أحدث الصفحات',
'recent_translations' => 'أحدث الترجمات',
'recent_users' => 'المستخدمون النهائيون',
'no_activity' => 'لا يوجد نشاط بعد',
'view_all' => 'عرض الكل',
'creator' => 'تم إنشاؤها بواسطة',
],
'translation_progress' =>
[
'language' => 'ديل',
'native_name' => 'الاسم المحلي',
'total_fields' => 'المساحة الإجمالية',
'translated_fields' => 'المنطقة المترجمة',
'progress_percentage' => 'تقدم',
'status' => 'القاسي',
'last_updated' => 'التحديث الأخير',
'active' => 'نشيط',
'default' => 'تقصير',
],
'user_activity' =>
[
'active_users' => 'المستخدمون النشطون',
'user_roles' => 'أدوار المستخدم',
'last_login' => 'تسجيل الدخول الأخير',
'created_at' => 'الخلق',
'role' => 'دور',
'permissions' => 'القوى',
'username' => 'اسم المستخدم',
'email' => 'بريد إلكتروني',
'email_verified' => 'تم التحقق من البريد الإلكتروني',
'unverified' => 'غير مؤكد',
],
'content_overview' =>
[
'pages_by_status' => 'حالات الصفحة',
'translations_by_status' => 'حالات الترجمة',
'published' => 'نشرت',
'draft' => 'مسودة',
'review' => 'فحص',
'approved' => 'موافقة',
],
'messages' =>
[
'welcome' => 'مرحبا بكم في منصة الحمضيات!',
'system_healthy' => 'النظام يعمل بشكل صحيح',
'no_data' => 'لا توجد بيانات حتى الآن',
'loading' => 'تحميل...',
],
'actions' =>
[
'create_page' => 'صفحة جديدة',
'create_translation' => 'ترجمة جديدة',
'manage_users' => 'إدارة المستخدم',
'manage_languages' => 'إدارة اللغة',
'view_reports' => 'عرض التقارير',
],
];
+32
View File
@@ -0,0 +1,32 @@
<?php
return [
'navigation_group' => 'قوالب',
'navigation_label' => 'قوالب التذييل',
'model_label' => 'قالب التذييل',
'plural_model_label' => 'قوالب التذييل',
'section_general' => 'معلومات عامة',
'section_default_data' => 'القيم الافتراضية',
'section_default_data_desc' => 'يمكنك إدخال القيم الافتراضية للعناصر النائبة عند إنشاء قالب. سيتم تحميل هذه القيم تلقائيًا عند تحديد القالب على الصفحات.',
'field_title' => 'عنوان',
'field_html_content' => 'محتوى HTML',
'field_html_content_help' => 'تنسيق العنصر النائب: {tip.alan_adi} örn: {text.copyright}، {richtext.links}، {email.contact}',
'field_is_active' => 'نشيط',
'column_title' => 'عنوان',
'column_is_active' => 'نشيط',
'column_pages_count' => 'عدد الصفحات',
'column_created_at' => 'الخلق',
'column_updated_at' => 'تم التحديث',
'column_deleted_at' => 'الحذف',
'action_preview' => 'معاينة',
'create' => 'قالب تذييل جديد',
'edit' => 'تحرير قالب التذييل',
'view' => 'عرض قالب التذييل',
'delete' => 'سيل',
'restore' => 'يعيد',
'force_delete' => 'الحذف الدائم',
'created_successfully' => 'تم إنشاء قالب التذييل بنجاح.',
'updated_successfully' => 'تم تحديث قالب التذييل بنجاح.',
'deleted_successfully' => 'تم حذف قالب التذييل بنجاح.',
'restored_successfully' => 'تمت استعادة قالب التذييل بنجاح.',
];
+32
View File
@@ -0,0 +1,32 @@
<?php
return [
'navigation_group' => 'قوالب',
'navigation_label' => 'قوالب الرأس',
'model_label' => 'قالب الرأس',
'plural_model_label' => 'قوالب الرأس',
'section_general' => 'معلومات عامة',
'section_default_data' => 'القيم الافتراضية',
'section_default_data_desc' => 'يمكنك إدخال القيم الافتراضية للعناصر النائبة عند إنشاء قالب. سيتم تحميل هذه القيم تلقائيًا عند تحديد القالب على الصفحات.',
'field_title' => 'عنوان',
'field_html_content' => 'محتوى HTML',
'field_html_content_help' => 'تنسيق العنصر النائب: {tip.alan_adi} örn: {text.company_name}، {image.logo}، {email.contact}',
'field_is_active' => 'نشيط',
'column_title' => 'عنوان',
'column_is_active' => 'نشيط',
'column_pages_count' => 'عدد الصفحات',
'column_created_at' => 'الخلق',
'column_updated_at' => 'تم التحديث',
'column_deleted_at' => 'الحذف',
'action_preview' => 'معاينة',
'create' => 'قالب رأس جديد',
'edit' => 'تحرير قالب الرأس',
'view' => 'عرض قالب الرأس',
'delete' => 'سيل',
'restore' => 'يعيد',
'force_delete' => 'الحذف الدائم',
'created_successfully' => 'تم إنشاء قالب الرأس بنجاح.',
'updated_successfully' => 'تم تحديث قالب الرأس بنجاح.',
'deleted_successfully' => 'تم حذف قالب الرأس بنجاح.',
'restored_successfully' => 'تمت استعادة قالب الرأس بنجاح.',
];
+63
View File
@@ -0,0 +1,63 @@
<?php
return [
'title' => 'ديلر',
'navigation_label' => 'ديلر',
'model_label' => 'ديل',
'plural_model_label' => 'ديلر',
'create' => 'إنشاء لغة',
'edit' => 'تحرير اللغة',
'save' => 'يحفظ',
'cancel' => 'يلغي',
'delete' => 'ديل سيل',
'restore' => 'يعيد',
'force_delete' => 'حذف نهائيا',
'activate' => 'نشط وآخرون',
'deactivate' => 'السلبي و',
'set_default' => 'جعل الافتراضي',
'basic_information' => 'المعلومات الأساسية',
'settings' => 'إعدادات',
'code' => 'رمز اللغة',
'code_helper' => 'رمز اللغة ISO 639-1 (على سبيل المثال: tr، en، de)',
'name' => 'اسم اللغة',
'name_helper' => 'اسم اللغة الإنجليزية (على سبيل المثال: التركية)',
'native_name' => 'اسم اللغة المحلية',
'native_name_helper' => 'تهجئة اسم اللغة بلغتها الخاصة (مثل التركية)',
'flag' => 'علَم',
'flag_helper' => 'الإبلاغ عن الرموز التعبيرية أو رمز الرمز',
'direction' => 'اتجاه النص',
'direction_ltr' => 'من اليسار إلى اليمين (LTR)',
'direction_rtl' => 'من اليمين إلى اليسار (RTL)',
'is_active' => 'نشيط',
'is_active_helper' => 'هل يمكن استخدام اللغة في النظام؟',
'is_default' => 'اللغة الافتراضية',
'is_default_helper' => 'هل يجب أن تكون هذه اللغة هي اللغة الافتراضية؟',
'sort_order' => 'ترتيب',
'sort_order_helper' => 'عرض ترتيب اللغات',
'table_flag' => 'علَم',
'table_code' => 'شفرة',
'table_name' => 'اسم اللغة',
'table_is_active' => 'نشيط',
'table_is_default' => 'تقصير',
'table_direction' => 'الليل',
'table_sort_order' => 'صف',
'table_created_at' => 'الخلق',
'table_updated_at' => 'تم التحديث',
'table_deleted_at' => 'الحذف',
'created_successfully' => 'تم إنشاء اللغة بنجاح',
'created_successfully_body' => 'تمت إضافة اللغة الجديدة إلى النظام.',
'updated_successfully' => 'تم تحديث اللغة بنجاح',
'updated_successfully_body' => 'تم تحديث معلومات اللغة.',
'deleted_successfully' => 'تم حذف اللغة بنجاح',
'deleted_successfully_body' => 'تمت إزالة اللغة من النظام.',
'restored_successfully' => 'تمت استعادة اللغة بنجاح',
'activated_successfully' => 'تم تفعيل اللغة',
'deactivated_successfully' => 'اللغة سلبية',
'set_default_successfully' => 'تم تحديث اللغة الافتراضية',
'cannot_delete_default' => 'لا يمكن حذف اللغة الافتراضية',
'cannot_deactivate_default' => 'لا يمكن تعطيل اللغة الافتراضية',
'code_required' => 'مطلوب رمز اللغة',
'code_unique' => 'رمز اللغة هذا قيد الاستخدام بالفعل',
'name_required' => 'اسم اللغة مطلوب',
'native_name_required' => 'مطلوب اسم اللغة المحلية',
];
+30
View File
@@ -0,0 +1,30 @@
<?php
return [
'navigation_group' => 'قوالب',
'navigation_label' => 'قوالب القائمة',
'model_label' => 'قالب القائمة',
'plural_model_label' => 'قوالب القائمة',
'section_general' => 'معلومات عامة',
'section_structure' => 'هيكل القائمة',
'section_structure_desc' => 'يمكنك تعديل بنية القائمة عن طريق السحب والإفلات أو كتابتها كرمز بتنسيق JSON.',
'field_title' => 'عنوان',
'field_html_content' => 'كود HTML للقائمة',
'field_html_content_help' => 'يمكنك إضافة بنية القائمة إلى HTML باستخدام العنصر النائب {menu}. يتم إنشاء القائمة تلقائيًا باستخدام العرض المستند إلى الصفحات.',
'field_is_active' => 'نشيط',
'column_title' => 'عنوان',
'column_is_active' => 'نشيط',
'column_created_at' => 'الخلق',
'column_updated_at' => 'تم التحديث',
'column_deleted_at' => 'الحذف',
'create' => 'قالب القائمة الجديد',
'edit' => 'تحرير قالب القائمة',
'view' => 'عرض قالب القائمة',
'delete' => 'سيل',
'restore' => 'يعيد',
'force_delete' => 'الحذف الدائم',
'created_successfully' => 'تم إنشاء قالب القائمة بنجاح.',
'updated_successfully' => 'تم تحديث قالب القائمة بنجاح.',
'deleted_successfully' => 'تم حذف قالب القائمة بنجاح.',
'restored_successfully' => 'تمت استعادة قالب القائمة بنجاح.',
];
+142
View File
@@ -0,0 +1,142 @@
<?php
return [
'nav-home' => 'الصفحة الرئيسية',
'nav-about' => 'معلومات عنا',
'nav-services' => 'خدمات',
'nav-contact' => 'تواصل',
'title' => 'الصفحات',
'navigation_label' => 'الصفحات',
'model_label' => 'صفحة',
'plural_model_label' => 'الصفحات',
'create' => 'إنشاء صفحة جديدة',
'edit' => 'تحرير الصفحة',
'view' => 'منظر',
'save' => 'يحفظ',
'cancel' => 'يلغي',
'delete' => 'حذف الصفحة',
'restore' => 'استعادة الصفحة',
'force_delete' => 'حذف نهائيا',
'menu_tree_title' => 'هيكل القائمة',
'menu_refresh' => 'ينعش',
'menu_back_to_pages' => 'العودة إلى الصفحات',
'menu_tree_saved' => 'تم حفظ بنية القائمة بنجاح.',
'form_section_content' => 'محتويات',
'form_section_page_settings' => 'إعدادات الصفحة',
'form_section_seo_settings' => 'إعدادات تحسين محركات البحث',
'form_section_sections' => 'أقسام الصفحة',
'translations_section' => 'ترجمات',
'title_field' => 'عنوان',
'slug_field' => 'مسار URL',
'content_field' => 'محتويات',
'excerpt_field' => 'ملخص',
'featured_image_field' => 'صورة مميزة',
'author_field' => 'الكاتب',
'published_at_field' => 'تاريخ النشر',
'status_field' => 'القاسي',
'parent_field' => 'الصفحة العليا',
'template_field' => 'نموذج',
'sort_order_field' => 'صف',
'is_homepage_field' => 'الصفحة الرئيسية',
'show_in_menu_field' => 'عرض في القائمة',
'meta_title_field' => 'عنوان ميتا',
'meta_description_field' => 'وصف ميتا',
'slug_helper_text' => 'الجزء الذي سيظهر في عنوان URL. مثال: عنا',
'excerpt_helper_text' => 'ملخص الصفحة (500 حرف كحد أقصى)',
'featured_image_helper_text' => 'اختر صورة مميزة للصفحة',
'published_at_helper_text' => 'إذا تركت فارغة، يتم استخدام التاريخ الحالي',
'parent_helper_text' => 'حدد لجعل هذه الصفحة صفحة فرعية لصفحة أخرى',
'sort_order_helper_text' => 'ترتيب الظهور في القائمة',
'is_homepage_helper_text' => 'قم بتعيين هذه الصفحة كصفحة رئيسية',
'show_in_menu_helper_text' => 'هل يجب أن تظهر هذه الصفحة في القائمة؟',
'meta_title_helper_text' => 'عنوان لمحركات البحث (60 حرفًا كحد أقصى)',
'meta_description_helper_text' => 'وصف محركات البحث (160 حرفًا كحد أقصى)',
'status_draft' => 'مسودة',
'status_published' => 'تم نشره',
'status_archived' => 'مؤرشف',
'created_successfully' => 'تم إنشاء الصفحة بنجاح.',
'updated_successfully' => 'تم تحديث الصفحة بنجاح.',
'deleted_successfully' => 'تم حذف الصفحة بنجاح.',
'restored_successfully' => 'تمت استعادة الصفحة بنجاح.',
'table_column_featured_image' => 'صورة مميزة',
'table_column_title' => 'عنوان',
'table_column_slug' => 'مسار URL',
'table_column_status' => 'القاسي',
'table_column_author' => 'الكاتب',
'table_column_published_at' => 'تاريخ النشر',
'table_column_parent' => 'الصفحة العليا',
'table_column_template' => 'نموذج',
'table_column_is_homepage' => 'الصفحة الرئيسية',
'table_column_show_in_menu' => 'عرض في القائمة',
'table_column_sort_order' => 'ترتيب',
'table_column_created_at' => 'تاريخ الإنشاء',
'table_column_updated_at' => 'تاريخ التحديث',
'template_default' => 'تقصير',
'template_landing' => 'الصفحة المقصودة',
'template_blog' => 'مدونة',
'template_contact' => 'تواصل',
'copy_url_message' => 'تم نسخ عنوان URL',
'title_required' => 'حقل العنوان مطلوب.',
'slug_required' => 'حقل مسار URL مطلوب.',
'slug_unique' => 'مسار URL هذا قيد الاستخدام بالفعل.',
'content_required' => 'حقل المحتوى مطلوب.',
'sections_field' => 'أقسام الصفحة',
'sections_helper_text' => 'أضف أقسامًا ديناميكية لصفحتك',
'section_type' => 'نوع القسم',
'section_type_helper' => 'حدد نوع القسم الذي تريد إضافته',
'section_data' => 'بيانات القسم',
'section_data_helper' => 'أدخل البيانات المطلوبة لهذا القسم',
'section_add' => 'إضافة قسم جديد',
'section_type_hero' => 'البطل (آنا بانر)',
'section_type_features' => 'سمات',
'section_type_stats' => 'إحصائيات',
'section_type_cta' => 'التنشيط',
'section_type_content' => 'محتويات',
'section_type_gallery' => 'معرض',
'section_type_testimonials' => 'مراجع',
'section_type_team' => 'فريق',
'section_type_pricing' => 'التسعير',
'section_type_faq' => 'نظام الضمان الاجتماعي',
'section_type_contact' => 'تواصل',
'section_type_custom' => 'خاص',
'section_data_key' => 'مفتاح',
'section_data_key_helper' => 'مفتاح البيانات (على سبيل المثال: العنوان، العنوان الفرعي، الصورة)',
'section_data_value_type' => 'نوع القيمة',
'section_data_value' => 'قيمة',
'section_data_add_field' => 'إضافة حقل جديد',
'value_type_text' => 'نص',
'value_type_textarea' => 'نص طويل',
'value_type_html' => 'HTML',
'value_type_markdown' => 'تخفيض السعر',
'value_type_richtext' => 'نص غني',
'value_type_image' => 'مرئي',
'value_type_file' => 'ملف',
'value_type_url' => 'عنوان URL',
'value_type_email' => 'بريد إلكتروني',
'value_type_phone' => 'هاتف',
'value_type_number' => 'رقم',
'value_type_boolean' => 'نعم/لا',
'value_type_color' => 'لون',
'value_type_date' => 'تاريخ',
'value_type_datetime' => 'التاريخ والوقت',
'value_type_array' => 'أوبرا الصابون',
'value_type_json' => 'JSON',
'form_section_header_template' => 'قالب الرأس',
'form_section_header_template_desc' => 'اختر قالب الرأس الديناميكي لأعلى الصفحة',
'header_template_field' => 'قالب الرأس',
'form_section_template_sections' => 'أقسام القالب',
'form_section_template_sections_desc' => 'إضافة أقسام القالب الديناميكي للصفحة',
'template_sections_field' => 'أقسام القالب',
'section_template_field' => 'قالب القسم',
'add_template_section' => 'إضافة قسم',
'template_section' => 'قسم القالب',
'form_section_footer_template' => 'قالب التذييل',
'form_section_footer_template_desc' => 'اختر قالب تذييل ديناميكي لأسفل الصفحة',
'footer_template_field' => 'قالب التذييل',
'bulk_action_duplicate' => 'تم تحديد تكرار',
'bulk_action_publish' => 'نشر المحدد',
'bulk_action_draft' => 'تم تحديد المسودة',
'bulk_duplicated_successfully' => ':تم نسخ الصفحة بنجاح.',
'bulk_published_successfully' => ':تم نشر الصفحة بنجاح.',
'bulk_drafted_successfully' => 'تمت صياغة صفحة :count بنجاح.',
];
+35
View File
@@ -0,0 +1,35 @@
<?php
return [
'title' => 'متغيرات العنصر النائب',
'click_to_insert' => 'انقر للإضافة إلى المحرر',
'special_placeholders' => 'العناصر النائبة المخصصة',
'custom_placeholders' => 'العناصر النائبة المخصصة',
'search_placeholder' => 'آرا العنصر النائب...',
'no_results' => 'لم يتم العثور على نتائج البحث',
'type_text' => 'نص',
'type_email' => 'بريد إلكتروني',
'type_url' => 'عنوان URL',
'type_tel' => 'هاتف',
'type_number' => 'رقم',
'type_textarea' => 'نص متعدد الأسطر',
'type_richtext' => 'نص غني',
'type_markdown' => 'تخفيض السعر',
'type_code' => 'شفرة',
'type_date' => 'تاريخ',
'type_datetime' => 'التاريخ والوقت',
'type_time' => 'لحظة',
'type_image' => 'صورة',
'type_images' => 'الصور (متعددة)',
'type_file' => 'ملف',
'type_files' => 'الملفات (متعددة)',
'type_select' => 'تصويت',
'type_multiselect' => 'تحديد متعدد',
'type_checkbox' => 'خانة الاختيار',
'type_radio' => 'زر الراديو',
'type_toggle' => 'تشغيل/إيقاف',
'type_color' => 'لون',
'type_tags' => 'العلامات',
'type_setting' => 'تعديل',
'type_custom' => 'خاص',
];
+17
View File
@@ -0,0 +1,17 @@
<?php
return [
'navigation_group' => 'المنتجات والخدمات',
'menu_label' => 'فئات',
'model_label' => 'فئة',
'plural_model_label' => 'فئات',
'general_section' => 'معلومات عامة',
'slug' => 'سبيكة (مسار الارتباط)',
'parent_category' => 'الفئة الأعلى',
'sort_order' => 'ترتيب',
'is_active' => 'نشيط',
'translations_section' => 'ترجمات',
'title' => 'عنوان',
'parent' => 'الفئة الأعلى',
'created_at' => 'تاريخ الإنشاء',
];
+61
View File
@@ -0,0 +1,61 @@
<?php
return [
'navigation_group' => 'المنتجات والخدمات',
'menu_label' => 'قائمة المنتجات والخدمات',
'model_label' => 'المنتج/الخدمة',
'plural_model_label' => 'المنتجات والخدمات',
'general_section' => 'معلومات عامة',
'slug' => 'سبيكة (مسار الارتباط)',
'type' => 'يكتب',
'product' => 'منتج',
'service' => 'خدمة',
'category' => 'فئة',
'hero_image' => 'صورة الغلاف',
'view_template' => 'مسار عرض مخصص',
'view_template_placeholder' => 'على سبيل المثال: front.products.special-page',
'view_template_helper' => 'اتركه فارغًا لاستخدام القالب الافتراضي.',
'external_url' => 'عنوان URL الخارجي',
'external_url_helper' => 'إذا كان ممتلئا، يمكنك الذهاب إلى هذا الرابط في علامة التبويب الجديدة في القائمة.',
'sort_order' => 'ترتيب',
'is_active' => 'نشيط',
'translations_section' => 'ترجمات',
'content' => 'محتويات',
'title' => 'عنوان',
'created_at' => 'تاريخ الإنشاء',
'landing_page_section' => 'قالب الصفحة المقصودة',
'hero_section' => 'قسم البطل',
'hero_slogan' => 'شعار آنا',
'hero_sub_slogan' => 'كل شيء شعار',
'app_store_link' => 'روابط متجر التطبيقات',
'google_play_link' => 'جوجل بلاي لينكى',
'hero_featured_image' => 'صورة مميزة',
'hero_background_image' => 'صورة خلفية البطل',
'hero_background_image_helper' => 'حدد صورة الخلفية لاستخدامها في قسم البطل',
'select_background' => 'اختر الخلفية...',
'app_features_section' => 'مميزات التطبيق',
'features' => 'سمات',
'add_feature' => 'إضافة ميزة',
'feature' => 'ميزة',
'feature_icon' => 'أيقونة',
'feature_title' => 'عنوان الميزة',
'feature_description' => 'وصف الميزة',
'how_it_works_section' => 'كيف يعمل',
'how_it_works_image' => 'مرئي',
'download_form_label' => 'تحميل آداب النموذج',
'download_form_label_placeholder' => 'قم بتنزيل التطبيق',
'steps' => 'خطوات',
'step' => 'اسمي',
'step_number' => 'رقم الخطوة',
'step_title' => 'عنوان الخطوة',
'step_description' => 'وصف الخطوة',
'video_section' => 'فيديو',
'youtube_video_id' => 'معرف فيديو يوتيوب',
'youtube_video_id_helper' => 'المعرّف في عنوان URL لفيديو YouTube (على سبيل المثال: 165101721)',
'faq_section' => 'الأسئلة المتداولة',
'faqs' => 'نظام الضمان الاجتماعي',
'add_faq' => 'إس إس إس إكلي',
'faq' => 'نظام الضمان الاجتماعي',
'faq_question' => 'سؤال',
'faq_answer' => 'رد',
];
+31
View File
@@ -0,0 +1,31 @@
<?php
return [
'navigation_group' => 'قوالب',
'navigation_label' => 'قوالب القسم',
'model_label' => 'قالب القسم',
'plural_model_label' => 'قوالب القسم',
'section_general' => 'معلومات عامة',
'section_default_data' => 'القيم الافتراضية',
'section_default_data_desc' => 'يمكنك إدخال القيم الافتراضية للعناصر النائبة عند إنشاء قالب. سيتم تحميل هذه القيم تلقائيًا عند تحديد القالب على الصفحات.',
'field_title' => 'عنوان',
'field_html_content' => 'محتوى HTML',
'field_html_content_help' => 'تنسيق العنصر النائب: {tip.alan_adi} örn: {text.title}، {richtext.content}، {image.banner}',
'field_is_active' => 'نشيط',
'column_title' => 'عنوان',
'column_is_active' => 'نشيط',
'column_created_at' => 'الخلق',
'column_updated_at' => 'تم التحديث',
'column_deleted_at' => 'الحذف',
'action_preview' => 'معاينة',
'create' => 'قالب القسم الجديد',
'edit' => 'تحرير قالب القسم',
'view' => 'عرض قالب القسم',
'delete' => 'سيل',
'restore' => 'يعيد',
'force_delete' => 'الحذف الدائم',
'created_successfully' => 'تم إنشاء قالب القسم بنجاح.',
'updated_successfully' => 'تم تحديث قالب القسم بنجاح.',
'deleted_successfully' => 'تم حذف قالب القسم بنجاح.',
'restored_successfully' => 'تمت استعادة قالب القسم بنجاح.',
];
+111
View File
@@ -0,0 +1,111 @@
<?php
return [
'title' => 'إعدادات',
'navigation_label' => 'إعدادات',
'model_label' => 'تعديل',
'plural_model_label' => 'إعدادات',
'create' => 'إنشاء إعداد جديد',
'edit' => 'تحرير الإعداد',
'delete' => 'حذف الإعداد',
'restore' => 'استعادة الإعداد',
'force_delete' => 'حذف الإعداد نهائيًا',
'save' => 'يحفظ',
'cancel' => 'يلغي',
'key' => 'مفتاح',
'key_helper' => 'مفتاح الإعداد (على سبيل المثال: site_name، site_email)',
'value' => 'قيمة',
'value_helper' => 'قيمة الإعداد',
'type' => 'نصيحة',
'type_helper' => 'نوع القيمة',
'group' => 'مجموعة',
'group_helper' => 'مجموعة الإعدادات (على سبيل المثال: عام، البريد الإلكتروني، تحسين محركات البحث)',
'label' => 'تذكرة',
'label_helper' => 'تسمية سهلة الاستخدام',
'description' => 'توضيح',
'description_helper' => 'وصف الإعداد',
'is_public' => 'عام',
'is_public_helper' => 'هل هذا الإعداد عام؟',
'is_active' => 'نشيط',
'is_active_helper' => 'هل هذا الإعداد نشط؟',
'created_successfully' => 'تم إنشاء الإعداد بنجاح.',
'updated_successfully' => 'تم تحديث الإعداد بنجاح.',
'deleted_successfully' => 'تم حذف الإعداد بنجاح.',
'restored_successfully' => 'تمت استعادة الإعداد بنجاح.',
'force_deleted_successfully' => 'تم حذف الإعداد نهائيًا.',
'table_key' => 'مفتاح',
'table_value' => 'قيمة',
'table_type' => 'نصيحة',
'table_group' => 'مجموعة',
'table_label' => 'تذكرة',
'table_public' => 'عام',
'table_active' => 'نشيط',
'table_created_at' => 'الخلق',
'table_updated_at' => 'تم التحديث',
'type_string' => 'نص',
'type_text' => 'نص طويل',
'type_boolean' => 'نعم/لا',
'type_integer' => 'عدد صحيح',
'type_float' => 'رقم عشري',
'type_array' => 'أوبرا الصابون',
'type_json' => 'JSON',
'type_file' => 'ملف',
'type_date' => 'تاريخ',
'type_datetime' => 'التاريخ والوقت',
'type_color_picker' => 'منتقي الألوان',
'type_code_editor' => 'محرر الكود',
'type_rich_editor' => 'محرر النص الغني',
'type_markdown_editor' => 'محرر تخفيض السعر',
'type_tags_input' => 'إدخال التسمية',
'type_checkbox_list' => 'تحديد متعدد',
'type_radio' => 'زر الراديو',
'type_toggle_buttons' => 'تبديل الأزرار',
'type_slider' => 'المنزلق',
'type_key_value' => 'أزواج القيمة الرئيسية',
'group_general' => 'عام',
'group_theme' => 'هو',
'group_localization' => 'التعريب',
'group_email' => 'بريد إلكتروني',
'group_seo' => 'تحسين محركات البحث',
'group_social' => 'وسائل التواصل الاجتماعي',
'group_security' => 'حماية',
'group_upload' => 'تحميل الملف',
'group_payment' => 'قسط',
'group_notification' => 'إشعار',
'group_cache' => 'مخبأ',
'group_api' => 'واجهة برمجة التطبيقات',
'group_logging' => 'التسجيل',
'group_performance' => 'أداء',
'group_integration' => 'اندماج',
'group_other' => 'آخر',
'key_required' => 'الحقل الرئيسي مطلوب.',
'key_unique' => 'هذا المفتاح قيد الاستخدام بالفعل.',
'key_regex' => 'يمكن أن يحتوي المفتاح فقط على أحرف وأرقام وشرطات سفلية وشرطات.',
'value_required' => 'حقل القيمة مطلوب.',
'type_required' => 'حقل النوع مطلوب.',
'label_required' => 'حقل التسمية مطلوب.',
'array_key' => 'مفتاح',
'array_key_placeholder' => 'مفتاح السلسلة (على سبيل المثال: الاسم، البريد الإلكتروني)',
'array_value' => 'قيمة',
'array_value_placeholder' => 'قيمة السلسلة',
'array_description' => 'توضيح',
'array_description_placeholder' => 'وصف لهذا البند',
'array_active' => 'نشيط',
'array_add_item' => 'إضافة عنصر',
'checkbox_option_1' => 'الخيار 1',
'checkbox_option_2' => 'الخيار 2',
'checkbox_option_3' => 'الخيار 3',
'radio_option_1' => 'الخيار 1',
'radio_option_2' => 'الخيار 2',
'radio_option_3' => 'الخيار 3',
'toggle_option_1' => 'الخيار 1',
'toggle_option_2' => 'الخيار 2',
'toggle_option_3' => 'الخيار 3',
'filter_group' => 'حسب المجموعة',
'filter_type' => 'حسب النوع',
'filter_active' => 'نشيط',
'filter_public' => 'عام',
'tabs_title' => 'مجموعات الإعداد',
'settings_count' => 'تعديل',
'all_settings' => 'جميع الإعدادات',
];
+13
View File
@@ -0,0 +1,13 @@
<?php
return [
'title' => 'دليل المستخدم',
'navigation_label' => 'دليل المستخدم',
'menu_title' => 'أدلة',
'search_placeholder' => 'البحث عن الدليل...',
'no_guides' => 'لا يوجد ملف يدوي حتى الآن.',
'no_guide_selected' => 'لم يتم تحديد أي دليل',
'select_guide_from_menu' => 'الرجاء اختيار دليل من القائمة اليسرى.',
'last_updated' => 'التحديث الأخير',
'no_results' => 'لم يتم العثور على نتائج بحث.',
];
+60
View File
@@ -0,0 +1,60 @@
<?php
return [
'title' => 'إدارة المستخدم',
'navigation_label' => 'المستخدمين',
'model_label' => 'مستخدم',
'plural_model_label' => 'المستخدمين',
'create' => 'إنشاء مستخدم',
'edit' => 'تحرير المستخدم',
'delete' => 'حذف المستخدم',
'restore' => 'استعادة المستخدم',
'force_delete' => 'حذف المستخدم نهائيًا',
'change_password' => 'تغيير كلمة المرور',
'name' => 'Ad Soyad',
'email' => 'بريد إلكتروني',
'password' => 'كلمة المرور',
'password_confirmation' => 'تكرار كلمة المرور',
'roles' => 'أسطوانة',
'permissions' => 'الأذونات',
'is_active' => 'نشيط',
'email_verified_at' => 'تاريخ التحقق من البريد الإلكتروني',
'created_successfully' => 'تم إنشاء المستخدم بنجاح.',
'updated_successfully' => 'تم تحديث المستخدم بنجاح.',
'deleted_successfully' => 'تم حذف المستخدم بنجاح.',
'restored_successfully' => 'تمت استعادة المستخدم بنجاح.',
'table_name' => 'Ad Soyad',
'table_email' => 'بريد إلكتروني',
'table_roles' => 'أسطوانة',
'table_status' => 'القاسي',
'table_created_at' => 'تاريخ الإنشاء',
'table_updated_at' => 'تاريخ التحديث',
'status_active' => 'نشيط',
'status_inactive' => 'سلبي',
'name_required' => 'حقل الاسم واللقب إلزامي.',
'email_required' => 'حقل البريد الإلكتروني مطلوب.',
'email_unique' => 'عنوان البريد الإلكتروني هذا قيد الاستخدام بالفعل.',
'password_required' => 'حقل كلمة المرور مطلوب.',
'password_min' => 'يجب أن تتكون كلمة المرور من 8 أحرف على الأقل.',
'password_confirmation_required' => 'حقل تكرار كلمة المرور مطلوب.',
'password_confirmation_same' => 'تكرار كلمة المرور لا يطابق كلمة المرور.',
'roles_title' => 'إدارة الأدوار',
'roles_navigation_label' => 'أسطوانة',
'roles_model_label' => 'دور',
'roles_plural_model_label' => 'أسطوانة',
'role_name' => 'اسم الدور',
'role_guard_name' => 'اسم الحرس',
'role_permissions' => 'الأذونات',
'role_created_successfully' => 'تم إنشاء الدور بنجاح.',
'role_updated_successfully' => 'تم تحديث الدور بنجاح.',
'role_deleted_successfully' => 'تم حذف الدور بنجاح.',
'permissions_title' => 'إدارة الإجازات',
'permissions_navigation_label' => 'الأذونات',
'permissions_model_label' => 'إذن',
'permissions_plural_model_label' => 'الأذونات',
'permission_name' => 'اسم التصريح',
'permission_guard_name' => 'اسم الحرس',
'permission_created_successfully' => 'تم إنشاء الإذن بنجاح.',
'permission_updated_successfully' => 'تم تحديث الإذن بنجاح.',
'permission_deleted_successfully' => 'تم حذف الإذن بنجاح.',
];
+1 -1
View File
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" dir="{{ function_exists('current_language') && current_language() ? current_language()->direction : 'ltr' }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
+1 -1
View File
@@ -3,7 +3,7 @@
$favicon_path = setting('site_favicon');
?>
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<html lang="{{ app()->getLocale() }}" dir="{{ function_exists('current_language') && current_language() ? current_language()->direction : 'ltr' }}">
<head>
<meta charset="utf-8">
+238
View File
@@ -0,0 +1,238 @@
<?php
define('LARAVEL_START', microtime(true));
require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();
use App\Models\Language;
use App\Models\SiteTranslation;
use App\Models\Translation;
echo "=== STARTING QATAR (ARABIC) LOCALIZATION TRANSLATOR ===\n";
// Helper function to translate text using Google Translate
function translate_text_to_ar($text) {
if (empty($text) || is_numeric($text)) {
return $text;
}
// If it's already Arabic, don't translate
if (preg_match('/[\x{0600}-\x{06FF}]/u', $text)) {
return $text;
}
$url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=ar&dt=t&q=" . urlencode($text);
$options = [
"http" => [
"header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.0.0 Safari/537.36\r\n"
]
];
$context = stream_context_create($options);
for ($attempt = 1; $attempt <= 3; $attempt++) {
$response = @file_get_contents($url, false, $context);
if ($response !== false) {
$json = json_decode($response, true);
if (isset($json[0])) {
$translated = "";
foreach ($json[0] as $part) {
if (isset($part[0])) {
$translated .= $part[0];
}
}
if (!empty($translated)) {
return $translated;
}
}
}
usleep(300000); // 300ms delay between retries
}
return $text; // Fallback
}
// 1. STEP: Activate Arabic (ar) language in Database with Qatar Flag
echo "\n--- Step 1: Configuring Arabic Language in Database ---\n";
$arabic = Language::where('code', 'ar')->first();
if ($arabic) {
$arabic->update([
'is_active' => true,
'flag' => '🇶🇦', // Qatar Flag
'direction' => 'rtl',
]);
echo "Arabic language ('ar') activated and configured with Qatar flag 🇶🇦 (RTL direction).\n";
} else {
Language::create([
'code' => 'ar',
'name' => 'Arabic',
'native_name' => 'العربية',
'flag' => '🇶🇦', // Qatar Flag
'direction' => 'rtl',
'is_active' => true,
'is_default' => false,
'sort_order' => 5,
]);
echo "Arabic language ('ar') created, activated and configured with Qatar flag 🇶🇦 (RTL direction).\n";
}
// 2. STEP: Translate PHP Language Files
echo "\n--- Step 2: Translating PHP Language Files (TR to AR) ---\n";
$trPath = __DIR__ . '/lang/tr';
$arPath = __DIR__ . '/lang/ar';
if (!is_dir($arPath)) {
mkdir($arPath, 0755, true);
echo "Created directory: lang/ar\n";
}
$files = glob($trPath . '/*.php');
foreach ($files as $file) {
$filename = basename($file);
echo "Processing PHP lang file: $filename\n";
$trArray = include $file;
$arFile = $arPath . '/' . $filename;
$arArray = [];
if (file_exists($arFile)) {
$arArray = include $arFile;
}
// Helper function for recursive array translation
if (!function_exists('translate_value_recursive')) {
function translate_value_recursive($val, $arVal = null, &$count = 0) {
if (is_array($val)) {
$res = [];
foreach ($val as $k => $v) {
$arSubVal = isset($arVal[$k]) ? $arVal[$k] : null;
$res[$k] = translate_value_recursive($v, $arSubVal, $count);
}
return $res;
} else {
if (!empty($arVal)) {
return $arVal;
}
$translated = translate_text_to_ar($val);
$count++;
usleep(50000); // 50ms delay
return $translated;
}
}
}
$translatedCount = 0;
$translatedArray = translate_value_recursive($trArray, $arArray, $translatedCount);
// Save back to lang/ar/filename.php
$content = "<?php\n\nreturn " . var_export($translatedArray, true) . ";\n";
$content = str_replace("array (", "[", $content);
$content = str_replace("),", "],", $content);
if (substr($content, -3) === ");\n") {
$content = substr($content, 0, -3) . "];\n";
}
file_put_contents($arFile, $content);
echo "Saved lang/ar/$filename. Translated $translatedCount new keys.\n";
}
// 3. STEP: Translate Database SiteTranslations (site_translations table)
echo "\n--- Step 3: Translating Site Translations Table (330+ records) ---\n";
$siteTranslations = SiteTranslation::all();
echo "Found " . $siteTranslations->count() . " records in site_translations.\n";
$translatedCount = 0;
foreach ($siteTranslations as $st) {
$translations = $st->translations ?? [];
if (!isset($translations['ar']) || empty($translations['ar'])) {
// Find source text
$sourceText = $st->key;
if (isset($translations['tr']) && !empty($translations['tr'])) {
$sourceText = $translations['tr'];
} elseif (isset($translations['en']) && !empty($translations['en'])) {
$sourceText = $translations['en'];
}
$translatedText = translate_text_to_ar($sourceText);
$translations['ar'] = $translatedText;
$st->translations = $translations;
$st->save();
$translatedCount++;
if ($translatedCount % 20 === 0) {
echo "Translated $translatedCount site translation records...\n";
}
usleep(60000); // 60ms delay
}
}
echo "Completed Step 3. Translated $translatedCount site translation keys to Arabic.\n";
// 4. STEP: Translate Database Model Translations (translations table)
echo "\n--- Step 4: Translating Model Translations Table (Pages, Products, Blogs, Categories) ---\n";
// Get all unique model + field combinations that have translations
$uniqueTranslations = Translation::select('translatable_type', 'translatable_id', 'field_name')
->groupBy('translatable_type', 'translatable_id', 'field_name')
->get();
echo "Found " . $uniqueTranslations->count() . " unique translatable model fields.\n";
$modelTranslationsCount = 0;
foreach ($uniqueTranslations as $ut) {
// Check if Arabic translation already exists
$arTransExists = Translation::where('translatable_type', $ut->translatable_type)
->where('translatable_id', $ut->ut_id ?? $ut->translatable_id)
->where('field_name', $ut->field_name)
->where('language_code', 'ar')
->exists();
if ($arTransExists) {
continue;
}
// Find the best source translation
$sourceTrans = Translation::where('translatable_type', $ut->translatable_type)
->where('translatable_id', $ut->translatable_id)
->where('field_name', $ut->field_name)
->whereIn('language_code', ['tr', 'en', 'de', 'se'])
->orderByRaw("FIELD(language_code, 'tr', 'en', 'de', 'se') ASC")
->first();
if (!$sourceTrans || empty($sourceTrans->field_value)) {
continue;
}
$sourceText = $sourceTrans->field_value;
$translatedText = translate_text_to_ar($sourceText);
// Create new Arabic translation record
Translation::create([
'translatable_type' => $ut->translatable_type,
'translatable_id' => $ut->translatable_id,
'language_code' => 'ar',
'field_name' => $ut->field_name,
'field_value' => $translatedText,
'status' => 'published',
'version' => $sourceTrans->version ?? 1,
'created_by' => $sourceTrans->created_by,
'updated_by' => $sourceTrans->updated_by,
'approved_by' => $sourceTrans->approved_by,
'approved_at' => now(),
'published_at' => now(),
]);
$modelTranslationsCount++;
if ($modelTranslationsCount % 20 === 0) {
echo "Translated $modelTranslationsCount model fields...\n";
}
usleep(80000); // 80ms politeness delay
}
echo "Completed Step 4. Generated $modelTranslationsCount new Arabic model translation records.\n";
echo "\n=== ALL TRANSLATIONS COMPLETED SUCCESSFULLY ===\n";